@elytracms/studio 0.0.8 → 0.0.10

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.
Files changed (204) hide show
  1. package/convex/guard.ts +16 -0
  2. package/convex/members.ts +14 -3
  3. package/dist/components/assets/asset-library.js.map +1 -1
  4. package/dist/components/assets/asset-metadata.js.map +1 -1
  5. package/dist/components/assets/asset-search.js.map +1 -1
  6. package/dist/components/assets/asset-selection.js.map +1 -1
  7. package/dist/components/assets/assets-store.js.map +1 -1
  8. package/dist/components/auth-context.js.map +1 -1
  9. package/dist/components/backend-gate.js.map +1 -1
  10. package/dist/components/breadcrumb-context.js.map +1 -1
  11. package/dist/components/builder/blocks-model.js.map +1 -1
  12. package/dist/components/builder/blocks-panel.js.map +1 -1
  13. package/dist/components/builder/builder-store.js.map +1 -1
  14. package/dist/components/builder/canvas-stylesheet.js.map +1 -1
  15. package/dist/components/builder/canvas.js.map +1 -1
  16. package/dist/components/builder/clipboard-actions.js.map +1 -1
  17. package/dist/components/builder/composition-field-editor.js.map +1 -1
  18. package/dist/components/builder/composition-scope.js.map +1 -1
  19. package/dist/components/builder/drag-session.js.map +1 -1
  20. package/dist/components/builder/fixture-thumbnail.js.map +1 -1
  21. package/dist/components/builder/inline-edit.js.map +1 -1
  22. package/dist/components/builder/insert-context.js.map +1 -1
  23. package/dist/components/builder/insert-menu.js.map +1 -1
  24. package/dist/components/builder/layout-inspector.js.map +1 -1
  25. package/dist/components/builder/node-factory.js.map +1 -1
  26. package/dist/components/builder/page-tree.js.map +1 -1
  27. package/dist/components/builder/property-inspector.js.map +1 -1
  28. package/dist/components/builder/rich-text-toolbar.js.map +1 -1
  29. package/dist/components/builder/spacing-handles.js.map +1 -1
  30. package/dist/components/cms/alias-selector.d.ts +20 -0
  31. package/dist/components/cms/alias-selector.js +34 -0
  32. package/dist/components/cms/alias-selector.js.map +1 -0
  33. package/dist/components/cms/asset-picker.js.map +1 -1
  34. package/dist/components/cms/bulk-actions.js.map +1 -1
  35. package/dist/components/cms/bulk-bar.js.map +1 -1
  36. package/dist/components/cms/cell-edit.js.map +1 -1
  37. package/dist/components/cms/cell.js.map +1 -1
  38. package/dist/components/cms/cms-index.js.map +1 -1
  39. package/dist/components/cms/cms-store.d.ts +4 -5
  40. package/dist/components/cms/cms-store.js +45 -14
  41. package/dist/components/cms/cms-store.js.map +1 -1
  42. package/dist/components/cms/collection-table.js +10 -2
  43. package/dist/components/cms/collection-table.js.map +1 -1
  44. package/dist/components/cms/collections-sidebar.js.map +1 -1
  45. package/dist/components/cms/detail-editor.js +134 -58
  46. package/dist/components/cms/detail-editor.js.map +1 -1
  47. package/dist/components/cms/details-pane.d.ts +29 -0
  48. package/dist/components/cms/details-pane.js +29 -0
  49. package/dist/components/cms/details-pane.js.map +1 -0
  50. package/dist/components/cms/doc-state.js.map +1 -1
  51. package/dist/components/cms/document-editor-context.js.map +1 -1
  52. package/dist/components/cms/editable-cell.js.map +1 -1
  53. package/dist/components/cms/field-control.js.map +1 -1
  54. package/dist/components/cms/filter-builder.js.map +1 -1
  55. package/dist/components/cms/import-export.js.map +1 -1
  56. package/dist/components/cms/issues-pane.d.ts +19 -0
  57. package/dist/components/cms/issues-pane.js +33 -0
  58. package/dist/components/cms/issues-pane.js.map +1 -0
  59. package/dist/components/cms/new-page-dialog.js.map +1 -1
  60. package/dist/components/cms/reference-confirm.js.map +1 -1
  61. package/dist/components/cms/relation-picker.js.map +1 -1
  62. package/dist/components/cms/use-cell-edit.js.map +1 -1
  63. package/dist/components/cms/versions-model.js.map +1 -1
  64. package/dist/components/cms/versions-pane.js.map +1 -1
  65. package/dist/components/cms/view-bar.js.map +1 -1
  66. package/dist/components/collab/collab-context.js.map +1 -1
  67. package/dist/components/collab/collab-seed.js.map +1 -1
  68. package/dist/components/components/component-detail.js.map +1 -1
  69. package/dist/components/components/component-status.js.map +1 -1
  70. package/dist/components/components/components-index.js.map +1 -1
  71. package/dist/components/components/field-inspector.js.map +1 -1
  72. package/dist/components/components/fixture-runner.js.map +1 -1
  73. package/dist/components/components/registry-browser.js.map +1 -1
  74. package/dist/components/current-user-menu.js.map +1 -1
  75. package/dist/components/delivery-health-banner.js.map +1 -1
  76. package/dist/components/dev-login-badge.js.map +1 -1
  77. package/dist/components/extensions/extensions-view.js.map +1 -1
  78. package/dist/components/guards.js.map +1 -1
  79. package/dist/components/inspector/inspector-sidebar.d.ts +10 -1
  80. package/dist/components/inspector/inspector-sidebar.js +10 -4
  81. package/dist/components/inspector/inspector-sidebar.js.map +1 -1
  82. package/dist/components/operation-error.js.map +1 -1
  83. package/dist/components/playground-badge.js.map +1 -1
  84. package/dist/components/project-list.js.map +1 -1
  85. package/dist/components/project-session.js.map +1 -1
  86. package/dist/components/project-switcher.js.map +1 -1
  87. package/dist/components/references/builder-deep-link.js.map +1 -1
  88. package/dist/components/references/references-panel.js.map +1 -1
  89. package/dist/components/routes/redirect-chain.js.map +1 -1
  90. package/dist/components/routes/redirect-manager.js.map +1 -1
  91. package/dist/components/routes/route-list.js.map +1 -1
  92. package/dist/components/routes/routes-shell.js.map +1 -1
  93. package/dist/components/section-nav.js.map +1 -1
  94. package/dist/components/section-state.js.map +1 -1
  95. package/dist/components/section-surface.js.map +1 -1
  96. package/dist/components/sections.js.map +1 -1
  97. package/dist/components/settings-form.js.map +1 -1
  98. package/dist/components/studio-context.js.map +1 -1
  99. package/dist/components/studio-project-screen.js +32 -5
  100. package/dist/components/studio-project-screen.js.map +1 -1
  101. package/dist/components/studio-shell.js.map +1 -1
  102. package/dist/components/theme-context.js.map +1 -1
  103. package/dist/components/workspace-gate.js.map +1 -1
  104. package/dist/components/workspace-projects.js.map +1 -1
  105. package/dist/lib/assets/delete-asset.js.map +1 -1
  106. package/dist/lib/assets/image-dimensions.js.map +1 -1
  107. package/dist/lib/assets/index.js.map +1 -1
  108. package/dist/lib/assets/upload-state.js.map +1 -1
  109. package/dist/lib/assets/upload.js.map +1 -1
  110. package/dist/lib/auth/auth-adapter.js.map +1 -1
  111. package/dist/lib/auth/convex-auth-adapter.js.map +1 -1
  112. package/dist/lib/auth/dev-auto-login-adapter.js.map +1 -1
  113. package/dist/lib/auth/index.js.map +1 -1
  114. package/dist/lib/auth/local-auth-adapter.js.map +1 -1
  115. package/dist/lib/auth/route-guard.js.map +1 -1
  116. package/dist/lib/auth-errors.js.map +1 -1
  117. package/dist/lib/bindings/section-bindings.js.map +1 -1
  118. package/dist/lib/clipboard/index.js.map +1 -1
  119. package/dist/lib/clipboard/os-clipboard.js.map +1 -1
  120. package/dist/lib/clipboard/paste-issues.js.map +1 -1
  121. package/dist/lib/clipboard/paste-target.js.map +1 -1
  122. package/dist/lib/cms/published-documents.js.map +1 -1
  123. package/dist/lib/cms-views/index.js.map +1 -1
  124. package/dist/lib/cms-views/selection.js.map +1 -1
  125. package/dist/lib/cms-views/view-model.js.map +1 -1
  126. package/dist/lib/cms-views/views-store.js.map +1 -1
  127. package/dist/lib/data/collection-content.js.map +1 -1
  128. package/dist/lib/data/data-store.js.map +1 -1
  129. package/dist/lib/data/index.js.map +1 -1
  130. package/dist/lib/data/providers.js.map +1 -1
  131. package/dist/lib/data/sample-capture.js.map +1 -1
  132. package/dist/lib/data/sources-store.js.map +1 -1
  133. package/dist/lib/delivery/instant-publish.js.map +1 -1
  134. package/dist/lib/dnd/drop-rules.js.map +1 -1
  135. package/dist/lib/dnd/gap-drag.js.map +1 -1
  136. package/dist/lib/locale/binding-fallback.js.map +1 -1
  137. package/dist/lib/locale/fallback.js.map +1 -1
  138. package/dist/lib/locale/index.js.map +1 -1
  139. package/dist/lib/locale/locale-store.js.map +1 -1
  140. package/dist/lib/locale/locale-switcher.js.map +1 -1
  141. package/dist/lib/locale/route-variant.js.map +1 -1
  142. package/dist/lib/locale/use-studio-locale.js.map +1 -1
  143. package/dist/lib/operations/asset-repository.js.map +1 -1
  144. package/dist/lib/operations/cms-persistence.d.ts +7 -2
  145. package/dist/lib/operations/cms-persistence.js +6 -2
  146. package/dist/lib/operations/cms-persistence.js.map +1 -1
  147. package/dist/lib/operations/graph-commands.js.map +1 -1
  148. package/dist/lib/operations/graph-persistence.js.map +1 -1
  149. package/dist/lib/operations/index.js.map +1 -1
  150. package/dist/lib/operations/operations-package.js.map +1 -1
  151. package/dist/lib/operations/persist-queue.js.map +1 -1
  152. package/dist/lib/operations/session-hydration.js.map +1 -1
  153. package/dist/lib/operations/studio-operations.js.map +1 -1
  154. package/dist/lib/persistence/backend-mode.js.map +1 -1
  155. package/dist/lib/persistence/convex-adapter.js +8 -4
  156. package/dist/lib/persistence/convex-adapter.js.map +1 -1
  157. package/dist/lib/persistence/convex-blob-storage.js.map +1 -1
  158. package/dist/lib/persistence/convex-client.js.map +1 -1
  159. package/dist/lib/persistence/index.js.map +1 -1
  160. package/dist/lib/persona/labels.js +6 -0
  161. package/dist/lib/persona/labels.js.map +1 -1
  162. package/dist/lib/rail.js.map +1 -1
  163. package/dist/lib/references/impact.js.map +1 -1
  164. package/dist/lib/references/index.js.map +1 -1
  165. package/dist/lib/references/reference-model.js.map +1 -1
  166. package/dist/lib/references/references-store.js.map +1 -1
  167. package/dist/lib/registry/index.js.map +1 -1
  168. package/dist/lib/registry/preview.js.map +1 -1
  169. package/dist/lib/registry/project-components.js.map +1 -1
  170. package/dist/lib/routing/index.js.map +1 -1
  171. package/dist/lib/routing/routing-analysis.js.map +1 -1
  172. package/dist/lib/routing/routing-store.js.map +1 -1
  173. package/dist/lib/starters/kit-session.js.map +1 -1
  174. package/dist/lib/theme.js.map +1 -1
  175. package/dist/lib/utils.js.map +1 -1
  176. package/dist/lib/webhooks/config.js.map +1 -1
  177. package/dist/lib/webhooks/dispatcher.js.map +1 -1
  178. package/dist/lib/webhooks/index.js.map +1 -1
  179. package/dist/lib/webhooks/signing.js.map +1 -1
  180. package/dist/lib/webhooks/tags.js.map +1 -1
  181. package/dist/lib/working-graph.js.map +1 -1
  182. package/dist/lib/workspace/index.js.map +1 -1
  183. package/dist/lib/workspace/switcher-source.js.map +1 -1
  184. package/dist/lib/workspace/workspace-source.js.map +1 -1
  185. package/dist/router/index.js.map +1 -1
  186. package/dist/router/match.js.map +1 -1
  187. package/dist/router/search.js.map +1 -1
  188. package/dist/ui/avatar.js.map +1 -1
  189. package/dist/ui/badge.js.map +1 -1
  190. package/dist/ui/button.js.map +1 -1
  191. package/dist/ui/card.js.map +1 -1
  192. package/dist/ui/dialog.js.map +1 -1
  193. package/dist/ui/dropdown-menu.js.map +1 -1
  194. package/dist/ui/field.js.map +1 -1
  195. package/dist/ui/index.js.map +1 -1
  196. package/dist/ui/input.js.map +1 -1
  197. package/dist/ui/inspector.js.map +1 -1
  198. package/dist/ui/layout.js.map +1 -1
  199. package/dist/ui/panel.js.map +1 -1
  200. package/dist/ui/separator.js.map +1 -1
  201. package/dist/ui/toast.js.map +1 -1
  202. package/dist/ui/toolbar.js.map +1 -1
  203. package/dist/ui/typography.js.map +1 -1
  204. package/package.json +2 -2
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/ui/toast.tsx"],"names":[],"mappings":"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"}
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"]}
@@ -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.8",
4
+ "version": "0.0.10",
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.8"
115
+ "@elytracms/core": "^0.0.10"
116
116
  },
117
117
  "peerDependencies": {
118
118
  "@tanstack/react-router": "^1.170.0",