From 0b4c47ae6482b13f80740a99fa0bbf5e2cedfa2e Mon Sep 17 00:00:00 2001 From: zeudev Date: Tue, 20 Jan 2026 02:05:50 -0800 Subject: [PATCH] redesign PublicationCard, init toggleSubscription --- bun.lockb | Bin 118689 -> 119595 bytes package.json | 1 + src/app.css | 6 + src/lib/components/PublicationCard.svelte | 177 +++++++++++++++++++--- src/lib/utils.ts | 34 ++++- src/routes/+layout.svelte | 20 ++- src/routes/+layout.ts | 6 +- src/routes/+page.svelte | 34 ++++- static/AzeretMono-Variable.woff2 | Bin 0 -> 46848 bytes 9 files changed, 241 insertions(+), 37 deletions(-) create mode 100644 static/AzeretMono-Variable.woff2 diff --git a/bun.lockb b/bun.lockb index 4232f44825925efb76bb8d892028ad06697a9b4a..728dce7effdfa3e5db02174e1cf89ffa5b05bea8 100755 GIT binary patch delta 20707 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 diff --git a/package.json b/package.json index b2d531c..d858168 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@oslojs/encoding": "^1.1.0", "@tailwindcss/vite": "^4.1.13", "@tanstack/svelte-query": "^6.0.9", + "@tanstack/svelte-query-devtools": "^6.0.3", "drizzle-orm": "^0.44.5", "postgres": "^3.4.7", "quickslice-client-js": "^0.3.0", diff --git a/src/app.css b/src/app.css index 9a8e553..2cbee25 100644 --- a/src/app.css +++ b/src/app.css @@ -10,9 +10,15 @@ src: url("/Comico-Regular.woff2"); } +@font-face { + font-family: "Azeret"; + src: url("/AzeretMono-Variable.woff2"); +} + @theme { --font-neco: "Neco"; --font-comico: "Comico"; + --font-azeret: "Azeret"; } @utility border-groove { diff --git a/src/lib/components/PublicationCard.svelte b/src/lib/components/PublicationCard.svelte index e4ccfd2..7c4677e 100644 --- a/src/lib/components/PublicationCard.svelte +++ b/src/lib/components/PublicationCard.svelte @@ -1,11 +1,27 @@ -{#if countQuery.isFetching} -

Fetching...

-{:else if countQuery.isSuccess} - {#if countQuery.data.documents > 0 || showEmpty} -
  • - {publication.value.name} - Go to Record -
    -

    {countQuery.data.documents} Documents

    -

    {countQuery.data.subscribers} Subscribers

    +
    +
    + {#if publication.value.icon} + {publication.value.name} + {/if} +

    + {publication.value.name} +

    + + by @{publication.actorHandle} + +

    + {publication.value.description} +

    +
    + +
    +
    + + {documents} + + + Documents + โ†— +
    -
  • - {/if} -{/if} + + + diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 5b8767d..89ffb89 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -9,10 +9,17 @@ export function parseAtUri(uri: string) { } } +export type MiniDoc = { + did: string; + handle: string; + pds: string; + signing_key: string; +} + export async function resolveHandle(handle: string) { const result = await fetch(`https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=${encodeURIComponent(handle)}`) const info = await result.json(); - return info; + return info as MiniDoc; } export type Node = { @@ -23,15 +30,36 @@ export type Node = { actorHandle: string; } +export type ATBlob = { + $type: string; + ref: { $link: string; }; + mimeType: string; + size: number; +} + +export type StandardSiteThemeColorRGB = { + $type: "site.standard.theme.color#rgb", + b: number; + g: number; + r: number; +} + export type PublicationNode = Node & { value: { url: string; name: string; description: string; - icon?: string; + icon?: ATBlob; preferences?: { showInDiscover?: boolean; hideProfile?: boolean; - } + }; + basicTheme?: { + $type: "site.standard.theme.basic", + background: StandardSiteThemeColorRGB; + foreground: StandardSiteThemeColorRGB; + accent: StandardSiteThemeColorRGB; + accentForeground: StandardSiteThemeColorRGB; + }; }} export type DocumentNode = Node & { value: { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 2119b80..cda58e0 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,11 +1,16 @@ -
    + +
    - potatonet.app + ๐Ÿฅ” potatonet -
    -