@actuate-media/cms-admin 0.1.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 (295) hide show
  1. package/dist/AdminRoot.d.ts +21 -0
  2. package/dist/AdminRoot.d.ts.map +1 -0
  3. package/dist/AdminRoot.js +136 -0
  4. package/dist/AdminRoot.js.map +1 -0
  5. package/dist/components/Breadcrumbs.d.ts +6 -0
  6. package/dist/components/Breadcrumbs.d.ts.map +1 -0
  7. package/dist/components/Breadcrumbs.js +52 -0
  8. package/dist/components/Breadcrumbs.js.map +1 -0
  9. package/dist/components/CommandPalette.d.ts +7 -0
  10. package/dist/components/CommandPalette.d.ts.map +1 -0
  11. package/dist/components/CommandPalette.js +152 -0
  12. package/dist/components/CommandPalette.js.map +1 -0
  13. package/dist/components/ErrorBoundary.d.ts +17 -0
  14. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  15. package/dist/components/ErrorBoundary.js +24 -0
  16. package/dist/components/ErrorBoundary.js.map +1 -0
  17. package/dist/components/FocalPointPicker.d.ts +9 -0
  18. package/dist/components/FocalPointPicker.d.ts.map +1 -0
  19. package/dist/components/FocalPointPicker.js +19 -0
  20. package/dist/components/FocalPointPicker.js.map +1 -0
  21. package/dist/components/FolderTree.d.ts +28 -0
  22. package/dist/components/FolderTree.d.ts.map +1 -0
  23. package/dist/components/FolderTree.js +198 -0
  24. package/dist/components/FolderTree.js.map +1 -0
  25. package/dist/components/LivePreview.d.ts +10 -0
  26. package/dist/components/LivePreview.d.ts.map +1 -0
  27. package/dist/components/LivePreview.js +62 -0
  28. package/dist/components/LivePreview.js.map +1 -0
  29. package/dist/components/LocaleProvider.d.ts +28 -0
  30. package/dist/components/LocaleProvider.d.ts.map +1 -0
  31. package/dist/components/LocaleProvider.js +29 -0
  32. package/dist/components/LocaleProvider.js.map +1 -0
  33. package/dist/components/LocaleSwitcher.d.ts +2 -0
  34. package/dist/components/LocaleSwitcher.d.ts.map +1 -0
  35. package/dist/components/LocaleSwitcher.js +13 -0
  36. package/dist/components/LocaleSwitcher.js.map +1 -0
  37. package/dist/components/MediaPickerModal.d.ts +8 -0
  38. package/dist/components/MediaPickerModal.d.ts.map +1 -0
  39. package/dist/components/MediaPickerModal.js +53 -0
  40. package/dist/components/MediaPickerModal.js.map +1 -0
  41. package/dist/components/PresenceIndicator.d.ts +7 -0
  42. package/dist/components/PresenceIndicator.d.ts.map +1 -0
  43. package/dist/components/PresenceIndicator.js +37 -0
  44. package/dist/components/PresenceIndicator.js.map +1 -0
  45. package/dist/components/SEOPanel.d.ts +26 -0
  46. package/dist/components/SEOPanel.d.ts.map +1 -0
  47. package/dist/components/SEOPanel.js +249 -0
  48. package/dist/components/SEOPanel.js.map +1 -0
  49. package/dist/components/ThemeProvider.d.ts +13 -0
  50. package/dist/components/ThemeProvider.d.ts.map +1 -0
  51. package/dist/components/ThemeProvider.js +62 -0
  52. package/dist/components/ThemeProvider.js.map +1 -0
  53. package/dist/components/TipTapEditor.d.ts +9 -0
  54. package/dist/components/TipTapEditor.d.ts.map +1 -0
  55. package/dist/components/TipTapEditor.js +167 -0
  56. package/dist/components/TipTapEditor.js.map +1 -0
  57. package/dist/components/VersionHistory.d.ts +9 -0
  58. package/dist/components/VersionHistory.d.ts.map +1 -0
  59. package/dist/components/VersionHistory.js +70 -0
  60. package/dist/components/VersionHistory.js.map +1 -0
  61. package/dist/components/ui/Avatar.d.ts +9 -0
  62. package/dist/components/ui/Avatar.d.ts.map +1 -0
  63. package/dist/components/ui/Avatar.js +21 -0
  64. package/dist/components/ui/Avatar.js.map +1 -0
  65. package/dist/components/ui/Badge.d.ts +5 -0
  66. package/dist/components/ui/Badge.d.ts.map +1 -0
  67. package/dist/components/ui/Badge.js +17 -0
  68. package/dist/components/ui/Badge.js.map +1 -0
  69. package/dist/components/ui/Button.d.ts +12 -0
  70. package/dist/components/ui/Button.d.ts.map +1 -0
  71. package/dist/components/ui/Button.js +17 -0
  72. package/dist/components/ui/Button.js.map +1 -0
  73. package/dist/components/ui/CommandPalette.d.ts +14 -0
  74. package/dist/components/ui/CommandPalette.d.ts.map +1 -0
  75. package/dist/components/ui/CommandPalette.js +52 -0
  76. package/dist/components/ui/CommandPalette.js.map +1 -0
  77. package/dist/components/ui/ConfirmDialog.d.ts +12 -0
  78. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -0
  79. package/dist/components/ui/ConfirmDialog.js +11 -0
  80. package/dist/components/ui/ConfirmDialog.js.map +1 -0
  81. package/dist/components/ui/DataTable.d.ts +30 -0
  82. package/dist/components/ui/DataTable.d.ts.map +1 -0
  83. package/dist/components/ui/DataTable.js +40 -0
  84. package/dist/components/ui/DataTable.js.map +1 -0
  85. package/dist/components/ui/EmptyState.d.ts +10 -0
  86. package/dist/components/ui/EmptyState.d.ts.map +1 -0
  87. package/dist/components/ui/EmptyState.js +6 -0
  88. package/dist/components/ui/EmptyState.js.map +1 -0
  89. package/dist/components/ui/Modal.d.ts +10 -0
  90. package/dist/components/ui/Modal.d.ts.map +1 -0
  91. package/dist/components/ui/Modal.js +19 -0
  92. package/dist/components/ui/Modal.js.map +1 -0
  93. package/dist/components/ui/Pagination.d.ts +9 -0
  94. package/dist/components/ui/Pagination.d.ts.map +1 -0
  95. package/dist/components/ui/Pagination.js +21 -0
  96. package/dist/components/ui/Pagination.js.map +1 -0
  97. package/dist/components/ui/SearchInput.d.ts +7 -0
  98. package/dist/components/ui/SearchInput.d.ts.map +1 -0
  99. package/dist/components/ui/SearchInput.js +6 -0
  100. package/dist/components/ui/SearchInput.js.map +1 -0
  101. package/dist/components/ui/Skeleton.d.ts +9 -0
  102. package/dist/components/ui/Skeleton.d.ts.map +1 -0
  103. package/dist/components/ui/Skeleton.js +11 -0
  104. package/dist/components/ui/Skeleton.js.map +1 -0
  105. package/dist/components/ui/Toast.d.ts +18 -0
  106. package/dist/components/ui/Toast.d.ts.map +1 -0
  107. package/dist/components/ui/Toast.js +29 -0
  108. package/dist/components/ui/Toast.js.map +1 -0
  109. package/dist/components/ui/index.d.ts +25 -0
  110. package/dist/components/ui/index.d.ts.map +1 -0
  111. package/dist/components/ui/index.js +13 -0
  112. package/dist/components/ui/index.js.map +1 -0
  113. package/dist/fields/ArrayField.d.ts +9 -0
  114. package/dist/fields/ArrayField.d.ts.map +1 -0
  115. package/dist/fields/ArrayField.js +21 -0
  116. package/dist/fields/ArrayField.js.map +1 -0
  117. package/dist/fields/BlockBuilderField.d.ts +16 -0
  118. package/dist/fields/BlockBuilderField.d.ts.map +1 -0
  119. package/dist/fields/BlockBuilderField.js +110 -0
  120. package/dist/fields/BlockBuilderField.js.map +1 -0
  121. package/dist/fields/DateField.d.ts +9 -0
  122. package/dist/fields/DateField.d.ts.map +1 -0
  123. package/dist/fields/DateField.js +6 -0
  124. package/dist/fields/DateField.js.map +1 -0
  125. package/dist/fields/FieldRenderer.d.ts +22 -0
  126. package/dist/fields/FieldRenderer.d.ts.map +1 -0
  127. package/dist/fields/FieldRenderer.js +38 -0
  128. package/dist/fields/FieldRenderer.js.map +1 -0
  129. package/dist/fields/GroupField.d.ts +8 -0
  130. package/dist/fields/GroupField.d.ts.map +1 -0
  131. package/dist/fields/GroupField.js +8 -0
  132. package/dist/fields/GroupField.js.map +1 -0
  133. package/dist/fields/MediaField.d.ts +13 -0
  134. package/dist/fields/MediaField.d.ts.map +1 -0
  135. package/dist/fields/MediaField.js +6 -0
  136. package/dist/fields/MediaField.js.map +1 -0
  137. package/dist/fields/NavBuilderField.d.ts +15 -0
  138. package/dist/fields/NavBuilderField.d.ts.map +1 -0
  139. package/dist/fields/NavBuilderField.js +19 -0
  140. package/dist/fields/NavBuilderField.js.map +1 -0
  141. package/dist/fields/NumberField.d.ts +12 -0
  142. package/dist/fields/NumberField.d.ts.map +1 -0
  143. package/dist/fields/NumberField.js +6 -0
  144. package/dist/fields/NumberField.js.map +1 -0
  145. package/dist/fields/RelationshipField.d.ts +13 -0
  146. package/dist/fields/RelationshipField.d.ts.map +1 -0
  147. package/dist/fields/RelationshipField.js +119 -0
  148. package/dist/fields/RelationshipField.js.map +1 -0
  149. package/dist/fields/RichTextField.d.ts +9 -0
  150. package/dist/fields/RichTextField.d.ts.map +1 -0
  151. package/dist/fields/RichTextField.js +7 -0
  152. package/dist/fields/RichTextField.js.map +1 -0
  153. package/dist/fields/SelectField.d.ts +11 -0
  154. package/dist/fields/SelectField.d.ts.map +1 -0
  155. package/dist/fields/SelectField.js +31 -0
  156. package/dist/fields/SelectField.js.map +1 -0
  157. package/dist/fields/SlugField.d.ts +10 -0
  158. package/dist/fields/SlugField.d.ts.map +1 -0
  159. package/dist/fields/SlugField.js +15 -0
  160. package/dist/fields/SlugField.js.map +1 -0
  161. package/dist/fields/TextField.d.ts +11 -0
  162. package/dist/fields/TextField.d.ts.map +1 -0
  163. package/dist/fields/TextField.js +8 -0
  164. package/dist/fields/TextField.js.map +1 -0
  165. package/dist/fields/ToggleField.d.ts +8 -0
  166. package/dist/fields/ToggleField.d.ts.map +1 -0
  167. package/dist/fields/ToggleField.js +6 -0
  168. package/dist/fields/ToggleField.js.map +1 -0
  169. package/dist/fields/block-types.d.ts +18 -0
  170. package/dist/fields/block-types.d.ts.map +1 -0
  171. package/dist/fields/block-types.js +88 -0
  172. package/dist/fields/block-types.js.map +1 -0
  173. package/dist/fields/index.d.ts +18 -0
  174. package/dist/fields/index.d.ts.map +1 -0
  175. package/dist/fields/index.js +16 -0
  176. package/dist/fields/index.js.map +1 -0
  177. package/dist/hooks/useContentLock.d.ts +12 -0
  178. package/dist/hooks/useContentLock.d.ts.map +1 -0
  179. package/dist/hooks/useContentLock.js +38 -0
  180. package/dist/hooks/useContentLock.js.map +1 -0
  181. package/dist/hooks/useDebounce.d.ts +2 -0
  182. package/dist/hooks/useDebounce.d.ts.map +1 -0
  183. package/dist/hooks/useDebounce.js +11 -0
  184. package/dist/hooks/useDebounce.js.map +1 -0
  185. package/dist/hooks/useKeyboardShortcuts.d.ts +6 -0
  186. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  187. package/dist/hooks/useKeyboardShortcuts.js +26 -0
  188. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  189. package/dist/index.d.ts +52 -0
  190. package/dist/index.d.ts.map +1 -0
  191. package/dist/index.js +39 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/layout/Header.d.ts +7 -0
  194. package/dist/layout/Header.d.ts.map +1 -0
  195. package/dist/layout/Header.js +18 -0
  196. package/dist/layout/Header.js.map +1 -0
  197. package/dist/layout/Layout.d.ts +10 -0
  198. package/dist/layout/Layout.d.ts.map +1 -0
  199. package/dist/layout/Layout.js +25 -0
  200. package/dist/layout/Layout.js.map +1 -0
  201. package/dist/layout/Sidebar.d.ts +9 -0
  202. package/dist/layout/Sidebar.d.ts.map +1 -0
  203. package/dist/layout/Sidebar.js +63 -0
  204. package/dist/layout/Sidebar.js.map +1 -0
  205. package/dist/lib/api.d.ts +8 -0
  206. package/dist/lib/api.d.ts.map +1 -0
  207. package/dist/lib/api.js +59 -0
  208. package/dist/lib/api.js.map +1 -0
  209. package/dist/lib/search.d.ts +11 -0
  210. package/dist/lib/search.d.ts.map +1 -0
  211. package/dist/lib/search.js +46 -0
  212. package/dist/lib/search.js.map +1 -0
  213. package/dist/lib/useApiData.d.ts +8 -0
  214. package/dist/lib/useApiData.d.ts.map +1 -0
  215. package/dist/lib/useApiData.js +36 -0
  216. package/dist/lib/useApiData.js.map +1 -0
  217. package/dist/lib/utils.d.ts +3 -0
  218. package/dist/lib/utils.d.ts.map +1 -0
  219. package/dist/lib/utils.js +6 -0
  220. package/dist/lib/utils.js.map +1 -0
  221. package/dist/router/index.d.ts +10 -0
  222. package/dist/router/index.d.ts.map +1 -0
  223. package/dist/router/index.js +61 -0
  224. package/dist/router/index.js.map +1 -0
  225. package/dist/views/CollectionList.d.ts +7 -0
  226. package/dist/views/CollectionList.d.ts.map +1 -0
  227. package/dist/views/CollectionList.js +107 -0
  228. package/dist/views/CollectionList.js.map +1 -0
  229. package/dist/views/Dashboard.d.ts +5 -0
  230. package/dist/views/Dashboard.d.ts.map +1 -0
  231. package/dist/views/Dashboard.js +17 -0
  232. package/dist/views/Dashboard.js.map +1 -0
  233. package/dist/views/DocumentEdit.d.ts +8 -0
  234. package/dist/views/DocumentEdit.d.ts.map +1 -0
  235. package/dist/views/DocumentEdit.js +210 -0
  236. package/dist/views/DocumentEdit.js.map +1 -0
  237. package/dist/views/FormEditor.d.ts +6 -0
  238. package/dist/views/FormEditor.d.ts.map +1 -0
  239. package/dist/views/FormEditor.js +126 -0
  240. package/dist/views/FormEditor.js.map +1 -0
  241. package/dist/views/FormSubmissions.d.ts +6 -0
  242. package/dist/views/FormSubmissions.d.ts.map +1 -0
  243. package/dist/views/FormSubmissions.js +88 -0
  244. package/dist/views/FormSubmissions.js.map +1 -0
  245. package/dist/views/Forms.d.ts +5 -0
  246. package/dist/views/Forms.d.ts.map +1 -0
  247. package/dist/views/Forms.js +24 -0
  248. package/dist/views/Forms.js.map +1 -0
  249. package/dist/views/Login.d.ts +10 -0
  250. package/dist/views/Login.d.ts.map +1 -0
  251. package/dist/views/Login.js +83 -0
  252. package/dist/views/Login.js.map +1 -0
  253. package/dist/views/MediaBrowser.d.ts +5 -0
  254. package/dist/views/MediaBrowser.d.ts.map +1 -0
  255. package/dist/views/MediaBrowser.js +245 -0
  256. package/dist/views/MediaBrowser.js.map +1 -0
  257. package/dist/views/PageEditor.d.ts +6 -0
  258. package/dist/views/PageEditor.d.ts.map +1 -0
  259. package/dist/views/PageEditor.js +74 -0
  260. package/dist/views/PageEditor.js.map +1 -0
  261. package/dist/views/Pages.d.ts +5 -0
  262. package/dist/views/Pages.d.ts.map +1 -0
  263. package/dist/views/Pages.js +127 -0
  264. package/dist/views/Pages.js.map +1 -0
  265. package/dist/views/PostEditor.d.ts +6 -0
  266. package/dist/views/PostEditor.d.ts.map +1 -0
  267. package/dist/views/PostEditor.js +79 -0
  268. package/dist/views/PostEditor.js.map +1 -0
  269. package/dist/views/Posts.d.ts +5 -0
  270. package/dist/views/Posts.d.ts.map +1 -0
  271. package/dist/views/Posts.js +67 -0
  272. package/dist/views/Posts.js.map +1 -0
  273. package/dist/views/Redirects.d.ts +5 -0
  274. package/dist/views/Redirects.d.ts.map +1 -0
  275. package/dist/views/Redirects.js +79 -0
  276. package/dist/views/Redirects.js.map +1 -0
  277. package/dist/views/SEO.d.ts +6 -0
  278. package/dist/views/SEO.d.ts.map +1 -0
  279. package/dist/views/SEO.js +120 -0
  280. package/dist/views/SEO.js.map +1 -0
  281. package/dist/views/Settings.d.ts +5 -0
  282. package/dist/views/Settings.d.ts.map +1 -0
  283. package/dist/views/Settings.js +95 -0
  284. package/dist/views/Settings.js.map +1 -0
  285. package/dist/views/SetupWizard.d.ts +13 -0
  286. package/dist/views/SetupWizard.d.ts.map +1 -0
  287. package/dist/views/SetupWizard.js +68 -0
  288. package/dist/views/SetupWizard.js.map +1 -0
  289. package/dist/views/Users.d.ts +5 -0
  290. package/dist/views/Users.d.ts.map +1 -0
  291. package/dist/views/Users.js +69 -0
  292. package/dist/views/Users.js.map +1 -0
  293. package/package.json +71 -0
  294. package/src/styles/tailwind.css +2 -0
  295. package/src/styles/theme.css +175 -0
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function Skeleton({ variant = 'text', lines = 3, className = '' }) {
3
+ if (variant === 'card') {
4
+ return (_jsxs("div", { className: `animate-pulse rounded-lg border border-[var(--border)] p-5 ${className}`, children: [_jsx("div", { className: "mb-3 h-4 w-1/3 rounded bg-[var(--muted)]" }), _jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "h-3 w-full rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-3 w-2/3 rounded bg-[var(--muted)]" })] })] }));
5
+ }
6
+ if (variant === 'table-row') {
7
+ return (_jsx("div", { className: `animate-pulse ${className}`, children: Array.from({ length: lines }, (_, i) => (_jsxs("div", { className: "flex gap-4 border-b border-[var(--border)] px-4 py-3", children: [_jsx("div", { className: "h-4 w-8 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 flex-1 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 w-20 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 w-24 rounded bg-[var(--muted)]" })] }, i))) }));
8
+ }
9
+ return (_jsx("div", { className: `animate-pulse space-y-2 ${className}`, children: Array.from({ length: lines }, (_, i) => (_jsx("div", { className: "h-3 rounded bg-[var(--muted)]", style: { width: `${Math.max(40, 100 - i * 15)}%` } }, i))) }));
10
+ }
11
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../../../src/components/ui/Skeleton.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,EAAiB;IACrF,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CACL,eAAK,SAAS,EAAE,8DAA8D,SAAS,EAAE,aACvF,cAAK,SAAS,EAAC,0CAA0C,GAAG,EAC5D,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,sCAAsC,GAAG,EACxD,cAAK,SAAS,EAAC,qCAAqC,GAAG,IACnD,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,CACL,cAAK,SAAS,EAAE,iBAAiB,SAAS,EAAE,YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,eAAa,SAAS,EAAC,sDAAsD,aAC3E,cAAK,SAAS,EAAC,mCAAmC,GAAG,EACrD,cAAK,SAAS,EAAC,sCAAsC,GAAG,EACxD,cAAK,SAAS,EAAC,oCAAoC,GAAG,EACtD,cAAK,SAAS,EAAC,oCAAoC,GAAG,KAJ9C,CAAC,CAKL,CACP,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAE,2BAA2B,SAAS,EAAE,YACnD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,cAEE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAF7C,CAAC,CAGN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ type ToastType = 'success' | 'error' | 'warning' | 'info';
2
+ interface Toast {
3
+ id: string;
4
+ type: ToastType;
5
+ message: string;
6
+ }
7
+ export declare function useToast(): {
8
+ toasts: Toast[];
9
+ addToast: (type: ToastType, message: string) => void;
10
+ dismissToast: (id: string) => void;
11
+ };
12
+ export interface ToastContainerProps {
13
+ toasts: Toast[];
14
+ onDismiss: (id: string) => void;
15
+ }
16
+ export declare function ToastContainer({ toasts, onDismiss }: ToastContainerProps): import("react/jsx-runtime").JSX.Element | null;
17
+ export {};
18
+ //# sourceMappingURL=Toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAIA,KAAK,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,QAAQ;;qBAGc,SAAS,WAAW,MAAM;uBAQxB,MAAM;EAK7C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,kDAuBxE"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback } from 'react';
4
+ const typeClasses = {
5
+ success: 'border-emerald-500 bg-emerald-50 text-emerald-900 dark:bg-emerald-900/20 dark:text-emerald-300',
6
+ error: 'border-red-500 bg-red-50 text-red-900 dark:bg-red-900/20 dark:text-red-300',
7
+ warning: 'border-amber-500 bg-amber-50 text-amber-900 dark:bg-amber-900/20 dark:text-amber-300',
8
+ info: 'border-blue-500 bg-blue-50 text-blue-900 dark:bg-blue-900/20 dark:text-blue-300',
9
+ };
10
+ export function useToast() {
11
+ const [toasts, setToasts] = useState([]);
12
+ const addToast = useCallback((type, message) => {
13
+ const id = crypto.randomUUID();
14
+ setToasts((prev) => [...prev, { id, type, message }]);
15
+ setTimeout(() => {
16
+ setToasts((prev) => prev.filter((t) => t.id !== id));
17
+ }, 5000);
18
+ }, []);
19
+ const dismissToast = useCallback((id) => {
20
+ setToasts((prev) => prev.filter((t) => t.id !== id));
21
+ }, []);
22
+ return { toasts, addToast, dismissToast };
23
+ }
24
+ export function ToastContainer({ toasts, onDismiss }) {
25
+ if (toasts.length === 0)
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))) }));
28
+ }
29
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAU9C,MAAM,WAAW,GAA8B;IAC7C,OAAO,EAAE,gGAAgG;IACzG,KAAK,EAAE,4EAA4E;IACnF,OAAO,EAAE,sFAAsF;IAC/F,IAAI,EAAE,iFAAiF;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAe,EAAE,OAAe,EAAE,EAAE;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAuB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,cAAK,SAAS,EAAC,oDAAoD,YAChE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,eAEE,SAAS,EAAE,qEAAqE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAEzG,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,CAAC,OAAO,GAAK,EACjD,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,SAAS,EAAC,uCAAuC,YAEjD,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,sBAAsB,GAAG,GAC1E,GACC,KAXJ,KAAK,CAAC,EAAE,CAYT,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ export { Button } from './Button';
2
+ export type { ButtonProps } from './Button';
3
+ export { Badge } from './Badge';
4
+ export type { BadgeProps } from './Badge';
5
+ export { Avatar } from './Avatar';
6
+ export type { AvatarProps } from './Avatar';
7
+ export { EmptyState } from './EmptyState';
8
+ export type { EmptyStateProps } from './EmptyState';
9
+ export { Skeleton } from './Skeleton';
10
+ export type { SkeletonProps } from './Skeleton';
11
+ export { useToast, ToastContainer } from './Toast';
12
+ export type { ToastContainerProps } from './Toast';
13
+ export { Modal } from './Modal';
14
+ export type { ModalProps } from './Modal';
15
+ export { ConfirmDialog } from './ConfirmDialog';
16
+ export type { ConfirmDialogProps } from './ConfirmDialog';
17
+ export { DataTable } from './DataTable';
18
+ export type { DataTableProps } from './DataTable';
19
+ export { Pagination } from './Pagination';
20
+ export type { PaginationProps } from './Pagination';
21
+ export { SearchInput } from './SearchInput';
22
+ export type { SearchInputProps } from './SearchInput';
23
+ export { CommandPalette } from './CommandPalette';
24
+ export type { CommandPaletteProps } from './CommandPalette';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { Button } from './Button';
2
+ export { Badge } from './Badge';
3
+ export { Avatar } from './Avatar';
4
+ export { EmptyState } from './EmptyState';
5
+ export { Skeleton } from './Skeleton';
6
+ export { useToast, ToastContainer } from './Toast';
7
+ export { Modal } from './Modal';
8
+ export { ConfirmDialog } from './ConfirmDialog';
9
+ export { DataTable } from './DataTable';
10
+ export { Pagination } from './Pagination';
11
+ export { SearchInput } from './SearchInput';
12
+ export { CommandPalette } from './CommandPalette';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface ArrayFieldProps {
2
+ label: string;
3
+ value?: any[];
4
+ onChange: (value: any[]) => void;
5
+ fields?: any[];
6
+ helpText?: string;
7
+ }
8
+ export declare function ArrayField({ label, value, onChange, helpText }: ArrayFieldProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=ArrayField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../src/fields/ArrayField.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CA+EpF"}
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from '../components/ui/Button';
4
+ export function ArrayField({ label, value = [], onChange, helpText }) {
5
+ function addItem() {
6
+ onChange([...value, { id: crypto.randomUUID(), data: {} }]);
7
+ }
8
+ function removeItem(index) {
9
+ onChange(value.filter((_, i) => i !== index));
10
+ }
11
+ function moveItem(from, to) {
12
+ if (to < 0 || to >= value.length)
13
+ return;
14
+ const next = [...value];
15
+ const [moved] = next.splice(from, 1);
16
+ next.splice(to, 0, moved);
17
+ onChange(next);
18
+ }
19
+ return (_jsxs("div", { children: [_jsx("label", { className: "mb-2 block text-sm font-medium", children: label }), _jsx("div", { className: "space-y-2", children: value.map((item, index) => (_jsxs("div", { className: "flex items-center gap-2 rounded-md border border-[var(--border)] bg-[var(--card)] p-3", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("button", { type: "button", onClick: () => moveItem(index, index - 1), disabled: index === 0, className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)] disabled:opacity-30", "aria-label": "Move up", children: _jsx("svg", { className: "h-3 w-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 15l7-7 7 7" }) }) }), _jsx("button", { type: "button", onClick: () => moveItem(index, index + 1), disabled: index === value.length - 1, className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)] disabled:opacity-30", "aria-label": "Move down", children: _jsx("svg", { className: "h-3 w-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) })] }), _jsxs("div", { className: "flex-1 text-sm text-[var(--muted-foreground)]", children: ["Item ", index + 1] }), _jsx("button", { type: "button", onClick: () => removeItem(index), className: "rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--destructive)]", "aria-label": "Remove item", 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: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) }) })] }, item.id ?? index))) }), _jsx(Button, { variant: "secondary", size: "sm", onClick: addItem, className: "mt-2", children: "Add Item" }), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
20
+ }
21
+ //# sourceMappingURL=ArrayField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayField.js","sourceRoot":"","sources":["../../src/fields/ArrayField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type BlockTypeDefinition } from './block-types.js';
2
+ interface BlockValue {
3
+ id: string;
4
+ type: string;
5
+ data: Record<string, unknown>;
6
+ }
7
+ export interface BlockBuilderFieldProps {
8
+ label?: string;
9
+ value?: BlockValue[];
10
+ onChange?: (value: BlockValue[]) => void;
11
+ blocks?: BlockTypeDefinition[];
12
+ helpText?: string;
13
+ }
14
+ export declare function BlockBuilderField({ label, value, onChange, blocks: customBlocks, helpText, }: BlockBuilderFieldProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=BlockBuilderField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockBuilderField.d.ts","sourceRoot":"","sources":["../../src/fields/BlockBuilderField.tsx"],"names":[],"mappings":"AAkCA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAW3E,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyLD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAU,EACV,QAAQ,EACR,MAAM,EAAE,YAAY,EACpB,QAAQ,GACT,EAAE,sBAAsB,2CA4KxB"}
@@ -0,0 +1,110 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback, useMemo } from 'react';
4
+ import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
5
+ import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy, useSortable, arrayMove, } from '@dnd-kit/sortable';
6
+ import { CSS } from '@dnd-kit/utilities';
7
+ import { Plus, GripVertical, Trash2, ChevronDown, ChevronRight, Layout, Megaphone, Columns3, Image, Quote, Play, X, } from 'lucide-react';
8
+ import { PRESET_BLOCKS } from './block-types.js';
9
+ const BLOCK_ICONS = {
10
+ layout: Layout,
11
+ megaphone: Megaphone,
12
+ columns: Columns3,
13
+ image: Image,
14
+ quote: Quote,
15
+ play: Play,
16
+ };
17
+ function BlockField({ field, value, onChange }) {
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)))] })] }));
20
+ }
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)]" })] }));
23
+ }
24
+ if (field.type === 'media') {
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
+ }
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)]" })] }));
28
+ }
29
+ function SortableBlock({ block, blockDef, expanded, onToggle, onRemove, onFieldChange, }) {
30
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: block.id });
31
+ const style = {
32
+ transform: CSS.Transform.toString(transform),
33
+ transition,
34
+ opacity: isDragging ? 0.5 : 1,
35
+ zIndex: isDragging ? 10 : undefined,
36
+ };
37
+ const IconComponent = blockDef ? BLOCK_ICONS[blockDef.icon] : undefined;
38
+ return (_jsxs("div", { ref: setNodeRef, style: style, className: "rounded-md border border-[var(--border)] bg-[var(--card)]", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--border)] px-3 py-2", children: [_jsx("button", { type: "button", className: "cursor-grab touch-none text-[var(--muted-foreground)] hover:text-[var(--foreground)]", ...attributes, ...listeners, children: _jsx(GripVertical, { className: "h-4 w-4" }) }), IconComponent && (_jsx(IconComponent, { className: "h-4 w-4 text-[var(--muted-foreground)]" })), _jsxs("button", { type: "button", onClick: onToggle, className: "flex flex-1 items-center gap-1.5 text-sm font-medium", children: [blockDef?.label ?? block.type, expanded ? (_jsx(ChevronDown, { className: "h-3.5 w-3.5 text-[var(--muted-foreground)]" })) : (_jsx(ChevronRight, { className: "h-3.5 w-3.5 text-[var(--muted-foreground)]" }))] }), _jsx("button", { type: "button", onClick: onRemove, className: "text-[var(--muted-foreground)] hover:text-[var(--destructive)]", "aria-label": "Remove block", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }), expanded && blockDef && (_jsx("div", { className: "space-y-4 p-4", children: blockDef.fields.map((field) => (_jsx(BlockField, { field: field, value: block.data[field.name], onChange: (val) => onFieldChange(field.name, val) }, field.name))) })), expanded && !blockDef && (_jsxs("div", { className: "p-4 text-sm text-[var(--muted-foreground)]", children: ["Unknown block type: ", _jsx("code", { children: block.type })] }))] }));
39
+ }
40
+ export function BlockBuilderField({ label, value = [], onChange, blocks: customBlocks, helpText, }) {
41
+ const [expandedIds, setExpandedIds] = useState(new Set());
42
+ const [pickerOpen, setPickerOpen] = useState(false);
43
+ const allBlockTypes = useMemo(() => {
44
+ if (!customBlocks?.length)
45
+ return PRESET_BLOCKS;
46
+ const customTypes = new Set(customBlocks.map((b) => b.type));
47
+ const filtered = PRESET_BLOCKS.filter((b) => !customTypes.has(b.type));
48
+ return [...filtered, ...customBlocks];
49
+ }, [customBlocks]);
50
+ const blockDefMap = useMemo(() => {
51
+ const map = new Map();
52
+ for (const def of allBlockTypes) {
53
+ map.set(def.type, def);
54
+ }
55
+ return map;
56
+ }, [allBlockTypes]);
57
+ const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
58
+ const handleDragEnd = useCallback((event) => {
59
+ const { active, over } = event;
60
+ if (!over || active.id === over.id)
61
+ return;
62
+ const oldIndex = value.findIndex((b) => b.id === active.id);
63
+ const newIndex = value.findIndex((b) => b.id === over.id);
64
+ if (oldIndex === -1 || newIndex === -1)
65
+ return;
66
+ onChange?.(arrayMove(value, oldIndex, newIndex));
67
+ }, [value, onChange]);
68
+ function addBlock(type) {
69
+ const newBlock = {
70
+ id: crypto.randomUUID(),
71
+ type,
72
+ data: {},
73
+ };
74
+ const newId = newBlock.id;
75
+ onChange?.([...value, newBlock]);
76
+ setExpandedIds((prev) => new Set(prev).add(newId));
77
+ setPickerOpen(false);
78
+ }
79
+ function removeBlock(id) {
80
+ onChange?.(value.filter((b) => b.id !== id));
81
+ setExpandedIds((prev) => {
82
+ const next = new Set(prev);
83
+ next.delete(id);
84
+ return next;
85
+ });
86
+ }
87
+ function toggleExpand(id) {
88
+ setExpandedIds((prev) => {
89
+ const next = new Set(prev);
90
+ if (next.has(id)) {
91
+ next.delete(id);
92
+ }
93
+ else {
94
+ next.add(id);
95
+ }
96
+ return next;
97
+ });
98
+ }
99
+ function updateBlockField(blockId, fieldName, fieldValue) {
100
+ onChange?.(value.map((b) => b.id === blockId
101
+ ? { ...b, data: { ...b.data, [fieldName]: fieldValue } }
102
+ : b));
103
+ }
104
+ const blockIds = value.map((b) => b.id);
105
+ return (_jsxs("div", { children: [label && (_jsx("label", { className: "mb-2 block text-sm font-medium", children: label })), _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: blockIds, strategy: verticalListSortingStrategy, children: _jsx("div", { className: "space-y-2", children: value.map((block) => (_jsx(SortableBlock, { block: block, blockDef: blockDefMap.get(block.type), expanded: expandedIds.has(block.id), onToggle: () => toggleExpand(block.id), onRemove: () => removeBlock(block.id), onFieldChange: (name, val) => updateBlockField(block.id, name, val) }, block.id))) }) }) }), value.length === 0 && (_jsx("div", { className: "rounded-md border border-dashed border-[var(--border)] px-4 py-8 text-center text-sm text-[var(--muted-foreground)]", children: "No blocks added yet. Click \u201CAdd Block\u201D to get started." })), _jsx("div", { className: "relative mt-3", children: _jsxs("button", { type: "button", onClick: () => setPickerOpen((prev) => !prev), className: "inline-flex items-center gap-1.5 rounded-md border border-dashed border-[var(--border)] px-3 py-2 text-sm text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)]", children: [_jsx(Plus, { className: "h-4 w-4" }), "Add Block"] }) }), pickerOpen && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "w-full max-w-2xl rounded-lg border border-[var(--border)] bg-[var(--card)] shadow-xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-[var(--border)] px-5 py-4", children: [_jsx("h3", { className: "text-base font-semibold", children: "Add Block" }), _jsx("button", { type: "button", onClick: () => setPickerOpen(false), className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)]", "aria-label": "Close", children: _jsx(X, { className: "h-5 w-5" }) })] }), _jsx("div", { className: "grid grid-cols-2 gap-3 p-5 sm:grid-cols-3", children: allBlockTypes.map((bt) => {
106
+ const Icon = BLOCK_ICONS[bt.icon];
107
+ return (_jsxs("button", { type: "button", onClick: () => addBlock(bt.type), className: "flex flex-col items-start gap-1.5 rounded-md border border-[var(--border)] p-3 text-left transition-colors hover:border-[var(--primary)] hover:bg-[var(--accent)]", children: [Icon && _jsx(Icon, { className: "h-5 w-5 text-[var(--primary)]" }), _jsx("span", { className: "text-sm font-medium", children: bt.label }), _jsx("span", { className: "text-xs leading-snug text-[var(--muted-foreground)]", children: bt.description })] }, bt.type));
108
+ }) })] }) })), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
109
+ }
110
+ //# sourceMappingURL=BlockBuilderField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockBuilderField.js","sourceRoot":"","sources":["../../src/fields/BlockBuilderField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface DateFieldProps {
2
+ label: string;
3
+ value?: string;
4
+ onChange: (value: string) => void;
5
+ required?: boolean;
6
+ helpText?: string;
7
+ }
8
+ export declare function DateField({ label, value, onChange, required, helpText }: DateFieldProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=DateField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateField.d.ts","sourceRoot":"","sources":["../../src/fields/DateField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA8B5F"}
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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 }))] }));
5
+ }
6
+ //# sourceMappingURL=DateField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateField.js","sourceRoot":"","sources":["../../src/fields/DateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAUb,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAkB;IAC3F,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EACR,eAAK,SAAS,EAAC,UAAU,aACvB,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,mJAAmJ,GAC7J,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0EAA0E,gBACzE,eAAe,YAE1B,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,wFAAwF,GAAG,GAC5I,GACC,IACL,EACL,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface FieldDefinition {
2
+ name: string;
3
+ type: string;
4
+ label: string;
5
+ required?: boolean;
6
+ maxLength?: number;
7
+ helpText?: string;
8
+ options?: string[];
9
+ min?: number;
10
+ max?: number;
11
+ from?: string;
12
+ multi?: boolean;
13
+ fields?: FieldDefinition[];
14
+ blocks?: any[];
15
+ }
16
+ export interface FieldRendererProps {
17
+ field: FieldDefinition;
18
+ value: any;
19
+ onChange: (value: any) => void;
20
+ }
21
+ export declare function FieldRenderer({ field, value, onChange }: FieldRendererProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=FieldRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldRenderer.d.ts","sourceRoot":"","sources":["../../src/fields/FieldRenderer.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAkBD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CA6B3E"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { TextField } from './TextField';
4
+ import { RichTextField } from './RichTextField';
5
+ import { SlugField } from './SlugField';
6
+ import { SelectField } from './SelectField';
7
+ import { MediaField } from './MediaField';
8
+ import { RelationshipField } from './RelationshipField';
9
+ import { DateField } from './DateField';
10
+ import { ToggleField } from './ToggleField';
11
+ import { ArrayField } from './ArrayField';
12
+ import { BlockBuilderField } from './BlockBuilderField';
13
+ import { GroupField } from './GroupField';
14
+ import { NavBuilderField } from './NavBuilderField';
15
+ import { NumberField } from './NumberField';
16
+ const FIELD_MAP = {
17
+ text: TextField,
18
+ richText: RichTextField,
19
+ slug: SlugField,
20
+ select: SelectField,
21
+ media: MediaField,
22
+ relationship: RelationshipField,
23
+ date: DateField,
24
+ toggle: ToggleField,
25
+ array: ArrayField,
26
+ blocks: BlockBuilderField,
27
+ group: GroupField,
28
+ nav: NavBuilderField,
29
+ number: NumberField,
30
+ };
31
+ export function FieldRenderer({ field, value, onChange }) {
32
+ const Component = FIELD_MAP[field.type];
33
+ if (!Component) {
34
+ return (_jsxs("div", { className: "rounded-md border border-[var(--destructive)] bg-red-50 p-3 text-sm text-[var(--destructive)]", children: ["Unknown field type: ", _jsx("code", { children: field.type })] }));
35
+ }
36
+ return (_jsx(Component, { label: field.label, value: value, onChange: onChange, required: field.required, maxLength: field.maxLength, helpText: field.helpText, options: field.options, min: field.min, max: field.max, from: field.from, multi: field.multi, fields: field.fields, blocks: field.blocks, name: field.name }));
37
+ }
38
+ //# sourceMappingURL=FieldRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldRenderer.js","sourceRoot":"","sources":["../../src/fields/FieldRenderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAwB5C,MAAM,SAAS,GAA6C;IAC1D,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,YAAY,EAAE,iBAAiB;IAC/B,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,eAAe;IACpB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAsB;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,eAAK,SAAS,EAAC,+FAA+F,qCACxF,yBAAO,KAAK,CAAC,IAAI,GAAQ,IACzC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,KAAK,CAAC,IAAI,GAChB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface GroupFieldProps {
3
+ label: string;
4
+ children?: ReactNode;
5
+ defaultOpen?: boolean;
6
+ }
7
+ export declare function GroupField({ label, children, defaultOpen }: GroupFieldProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=GroupField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupField.d.ts","sourceRoot":"","sources":["../../src/fields/GroupField.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAkB,EAAE,EAAE,eAAe,2CA8BlF"}
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ export function GroupField({ label, children, defaultOpen = true }) {
5
+ const [open, setOpen] = useState(defaultOpen);
6
+ return (_jsxs("div", { className: "rounded-md border border-[var(--border)]", children: [_jsxs("button", { type: "button", onClick: () => setOpen((o) => !o), className: "flex w-full items-center justify-between px-4 py-3 text-sm font-medium hover:bg-[var(--accent)]", children: [_jsx("span", { children: label }), _jsx("svg", { className: `h-4 w-4 text-[var(--muted-foreground)] transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) })] }), open && (_jsx("div", { className: "border-t border-[var(--border)] p-4", children: children ?? (_jsx("p", { className: "text-sm text-[var(--muted-foreground)]", children: "Group fields area" })) }))] }));
7
+ }
8
+ //# sourceMappingURL=GroupField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupField.js","sourceRoot":"","sources":["../../src/fields/GroupField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAQjD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAmB;IACjF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAC,0CAA0C,aACvD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACjC,SAAS,EAAC,iGAAiG,aAE3G,yBAAO,KAAK,GAAQ,EACpB,cACE,SAAS,EAAE,+DAA+D,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EACpG,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,YAEd,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,gBAAgB,GAAG,GACpE,IACC,EACR,IAAI,IAAI,CACP,cAAK,SAAS,EAAC,qCAAqC,YACjD,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,wCAAwC,kCAAsB,CAC5E,GACG,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface MediaFieldProps {
2
+ label: string;
3
+ value?: {
4
+ id: string;
5
+ filename: string;
6
+ url: string;
7
+ } | null;
8
+ onChange: (value: any) => void;
9
+ required?: boolean;
10
+ helpText?: string;
11
+ }
12
+ export declare function MediaField({ label, value, onChange, required, helpText }: MediaFieldProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=MediaField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAqCzF"}
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ export function MediaField({ 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: "*" })] }), value ? (_jsxs("div", { className: "flex items-center gap-3 rounded-md border border-[var(--border)] p-3", children: [_jsx("div", { className: "h-16 w-16 shrink-0 rounded-md bg-[var(--muted)]" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-medium", children: value.filename }), _jsx("button", { type: "button", onClick: () => onChange(null), className: "mt-1 text-xs text-[var(--destructive)] hover:underline", children: "Remove" })] })] })) : (_jsx("button", { type: "button", onClick: () => onChange({ id: 'mock', filename: 'placeholder.jpg', url: '' }), className: "flex w-full items-center justify-center rounded-md border-2 border-dashed border-[var(--border)] p-6 text-sm text-[var(--muted-foreground)] hover:border-[var(--primary)] hover:text-[var(--foreground)]", children: _jsx("span", { children: "Click to select media" }) })), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
5
+ }
6
+ //# sourceMappingURL=MediaField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaField.js","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAUb,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAmB;IACxF,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EAEP,KAAK,CAAC,CAAC,CAAC,CACP,eAAK,SAAS,EAAC,sEAAsE,aACnF,cAAK,SAAS,EAAC,iDAAiD,GAAG,EACnE,eAAK,SAAS,EAAC,QAAQ,aACrB,YAAG,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,QAAQ,GAAK,EACvD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAC,wDAAwD,uBAG3D,IACL,IACF,CACP,CAAC,CAAC,CAAC,CACF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAC7E,SAAS,EAAC,0MAA0M,YAEpN,mDAAkC,GAC3B,CACV,EAEA,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ interface NavNode {
2
+ id: string;
3
+ label: string;
4
+ url: string;
5
+ children: NavNode[];
6
+ }
7
+ export interface NavBuilderFieldProps {
8
+ label: string;
9
+ value?: NavNode[];
10
+ onChange: (value: NavNode[]) => void;
11
+ helpText?: string;
12
+ }
13
+ export declare function NavBuilderField({ label, value, onChange, helpText }: NavBuilderFieldProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=NavBuilderField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavBuilderField.d.ts","sourceRoot":"","sources":["../../src/fields/NavBuilderField.tsx"],"names":[],"mappings":"AAKA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA0D9F"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from '../components/ui/Button';
4
+ export function NavBuilderField({ label, value = [], onChange, helpText }) {
5
+ function addItem() {
6
+ onChange([
7
+ ...value,
8
+ { id: crypto.randomUUID(), label: 'New Item', url: '/', children: [] },
9
+ ]);
10
+ }
11
+ function removeItem(id) {
12
+ onChange(value.filter((n) => n.id !== id));
13
+ }
14
+ function renderNode(node, depth) {
15
+ return (_jsxs("div", { className: "rounded-md border border-[var(--border)] bg-[var(--card)] p-3", style: { marginLeft: depth * 24 }, children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("svg", { className: "h-4 w-4 text-[var(--muted-foreground)]", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }), _jsx("span", { className: "font-medium", children: node.label }), _jsx("span", { className: "text-xs text-[var(--muted-foreground)]", children: node.url })] }), _jsx("button", { type: "button", onClick: () => removeItem(node.id), className: "text-xs text-[var(--muted-foreground)] hover:text-[var(--destructive)]", children: "Remove" })] }), node.children.length > 0 && (_jsx("div", { className: "mt-2 space-y-2", children: node.children.map((child) => renderNode(child, depth + 1)) }))] }, node.id));
16
+ }
17
+ return (_jsxs("div", { children: [_jsx("label", { className: "mb-2 block text-sm font-medium", children: label }), _jsx("div", { className: "space-y-2", children: value.map((node) => renderNode(node, 0)) }), _jsx(Button, { variant: "secondary", size: "sm", onClick: addItem, className: "mt-2", children: "Add Nav Item" }), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
18
+ }
19
+ //# sourceMappingURL=NavBuilderField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavBuilderField.js","sourceRoot":"","sources":["../../src/fields/NavBuilderField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAgBjD,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IAC7F,SAAS,OAAO;QACd,QAAQ,CAAC;YACP,GAAG,KAAK;YACR,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,SAAS,UAAU,CAAC,EAAU;QAC5B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,UAAU,CAAC,IAAa,EAAE,KAAa;QAC9C,OAAO,CACL,eAEE,SAAS,EAAC,+DAA+D,EACzE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,EAAE,aAEjC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,wCAAwC,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC1H,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,yBAAyB,GAAG,GAC7E,EACN,eAAM,SAAS,EAAC,aAAa,YAAE,IAAI,CAAC,KAAK,GAAQ,EACjD,eAAM,SAAS,EAAC,wCAAwC,YAAE,IAAI,CAAC,GAAG,GAAQ,IACtE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,SAAS,EAAC,wEAAwE,uBAG3E,IACL,EACL,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,cAAK,SAAS,EAAC,gBAAgB,YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GACvD,CACP,KAxBI,IAAI,CAAC,EAAE,CAyBR,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,0BACE,gBAAO,SAAS,EAAC,gCAAgC,YAAE,KAAK,GAAS,EACjE,cAAK,SAAS,EAAC,WAAW,YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GACrC,EACN,KAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,MAAM,6BAE/D,EACR,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface NumberFieldProps {
2
+ label: string;
3
+ value?: number;
4
+ onChange: (value: number) => void;
5
+ min?: number;
6
+ max?: number;
7
+ required?: boolean;
8
+ helpText?: string;
9
+ error?: string;
10
+ }
11
+ export declare function NumberField({ label, value, onChange, min, max, required, helpText, error }: NumberFieldProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=NumberField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../src/fields/NumberField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,gBAAgB,2CA+B5G"}
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ export function NumberField({ label, value, onChange, min, max, required, helpText, error }) {
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: "*" })] }), _jsx("input", { type: "number", value: value ?? '', onChange: (e) => onChange(Number(e.target.value)), min: min, max: max, required: required, className: `w-full rounded-md border bg-[var(--input-background)] px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)] ${error ? 'border-[var(--destructive)]' : 'border-[var(--border)]'}` }), min !== undefined && max !== undefined && (_jsxs("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: ["Range: ", min, " \u2013 ", max] })), 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 }))] }));
5
+ }
6
+ //# sourceMappingURL=NumberField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../src/fields/NumberField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAab,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAoB;IAC3G,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EACR,gBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACjD,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,8HACT,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,wBAC1C,EAAE,GACF,EACD,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CACzC,aAAG,SAAS,EAAC,6CAA6C,wBAChD,GAAG,cAAK,GAAG,IACjB,CACL,EACA,QAAQ,IAAI,CAAC,KAAK,IAAI,CACrB,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,EACA,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAK,CAClE,IACG,CACP,CAAC;AACJ,CAAC"}