@actuate-media/cms-admin 0.8.0 → 0.8.1

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 (432) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +44 -42
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/__tests__/lib/search.test.js +10 -10
  5. package/dist/__tests__/lib/search.test.js.map +1 -1
  6. package/dist/__tests__/lib/utils.test.js.map +1 -1
  7. package/dist/__tests__/router/match-route.test.js.map +1 -1
  8. package/dist/__tests__/router/strip-base.test.js.map +1 -1
  9. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  10. package/dist/components/Breadcrumbs.js +2 -4
  11. package/dist/components/Breadcrumbs.js.map +1 -1
  12. package/dist/components/CommandPalette.d.ts.map +1 -1
  13. package/dist/components/CommandPalette.js +7 -3
  14. package/dist/components/CommandPalette.js.map +1 -1
  15. package/dist/components/ContentOverviewChart.d.ts.map +1 -1
  16. package/dist/components/ContentOverviewChart.js.map +1 -1
  17. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  18. package/dist/components/ErrorBoundary.js.map +1 -1
  19. package/dist/components/FocalPointPicker.d.ts.map +1 -1
  20. package/dist/components/FocalPointPicker.js +4 -2
  21. package/dist/components/FocalPointPicker.js.map +1 -1
  22. package/dist/components/FolderTree.d.ts.map +1 -1
  23. package/dist/components/FolderTree.js +18 -10
  24. package/dist/components/FolderTree.js.map +1 -1
  25. package/dist/components/LivePreview.d.ts +1 -1
  26. package/dist/components/LivePreview.d.ts.map +1 -1
  27. package/dist/components/LivePreview.js +6 -2
  28. package/dist/components/LivePreview.js.map +1 -1
  29. package/dist/components/LocaleProvider.d.ts.map +1 -1
  30. package/dist/components/LocaleProvider.js.map +1 -1
  31. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  32. package/dist/components/LocaleSwitcher.js +1 -1
  33. package/dist/components/LocaleSwitcher.js.map +1 -1
  34. package/dist/components/MediaPickerModal.d.ts.map +1 -1
  35. package/dist/components/MediaPickerModal.js.map +1 -1
  36. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  37. package/dist/components/PresenceIndicator.js +5 -2
  38. package/dist/components/PresenceIndicator.js.map +1 -1
  39. package/dist/components/SEOPanel.d.ts +1 -1
  40. package/dist/components/SEOPanel.d.ts.map +1 -1
  41. package/dist/components/SEOPanel.js +110 -24
  42. package/dist/components/SEOPanel.js.map +1 -1
  43. package/dist/components/SEOPerformance.d.ts.map +1 -1
  44. package/dist/components/SEOPerformance.js +2 -2
  45. package/dist/components/SEOPerformance.js.map +1 -1
  46. package/dist/components/ThemeProvider.d.ts.map +1 -1
  47. package/dist/components/ThemeProvider.js.map +1 -1
  48. package/dist/components/TipTapEditor.d.ts.map +1 -1
  49. package/dist/components/TipTapEditor.js +5 -1
  50. package/dist/components/TipTapEditor.js.map +1 -1
  51. package/dist/components/VersionHistory.d.ts +1 -1
  52. package/dist/components/VersionHistory.d.ts.map +1 -1
  53. package/dist/components/VersionHistory.js +1 -1
  54. package/dist/components/VersionHistory.js.map +1 -1
  55. package/dist/components/ui/Avatar.d.ts.map +1 -1
  56. package/dist/components/ui/Avatar.js.map +1 -1
  57. package/dist/components/ui/Badge.d.ts.map +1 -1
  58. package/dist/components/ui/Badge.js.map +1 -1
  59. package/dist/components/ui/Button.d.ts.map +1 -1
  60. package/dist/components/ui/Button.js.map +1 -1
  61. package/dist/components/ui/CommandPalette.d.ts.map +1 -1
  62. package/dist/components/ui/CommandPalette.js +8 -2
  63. package/dist/components/ui/CommandPalette.js.map +1 -1
  64. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
  65. package/dist/components/ui/ConfirmDialog.js.map +1 -1
  66. package/dist/components/ui/DataTable.d.ts.map +1 -1
  67. package/dist/components/ui/DataTable.js +1 -3
  68. package/dist/components/ui/DataTable.js.map +1 -1
  69. package/dist/components/ui/EmptyState.d.ts.map +1 -1
  70. package/dist/components/ui/EmptyState.js +1 -1
  71. package/dist/components/ui/EmptyState.js.map +1 -1
  72. package/dist/components/ui/Modal.d.ts.map +1 -1
  73. package/dist/components/ui/Modal.js.map +1 -1
  74. package/dist/components/ui/Pagination.d.ts +1 -1
  75. package/dist/components/ui/Pagination.d.ts.map +1 -1
  76. package/dist/components/ui/Pagination.js +7 -2
  77. package/dist/components/ui/Pagination.js.map +1 -1
  78. package/dist/components/ui/SearchInput.d.ts.map +1 -1
  79. package/dist/components/ui/SearchInput.js.map +1 -1
  80. package/dist/components/ui/Skeleton.d.ts.map +1 -1
  81. package/dist/components/ui/Skeleton.js.map +1 -1
  82. package/dist/components/ui/Toast.d.ts.map +1 -1
  83. package/dist/components/ui/Toast.js.map +1 -1
  84. package/dist/components/ui/index.d.ts.map +1 -1
  85. package/dist/components/ui/index.js.map +1 -1
  86. package/dist/fields/ArrayField.d.ts.map +1 -1
  87. package/dist/fields/ArrayField.js +1 -1
  88. package/dist/fields/ArrayField.js.map +1 -1
  89. package/dist/fields/BlockBuilderField.d.ts.map +1 -1
  90. package/dist/fields/BlockBuilderField.js +7 -7
  91. package/dist/fields/BlockBuilderField.js.map +1 -1
  92. package/dist/fields/DateField.d.ts.map +1 -1
  93. package/dist/fields/DateField.js +1 -1
  94. package/dist/fields/DateField.js.map +1 -1
  95. package/dist/fields/FieldRenderer.d.ts.map +1 -1
  96. package/dist/fields/FieldRenderer.js.map +1 -1
  97. package/dist/fields/GroupField.d.ts.map +1 -1
  98. package/dist/fields/GroupField.js +1 -1
  99. package/dist/fields/GroupField.js.map +1 -1
  100. package/dist/fields/MediaField.d.ts.map +1 -1
  101. package/dist/fields/MediaField.js +1 -1
  102. package/dist/fields/MediaField.js.map +1 -1
  103. package/dist/fields/NavBuilderField.d.ts.map +1 -1
  104. package/dist/fields/NavBuilderField.js +2 -5
  105. package/dist/fields/NavBuilderField.js.map +1 -1
  106. package/dist/fields/NumberField.d.ts +1 -1
  107. package/dist/fields/NumberField.d.ts.map +1 -1
  108. package/dist/fields/NumberField.js +2 -2
  109. package/dist/fields/NumberField.js.map +1 -1
  110. package/dist/fields/RelationshipField.d.ts.map +1 -1
  111. package/dist/fields/RelationshipField.js +7 -3
  112. package/dist/fields/RelationshipField.js.map +1 -1
  113. package/dist/fields/RichTextField.d.ts +1 -1
  114. package/dist/fields/RichTextField.d.ts.map +1 -1
  115. package/dist/fields/RichTextField.js +2 -2
  116. package/dist/fields/RichTextField.js.map +1 -1
  117. package/dist/fields/SelectField.d.ts.map +1 -1
  118. package/dist/fields/SelectField.js +9 -7
  119. package/dist/fields/SelectField.js.map +1 -1
  120. package/dist/fields/SlugField.d.ts.map +1 -1
  121. package/dist/fields/SlugField.js +1 -1
  122. package/dist/fields/SlugField.js.map +1 -1
  123. package/dist/fields/TextField.d.ts +1 -1
  124. package/dist/fields/TextField.d.ts.map +1 -1
  125. package/dist/fields/TextField.js +2 -2
  126. package/dist/fields/TextField.js.map +1 -1
  127. package/dist/fields/ToggleField.d.ts.map +1 -1
  128. package/dist/fields/ToggleField.js +1 -1
  129. package/dist/fields/ToggleField.js.map +1 -1
  130. package/dist/fields/block-types.d.ts.map +1 -1
  131. package/dist/fields/block-types.js +28 -8
  132. package/dist/fields/block-types.js.map +1 -1
  133. package/dist/fields/index.d.ts.map +1 -1
  134. package/dist/fields/index.js.map +1 -1
  135. package/dist/hooks/useBuilderState.d.ts.map +1 -1
  136. package/dist/hooks/useBuilderState.js.map +1 -1
  137. package/dist/hooks/useContentLock.d.ts.map +1 -1
  138. package/dist/hooks/useContentLock.js.map +1 -1
  139. package/dist/hooks/useDebounce.js.map +1 -1
  140. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  141. package/dist/hooks/useKeyboardShortcuts.js.map +1 -1
  142. package/dist/index.d.ts +2 -2
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js.map +1 -1
  145. package/dist/layout/Header.d.ts.map +1 -1
  146. package/dist/layout/Header.js.map +1 -1
  147. package/dist/layout/Layout.d.ts.map +1 -1
  148. package/dist/layout/Layout.js.map +1 -1
  149. package/dist/layout/Sidebar.d.ts +1 -1
  150. package/dist/layout/Sidebar.d.ts.map +1 -1
  151. package/dist/layout/Sidebar.js +5 -8
  152. package/dist/layout/Sidebar.js.map +1 -1
  153. package/dist/lib/api.js.map +1 -1
  154. package/dist/lib/search.d.ts.map +1 -1
  155. package/dist/lib/search.js +3 -5
  156. package/dist/lib/search.js.map +1 -1
  157. package/dist/lib/useApiData.d.ts.map +1 -1
  158. package/dist/lib/useApiData.js.map +1 -1
  159. package/dist/lib/utils.d.ts.map +1 -1
  160. package/dist/lib/utils.js.map +1 -1
  161. package/dist/router/index.d.ts.map +1 -1
  162. package/dist/router/index.js +1 -3
  163. package/dist/router/index.js.map +1 -1
  164. package/dist/views/CollectionList.d.ts.map +1 -1
  165. package/dist/views/CollectionList.js +56 -17
  166. package/dist/views/CollectionList.js.map +1 -1
  167. package/dist/views/Dashboard.d.ts.map +1 -1
  168. package/dist/views/Dashboard.js +26 -13
  169. package/dist/views/Dashboard.js.map +1 -1
  170. package/dist/views/DocumentEdit.d.ts +1 -1
  171. package/dist/views/DocumentEdit.d.ts.map +1 -1
  172. package/dist/views/DocumentEdit.js +33 -15
  173. package/dist/views/DocumentEdit.js.map +1 -1
  174. package/dist/views/ForgotPassword.d.ts.map +1 -1
  175. package/dist/views/ForgotPassword.js.map +1 -1
  176. package/dist/views/FormEditor.d.ts.map +1 -1
  177. package/dist/views/FormEditor.js +8 -2
  178. package/dist/views/FormEditor.js.map +1 -1
  179. package/dist/views/FormSubmissions.d.ts.map +1 -1
  180. package/dist/views/FormSubmissions.js +6 -6
  181. package/dist/views/FormSubmissions.js.map +1 -1
  182. package/dist/views/Forms.d.ts.map +1 -1
  183. package/dist/views/Forms.js.map +1 -1
  184. package/dist/views/Login.d.ts.map +1 -1
  185. package/dist/views/Login.js +5 -2
  186. package/dist/views/Login.js.map +1 -1
  187. package/dist/views/MediaBrowser.d.ts.map +1 -1
  188. package/dist/views/MediaBrowser.js +39 -19
  189. package/dist/views/MediaBrowser.js.map +1 -1
  190. package/dist/views/PageEditor.d.ts.map +1 -1
  191. package/dist/views/PageEditor.js.map +1 -1
  192. package/dist/views/Pages.d.ts.map +1 -1
  193. package/dist/views/Pages.js +20 -10
  194. package/dist/views/Pages.js.map +1 -1
  195. package/dist/views/PostEditor.d.ts.map +1 -1
  196. package/dist/views/PostEditor.js.map +1 -1
  197. package/dist/views/Posts.d.ts.map +1 -1
  198. package/dist/views/Posts.js +13 -7
  199. package/dist/views/Posts.js.map +1 -1
  200. package/dist/views/Redirects.d.ts.map +1 -1
  201. package/dist/views/Redirects.js +17 -5
  202. package/dist/views/Redirects.js.map +1 -1
  203. package/dist/views/ResetPassword.d.ts.map +1 -1
  204. package/dist/views/ResetPassword.js.map +1 -1
  205. package/dist/views/SEO.d.ts.map +1 -1
  206. package/dist/views/SEO.js +39 -16
  207. package/dist/views/SEO.js.map +1 -1
  208. package/dist/views/ScriptTagEditor.d.ts.map +1 -1
  209. package/dist/views/ScriptTagEditor.js +2 -1
  210. package/dist/views/ScriptTagEditor.js.map +1 -1
  211. package/dist/views/ScriptTags.d.ts.map +1 -1
  212. package/dist/views/ScriptTags.js.map +1 -1
  213. package/dist/views/Settings.d.ts.map +1 -1
  214. package/dist/views/Settings.js +38 -11
  215. package/dist/views/Settings.js.map +1 -1
  216. package/dist/views/SetupWizard.d.ts.map +1 -1
  217. package/dist/views/SetupWizard.js.map +1 -1
  218. package/dist/views/Users.d.ts.map +1 -1
  219. package/dist/views/Users.js +5 -3
  220. package/dist/views/Users.js.map +1 -1
  221. package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -1
  222. package/dist/views/page-builder/AIBlockAssist.js +1 -1
  223. package/dist/views/page-builder/AIBlockAssist.js.map +1 -1
  224. package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -1
  225. package/dist/views/page-builder/AIGenerateDialog.js +4 -1
  226. package/dist/views/page-builder/AIGenerateDialog.js.map +1 -1
  227. package/dist/views/page-builder/BlockEditor.d.ts.map +1 -1
  228. package/dist/views/page-builder/BlockEditor.js +1 -1
  229. package/dist/views/page-builder/BlockEditor.js.map +1 -1
  230. package/dist/views/page-builder/BlockPicker.d.ts.map +1 -1
  231. package/dist/views/page-builder/BlockPicker.js.map +1 -1
  232. package/dist/views/page-builder/BottomBar.d.ts.map +1 -1
  233. package/dist/views/page-builder/BottomBar.js.map +1 -1
  234. package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -1
  235. package/dist/views/page-builder/BuilderToolbar.js.map +1 -1
  236. package/dist/views/page-builder/ContextPanel.d.ts.map +1 -1
  237. package/dist/views/page-builder/ContextPanel.js +4 -1
  238. package/dist/views/page-builder/ContextPanel.js.map +1 -1
  239. package/dist/views/page-builder/DesignScore.d.ts.map +1 -1
  240. package/dist/views/page-builder/DesignScore.js.map +1 -1
  241. package/dist/views/page-builder/NodeSettings.d.ts.map +1 -1
  242. package/dist/views/page-builder/NodeSettings.js +1 -1
  243. package/dist/views/page-builder/NodeSettings.js.map +1 -1
  244. package/dist/views/page-builder/PageBuilder.d.ts +1 -1
  245. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  246. package/dist/views/page-builder/PageBuilder.js +4 -2
  247. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  248. package/dist/views/page-builder/PageSettings.d.ts.map +1 -1
  249. package/dist/views/page-builder/PageSettings.js.map +1 -1
  250. package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
  251. package/dist/views/page-builder/PageTemplates.js.map +1 -1
  252. package/dist/views/page-builder/SEOPanel.d.ts.map +1 -1
  253. package/dist/views/page-builder/SEOPanel.js +1 -3
  254. package/dist/views/page-builder/SEOPanel.js.map +1 -1
  255. package/dist/views/page-builder/SavedSections.d.ts.map +1 -1
  256. package/dist/views/page-builder/SavedSections.js +3 -7
  257. package/dist/views/page-builder/SavedSections.js.map +1 -1
  258. package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -1
  259. package/dist/views/page-builder/TemplatePicker.js.map +1 -1
  260. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -1
  261. package/dist/views/page-builder/block-renderers/CTAPreview.js +1 -1
  262. package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -1
  263. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -1
  264. package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
  265. package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -1
  266. package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -1
  267. package/dist/views/page-builder/block-renderers/CodePreview.js +1 -5
  268. package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -1
  269. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -1
  270. package/dist/views/page-builder/block-renderers/FAQPreview.js +4 -1
  271. package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -1
  272. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -1
  273. package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -1
  274. package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -1
  275. package/dist/views/page-builder/block-renderers/FormPreview.js +2 -2
  276. package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -1
  277. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -1
  278. package/dist/views/page-builder/block-renderers/GalleryPreview.js +1 -3
  279. package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -1
  280. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -1
  281. package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -1
  282. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -1
  283. package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -1
  284. package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -1
  285. package/dist/views/page-builder/block-renderers/TextPreview.js +2 -6
  286. package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -1
  287. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -1
  288. package/dist/views/page-builder/block-renderers/VideoPreview.js +2 -5
  289. package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -1
  290. package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -1
  291. package/dist/views/page-builder/block-renderers/index.js.map +1 -1
  292. package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -1
  293. package/dist/views/page-builder/canvas/BlockRenderer.js +1 -5
  294. package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -1
  295. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -1
  296. package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -1
  297. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -1
  298. package/dist/views/page-builder/canvas/ColumnRenderer.js +1 -5
  299. package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -1
  300. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -1
  301. package/dist/views/page-builder/canvas/ContainerRenderer.js +1 -5
  302. package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -1
  303. package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -1
  304. package/dist/views/page-builder/canvas/RowRenderer.js +1 -5
  305. package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -1
  306. package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -1
  307. package/dist/views/page-builder/canvas/SectionRenderer.js +1 -5
  308. package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -1
  309. package/dist/views/page-builder/canvas/index.d.ts.map +1 -1
  310. package/dist/views/page-builder/canvas/index.js.map +1 -1
  311. package/package.json +2 -2
  312. package/src/AdminRoot.tsx +263 -191
  313. package/src/__tests__/lib/search.test.ts +60 -69
  314. package/src/__tests__/lib/utils.test.ts +12 -12
  315. package/src/__tests__/router/match-route.test.ts +24 -26
  316. package/src/__tests__/router/strip-base.test.ts +15 -15
  317. package/src/components/Breadcrumbs.tsx +27 -24
  318. package/src/components/CommandPalette.tsx +115 -99
  319. package/src/components/ContentOverviewChart.tsx +19 -14
  320. package/src/components/ErrorBoundary.tsx +13 -13
  321. package/src/components/FocalPointPicker.tsx +31 -20
  322. package/src/components/FolderTree.tsx +172 -139
  323. package/src/components/LivePreview.tsx +68 -41
  324. package/src/components/LocaleProvider.tsx +26 -20
  325. package/src/components/LocaleSwitcher.tsx +9 -11
  326. package/src/components/MediaPickerModal.tsx +46 -45
  327. package/src/components/PresenceIndicator.tsx +30 -27
  328. package/src/components/SEOPanel.tsx +378 -228
  329. package/src/components/SEOPerformance.tsx +52 -30
  330. package/src/components/ThemeProvider.tsx +46 -46
  331. package/src/components/TipTapEditor.tsx +60 -64
  332. package/src/components/VersionHistory.tsx +63 -52
  333. package/src/components/ui/Avatar.tsx +8 -8
  334. package/src/components/ui/Badge.tsx +7 -5
  335. package/src/components/ui/Button.tsx +24 -13
  336. package/src/components/ui/CommandPalette.tsx +56 -42
  337. package/src/components/ui/ConfirmDialog.tsx +14 -14
  338. package/src/components/ui/DataTable.tsx +37 -39
  339. package/src/components/ui/EmptyState.tsx +9 -11
  340. package/src/components/ui/Modal.tsx +21 -15
  341. package/src/components/ui/Pagination.tsx +34 -19
  342. package/src/components/ui/SearchInput.tsx +17 -7
  343. package/src/components/ui/Skeleton.tsx +7 -7
  344. package/src/components/ui/Toast.tsx +29 -22
  345. package/src/components/ui/index.ts +24 -24
  346. package/src/fields/ArrayField.tsx +43 -25
  347. package/src/fields/BlockBuilderField.tsx +80 -99
  348. package/src/fields/DateField.tsx +20 -12
  349. package/src/fields/FieldRenderer.tsx +34 -34
  350. package/src/fields/GroupField.tsx +8 -10
  351. package/src/fields/MediaField.tsx +8 -10
  352. package/src/fields/NavBuilderField.tsx +24 -25
  353. package/src/fields/NumberField.tsx +21 -14
  354. package/src/fields/RelationshipField.tsx +105 -91
  355. package/src/fields/RichTextField.tsx +16 -12
  356. package/src/fields/SelectField.tsx +42 -34
  357. package/src/fields/SlugField.tsx +29 -17
  358. package/src/fields/TextField.tsx +24 -16
  359. package/src/fields/ToggleField.tsx +7 -9
  360. package/src/fields/block-types.ts +50 -24
  361. package/src/fields/index.ts +17 -17
  362. package/src/hooks/useBuilderState.ts +260 -221
  363. package/src/hooks/useContentLock.ts +23 -20
  364. package/src/hooks/useDebounce.ts +7 -7
  365. package/src/hooks/useKeyboardShortcuts.ts +16 -16
  366. package/src/index.ts +69 -58
  367. package/src/layout/Header.tsx +21 -20
  368. package/src/layout/Layout.tsx +22 -24
  369. package/src/layout/Sidebar.tsx +107 -72
  370. package/src/lib/api.ts +34 -34
  371. package/src/lib/search.ts +30 -34
  372. package/src/lib/useApiData.ts +65 -62
  373. package/src/lib/utils.ts +3 -3
  374. package/src/router/index.ts +33 -35
  375. package/src/styles/build-input.css +2 -2
  376. package/src/styles/tailwind.css +1 -1
  377. package/src/styles/theme.css +7 -1
  378. package/src/views/CollectionList.tsx +275 -121
  379. package/src/views/Dashboard.tsx +164 -117
  380. package/src/views/DocumentEdit.tsx +298 -253
  381. package/src/views/ForgotPassword.tsx +27 -23
  382. package/src/views/FormEditor.tsx +165 -99
  383. package/src/views/FormSubmissions.tsx +261 -117
  384. package/src/views/Forms.tsx +56 -26
  385. package/src/views/Login.tsx +107 -84
  386. package/src/views/MediaBrowser.tsx +717 -523
  387. package/src/views/PageEditor.tsx +44 -46
  388. package/src/views/Pages.tsx +312 -149
  389. package/src/views/PostEditor.tsx +57 -51
  390. package/src/views/Posts.tsx +206 -74
  391. package/src/views/Redirects.tsx +173 -117
  392. package/src/views/ResetPassword.tsx +43 -32
  393. package/src/views/SEO.tsx +589 -160
  394. package/src/views/ScriptTagEditor.tsx +69 -69
  395. package/src/views/ScriptTags.tsx +54 -42
  396. package/src/views/Settings.tsx +430 -220
  397. package/src/views/SetupWizard.tsx +69 -46
  398. package/src/views/Users.tsx +154 -120
  399. package/src/views/page-builder/AIBlockAssist.tsx +21 -25
  400. package/src/views/page-builder/AIGenerateDialog.tsx +134 -127
  401. package/src/views/page-builder/BlockEditor.tsx +94 -96
  402. package/src/views/page-builder/BlockPicker.tsx +73 -88
  403. package/src/views/page-builder/BottomBar.tsx +15 -11
  404. package/src/views/page-builder/BuilderToolbar.tsx +32 -29
  405. package/src/views/page-builder/ContextPanel.tsx +57 -57
  406. package/src/views/page-builder/DesignScore.tsx +52 -59
  407. package/src/views/page-builder/NodeSettings.tsx +59 -59
  408. package/src/views/page-builder/PageBuilder.tsx +156 -155
  409. package/src/views/page-builder/PageSettings.tsx +16 -15
  410. package/src/views/page-builder/PageTemplates.tsx +23 -17
  411. package/src/views/page-builder/SEOPanel.tsx +90 -111
  412. package/src/views/page-builder/SavedSections.tsx +99 -105
  413. package/src/views/page-builder/TemplatePicker.tsx +44 -48
  414. package/src/views/page-builder/block-renderers/CTAPreview.tsx +11 -13
  415. package/src/views/page-builder/block-renderers/CardsPreview.tsx +13 -15
  416. package/src/views/page-builder/block-renderers/CodePreview.tsx +16 -16
  417. package/src/views/page-builder/block-renderers/FAQPreview.tsx +20 -23
  418. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +5 -5
  419. package/src/views/page-builder/block-renderers/FormPreview.tsx +9 -13
  420. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +22 -28
  421. package/src/views/page-builder/block-renderers/HeroPreview.tsx +17 -30
  422. package/src/views/page-builder/block-renderers/ImagePreview.tsx +12 -12
  423. package/src/views/page-builder/block-renderers/TextPreview.tsx +22 -22
  424. package/src/views/page-builder/block-renderers/VideoPreview.tsx +13 -18
  425. package/src/views/page-builder/block-renderers/index.ts +17 -17
  426. package/src/views/page-builder/canvas/BlockRenderer.tsx +19 -23
  427. package/src/views/page-builder/canvas/BuilderCanvas.tsx +17 -20
  428. package/src/views/page-builder/canvas/ColumnRenderer.tsx +22 -26
  429. package/src/views/page-builder/canvas/ContainerRenderer.tsx +20 -24
  430. package/src/views/page-builder/canvas/RowRenderer.tsx +19 -23
  431. package/src/views/page-builder/canvas/SectionRenderer.tsx +30 -34
  432. package/src/views/page-builder/canvas/index.ts +2 -2
@@ -1,26 +1,26 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState, useMemo, useCallback } from 'react';
4
- import { Star, Copy, Trash2 } from 'lucide-react';
5
- import * as SwitchPrimitive from '@radix-ui/react-switch';
6
- import type { BlockNode, BlockTypeDefinition, FieldDefinition } from '@actuate-media/cms-core';
7
- import { BlockCatalog } from '@actuate-media/cms-core';
8
- import { AIBlockAssist } from './AIBlockAssist.js';
9
- import { TipTapEditor } from '../../components/TipTapEditor.js';
10
- import { MediaPickerModal } from '../../components/MediaPickerModal.js';
3
+ import { useState, useMemo, useCallback } from 'react'
4
+ import { Star, Copy, Trash2 } from 'lucide-react'
5
+ import * as SwitchPrimitive from '@radix-ui/react-switch'
6
+ import type { BlockNode, BlockTypeDefinition, FieldDefinition } from '@actuate-media/cms-core'
7
+ import { BlockCatalog } from '@actuate-media/cms-core'
8
+ import { AIBlockAssist } from './AIBlockAssist.js'
9
+ import { TipTapEditor } from '../../components/TipTapEditor.js'
10
+ import { MediaPickerModal } from '../../components/MediaPickerModal.js'
11
11
 
12
12
  export interface BlockEditorProps {
13
- node: BlockNode;
14
- onUpdateBlock: (id: string, data: Record<string, unknown>) => void;
15
- onUpdateSettings: (id: string, settings: Record<string, unknown>) => void;
16
- onRemoveNode: (id: string) => void;
17
- onDuplicateNode: (id: string) => void;
18
- config: any;
13
+ node: BlockNode
14
+ onUpdateBlock: (id: string, data: Record<string, unknown>) => void
15
+ onUpdateSettings: (id: string, settings: Record<string, unknown>) => void
16
+ onRemoveNode: (id: string) => void
17
+ onDuplicateNode: (id: string) => void
18
+ config: any
19
19
  }
20
20
 
21
21
  const INPUT_CLASS =
22
- 'w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring';
23
- const LABEL_CLASS = 'text-sm font-medium text-foreground mb-1 block';
22
+ 'w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring'
23
+ const LABEL_CLASS = 'text-sm font-medium text-foreground mb-1 block'
24
24
 
25
25
  export function BlockEditor({
26
26
  node,
@@ -30,36 +30,36 @@ export function BlockEditor({
30
30
  onDuplicateNode,
31
31
  config,
32
32
  }: BlockEditorProps) {
33
- const [confirmDelete, setConfirmDelete] = useState(false);
33
+ const [confirmDelete, setConfirmDelete] = useState(false)
34
34
 
35
- const catalog = useMemo(() => new BlockCatalog(), []);
35
+ const catalog = useMemo(() => new BlockCatalog(), [])
36
36
  const blockDef = useMemo(
37
37
  () => catalog.get(node.settings.blockType),
38
- [catalog, node.settings.blockType]
39
- );
38
+ [catalog, node.settings.blockType],
39
+ )
40
40
 
41
41
  const handleFieldChange = useCallback(
42
42
  (fieldName: string, value: unknown) => {
43
- onUpdateBlock(node.id, { [fieldName]: value });
43
+ onUpdateBlock(node.id, { [fieldName]: value })
44
44
  },
45
- [node.id, onUpdateBlock]
46
- );
45
+ [node.id, onUpdateBlock],
46
+ )
47
47
 
48
48
  const handleVariantChange = useCallback(
49
49
  (variantName: string) => {
50
- onUpdateSettings(node.id, { variant: variantName });
50
+ onUpdateSettings(node.id, { variant: variantName })
51
51
  },
52
- [node.id, onUpdateSettings]
53
- );
52
+ [node.id, onUpdateSettings],
53
+ )
54
54
 
55
55
  const handleDelete = useCallback(() => {
56
56
  if (confirmDelete) {
57
- onRemoveNode(node.id);
58
- setConfirmDelete(false);
57
+ onRemoveNode(node.id)
58
+ setConfirmDelete(false)
59
59
  } else {
60
- setConfirmDelete(true);
60
+ setConfirmDelete(true)
61
61
  }
62
- }, [confirmDelete, node.id, onRemoveNode]);
62
+ }, [confirmDelete, node.id, onRemoveNode])
63
63
 
64
64
  if (!blockDef) {
65
65
  return (
@@ -68,7 +68,7 @@ export function BlockEditor({
68
68
  Unknown block type: <code className="text-xs">{node.settings.blockType}</code>
69
69
  </p>
70
70
  </div>
71
- );
71
+ )
72
72
  }
73
73
 
74
74
  return (
@@ -77,10 +77,7 @@ export function BlockEditor({
77
77
  <div className="flex items-center gap-2">
78
78
  <Star size={16} className="text-muted-foreground" />
79
79
  <span className="text-sm font-medium text-foreground flex-1">{blockDef.label}</span>
80
- <AIBlockAssist
81
- block={node}
82
- onUpdateData={(data) => onUpdateBlock(node.id, data)}
83
- />
80
+ <AIBlockAssist block={node} onUpdateData={(data) => onUpdateBlock(node.id, data)} />
84
81
  </div>
85
82
  {blockDef.description && (
86
83
  <p className="text-xs text-muted-foreground mt-1">{blockDef.description}</p>
@@ -150,18 +147,18 @@ export function BlockEditor({
150
147
  </button>
151
148
  </div>
152
149
  </div>
153
- );
150
+ )
154
151
  }
155
152
 
156
153
  interface FieldRendererProps {
157
- name: string;
158
- definition: FieldDefinition;
159
- value: unknown;
160
- onChange: (value: unknown) => void;
154
+ name: string
155
+ definition: FieldDefinition
156
+ value: unknown
157
+ onChange: (value: unknown) => void
161
158
  }
162
159
 
163
160
  function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps) {
164
- const label = definition.label || name;
161
+ const label = definition.label || name
165
162
 
166
163
  switch (definition.type) {
167
164
  case 'text':
@@ -176,7 +173,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
176
173
  className={INPUT_CLASS}
177
174
  />
178
175
  </div>
179
- );
176
+ )
180
177
 
181
178
  case 'richText':
182
179
  return (
@@ -190,7 +187,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
190
187
  />
191
188
  </div>
192
189
  </div>
193
- );
190
+ )
194
191
 
195
192
  case 'url':
196
193
  return (
@@ -204,7 +201,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
204
201
  className={INPUT_CLASS}
205
202
  />
206
203
  </div>
207
- );
204
+ )
208
205
 
209
206
  case 'number':
210
207
  return (
@@ -220,7 +217,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
220
217
  className={INPUT_CLASS}
221
218
  />
222
219
  </div>
223
- );
220
+ )
224
221
 
225
222
  case 'boolean':
226
223
  return (
@@ -235,10 +232,10 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
235
232
  <SwitchPrimitive.Thumb className="block h-3.5 w-3.5 rounded-full bg-background shadow-sm transition-transform translate-x-0.5 data-[state=checked]:translate-x-[18px]" />
236
233
  </SwitchPrimitive.Root>
237
234
  </div>
238
- );
235
+ )
239
236
 
240
237
  case 'media':
241
- return <MediaFieldRenderer label={label} value={value} onChange={onChange} />;
238
+ return <MediaFieldRenderer label={label} value={value} onChange={onChange} />
242
239
 
243
240
  case 'select':
244
241
  return (
@@ -257,13 +254,13 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
257
254
  ))}
258
255
  </select>
259
256
  </div>
260
- );
257
+ )
261
258
 
262
259
  case 'array':
263
- return <ArrayFieldRenderer label={label} value={value} onChange={onChange} />;
260
+ return <ArrayFieldRenderer label={label} value={value} onChange={onChange} />
264
261
 
265
262
  case 'json':
266
- return <JsonFieldRenderer label={label} value={value} onChange={onChange} />;
263
+ return <JsonFieldRenderer label={label} value={value} onChange={onChange} />
267
264
 
268
265
  case 'date':
269
266
  return (
@@ -276,7 +273,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
276
273
  className={INPUT_CLASS}
277
274
  />
278
275
  </div>
279
- );
276
+ )
280
277
 
281
278
  case 'slug':
282
279
  return (
@@ -289,14 +286,14 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
289
286
  const slug = e.target.value
290
287
  .toLowerCase()
291
288
  .replace(/[^a-z0-9-]+/g, '-')
292
- .replace(/^-+|-+$/g, '');
293
- onChange(slug);
289
+ .replace(/^-+|-+$/g, '')
290
+ onChange(slug)
294
291
  }}
295
292
  placeholder={definition.admin?.placeholder ?? 'page-slug'}
296
293
  className={INPUT_CLASS}
297
294
  />
298
295
  </div>
299
- );
296
+ )
300
297
 
301
298
  case 'relationship':
302
299
  return (
@@ -310,7 +307,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
310
307
  className={INPUT_CLASS}
311
308
  />
312
309
  </div>
313
- );
310
+ )
314
311
 
315
312
  case 'email':
316
313
  return (
@@ -324,7 +321,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
324
321
  className={INPUT_CLASS}
325
322
  />
326
323
  </div>
327
- );
324
+ )
328
325
 
329
326
  case 'color':
330
327
  return (
@@ -346,7 +343,7 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
346
343
  />
347
344
  </div>
348
345
  </div>
349
- );
346
+ )
350
347
 
351
348
  default:
352
349
  return (
@@ -359,14 +356,14 @@ function FieldRenderer({ name, definition, value, onChange }: FieldRendererProps
359
356
  className={INPUT_CLASS}
360
357
  />
361
358
  </div>
362
- );
359
+ )
363
360
  }
364
361
  }
365
362
 
366
363
  interface SimpleFieldProps {
367
- label: string;
368
- value: unknown;
369
- onChange: (value: unknown) => void;
364
+ label: string
365
+ value: unknown
366
+ onChange: (value: unknown) => void
370
367
  }
371
368
 
372
369
  /**
@@ -375,12 +372,13 @@ interface SimpleFieldProps {
375
372
  * browse-and-select flow instead of a free-text input.
376
373
  */
377
374
  function MediaFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
378
- const [open, setOpen] = useState(false);
379
- const url = typeof value === 'string'
380
- ? value
381
- : (value && typeof value === 'object' && 'url' in (value as any))
382
- ? String((value as any).url)
383
- : '';
375
+ const [open, setOpen] = useState(false)
376
+ const url =
377
+ typeof value === 'string'
378
+ ? value
379
+ : value && typeof value === 'object' && 'url' in (value as any)
380
+ ? String((value as any).url)
381
+ : ''
384
382
 
385
383
  return (
386
384
  <div>
@@ -411,12 +409,12 @@ function MediaFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
411
409
  open={open}
412
410
  onClose={() => setOpen(false)}
413
411
  onSelect={(selectedUrl) => {
414
- onChange(selectedUrl);
415
- setOpen(false);
412
+ onChange(selectedUrl)
413
+ setOpen(false)
416
414
  }}
417
415
  />
418
416
  </div>
419
- );
417
+ )
420
418
  }
421
419
 
422
420
  /**
@@ -429,30 +427,30 @@ function MediaFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
429
427
  */
430
428
  function JsonFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
431
429
  const initial = useMemo(() => {
432
- if (value === undefined || value === null) return '';
430
+ if (value === undefined || value === null) return ''
433
431
  try {
434
- return JSON.stringify(value, null, 2);
432
+ return JSON.stringify(value, null, 2)
435
433
  } catch {
436
- return '';
434
+ return ''
437
435
  }
438
- }, [value]);
439
- const [draft, setDraft] = useState(initial);
440
- const [error, setError] = useState<string | null>(null);
436
+ }, [value])
437
+ const [draft, setDraft] = useState(initial)
438
+ const [error, setError] = useState<string | null>(null)
441
439
 
442
440
  const handleChange = (next: string) => {
443
- setDraft(next);
441
+ setDraft(next)
444
442
  if (next.trim() === '') {
445
- setError(null);
446
- onChange(undefined);
447
- return;
443
+ setError(null)
444
+ onChange(undefined)
445
+ return
448
446
  }
449
447
  try {
450
- onChange(JSON.parse(next));
451
- setError(null);
448
+ onChange(JSON.parse(next))
449
+ setError(null)
452
450
  } catch (err) {
453
- setError(err instanceof Error ? err.message : 'Invalid JSON');
451
+ setError(err instanceof Error ? err.message : 'Invalid JSON')
454
452
  }
455
- };
453
+ }
456
454
 
457
455
  return (
458
456
  <div>
@@ -470,7 +468,7 @@ function JsonFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
470
468
  </p>
471
469
  )}
472
470
  </div>
473
- );
471
+ )
474
472
  }
475
473
 
476
474
  /**
@@ -479,22 +477,22 @@ function JsonFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
479
477
  * nested-field editing belongs in the document-level FieldRenderer.
480
478
  */
481
479
  function ArrayFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
482
- const items = Array.isArray(value) ? value : [];
483
- const isObjectArray = items.length > 0 && typeof items[0] === 'object' && items[0] !== null;
480
+ const items = Array.isArray(value) ? value : []
481
+ const isObjectArray = items.length > 0 && typeof items[0] === 'object' && items[0] !== null
484
482
 
485
483
  if (isObjectArray) {
486
484
  // For object arrays fall back to JSON — mirrors what most consumers
487
485
  // expect when their block declares `type: 'array'` with no schema.
488
- return <JsonFieldRenderer label={label} value={value} onChange={onChange} />;
486
+ return <JsonFieldRenderer label={label} value={value} onChange={onChange} />
489
487
  }
490
488
 
491
489
  const updateItem = (idx: number, next: string) => {
492
- const copy = [...items];
493
- copy[idx] = next;
494
- onChange(copy);
495
- };
496
- const addItem = () => onChange([...items, '']);
497
- const removeItem = (idx: number) => onChange(items.filter((_, i) => i !== idx));
490
+ const copy = [...items]
491
+ copy[idx] = next
492
+ onChange(copy)
493
+ }
494
+ const addItem = () => onChange([...items, ''])
495
+ const removeItem = (idx: number) => onChange(items.filter((_, i) => i !== idx))
498
496
 
499
497
  return (
500
498
  <div>
@@ -527,5 +525,5 @@ function ArrayFieldRenderer({ label, value, onChange }: SimpleFieldProps) {
527
525
  </button>
528
526
  </div>
529
527
  </div>
530
- );
528
+ )
531
529
  }