@actuate-media/cms-admin 0.7.3 → 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 (435) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +95 -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/actuate-admin.css +1 -1
  10. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  11. package/dist/components/Breadcrumbs.js +2 -4
  12. package/dist/components/Breadcrumbs.js.map +1 -1
  13. package/dist/components/CommandPalette.d.ts.map +1 -1
  14. package/dist/components/CommandPalette.js +7 -3
  15. package/dist/components/CommandPalette.js.map +1 -1
  16. package/dist/components/ContentOverviewChart.d.ts.map +1 -1
  17. package/dist/components/ContentOverviewChart.js.map +1 -1
  18. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  19. package/dist/components/ErrorBoundary.js.map +1 -1
  20. package/dist/components/FocalPointPicker.d.ts.map +1 -1
  21. package/dist/components/FocalPointPicker.js +4 -2
  22. package/dist/components/FocalPointPicker.js.map +1 -1
  23. package/dist/components/FolderTree.d.ts.map +1 -1
  24. package/dist/components/FolderTree.js +18 -10
  25. package/dist/components/FolderTree.js.map +1 -1
  26. package/dist/components/LivePreview.d.ts +1 -1
  27. package/dist/components/LivePreview.d.ts.map +1 -1
  28. package/dist/components/LivePreview.js +6 -2
  29. package/dist/components/LivePreview.js.map +1 -1
  30. package/dist/components/LocaleProvider.d.ts.map +1 -1
  31. package/dist/components/LocaleProvider.js.map +1 -1
  32. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  33. package/dist/components/LocaleSwitcher.js +1 -1
  34. package/dist/components/LocaleSwitcher.js.map +1 -1
  35. package/dist/components/MediaPickerModal.d.ts.map +1 -1
  36. package/dist/components/MediaPickerModal.js.map +1 -1
  37. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  38. package/dist/components/PresenceIndicator.js +5 -2
  39. package/dist/components/PresenceIndicator.js.map +1 -1
  40. package/dist/components/SEOPanel.d.ts +1 -1
  41. package/dist/components/SEOPanel.d.ts.map +1 -1
  42. package/dist/components/SEOPanel.js +110 -24
  43. package/dist/components/SEOPanel.js.map +1 -1
  44. package/dist/components/SEOPerformance.d.ts.map +1 -1
  45. package/dist/components/SEOPerformance.js +2 -2
  46. package/dist/components/SEOPerformance.js.map +1 -1
  47. package/dist/components/ThemeProvider.d.ts.map +1 -1
  48. package/dist/components/ThemeProvider.js.map +1 -1
  49. package/dist/components/TipTapEditor.d.ts.map +1 -1
  50. package/dist/components/TipTapEditor.js +5 -1
  51. package/dist/components/TipTapEditor.js.map +1 -1
  52. package/dist/components/VersionHistory.d.ts +1 -1
  53. package/dist/components/VersionHistory.d.ts.map +1 -1
  54. package/dist/components/VersionHistory.js +1 -1
  55. package/dist/components/VersionHistory.js.map +1 -1
  56. package/dist/components/ui/Avatar.d.ts.map +1 -1
  57. package/dist/components/ui/Avatar.js.map +1 -1
  58. package/dist/components/ui/Badge.d.ts.map +1 -1
  59. package/dist/components/ui/Badge.js.map +1 -1
  60. package/dist/components/ui/Button.d.ts.map +1 -1
  61. package/dist/components/ui/Button.js.map +1 -1
  62. package/dist/components/ui/CommandPalette.d.ts.map +1 -1
  63. package/dist/components/ui/CommandPalette.js +8 -2
  64. package/dist/components/ui/CommandPalette.js.map +1 -1
  65. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
  66. package/dist/components/ui/ConfirmDialog.js.map +1 -1
  67. package/dist/components/ui/DataTable.d.ts.map +1 -1
  68. package/dist/components/ui/DataTable.js +1 -3
  69. package/dist/components/ui/DataTable.js.map +1 -1
  70. package/dist/components/ui/EmptyState.d.ts.map +1 -1
  71. package/dist/components/ui/EmptyState.js +1 -1
  72. package/dist/components/ui/EmptyState.js.map +1 -1
  73. package/dist/components/ui/Modal.d.ts.map +1 -1
  74. package/dist/components/ui/Modal.js.map +1 -1
  75. package/dist/components/ui/Pagination.d.ts +1 -1
  76. package/dist/components/ui/Pagination.d.ts.map +1 -1
  77. package/dist/components/ui/Pagination.js +7 -2
  78. package/dist/components/ui/Pagination.js.map +1 -1
  79. package/dist/components/ui/SearchInput.d.ts.map +1 -1
  80. package/dist/components/ui/SearchInput.js.map +1 -1
  81. package/dist/components/ui/Skeleton.d.ts.map +1 -1
  82. package/dist/components/ui/Skeleton.js.map +1 -1
  83. package/dist/components/ui/Toast.d.ts.map +1 -1
  84. package/dist/components/ui/Toast.js.map +1 -1
  85. package/dist/components/ui/index.d.ts.map +1 -1
  86. package/dist/components/ui/index.js.map +1 -1
  87. package/dist/fields/ArrayField.d.ts.map +1 -1
  88. package/dist/fields/ArrayField.js +1 -1
  89. package/dist/fields/ArrayField.js.map +1 -1
  90. package/dist/fields/BlockBuilderField.d.ts.map +1 -1
  91. package/dist/fields/BlockBuilderField.js +7 -7
  92. package/dist/fields/BlockBuilderField.js.map +1 -1
  93. package/dist/fields/DateField.d.ts.map +1 -1
  94. package/dist/fields/DateField.js +1 -1
  95. package/dist/fields/DateField.js.map +1 -1
  96. package/dist/fields/FieldRenderer.d.ts.map +1 -1
  97. package/dist/fields/FieldRenderer.js.map +1 -1
  98. package/dist/fields/GroupField.d.ts.map +1 -1
  99. package/dist/fields/GroupField.js +1 -1
  100. package/dist/fields/GroupField.js.map +1 -1
  101. package/dist/fields/MediaField.d.ts.map +1 -1
  102. package/dist/fields/MediaField.js +1 -1
  103. package/dist/fields/MediaField.js.map +1 -1
  104. package/dist/fields/NavBuilderField.d.ts.map +1 -1
  105. package/dist/fields/NavBuilderField.js +2 -5
  106. package/dist/fields/NavBuilderField.js.map +1 -1
  107. package/dist/fields/NumberField.d.ts +1 -1
  108. package/dist/fields/NumberField.d.ts.map +1 -1
  109. package/dist/fields/NumberField.js +2 -2
  110. package/dist/fields/NumberField.js.map +1 -1
  111. package/dist/fields/RelationshipField.d.ts.map +1 -1
  112. package/dist/fields/RelationshipField.js +7 -3
  113. package/dist/fields/RelationshipField.js.map +1 -1
  114. package/dist/fields/RichTextField.d.ts +1 -1
  115. package/dist/fields/RichTextField.d.ts.map +1 -1
  116. package/dist/fields/RichTextField.js +2 -2
  117. package/dist/fields/RichTextField.js.map +1 -1
  118. package/dist/fields/SelectField.d.ts.map +1 -1
  119. package/dist/fields/SelectField.js +9 -7
  120. package/dist/fields/SelectField.js.map +1 -1
  121. package/dist/fields/SlugField.d.ts.map +1 -1
  122. package/dist/fields/SlugField.js +1 -1
  123. package/dist/fields/SlugField.js.map +1 -1
  124. package/dist/fields/TextField.d.ts +1 -1
  125. package/dist/fields/TextField.d.ts.map +1 -1
  126. package/dist/fields/TextField.js +2 -2
  127. package/dist/fields/TextField.js.map +1 -1
  128. package/dist/fields/ToggleField.d.ts.map +1 -1
  129. package/dist/fields/ToggleField.js +1 -1
  130. package/dist/fields/ToggleField.js.map +1 -1
  131. package/dist/fields/block-types.d.ts.map +1 -1
  132. package/dist/fields/block-types.js +28 -8
  133. package/dist/fields/block-types.js.map +1 -1
  134. package/dist/fields/index.d.ts.map +1 -1
  135. package/dist/fields/index.js.map +1 -1
  136. package/dist/hooks/useBuilderState.d.ts.map +1 -1
  137. package/dist/hooks/useBuilderState.js.map +1 -1
  138. package/dist/hooks/useContentLock.d.ts.map +1 -1
  139. package/dist/hooks/useContentLock.js.map +1 -1
  140. package/dist/hooks/useDebounce.js.map +1 -1
  141. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  142. package/dist/hooks/useKeyboardShortcuts.js.map +1 -1
  143. package/dist/index.d.ts +2 -2
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js.map +1 -1
  146. package/dist/layout/Header.d.ts.map +1 -1
  147. package/dist/layout/Header.js.map +1 -1
  148. package/dist/layout/Layout.d.ts.map +1 -1
  149. package/dist/layout/Layout.js.map +1 -1
  150. package/dist/layout/Sidebar.d.ts +1 -1
  151. package/dist/layout/Sidebar.d.ts.map +1 -1
  152. package/dist/layout/Sidebar.js +5 -8
  153. package/dist/layout/Sidebar.js.map +1 -1
  154. package/dist/lib/api.d.ts.map +1 -1
  155. package/dist/lib/api.js +33 -4
  156. package/dist/lib/api.js.map +1 -1
  157. package/dist/lib/search.d.ts.map +1 -1
  158. package/dist/lib/search.js +3 -5
  159. package/dist/lib/search.js.map +1 -1
  160. package/dist/lib/useApiData.d.ts.map +1 -1
  161. package/dist/lib/useApiData.js.map +1 -1
  162. package/dist/lib/utils.d.ts.map +1 -1
  163. package/dist/lib/utils.js.map +1 -1
  164. package/dist/router/index.d.ts.map +1 -1
  165. package/dist/router/index.js +1 -3
  166. package/dist/router/index.js.map +1 -1
  167. package/dist/views/CollectionList.d.ts.map +1 -1
  168. package/dist/views/CollectionList.js +56 -17
  169. package/dist/views/CollectionList.js.map +1 -1
  170. package/dist/views/Dashboard.d.ts.map +1 -1
  171. package/dist/views/Dashboard.js +26 -13
  172. package/dist/views/Dashboard.js.map +1 -1
  173. package/dist/views/DocumentEdit.d.ts +1 -1
  174. package/dist/views/DocumentEdit.d.ts.map +1 -1
  175. package/dist/views/DocumentEdit.js +33 -15
  176. package/dist/views/DocumentEdit.js.map +1 -1
  177. package/dist/views/ForgotPassword.d.ts.map +1 -1
  178. package/dist/views/ForgotPassword.js.map +1 -1
  179. package/dist/views/FormEditor.d.ts.map +1 -1
  180. package/dist/views/FormEditor.js +8 -2
  181. package/dist/views/FormEditor.js.map +1 -1
  182. package/dist/views/FormSubmissions.d.ts.map +1 -1
  183. package/dist/views/FormSubmissions.js +6 -6
  184. package/dist/views/FormSubmissions.js.map +1 -1
  185. package/dist/views/Forms.d.ts.map +1 -1
  186. package/dist/views/Forms.js.map +1 -1
  187. package/dist/views/Login.d.ts.map +1 -1
  188. package/dist/views/Login.js +5 -2
  189. package/dist/views/Login.js.map +1 -1
  190. package/dist/views/MediaBrowser.d.ts.map +1 -1
  191. package/dist/views/MediaBrowser.js +39 -19
  192. package/dist/views/MediaBrowser.js.map +1 -1
  193. package/dist/views/PageEditor.d.ts.map +1 -1
  194. package/dist/views/PageEditor.js.map +1 -1
  195. package/dist/views/Pages.d.ts.map +1 -1
  196. package/dist/views/Pages.js +20 -10
  197. package/dist/views/Pages.js.map +1 -1
  198. package/dist/views/PostEditor.d.ts.map +1 -1
  199. package/dist/views/PostEditor.js.map +1 -1
  200. package/dist/views/Posts.d.ts.map +1 -1
  201. package/dist/views/Posts.js +13 -7
  202. package/dist/views/Posts.js.map +1 -1
  203. package/dist/views/Redirects.d.ts.map +1 -1
  204. package/dist/views/Redirects.js +17 -5
  205. package/dist/views/Redirects.js.map +1 -1
  206. package/dist/views/ResetPassword.d.ts.map +1 -1
  207. package/dist/views/ResetPassword.js.map +1 -1
  208. package/dist/views/SEO.d.ts.map +1 -1
  209. package/dist/views/SEO.js +39 -16
  210. package/dist/views/SEO.js.map +1 -1
  211. package/dist/views/ScriptTagEditor.d.ts.map +1 -1
  212. package/dist/views/ScriptTagEditor.js +2 -1
  213. package/dist/views/ScriptTagEditor.js.map +1 -1
  214. package/dist/views/ScriptTags.d.ts.map +1 -1
  215. package/dist/views/ScriptTags.js.map +1 -1
  216. package/dist/views/Settings.d.ts.map +1 -1
  217. package/dist/views/Settings.js +38 -11
  218. package/dist/views/Settings.js.map +1 -1
  219. package/dist/views/SetupWizard.d.ts.map +1 -1
  220. package/dist/views/SetupWizard.js.map +1 -1
  221. package/dist/views/Users.d.ts.map +1 -1
  222. package/dist/views/Users.js +5 -3
  223. package/dist/views/Users.js.map +1 -1
  224. package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -1
  225. package/dist/views/page-builder/AIBlockAssist.js +1 -1
  226. package/dist/views/page-builder/AIBlockAssist.js.map +1 -1
  227. package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -1
  228. package/dist/views/page-builder/AIGenerateDialog.js +4 -1
  229. package/dist/views/page-builder/AIGenerateDialog.js.map +1 -1
  230. package/dist/views/page-builder/BlockEditor.d.ts.map +1 -1
  231. package/dist/views/page-builder/BlockEditor.js +94 -3
  232. package/dist/views/page-builder/BlockEditor.js.map +1 -1
  233. package/dist/views/page-builder/BlockPicker.d.ts.map +1 -1
  234. package/dist/views/page-builder/BlockPicker.js.map +1 -1
  235. package/dist/views/page-builder/BottomBar.d.ts.map +1 -1
  236. package/dist/views/page-builder/BottomBar.js.map +1 -1
  237. package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -1
  238. package/dist/views/page-builder/BuilderToolbar.js.map +1 -1
  239. package/dist/views/page-builder/ContextPanel.d.ts.map +1 -1
  240. package/dist/views/page-builder/ContextPanel.js +4 -1
  241. package/dist/views/page-builder/ContextPanel.js.map +1 -1
  242. package/dist/views/page-builder/DesignScore.d.ts.map +1 -1
  243. package/dist/views/page-builder/DesignScore.js.map +1 -1
  244. package/dist/views/page-builder/NodeSettings.d.ts.map +1 -1
  245. package/dist/views/page-builder/NodeSettings.js +1 -1
  246. package/dist/views/page-builder/NodeSettings.js.map +1 -1
  247. package/dist/views/page-builder/PageBuilder.d.ts +1 -1
  248. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  249. package/dist/views/page-builder/PageBuilder.js +25 -3
  250. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  251. package/dist/views/page-builder/PageSettings.d.ts.map +1 -1
  252. package/dist/views/page-builder/PageSettings.js.map +1 -1
  253. package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
  254. package/dist/views/page-builder/PageTemplates.js.map +1 -1
  255. package/dist/views/page-builder/SEOPanel.d.ts.map +1 -1
  256. package/dist/views/page-builder/SEOPanel.js +1 -3
  257. package/dist/views/page-builder/SEOPanel.js.map +1 -1
  258. package/dist/views/page-builder/SavedSections.d.ts.map +1 -1
  259. package/dist/views/page-builder/SavedSections.js +3 -7
  260. package/dist/views/page-builder/SavedSections.js.map +1 -1
  261. package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -1
  262. package/dist/views/page-builder/TemplatePicker.js.map +1 -1
  263. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -1
  264. package/dist/views/page-builder/block-renderers/CTAPreview.js +1 -1
  265. package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -1
  266. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -1
  267. package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
  268. package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -1
  269. package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -1
  270. package/dist/views/page-builder/block-renderers/CodePreview.js +1 -5
  271. package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -1
  272. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -1
  273. package/dist/views/page-builder/block-renderers/FAQPreview.js +4 -1
  274. package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -1
  275. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -1
  276. package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -1
  277. package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -1
  278. package/dist/views/page-builder/block-renderers/FormPreview.js +2 -2
  279. package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -1
  280. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -1
  281. package/dist/views/page-builder/block-renderers/GalleryPreview.js +1 -3
  282. package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -1
  283. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -1
  284. package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -1
  285. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -1
  286. package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -1
  287. package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -1
  288. package/dist/views/page-builder/block-renderers/TextPreview.js +2 -6
  289. package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -1
  290. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -1
  291. package/dist/views/page-builder/block-renderers/VideoPreview.js +2 -5
  292. package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -1
  293. package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -1
  294. package/dist/views/page-builder/block-renderers/index.js.map +1 -1
  295. package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -1
  296. package/dist/views/page-builder/canvas/BlockRenderer.js +1 -5
  297. package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -1
  298. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -1
  299. package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -1
  300. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -1
  301. package/dist/views/page-builder/canvas/ColumnRenderer.js +1 -5
  302. package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -1
  303. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -1
  304. package/dist/views/page-builder/canvas/ContainerRenderer.js +1 -5
  305. package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -1
  306. package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -1
  307. package/dist/views/page-builder/canvas/RowRenderer.js +1 -5
  308. package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -1
  309. package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -1
  310. package/dist/views/page-builder/canvas/SectionRenderer.js +1 -5
  311. package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -1
  312. package/dist/views/page-builder/canvas/index.d.ts.map +1 -1
  313. package/dist/views/page-builder/canvas/index.js.map +1 -1
  314. package/package.json +2 -2
  315. package/src/AdminRoot.tsx +302 -177
  316. package/src/__tests__/lib/search.test.ts +60 -69
  317. package/src/__tests__/lib/utils.test.ts +12 -12
  318. package/src/__tests__/router/match-route.test.ts +24 -26
  319. package/src/__tests__/router/strip-base.test.ts +15 -15
  320. package/src/components/Breadcrumbs.tsx +27 -24
  321. package/src/components/CommandPalette.tsx +115 -99
  322. package/src/components/ContentOverviewChart.tsx +19 -14
  323. package/src/components/ErrorBoundary.tsx +13 -13
  324. package/src/components/FocalPointPicker.tsx +31 -20
  325. package/src/components/FolderTree.tsx +172 -139
  326. package/src/components/LivePreview.tsx +68 -41
  327. package/src/components/LocaleProvider.tsx +26 -20
  328. package/src/components/LocaleSwitcher.tsx +9 -11
  329. package/src/components/MediaPickerModal.tsx +46 -45
  330. package/src/components/PresenceIndicator.tsx +30 -27
  331. package/src/components/SEOPanel.tsx +378 -228
  332. package/src/components/SEOPerformance.tsx +52 -30
  333. package/src/components/ThemeProvider.tsx +46 -46
  334. package/src/components/TipTapEditor.tsx +60 -64
  335. package/src/components/VersionHistory.tsx +63 -52
  336. package/src/components/ui/Avatar.tsx +8 -8
  337. package/src/components/ui/Badge.tsx +7 -5
  338. package/src/components/ui/Button.tsx +24 -13
  339. package/src/components/ui/CommandPalette.tsx +56 -42
  340. package/src/components/ui/ConfirmDialog.tsx +14 -14
  341. package/src/components/ui/DataTable.tsx +37 -39
  342. package/src/components/ui/EmptyState.tsx +9 -11
  343. package/src/components/ui/Modal.tsx +21 -15
  344. package/src/components/ui/Pagination.tsx +34 -19
  345. package/src/components/ui/SearchInput.tsx +17 -7
  346. package/src/components/ui/Skeleton.tsx +7 -7
  347. package/src/components/ui/Toast.tsx +29 -22
  348. package/src/components/ui/index.ts +24 -24
  349. package/src/fields/ArrayField.tsx +43 -25
  350. package/src/fields/BlockBuilderField.tsx +80 -99
  351. package/src/fields/DateField.tsx +20 -12
  352. package/src/fields/FieldRenderer.tsx +34 -34
  353. package/src/fields/GroupField.tsx +8 -10
  354. package/src/fields/MediaField.tsx +8 -10
  355. package/src/fields/NavBuilderField.tsx +24 -25
  356. package/src/fields/NumberField.tsx +21 -14
  357. package/src/fields/RelationshipField.tsx +105 -91
  358. package/src/fields/RichTextField.tsx +16 -12
  359. package/src/fields/SelectField.tsx +42 -34
  360. package/src/fields/SlugField.tsx +29 -17
  361. package/src/fields/TextField.tsx +24 -16
  362. package/src/fields/ToggleField.tsx +7 -9
  363. package/src/fields/block-types.ts +50 -24
  364. package/src/fields/index.ts +17 -17
  365. package/src/hooks/useBuilderState.ts +260 -221
  366. package/src/hooks/useContentLock.ts +23 -20
  367. package/src/hooks/useDebounce.ts +7 -7
  368. package/src/hooks/useKeyboardShortcuts.ts +16 -16
  369. package/src/index.ts +69 -58
  370. package/src/layout/Header.tsx +21 -20
  371. package/src/layout/Layout.tsx +22 -24
  372. package/src/layout/Sidebar.tsx +107 -72
  373. package/src/lib/api.ts +58 -30
  374. package/src/lib/search.ts +30 -34
  375. package/src/lib/useApiData.ts +65 -62
  376. package/src/lib/utils.ts +3 -3
  377. package/src/router/index.ts +33 -35
  378. package/src/styles/build-input.css +2 -2
  379. package/src/styles/tailwind.css +1 -1
  380. package/src/styles/theme.css +7 -1
  381. package/src/views/CollectionList.tsx +275 -121
  382. package/src/views/Dashboard.tsx +164 -117
  383. package/src/views/DocumentEdit.tsx +298 -253
  384. package/src/views/ForgotPassword.tsx +27 -23
  385. package/src/views/FormEditor.tsx +165 -99
  386. package/src/views/FormSubmissions.tsx +261 -117
  387. package/src/views/Forms.tsx +56 -26
  388. package/src/views/Login.tsx +107 -84
  389. package/src/views/MediaBrowser.tsx +717 -523
  390. package/src/views/PageEditor.tsx +44 -46
  391. package/src/views/Pages.tsx +312 -149
  392. package/src/views/PostEditor.tsx +57 -51
  393. package/src/views/Posts.tsx +206 -74
  394. package/src/views/Redirects.tsx +173 -117
  395. package/src/views/ResetPassword.tsx +43 -32
  396. package/src/views/SEO.tsx +589 -160
  397. package/src/views/ScriptTagEditor.tsx +69 -69
  398. package/src/views/ScriptTags.tsx +54 -42
  399. package/src/views/Settings.tsx +430 -220
  400. package/src/views/SetupWizard.tsx +69 -46
  401. package/src/views/Users.tsx +154 -120
  402. package/src/views/page-builder/AIBlockAssist.tsx +21 -25
  403. package/src/views/page-builder/AIGenerateDialog.tsx +134 -127
  404. package/src/views/page-builder/BlockEditor.tsx +258 -81
  405. package/src/views/page-builder/BlockPicker.tsx +73 -88
  406. package/src/views/page-builder/BottomBar.tsx +15 -11
  407. package/src/views/page-builder/BuilderToolbar.tsx +32 -29
  408. package/src/views/page-builder/ContextPanel.tsx +57 -57
  409. package/src/views/page-builder/DesignScore.tsx +52 -59
  410. package/src/views/page-builder/NodeSettings.tsx +59 -59
  411. package/src/views/page-builder/PageBuilder.tsx +164 -146
  412. package/src/views/page-builder/PageSettings.tsx +16 -15
  413. package/src/views/page-builder/PageTemplates.tsx +23 -17
  414. package/src/views/page-builder/SEOPanel.tsx +90 -111
  415. package/src/views/page-builder/SavedSections.tsx +99 -105
  416. package/src/views/page-builder/TemplatePicker.tsx +44 -48
  417. package/src/views/page-builder/block-renderers/CTAPreview.tsx +11 -13
  418. package/src/views/page-builder/block-renderers/CardsPreview.tsx +13 -15
  419. package/src/views/page-builder/block-renderers/CodePreview.tsx +16 -16
  420. package/src/views/page-builder/block-renderers/FAQPreview.tsx +20 -23
  421. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +5 -5
  422. package/src/views/page-builder/block-renderers/FormPreview.tsx +9 -13
  423. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +22 -28
  424. package/src/views/page-builder/block-renderers/HeroPreview.tsx +17 -30
  425. package/src/views/page-builder/block-renderers/ImagePreview.tsx +12 -12
  426. package/src/views/page-builder/block-renderers/TextPreview.tsx +22 -22
  427. package/src/views/page-builder/block-renderers/VideoPreview.tsx +13 -18
  428. package/src/views/page-builder/block-renderers/index.ts +17 -17
  429. package/src/views/page-builder/canvas/BlockRenderer.tsx +19 -23
  430. package/src/views/page-builder/canvas/BuilderCanvas.tsx +17 -20
  431. package/src/views/page-builder/canvas/ColumnRenderer.tsx +22 -26
  432. package/src/views/page-builder/canvas/ContainerRenderer.tsx +20 -24
  433. package/src/views/page-builder/canvas/RowRenderer.tsx +19 -23
  434. package/src/views/page-builder/canvas/SectionRenderer.tsx +30 -34
  435. package/src/views/page-builder/canvas/index.ts +2 -2
@@ -1,79 +1,77 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState, useEffect } from 'react';
4
- import { ArrowLeft, Loader2, AlertTriangle, Trash2, X, Plus } from 'lucide-react';
5
- import { toast } from 'sonner';
6
- import { useApiData } from '../lib/useApiData.js';
7
- import { cmsApi } from '../lib/api.js';
3
+ import { useState, useEffect } from 'react'
4
+ import { ArrowLeft, Loader2, AlertTriangle, Trash2, X, Plus } from 'lucide-react'
5
+ import { toast } from 'sonner'
6
+ import { useApiData } from '../lib/useApiData.js'
7
+ import { cmsApi } from '../lib/api.js'
8
8
 
9
9
  export interface ScriptTagEditorProps {
10
- tagId?: string;
11
- onNavigate?: (path: string) => void;
10
+ tagId?: string
11
+ onNavigate?: (path: string) => void
12
12
  }
13
13
 
14
14
  export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
15
- const isNew = !tagId;
16
- const { data, loading, error } = useApiData<any>(
17
- tagId ? `/script-tags` : null,
18
- );
15
+ const isNew = !tagId
16
+ const { data, loading, error } = useApiData<any>(tagId ? `/script-tags` : null)
19
17
 
20
- const [name, setName] = useState('');
21
- const [code, setCode] = useState('');
22
- const [placement, setPlacement] = useState('head');
23
- const [scope, setScope] = useState('site');
24
- const [targetPaths, setTargetPaths] = useState<string[]>([]);
25
- const [pathInput, setPathInput] = useState('');
26
- const [priority, setPriority] = useState(100);
27
- const [enabled, setEnabled] = useState(true);
28
- const [saving, setSaving] = useState(false);
29
- const [deleting, setDeleting] = useState(false);
30
- const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);
18
+ const [name, setName] = useState('')
19
+ const [code, setCode] = useState('')
20
+ const [placement, setPlacement] = useState('head')
21
+ const [scope, setScope] = useState('site')
22
+ const [targetPaths, setTargetPaths] = useState<string[]>([])
23
+ const [pathInput, setPathInput] = useState('')
24
+ const [priority, setPriority] = useState(100)
25
+ const [enabled, setEnabled] = useState(true)
26
+ const [saving, setSaving] = useState(false)
27
+ const [deleting, setDeleting] = useState(false)
28
+ const [showDeleteConfirm, setShowDeleteConfirm] = useState(false)
31
29
 
32
30
  useEffect(() => {
33
31
  if (data && tagId) {
34
- const tags = Array.isArray(data) ? data : [];
35
- const tag = tags.find((t: any) => t.id === tagId);
32
+ const tags = Array.isArray(data) ? data : []
33
+ const tag = tags.find((t: any) => t.id === tagId)
36
34
  if (tag) {
37
- setName(tag.name ?? '');
38
- setCode(tag.code ?? '');
39
- setPlacement(tag.placement ?? 'head');
40
- setScope(tag.scope ?? 'site');
41
- setTargetPaths(tag.targetPaths ?? []);
42
- setPriority(tag.priority ?? 100);
43
- setEnabled(tag.enabled ?? true);
35
+ setName(tag.name ?? '')
36
+ setCode(tag.code ?? '')
37
+ setPlacement(tag.placement ?? 'head')
38
+ setScope(tag.scope ?? 'site')
39
+ setTargetPaths(tag.targetPaths ?? [])
40
+ setPriority(tag.priority ?? 100)
41
+ setEnabled(tag.enabled ?? true)
44
42
  }
45
43
  }
46
- }, [data, tagId]);
44
+ }, [data, tagId])
47
45
 
48
46
  const addPath = () => {
49
- const trimmed = pathInput.trim();
50
- if (!trimmed) return;
51
- const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
47
+ const trimmed = pathInput.trim()
48
+ if (!trimmed) return
49
+ const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`
52
50
  if (!targetPaths.includes(normalized)) {
53
- setTargetPaths([...targetPaths, normalized]);
51
+ setTargetPaths([...targetPaths, normalized])
54
52
  }
55
- setPathInput('');
56
- };
53
+ setPathInput('')
54
+ }
57
55
 
58
56
  const removePath = (path: string) => {
59
- setTargetPaths(targetPaths.filter((p) => p !== path));
60
- };
57
+ setTargetPaths(targetPaths.filter((p) => p !== path))
58
+ }
61
59
 
62
60
  const handleSave = async () => {
63
61
  if (!name.trim()) {
64
- toast.error('Name is required');
65
- return;
62
+ toast.error('Name is required')
63
+ return
66
64
  }
67
65
  if (!code.trim()) {
68
- toast.error('Code snippet is required');
69
- return;
66
+ toast.error('Code snippet is required')
67
+ return
70
68
  }
71
69
  if (scope !== 'site' && targetPaths.length === 0) {
72
- toast.error('At least one target path is required for this scope');
73
- return;
70
+ toast.error('At least one target path is required for this scope')
71
+ return
74
72
  }
75
73
 
76
- setSaving(true);
74
+ setSaving(true)
77
75
  const payload = {
78
76
  name: name.trim(),
79
77
  code,
@@ -82,40 +80,40 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
82
80
  targetPaths: scope === 'site' ? [] : targetPaths,
83
81
  priority,
84
82
  enabled,
85
- };
83
+ }
86
84
 
87
85
  const res = isNew
88
86
  ? await cmsApi('/script-tags', { method: 'POST', body: JSON.stringify(payload) })
89
- : await cmsApi(`/script-tags/${tagId}`, { method: 'PUT', body: JSON.stringify(payload) });
87
+ : await cmsApi(`/script-tags/${tagId}`, { method: 'PUT', body: JSON.stringify(payload) })
90
88
 
91
- setSaving(false);
89
+ setSaving(false)
92
90
  if (res.error) {
93
- toast.error(res.error);
91
+ toast.error(res.error)
94
92
  } else {
95
- toast.success(isNew ? 'Tag created' : 'Tag updated');
96
- onNavigate?.('/script-tags');
93
+ toast.success(isNew ? 'Tag created' : 'Tag updated')
94
+ onNavigate?.('/script-tags')
97
95
  }
98
- };
96
+ }
99
97
 
100
98
  const handleDelete = async () => {
101
- if (!tagId) return;
102
- setDeleting(true);
103
- const res = await cmsApi(`/script-tags/${tagId}`, { method: 'DELETE' });
104
- setDeleting(false);
99
+ if (!tagId) return
100
+ setDeleting(true)
101
+ const res = await cmsApi(`/script-tags/${tagId}`, { method: 'DELETE' })
102
+ setDeleting(false)
105
103
  if (res.error) {
106
- toast.error(res.error);
104
+ toast.error(res.error)
107
105
  } else {
108
- toast.success('Tag deleted');
109
- onNavigate?.('/script-tags');
106
+ toast.success('Tag deleted')
107
+ onNavigate?.('/script-tags')
110
108
  }
111
- };
109
+ }
112
110
 
113
111
  if (loading && !isNew) {
114
112
  return (
115
113
  <div className="p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64">
116
114
  <Loader2 className="w-6 h-6 animate-spin text-blue-600" />
117
115
  </div>
118
- );
116
+ )
119
117
  }
120
118
 
121
119
  return (
@@ -145,7 +143,8 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
145
143
  <div className="flex items-start gap-2">
146
144
  <AlertTriangle className="w-4 h-4 text-amber-600 mt-0.5 shrink-0" />
147
145
  <p className="text-sm text-amber-800">
148
- This code will run on public pages matching the scope below. Only add trusted code from verified sources (e.g. Google Analytics, Meta Pixel).
146
+ This code will run on public pages matching the scope below. Only add trusted code from
147
+ verified sources (e.g. Google Analytics, Meta Pixel).
149
148
  </p>
150
149
  </div>
151
150
  </div>
@@ -196,7 +195,8 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
196
195
  <p className="mt-1 text-xs text-gray-500">
197
196
  {placement === 'head' && 'Best for analytics scripts, meta tags, and custom CSS.'}
198
197
  {placement === 'body_open' && 'Best for GTM noscript tags and early-loading scripts.'}
199
- {placement === 'body_close' && 'Best for chat widgets, deferred scripts, and tracking pixels.'}
198
+ {placement === 'body_close' &&
199
+ 'Best for chat widgets, deferred scripts, and tracking pixels.'}
200
200
  </p>
201
201
  </div>
202
202
 
@@ -225,8 +225,8 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
225
225
  onChange={(e) => setPathInput(e.target.value)}
226
226
  onKeyDown={(e) => {
227
227
  if (e.key === 'Enter') {
228
- e.preventDefault();
229
- addPath();
228
+ e.preventDefault()
229
+ addPath()
230
230
  }
231
231
  }}
232
232
  placeholder="/services"
@@ -357,5 +357,5 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
357
357
  </div>
358
358
  </div>
359
359
  </div>
360
- );
360
+ )
361
361
  }
@@ -1,81 +1,81 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState } from 'react';
4
- import { Code2, Plus, Loader2, AlertTriangle } from 'lucide-react';
5
- import { toast } from 'sonner';
6
- import { useApiData } from '../lib/useApiData.js';
7
- import { cmsApi } from '../lib/api.js';
3
+ import { useState } from 'react'
4
+ import { Code2, Plus, Loader2, AlertTriangle } from 'lucide-react'
5
+ import { toast } from 'sonner'
6
+ import { useApiData } from '../lib/useApiData.js'
7
+ import { cmsApi } from '../lib/api.js'
8
8
 
9
9
  interface ScriptTag {
10
- id: string;
11
- name: string;
12
- code: string;
13
- placement: string;
14
- scope: string;
15
- targetPaths: string[];
16
- priority: number;
17
- enabled: boolean;
18
- createdAt: string;
19
- updatedAt: string;
10
+ id: string
11
+ name: string
12
+ code: string
13
+ placement: string
14
+ scope: string
15
+ targetPaths: string[]
16
+ priority: number
17
+ enabled: boolean
18
+ createdAt: string
19
+ updatedAt: string
20
20
  }
21
21
 
22
22
  export interface ScriptTagsProps {
23
- onNavigate?: (path: string) => void;
23
+ onNavigate?: (path: string) => void
24
24
  }
25
25
 
26
26
  const PLACEMENT_LABELS: Record<string, string> = {
27
27
  head: 'Head',
28
28
  body_open: 'Body Open',
29
29
  body_close: 'Body Close',
30
- };
30
+ }
31
31
 
32
32
  const PLACEMENT_COLORS: Record<string, string> = {
33
33
  head: 'bg-purple-100 text-purple-700',
34
34
  body_open: 'bg-blue-100 text-blue-700',
35
35
  body_close: 'bg-green-100 text-green-700',
36
- };
36
+ }
37
37
 
38
38
  function scopeLabel(tag: ScriptTag): string {
39
- const scope = String(tag.scope ?? '');
40
- const targetPaths = Array.isArray(tag.targetPaths) ? tag.targetPaths : [];
41
- if (scope === 'site') return 'Entire Site';
39
+ const scope = String(tag.scope ?? '')
40
+ const targetPaths = Array.isArray(tag.targetPaths) ? tag.targetPaths : []
41
+ if (scope === 'site') return 'Entire Site'
42
42
  if (scope === 'parents') {
43
- const count = targetPaths.length;
44
- return `${count} parent path${count !== 1 ? 's' : ''} + children`;
43
+ const count = targetPaths.length
44
+ return `${count} parent path${count !== 1 ? 's' : ''} + children`
45
45
  }
46
46
  if (scope === 'urls') {
47
- const count = targetPaths.length;
48
- return `${count} URL${count !== 1 ? 's' : ''}`;
47
+ const count = targetPaths.length
48
+ return `${count} URL${count !== 1 ? 's' : ''}`
49
49
  }
50
- return scope || 'Custom';
50
+ return scope || 'Custom'
51
51
  }
52
52
 
53
53
  export function ScriptTags({ onNavigate }: ScriptTagsProps) {
54
- const { data, loading, error, refetch } = useApiData<ScriptTag[]>('/script-tags');
55
- const [togglingId, setTogglingId] = useState<string | null>(null);
54
+ const { data, loading, error, refetch } = useApiData<ScriptTag[]>('/script-tags')
55
+ const [togglingId, setTogglingId] = useState<string | null>(null)
56
56
 
57
- const tags = data ?? [];
57
+ const tags = data ?? []
58
58
 
59
59
  const toggleEnabled = async (tag: ScriptTag) => {
60
- setTogglingId(tag.id);
60
+ setTogglingId(tag.id)
61
61
  const res = await cmsApi(`/script-tags/${tag.id}`, {
62
62
  method: 'PUT',
63
63
  body: JSON.stringify({ enabled: !tag.enabled }),
64
- });
65
- setTogglingId(null);
64
+ })
65
+ setTogglingId(null)
66
66
  if (res.error) {
67
- toast.error(res.error);
67
+ toast.error(res.error)
68
68
  } else {
69
- refetch();
69
+ refetch()
70
70
  }
71
- };
71
+ }
72
72
 
73
73
  if (loading) {
74
74
  return (
75
75
  <div className="p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64">
76
76
  <Loader2 className="w-6 h-6 animate-spin text-blue-600" />
77
77
  </div>
78
- );
78
+ )
79
79
  }
80
80
 
81
81
  return (
@@ -84,14 +84,21 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
84
84
  <div className="mb-4 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3">
85
85
  <AlertTriangle className="w-5 h-5 text-red-600 shrink-0" />
86
86
  <span className="text-sm text-red-800 flex-1">{error}</span>
87
- <button onClick={refetch} className="px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors">Retry</button>
87
+ <button
88
+ onClick={refetch}
89
+ className="px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors"
90
+ >
91
+ Retry
92
+ </button>
88
93
  </div>
89
94
  )}
90
95
 
91
96
  <div className="mb-4 flex items-center justify-between">
92
97
  <div>
93
98
  <h1 className="mb-1 text-2xl font-semibold text-gray-900">Script Tags</h1>
94
- <p className="text-sm text-gray-600">Manage tracking codes, analytics, and custom scripts injected into your site</p>
99
+ <p className="text-sm text-gray-600">
100
+ Manage tracking codes, analytics, and custom scripts injected into your site
101
+ </p>
95
102
  </div>
96
103
  <button
97
104
  type="button"
@@ -133,7 +140,10 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
133
140
  </thead>
134
141
  <tbody>
135
142
  {tags.map((tag) => (
136
- <tr key={tag.id} className="border-b border-gray-100 last:border-0 hover:bg-gray-50 transition-colors">
143
+ <tr
144
+ key={tag.id}
145
+ className="border-b border-gray-100 last:border-0 hover:bg-gray-50 transition-colors"
146
+ >
137
147
  <td className="px-4 py-3">
138
148
  <button
139
149
  type="button"
@@ -144,7 +154,9 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
144
154
  </button>
145
155
  </td>
146
156
  <td className="px-4 py-3">
147
- <span className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${PLACEMENT_COLORS[tag.placement] ?? 'bg-gray-100 text-gray-700'}`}>
157
+ <span
158
+ className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${PLACEMENT_COLORS[tag.placement] ?? 'bg-gray-100 text-gray-700'}`}
159
+ >
148
160
  {PLACEMENT_LABELS[tag.placement] ?? tag.placement}
149
161
  </span>
150
162
  </td>
@@ -172,5 +184,5 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
172
184
  </div>
173
185
  )}
174
186
  </div>
175
- );
187
+ )
176
188
  }