mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:41:09 +02:00
Second consumer of @mana/shared-privacy. Picture boards now carry a VisibilityLevel the owner flips from the board detail page via <VisibilityPicker>; the website embed resolver gates hard on canEmbedOnWebsite. This unblocks the picture.board embed — it had been effectively dead because the legacy `isPublic` bool had no UI toggle and thus stayed false for every row in practice. Soft migration (per the repo's soft-first/hard-follow-up rule). The legacy `isPublic` field is marked @deprecated on both LocalBoard and LocalImage but kept on the record so any reader that slipped through the grep still sees sane data. Converters fall back to `isPublic === true ? 'public' : 'private'` when visibility is missing, so legacy rows (pre-M3) route through the new gate with the same intent. Hard follow-up drops the field in a later PR once callers are clean. Changes: - picture/types: visibility + unlistedToken + visibilityChangedAt + visibilityChangedBy on LocalImage and LocalBoard; Image and Board (plaintext UI types) expose `visibility: VisibilityLevel` as a required field - picture/queries: toImage + toBoard forward visibility with the legacy-isPublic fallback described above - picture/stores/boards: createBoard stamps defaultVisibilityFor(activeSpace.type) instead of isPublic: false; duplicateBoard resets the clone to the space default (a copy of a public board does NOT auto-publish); new setVisibility(id, level) mints/clears the unlisted token on the transition boundary and emits the cross-module VisibilityChanged event - picture/collections: PICTURE_GUEST_SEED demo board starts with visibility: 'private' - picture/ListView + routes/picture/generate + wardrobe/try-on: constructed LocalImage seeds set `visibility: 'private'` instead of `isPublic: false` - website/embeds: resolvePictureBoard replaces the hard-coded isPublic check with canEmbedOnWebsite, reading visibility with the legacy fallback. Error message points users at the picture module's new picker - routes/picture/board/[id]: VisibilityPicker mounted in the header toolbar, left of the edit/delete buttons, wired through handleVisibilityChange → boardsStore.setVisibility Not in this PR: - Image-level visibility picker UI (record field is ready; no UI control yet — boards currently govern public exposure, per-image visibility is a later refinement if anyone asks) - Hard drop of the legacy isPublic column (M3.1 follow-up once a soak confirms nothing reads the old field) Verified: - pnpm check (web): 7450 files, 0 errors, 0 warnings - pnpm test picture + website + library: 23/23 - pnpm run validate:all: theme-tokens, theme-parity, crypto-registry, encrypted-tools all green Next: M4 — Calendar + Todo + Goals. New embed resolvers + new moduleEmbed source values. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| api | ||
| calc/packages/shared | ||
| calendar | ||
| cards | ||
| chat | ||
| citycorners | ||
| contacts | ||
| context | ||
| docs | ||
| food | ||
| guides | ||
| inventory | ||
| mana | ||
| manavoxel | ||
| memoro | ||
| moodlit | ||
| mukke | ||
| news | ||
| photos | ||
| picture | ||
| plants | ||
| presi | ||
| questions | ||
| quotes/packages/content | ||
| skilltree | ||
| storage | ||
| times | ||
| todo | ||
| traces | ||
| uload | ||