@elytracms/studio 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/convex/guard.ts +16 -0
- package/convex/members.ts +14 -3
- package/dist/components/assets/asset-library.js.map +1 -1
- package/dist/components/assets/asset-metadata.js.map +1 -1
- package/dist/components/assets/asset-search.js.map +1 -1
- package/dist/components/assets/asset-selection.js.map +1 -1
- package/dist/components/assets/assets-store.js.map +1 -1
- package/dist/components/auth-context.js.map +1 -1
- package/dist/components/backend-gate.js.map +1 -1
- package/dist/components/breadcrumb-context.js.map +1 -1
- package/dist/components/builder/blocks-model.js.map +1 -1
- package/dist/components/builder/blocks-panel.js.map +1 -1
- package/dist/components/builder/builder-store.js.map +1 -1
- package/dist/components/builder/canvas-stylesheet.js.map +1 -1
- package/dist/components/builder/canvas.js.map +1 -1
- package/dist/components/builder/clipboard-actions.js.map +1 -1
- package/dist/components/builder/composition-field-editor.js.map +1 -1
- package/dist/components/builder/composition-scope.js.map +1 -1
- package/dist/components/builder/drag-session.js.map +1 -1
- package/dist/components/builder/fixture-thumbnail.js.map +1 -1
- package/dist/components/builder/inline-edit.js.map +1 -1
- package/dist/components/builder/insert-context.js.map +1 -1
- package/dist/components/builder/insert-menu.js.map +1 -1
- package/dist/components/builder/layout-inspector.js.map +1 -1
- package/dist/components/builder/node-factory.js.map +1 -1
- package/dist/components/builder/page-tree.js.map +1 -1
- package/dist/components/builder/property-inspector.js.map +1 -1
- package/dist/components/builder/rich-text-toolbar.js.map +1 -1
- package/dist/components/builder/spacing-handles.js.map +1 -1
- package/dist/components/cms/alias-selector.d.ts +20 -0
- package/dist/components/cms/alias-selector.js +34 -0
- package/dist/components/cms/alias-selector.js.map +1 -0
- package/dist/components/cms/asset-picker.js.map +1 -1
- package/dist/components/cms/bulk-actions.js.map +1 -1
- package/dist/components/cms/bulk-bar.js.map +1 -1
- package/dist/components/cms/cell-edit.js.map +1 -1
- package/dist/components/cms/cell.js.map +1 -1
- package/dist/components/cms/cms-index.js.map +1 -1
- package/dist/components/cms/cms-store.d.ts +4 -5
- package/dist/components/cms/cms-store.js +36 -13
- package/dist/components/cms/cms-store.js.map +1 -1
- package/dist/components/cms/collection-table.js +10 -2
- package/dist/components/cms/collection-table.js.map +1 -1
- package/dist/components/cms/collections-sidebar.js.map +1 -1
- package/dist/components/cms/detail-editor.js +53 -35
- package/dist/components/cms/detail-editor.js.map +1 -1
- package/dist/components/cms/doc-state.js.map +1 -1
- package/dist/components/cms/document-editor-context.js.map +1 -1
- package/dist/components/cms/editable-cell.js.map +1 -1
- package/dist/components/cms/field-control.js.map +1 -1
- package/dist/components/cms/filter-builder.js.map +1 -1
- package/dist/components/cms/import-export.js.map +1 -1
- package/dist/components/cms/issues-pane.d.ts +19 -0
- package/dist/components/cms/issues-pane.js +33 -0
- package/dist/components/cms/issues-pane.js.map +1 -0
- package/dist/components/cms/new-page-dialog.js.map +1 -1
- package/dist/components/cms/reference-confirm.js.map +1 -1
- package/dist/components/cms/relation-picker.js.map +1 -1
- package/dist/components/cms/use-cell-edit.js.map +1 -1
- package/dist/components/cms/versions-model.js.map +1 -1
- package/dist/components/cms/versions-pane.js.map +1 -1
- package/dist/components/cms/view-bar.js.map +1 -1
- package/dist/components/collab/collab-context.js.map +1 -1
- package/dist/components/collab/collab-seed.js.map +1 -1
- package/dist/components/components/component-detail.js.map +1 -1
- package/dist/components/components/component-status.js.map +1 -1
- package/dist/components/components/components-index.js.map +1 -1
- package/dist/components/components/field-inspector.js.map +1 -1
- package/dist/components/components/fixture-runner.js.map +1 -1
- package/dist/components/components/registry-browser.js.map +1 -1
- package/dist/components/current-user-menu.js.map +1 -1
- package/dist/components/delivery-health-banner.js.map +1 -1
- package/dist/components/dev-login-badge.js.map +1 -1
- package/dist/components/extensions/extensions-view.js.map +1 -1
- package/dist/components/guards.js.map +1 -1
- package/dist/components/inspector/inspector-sidebar.d.ts +2 -0
- package/dist/components/inspector/inspector-sidebar.js +1 -1
- package/dist/components/inspector/inspector-sidebar.js.map +1 -1
- package/dist/components/operation-error.js.map +1 -1
- package/dist/components/playground-badge.js.map +1 -1
- package/dist/components/project-list.js.map +1 -1
- package/dist/components/project-session.js.map +1 -1
- package/dist/components/project-switcher.js.map +1 -1
- package/dist/components/references/builder-deep-link.js.map +1 -1
- package/dist/components/references/references-panel.js.map +1 -1
- package/dist/components/routes/redirect-chain.js.map +1 -1
- package/dist/components/routes/redirect-manager.js.map +1 -1
- package/dist/components/routes/route-list.js.map +1 -1
- package/dist/components/routes/routes-shell.js.map +1 -1
- package/dist/components/section-nav.js.map +1 -1
- package/dist/components/section-state.js.map +1 -1
- package/dist/components/section-surface.js.map +1 -1
- package/dist/components/sections.js.map +1 -1
- package/dist/components/settings-form.js.map +1 -1
- package/dist/components/studio-context.js.map +1 -1
- package/dist/components/studio-project-screen.js +32 -5
- package/dist/components/studio-project-screen.js.map +1 -1
- package/dist/components/studio-shell.js.map +1 -1
- package/dist/components/theme-context.js.map +1 -1
- package/dist/components/workspace-gate.js.map +1 -1
- package/dist/components/workspace-projects.js.map +1 -1
- package/dist/lib/assets/delete-asset.js.map +1 -1
- package/dist/lib/assets/image-dimensions.js.map +1 -1
- package/dist/lib/assets/index.js.map +1 -1
- package/dist/lib/assets/upload-state.js.map +1 -1
- package/dist/lib/assets/upload.js.map +1 -1
- package/dist/lib/auth/auth-adapter.js.map +1 -1
- package/dist/lib/auth/convex-auth-adapter.js.map +1 -1
- package/dist/lib/auth/dev-auto-login-adapter.js.map +1 -1
- package/dist/lib/auth/index.js.map +1 -1
- package/dist/lib/auth/local-auth-adapter.js.map +1 -1
- package/dist/lib/auth/route-guard.js.map +1 -1
- package/dist/lib/auth-errors.js.map +1 -1
- package/dist/lib/bindings/section-bindings.js.map +1 -1
- package/dist/lib/clipboard/index.js.map +1 -1
- package/dist/lib/clipboard/os-clipboard.js.map +1 -1
- package/dist/lib/clipboard/paste-issues.js.map +1 -1
- package/dist/lib/clipboard/paste-target.js.map +1 -1
- package/dist/lib/cms/published-documents.js.map +1 -1
- package/dist/lib/cms-views/index.js.map +1 -1
- package/dist/lib/cms-views/selection.js.map +1 -1
- package/dist/lib/cms-views/view-model.js.map +1 -1
- package/dist/lib/cms-views/views-store.js.map +1 -1
- package/dist/lib/data/collection-content.js.map +1 -1
- package/dist/lib/data/data-store.js.map +1 -1
- package/dist/lib/data/index.js.map +1 -1
- package/dist/lib/data/providers.js.map +1 -1
- package/dist/lib/data/sample-capture.js.map +1 -1
- package/dist/lib/data/sources-store.js.map +1 -1
- package/dist/lib/delivery/instant-publish.js.map +1 -1
- package/dist/lib/dnd/drop-rules.js.map +1 -1
- package/dist/lib/dnd/gap-drag.js.map +1 -1
- package/dist/lib/locale/binding-fallback.js.map +1 -1
- package/dist/lib/locale/fallback.js.map +1 -1
- package/dist/lib/locale/index.js.map +1 -1
- package/dist/lib/locale/locale-store.js.map +1 -1
- package/dist/lib/locale/locale-switcher.js.map +1 -1
- package/dist/lib/locale/route-variant.js.map +1 -1
- package/dist/lib/locale/use-studio-locale.js.map +1 -1
- package/dist/lib/operations/asset-repository.js.map +1 -1
- package/dist/lib/operations/cms-persistence.js.map +1 -1
- package/dist/lib/operations/graph-commands.js.map +1 -1
- package/dist/lib/operations/graph-persistence.js.map +1 -1
- package/dist/lib/operations/index.js.map +1 -1
- package/dist/lib/operations/operations-package.js.map +1 -1
- package/dist/lib/operations/persist-queue.js.map +1 -1
- package/dist/lib/operations/session-hydration.js.map +1 -1
- package/dist/lib/operations/studio-operations.js.map +1 -1
- package/dist/lib/persistence/backend-mode.js.map +1 -1
- package/dist/lib/persistence/convex-adapter.js +8 -4
- package/dist/lib/persistence/convex-adapter.js.map +1 -1
- package/dist/lib/persistence/convex-blob-storage.js.map +1 -1
- package/dist/lib/persistence/convex-client.js.map +1 -1
- package/dist/lib/persistence/index.js.map +1 -1
- package/dist/lib/persona/labels.js +4 -0
- package/dist/lib/persona/labels.js.map +1 -1
- package/dist/lib/rail.js.map +1 -1
- package/dist/lib/references/impact.js.map +1 -1
- package/dist/lib/references/index.js.map +1 -1
- package/dist/lib/references/reference-model.js.map +1 -1
- package/dist/lib/references/references-store.js.map +1 -1
- package/dist/lib/registry/index.js.map +1 -1
- package/dist/lib/registry/preview.js.map +1 -1
- package/dist/lib/registry/project-components.js.map +1 -1
- package/dist/lib/routing/index.js.map +1 -1
- package/dist/lib/routing/routing-analysis.js.map +1 -1
- package/dist/lib/routing/routing-store.js.map +1 -1
- package/dist/lib/starters/kit-session.js.map +1 -1
- package/dist/lib/theme.js.map +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/webhooks/config.js.map +1 -1
- package/dist/lib/webhooks/dispatcher.js.map +1 -1
- package/dist/lib/webhooks/index.js.map +1 -1
- package/dist/lib/webhooks/signing.js.map +1 -1
- package/dist/lib/webhooks/tags.js.map +1 -1
- package/dist/lib/working-graph.js.map +1 -1
- package/dist/lib/workspace/index.js.map +1 -1
- package/dist/lib/workspace/switcher-source.js.map +1 -1
- package/dist/lib/workspace/workspace-source.js.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/match.js.map +1 -1
- package/dist/router/search.js.map +1 -1
- package/dist/ui/avatar.js.map +1 -1
- package/dist/ui/badge.js.map +1 -1
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/card.js.map +1 -1
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/dropdown-menu.js.map +1 -1
- package/dist/ui/field.js.map +1 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/input.js.map +1 -1
- package/dist/ui/inspector.js.map +1 -1
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/panel.js.map +1 -1
- package/dist/ui/separator.js.map +1 -1
- package/dist/ui/toast.js.map +1 -1
- package/dist/ui/toolbar.js.map +1 -1
- package/dist/ui/typography.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"working-graph.js","sourceRoot":"","sources":["../../src/lib/working-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"working-graph.js","sourceRoot":"","sources":["../../src/lib/working-graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { normalizeContainers, PROJECT_GRAPH_SCHEMA_VERSION } from '@elytracms/core/project-graph'\nimport type { ComponentNode, Layout, ProjectGraph } from '@elytracms/core/project-graph'\n\n/**\n * Builder-local WORKING GRAPH (EC-187).\n *\n * The canonical {@link ProjectGraph} is now LAYOUTS-ONLY — a page is a document\n * in the `page` collection (its `body` is a composition field value). But the\n * legacy `/builder` editor and the composition-field editor are *node-tree*\n * editors: they edit a single root-bearing surface with undo/redo, selection,\n * and the same structural edit ops. So the builder store keeps its own\n * root-bearing working type, decoupled from the page-less canonical schema.\n *\n * A `WorkingGraph` is a `ProjectGraph` (layouts + metadata) PLUS a `pages`\n * array of {@link WorkingPage} — exactly the shape the reducer/history/edit ops\n * have always operated on. It NEVER persists in this shape: page-body edits lift\n * into a CMS document (the composition-field editor), and layout edits persist\n * through the canonical layouts-only `graph.save`. {@link toProjectGraph} drops\n * the pages to produce the canonical graph when one is needed.\n */\n\n/**\n * Per-page SEO block (EC-171, legacy `/builder` chrome). The canonical\n * `PageSeo` shape lived in `@elytracms/core/project-graph` and was deleted with the\n * page node (EC-187); page SEO now lives on the `page` collection document's\n * flat `seo*` fields. The legacy page-SEO panel keeps editing this local block\n * so it stays compiling/tested until `/builder` is retired.\n */\nexport interface WorkingPageSeo {\n title?: string\n description?: string\n ogTitle?: string\n ogImage?: string\n noindex?: boolean\n}\n\n/** A page in the builder's working state — a root-bearing editable surface. */\nexport interface WorkingPage {\n id: string\n name: string\n /** Optional shared layout wrapper id (canvas preview only). */\n layoutId?: string\n /** Root node of the page's component tree (the edited surface). */\n root: ComponentNode\n /** Legacy per-page SEO block (EC-171). */\n seo?: WorkingPageSeo\n}\n\n/** The builder's internal working graph: the canonical layouts-only graph + editable pages. */\nexport interface WorkingGraph {\n id: string\n schemaVersion: number\n metadata?: { name?: string }\n settingsRef?: string\n layouts: Layout[]\n pages: WorkingPage[]\n}\n\nconst SYNTH_PAGE_ID = 'page.working'\n\n/**\n * Lift a (layouts-only) canonical {@link ProjectGraph} into a {@link WorkingGraph}\n * with a single editable page, so the legacy builder canvas has a root to edit.\n * The page root is an empty Stack the editor fills; the page selects the first\n * layout for canvas preview (if any).\n */\nexport function toWorkingGraph(graph: ProjectGraph): WorkingGraph {\n return {\n ...graph,\n pages: [\n {\n id: SYNTH_PAGE_ID,\n name: graph.metadata?.name ?? 'Page',\n ...(graph.layouts[0] ? { layoutId: graph.layouts[0].id } : {}),\n root: { id: 'working.root', componentId: 'base.primitives.Stack', slots: { children: [] } },\n },\n ],\n }\n}\n\n/** Drop the editable pages to produce the canonical (layouts-only) {@link ProjectGraph}. */\nexport function toProjectGraph(graph: WorkingGraph): ProjectGraph {\n const { pages: _pages, ...canonical } = graph\n return canonical\n}\n\n/** Build a working graph that wraps one composition value in a single editable page. */\nexport function workingGraphFromPage(page: WorkingPage, layouts: Layout[] = []): WorkingGraph {\n return {\n id: 'working',\n schemaVersion: PROJECT_GRAPH_SCHEMA_VERSION,\n layouts,\n pages: [page],\n }\n}\n\n/**\n * Normalize every editable surface of a working graph — each page root AND\n * each layout root — via `normalizeContainers`. Mirrors the OLD\n * `normalizeProjectGraph` (which normalized pages too, before EC-187 made the\n * canonical graph layouts-only). Identity-preserving: returns the same graph\n * reference when nothing changed so undo histories can detect no-ops by\n * reference.\n */\nexport function normalizeWorkingGraph(graph: WorkingGraph): WorkingGraph {\n let changed = false\n const pages = graph.pages.map((page) => {\n const root = normalizeContainers(page.root)\n if (root !== page.root) changed = true\n return root === page.root ? page : { ...page, root }\n })\n const layouts = graph.layouts.map((layout) => {\n const root = normalizeContainers(layout.root)\n if (root !== layout.root) changed = true\n return root === layout.root ? layout : { ...layout, root }\n })\n return changed ? { ...graph, pages, layouts } : graph\n}\n\n// ---- Legacy page SEO (EC-171) ----------------------------------------------\n//\n// The canonical `setPageSeo`/`cleanPageSeo`/`PageSeo` were deleted with the\n// page node (EC-187). These local helpers mirror the old behavior over the\n// working graph's per-page `seo` block so the legacy SEO panel keeps working.\n\n/** Strip empty fields; an all-empty block becomes `undefined` (clear the block). */\nexport function cleanWorkingPageSeo(seo: WorkingPageSeo): WorkingPageSeo | undefined {\n const trimmed = (value: string | undefined): string | undefined => {\n const next = value?.trim()\n return next ? next : undefined\n }\n const next: WorkingPageSeo = {}\n const title = trimmed(seo.title)\n const description = trimmed(seo.description)\n const ogTitle = trimmed(seo.ogTitle)\n const ogImage = trimmed(seo.ogImage)\n if (title !== undefined) next.title = title\n if (description !== undefined) next.description = description\n if (ogTitle !== undefined) next.ogTitle = ogTitle\n if (ogImage !== undefined) next.ogImage = ogImage\n if (seo.noindex) next.noindex = true\n return Object.keys(next).length > 0 ? next : undefined\n}\n\n/**\n * Apply a (cleaned) SEO block to a page in the working graph. Identity on\n * no-ops — callers dispatch only when this returns a new graph. An `undefined`\n * block removes `seo` from the page entity entirely.\n */\nexport function setWorkingPageSeo(\n graph: WorkingGraph,\n pageId: string,\n seo: WorkingPageSeo | undefined,\n): WorkingGraph {\n const page = graph.pages.find((p) => p.id === pageId)\n if (!page) return graph\n const sameBlock = JSON.stringify(page.seo ?? null) === JSON.stringify(seo ?? null)\n if (sameBlock) return graph\n return {\n ...graph,\n pages: graph.pages.map((p) => {\n if (p.id !== pageId) return p\n if (seo === undefined) {\n const { seo: _drop, ...rest } = p\n return rest\n }\n return { ...p, seo }\n }),\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAGpG,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,MAAM,GAAG,qBAAqB,CAAC;QAC7B,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC/B,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,IAAI,iBAAiB,GAAkB,IAAI,CAAA;AAE3C,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAA;IACvC,iBAAiB,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5D,OAAO,oBAAoB,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,4BAA4B,CAAC,IAAmB;IAC9D,iBAAiB,GAAG,IAAI,CAAA;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;AAEtF,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;IAC7C,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,QAAiB;IACvE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ;QAAE,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7E,OAAO,IAAI,CAAA;AACb,CAAC;AAED,4EAA4E;AAC5E,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAA;IACjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC7C,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;QACtE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,gFAAgF;IAChF,mFAAmF;IACnF,yDAAyD;IACzD,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAA;IAC/C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,yBAAyB,CAAC,IAA2B;IACnE,MAAM,GAAG,IAAI,CAAA;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,WAAW,CAAC,CAAA;AACjE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,WAAmB;IACpE,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,OAAO,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;AACnD,CAAC;AAED,sFAAsF;AACtF,SAAS,oBAAoB,CAC3B,OAA6C,EAC7C,WAAmB;IAEnB,IAAI,CAAC,OAAO;QAAE,OAAO,WAAW,CAAA;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAA;IAChG,OAAO,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,WAAW,CAAA;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,OAAO,mBAAmB,EAAE,EAAE,IAAI,IAAI,UAAU,CAAA;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,mBAAmB,EAAE,EAAE,WAAW,IAAI,EAAE,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,mBAAmB,EAAE,EAAE,MAAM,IAAI,EAAE,CAAA;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,mBAAmB,EAAE,EAAE,SAAS,IAAI,EAAE,CAAA;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,mBAAmB,EAAE,EAAE,OAAO,IAAI,EAAE,CAAA;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,mBAAmB,EAAE,EAAE,UAAU,CAAA;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACvE,OAAO,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;AAC1D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/workspace/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { frontendUrlForEnvironment } from '@elytracms/core/studio-core'\nimport type { ElytraConfigInput, ResolvedWorkspaceProject } from '@elytracms/core/studio-core'\nimport type { CollectionDef, RedirectRecord, RouteRecord } from '@elytracms/core/cms-core'\nimport { resolveWorkspaceState } from './workspace-source'\nimport type { WorkspaceState } from './workspace-source'\n\nexport { resolveWorkspaceState, WORKSPACE_ENV_VAR } from './workspace-source'\nexport type { WorkspaceSources, WorkspaceState } from './workspace-source'\nexport { persistedProjects, selectSwitcherProjects, unprovisionedProjects } from './switcher-source'\nexport type { SwitcherEntry, SwitcherSourceInput } from './switcher-source'\n\nlet cached: WorkspaceState | null = null\n\n/**\n * Mount the studio against a project config (EC-223 mount contract). The\n * consumer's entry point does `import config from './elytra.config'` and calls\n * this — an explicit init, NOT an `import.meta.glob` autoload that reaches into\n * the consumer's filesystem (Oli, 2026-06-19: \"there's always an entry point that\n * can trigger a function call\"). This is the config-injection responsibility of\n * the eventual `createStudio(config)` package export; it seeds the workspace state\n * every later query (`getActiveProjectSlug`, `resolveDeployment*`) reads.\n */\nexport function createStudio(config: ElytraConfigInput): void {\n cached = resolveWorkspaceState({\n fileModule: { default: config },\n fileName: 'elytra.config.ts',\n })\n}\n\n/**\n * The active project slug (EC-179, vision AD-8). One project per backend, so the\n * active project selects which Convex deployment the studio talks to. The root\n * layout sets this from the URL (`/<slug>`) — or, on the sign-in screen, from\n * the `redirect` target's slug — before the auth/persistence adapters are\n * selected, so the *initial* sign-in authenticates against the project the user\n * is heading for (Sanity-style: authenticate to one workspace, then the full\n * config-based switcher is available). `null` at the launcher → the default\n * (first) configured project's deployment.\n */\nlet activeProjectSlug: string | null = null\n\n/** Set the active project slug; returns whether the resolved deployment changed. */\nexport function setActiveProjectSlug(slug: string | null): boolean {\n const before = resolveDeploymentUrl('')\n activeProjectSlug = slug && slug.trim() !== '' ? slug : null\n return resolveDeploymentUrl('') !== before\n}\n\nexport function getActiveProjectSlug(): string | null {\n return activeProjectSlug\n}\n\n/** Test seam: reset the active project slug. Never used by app code. */\nexport function setActiveProjectSlugForTests(slug: string | null): void {\n activeProjectSlug = slug\n}\n\n/**\n * Reserved first-path segments that are NOT project slugs: the studio's own\n * root routes (EC-220). Project surfaces now live at `/<slug>/...` (no `/p/`\n * prefix), so the studio's root namespace is shared between project slugs and\n * these fixed routes — they must be excluded from slug extraction. Keep in\n * sync with the non-`$projectId` files in `src/routes/`; the launcher (`/`) is\n * the empty segment, excluded by the regex requiring one path char.\n */\nconst RESERVED_ROOT_SEGMENTS: ReadonlySet<string> = new Set(['sign-in', 'styleguide'])\n\n/** Extract a project slug from a studio path (`/<slug>/...`), else `null`. */\nexport function projectSlugFromPath(pathname: string): string | null {\n const match = /^\\/([^/?#]+)/.exec(pathname)\n if (!match) return null\n const segment = decodeURIComponent(match[1]!)\n return RESERVED_ROOT_SEGMENTS.has(segment) ? null : segment\n}\n\n/**\n * The project whose backend the studio should bind for a given location\n * (EC-179). A project path (`/<slug>`) binds that project; the sign-in screen\n * binds the project from its `redirect` target so the *initial* sign-in\n * authenticates against the backend the user is heading for (Sanity-style).\n * Anywhere else (the launcher) → `null`, i.e. the default/first project.\n */\nexport function activeSlugForLocation(pathname: string, redirect?: string): string | null {\n const direct = projectSlugFromPath(pathname)\n if (direct) return direct\n if (pathname === '/sign-in' && redirect) return projectSlugFromPath(redirect)\n return null\n}\n\n/** The active config project (by slug), or the first configured project. */\nfunction activeConfigProject() {\n const state = getWorkspaceState()\n if (state.kind !== 'config') return undefined\n if (activeProjectSlug) {\n const match = state.projects.find((p) => p.slug === activeProjectSlug)\n if (match) return match\n }\n return state.projects[0]\n}\n\n/**\n * The studio's resolved workspace state. Deterministic per boot: the config is\n * static input (bundled file or deployment env), so it is resolved once and\n * cached — every consumer (gate, switcher, launcher) sees the same state.\n */\nexport function getWorkspaceState(): WorkspaceState {\n // Seeded by `createStudio(config)` at the entry point. Until then — or when the\n // consumer wires no config — resolve to the empty `none` state (the single-project\n // golden path), rather than reaching for the filesystem.\n if (!cached) cached = resolveWorkspaceState({})\n return cached\n}\n\n/** Test seam: clear/replace the cached state. Never used by app code. */\nexport function setWorkspaceStateForTests(next: WorkspaceState | null): void {\n cached = next\n}\n\n/**\n * Resolve the Convex deployment URL the studio should connect to (vision AD-8:\n * the backend is wired in config). One project per backend, so the **active**\n * project (see {@link setActiveProjectSlug}) selects the deployment via its\n * `convex.deployment` (or its production environment's). At the launcher (no\n * active project) the first configured project is the default backend. Absent\n * config — or a project without a wired deployment — falls back to\n * `VITE_CONVEX_URL` (`fallbackUrl`) for local single-deployment development.\n */\nexport function resolveDeploymentUrl(fallbackUrl: string): string {\n return projectDeploymentUrl(activeConfigProject(), fallbackUrl)\n}\n\n/** The deployment URL for a specific project slug (per-backend auth checks). */\nexport function deploymentUrlForSlug(slug: string, fallbackUrl: string): string {\n const state = getWorkspaceState()\n const project = state.kind === 'config' ? state.projects.find((p) => p.slug === slug) : undefined\n return projectDeploymentUrl(project, fallbackUrl)\n}\n\n/** A project's wired deployment: per-environment ref → project ref → env fallback. */\nfunction projectDeploymentUrl(\n project: ResolvedWorkspaceProject | undefined,\n fallbackUrl: string,\n): string {\n if (!project) return fallbackUrl\n const envDeployment = project.environments.find((e) => e.convex?.deployment)?.convex?.deployment\n return envDeployment ?? project.convex?.deployment ?? fallbackUrl\n}\n\n/**\n * The slug of the project bound to the active deployment (EC-179). One project\n * per backend, so the active config project's slug identifies the deployment's\n * one project; the Convex adapter stamps it onto deployment-scoped records.\n * Absent config falls back to `fallbackId` (used only when wired by env alone).\n */\nexport function resolveDeploymentProjectId(fallbackId: string): string {\n return activeConfigProject()?.slug ?? fallbackId\n}\n\n/**\n * The CMS collections of the active config project (AD-11, EC-183). CMS\n * collection schemas are config-owned: the studio reads the model from\n * `elytra.config.ts` (served through the persistence port — the backend has no\n * `cmsSchemas` table). `[]` when the active project declares none, or when the\n * studio is wired by env alone with no config.\n */\nexport function resolveDeploymentCollections(): CollectionDef[] {\n return activeConfigProject()?.collections ?? []\n}\n\n/**\n * The resolved URL routes of the active config project (EC-207, \"routes as\n * code\"). Routes are config-sourced: the studio reads the materialized\n * `RouteRecord[]` from the active `elytra.config.ts` project — never from the\n * backend (the `routes` system collection is retired). The Routes surface and\n * the per-page URL preview both read through here. `[]` when the active project\n * declares none, or when the studio is wired by env alone with no config.\n */\nexport function resolveDeploymentRoutes(): RouteRecord[] {\n return activeConfigProject()?.routes ?? []\n}\n\n/**\n * The resolved redirects of the active config project (EC-207). Config-sourced\n * exactly like {@link resolveDeploymentRoutes}: the `redirects` system\n * collection is retired and nothing is read from the backend. `[]` when none\n * are declared.\n */\nexport function resolveDeploymentRedirects(): RedirectRecord[] {\n return activeConfigProject()?.redirects ?? []\n}\n\n/**\n * The configured locales of the active config project (AD-8). The same locale\n * set the host stamps onto its per-locale cache tags — used by the revalidation\n * webhook layer (EC-192) so a publish always invalidates EVERY configured locale\n * (e.g. `/de`, `/fr`), never just the default. `[]` when wired by env alone.\n */\nexport function resolveDeploymentLocales(): string[] {\n return activeConfigProject()?.locales ?? []\n}\n\n/**\n * The active project's components reference (EC-194, AD-11): where the consuming\n * repo's OWN real components live (`{ package }` or `{ dir }`). When set, the\n * studio registry composes with the repo's components instead of the built-in\n * demo fixtures — so the page builder edits the repo's actual component library.\n * `undefined` → the project ships no code components; the studio falls back to the\n * golden-path fixtures.\n */\nexport function resolveDeploymentComponents() {\n return activeConfigProject()?.components\n}\n\n/**\n * The active project's public site URL (EC-215): the live site's base URL the\n * studio links to (a document's live URL + open-live button, EC-216). Resolved\n * in lockstep with {@link resolveDeploymentUrl} — the environment bound to the\n * active deployment (the first with a wired deployment) provides the URL, falling\n * back to the project-level `frontendUrl`. No active-environment selector exists\n * yet, so the bound environment is the active one. `undefined` when the active\n * project (or env-only wiring) configures no frontend URL.\n */\nexport function resolveDeploymentFrontendUrl(): string | undefined {\n const project = activeConfigProject()\n if (!project) return undefined\n const boundEnv = project.environments.find((e) => e.convex?.deployment)\n return frontendUrlForEnvironment(project, boundEnv?.key)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switcher-source.js","sourceRoot":"","sources":["../../../src/lib/workspace/switcher-source.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,sBAAsB,CAAC,KAA0B;IAC/D,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,wEAAwE;QACxE,mEAAmE;QACnE,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACjF,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,SAAS;YACd,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;YAClD,CAAC,CAAC,EAAE,IAAI,EAAE,eAAwB,EAAE,MAAM,EAAE,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CACnC,OAAiC;IAEjC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3F,CAAC"}
|
|
1
|
+
{"version":3,"file":"switcher-source.js","sourceRoot":"","sources":["../../../src/lib/workspace/switcher-source.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,sBAAsB,CAAC,KAA0B;IAC/D,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,wEAAwE;QACxE,mEAAmE;QACnE,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACjF,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,SAAS;YACd,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;YAClD,CAAC,CAAC,EAAE,IAAI,EAAE,eAAwB,EAAE,MAAM,EAAE,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CACnC,OAAiC;IAEjC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3F,CAAC","sourcesContent":["import type { Project } from '@elytracms/core/studio-core'\nimport type { ResolvedWorkspaceProject } from '@elytracms/core/studio-core'\nimport type { WorkspaceState } from './workspace-source'\n\n/**\n * Config-driven switcher source (EC-154, reframed for EC-179 per-backend\n * projects). Pure logic deciding what the project switcher and launcher list:\n *\n * - **No workspace config** → exactly today's behavior: the adapter-listed\n * projects, untouched (single-project golden path).\n * - **Config present** → every configured project, in config order, as a\n * navigable entry; one that has no persisted counterpart yet is an explicit\n * `unprovisioned` state (\"run `builder init --project <slug>`\") rather than an\n * error. Persisted projects *not* in the config are not listed: the config is\n * the source of truth for what this workspace is.\n *\n * Visibility is **not** filtered by membership. One project per backend (vision\n * AD-8): a configured project lives on its own deployment, so the *active*\n * backend's memberships cannot speak to another project's. Access is enforced\n * where it belongs — per-backend sign-in plus the EC-150 role hook on entry —\n * not by hiding projects you'd authenticate into. (Hiding them was the\n * single-backend assumption; cross-backend it just made projects unreachable.)\n */\n\nexport type SwitcherEntry =\n | { kind: 'project'; project: Project }\n | { kind: 'unprovisioned'; config: ResolvedWorkspaceProject }\n\nexport interface SwitcherSourceInput {\n workspace: WorkspaceState\n /** The studio store's read model (config-derived under a workspace config). */\n persisted: readonly Project[]\n}\n\nexport function selectSwitcherProjects(input: SwitcherSourceInput): SwitcherEntry[] {\n if (input.workspace.kind !== 'config') {\n // No-config golden path (an invalid config never reaches the switcher —\n // the WorkspaceGate blocks boot): today's adapter-listed behavior.\n return input.persisted.map((project) => ({ kind: 'project', project }))\n }\n\n const bySlug = new Map(input.persisted.map((project) => [project.slug, project]))\n return input.workspace.projects.map((config) => {\n const persisted = bySlug.get(config.slug)\n return persisted\n ? { kind: 'project' as const, project: persisted }\n : { kind: 'unprovisioned' as const, config }\n })\n}\n\n/** The persisted projects among the entries (for list surfaces filtering by status). */\nexport function persistedProjects(entries: readonly SwitcherEntry[]): Project[] {\n return entries.flatMap((entry) => (entry.kind === 'project' ? [entry.project] : []))\n}\n\n/** The not-yet-provisioned config entries (rendered as explicit CLI-hint states). */\nexport function unprovisionedProjects(\n entries: readonly SwitcherEntry[],\n): ResolvedWorkspaceProject[] {\n return entries.flatMap((entry) => (entry.kind === 'unprovisioned' ? [entry.config] : []))\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-source.js","sourceRoot":"","sources":["../../../src/lib/workspace/workspace-source.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AAGpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAgBxD,SAAS,SAAS,CAAC,KAAc,EAAE,MAAc;IAC/C,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9D,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;QACvD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;AACxD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAA;QACtD,MAAM,SAAS,GAAG,4BAA4B,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACxE,IAAI,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC7F,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,iBAAiB,CAAA;QAChC,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM;gBACN,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,GAAG,iBAAiB,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;wBAC5G,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"workspace-source.js","sourceRoot":"","sources":["../../../src/lib/workspace/workspace-source.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AAGpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAgBxD,SAAS,SAAS,CAAC,KAAc,EAAE,MAAc;IAC/C,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9D,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;QACvD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;AACxD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAA;QACtD,MAAM,SAAS,GAAG,4BAA4B,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACxE,IAAI,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC7F,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,iBAAiB,CAAA;QAChC,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM;gBACN,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,GAAG,iBAAiB,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;wBAC5G,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC","sourcesContent":["import {\n extractWorkspaceConfigExport,\n resolveWorkspaceConfig,\n WORKSPACE_CONFIG_FILE,\n} from '@elytracms/core/studio-core'\nimport type { ResolvedWorkspaceProject, WorkspaceConfigIssue } from '@elytracms/core/studio-core'\n\n/**\n * Workspace-config resolution for the studio (EC-154, vision AD-8).\n *\n * The hosted studio can receive a code-first workspace config through two\n * channels, resolved here as pure, testable logic (the channel wiring lives in\n * `./index.ts`):\n *\n * 1. **Bundled config file** — an `elytra.config.ts` at the builder app root,\n * picked up by Vite (`import.meta.glob`). This is the honest channel for\n * studio development and for a self-hosted builder whose repo *is* the\n * workspace.\n * 2. **Env-injected JSON** — `VITE_ELYTRA_WORKSPACE` carrying the JSON form\n * of the config. This is the honest channel for a hosted builder deployment\n * serving a separate host repo: the host's CLI/CI serializes its\n * `elytra.config.ts` into the deployment env, so the studio sees exactly\n * the projects the repo declares without bundling host code.\n *\n * A bundled file wins over the env (the more deliberate, code-reviewed act).\n * No channel → `none`: the single-project golden path, identical to today's\n * adapter-listed behavior. An invalid config from either channel is a\n * deterministic boot-error state (see `WorkspaceGate`) — never a silent\n * fallback to the unconfigured behavior.\n */\n\n/** Env var carrying the JSON-serialized workspace config for hosted deployments. */\nexport const WORKSPACE_ENV_VAR = 'VITE_ELYTRA_WORKSPACE'\n\nexport type WorkspaceState =\n | { kind: 'none' }\n | { kind: 'config'; source: string; projects: ResolvedWorkspaceProject[] }\n | { kind: 'invalid'; source: string; issues: WorkspaceConfigIssue[] }\n\nexport interface WorkspaceSources {\n /** Module namespace of the bundled `elytra.config.ts`, when one was bundled. */\n fileModule?: unknown\n /** Source label for file-channel issues (defaults to the conventional name). */\n fileName?: string\n /** Raw value of {@link WORKSPACE_ENV_VAR}, when set. */\n envJson?: string\n}\n\nfunction fromValue(value: unknown, source: string): WorkspaceState {\n const result = resolveWorkspaceConfig(value, { file: source })\n return result.ok\n ? { kind: 'config', source, projects: result.projects }\n : { kind: 'invalid', source, issues: result.issues }\n}\n\n/** Resolve the workspace state from the available channels. Pure and deterministic. */\nexport function resolveWorkspaceState(sources: WorkspaceSources): WorkspaceState {\n if (sources.fileModule !== undefined) {\n const file = sources.fileName ?? WORKSPACE_CONFIG_FILE\n const extracted = extractWorkspaceConfigExport(sources.fileModule, file)\n if ('issue' in extracted) return { kind: 'invalid', source: file, issues: [extracted.issue] }\n return fromValue(extracted.value, file)\n }\n\n if (sources.envJson !== undefined && sources.envJson.trim() !== '') {\n const source = WORKSPACE_ENV_VAR\n let parsed: unknown\n try {\n parsed = JSON.parse(sources.envJson)\n } catch (cause) {\n return {\n kind: 'invalid',\n source,\n issues: [\n {\n code: 'invalid-config-shape',\n severity: 'error',\n message: `${WORKSPACE_ENV_VAR} is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`,\n path: [],\n file: source,\n },\n ],\n }\n }\n return fromValue(parsed, source)\n }\n\n return { kind: 'none' }\n}\n"]}
|
package/dist/router/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,wBAAwB,CAAA;AAG/B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAwB,CAAA;AAE5D;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,wBAAwB,CAAA;AAG/B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAwB,CAAA;AAE5D;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA","sourcesContent":["/**\n * Studio router adapter (EC-223 Stage 3 — the gating seam). The studio UI\n * navigates through these primitives instead of importing `@tanstack/react-router`\n * directly, so the engine owns its router CHOICE (TanStack Router) without being\n * hard-wired to a specific app: the consuming app provides the router INSTANCE +\n * the generated route tree (for Aurora, via TanStack Start). `@tanstack/react-router`\n * is a PEER dependency so there is exactly one instance — hence one router context\n * the re-exported hooks read.\n *\n * Only the runtime navigation primitives the studio components use are surfaced\n * here; route DEFINITION (`createFileRoute`/`createRouter`) stays in the consumer's\n * route files. Paths are addressed as plain strings (`to=\"/$projectId\"`), so the\n * components don't depend on the consumer's route-tree types.\n */\nexport {\n Link,\n Navigate,\n useBlocker,\n useLocation,\n useNavigate,\n useParams,\n useSearch,\n} from '@tanstack/react-router'\nexport type { LinkProps } from '@tanstack/react-router'\n\n/**\n * The studio's single in-project route (EC-223 Stage 6 — catch-all routing).\n * Every URL under a project is served by one splat, addressed by its `_splat`\n * subpath. By the route-table contract (`./match`), that subpath is the section\n * id for a top-level section (`'cms'`, `'settings'`, …) and the deep path for a\n * nested screen (`'cms/<collection>/<doc>'`). Navigate to a section with\n * `to={STUDIO_PROJECT_ROUTE} params={{ projectId, _splat }}` rather than a\n * per-section path that no longer exists in the consumer's route tree.\n */\nexport const STUDIO_PROJECT_ROUTE = '/$projectId/$' as const\n\n/**\n * Typed `_splat` builder for the studio splat — the inverse of the engine route\n * table (`./match`). Re-exported here so a component imports the link seam from\n * one place: `{ Link, STUDIO_PROJECT_ROUTE, studioPath }`.\n */\nexport { studioPath } from './match'\n"]}
|
package/dist/router/match.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"match.js","sourceRoot":"","sources":["../../src/router/match.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAaH,yFAAyF;AACzF,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,2EAA2E;IAC3E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAEnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,0EAA0E;YAC1E,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAEvE,KAAK,YAAY;YACf,4EAA4E;YAC5E,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YACpD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,IAAI,IAAI,EAAE,CAAA;QAE1D,KAAK,KAAK;YACR,yFAAyF;YACzF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,IAAI,EAAE,CAAA;QAE3E;YACE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IACf,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;IACxB,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY;IAC9B,SAAS,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,cAAc,WAAW,EAAE;IAC/D,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;IAChB,aAAa,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,OAAO,YAAY,EAAE;IAC9D,WAAW,EAAE,CAAC,YAAoB,EAAE,UAAkB,EAAE,EAAE,CACxD,OAAO,YAAY,IAAI,UAAU,EAAE;CAC7B,CAAA"}
|
|
1
|
+
{"version":3,"file":"match.js","sourceRoot":"","sources":["../../src/router/match.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAaH,yFAAyF;AACzF,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,2EAA2E;IAC3E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAEnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,0EAA0E;YAC1E,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAEvE,KAAK,YAAY;YACf,4EAA4E;YAC5E,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YACpD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,IAAI,IAAI,EAAE,CAAA;QAE1D,KAAK,KAAK;YACR,yFAAyF;YACzF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,IAAI,EAAE,CAAA;QAE3E;YACE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IACf,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;IACxB,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY;IAC9B,SAAS,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,cAAc,WAAW,EAAE;IAC/D,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;IAChB,aAAa,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,OAAO,YAAY,EAAE;IAC9D,WAAW,EAAE,CAAC,YAAoB,EAAE,UAAkB,EAAE,EAAE,CACxD,OAAO,YAAY,IAAI,UAAU,EAAE;CAC7B,CAAA","sourcesContent":["/**\n * Studio route table (EC-223 Stage 6 — catch-all routing). The studio mounts as\n * a SINGLE splat route per project (`/$projectId/$`); this pure matcher turns the\n * splat's trailing pathname into a typed match that the screen resolver renders.\n * Keeping the URL→screen map inside the engine (instead of in per-consumer route\n * files) is what lets the package own its navigation with a near-empty consumer\n * route tree — the goal of Stage 6.\n *\n * Deterministic and dependency-free: every screen state is reproducible from a\n * pathname string (see `match.test.ts`), satisfying the fixtures-reproducibility\n * convention without needing a router instance.\n *\n * The shape mirrors the retired file tree:\n * /$projectId → { section: 'index' } (redirect to first section)\n * /$projectId/settings → { section: 'settings' }\n * /$projectId/assets → { section: 'assets' }\n * /$projectId/routes → { section: 'routes' }\n * /$projectId/extensions → { section: 'extensions' }\n * /$projectId/builder → { section: 'builder' } (legacy redirect)\n * /$projectId/components → { section: 'components', componentId: null }\n * /$projectId/components/:id → { section: 'components', componentId: ':id' }\n * /$projectId/cms → { section: 'cms', collectionId: null, documentId: null }\n * /$projectId/cms/:c → { section: 'cms', collectionId: ':c', documentId: null }\n * /$projectId/cms/:c/:d → { section: 'cms', collectionId: ':c', documentId: ':d' }\n * anything else → { section: 'not-found' }\n */\n\nexport type StudioRouteMatch =\n | { section: 'index' }\n | { section: 'settings' }\n | { section: 'assets' }\n | { section: 'routes' }\n | { section: 'extensions' }\n | { section: 'builder' }\n | { section: 'components'; componentId: string | null }\n | { section: 'cms'; collectionId: string | null; documentId: string | null }\n | { section: 'not-found' }\n\n/** Split a splat pathname into clean segments (drops empty/leading/trailing slashes). */\nfunction segments(splat: string): string[] {\n return splat\n .split('/')\n .map((segment) => segment.trim())\n .filter(Boolean)\n}\n\n/**\n * Match the trailing pathname of the project splat (`_splat`) against the studio\n * route table. `splat` is everything after `/$projectId/` — e.g. `'cms/page/abc'`\n * for `/p1/cms/page/abc`. An empty splat is the bare project index.\n */\nexport function matchStudioRoute(splat: string): StudioRouteMatch {\n const [head, a, b, ...rest] = segments(splat)\n\n // Bare `/$projectId` → the project index (redirects to the first section).\n if (head === undefined) return { section: 'index' }\n\n switch (head) {\n case 'settings':\n case 'assets':\n case 'routes':\n case 'extensions':\n case 'builder':\n // Flat sections take no path params; any trailing segment is not a route.\n return a === undefined ? { section: head } : { section: 'not-found' }\n\n case 'components':\n // `components` (index) or `components/:id` (detail); deeper is not a route.\n if (b !== undefined) return { section: 'not-found' }\n return { section: 'components', componentId: a ?? null }\n\n case 'cms':\n // `cms` (index) | `cms/:c` (collection) | `cms/:c/:d` (document); deeper is not a route.\n if (rest.length > 0) return { section: 'not-found' }\n return { section: 'cms', collectionId: a ?? null, documentId: b ?? null }\n\n default:\n return { section: 'not-found' }\n }\n}\n\n/**\n * The inverse of {@link matchStudioRoute}: build the `_splat` subpath for a\n * screen. Navigation addresses the single project splat as\n * `to={STUDIO_PROJECT_ROUTE} params={{ projectId, _splat: studioPath.X(...) }}`,\n * so the URL-construction lives in exactly one place — the same module that\n * parses it back. `matchStudioRoute(studioPath.cmsDocument(c, d))` round-trips\n * (pinned in `match.test.ts`), which is what keeps the two directions in sync.\n */\nexport const studioPath = {\n index: () => '',\n settings: () => 'settings',\n assets: () => 'assets',\n routes: () => 'routes',\n extensions: () => 'extensions',\n builder: () => 'builder',\n components: () => 'components',\n component: (componentId: string) => `components/${componentId}`,\n cms: () => 'cms',\n cmsCollection: (collectionId: string) => `cms/${collectionId}`,\n cmsDocument: (collectionId: string, documentId: string) =>\n `cms/${collectionId}/${documentId}`,\n} as const\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/router/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAuBhE,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,OAAO;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IACzC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACzF,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACzF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACrF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/router/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAuBhE,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,OAAO;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IACzC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACzF,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACzF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACrF,OAAO,GAAG,CAAA;AACZ,CAAC","sourcesContent":["import { sectionStateSchema } from '@elytracms/core/studio-core'\nimport type { SectionState } from '@elytracms/core/studio-core'\n\n/**\n * The studio's project-splat search contract (EC-223 Stage 6). With every\n * in-project URL served by one splat route, that route needs ONE `validateSearch`\n * covering the union of the per-screen search params the retired file routes each\n * declared:\n * - `state` — the deterministic section-state switcher (`?state=`, brief §11)\n * - `asset` — assets deep-link (EC-172, `?asset=`)\n * - `field` — document detail field deep-link (EC-172, `?field=`)\n * - `page` — legacy builder redirect (`?page=`)\n *\n * All fields are optional, so the splat route accepts any section's search and\n * the resolver narrows per matched screen with the screen's own pure parser.\n */\nexport interface StudioSearch {\n state?: SectionState\n asset?: string\n field?: string\n page?: string\n}\n\n/** Pure `validateSearch` for the project splat: parse the search superset. */\nexport function studioSearch(search: Record<string, unknown>): StudioSearch {\n const out: StudioSearch = {}\n const state = sectionStateSchema.safeParse(search.state)\n if (state.success) out.state = state.data\n if (typeof search.asset === 'string' && search.asset.length > 0) out.asset = search.asset\n if (typeof search.field === 'string' && search.field.length > 0) out.field = search.field\n if (typeof search.page === 'string' && search.page.length > 0) out.page = search.page\n return out\n}\n"]}
|
package/dist/ui/avatar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/ui/avatar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,gBAAgB;IACpB,EAAE,EAAE,gBAAgB;CACZ,CAAA;AAEV;;;GAGG;AACH,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,eAAe;IACf,gBAAgB;CACR,CAAA;AAEV,iFAAiF;AACjF,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACpF,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAe;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAA;IAC3D,OAAO,CACL,oCAEE,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,WAAW,CAAC,IAAI,CAAC,EACjB,OAAO,CAAC,KAAK,CAAC,EACd,SAAS,CACV,KACG,KAAK,YAER,OAAO,GACH,CACR,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/ui/avatar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,gBAAgB;IACpB,EAAE,EAAE,gBAAgB;CACZ,CAAA;AAEV;;;GAGG;AACH,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,eAAe;IACf,gBAAgB;CACR,CAAA;AAEV,iFAAiF;AACjF,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACpF,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAe;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAA;IAC3D,OAAO,CACL,oCAEE,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,WAAW,CAAC,IAAI,CAAC,EACjB,OAAO,CAAC,KAAK,CAAC,EACd,SAAS,CACV,KACG,KAAK,YAER,OAAO,GACH,CACR,CAAA;AACH,CAAC","sourcesContent":["import type { ComponentProps } from 'react'\nimport { cn } from '../lib/utils'\n\nconst AVATAR_SIZE = {\n sm: 'size-6 text-[0.65rem]',\n md: 'size-7 text-xs',\n lg: 'size-9 text-sm',\n} as const\n\n/**\n * Deterministic, theme-independent palette: a solid fill with a white glyph\n * reads cleanly in both light and dark, so the avatar needs no per-theme tokens.\n */\nconst AVATAR_TONES = [\n 'bg-rose-500',\n 'bg-orange-500',\n 'bg-amber-500',\n 'bg-emerald-500',\n 'bg-teal-500',\n 'bg-sky-500',\n 'bg-indigo-500',\n 'bg-violet-500',\n 'bg-fuchsia-500',\n] as const\n\n/** Stable hash → palette index, so the same label always gets the same color. */\nfunction toneFor(seed: string): string {\n let hash = 0\n for (let i = 0; i < seed.length; i += 1) hash = (hash * 31 + seed.charCodeAt(i)) | 0\n return AVATAR_TONES[Math.abs(hash) % AVATAR_TONES.length] ?? AVATAR_TONES[0]\n}\n\nexport interface AvatarProps extends Omit<ComponentProps<'span'>, 'children'> {\n /** Display name or email: the first letter is shown; the full string seeds the color. */\n label: string\n size?: keyof typeof AVATAR_SIZE\n}\n\n/**\n * Reusable identity avatar — a colored circle with the label's first letter.\n * Used for the signed-in user (and reusable for any person/entity glyph).\n */\nexport function Avatar({ label, size = 'md', className, ...props }: AvatarProps) {\n const initial = label.trim().charAt(0).toUpperCase() || '?'\n return (\n <span\n aria-hidden\n className={cn(\n 'inline-grid shrink-0 select-none place-items-center rounded-full font-semibold text-white',\n AVATAR_SIZE[size],\n toneFor(label),\n className,\n )}\n {...props}\n >\n {initial}\n </span>\n )\n}\n"]}
|
package/dist/ui/badge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/ui/badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAC9B,kIAAkI,EAClI;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,2DAA2D;YACpE,OAAO,EAAE,qCAAqC;YAC9C,OAAO,EAAE,8CAA8C;YACvD,mEAAmE;YACnE,OAAO,EAAE,8CAA8C;YACvD,OAAO,EAAE,8CAA8C;YACvD,KAAK,EAAE,0DAA0D;YACjE,IAAI,EAAE,qCAAqC;SAC5C;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;CACxC,CACF,CAAA;AAMD,yFAAyF;AACzF,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc;IAChE,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAClF,CAAC"}
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/ui/badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAC9B,kIAAkI,EAClI;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,2DAA2D;YACpE,OAAO,EAAE,qCAAqC;YAC9C,OAAO,EAAE,8CAA8C;YACvD,mEAAmE;YACnE,OAAO,EAAE,8CAA8C;YACvD,OAAO,EAAE,8CAA8C;YACvD,KAAK,EAAE,0DAA0D;YACjE,IAAI,EAAE,qCAAqC;SAC5C;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;CACxC,CACF,CAAA;AAMD,yFAAyF;AACzF,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc;IAChE,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAClF,CAAC","sourcesContent":["import { type VariantProps, cva } from 'class-variance-authority'\nimport type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium leading-none transition-colors [&_svg]:size-3',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-secondary text-secondary-foreground',\n outline: 'border-border text-muted-foreground',\n primary: 'border-primary/25 bg-primary/12 text-primary',\n // Validation-state badges — central to this product (brief §4.11).\n success: 'border-success/25 bg-success/12 text-success',\n warning: 'border-warning/30 bg-warning/15 text-warning',\n error: 'border-destructive/25 bg-destructive/12 text-destructive',\n info: 'border-info/25 bg-info/12 text-info',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n)\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\n/** Named status/label primitive. Validation states map to success/warning/error/info. */\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n"]}
|
package/dist/ui/button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAC/B,2WAA2W,EAC3W;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,uFAAuF;YAChG,SAAS,EAAE,4EAA4E;YACvF,OAAO,EAAE,0EAA0E;YACnF,KAAK,EAAE,2EAA2E;YAClF,WAAW,EAAE,8EAA8E;YAC3F,IAAI,EAAE,iDAAiD;SACxD;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,+BAA+B;YACnC,OAAO,EAAE,YAAY;YACrB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,mBAAmB;SAC/B;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;CACzD,CACF,CAAA;AAQD,0FAA0F;AAC1F,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAe;IACzF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IACtC,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAC/B,2WAA2W,EAC3W;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,uFAAuF;YAChG,SAAS,EAAE,4EAA4E;YACvF,OAAO,EAAE,0EAA0E;YACnF,KAAK,EAAE,2EAA2E;YAClF,WAAW,EAAE,8EAA8E;YAC3F,IAAI,EAAE,iDAAiD;SACxD;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,+BAA+B;YACnC,OAAO,EAAE,YAAY;YACrB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,mBAAmB;SAC/B;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;CACzD,CACF,CAAA;AAQD,0FAA0F;AAC1F,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAe;IACzF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IACtC,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC","sourcesContent":["import { type VariantProps, cva } from 'class-variance-authority'\nimport { Slot } from '@radix-ui/react-slot'\nimport type { ButtonHTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,background-color,border-color,box-shadow] outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 active:bg-primary/95',\n secondary: 'bg-secondary text-secondary-foreground border border-border hover:bg-muted',\n outline: 'border border-border bg-transparent hover:bg-muted hover:text-foreground',\n ghost: 'bg-transparent hover:bg-muted text-muted-foreground hover:text-foreground',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n sm: 'h-7 rounded-sm px-2.5 text-xs',\n default: 'h-9 px-3.5',\n lg: 'h-10 px-5',\n icon: 'size-9',\n 'icon-sm': 'size-7 rounded-sm',\n },\n },\n defaultVariants: { variant: 'default', size: 'default' },\n },\n)\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\n/** Named button primitive — use instead of raw <button>. Supports `asChild` for links. */\nexport function Button({ className, variant, size, asChild = false, ...props }: ButtonProps) {\n const Comp = asChild ? Slot : 'button'\n return <Comp className={cn(buttonVariants({ variant, size }), className)} {...props} />\n}\n"]}
|
package/dist/ui/card.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/ui/card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,2EAA2E;AAC3E,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAClE,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,WAAW;YACT,uGAAuG,EACzG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAChF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAsC;IACnF,OAAO,aAAI,SAAS,EAAE,EAAE,CAAC,sCAAsC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC3F,OAAO,YAAG,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IACjF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAChF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/ui/card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,2EAA2E;AAC3E,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAClE,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,WAAW;YACT,uGAAuG,EACzG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAChF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAsC;IACnF,OAAO,aAAI,SAAS,EAAE,EAAE,CAAC,sCAAsC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC3F,OAAO,YAAG,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IACjF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAChF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n interactive?: boolean\n}\n\n/** Named card surface — use instead of repeated bordered/shadowed divs. */\nexport function Card({ interactive, className, ...props }: CardProps) {\n return (\n <div\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm',\n interactive &&\n 'cursor-pointer transition-[border-color,box-shadow,transform] hover:border-primary/40 hover:shadow-md',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-1 p-4', className)} {...props} />\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('text-sm font-semibold tracking-tight', className)} {...props} />\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('text-xs text-muted-foreground', className)} {...props} />\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('p-4 pt-0', className)} {...props} />\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex items-center gap-2 p-4 pt-0', className)} {...props} />\n}\n"]}
|
package/dist/ui/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/ui/dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAA;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAA;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAA;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAA;AAElD,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkD;IACnG,OAAO,CACL,KAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EAAE,EAAE,CACX,4KAA4K,EAC5K,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACuC;IAC/C,OAAO,CACL,MAAC,YAAY,eACX,KAAC,aAAa,KAAG,EACjB,MAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EAAE,EAAE,CACX,4KAA4K,EAC5K,uFAAuF,EACvF,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,MAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAC,0KAA0K,aACzM,KAAC,CAAC,IAAC,SAAS,EAAC,QAAQ,GAAG,EACxB,eAAM,SAAS,EAAC,SAAS,sBAAa,IAChB,IACA,IACb,CAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgD;IAC/F,OAAO,KAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,KAAC,eAAe,CAAC,WAAW,IAAC,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9G,CAAC"}
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/ui/dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAA;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAA;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAA;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAA;AAElD,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkD;IACnG,OAAO,CACL,KAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EAAE,EAAE,CACX,4KAA4K,EAC5K,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACuC;IAC/C,OAAO,CACL,MAAC,YAAY,eACX,KAAC,aAAa,KAAG,EACjB,MAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EAAE,EAAE,CACX,4KAA4K,EAC5K,uFAAuF,EACvF,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,MAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAC,0KAA0K,aACzM,KAAC,CAAC,IAAC,SAAS,EAAC,QAAQ,GAAG,EACxB,eAAM,SAAS,EAAC,SAAS,sBAAa,IAChB,IACA,IACb,CAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgD;IAC/F,OAAO,KAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,KAAC,eAAe,CAAC,WAAW,IAAC,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9G,CAAC","sourcesContent":["import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport type { ComponentProps } from 'react'\nimport { cn } from '../lib/utils'\n\nexport const Dialog = DialogPrimitive.Root\nexport const DialogTrigger = DialogPrimitive.Trigger\nexport const DialogClose = DialogPrimitive.Close\nexport const DialogPortal = DialogPrimitive.Portal\n\nexport function DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/55 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DialogContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content>) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl border border-border bg-popover p-5 text-popover-foreground shadow-2xl',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3.5 top-3.5 rounded-sm text-muted-foreground opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring/60 outline-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nexport function DialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return <div className={cn('flex flex-col gap-1.5', className)} {...props} />\n}\n\nexport function DialogFooter({ className, ...props }: ComponentProps<'div'>) {\n return <div className={cn('flex items-center justify-end gap-2 pt-2', className)} {...props} />\n}\n\nexport function DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return <DialogPrimitive.Title className={cn('text-base font-semibold tracking-tight', className)} {...props} />\n}\n\nexport function DialogDescription({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n return <DialogPrimitive.Description className={cn('text-sm text-muted-foreground', className)} {...props} />\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../src/ui/dropdown-menu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAA;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,OAAO,CAAA;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,CAAA;AAE5D,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,UAAU,GAAG,CAAC,EACd,KAAK,GAAG,OAAO,EACf,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,KAAC,qBAAqB,CAAC,MAAM,cAC3B,KAAC,qBAAqB,CAAC,OAAO,IAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CACX,qHAAqH,EACrH,uFAAuF,EACvF,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,GACT,GAC2B,CAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,OAAO,GAAG,SAAS,EACnB,GAAG,KAAK,EAIT;IACC,OAAO,CACL,KAAC,qBAAqB,CAAC,IAAI,IACzB,SAAS,EAAE,EAAE,CACX,2HAA2H,EAC3H,qGAAqG,EACrG,+DAA+D,EAC/D,KAAK,IAAI,MAAM,EACf,OAAO,KAAK,aAAa;YACvB,0FAA0F,EAC5F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,SAAS,EACT,QAAQ,EACR,OAAO,EACP,GAAG,KAAK,EACkD;IAC1D,OAAO,CACL,MAAC,qBAAqB,CAAC,YAAY,IACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,gIAAgI,EAChI,qGAAqG,EACrG,SAAS,CACV,KACG,KAAK,aAET,eAAM,SAAS,EAAC,yDAAyD,YACvE,KAAC,qBAAqB,CAAC,aAAa,cAClC,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,GAAG,GACM,GACjC,EACN,QAAQ,IAC0B,CACtC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACiE;IACzE,OAAO,CACL,KAAC,qBAAqB,CAAC,KAAK,IAC1B,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,KAAK,IAAI,MAAM,EACf,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EAC+C;IACvD,OAAO,CACL,KAAC,qBAAqB,CAAC,SAAS,IAC9B,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KACjD,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../src/ui/dropdown-menu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAA;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,OAAO,CAAA;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,CAAA;AAE5D,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,UAAU,GAAG,CAAC,EACd,KAAK,GAAG,OAAO,EACf,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,KAAC,qBAAqB,CAAC,MAAM,cAC3B,KAAC,qBAAqB,CAAC,OAAO,IAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CACX,qHAAqH,EACrH,uFAAuF,EACvF,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,GACT,GAC2B,CAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,OAAO,GAAG,SAAS,EACnB,GAAG,KAAK,EAIT;IACC,OAAO,CACL,KAAC,qBAAqB,CAAC,IAAI,IACzB,SAAS,EAAE,EAAE,CACX,2HAA2H,EAC3H,qGAAqG,EACrG,+DAA+D,EAC/D,KAAK,IAAI,MAAM,EACf,OAAO,KAAK,aAAa;YACvB,0FAA0F,EAC5F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,SAAS,EACT,QAAQ,EACR,OAAO,EACP,GAAG,KAAK,EACkD;IAC1D,OAAO,CACL,MAAC,qBAAqB,CAAC,YAAY,IACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,gIAAgI,EAChI,qGAAqG,EACrG,SAAS,CACV,KACG,KAAK,aAET,eAAM,SAAS,EAAC,yDAAyD,YACvE,KAAC,qBAAqB,CAAC,aAAa,cAClC,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,GAAG,GACM,GACjC,EACN,QAAQ,IAC0B,CACtC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACiE;IACzE,OAAO,CACL,KAAC,qBAAqB,CAAC,KAAK,IAC1B,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,KAAK,IAAI,MAAM,EACf,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EAC+C;IACvD,OAAO,CACL,KAAC,qBAAqB,CAAC,SAAS,IAC9B,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KACjD,KAAK,GACT,CACH,CAAA;AACH,CAAC","sourcesContent":["import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check } from 'lucide-react'\nimport type { ComponentProps } from 'react'\nimport { cn } from '../lib/utils'\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nexport function DropdownMenuContent({\n className,\n sideOffset = 6,\n align = 'start',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'z-50 min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-xl',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nexport function DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n <DropdownMenuPrimitive.Item\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none transition-colors',\n 'focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n '[&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground',\n inset && 'pl-8',\n variant === 'destructive' &&\n 'text-destructive focus:bg-destructive/10 focus:text-destructive [&_svg]:text-destructive',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n checked={checked}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-md py-1.5 pl-8 pr-2 text-sm outline-none transition-colors',\n 'focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nexport function DropdownMenuLabel({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.Label\n className={cn(\n 'px-2 py-1.5 text-[0.7rem] font-semibold uppercase tracking-[0.12em] text-muted-foreground',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DropdownMenuSeparator({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n"]}
|
package/dist/ui/field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/ui/field.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAajC,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAc;IAC9F,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,aACpD,MAAC,UAAU,IAAC,OAAO,EAAE,OAAO,aACzB,KAAK,EACL,QAAQ,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,kBAAkB,mBAAU,CAAC,CAAC,CAAC,IAAI,IACpD,EACZ,QAAQ,EACR,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,SAAS,EAAC,sCAAsC,EAAC,IAAI,EAAC,OAAO,YAC7D,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,YAAG,SAAS,EAAC,+BAA+B,YAAE,IAAI,GAAK,CACxD,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyC;IACvF,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAC9D,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA2C;IAC/F,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,iBACE,SAAS,EAAE,EAAE,CACX,8IAA8I,EAC9I,wFAAwF,EACxF,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACF,EACT,KAAC,WAAW,IAAC,SAAS,EAAC,gGAAgG,GAAG,IACtH,CACP,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/ui/field.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAajC,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAc;IAC9F,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,aACpD,MAAC,UAAU,IAAC,OAAO,EAAE,OAAO,aACzB,KAAK,EACL,QAAQ,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,kBAAkB,mBAAU,CAAC,CAAC,CAAC,IAAI,IACpD,EACZ,QAAQ,EACR,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,SAAS,EAAC,sCAAsC,EAAC,IAAI,EAAC,OAAO,YAC7D,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,YAAG,SAAS,EAAC,+BAA+B,YAAE,IAAI,GAAK,CACxD,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyC;IACvF,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAC9D,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA2C;IAC/F,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,iBACE,SAAS,EAAE,EAAE,CACX,8IAA8I,EAC9I,wFAAwF,EACxF,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACF,EACT,KAAC,WAAW,IAAC,SAAS,EAAC,gGAAgG,GAAG,IACtH,CACP,CAAA;AACH,CAAC","sourcesContent":["import { ChevronDown } from 'lucide-react'\nimport type { LabelHTMLAttributes, ReactNode, SelectHTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\n/** A labelled form field group: label, control, and optional hint/error. */\nexport interface FieldProps {\n label: ReactNode\n htmlFor?: string\n hint?: ReactNode\n error?: ReactNode\n required?: boolean\n children: ReactNode\n className?: string\n}\n\nexport function Field({ label, htmlFor, hint, error, required, children, className }: FieldProps) {\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <FieldLabel htmlFor={htmlFor}>\n {label}\n {required ? <span className=\"text-destructive\"> *</span> : null}\n </FieldLabel>\n {children}\n {error ? (\n <p className=\"text-xs font-medium text-destructive\" role=\"alert\">\n {error}\n </p>\n ) : hint ? (\n <p className=\"text-xs text-muted-foreground\">{hint}</p>\n ) : null}\n </div>\n )\n}\n\nexport function FieldLabel({ className, ...props }: LabelHTMLAttributes<HTMLLabelElement>) {\n return (\n <label\n className={cn('text-xs font-medium text-foreground/90', className)}\n {...props}\n />\n )\n}\n\n/** Native select styled to match Input — accessible and SSR-friendly. */\nexport function Select({ className, children, ...props }: SelectHTMLAttributes<HTMLSelectElement>) {\n return (\n <div className=\"relative\">\n <select\n className={cn(\n 'flex h-8 w-full appearance-none rounded-md border border-input bg-background pl-2.5 pr-8 text-sm text-foreground shadow-sm transition-colors',\n 'focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n </div>\n )\n}\n"]}
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA","sourcesContent":["export * from './typography'\nexport * from './layout'\nexport * from './avatar'\nexport * from './button'\nexport * from './input'\nexport * from './badge'\nexport * from './card'\nexport * from './panel'\nexport * from './separator'\nexport * from './toolbar'\nexport * from './inspector'\nexport * from './dialog'\nexport * from './dropdown-menu'\nexport * from './field'\nexport * from './toast'\n"]}
|
package/dist/ui/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/ui/input.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,EAAyC;IACjG,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CACX,yHAAyH,EACzH,sCAAsC,EACtC,wFAAwF,EACxF,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/ui/input.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,EAAyC;IACjG,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CACX,yHAAyH,EACzH,sCAAsC,EACtC,wFAAwF,EACxF,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC","sourcesContent":["import type { InputHTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\n/** Named text input primitive — shadcn-style, token-driven. */\nexport function Input({ className, type = 'text', ...props }: InputHTMLAttributes<HTMLInputElement>) {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-8 w-full rounded-md border border-input bg-background px-2.5 text-sm text-foreground shadow-sm transition-colors',\n 'placeholder:text-muted-foreground/60',\n 'focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\n"]}
|
package/dist/ui/inspector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/ui/inspector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAQjC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAyB;IACtG,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAAM,KAAK,aAC/E,KAAK,IAAI,IAAI,IAAI,CAChB,eAAK,SAAS,EAAC,oDAAoD,aACjE,eAAM,SAAS,EAAC,+EAA+E,YAC5F,KAAK,GACD,EACN,MAAM,IACH,CACP,EACD,cAAK,SAAS,EAAC,oCAAoC,YAAE,QAAQ,GAAO,IAChE,CACP,CAAA;AACH,CAAC;AAQD,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IACrG,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,KAAM,KAAK,aAC3F,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,YAC7H,KAAK,GACA,EACR,eAAK,SAAS,EAAC,SAAS,aACrB,QAAQ,EACR,IAAI,IAAI,IAAI,IAAI,YAAG,SAAS,EAAC,6CAA6C,YAAE,IAAI,GAAK,IAClF,IACF,CACP,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/ui/inspector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAQjC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAyB;IACtG,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,KAAM,KAAK,aAC/E,KAAK,IAAI,IAAI,IAAI,CAChB,eAAK,SAAS,EAAC,oDAAoD,aACjE,eAAM,SAAS,EAAC,+EAA+E,YAC5F,KAAK,GACD,EACN,MAAM,IACH,CACP,EACD,cAAK,SAAS,EAAC,oCAAoC,YAAE,QAAQ,GAAO,IAChE,CACP,CAAA;AACH,CAAC;AAQD,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IACrG,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,KAAM,KAAK,aAC3F,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,YAC7H,KAAK,GACA,EACR,eAAK,SAAS,EAAC,SAAS,aACrB,QAAQ,EACR,IAAI,IAAI,IAAI,IAAI,YAAG,SAAS,EAAC,6CAA6C,YAAE,IAAI,GAAK,IAClF,IACF,CACP,CAAA;AACH,CAAC","sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface InspectorSectionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: ReactNode\n /** Optional trailing content in the section header (e.g. an action button). */\n action?: ReactNode\n}\n\n/**\n * Named inspector section — the building block of the property inspector (brief §8.2).\n * Use instead of ad-hoc labelled div groups.\n */\nexport function InspectorSection({ title, action, className, children, ...props }: InspectorSectionProps) {\n return (\n <div className={cn('border-b border-border last:border-b-0', className)} {...props}>\n {title != null && (\n <div className=\"flex items-center justify-between px-3 pt-3 pb-1.5\">\n <span className=\"text-[0.7rem] font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {title}\n </span>\n {action}\n </div>\n )}\n <div className=\"flex flex-col gap-1 px-3 pb-3 pt-1\">{children}</div>\n </div>\n )\n}\n\nexport interface InspectorRowProps extends HTMLAttributes<HTMLDivElement> {\n label: ReactNode\n htmlFor?: string\n hint?: ReactNode\n}\n\n/** A label/control row inside an InspectorSection. */\nexport function InspectorRow({ label, htmlFor, hint, className, children, ...props }: InspectorRowProps) {\n return (\n <div className={cn('grid grid-cols-[88px_1fr] items-center gap-2 py-1', className)} {...props}>\n <label htmlFor={htmlFor} className=\"truncate text-xs text-muted-foreground\" title={typeof label === 'string' ? label : undefined}>\n {label}\n </label>\n <div className=\"min-w-0\">\n {children}\n {hint != null && <p className=\"mt-1 text-[0.7rem] text-muted-foreground/70\">{hint}</p>}\n </div>\n </div>\n )\n}\n"]}
|
package/dist/ui/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,OAAO;IACb,EAAE,EAAE,QAAQ;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;CACJ,CAAA;AAEV,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,cAAc;IACtB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,gBAAgB;CAClB,CAAA;AAEV,MAAM,OAAO,GAAG;IACd,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,gBAAgB;CAChB,CAAA;AASV,oFAAoF;AACpF,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IACvF,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,eAAe,EACf,GAAG,CAAC,GAAG,CAAC,EACR,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAC3B,IAAI,IAAI,WAAW,EACnB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAChG,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,eAAe,EACf,GAAG,CAAC,GAAG,CAAC,EACR,KAAK,CAAC,KAAK,CAAC,EACZ,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAC3B,IAAI,IAAI,WAAW,EACnB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAQD,0FAA0F;AAC1F,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAa;IAC3F,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,EAAE,mBAAmB,EAAE,4BAA4B,YAAY,SAAS,EAAE;QAC5E,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,UAAU,IAAI,mBAAmB,EAAE;YAC5D,CAAC,CAAC,SAAS,CAAA;IACf,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,KAAM,KAAK,GAAI,CAAA;AACxG,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC5E,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,0BAAkB,KAAK,GAAI,CAAA;AAC3E,CAAC"}
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,OAAO;IACb,EAAE,EAAE,QAAQ;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;CACJ,CAAA;AAEV,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,cAAc;IACtB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,gBAAgB;CAClB,CAAA;AAEV,MAAM,OAAO,GAAG;IACd,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,gBAAgB;CAChB,CAAA;AASV,oFAAoF;AACpF,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IACvF,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,eAAe,EACf,GAAG,CAAC,GAAG,CAAC,EACR,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAC3B,IAAI,IAAI,WAAW,EACnB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAChG,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,eAAe,EACf,GAAG,CAAC,GAAG,CAAC,EACR,KAAK,CAAC,KAAK,CAAC,EACZ,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAC3B,IAAI,IAAI,WAAW,EACnB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAQD,0FAA0F;AAC1F,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAa;IAC3F,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,EAAE,mBAAmB,EAAE,4BAA4B,YAAY,SAAS,EAAE;QAC5E,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,UAAU,IAAI,mBAAmB,EAAE;YAC5D,CAAC,CAAC,SAAS,CAAA;IACf,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,KAAM,KAAK,GAAI,CAAA;AACxG,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC5E,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,0BAAkB,KAAK,GAAI,CAAA;AAC3E,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nconst GAP = {\n none: 'gap-0',\n px: 'gap-px',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '6': 'gap-6',\n '8': 'gap-8',\n} as const\n\nconst ALIGN = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n} as const\n\nconst JUSTIFY = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n} as const\n\ninterface FlexProps extends HTMLAttributes<HTMLDivElement> {\n gap?: keyof typeof GAP\n align?: keyof typeof ALIGN\n justify?: keyof typeof JUSTIFY\n wrap?: boolean\n}\n\n/** Vertical stack — named layout primitive instead of an anonymous flex-col div. */\nexport function Stack({ gap = '3', align, justify, wrap, className, ...props }: FlexProps) {\n return (\n <div\n className={cn(\n 'flex flex-col',\n GAP[gap],\n align && ALIGN[align],\n justify && JUSTIFY[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n />\n )\n}\n\n/** Horizontal row — named layout primitive instead of an anonymous flex-row div. */\nexport function Row({ gap = '2', align = 'center', justify, wrap, className, ...props }: FlexProps) {\n return (\n <div\n className={cn(\n 'flex flex-row',\n GAP[gap],\n ALIGN[align],\n justify && JUSTIFY[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n />\n )\n}\n\ninterface GridProps extends HTMLAttributes<HTMLDivElement> {\n cols?: number\n gap?: keyof typeof GAP\n minItemWidth?: string\n}\n\n/** Grid — named layout primitive. Pass `minItemWidth` for an auto-fit responsive grid. */\nexport function Grid({ cols, gap = '4', minItemWidth, className, style, ...props }: GridProps) {\n const autoFit = minItemWidth\n ? { gridTemplateColumns: `repeat(auto-fill, minmax(${minItemWidth}, 1fr))` }\n : cols\n ? { gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }\n : undefined\n return <div className={cn('grid', GAP[gap], className)} style={{ ...autoFit, ...style }} {...props} />\n}\n\n/** A flexible spacer that pushes siblings apart inside a Row/Stack. */\nexport function Spacer({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex-1', className)} aria-hidden {...props} />\n}\n"]}
|
package/dist/ui/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/ui/panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC3E,OAAO,CACL,kBACE,SAAS,EAAE,EAAE,CAAC,wEAAwE,EAAE,SAAS,CAAC,KAC9F,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAMD,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IAC3E,OAAO,CACL,KAAC,GAAG,IACF,GAAG,EAAC,GAAG,EACP,SAAS,EAAE,EAAE,CACX,+BAA+B,EAC/B,MAAM,IAAI,6CAA6C,EACvD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC/E,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IACjF,OAAO,KAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9F,CAAC"}
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/ui/panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC3E,OAAO,CACL,kBACE,SAAS,EAAE,EAAE,CAAC,wEAAwE,EAAE,SAAS,CAAC,KAC9F,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAMD,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IAC3E,OAAO,CACL,KAAC,GAAG,IACF,GAAG,EAAC,GAAG,EACP,SAAS,EAAE,EAAE,CACX,+BAA+B,EAC/B,MAAM,IAAI,6CAA6C,EACvD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC/E,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACzF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IACjF,OAAO,KAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAC9F,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\nimport { Row } from './layout'\n\n/**\n * Panel — the primary surface primitive for Studio regions (sidebars, inspector,\n * canvas chrome). Use instead of stray bordered divs.\n */\nexport function Panel({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <section\n className={cn('flex flex-col overflow-hidden rounded-lg border border-border bg-panel', className)}\n {...props}\n />\n )\n}\n\nexport interface PanelHeaderProps extends HTMLAttributes<HTMLDivElement> {\n sticky?: boolean\n}\n\nexport function PanelHeader({ sticky, className, ...props }: PanelHeaderProps) {\n return (\n <Row\n gap=\"2\"\n className={cn(\n 'h-11 shrink-0 px-3 hairline-b',\n sticky && 'sticky top-0 z-10 bg-panel/95 backdrop-blur',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function PanelBody({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('min-h-0 flex-1 overflow-auto p-3', className)} {...props} />\n}\n\nexport function PanelFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <Row gap=\"2\" className={cn('h-11 shrink-0 px-3 hairline-t', className)} {...props} />\n}\n"]}
|
package/dist/ui/separator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"separator.js","sourceRoot":"","sources":["../../src/ui/separator.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,iCAAiC;AACjC,MAAM,UAAU,SAAS,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkB;IAC3F,OAAO,CACL,cACE,IAAI,EAAC,WAAW,sBACE,WAAW,EAC7B,SAAS,EAAE,EAAE,CACX,oBAAoB,EACpB,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAC5D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"separator.js","sourceRoot":"","sources":["../../src/ui/separator.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,iCAAiC;AACjC,MAAM,UAAU,SAAS,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkB;IAC3F,OAAO,CACL,cACE,IAAI,EAAC,WAAW,sBACE,WAAW,EAC7B,SAAS,EAAE,EAAE,CACX,oBAAoB,EACpB,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAC5D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical'\n}\n\n/** Named separator primitive. */\nexport function Separator({ orientation = 'horizontal', className, ...props }: SeparatorProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n {...props}\n />\n )\n}\n"]}
|
package/dist/ui/toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/ui/toast.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAkB1D,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAEhC,IAAI,KAAK,GAAgB,EAAE,CAAA;AAC3B,IAAI,GAAG,GAAG,CAAC,CAAA;AACX,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAA;AAEzD,SAAS,IAAI;IACX,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,QAAsC;IACpE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,SAAS;IACvB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9C,IAAI,EAAE,CAAA;AACR,CAAC;AAED,SAAS,IAAI,CAAC,OAAe,EAAE,OAAqB,EAAE,UAAU,GAAG,mBAAmB;IACpF,MAAM,EAAE,GAAG,EAAE,GAAG,CAAA;IAChB,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5C,IAAI,EAAE,CAAA;IACN,IAAI,UAAU,GAAG,CAAC;QAAE,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAClE,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,CAAC,OAAe,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,OAAO,EAAE,CAAC,OAAe,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;CAC/D,CAAA;AAED,MAAM,IAAI,GAAiC;IACzC,KAAK,EAAE,0DAA0D;IACjE,OAAO,EAAE,8CAA8C;CACxD,CAAA;AAED,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAuB;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAA;IACjE,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,4FAA4F,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,iBAC9G,SAAS,IAAI,CAAC,OAAO,EAAE,aAEpC,KAAC,IAAI,IAAC,SAAS,EAAC,uBAAuB,wBAAe,EACtD,eAAM,SAAS,EAAC,gBAAgB,YAAE,IAAI,CAAC,OAAO,GAAQ,EACtD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,gBACzB,SAAS,EACpB,SAAS,EAAC,0DAA0D,YAEpE,KAAC,CAAC,IAAC,SAAS,EAAC,UAAU,wBAAe,GAC/B,IACL,CACP,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,OAAO;IACrB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;IACtE,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAA;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,OAAO,CACL,cACE,SAAS,EAAC,mGAAmG,iBACjG,SAAS,YAEpB,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,KAAC,QAAQ,IAAe,IAAI,EAAE,IAAI,IAAnB,IAAI,CAAC,EAAE,CAAgB,CACvC,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/ui/toast.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react'\nimport { CircleAlert, CircleCheck, X } from 'lucide-react'\n\n/**\n * EC-268: a minimal, dependency-free toast (the studio had none — errors render\n * inline by default). Used for transient action feedback that has no natural\n * inline home, e.g. a publish that fails at the transport. A module-level store\n * keeps the API a plain `toast.error(msg)` callable from anywhere; the `<Toaster/>`\n * (mounted once in the shell) renders the live list. Success is intentionally\n * quiet at call sites — surface it on the control itself, not a toast.\n */\n\nexport type ToastVariant = 'error' | 'success'\nexport interface ToastItem {\n id: number\n message: string\n variant: ToastVariant\n}\n\nconst DEFAULT_DURATION_MS = 5000\n\nlet items: ToastItem[] = []\nlet seq = 0\nconst listeners = new Set<(items: ToastItem[]) => void>()\n\nfunction emit(): void {\n for (const listener of listeners) listener(items)\n}\n\n/** Subscribe to the toast list; returns an unsubscribe. */\nexport function subscribeToasts(listener: (items: ToastItem[]) => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\n/** Current toast list (snapshot) — for the renderer and tests. */\nexport function getToasts(): ToastItem[] {\n return items\n}\n\nexport function dismissToast(id: number): void {\n items = items.filter((item) => item.id !== id)\n emit()\n}\n\nfunction push(message: string, variant: ToastVariant, durationMs = DEFAULT_DURATION_MS): number {\n const id = ++seq\n items = [...items, { id, message, variant }]\n emit()\n if (durationMs > 0) setTimeout(() => dismissToast(id), durationMs)\n return id\n}\n\nexport const toast = {\n error: (message: string): number => push(message, 'error'),\n success: (message: string): number => push(message, 'success'),\n}\n\nconst TONE: Record<ToastVariant, string> = {\n error: 'border-destructive/30 bg-destructive/10 text-destructive',\n success: 'border-success/30 bg-success/10 text-success',\n}\n\nfunction ToastRow({ item }: { item: ToastItem }) {\n const Icon = item.variant === 'error' ? CircleAlert : CircleCheck\n return (\n <div\n role=\"status\"\n className={`pointer-events-auto flex items-start gap-2 rounded-md border px-3 py-2 text-xs shadow-sm ${TONE[item.variant]}`}\n data-testid={`toast-${item.variant}`}\n >\n <Icon className=\"mt-px size-4 shrink-0\" aria-hidden />\n <span className=\"min-w-0 flex-1\">{item.message}</span>\n <button\n type=\"button\"\n onClick={() => dismissToast(item.id)}\n aria-label=\"Dismiss\"\n className=\"shrink-0 opacity-70 transition-opacity hover:opacity-100\"\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n </div>\n )\n}\n\n/** Mount once near the app root. Renders the live toast list bottom-right. */\nexport function Toaster() {\n const [current, setCurrent] = useState<ToastItem[]>(() => getToasts())\n useEffect(() => subscribeToasts(setCurrent), [])\n if (current.length === 0) return null\n return (\n <div\n className=\"pointer-events-none fixed bottom-4 right-4 z-50 flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2\"\n data-testid=\"toaster\"\n >\n {current.map((item) => (\n <ToastRow key={item.id} item={item} />\n ))}\n </div>\n )\n}\n"]}
|
package/dist/ui/toolbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/ui/toolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,gFAAgF;AAChF,MAAM,UAAU,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC7E,OAAO,CACL,cACE,IAAI,EAAC,SAAS,EACd,SAAS,EAAE,EAAE,CACX,qFAAqF,EACrF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAClF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAClF,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,gBAAgB,CAAC,EAAE,SAAS,EAA0B;IACpE,OAAO,KAAC,SAAS,IAAC,WAAW,EAAC,UAAU,EAAC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,GAAI,CAAA;AACnF,CAAC"}
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/ui/toolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,gFAAgF;AAChF,MAAM,UAAU,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC7E,OAAO,CACL,cACE,IAAI,EAAC,SAAS,EACd,SAAS,EAAE,EAAE,CACX,qFAAqF,EACrF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAClF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAClF,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,gBAAgB,CAAC,EAAE,SAAS,EAA0B;IACpE,OAAO,KAAC,SAAS,IAAC,WAAW,EAAC,UAAU,EAAC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,GAAI,CAAA;AACnF,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\nimport { Separator } from './separator'\n\n/** Named toolbar primitive — a horizontal control strip for Studio surfaces. */\nexport function Toolbar({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n role=\"toolbar\"\n className={cn(\n 'flex h-11 shrink-0 items-center gap-1 border border-border bg-panel px-2 rounded-md',\n className,\n )}\n {...props}\n />\n )\n}\n\n/** A logical cluster of controls within a Toolbar. */\nexport function ToolbarGroup({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex items-center gap-0.5', className)} {...props} />\n}\n\n/** Vertical divider between toolbar groups. */\nexport function ToolbarSeparator({ className }: { className?: string }) {\n return <Separator orientation=\"vertical\" className={cn('mx-1 h-5', className)} />\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography.js","sourceRoot":"","sources":["../../src/ui/typography.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,mDAAmD;IAC5D,EAAE,EAAE,uCAAuC;IAC3C,EAAE,EAAE,sCAAsC;IAC1C,EAAE,EAAE,wCAAwC;IAC5C,EAAE,EAAE,sCAAsC;IAC1C,OAAO,EAAE,+EAA+E;CAChF,CAAA;AASV,MAAM,sBAAsB,GAAgC;IAC1D,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;CACR,CAAA;AAED,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgB;IAC5E,MAAM,GAAG,GAAG,IAAI,KAAK,EAAU,CAAA;IAC/B,MAAM,QAAQ,GAAG,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAA;IAC9D,OAAO,KAAC,GAAG,IAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAChG,CAAC;AAED,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAW,CAAA;AAC/G,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,uBAAuB;IAC9B,MAAM,EAAE,0BAA0B;CAC1B,CAAA;AACV,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAW,CAAA;AAUxG,mEAAmE;AACnE,MAAM,UAAU,IAAI,CAAC,EACnB,EAAE,EAAE,GAAG,GAAG,GAAG,EACb,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,SAAS,EAChB,MAAM,GAAG,QAAQ,EACjB,IAAI,GAAG,KAAK,EACZ,SAAS,EACT,GAAG,KAAK,EACE;IACV,OAAO,CACL,KAAC,GAAG,IACF,SAAS,EAAE,EAAE,CACX,SAAS,CAAC,IAAI,CAAC,EACf,SAAS,CAAC,IAAI,CAAC,EACf,WAAW,CAAC,MAAM,CAAC,EACnB,IAAI,IAAI,WAAW,EACnB,iBAAiB,EACjB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IACvE,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,8FAA8F,EAC9F,IAAI,KAAK,SAAS,IAAI,2CAA2C,EACjE,IAAI,KAAK,SAAS,IAAI,8CAA8C,EACpE,IAAI,KAAK,OAAO,IAAI,sDAAsD,EAC1E,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"typography.js","sourceRoot":"","sources":["../../src/ui/typography.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,mDAAmD;IAC5D,EAAE,EAAE,uCAAuC;IAC3C,EAAE,EAAE,sCAAsC;IAC1C,EAAE,EAAE,wCAAwC;IAC5C,EAAE,EAAE,sCAAsC;IAC1C,OAAO,EAAE,+EAA+E;CAChF,CAAA;AASV,MAAM,sBAAsB,GAAgC;IAC1D,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;CACR,CAAA;AAED,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgB;IAC5E,MAAM,GAAG,GAAG,IAAI,KAAK,EAAU,CAAA;IAC/B,MAAM,QAAQ,GAAG,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAA;IAC9D,OAAO,KAAC,GAAG,IAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AAChG,CAAC;AAED,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAW,CAAA;AAC/G,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,uBAAuB;IAC9B,MAAM,EAAE,0BAA0B;CAC1B,CAAA;AACV,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAW,CAAA;AAUxG,mEAAmE;AACnE,MAAM,UAAU,IAAI,CAAC,EACnB,EAAE,EAAE,GAAG,GAAG,GAAG,EACb,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,SAAS,EAChB,MAAM,GAAG,QAAQ,EACjB,IAAI,GAAG,KAAK,EACZ,SAAS,EACT,GAAG,KAAK,EACE;IACV,OAAO,CACL,KAAC,GAAG,IACF,SAAS,EAAE,EAAE,CACX,SAAS,CAAC,IAAI,CAAC,EACf,SAAS,CAAC,IAAI,CAAC,EACf,WAAW,CAAC,MAAM,CAAC,EACnB,IAAI,IAAI,WAAW,EACnB,iBAAiB,EACjB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IACvE,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,8FAA8F,EAC9F,IAAI,KAAK,SAAS,IAAI,2CAA2C,EACjE,IAAI,KAAK,SAAS,IAAI,8CAA8C,EACpE,IAAI,KAAK,OAAO,IAAI,sDAAsD,EAC1E,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC","sourcesContent":["import type { HTMLAttributes } from 'react'\nimport { cn } from '../lib/utils'\n\nconst HEADING_SIZE = {\n display: 'text-3xl md:text-4xl font-semibold tracking-tight',\n h1: 'text-2xl font-semibold tracking-tight',\n h2: 'text-xl font-semibold tracking-tight',\n h3: 'text-base font-semibold tracking-tight',\n h4: 'text-sm font-semibold tracking-tight',\n eyebrow: 'text-[0.7rem] font-semibold uppercase tracking-[0.14em] text-muted-foreground',\n} as const\n\ntype HeadingSize = keyof typeof HEADING_SIZE\n\nexport interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6\n size?: HeadingSize\n}\n\nconst DEFAULT_SIZE_FOR_LEVEL: Record<number, HeadingSize> = {\n 1: 'h1',\n 2: 'h2',\n 3: 'h3',\n 4: 'h4',\n 5: 'h4',\n 6: 'h4',\n}\n\n/** Named heading primitive — use instead of raw h1/h2/h3 (see AGENTS.md). */\nexport function Heading({ level = 2, size, className, ...props }: HeadingProps) {\n const Tag = `h${level}` as 'h1'\n const resolved = size ?? DEFAULT_SIZE_FOR_LEVEL[level] ?? 'h2'\n return <Tag className={cn('text-foreground', HEADING_SIZE[resolved], className)} {...props} />\n}\n\nconst TEXT_SIZE = { xs: 'text-xs', sm: 'text-sm', base: 'text-sm md:text-[0.95rem]', lg: 'text-base' } as const\nconst TEXT_TONE = {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n subtle: 'text-muted-foreground/70',\n} as const\nconst TEXT_WEIGHT = { normal: 'font-normal', medium: 'font-medium', semibold: 'font-semibold' } as const\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n as?: 'p' | 'span' | 'div'\n size?: keyof typeof TEXT_SIZE\n tone?: keyof typeof TEXT_TONE\n weight?: keyof typeof TEXT_WEIGHT\n mono?: boolean\n}\n\n/** Named text primitive — use instead of anonymous text markup. */\nexport function Text({\n as: Tag = 'p',\n size = 'sm',\n tone = 'default',\n weight = 'normal',\n mono = false,\n className,\n ...props\n}: TextProps) {\n return (\n <Tag\n className={cn(\n TEXT_SIZE[size],\n TEXT_TONE[tone],\n TEXT_WEIGHT[weight],\n mono && 'font-mono',\n 'leading-relaxed',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport interface CodeProps extends HTMLAttributes<HTMLElement> {\n tone?: 'default' | 'primary' | 'muted'\n}\n\n/**\n * The signature primitive: an inline monospace chip for technical tokens —\n * component ids, path tokens, issue codes. Reinforces the code-first identity.\n */\nexport function Code({ tone = 'default', className, ...props }: CodeProps) {\n return (\n <code\n className={cn(\n 'inline-flex items-center rounded-sm border px-1.5 py-0.5 font-mono text-[0.8em] leading-none',\n tone === 'default' && 'border-border bg-muted text-foreground/90',\n tone === 'primary' && 'border-primary/30 bg-primary/10 text-primary',\n tone === 'muted' && 'border-transparent bg-muted/60 text-muted-foreground',\n className,\n )}\n {...props}\n />\n )\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elytracms/studio",
|
|
3
3
|
"author": "finaldream <hi@finaldream.de>",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.9",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "The Elytra studio engine (UI + lib + routes + data-only Convex schema) as an importable package. Extraction staged in EXTRACTION.md (EC-223); Stages 1-2 = UI primitives + router-free lib leaves.",
|
|
7
7
|
"license": "MIT",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"lucide-react": "^1.17.0",
|
|
113
113
|
"tailwind-merge": "^3.6.0",
|
|
114
114
|
"zod": "^4.0.0",
|
|
115
|
-
"@elytracms/core": "^0.0.
|
|
115
|
+
"@elytracms/core": "^0.0.9"
|
|
116
116
|
},
|
|
117
117
|
"peerDependencies": {
|
|
118
118
|
"@tanstack/react-router": "^1.170.0",
|