From f2275f752d48f846527af642e9a56a1986b35a27 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 24 Apr 2026 16:01:05 +0200 Subject: [PATCH] =?UTF-8?q?feat(writing):=20M11=20=E2=80=94=20adopt=20the?= =?UTF-8?q?=20unified=20visibility=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The backing for visibility was already in place from M2 (draft.visibility stamped on create via defaultVisibilityFor, draftsStore.setVisibility mints/clears unlistedToken and emits VisibilityChanged), so M11 is just the UI step that puts it in front of the user. - from @mana/shared-privacy sits in the meta-row of DetailView, mirroring the library pattern. onChange calls draftsStore.setVisibility — no new store method needed. - Draft type + toDraft converter now surface `unlistedToken` so the UI can render a share row when visibility === 'unlisted'. Token is displayed verbatim + "Kopieren"-button because the public read-URL for drafts ships with M10 (Publish-Hooks); a tooltip makes that explicit so the user doesn't expect a working link yet. With this, Writing is now consistent with the Library / Picture / Calendar / Todo / Goals / Places / Recipes / Wardrobe pilot group. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../web/src/lib/modules/writing/queries.ts | 1 + .../apps/web/src/lib/modules/writing/types.ts | 2 + .../modules/writing/views/DetailView.svelte | 67 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/apps/mana/apps/web/src/lib/modules/writing/queries.ts b/apps/mana/apps/web/src/lib/modules/writing/queries.ts index 5d65bd468..d8ffcf771 100644 --- a/apps/mana/apps/web/src/lib/modules/writing/queries.ts +++ b/apps/mana/apps/web/src/lib/modules/writing/queries.ts @@ -36,6 +36,7 @@ export function toDraft(local: LocalDraft): Draft { publishedTo: local.publishedTo ?? [], isFavorite: local.isFavorite ?? false, visibility: local.visibility ?? 'space', + unlistedToken: local.unlistedToken ?? null, createdAt: local.createdAt ?? now, updatedAt: local.updatedAt ?? now, }; diff --git a/apps/mana/apps/web/src/lib/modules/writing/types.ts b/apps/mana/apps/web/src/lib/modules/writing/types.ts index 83b55aa5d..4886b7267 100644 --- a/apps/mana/apps/web/src/lib/modules/writing/types.ts +++ b/apps/mana/apps/web/src/lib/modules/writing/types.ts @@ -210,6 +210,8 @@ export interface Draft { references: DraftReference[]; currentVersionId: string | null; visibility: VisibilityLevel; + /** 32-char token minted on first flip to 'unlisted'. Null otherwise. */ + unlistedToken: string | null; publishedTo: DraftPublishTarget[]; isFavorite: boolean; createdAt: string; diff --git a/apps/mana/apps/web/src/lib/modules/writing/views/DetailView.svelte b/apps/mana/apps/web/src/lib/modules/writing/views/DetailView.svelte index 33664be97..17630b049 100644 --- a/apps/mana/apps/web/src/lib/modules/writing/views/DetailView.svelte +++ b/apps/mana/apps/web/src/lib/modules/writing/views/DetailView.svelte @@ -8,6 +8,7 @@ -->