@elytracms/studio 0.0.42 → 0.0.43

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 (141) hide show
  1. package/dist/components/assets/asset-detail.js +1 -1
  2. package/dist/components/assets/asset-detail.js.map +1 -1
  3. package/dist/components/assets/assets-module.js +19 -6
  4. package/dist/components/assets/assets-module.js.map +1 -1
  5. package/dist/components/assets/assets-store.d.ts +2 -1
  6. package/dist/components/assets/assets-store.js +4 -8
  7. package/dist/components/assets/assets-store.js.map +1 -1
  8. package/dist/components/assets/assets-view-preference.d.ts +0 -8
  9. package/dist/components/assets/assets-view-preference.js +12 -13
  10. package/dist/components/assets/assets-view-preference.js.map +1 -1
  11. package/dist/components/auth-context.d.ts +2 -1
  12. package/dist/components/auth-context.js +6 -8
  13. package/dist/components/auth-context.js.map +1 -1
  14. package/dist/components/builder/builder-store.d.ts +2 -2
  15. package/dist/components/builder/builder-store.js +4 -8
  16. package/dist/components/builder/builder-store.js.map +1 -1
  17. package/dist/components/cms/bulk-actions.js +2 -1
  18. package/dist/components/cms/bulk-actions.js.map +1 -1
  19. package/dist/components/cms/cell-edit.js +2 -1
  20. package/dist/components/cms/cell-edit.js.map +1 -1
  21. package/dist/components/cms/cms-composition-validators.d.ts +25 -0
  22. package/dist/components/cms/cms-composition-validators.js +75 -0
  23. package/dist/components/cms/cms-composition-validators.js.map +1 -0
  24. package/dist/components/cms/cms-labels.d.ts +15 -0
  25. package/dist/components/cms/cms-labels.js +27 -0
  26. package/dist/components/cms/cms-labels.js.map +1 -0
  27. package/dist/components/cms/cms-store.d.ts +23 -10
  28. package/dist/components/cms/cms-store.js +78 -154
  29. package/dist/components/cms/cms-store.js.map +1 -1
  30. package/dist/components/cms/collection-table.js +1 -1
  31. package/dist/components/cms/collection-table.js.map +1 -1
  32. package/dist/components/cms/detail-editor.js +33 -42
  33. package/dist/components/cms/detail-editor.js.map +1 -1
  34. package/dist/components/cms/discard-draft.d.ts +18 -0
  35. package/dist/components/cms/discard-draft.js +18 -0
  36. package/dist/components/cms/discard-draft.js.map +1 -1
  37. package/dist/components/cms/document-editor-context.d.ts +2 -1
  38. package/dist/components/cms/document-editor-context.js +4 -9
  39. package/dist/components/cms/document-editor-context.js.map +1 -1
  40. package/dist/components/cms/document-ref-utils.d.ts +33 -0
  41. package/dist/components/cms/document-ref-utils.js +47 -0
  42. package/dist/components/cms/document-ref-utils.js.map +1 -0
  43. package/dist/components/cms/field-control.js +1 -1
  44. package/dist/components/cms/field-control.js.map +1 -1
  45. package/dist/components/cms/issues-pane.js +1 -1
  46. package/dist/components/cms/issues-pane.js.map +1 -1
  47. package/dist/components/cms/rich-text/block-commands.d.ts +36 -0
  48. package/dist/components/cms/rich-text/block-commands.js +47 -0
  49. package/dist/components/cms/rich-text/block-commands.js.map +1 -0
  50. package/dist/components/cms/rich-text/slash-command.js +25 -8
  51. package/dist/components/cms/rich-text/slash-command.js.map +1 -1
  52. package/dist/components/cms/rich-text/toolbar.js +3 -2
  53. package/dist/components/cms/rich-text/toolbar.js.map +1 -1
  54. package/dist/components/cms/version-compare.js +1 -1
  55. package/dist/components/cms/version-compare.js.map +1 -1
  56. package/dist/components/cms/versions-model.d.ts +31 -0
  57. package/dist/components/cms/versions-model.js +30 -0
  58. package/dist/components/cms/versions-model.js.map +1 -1
  59. package/dist/components/cms/view-bar.js +9 -6
  60. package/dist/components/cms/view-bar.js.map +1 -1
  61. package/dist/components/collab/collab-context.d.ts +2 -1
  62. package/dist/components/collab/collab-context.js +4 -8
  63. package/dist/components/collab/collab-context.js.map +1 -1
  64. package/dist/components/collection-view/collection-view-context.d.ts +9 -1
  65. package/dist/components/collection-view/collection-view-context.js +4 -9
  66. package/dist/components/collection-view/collection-view-context.js.map +1 -1
  67. package/dist/components/components/component-detail.js +2 -5
  68. package/dist/components/components/component-detail.js.map +1 -1
  69. package/dist/components/components/component-preview.js +8 -4
  70. package/dist/components/components/component-preview.js.map +1 -1
  71. package/dist/components/components/registry-browser.js +24 -5
  72. package/dist/components/components/registry-browser.js.map +1 -1
  73. package/dist/components/components/transfer-dialog.d.ts +10 -0
  74. package/dist/components/components/transfer-dialog.js +24 -8
  75. package/dist/components/components/transfer-dialog.js.map +1 -1
  76. package/dist/components/delivery-health-banner.d.ts +12 -6
  77. package/dist/components/delivery-health-banner.js +27 -29
  78. package/dist/components/delivery-health-banner.js.map +1 -1
  79. package/dist/components/dev-login-badge.d.ts +0 -2
  80. package/dist/components/dev-login-badge.js +1 -3
  81. package/dist/components/dev-login-badge.js.map +1 -1
  82. package/dist/components/playground-badge.d.ts +0 -2
  83. package/dist/components/playground-badge.js +0 -2
  84. package/dist/components/playground-badge.js.map +1 -1
  85. package/dist/components/project-list.js +2 -6
  86. package/dist/components/project-list.js.map +1 -1
  87. package/dist/components/project-session.d.ts +6 -2
  88. package/dist/components/project-session.js +32 -83
  89. package/dist/components/project-session.js.map +1 -1
  90. package/dist/components/project-switcher.js +2 -6
  91. package/dist/components/project-switcher.js.map +1 -1
  92. package/dist/components/redirects/redirects-store.d.ts +2 -1
  93. package/dist/components/redirects/redirects-store.js +4 -8
  94. package/dist/components/redirects/redirects-store.js.map +1 -1
  95. package/dist/components/studio-context.d.ts +2 -1
  96. package/dist/components/studio-context.js +4 -8
  97. package/dist/components/studio-context.js.map +1 -1
  98. package/dist/components/studio-shell.js +1 -1
  99. package/dist/components/studio-shell.js.map +1 -1
  100. package/dist/components/theme-context.d.ts +2 -1
  101. package/dist/components/theme-context.js +4 -8
  102. package/dist/components/theme-context.js.map +1 -1
  103. package/dist/components/use-hydration-phase.d.ts +65 -0
  104. package/dist/components/use-hydration-phase.js +64 -0
  105. package/dist/components/use-hydration-phase.js.map +1 -0
  106. package/dist/components/users/users-store.d.ts +2 -1
  107. package/dist/components/users/users-store.js +4 -8
  108. package/dist/components/users/users-store.js.map +1 -1
  109. package/dist/components/workspace-projects.d.ts +14 -0
  110. package/dist/components/workspace-projects.js +21 -0
  111. package/dist/components/workspace-projects.js.map +1 -1
  112. package/dist/lib/data/data-store.d.ts +2 -1
  113. package/dist/lib/data/data-store.js +4 -8
  114. package/dist/lib/data/data-store.js.map +1 -1
  115. package/dist/lib/delivery/instant-publish.d.ts +9 -13
  116. package/dist/lib/delivery/instant-publish.js +0 -7
  117. package/dist/lib/delivery/instant-publish.js.map +1 -1
  118. package/dist/lib/diff-view-preference.js +4 -4
  119. package/dist/lib/diff-view-preference.js.map +1 -1
  120. package/dist/lib/i18n/messages.en.js +1 -0
  121. package/dist/lib/i18n/messages.en.js.map +1 -1
  122. package/dist/lib/local-preference.d.ts +37 -0
  123. package/dist/lib/local-preference.js +36 -0
  124. package/dist/lib/local-preference.js.map +1 -1
  125. package/dist/lib/persistence/convex-adapter.d.ts +3 -1
  126. package/dist/lib/persistence/convex-adapter.js +20 -0
  127. package/dist/lib/persistence/convex-adapter.js.map +1 -1
  128. package/dist/lib/rail.js +7 -6
  129. package/dist/lib/rail.js.map +1 -1
  130. package/dist/lib/required-context.d.ts +24 -0
  131. package/dist/lib/required-context.js +28 -0
  132. package/dist/lib/required-context.js.map +1 -0
  133. package/dist/lib/theme.js +11 -4
  134. package/dist/lib/theme.js.map +1 -1
  135. package/dist/ui/index.d.ts +1 -0
  136. package/dist/ui/index.js +1 -0
  137. package/dist/ui/index.js.map +1 -1
  138. package/dist/ui/segmented-control.d.ts +46 -0
  139. package/dist/ui/segmented-control.js +13 -0
  140. package/dist/ui/segmented-control.js.map +1 -0
  141. package/package.json +2 -2
@@ -0,0 +1,46 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Two named tab/toggle primitives (EC-328), replacing 4 hand-rolled
4
+ * `<button aria-pressed={active}>` instances that shared one of two visual
5
+ * families but had no shared component:
6
+ *
7
+ * - {@link SegmentedControl} — the "segmented pill" family: a `bg-muted/50`
8
+ * strip where the active item lifts on a `bg-background` pill with a subtle
9
+ * shadow. For NARROWING controls (a namespace filter, a list/grid toggle, a
10
+ * named-view selector) — options are peers of the same kind of thing.
11
+ * - {@link TabButton} — the "accent tab" family: loose buttons (no shared pill
12
+ * container — callers already have their own `Row`) where the active tab
13
+ * lifts on a `bg-accent` chip. For SWITCHING between distinct content panes
14
+ * (a component's Preview/Manifest/References lens row, a fixture-state
15
+ * selector).
16
+ */
17
+ export interface SegmentedControlItem {
18
+ key: string;
19
+ label: ReactNode;
20
+ /** Optional trailing count/badge (e.g. a namespace's manifest count). */
21
+ count?: number;
22
+ active: boolean;
23
+ onClick: () => void;
24
+ /** Required when `label` is icon-only (no visible text for the button name). */
25
+ ariaLabel?: string;
26
+ testId?: string;
27
+ }
28
+ export interface SegmentedControlProps {
29
+ items: readonly SegmentedControlItem[];
30
+ ariaLabel?: string;
31
+ /** Items share the row's width equally (the namespace filter's 3-way split). Default false — items size to content. */
32
+ equalWidth?: boolean;
33
+ className?: string;
34
+ testId?: string;
35
+ }
36
+ /** The "segmented pill" tab family — see the module doc comment. */
37
+ export declare function SegmentedControl({ items, ariaLabel, equalWidth, className, testId, }: SegmentedControlProps): import("react").JSX.Element;
38
+ export interface TabButtonProps {
39
+ active: boolean;
40
+ onClick: () => void;
41
+ children: ReactNode;
42
+ className?: string;
43
+ testId?: string;
44
+ }
45
+ /** The "accent tab" family — see the module doc comment. */
46
+ export declare function TabButton({ active, onClick, children, className, testId }: TabButtonProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../lib/utils';
3
+ /** The "segmented pill" tab family — see the module doc comment. */
4
+ export function SegmentedControl({ items, ariaLabel, equalWidth, className, testId, }) {
5
+ return (_jsx("div", { role: "group", ...(ariaLabel ? { 'aria-label': ariaLabel } : {}), ...(testId ? { 'data-testid': testId } : {}), className: cn('flex items-center gap-1 rounded-md bg-muted/50 p-0.5', className), children: items.map((item) => (_jsxs("button", { type: "button", "aria-pressed": item.active, onClick: item.onClick, ...(item.ariaLabel ? { 'aria-label': item.ariaLabel, title: item.ariaLabel } : {}), ...(item.testId ? { 'data-testid': item.testId } : {}), className: cn('items-center justify-center gap-1.5 rounded-[5px] px-2.5 py-1 text-xs font-medium transition-colors', equalWidth ? 'flex flex-1' : 'inline-flex', item.active
6
+ ? 'bg-background text-foreground shadow-sm'
7
+ : 'text-muted-foreground hover:text-foreground'), children: [item.label, item.count !== undefined ? (_jsx("span", { className: "font-mono text-[0.65rem] text-muted-foreground", children: item.count })) : null] }, item.key))) }));
8
+ }
9
+ /** The "accent tab" family — see the module doc comment. */
10
+ export function TabButton({ active, onClick, children, className, testId }) {
11
+ return (_jsx("button", { type: "button", "aria-pressed": active, onClick: onClick, ...(testId ? { 'data-testid': testId } : {}), className: cn('inline-flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-medium transition-colors', active ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:bg-muted hover:text-foreground', className), children: children }));
12
+ }
13
+ //# sourceMappingURL=segmented-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented-control.js","sourceRoot":"","sources":["../../src/ui/segmented-control.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAuCjC,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,GACgB;IACtB,OAAO,CACL,cACE,IAAI,EAAC,OAAO,KACR,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9C,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC7C,SAAS,EAAE,EAAE,CAAC,sDAAsD,EAAE,SAAS,CAAC,YAE/E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,kBAEE,IAAI,EAAC,QAAQ,kBACC,IAAI,CAAC,MAAM,EACzB,OAAO,EAAE,IAAI,CAAC,OAAO,KACjB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC/E,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACvD,SAAS,EAAE,EAAE,CACX,qGAAqG,EACrG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAC1C,IAAI,CAAC,MAAM;gBACT,CAAC,CAAC,yCAAyC;gBAC3C,CAAC,CAAC,6CAA6C,CAClD,aAEA,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1B,eAAM,SAAS,EAAC,gDAAgD,YAAE,IAAI,CAAC,KAAK,GAAQ,CACrF,CAAC,CAAC,CAAC,IAAI,KAjBH,IAAI,CAAC,GAAG,CAkBN,CACV,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAUD,4DAA4D;AAC5D,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAkB;IACxF,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,kBACC,MAAM,EACpB,OAAO,EAAE,OAAO,KACZ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC7C,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,4DAA4D,EAC1G,SAAS,CACV,YAEA,QAAQ,GACF,CACV,CAAA;AACH,CAAC","sourcesContent":["import type { ReactNode } from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Two named tab/toggle primitives (EC-328), replacing 4 hand-rolled\n * `<button aria-pressed={active}>` instances that shared one of two visual\n * families but had no shared component:\n *\n * - {@link SegmentedControl} — the \"segmented pill\" family: a `bg-muted/50`\n * strip where the active item lifts on a `bg-background` pill with a subtle\n * shadow. For NARROWING controls (a namespace filter, a list/grid toggle, a\n * named-view selector) — options are peers of the same kind of thing.\n * - {@link TabButton} — the \"accent tab\" family: loose buttons (no shared pill\n * container — callers already have their own `Row`) where the active tab\n * lifts on a `bg-accent` chip. For SWITCHING between distinct content panes\n * (a component's Preview/Manifest/References lens row, a fixture-state\n * selector).\n */\n\nexport interface SegmentedControlItem {\n key: string\n label: ReactNode\n /** Optional trailing count/badge (e.g. a namespace's manifest count). */\n count?: number\n active: boolean\n onClick: () => void\n /** Required when `label` is icon-only (no visible text for the button name). */\n ariaLabel?: string\n testId?: string\n}\n\nexport interface SegmentedControlProps {\n items: readonly SegmentedControlItem[]\n ariaLabel?: string\n /** Items share the row's width equally (the namespace filter's 3-way split). Default false — items size to content. */\n equalWidth?: boolean\n className?: string\n testId?: string\n}\n\n/** The \"segmented pill\" tab family — see the module doc comment. */\nexport function SegmentedControl({\n items,\n ariaLabel,\n equalWidth,\n className,\n testId,\n}: SegmentedControlProps) {\n return (\n <div\n role=\"group\"\n {...(ariaLabel ? { 'aria-label': ariaLabel } : {})}\n {...(testId ? { 'data-testid': testId } : {})}\n className={cn('flex items-center gap-1 rounded-md bg-muted/50 p-0.5', className)}\n >\n {items.map((item) => (\n <button\n key={item.key}\n type=\"button\"\n aria-pressed={item.active}\n onClick={item.onClick}\n {...(item.ariaLabel ? { 'aria-label': item.ariaLabel, title: item.ariaLabel } : {})}\n {...(item.testId ? { 'data-testid': item.testId } : {})}\n className={cn(\n 'items-center justify-center gap-1.5 rounded-[5px] px-2.5 py-1 text-xs font-medium transition-colors',\n equalWidth ? 'flex flex-1' : 'inline-flex',\n item.active\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {item.label}\n {item.count !== undefined ? (\n <span className=\"font-mono text-[0.65rem] text-muted-foreground\">{item.count}</span>\n ) : null}\n </button>\n ))}\n </div>\n )\n}\n\nexport interface TabButtonProps {\n active: boolean\n onClick: () => void\n children: ReactNode\n className?: string\n testId?: string\n}\n\n/** The \"accent tab\" family — see the module doc comment. */\nexport function TabButton({ active, onClick, children, className, testId }: TabButtonProps) {\n return (\n <button\n type=\"button\"\n aria-pressed={active}\n onClick={onClick}\n {...(testId ? { 'data-testid': testId } : {})}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-medium transition-colors',\n active ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n className,\n )}\n >\n {children}\n </button>\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.42",
4
+ "version": "0.0.43",
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",
@@ -130,7 +130,7 @@
130
130
  "lucide-react": "^1.23.0",
131
131
  "tailwind-merge": "^3.6.0",
132
132
  "zod": "^4.4.3",
133
- "@elytracms/core": "^0.0.42"
133
+ "@elytracms/core": "^0.0.43"
134
134
  },
135
135
  "peerDependencies": {
136
136
  "@tanstack/react-router": "^1.170.0",