@actuate-media/cms-admin 0.10.0 → 0.11.0

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 (284) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +8 -5
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/__tests__/layout/primitives.test.d.ts +2 -0
  5. package/dist/__tests__/layout/primitives.test.d.ts.map +1 -0
  6. package/dist/__tests__/layout/primitives.test.js +34 -0
  7. package/dist/__tests__/layout/primitives.test.js.map +1 -0
  8. package/dist/__tests__/lib/cv.test.d.ts +2 -0
  9. package/dist/__tests__/lib/cv.test.d.ts.map +1 -0
  10. package/dist/__tests__/lib/cv.test.js +66 -0
  11. package/dist/__tests__/lib/cv.test.js.map +1 -0
  12. package/dist/actuate-admin.css +1 -1
  13. package/dist/assets/actuate-logo.d.ts +36 -0
  14. package/dist/assets/actuate-logo.d.ts.map +1 -0
  15. package/dist/assets/actuate-logo.js +15 -0
  16. package/dist/assets/actuate-logo.js.map +1 -0
  17. package/dist/components/Breadcrumbs.js +2 -2
  18. package/dist/components/CommandPalette.js +10 -10
  19. package/dist/components/ContentOverviewChart.js +3 -3
  20. package/dist/components/ErrorBoundary.js +1 -1
  21. package/dist/components/FocalPointPicker.js +2 -2
  22. package/dist/components/FolderTree.js +20 -20
  23. package/dist/components/LivePreview.js +3 -3
  24. package/dist/components/LocaleSwitcher.js +1 -1
  25. package/dist/components/MediaPickerModal.js +4 -4
  26. package/dist/components/PresenceIndicator.js +1 -1
  27. package/dist/components/SEOConfigPanel.d.ts +2 -0
  28. package/dist/components/SEOConfigPanel.d.ts.map +1 -0
  29. package/dist/components/SEOConfigPanel.js +174 -0
  30. package/dist/components/SEOConfigPanel.js.map +1 -0
  31. package/dist/components/SEOPanel.js +9 -9
  32. package/dist/components/SEOPerformance.js +2 -2
  33. package/dist/components/SchedulePublishDialog.js +1 -1
  34. package/dist/components/SharePreviewLinkDialog.js +1 -1
  35. package/dist/components/TipTapEditor.js +5 -5
  36. package/dist/components/VersionHistory.js +2 -2
  37. package/dist/components/ui/Badge.d.ts +33 -3
  38. package/dist/components/ui/Badge.d.ts.map +1 -1
  39. package/dist/components/ui/Badge.js +42 -8
  40. package/dist/components/ui/Badge.js.map +1 -1
  41. package/dist/components/ui/Button.d.ts +19 -8
  42. package/dist/components/ui/Button.d.ts.map +1 -1
  43. package/dist/components/ui/Button.js +35 -14
  44. package/dist/components/ui/Button.js.map +1 -1
  45. package/dist/components/ui/Card.d.ts +26 -0
  46. package/dist/components/ui/Card.d.ts.map +1 -0
  47. package/dist/components/ui/Card.js +45 -0
  48. package/dist/components/ui/Card.js.map +1 -0
  49. package/dist/components/ui/DataTable.js +1 -1
  50. package/dist/components/ui/Input.d.ts +15 -0
  51. package/dist/components/ui/Input.d.ts.map +1 -0
  52. package/dist/components/ui/Input.js +23 -0
  53. package/dist/components/ui/Input.js.map +1 -0
  54. package/dist/components/ui/SearchInput.js +1 -1
  55. package/dist/components/ui/Select.d.ts +16 -0
  56. package/dist/components/ui/Select.d.ts.map +1 -0
  57. package/dist/components/ui/Select.js +25 -0
  58. package/dist/components/ui/Select.js.map +1 -0
  59. package/dist/components/ui/Toast.js +1 -1
  60. package/dist/components/ui/index.d.ts +10 -4
  61. package/dist/components/ui/index.d.ts.map +1 -1
  62. package/dist/components/ui/index.js +5 -2
  63. package/dist/components/ui/index.js.map +1 -1
  64. package/dist/fields/BlockBuilderField.js +3 -3
  65. package/dist/fields/DateField.js +1 -1
  66. package/dist/fields/RelationshipField.js +3 -3
  67. package/dist/fields/TextField.js +1 -1
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +3 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/layout/Header.js +1 -1
  73. package/dist/layout/Layout.d.ts +14 -0
  74. package/dist/layout/Layout.d.ts.map +1 -1
  75. package/dist/layout/Layout.js +17 -11
  76. package/dist/layout/Layout.js.map +1 -1
  77. package/dist/layout/Sidebar.d.ts.map +1 -1
  78. package/dist/layout/Sidebar.js +21 -11
  79. package/dist/layout/Sidebar.js.map +1 -1
  80. package/dist/layout/primitives/AdminShell.d.ts +43 -0
  81. package/dist/layout/primitives/AdminShell.d.ts.map +1 -0
  82. package/dist/layout/primitives/AdminShell.js +51 -0
  83. package/dist/layout/primitives/AdminShell.js.map +1 -0
  84. package/dist/layout/primitives/Box.d.ts +19 -0
  85. package/dist/layout/primitives/Box.d.ts.map +1 -0
  86. package/dist/layout/primitives/Box.js +12 -0
  87. package/dist/layout/primitives/Box.js.map +1 -0
  88. package/dist/layout/primitives/Cluster.d.ts +27 -0
  89. package/dist/layout/primitives/Cluster.d.ts.map +1 -0
  90. package/dist/layout/primitives/Cluster.js +37 -0
  91. package/dist/layout/primitives/Cluster.js.map +1 -0
  92. package/dist/layout/primitives/Grid.d.ts +45 -0
  93. package/dist/layout/primitives/Grid.d.ts.map +1 -0
  94. package/dist/layout/primitives/Grid.js +59 -0
  95. package/dist/layout/primitives/Grid.js.map +1 -0
  96. package/dist/layout/primitives/PageContainer.d.ts +36 -0
  97. package/dist/layout/primitives/PageContainer.d.ts.map +1 -0
  98. package/dist/layout/primitives/PageContainer.js +41 -0
  99. package/dist/layout/primitives/PageContainer.js.map +1 -0
  100. package/dist/layout/primitives/Split.d.ts +34 -0
  101. package/dist/layout/primitives/Split.d.ts.map +1 -0
  102. package/dist/layout/primitives/Split.js +27 -0
  103. package/dist/layout/primitives/Split.js.map +1 -0
  104. package/dist/layout/primitives/Stack.d.ts +23 -0
  105. package/dist/layout/primitives/Stack.d.ts.map +1 -0
  106. package/dist/layout/primitives/Stack.js +34 -0
  107. package/dist/layout/primitives/Stack.js.map +1 -0
  108. package/dist/layout/primitives/index.d.ts +30 -0
  109. package/dist/layout/primitives/index.d.ts.map +1 -0
  110. package/dist/layout/primitives/index.js +22 -0
  111. package/dist/layout/primitives/index.js.map +1 -0
  112. package/dist/layout/primitives/tokens.d.ts +48 -0
  113. package/dist/layout/primitives/tokens.d.ts.map +1 -0
  114. package/dist/layout/primitives/tokens.js +54 -0
  115. package/dist/layout/primitives/tokens.js.map +1 -0
  116. package/dist/lib/cv.d.ts +53 -0
  117. package/dist/lib/cv.d.ts.map +1 -0
  118. package/dist/lib/cv.js +39 -0
  119. package/dist/lib/cv.js.map +1 -0
  120. package/dist/views/ApiKeys.js +7 -7
  121. package/dist/views/CollectionList.js +8 -8
  122. package/dist/views/Dashboard.d.ts.map +1 -1
  123. package/dist/views/Dashboard.js +333 -78
  124. package/dist/views/Dashboard.js.map +1 -1
  125. package/dist/views/DocumentEdit.js +3 -3
  126. package/dist/views/ForgotPassword.js +2 -2
  127. package/dist/views/FormEditor.js +5 -5
  128. package/dist/views/FormSubmissions.js +6 -6
  129. package/dist/views/Forms.js +2 -2
  130. package/dist/views/Login.d.ts +16 -1
  131. package/dist/views/Login.d.ts.map +1 -1
  132. package/dist/views/Login.js +17 -7
  133. package/dist/views/Login.js.map +1 -1
  134. package/dist/views/MediaBrowser.js +16 -16
  135. package/dist/views/PageEditor.js +2 -2
  136. package/dist/views/Pages.js +10 -10
  137. package/dist/views/PostEditor.js +2 -2
  138. package/dist/views/Posts.js +4 -4
  139. package/dist/views/Redirects.js +4 -4
  140. package/dist/views/ResetPassword.js +2 -2
  141. package/dist/views/SEO.js +6 -6
  142. package/dist/views/ScriptTagEditor.js +4 -4
  143. package/dist/views/ScriptTags.js +2 -2
  144. package/dist/views/Settings.d.ts.map +1 -1
  145. package/dist/views/Settings.js +9 -8
  146. package/dist/views/Settings.js.map +1 -1
  147. package/dist/views/SetupWizard.js +2 -2
  148. package/dist/views/Users.js +4 -4
  149. package/dist/views/page-builder/AIBlockAssist.js +1 -1
  150. package/dist/views/page-builder/AIGenerateDialog.js +10 -10
  151. package/dist/views/page-builder/BlockEditor.js +10 -10
  152. package/dist/views/page-builder/BlockPicker.js +4 -4
  153. package/dist/views/page-builder/BottomBar.js +1 -1
  154. package/dist/views/page-builder/BuilderToolbar.js +2 -2
  155. package/dist/views/page-builder/ContextPanel.js +2 -2
  156. package/dist/views/page-builder/DesignScore.js +9 -9
  157. package/dist/views/page-builder/NodeSettings.js +8 -8
  158. package/dist/views/page-builder/PageBuilder.js +3 -3
  159. package/dist/views/page-builder/PageSettings.js +1 -1
  160. package/dist/views/page-builder/PageTemplates.js +2 -2
  161. package/dist/views/page-builder/SEOPanel.js +13 -13
  162. package/dist/views/page-builder/SavedSections.js +5 -5
  163. package/dist/views/page-builder/TemplatePicker.js +2 -2
  164. package/dist/views/page-builder/block-renderers/CTAPreview.js +5 -5
  165. package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
  166. package/dist/views/page-builder/block-renderers/CodePreview.js +1 -1
  167. package/dist/views/page-builder/block-renderers/FAQPreview.js +3 -3
  168. package/dist/views/page-builder/block-renderers/FallbackPreview.js +1 -1
  169. package/dist/views/page-builder/block-renderers/FormPreview.js +3 -3
  170. package/dist/views/page-builder/block-renderers/GalleryPreview.js +5 -5
  171. package/dist/views/page-builder/block-renderers/HeroPreview.js +3 -3
  172. package/dist/views/page-builder/block-renderers/ImagePreview.js +3 -3
  173. package/dist/views/page-builder/block-renderers/TextPreview.js +3 -3
  174. package/dist/views/page-builder/block-renderers/VideoPreview.js +4 -4
  175. package/dist/views/page-builder/canvas/BlockRenderer.js +1 -1
  176. package/dist/views/page-builder/canvas/BuilderCanvas.js +3 -3
  177. package/dist/views/page-builder/canvas/ColumnRenderer.js +2 -2
  178. package/dist/views/page-builder/canvas/ContainerRenderer.js +2 -2
  179. package/dist/views/page-builder/canvas/RowRenderer.js +2 -2
  180. package/dist/views/page-builder/canvas/SectionRenderer.js +2 -2
  181. package/package.json +6 -2
  182. package/src/AdminRoot.tsx +21 -11
  183. package/src/__tests__/layout/primitives.test.ts +37 -0
  184. package/src/__tests__/lib/cv.test.ts +74 -0
  185. package/src/assets/actuate-logo.tsx +72 -0
  186. package/src/components/Breadcrumbs.tsx +6 -6
  187. package/src/components/CommandPalette.tsx +34 -34
  188. package/src/components/ContentOverviewChart.tsx +3 -3
  189. package/src/components/ErrorBoundary.tsx +3 -3
  190. package/src/components/FocalPointPicker.tsx +4 -4
  191. package/src/components/FolderTree.tsx +38 -38
  192. package/src/components/LivePreview.tsx +16 -16
  193. package/src/components/LocaleSwitcher.tsx +7 -7
  194. package/src/components/MediaPickerModal.tsx +21 -21
  195. package/src/components/PresenceIndicator.tsx +2 -2
  196. package/src/components/SEOConfigPanel.tsx +582 -0
  197. package/src/components/SEOPanel.tsx +46 -46
  198. package/src/components/SEOPerformance.tsx +21 -21
  199. package/src/components/SchedulePublishDialog.tsx +4 -4
  200. package/src/components/SharePreviewLinkDialog.tsx +1 -1
  201. package/src/components/TipTapEditor.tsx +33 -33
  202. package/src/components/VersionHistory.tsx +16 -16
  203. package/src/components/ui/Badge.tsx +66 -14
  204. package/src/components/ui/Button.tsx +70 -33
  205. package/src/components/ui/Card.tsx +101 -0
  206. package/src/components/ui/DataTable.tsx +1 -1
  207. package/src/components/ui/Input.tsx +35 -0
  208. package/src/components/ui/SearchInput.tsx +4 -4
  209. package/src/components/ui/Select.tsx +56 -0
  210. package/src/components/ui/Toast.tsx +1 -1
  211. package/src/components/ui/index.ts +18 -4
  212. package/src/fields/BlockBuilderField.tsx +3 -3
  213. package/src/fields/DateField.tsx +1 -1
  214. package/src/fields/RelationshipField.tsx +10 -10
  215. package/src/fields/TextField.tsx +1 -1
  216. package/src/index.ts +28 -0
  217. package/src/layout/Header.tsx +28 -28
  218. package/src/layout/Layout.tsx +39 -46
  219. package/src/layout/Sidebar.tsx +37 -64
  220. package/src/layout/primitives/AdminShell.tsx +118 -0
  221. package/src/layout/primitives/Box.tsx +30 -0
  222. package/src/layout/primitives/Cluster.tsx +74 -0
  223. package/src/layout/primitives/Grid.tsx +120 -0
  224. package/src/layout/primitives/PageContainer.tsx +96 -0
  225. package/src/layout/primitives/Split.tsx +73 -0
  226. package/src/layout/primitives/Stack.tsx +67 -0
  227. package/src/layout/primitives/index.ts +36 -0
  228. package/src/layout/primitives/tokens.ts +76 -0
  229. package/src/lib/cv.ts +96 -0
  230. package/src/styles/build-input.css +1 -1
  231. package/src/views/ApiKeys.tsx +57 -57
  232. package/src/views/CollectionList.tsx +30 -30
  233. package/src/views/Dashboard.tsx +737 -186
  234. package/src/views/DocumentEdit.tsx +9 -9
  235. package/src/views/ForgotPassword.tsx +18 -18
  236. package/src/views/FormEditor.tsx +75 -75
  237. package/src/views/FormSubmissions.tsx +76 -76
  238. package/src/views/Forms.tsx +27 -27
  239. package/src/views/Login.tsx +65 -25
  240. package/src/views/MediaBrowser.tsx +127 -127
  241. package/src/views/PageEditor.tsx +25 -25
  242. package/src/views/Pages.tsx +59 -59
  243. package/src/views/PostEditor.tsx +37 -37
  244. package/src/views/Posts.tsx +48 -48
  245. package/src/views/Redirects.tsx +21 -21
  246. package/src/views/ResetPassword.tsx +28 -28
  247. package/src/views/SEO.tsx +144 -144
  248. package/src/views/ScriptTagEditor.tsx +24 -24
  249. package/src/views/ScriptTags.tsx +10 -10
  250. package/src/views/Settings.tsx +88 -80
  251. package/src/views/SetupWizard.tsx +28 -28
  252. package/src/views/Users.tsx +20 -20
  253. package/src/views/page-builder/AIBlockAssist.tsx +1 -1
  254. package/src/views/page-builder/AIGenerateDialog.tsx +63 -63
  255. package/src/views/page-builder/BlockEditor.tsx +26 -26
  256. package/src/views/page-builder/BlockPicker.tsx +22 -22
  257. package/src/views/page-builder/BottomBar.tsx +8 -8
  258. package/src/views/page-builder/BuilderToolbar.tsx +17 -17
  259. package/src/views/page-builder/ContextPanel.tsx +3 -3
  260. package/src/views/page-builder/DesignScore.tsx +21 -21
  261. package/src/views/page-builder/NodeSettings.tsx +27 -27
  262. package/src/views/page-builder/PageBuilder.tsx +11 -11
  263. package/src/views/page-builder/PageSettings.tsx +4 -4
  264. package/src/views/page-builder/PageTemplates.tsx +18 -18
  265. package/src/views/page-builder/SEOPanel.tsx +53 -53
  266. package/src/views/page-builder/SavedSections.tsx +37 -37
  267. package/src/views/page-builder/TemplatePicker.tsx +17 -17
  268. package/src/views/page-builder/block-renderers/CTAPreview.tsx +13 -13
  269. package/src/views/page-builder/block-renderers/CardsPreview.tsx +5 -5
  270. package/src/views/page-builder/block-renderers/CodePreview.tsx +6 -6
  271. package/src/views/page-builder/block-renderers/FAQPreview.tsx +13 -13
  272. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +3 -3
  273. package/src/views/page-builder/block-renderers/FormPreview.tsx +20 -20
  274. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +8 -8
  275. package/src/views/page-builder/block-renderers/HeroPreview.tsx +16 -16
  276. package/src/views/page-builder/block-renderers/ImagePreview.tsx +4 -4
  277. package/src/views/page-builder/block-renderers/TextPreview.tsx +14 -14
  278. package/src/views/page-builder/block-renderers/VideoPreview.tsx +12 -12
  279. package/src/views/page-builder/canvas/BlockRenderer.tsx +4 -4
  280. package/src/views/page-builder/canvas/BuilderCanvas.tsx +6 -6
  281. package/src/views/page-builder/canvas/ColumnRenderer.tsx +3 -3
  282. package/src/views/page-builder/canvas/ContainerRenderer.tsx +2 -2
  283. package/src/views/page-builder/canvas/RowRenderer.tsx +2 -2
  284. package/src/views/page-builder/canvas/SectionRenderer.tsx +2 -2
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cv } from '../../lib/cv.js';
4
+ const select = cv(
5
+ // Shares geometry with Input so they line up in forms.
6
+ 'focus-visible:ring-offset-background flex w-full appearance-none rounded-[var(--radius)] border bg-[var(--background)] pr-8 text-[var(--foreground)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', {
7
+ variants: {
8
+ size: {
9
+ sm: 'h-8 pr-7 pl-2.5 text-xs',
10
+ md: 'h-9 pr-8 pl-3 text-sm',
11
+ lg: 'h-10 pr-9 pl-4 text-base',
12
+ },
13
+ state: {
14
+ default: 'border-[var(--border)]',
15
+ invalid: 'border-[var(--destructive)] focus-visible:ring-[var(--destructive)]',
16
+ valid: 'border-emerald-500 focus-visible:ring-emerald-500',
17
+ },
18
+ },
19
+ defaultVariants: { size: 'md', state: 'default' },
20
+ });
21
+ export const Select = forwardRef(function Select({ size, state, className, children, ...rest }, ref) {
22
+ return (_jsxs("div", { className: "relative", children: [_jsx("select", { ref: ref, className: select({ size, state, class: className }), ...rest, children: children }), _jsx("svg", { "aria-hidden": true, className: "pointer-events-none absolute top-1/2 right-2 h-4 w-4 -translate-y-1/2 text-[var(--muted-foreground)]", viewBox: "0 0 20 20", fill: "currentColor", children: _jsx("path", { fillRule: "evenodd", d: "M5.23 7.21a.75.75 0 011.06.02L10 11.06l3.71-3.83a.75.75 0 111.08 1.04l-4.25 4.39a.75.75 0 01-1.08 0L5.21 8.27a.75.75 0 01.02-1.06z", clipRule: "evenodd" }) })] }));
23
+ });
24
+ export { select as selectVariants };
25
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/ui/Select.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA6C,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AAEvD,MAAM,MAAM,GAAG,EAAE;AACf,uDAAuD;AACvD,mTAAmT,EACnT;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,yBAAyB;YAC7B,EAAE,EAAE,uBAAuB;YAC3B,EAAE,EAAE,0BAA0B;SAC/B;QACD,KAAK,EAAE;YACL,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,qEAAqE;YAC9E,KAAK,EAAE,mDAAmD;SAC3D;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;CAClD,CACF,CAAA;AASD,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAiC,SAAS,MAAM,CAC9E,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC7C,GAAG;IAEH,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,iBAAQ,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,YAC7E,QAAQ,GACF,EACT,mCAEE,SAAS,EAAC,sGAAsG,EAChH,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,YAEnB,eACE,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,oIAAoI,EACtI,QAAQ,EAAC,SAAS,GAClB,GACE,IACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,CAAA"}
@@ -24,6 +24,6 @@ export function useToast() {
24
24
  export function ToastContainer({ toasts, onDismiss }) {
25
25
  if (toasts.length === 0)
26
26
  return null;
27
- return (_jsx("div", { className: "fixed bottom-4 right-4 z-[100] flex flex-col gap-2", children: toasts.map((toast) => (_jsxs("div", { className: `flex items-center gap-3 rounded-md border-l-4 px-4 py-3 shadow-lg ${typeClasses[toast.type]}`, children: [_jsx("p", { className: "flex-1 text-sm", children: toast.message }), _jsx("button", { onClick: () => onDismiss(toast.id), className: "shrink-0 opacity-60 hover:opacity-100", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }) })] }, toast.id))) }));
27
+ return (_jsx("div", { className: "fixed right-4 bottom-4 z-[100] flex flex-col gap-2", children: toasts.map((toast) => (_jsxs("div", { className: `flex items-center gap-3 rounded-md border-l-4 px-4 py-3 shadow-lg ${typeClasses[toast.type]}`, children: [_jsx("p", { className: "flex-1 text-sm", children: toast.message }), _jsx("button", { onClick: () => onDismiss(toast.id), className: "shrink-0 opacity-60 hover:opacity-100", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }) })] }, toast.id))) }));
28
28
  }
29
29
  //# sourceMappingURL=Toast.js.map
@@ -1,7 +1,13 @@
1
- export { Button } from './Button.js';
2
- export type { ButtonProps } from './Button.js';
3
- export { Badge } from './Badge.js';
4
- export type { BadgeProps } from './Badge.js';
1
+ export { Button, buttonVariants } from './Button.js';
2
+ export type { ButtonProps, ButtonVariants } from './Button.js';
3
+ export { Badge, badgeVariants, STATUS_TONE, STATUS_LABEL } from './Badge.js';
4
+ export type { BadgeProps, BadgeVariants, DocumentStatus } from './Badge.js';
5
+ export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, cardVariants, } from './Card.js';
6
+ export type { CardProps, CardVariants } from './Card.js';
7
+ export { Input, inputVariants } from './Input.js';
8
+ export type { InputProps, InputVariants } from './Input.js';
9
+ export { Select, selectVariants } from './Select.js';
10
+ export type { SelectProps, SelectVariants } from './Select.js';
5
11
  export { Avatar } from './Avatar.js';
6
12
  export type { AvatarProps } from './Avatar.js';
7
13
  export { EmptyState } from './EmptyState.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1,5 +1,8 @@
1
- export { Button } from './Button.js';
2
- export { Badge } from './Badge.js';
1
+ export { Button, buttonVariants } from './Button.js';
2
+ export { Badge, badgeVariants, STATUS_TONE, STATUS_LABEL } from './Badge.js';
3
+ export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, cardVariants, } from './Card.js';
4
+ export { Input, inputVariants } from './Input.js';
5
+ export { Select, selectVariants } from './Select.js';
3
6
  export { Avatar } from './Avatar.js';
4
7
  export { EmptyState } from './EmptyState.js';
5
8
  export { Skeleton } from './Skeleton.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -16,15 +16,15 @@ const BLOCK_ICONS = {
16
16
  };
17
17
  function BlockField({ field, value, onChange }) {
18
18
  if (field.type === 'select' && field.options) {
19
- return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("select", { value: value ?? '', onChange: (e) => onChange(e.target.value), className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]", children: [_jsx("option", { value: "", children: "Select..." }), field.options.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })] }));
19
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("select", { value: value ?? '', onChange: (e) => onChange(e.target.value), className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm transition-colors outline-none focus:ring-2 focus:ring-[var(--ring)]", children: [_jsx("option", { value: "", children: "Select..." }), field.options.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })] }));
20
20
  }
21
21
  if (field.type === 'richText') {
22
- return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("textarea", { value: value ?? '', onChange: (e) => onChange(e.target.value), rows: 4, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]" })] }));
22
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("textarea", { value: value ?? '', onChange: (e) => onChange(e.target.value), rows: 4, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm transition-colors outline-none focus:ring-2 focus:ring-[var(--ring)]" })] }));
23
23
  }
24
24
  if (field.type === 'media') {
25
25
  return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("div", { className: "flex items-center gap-3 rounded-md border border-dashed border-[var(--border)] p-3", children: [_jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-[var(--muted)]", children: _jsx(Image, { className: "h-5 w-5 text-[var(--muted-foreground)]" }) }), _jsx("span", { className: "text-sm text-[var(--muted-foreground)]", children: value ? 'Media selected' : 'No media selected' })] })] }));
26
26
  }
27
- return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), required: field.required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]" })] }));
27
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), required: field.required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm transition-colors outline-none focus:ring-2 focus:ring-[var(--ring)]" })] }));
28
28
  }
29
29
  function SortableBlock({ block, blockDef, expanded, onToggle, onRemove, onFieldChange, }) {
30
30
  const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  export function DateField({ label, value = '', onChange, required, helpText }) {
4
- return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("div", { className: "relative", children: [_jsx("input", { type: "date", value: value, onChange: (e) => onChange(e.target.value), required: required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)]" }), _jsx("button", { type: "button", className: "absolute right-2 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)]", "aria-label": "Open calendar", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })] }), helpText && _jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })] }));
4
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("div", { className: "relative", children: [_jsx("input", { type: "date", value: value, onChange: (e) => onChange(e.target.value), required: required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)]" }), _jsx("button", { type: "button", className: "absolute top-1/2 right-2 -translate-y-1/2 text-[var(--muted-foreground)]", "aria-label": "Open calendar", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })] }), helpText && _jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })] }));
5
5
  }
6
6
  //# sourceMappingURL=DateField.js.map
@@ -113,11 +113,11 @@ export function RelationshipField({ label, value, onChange, multi = false, requi
113
113
  const status = opt.status ?? opt.data?.status;
114
114
  const collection = opt.collection ?? relationTo;
115
115
  const statusClass = STATUS_STYLES[status] ?? 'bg-gray-100 text-gray-600';
116
- return (_jsxs("button", { type: "button", onClick: () => handleToggle(opt.id), className: `flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-[var(--accent)] ${isSelected ? 'font-medium' : ''}`, children: [_jsxs("div", { className: "flex-1 min-w-0 text-left", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "truncate", children: getDocTitle(opt) }), isSelected && _jsx("span", { className: "shrink-0 text-[var(--primary)]", children: "\u2713" })] }), _jsxs("div", { className: "flex items-center gap-2 mt-0.5", children: [_jsx("span", { className: "text-[10px] text-[var(--muted-foreground)]", children: collection }), opt.updatedAt && (_jsx("span", { className: "text-[10px] text-[var(--muted-foreground)]", children: relativeTime(opt.updatedAt) }))] })] }), status && (_jsx("span", { className: `shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium ${statusClass}`, children: status }))] }));
116
+ return (_jsxs("button", { type: "button", onClick: () => handleToggle(opt.id), className: `flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-[var(--accent)] ${isSelected ? 'font-medium' : ''}`, children: [_jsxs("div", { className: "min-w-0 flex-1 text-left", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "truncate", children: getDocTitle(opt) }), isSelected && _jsx("span", { className: "shrink-0 text-[var(--primary)]", children: "\u2713" })] }), _jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [_jsx("span", { className: "text-[10px] text-[var(--muted-foreground)]", children: collection }), opt.updatedAt && (_jsx("span", { className: "text-[10px] text-[var(--muted-foreground)]", children: relativeTime(opt.updatedAt) }))] })] }), status && (_jsx("span", { className: `shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium ${statusClass}`, children: status }))] }));
117
117
  }
118
- return (_jsxs("div", { className: "relative", ref: dropdownRef, children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), selectedItems.length > 0 && (_jsx("div", { className: "mb-2 flex flex-wrap gap-1", children: selectedItems.map((item) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-md bg-[var(--accent)] px-2 py-1 text-xs", children: [getDocTitle(item), _jsx("button", { type: "button", onClick: () => handleRemove(item.id), className: "hover:text-[var(--destructive)]", children: _jsx(X, { className: "w-3 h-3" }) })] }, item.id))) })), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)] pointer-events-none" }), _jsx("input", { type: "text", value: searchTerm, onChange: (e) => handleSearch(e.target.value), onFocus: () => setOpen(true), placeholder: `Search ${relationTo}...`, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] pl-8 pr-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)]" }), loading && (_jsx(Loader2, { className: "absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 animate-spin text-[var(--muted-foreground)]" })), open && (_jsxs("ul", { className: "absolute z-50 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-[var(--border)] bg-[var(--popover)] py-1 shadow-lg", children: [unselectedItems.map((opt) => (_jsx("li", { children: renderOption(opt, false) }, opt.id))), selectedItems.length > 0 && unselectedItems.length > 0 && (_jsx("li", { className: "border-t border-[var(--border)] my-1" })), selectedItems.map((opt) => (_jsx("li", { children: renderOption(opt, true) }, opt.id))), options.length === 0 && !loading && (_jsx("li", { className: "px-3 py-2 text-sm text-[var(--muted-foreground)]", children: "No results" })), _jsx("li", { className: "border-t border-[var(--border)] mt-1", children: _jsxs("button", { type: "button", onClick: () => {
118
+ return (_jsxs("div", { className: "relative", ref: dropdownRef, children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), selectedItems.length > 0 && (_jsx("div", { className: "mb-2 flex flex-wrap gap-1", children: selectedItems.map((item) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-md bg-[var(--accent)] px-2 py-1 text-xs", children: [getDocTitle(item), _jsx("button", { type: "button", onClick: () => handleRemove(item.id), className: "hover:text-[var(--destructive)]", children: _jsx(X, { className: "h-3 w-3" }) })] }, item.id))) })), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute top-1/2 left-2.5 h-4 w-4 -translate-y-1/2 text-[var(--muted-foreground)]" }), _jsx("input", { type: "text", value: searchTerm, onChange: (e) => handleSearch(e.target.value), onFocus: () => setOpen(true), placeholder: `Search ${relationTo}...`, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] py-2 pr-3 pl-8 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)]" }), loading && (_jsx(Loader2, { className: "absolute top-1/2 right-2.5 h-4 w-4 -translate-y-1/2 animate-spin text-[var(--muted-foreground)]" })), open && (_jsxs("ul", { className: "absolute z-50 mt-1 max-h-60 w-full overflow-y-auto rounded-md border border-[var(--border)] bg-[var(--popover)] py-1 shadow-lg", children: [unselectedItems.map((opt) => (_jsx("li", { children: renderOption(opt, false) }, opt.id))), selectedItems.length > 0 && unselectedItems.length > 0 && (_jsx("li", { className: "my-1 border-t border-[var(--border)]" })), selectedItems.map((opt) => (_jsx("li", { children: renderOption(opt, true) }, opt.id))), options.length === 0 && !loading && (_jsx("li", { className: "px-3 py-2 text-sm text-[var(--muted-foreground)]", children: "No results" })), _jsx("li", { className: "mt-1 border-t border-[var(--border)]", children: _jsxs("button", { type: "button", onClick: () => {
119
119
  setOpen(false);
120
120
  onNavigate?.(`/${relationTo}/new`);
121
- }, className: "flex w-full items-center gap-2 px-3 py-2 text-sm text-[var(--primary)] hover:bg-[var(--accent)]", children: [_jsx(Plus, { className: "w-3.5 h-3.5" }), "Create New"] }) })] }))] }), helpText && _jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })] }));
121
+ }, className: "flex w-full items-center gap-2 px-3 py-2 text-sm text-[var(--primary)] hover:bg-[var(--accent)]", children: [_jsx(Plus, { className: "h-3.5 w-3.5" }), "Create New"] }) })] }))] }), helpText && _jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })] }));
122
122
  }
123
123
  //# sourceMappingURL=RelationshipField.js.map
@@ -3,6 +3,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  export function TextField({ label, value = '', onChange, required, maxLength, helpText, error, }) {
4
4
  const charCount = value.length;
5
5
  const hasError = !!error || (maxLength !== undefined && charCount > maxLength);
6
- return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 flex items-baseline justify-between text-sm font-medium", children: [_jsxs("span", { children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), maxLength !== undefined && (_jsxs("span", { className: `text-xs ${hasError ? 'text-[var(--destructive)]' : 'text-[var(--muted-foreground)]'}`, children: [charCount, "/", maxLength] }))] }), _jsx("input", { type: "text", value: value, onChange: (e) => onChange(e.target.value), required: required, maxLength: maxLength, className: `w-full rounded-md border bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)] ${hasError ? 'border-[var(--destructive)]' : 'border-[var(--border)]'}` }), helpText && !error && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })), error && _jsx("p", { className: "mt-1 text-xs text-[var(--destructive)]", children: error })] }));
6
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 flex items-baseline justify-between text-sm font-medium", children: [_jsxs("span", { children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), maxLength !== undefined && (_jsxs("span", { className: `text-xs ${hasError ? 'text-[var(--destructive)]' : 'text-[var(--muted-foreground)]'}`, children: [charCount, "/", maxLength] }))] }), _jsx("input", { type: "text", value: value, onChange: (e) => onChange(e.target.value), required: required, maxLength: maxLength, className: `w-full rounded-md border bg-[var(--input-background)] px-3 py-2 text-sm transition-colors outline-none focus:ring-2 focus:ring-[var(--ring)] ${hasError ? 'border-[var(--destructive)]' : 'border-[var(--border)]'}` }), helpText && !error && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })), error && _jsx("p", { className: "mt-1 text-xs text-[var(--destructive)]", children: error })] }));
7
7
  }
8
8
  //# sourceMappingURL=TextField.js.map
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ export { Sidebar } from './layout/Sidebar.js';
6
6
  export type { SidebarProps } from './layout/Sidebar.js';
7
7
  export { Header } from './layout/Header.js';
8
8
  export type { HeaderProps } from './layout/Header.js';
9
+ export { AdminShell, PageContainer, Stack, Cluster, Grid, Split, Box, tokens, } from './layout/primitives/index.js';
10
+ export type { AdminShellProps, PageContainerProps, StackProps, StackSpace, ClusterProps, ClusterAlign, ClusterJustify, GridProps, GridResponsive, SplitProps, BoxProps, SpaceToken, RadiusToken, } from './layout/primitives/index.js';
9
11
  export { Dashboard } from './views/Dashboard.js';
10
12
  export { Posts } from './views/Posts.js';
11
13
  export { Pages } from './views/Pages.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,QAAQ,EACR,YAAY,IAAI,mBAAmB,GACpC,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,YAAY,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,YAAY,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC1E,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,9 @@ export { AdminRoot } from './AdminRoot.js';
2
2
  export { Layout } from './layout/Layout.js';
3
3
  export { Sidebar } from './layout/Sidebar.js';
4
4
  export { Header } from './layout/Header.js';
5
+ // Layout primitives — the sanctioned way to compose admin views.
6
+ // Always prefer these to hand-rolled flex/grid utilities.
7
+ export { AdminShell, PageContainer, Stack, Cluster, Grid, Split, Box, tokens, } from './layout/primitives/index.js';
5
8
  export { Dashboard } from './views/Dashboard.js';
6
9
  export { Posts } from './views/Posts.js';
7
10
  export { Pages } from './views/Pages.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAS5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAOvD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,6 @@ export function Header({ onToggleSidebar, session, onNavigate }) {
13
13
  const toggleTheme = () => {
14
14
  setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
15
15
  };
16
- return (_jsxs(_Fragment, { children: [_jsxs("header", { className: "h-14 border-b border-border bg-background flex items-center justify-between px-4 gap-4", children: [_jsx("button", { onClick: onToggleSidebar, className: "lg:hidden p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Toggle sidebar", children: _jsx(Menu, { className: "w-5 h-5 text-foreground", strokeWidth: 2 }) }), _jsx("div", { className: "flex items-center lg:hidden", children: _jsx("span", { className: "text-lg font-semibold text-foreground", children: "Actuate" }) }), _jsx("div", { className: "flex-1" }), _jsxs("div", { className: "flex items-center gap-2 sm:gap-3", children: [_jsxs("div", { className: "hidden md:block relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none" }), _jsx("input", { type: "text", placeholder: "Search... (\u2318K)", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onFocus: () => setShowCommandPalette(true), className: "w-64 pl-9 pr-3 py-1.5 text-sm border border-border rounded-lg bg-input-background text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "md:hidden p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Search", children: _jsx(Search, { className: "w-5 h-5 text-muted-foreground" }) }), _jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Toggle theme", children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "w-5 h-5 text-muted-foreground" })) : (_jsx(Moon, { className: "w-5 h-5 text-muted-foreground" })) }), _jsxs("button", { className: "p-2 hover:bg-accent rounded-lg transition-colors relative", "aria-label": "Notifications", children: [_jsx(Bell, { className: "w-5 h-5 text-muted-foreground" }), _jsx("span", { className: "absolute top-1.5 right-1.5 w-2 h-2 bg-destructive rounded-full" })] }), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "flex items-center gap-2 p-1.5 hover:bg-accent rounded-lg transition-colors", children: [_jsx("div", { className: "w-8 h-8 bg-linear-to-br from-blue-500 to-purple-600 rounded-full flex items-center justify-center", children: _jsx("span", { className: "text-white text-sm font-medium", children: session?.user?.name?.charAt(0)?.toUpperCase() ?? 'A' }) }), _jsx(ChevronDown, { className: "w-4 h-4 text-muted-foreground hidden sm:block" })] }) }), _jsx(DropdownMenu.Portal, { children: _jsxs(DropdownMenu.Content, { className: "min-w-[200px] bg-popover text-popover-foreground rounded-lg border border-border shadow-lg p-1 z-50", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "px-3 py-2 border-b border-border", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-xs text-muted-foreground", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent rounded cursor-pointer outline-none", children: [_jsx(User, { className: "w-4 h-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent rounded cursor-pointer outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "h-px bg-border my-1" }), _jsx(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-accent rounded cursor-pointer outline-none", children: "Logout" })] }) })] })] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
16
+ return (_jsxs(_Fragment, { children: [_jsxs("header", { className: "border-border bg-background flex h-14 items-center justify-between gap-4 border-b px-4", children: [_jsx("button", { onClick: onToggleSidebar, className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Toggle sidebar", children: _jsx(Menu, { className: "text-foreground h-5 w-5", strokeWidth: 2 }) }), _jsx("div", { className: "flex items-center md:hidden", children: _jsx("span", { className: "text-foreground text-lg font-semibold", children: "Actuate" }) }), _jsx("div", { className: "flex-1" }), _jsxs("div", { className: "flex items-center gap-2 sm:gap-3", children: [_jsxs("div", { className: "relative hidden md:block", children: [_jsx(Search, { className: "text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2" }), _jsx("input", { type: "text", placeholder: "Search... (\u2318K)", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onFocus: () => setShowCommandPalette(true), className: "border-border bg-input-background text-foreground focus:ring-ring w-64 rounded-lg border py-1.5 pr-3 pl-9 text-sm focus:border-transparent focus:ring-2 focus:outline-none" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Search", children: _jsx(Search, { className: "text-muted-foreground h-5 w-5" }) }), _jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "hover:bg-accent rounded-lg p-2 transition-colors", "aria-label": "Toggle theme", children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "text-muted-foreground h-5 w-5" })) : (_jsx(Moon, { className: "text-muted-foreground h-5 w-5" })) }), _jsxs("button", { className: "hover:bg-accent relative rounded-lg p-2 transition-colors", "aria-label": "Notifications", children: [_jsx(Bell, { className: "text-muted-foreground h-5 w-5" }), _jsx("span", { className: "bg-destructive absolute top-1.5 right-1.5 h-2 w-2 rounded-full" })] }), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "hover:bg-accent flex items-center gap-2 rounded-lg p-1.5 transition-colors", children: [_jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-linear-to-br from-blue-500 to-purple-600", children: _jsx("span", { className: "text-sm font-medium text-white", children: session?.user?.name?.charAt(0)?.toUpperCase() ?? 'A' }) }), _jsx(ChevronDown, { className: "text-muted-foreground hidden h-4 w-4 sm:block" })] }) }), _jsx(DropdownMenu.Portal, { children: _jsxs(DropdownMenu.Content, { className: "bg-popover text-popover-foreground border-border z-50 min-w-[200px] rounded-lg border p-1 shadow-lg", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "border-border border-b px-3 py-2", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-muted-foreground text-xs", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", children: [_jsx(User, { className: "h-4 w-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "bg-border my-1 h-px" }), _jsx(DropdownMenu.Item, { className: "text-destructive hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", children: "Logout" })] }) })] })] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
17
17
  }
18
18
  //# sourceMappingURL=Header.js.map
@@ -6,5 +6,19 @@ export interface LayoutProps {
6
6
  onNavigate: (path: string) => void;
7
7
  children: ReactNode;
8
8
  }
9
+ /**
10
+ * Layout — thin shell that wires Sidebar/Header/Breadcrumbs into the
11
+ * `<AdminShell>` primitive.
12
+ *
13
+ * `AdminShell` (in `./primitives/AdminShell.tsx`) owns the actual layout
14
+ * algorithm (CSS Grid on desktop, fixed slide-in overlay on mobile,
15
+ * JS-driven `matchMedia` breakpoint) so that every layout decision lives
16
+ * in one place. Per-product chrome (Sidebar, Header, Breadcrumbs)
17
+ * composes on top of it.
18
+ *
19
+ * DO NOT re-implement layout logic in this file — extend `AdminShell`
20
+ * instead. The previous flex + `fixed`↔`static` toggle caused recurring
21
+ * sidebar-overlap bugs; the grid-based primitive is the contract.
22
+ */
9
23
  export declare function Layout({ config, session, currentPath, onNavigate, children }: LayoutProps): import("react/jsx-runtime").JSX.Element;
10
24
  //# sourceMappingURL=Layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM3D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA0DzF"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAO3D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAoCzF"}
@@ -1,25 +1,31 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect } from 'react';
4
4
  import { Sidebar } from './Sidebar.js';
5
5
  import { Header } from './Header.js';
6
6
  import { Breadcrumbs } from '../components/Breadcrumbs.js';
7
+ import { AdminShell } from './primitives/AdminShell.js';
7
8
  import { Toaster } from 'sonner';
9
+ /**
10
+ * Layout — thin shell that wires Sidebar/Header/Breadcrumbs into the
11
+ * `<AdminShell>` primitive.
12
+ *
13
+ * `AdminShell` (in `./primitives/AdminShell.tsx`) owns the actual layout
14
+ * algorithm (CSS Grid on desktop, fixed slide-in overlay on mobile,
15
+ * JS-driven `matchMedia` breakpoint) so that every layout decision lives
16
+ * in one place. Per-product chrome (Sidebar, Header, Breadcrumbs)
17
+ * composes on top of it.
18
+ *
19
+ * DO NOT re-implement layout logic in this file — extend `AdminShell`
20
+ * instead. The previous flex + `fixed`↔`static` toggle caused recurring
21
+ * sidebar-overlap bugs; the grid-based primitive is the contract.
22
+ */
8
23
  export function Layout({ config, session, currentPath, onNavigate, children }) {
9
24
  const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
10
25
  const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
11
26
  useEffect(() => {
12
27
  setMobileSidebarOpen(false);
13
28
  }, [currentPath]);
14
- useEffect(() => {
15
- const handleResize = () => {
16
- if (window.innerWidth < 1024) {
17
- setMobileSidebarOpen(false);
18
- }
19
- };
20
- window.addEventListener('resize', handleResize);
21
- return () => window.removeEventListener('resize', handleResize);
22
- }, []);
23
- return (_jsxs("div", { className: "h-screen flex overflow-hidden bg-background text-foreground", children: [_jsx(Toaster, { position: "bottom-right" }), mobileSidebarOpen && (_jsx("div", { className: "fixed inset-0 bg-black/50 z-40 lg:hidden", onClick: () => setMobileSidebarOpen(false) })), _jsx("div", { className: `fixed lg:static inset-y-0 left-0 z-50 transform transition-transform duration-300 lg:transform-none ${mobileSidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'}`, children: _jsx(Sidebar, { collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed), currentPath: currentPath, onNavigate: onNavigate, config: config }) }), _jsxs("div", { className: "flex-1 flex flex-col overflow-hidden", children: [_jsx(Header, { onToggleSidebar: () => setMobileSidebarOpen(!mobileSidebarOpen), session: session, onNavigate: onNavigate }), _jsx(Breadcrumbs, { currentPath: currentPath, onNavigate: onNavigate }), _jsx("main", { className: "flex-1 overflow-auto bg-background", children: _jsx("div", { className: "h-full", children: children }) })] })] }));
29
+ return (_jsxs(_Fragment, { children: [_jsx(Toaster, { position: "bottom-right" }), _jsx(AdminShell, { mobileSidebarOpen: mobileSidebarOpen, onMobileSidebarClose: () => setMobileSidebarOpen(false), sidebar: _jsx(Sidebar, { collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed), currentPath: currentPath, onNavigate: onNavigate, config: config }), header: _jsx(Header, { onToggleSidebar: () => setMobileSidebarOpen(!mobileSidebarOpen), session: session, onNavigate: onNavigate }), breadcrumbs: _jsx(Breadcrumbs, { currentPath: currentPath, onNavigate: onNavigate }), children: _jsx("div", { className: "h-full", children: children }) })] }));
24
30
  }
25
31
  //# sourceMappingURL=Layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAUhC,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAe;IACxF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;gBAC7B,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC/C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACjE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,eAAK,SAAS,EAAC,6DAA6D,aAC1E,KAAC,OAAO,IAAC,QAAQ,EAAC,cAAc,GAAG,EAElC,iBAAiB,IAAI,CACpB,cACE,SAAS,EAAC,0CAA0C,EACpD,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAC1C,CACH,EAED,cACE,SAAS,EAAE,uGACT,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,oCACxC,EAAE,YAEF,KAAC,OAAO,IACN,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,EAC9D,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,GACE,EAEN,eAAK,SAAS,EAAC,sCAAsC,aACnD,KAAC,MAAM,IACL,eAAe,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAC/D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACtB,EAEF,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAI,EAEjE,eAAM,SAAS,EAAC,oCAAoC,YAClD,cAAK,SAAS,EAAC,QAAQ,YAAE,QAAQ,GAAO,GACnC,IACH,IACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAUhC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAe;IACxF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,OAAO,CACL,8BACE,KAAC,OAAO,IAAC,QAAQ,EAAC,cAAc,GAAG,EACnC,KAAC,UAAU,IACT,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACvD,OAAO,EACL,KAAC,OAAO,IACN,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,EAC9D,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,EAEJ,MAAM,EACJ,KAAC,MAAM,IACL,eAAe,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAC/D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACtB,EAEJ,WAAW,EAAE,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAI,YAE9E,cAAK,SAAS,EAAC,QAAQ,YAAE,QAAQ,GAAO,GAC7B,IACZ,CACJ,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AA8H9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,YAAY,2CAsEd;AAQD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAmG9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,YAAY,2CAsEd;AAQD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
@@ -1,11 +1,21 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { LayoutDashboard, FileText, File, Image, Settings, ChevronLeft, ChevronRight, ClipboardList, Users, Search as SearchIcon, Briefcase, FolderOpen, BookOpen, HelpCircle, Newspaper, PanelTop, PanelBottom, Layers, Code2, LayoutTemplate, Library, KeyRound, } from 'lucide-react';
4
- function ActuateLogo({ className }) {
5
- return (_jsxs("svg", { viewBox: "0 0 40 44", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, "aria-hidden": "true", children: [_jsx("polygon", { points: "20,2 6,18 12,18 20,8 28,18 34,18", fill: "#E8646A" }), _jsx("rect", { x: "11", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" }), _jsx("rect", { x: "18", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" }), _jsx("rect", { x: "25", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" })] }));
4
+ import { ActuateBrandLogo } from '../assets/actuate-logo.js';
5
+ /**
6
+ * Compact mark used in the collapsed sidebar — just the "C" symbol from the
7
+ * full lockup, drawn as its own simple SVG so it stays crisp at 32×32.
8
+ */
9
+ function ActuateMark({ className }) {
10
+ return (_jsxs("svg", { viewBox: "0 0 40 44", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, "aria-hidden": "true", children: [_jsx("polygon", { points: "20,2 6,18 12,18 20,8 28,18 34,18", fill: "#F05E65" }), _jsx("rect", { x: "11", y: "20", width: "4", height: "22", rx: "1", fill: "#F05E65" }), _jsx("rect", { x: "18", y: "20", width: "4", height: "22", rx: "1", fill: "#F05E65" }), _jsx("rect", { x: "25", y: "20", width: "4", height: "22", rx: "1", fill: "#F05E65" })] }));
6
11
  }
12
+ /**
13
+ * Full Actuate Media lockup. Inline SVG with a transparent background so it
14
+ * sits naturally on whatever surface the sidebar uses (light or dark theme,
15
+ * custom branding background, etc.).
16
+ */
7
17
  function ActuateWordmark({ className }) {
8
- return (_jsxs("svg", { viewBox: "0 0 170 44", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, "aria-hidden": "true", children: [_jsx("polygon", { points: "20,2 6,18 12,18 20,8 28,18 34,18", fill: "#E8646A" }), _jsx("rect", { x: "11", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" }), _jsx("rect", { x: "18", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" }), _jsx("rect", { x: "25", y: "20", width: "4", height: "22", rx: "1", fill: "#E8646A" }), _jsx("text", { x: "44", y: "25", fontFamily: "system-ui, sans-serif", fontSize: "17", fontWeight: "600", letterSpacing: "1.5", fill: "#E8646A", children: "ACTUATE" }), _jsx("text", { x: "44", y: "40", fontFamily: "system-ui, sans-serif", fontSize: "10", fontWeight: "500", letterSpacing: "4", fill: "#9CA3AF", children: "MEDIA" })] }));
18
+ return _jsx(ActuateBrandLogo, { className: className });
9
19
  }
10
20
  const ICON_MAP = {
11
21
  file: File,
@@ -25,17 +35,17 @@ function BrandLogo({ config, collapsed }) {
25
35
  const brandName = branding?.name;
26
36
  if (collapsed) {
27
37
  if (customLogo) {
28
- return _jsx("img", { src: customLogo, alt: brandName ?? 'Admin', className: "w-8 h-8 object-contain" });
38
+ return _jsx("img", { src: customLogo, alt: brandName ?? 'Admin', className: "h-8 w-8 object-contain" });
29
39
  }
30
- return _jsx(ActuateLogo, { className: "w-8 h-8" });
40
+ return _jsx(ActuateMark, { className: "h-8 w-8" });
31
41
  }
32
42
  if (customLogo) {
33
- return (_jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [_jsx("img", { src: customLogo, alt: brandName ?? 'Admin', className: "h-8 w-auto object-contain shrink-0" }), brandName && (_jsx("span", { className: "text-sm font-semibold text-sidebar-foreground truncate", children: brandName }))] }));
43
+ return (_jsxs("div", { className: "flex min-w-0 items-center gap-2.5", children: [_jsx("img", { src: customLogo, alt: brandName ?? 'Admin', className: "h-8 w-auto shrink-0 object-contain" }), brandName && (_jsx("span", { className: "text-sidebar-foreground truncate text-sm font-semibold", children: brandName }))] }));
34
44
  }
35
45
  if (brandName) {
36
- return (_jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [_jsx(ActuateLogo, { className: "w-7 h-7 shrink-0" }), _jsx("span", { className: "text-sm font-semibold text-sidebar-foreground truncate", children: brandName })] }));
46
+ return (_jsxs("div", { className: "flex min-w-0 items-center gap-2.5", children: [_jsx(ActuateMark, { className: "h-7 w-7 shrink-0" }), _jsx("span", { className: "text-sidebar-foreground truncate text-sm font-semibold", children: brandName })] }));
37
47
  }
38
- return _jsx(ActuateWordmark, { className: "h-8 w-auto" });
48
+ return _jsx(ActuateWordmark, { className: "h-9" });
39
49
  }
40
50
  const defaultNavItems = [
41
51
  { path: '/', label: 'Dashboard', icon: LayoutDashboard },
@@ -50,14 +60,14 @@ const defaultNavItems = [
50
60
  ];
51
61
  export function Sidebar({ collapsed, onToggleCollapse, currentPath, onNavigate, config, }) {
52
62
  const navItems = buildNavItems(config);
53
- return (_jsxs("aside", { className: `h-full bg-sidebar border-r border-sidebar-border transition-all duration-200 ${collapsed ? 'w-20' : 'w-64'}`, children: [_jsxs("div", { className: `flex items-center h-14 border-b border-sidebar-border px-4 ${collapsed ? 'justify-center' : 'justify-between'}`, children: [!collapsed && _jsx(BrandLogo, { config: config, collapsed: false }), collapsed && _jsx(BrandLogo, { config: config, collapsed: true }), _jsx("button", { onClick: onToggleCollapse, className: "hidden lg:block p-2 hover:bg-sidebar-accent rounded-lg transition-colors shrink-0", "aria-label": collapsed ? 'Expand sidebar' : 'Collapse sidebar', children: collapsed ? (_jsx(ChevronRight, { className: "w-4 h-4 text-sidebar-foreground" })) : (_jsx(ChevronLeft, { className: "w-4 h-4 text-sidebar-foreground" })) })] }), _jsx("nav", { className: "p-3 space-y-1", children: navItems.map((item, idx) => {
63
+ return (_jsxs("aside", { className: `bg-sidebar border-sidebar-border h-full border-r transition-all duration-200 ${collapsed ? 'w-20' : 'w-64'}`, children: [_jsxs("div", { className: `border-sidebar-border flex h-14 items-center border-b px-4 ${collapsed ? 'justify-center' : 'justify-between'}`, children: [!collapsed && _jsx(BrandLogo, { config: config, collapsed: false }), collapsed && _jsx(BrandLogo, { config: config, collapsed: true }), _jsx("button", { onClick: onToggleCollapse, className: "hover:bg-sidebar-accent hidden shrink-0 rounded-lg p-2 transition-colors md:block", "aria-label": collapsed ? 'Expand sidebar' : 'Collapse sidebar', children: collapsed ? (_jsx(ChevronRight, { className: "text-sidebar-foreground h-4 w-4" })) : (_jsx(ChevronLeft, { className: "text-sidebar-foreground h-4 w-4" })) })] }), _jsx("nav", { className: "space-y-1 p-3", children: navItems.map((item, idx) => {
54
64
  const Icon = item.icon;
55
65
  const isActive = currentPath === item.path || (item.path !== '/' && currentPath.startsWith(item.path));
56
66
  const prevGroup = idx > 0 ? navItems[idx - 1]?.group : undefined;
57
67
  const showGroupLabel = item.group && item.group !== prevGroup;
58
- return (_jsxs("div", { children: [showGroupLabel && !collapsed && (_jsx("div", { className: "pt-3 pb-1 px-3", children: _jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wider text-sidebar-foreground/50", children: item.group }) })), showGroupLabel && collapsed && (_jsx("div", { className: "pt-2 pb-1 flex justify-center", children: _jsx("span", { className: "w-4 border-t border-sidebar-foreground/20" }) })), _jsxs("button", { onClick: () => onNavigate(item.path), className: `flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors w-full text-left ${isActive
68
+ return (_jsxs("div", { children: [showGroupLabel && !collapsed && (_jsx("div", { className: "px-3 pt-3 pb-1", children: _jsx("span", { className: "text-sidebar-foreground/50 text-[10px] font-semibold tracking-wider uppercase", children: item.group }) })), showGroupLabel && collapsed && (_jsx("div", { className: "flex justify-center pt-2 pb-1", children: _jsx("span", { className: "border-sidebar-foreground/20 w-4 border-t" }) })), _jsxs("button", { onClick: () => onNavigate(item.path), className: `flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-colors ${isActive
59
69
  ? 'bg-sidebar-accent text-sidebar-primary'
60
- : 'text-sidebar-foreground hover:bg-sidebar-accent'} ${collapsed ? 'justify-center' : ''}`, title: collapsed ? item.label : '', children: [_jsx(Icon, { className: "w-5 h-5 shrink-0" }), !collapsed && _jsx("span", { className: "text-sm font-medium", children: item.label })] })] }, item.path));
70
+ : 'text-sidebar-foreground hover:bg-sidebar-accent'} ${collapsed ? 'justify-center' : ''}`, title: collapsed ? item.label : '', children: [_jsx(Icon, { className: "h-5 w-5 shrink-0" }), !collapsed && _jsx("span", { className: "text-sm font-medium", children: item.label })] })] }, item.path));
61
71
  }) })] }));
62
72
  }
63
73
  function resolveIcon(collection) {
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,eAAe,EACf,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,aAAa,EACb,KAAK,EACL,MAAM,IAAI,UAAU,EACpB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,MAAM,EACN,KAAK,EACL,cAAc,EACd,OAAO,EACP,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D;;;GAGG;AACH,SAAS,WAAW,CAAC,EAAE,SAAS,EAA0B;IACxD,OAAO,CACL,eACE,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAClC,SAAS,EAAE,SAAS,iBACR,MAAM,aAElB,kBAAS,MAAM,EAAC,kCAAkC,EAAC,IAAI,EAAC,SAAS,GAAG,EACpE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,SAAS,GAAG,EAClE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,SAAS,GAAG,EAClE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,SAAS,GAAG,IAC9D,CACP,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,EAAE,SAAS,EAA0B;IAC5D,OAAO,KAAC,gBAAgB,IAAC,SAAS,EAAE,SAAS,GAAI,CAAA;AACnD,CAAC;AAED,MAAM,QAAQ,GAA+B;IAC3C,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,MAAM;CACf,CAAA;AAED,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAwC;IAC5E,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAA;IACxC,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,CAAA;IACjC,MAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,CAAA;IAEhC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,cAAK,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,EAAC,wBAAwB,GAAG,CAAA;QAC/F,CAAC;QACD,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,CAAA;IAC5C,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CACL,eAAK,SAAS,EAAC,mCAAmC,aAChD,cACE,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,SAAS,IAAI,OAAO,EACzB,SAAS,EAAC,oCAAoC,GAC9C,EACD,SAAS,IAAI,CACZ,eAAM,SAAS,EAAC,wDAAwD,YACrE,SAAS,GACL,CACR,IACG,CACP,CAAA;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,eAAK,SAAS,EAAC,mCAAmC,aAChD,KAAC,WAAW,IAAC,SAAS,EAAC,kBAAkB,GAAG,EAC5C,eAAM,SAAS,EAAC,wDAAwD,YAAE,SAAS,GAAQ,IACvF,CACP,CAAA;IACH,CAAC;IAED,OAAO,KAAC,eAAe,IAAC,SAAS,EAAC,KAAK,GAAG,CAAA;AAC5C,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE;IACxD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;IAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;IACvD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;IAChD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;CACzD,CAAA;AAUD,MAAM,UAAU,OAAO,CAAC,EACtB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,MAAM,GACO;IACb,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAEtC,OAAO,CACL,iBACE,SAAS,EAAE,gFACT,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MACvB,EAAE,aAEF,eACE,SAAS,EAAE,8DACT,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBACjC,EAAE,aAED,CAAC,SAAS,IAAI,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAI,EAC7D,SAAS,IAAI,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAI,EAC5D,iBACE,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAC,mFAAmF,gBACjF,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,YAE5D,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,YAAY,IAAC,SAAS,EAAC,iCAAiC,GAAG,CAC7D,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,iCAAiC,GAAG,CAC5D,GACM,IACL,EAEN,cAAK,SAAS,EAAC,eAAe,YAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;oBACtB,MAAM,QAAQ,GACZ,WAAW,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;oBAEvF,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;oBAChE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAA;oBAE7D,OAAO,CACL,0BACG,cAAc,IAAI,CAAC,SAAS,IAAI,CAC/B,cAAK,SAAS,EAAC,gBAAgB,YAC7B,eAAM,SAAS,EAAC,+EAA+E,YAC5F,IAAI,CAAC,KAAK,GACN,GACH,CACP,EACA,cAAc,IAAI,SAAS,IAAI,CAC9B,cAAK,SAAS,EAAC,+BAA+B,YAC5C,eAAM,SAAS,EAAC,2CAA2C,GAAG,GAC1D,CACP,EACD,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,SAAS,EAAE,qFACT,QAAQ;oCACN,CAAC,CAAC,wCAAwC;oCAC1C,CAAC,CAAC,iDACN,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,EACvC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAElC,KAAC,IAAI,IAAC,SAAS,EAAC,kBAAkB,GAAG,EACpC,CAAC,SAAS,IAAI,eAAM,SAAS,EAAC,qBAAqB,YAAE,IAAI,CAAC,KAAK,GAAQ,IACjE,KAxBD,IAAI,CAAC,IAAI,CAyBb,CACP,CAAA;gBACH,CAAC,CAAC,GACE,IACA,CACT,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,UAAe;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,OAAO,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AACrD,CAAC;AASD,SAAS,aAAa,CAAC,MAAW;IAChC,IAAI,CAAC,MAAM,EAAE,WAAW;QAAE,OAAO,eAAe,CAAA;IAEhD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAA;IAC9B,MAAM,eAAe,GAAU,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAE5E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAE/D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAErD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IAC7E,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAA;IAEtD,MAAM,KAAK,GAAc,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;IAEnF,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,IAAI;YACnD,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC;SAC9B,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAA;IAChD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAe,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IACD,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,KAAK,MAAM,UAAU,IAAI,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,IAAI;gBACnD,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;gBAC3B,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC;gBAC7B,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,EAC1F,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EACnF,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EACvD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAChD,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,EAC3D,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EACxD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CACzD,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface AdminShellProps {
3
+ /** Sidebar/navigation slot. Rendered in the left column on desktop. */
4
+ sidebar: ReactNode;
5
+ /** Top header slot. Rendered above the main content. */
6
+ header?: ReactNode;
7
+ /** Optional breadcrumb / sub-header slot rendered below the header. */
8
+ breadcrumbs?: ReactNode;
9
+ /** Main content. Scrolls independently of the sidebar. */
10
+ children: ReactNode;
11
+ /**
12
+ * Whether the mobile sidebar overlay is currently open. Controlled.
13
+ * AdminShell renders the backdrop + slide transform; the consumer owns
14
+ * the open state and the hamburger button that toggles it.
15
+ */
16
+ mobileSidebarOpen?: boolean;
17
+ onMobileSidebarClose?: () => void;
18
+ /**
19
+ * Breakpoint above which the sidebar docks beside the content instead
20
+ * of overlaying on top of it. Mirrors Tailwind's `md` (768px) default.
21
+ */
22
+ desktopBreakpoint?: number;
23
+ }
24
+ /**
25
+ * The canonical admin chrome. Owns the entire viewport, splits into
26
+ * `sidebar | (header + breadcrumbs + content)`, and handles the mobile
27
+ * overlay transition.
28
+ *
29
+ * Implementation notes:
30
+ * - Desktop layout is CSS Grid with `gridTemplateColumns: 'auto minmax(0, 1fr)'`.
31
+ * The `minmax(0, 1fr)` is load-bearing: it lets the content shrink
32
+ * below its intrinsic width when the sidebar takes its share, which
33
+ * is the one thing flex-based shells fail at.
34
+ * - Mobile layout is a single block with the sidebar absolutely
35
+ * positioned and slid in via `transform: translateX(…)`. We avoid
36
+ * the brittle `fixed` ↔ `static` toggle that caused recurring sidebar
37
+ * overlap bugs in the old layout.
38
+ * - The desktop/mobile decision is made in JS via `matchMedia` so the
39
+ * layout is independent of Tailwind's `md:` utility compilation. If
40
+ * the CSS bundle is stale or partially loaded the layout still works.
41
+ */
42
+ export declare function AdminShell({ sidebar, header, breadcrumbs, children, mobileSidebarOpen, onMobileSidebarClose, desktopBreakpoint, }: AdminShellProps): import("react/jsx-runtime").JSX.Element;
43
+ //# sourceMappingURL=AdminShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,OAAO,EAAE,SAAS,CAAA;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uEAAuE;IACvE,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAyB,EACzB,oBAAoB,EACpB,iBAAuB,GACxB,EAAE,eAAe,2CAiEjB"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ /**
4
+ * The canonical admin chrome. Owns the entire viewport, splits into
5
+ * `sidebar | (header + breadcrumbs + content)`, and handles the mobile
6
+ * overlay transition.
7
+ *
8
+ * Implementation notes:
9
+ * - Desktop layout is CSS Grid with `gridTemplateColumns: 'auto minmax(0, 1fr)'`.
10
+ * The `minmax(0, 1fr)` is load-bearing: it lets the content shrink
11
+ * below its intrinsic width when the sidebar takes its share, which
12
+ * is the one thing flex-based shells fail at.
13
+ * - Mobile layout is a single block with the sidebar absolutely
14
+ * positioned and slid in via `transform: translateX(…)`. We avoid
15
+ * the brittle `fixed` ↔ `static` toggle that caused recurring sidebar
16
+ * overlap bugs in the old layout.
17
+ * - The desktop/mobile decision is made in JS via `matchMedia` so the
18
+ * layout is independent of Tailwind's `md:` utility compilation. If
19
+ * the CSS bundle is stale or partially loaded the layout still works.
20
+ */
21
+ export function AdminShell({ sidebar, header, breadcrumbs, children, mobileSidebarOpen = false, onMobileSidebarClose, desktopBreakpoint = 768, }) {
22
+ const [isDesktop, setIsDesktop] = useState(false);
23
+ useEffect(() => {
24
+ if (typeof window === 'undefined')
25
+ return;
26
+ const mq = window.matchMedia(`(min-width: ${desktopBreakpoint}px)`);
27
+ const handler = () => setIsDesktop(mq.matches);
28
+ handler();
29
+ mq.addEventListener('change', handler);
30
+ return () => mq.removeEventListener('change', handler);
31
+ }, [desktopBreakpoint]);
32
+ return (_jsxs("div", { className: "bg-background text-foreground h-screen overflow-hidden", style: isDesktop
33
+ ? { display: 'grid', gridTemplateColumns: 'auto minmax(0, 1fr)' }
34
+ : { display: 'block', position: 'relative' }, children: [!isDesktop && mobileSidebarOpen && (_jsx("div", { "aria-hidden": true, className: "fixed inset-0 z-40 bg-black/30 backdrop-blur-sm", onClick: onMobileSidebarClose })), _jsx("div", { className: "z-50", style: isDesktop
35
+ ? {
36
+ gridColumn: '1 / 2',
37
+ height: '100vh',
38
+ overflow: 'hidden',
39
+ }
40
+ : {
41
+ position: 'fixed',
42
+ top: 0,
43
+ bottom: 0,
44
+ left: 0,
45
+ transform: mobileSidebarOpen ? 'translateX(0)' : 'translateX(-100%)',
46
+ transition: 'transform 300ms ease',
47
+ }, children: sidebar }), _jsxs("div", { className: "flex flex-col overflow-hidden", style: isDesktop
48
+ ? { gridColumn: '2 / 3', height: '100vh', minWidth: 0 }
49
+ : { height: '100vh', minWidth: 0 }, children: [header, breadcrumbs, _jsx("main", { className: "flex-1 overflow-y-auto", children: children })] })] }));
50
+ }
51
+ //# sourceMappingURL=AdminShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminShell.js","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AA0B3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,EACpB,iBAAiB,GAAG,GAAG,GACP;IAChB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,iBAAiB,KAAK,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,EAAE,CAAA;QACT,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,OAAO,CACL,eACE,SAAS,EAAC,wDAAwD,EAClE,KAAK,EACH,SAAS;YACP,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,qBAAqB,EAAE;YACjE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAG/C,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAClC,mCAEE,SAAS,EAAC,iDAAiD,EAC3D,OAAO,EAAE,oBAAoB,GAC7B,CACH,EAED,cACE,SAAS,EAAC,MAAM,EAChB,KAAK,EACH,SAAS;oBACP,CAAC,CAAC;wBACE,UAAU,EAAE,OAAO;wBACnB,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,QAAQ;qBACnB;oBACH,CAAC,CAAC;wBACE,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB;wBACpE,UAAU,EAAE,sBAAsB;qBACnC,YAGN,OAAO,GACJ,EAEN,eACE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EACH,SAAS;oBACP,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACvD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAGrC,MAAM,EACN,WAAW,EACZ,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAQ,IACtD,IACF,CACP,CAAA;AACH,CAAC"}