{"id":"@lssm-tech/module.design-studio","slug":"module.design-studio","name":"@lssm-tech/module.design-studio","version":"2.0.4","path":"packages/platform/ui/design-studio","manifestPath":"packages/platform/ui/design-studio/package.json","manifestBlobSha":"ef857d9fdfe8b01bf2f57a2b455117f542cc7bb1","layer":"platform","physicalArea":"ui","primaryArea":"ui-and-presentations","classification":{"privateDeclared":null,"catalogFamily":"ui","catalogKind":"module","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Tenant-safe design pack selection, drafting, certification, and reusable studio surfaces.","descriptionOrigin":"package.json","catalog":{"family":"ui","kind":"module","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./core","./presentation","./presentation/design-studio-session","./tenant-authoring"],"documentation":[{"title":"Module Design Studio documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fmodule.design-studio","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.module.design.studio","title":"Module Design Studio","description":"Tenant-safe design pack selection, drafting, certification, and reusable studio surfaces.","status":"active","useCases":["Adopt tenant-safe design pack selection, drafting, certification, and reusable studio surfaces"],"aliases":["contractspec","design","studio","themes","react","module"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/module.design-studio","symbols":[]},{"from":"@lssm-tech/module.design-studio/core","symbols":[]},{"from":"@lssm-tech/module.design-studio/presentation","symbols":[]},{"from":"@lssm-tech/module.design-studio/tenant-authoring","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/module.design-studio package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}],"visualTesting":{"status":"deferred","owner":"@contractspec-core","targetWave":"wave-3-react-packages","rationale":"Foundational Storybook adoption establishes shared catalogs and guardrails before this package migrates."}},"canonicalImports":[{"capabilityId":"package.lssm.tech.module.design.studio","from":"@lssm-tech/module.design-studio","symbols":[]},{"capabilityId":"package.lssm.tech.module.design.studio","from":"@lssm-tech/module.design-studio/core","symbols":[]},{"capabilityId":"package.lssm.tech.module.design.studio","from":"@lssm-tech/module.design-studio/presentation","symbols":[]},{"capabilityId":"package.lssm.tech.module.design.studio","from":"@lssm-tech/module.design-studio/tenant-authoring","symbols":[]}],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint":"bun lint:fix","lint:fix":"node ../../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../../scripts/biome.cjs check --write .","lint:check":"node ../../../../scripts/biome.cjs check .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.contracts-spec-core":"workspace:^","@lssm-tech/lib.crypto-utils":"workspace:^","@lssm-tech/lib.design-catalog":"workspace:^","@lssm-tech/lib.design-system":"workspace:^","react":"catalog:"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/react":"catalog:types","@types/react-dom":"catalog:types","happy-dom":"catalog:testing","react-dom":"catalog:","typescript":"catalog:"},"peerDependencies":{"react":"catalog:"},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./core":"./src/core/index.ts","./presentation":"./src/presentation/index.ts","./presentation/design-studio-session":"./src/presentation/design-studio-session.ts","./tenant-authoring":"./src/core/tenant-authoring.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core/index.d.ts","browser":"./dist/browser/core/index.js","bun":"./dist/core/index.js","node":"./dist/node/core/index.js","default":"./dist/core/index.js"},"./presentation":{"types":"./dist/presentation/index.d.ts","browser":"./dist/browser/presentation/index.js","bun":"./dist/presentation/index.js","node":"./dist/node/presentation/index.js","default":"./dist/presentation/index.js"},"./presentation/design-studio-session":{"types":"./dist/presentation/design-studio-session.d.ts","browser":"./dist/browser/presentation/design-studio-session.js","bun":"./dist/presentation/design-studio-session.js","node":"./dist/node/presentation/design-studio-session.js","default":"./dist/presentation/design-studio-session.js"},"./tenant-authoring":{"types":"./dist/core/tenant-authoring.d.ts","browser":"./dist/browser/core/tenant-authoring.js","bun":"./dist/core/tenant-authoring.js","node":"./dist/node/core/tenant-authoring.js","default":"./dist/core/tenant-authoring.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/module.design-studio","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/platform/ui/design-studio/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./core","importPath":"@lssm-tech/module.design-studio/core","target":"./src/core/index.ts","targets":[{"conditions":[],"target":"./src/core/index.ts","sourcePath":"packages/platform/ui/design-studio/src/core/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/src/core/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./presentation","importPath":"@lssm-tech/module.design-studio/presentation","target":"./src/presentation/index.ts","targets":[{"conditions":[],"target":"./src/presentation/index.ts","sourcePath":"packages/platform/ui/design-studio/src/presentation/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/src/presentation/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./presentation/design-studio-session","importPath":"@lssm-tech/module.design-studio/presentation/design-studio-session","target":"./src/presentation/design-studio-session.ts","targets":[{"conditions":[],"target":"./src/presentation/design-studio-session.ts","sourcePath":"packages/platform/ui/design-studio/src/presentation/design-studio-session.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/src/presentation/design-studio-session.ts","sourceStatus":"verified source file"}]},{"subpath":"./tenant-authoring","importPath":"@lssm-tech/module.design-studio/tenant-authoring","target":"./src/core/tenant-authoring.ts","targets":[{"conditions":[],"target":"./src/core/tenant-authoring.ts","sourcePath":"packages/platform/ui/design-studio/src/core/tenant-authoring.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/src/core/tenant-authoring.ts","sourceStatus":"verified source file"}]}],"entryCount":5,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Module Design Studio documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fmodule.design-studio","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/module.design-studio.txt"},"readme":{"status":"available","body":"# @lssm-tech/module.design-studio\n\nReusable, spec-first design selection and publishing workflows for ContractSpec\napplications.\n\nThe core package provides a canonical async `DesignAuthoringStorePort` service\ncreated with `createDesignStudioService({ store, clock, ids, certifier })` and\nan `InMemoryDesignAuthoringStore` reference adapter. The original synchronous\nservice remains available through `createInMemoryDesignStudioService` for\ncompatibility. Both paths preserve strict\ntenant scoping, private user-owned drafts, optimistic revisions, safe patches,\npermission-gated certification, immutable publications, unpublication receipts,\nand deterministic fallback metadata. Catalog discovery supports industry and\nstyle filters through a contract adapter.\n\n`@lssm-tech/module.design-studio/tenant-authoring` is the managed tenant\nauthoring profile used behind authenticated HTTP routes:\n`TenantDesignAuthoringService({ storeFor, now?, id? })` merges built-in packs\nwith the tenant's published designs, enforces the tenant selection policy\n(fixed, allowed, custom-design switch), keeps private-draft selections in sync,\nand runs create/clone/replace/restore/delete with revision CAS, validation and\npreview, certification receipts and publish/unpublish. It differs from\n`AsyncDesignStudioService` deliberately: patches replace rather than append,\ndrafts start only from built-in packs, publication requires the exact certified\nreceipt and keeps the per-draft ref `tenant.<tenant>.design.<draft>@<revision>.0.0`,\nand every reset request is audited. Errors are `DesignStudioError` codes with\nstable host-facing messages. `InMemoryDesignAuthoringDatabase` gives one\ntenant-guarded `InMemoryDesignAuthoringStore` per tenant; the reference store\nlists drafts newest first and, like the SQL adapter, fences updates by owner and\nreturns `false` for a stale delete.\n\nPresentation exports provide matching web and React Native faceted gallery,\npicker, structured section controls, editor, diagnostics, responsive preview,\nhistory/diff, and publish controls built from design-system primitives.\nConsumers own persistence adapters, routing, and application-specific previews.\nThe reference API application supplies the production PostgreSQL adapter and\nauthenticated route composition; the reference web and Expo applications mount\nthe paired Studio surfaces against the real authenticated lifecycle.\n\n`@lssm-tech/module.design-studio/presentation/design-studio-session` is the\nplatform-neutral client session shared by those web and Expo hosts:\n`useDesignStudioSession({ client, onRefresh })` drives select -> draft -> patch\n-> validate -> certify -> publish/unpublish -> restore over an injected\n`DesignStudioClient` transport port and calls `onRefresh` after every persisted\nchange (the saved patch refreshes before validation, so an invalid draft is\nstill reflected); selecting a pack clears the draft and publication.\n`assertDesignValidation` joins patch and certification issues into one error.\nHosts keep the transport adapter and the refresh binding.\n\n## Commands\n\n- `bun run test`\n- `bun run typecheck`\n- `bun run lint:check`\n- `bun run build`\n","sourcePath":"packages/platform/ui/design-studio/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/design-studio/README.md","blobSha":"5b5724d8b628b9d3e7230bc250d586db5e840fd0","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"ui-and-presentations","areaTitle":"Interfaces, presentations and design","displayName":"module.design-studio","runtimes":["node"],"platforms":["server"],"kind":"module","scope":"Package manifest","canonicalRoute":"/docs/packages/module.design-studio/","contextUrl":"/docs/packages/module.design-studio.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}