@actuate-media/cms-admin 0.8.0 → 0.8.2

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 (433) 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/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.js.map +1 -1
  155. package/dist/lib/search.d.ts.map +1 -1
  156. package/dist/lib/search.js +3 -5
  157. package/dist/lib/search.js.map +1 -1
  158. package/dist/lib/useApiData.d.ts.map +1 -1
  159. package/dist/lib/useApiData.js.map +1 -1
  160. package/dist/lib/utils.d.ts.map +1 -1
  161. package/dist/lib/utils.js.map +1 -1
  162. package/dist/router/index.d.ts.map +1 -1
  163. package/dist/router/index.js +1 -3
  164. package/dist/router/index.js.map +1 -1
  165. package/dist/views/CollectionList.d.ts.map +1 -1
  166. package/dist/views/CollectionList.js +56 -17
  167. package/dist/views/CollectionList.js.map +1 -1
  168. package/dist/views/Dashboard.d.ts.map +1 -1
  169. package/dist/views/Dashboard.js +26 -13
  170. package/dist/views/Dashboard.js.map +1 -1
  171. package/dist/views/DocumentEdit.d.ts +1 -1
  172. package/dist/views/DocumentEdit.d.ts.map +1 -1
  173. package/dist/views/DocumentEdit.js +33 -15
  174. package/dist/views/DocumentEdit.js.map +1 -1
  175. package/dist/views/ForgotPassword.d.ts.map +1 -1
  176. package/dist/views/ForgotPassword.js.map +1 -1
  177. package/dist/views/FormEditor.d.ts.map +1 -1
  178. package/dist/views/FormEditor.js +8 -2
  179. package/dist/views/FormEditor.js.map +1 -1
  180. package/dist/views/FormSubmissions.d.ts.map +1 -1
  181. package/dist/views/FormSubmissions.js +6 -6
  182. package/dist/views/FormSubmissions.js.map +1 -1
  183. package/dist/views/Forms.d.ts.map +1 -1
  184. package/dist/views/Forms.js.map +1 -1
  185. package/dist/views/Login.d.ts.map +1 -1
  186. package/dist/views/Login.js +5 -2
  187. package/dist/views/Login.js.map +1 -1
  188. package/dist/views/MediaBrowser.d.ts.map +1 -1
  189. package/dist/views/MediaBrowser.js +39 -19
  190. package/dist/views/MediaBrowser.js.map +1 -1
  191. package/dist/views/PageEditor.d.ts.map +1 -1
  192. package/dist/views/PageEditor.js.map +1 -1
  193. package/dist/views/Pages.d.ts.map +1 -1
  194. package/dist/views/Pages.js +20 -10
  195. package/dist/views/Pages.js.map +1 -1
  196. package/dist/views/PostEditor.d.ts.map +1 -1
  197. package/dist/views/PostEditor.js.map +1 -1
  198. package/dist/views/Posts.d.ts.map +1 -1
  199. package/dist/views/Posts.js +13 -7
  200. package/dist/views/Posts.js.map +1 -1
  201. package/dist/views/Redirects.d.ts.map +1 -1
  202. package/dist/views/Redirects.js +17 -5
  203. package/dist/views/Redirects.js.map +1 -1
  204. package/dist/views/ResetPassword.d.ts.map +1 -1
  205. package/dist/views/ResetPassword.js.map +1 -1
  206. package/dist/views/SEO.d.ts.map +1 -1
  207. package/dist/views/SEO.js +40 -17
  208. package/dist/views/SEO.js.map +1 -1
  209. package/dist/views/ScriptTagEditor.d.ts.map +1 -1
  210. package/dist/views/ScriptTagEditor.js +2 -1
  211. package/dist/views/ScriptTagEditor.js.map +1 -1
  212. package/dist/views/ScriptTags.d.ts.map +1 -1
  213. package/dist/views/ScriptTags.js.map +1 -1
  214. package/dist/views/Settings.d.ts.map +1 -1
  215. package/dist/views/Settings.js +38 -11
  216. package/dist/views/Settings.js.map +1 -1
  217. package/dist/views/SetupWizard.d.ts.map +1 -1
  218. package/dist/views/SetupWizard.js.map +1 -1
  219. package/dist/views/Users.d.ts.map +1 -1
  220. package/dist/views/Users.js +5 -3
  221. package/dist/views/Users.js.map +1 -1
  222. package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -1
  223. package/dist/views/page-builder/AIBlockAssist.js +1 -1
  224. package/dist/views/page-builder/AIBlockAssist.js.map +1 -1
  225. package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -1
  226. package/dist/views/page-builder/AIGenerateDialog.js +4 -1
  227. package/dist/views/page-builder/AIGenerateDialog.js.map +1 -1
  228. package/dist/views/page-builder/BlockEditor.d.ts.map +1 -1
  229. package/dist/views/page-builder/BlockEditor.js +1 -1
  230. package/dist/views/page-builder/BlockEditor.js.map +1 -1
  231. package/dist/views/page-builder/BlockPicker.d.ts.map +1 -1
  232. package/dist/views/page-builder/BlockPicker.js.map +1 -1
  233. package/dist/views/page-builder/BottomBar.d.ts.map +1 -1
  234. package/dist/views/page-builder/BottomBar.js.map +1 -1
  235. package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -1
  236. package/dist/views/page-builder/BuilderToolbar.js.map +1 -1
  237. package/dist/views/page-builder/ContextPanel.d.ts.map +1 -1
  238. package/dist/views/page-builder/ContextPanel.js +4 -1
  239. package/dist/views/page-builder/ContextPanel.js.map +1 -1
  240. package/dist/views/page-builder/DesignScore.d.ts.map +1 -1
  241. package/dist/views/page-builder/DesignScore.js.map +1 -1
  242. package/dist/views/page-builder/NodeSettings.d.ts.map +1 -1
  243. package/dist/views/page-builder/NodeSettings.js +1 -1
  244. package/dist/views/page-builder/NodeSettings.js.map +1 -1
  245. package/dist/views/page-builder/PageBuilder.d.ts +1 -1
  246. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  247. package/dist/views/page-builder/PageBuilder.js +4 -2
  248. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  249. package/dist/views/page-builder/PageSettings.d.ts.map +1 -1
  250. package/dist/views/page-builder/PageSettings.js.map +1 -1
  251. package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
  252. package/dist/views/page-builder/PageTemplates.js.map +1 -1
  253. package/dist/views/page-builder/SEOPanel.d.ts.map +1 -1
  254. package/dist/views/page-builder/SEOPanel.js +1 -3
  255. package/dist/views/page-builder/SEOPanel.js.map +1 -1
  256. package/dist/views/page-builder/SavedSections.d.ts.map +1 -1
  257. package/dist/views/page-builder/SavedSections.js +3 -7
  258. package/dist/views/page-builder/SavedSections.js.map +1 -1
  259. package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -1
  260. package/dist/views/page-builder/TemplatePicker.js.map +1 -1
  261. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -1
  262. package/dist/views/page-builder/block-renderers/CTAPreview.js +1 -1
  263. package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -1
  264. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -1
  265. package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
  266. package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -1
  267. package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -1
  268. package/dist/views/page-builder/block-renderers/CodePreview.js +1 -5
  269. package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -1
  270. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -1
  271. package/dist/views/page-builder/block-renderers/FAQPreview.js +4 -1
  272. package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -1
  273. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -1
  274. package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -1
  275. package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -1
  276. package/dist/views/page-builder/block-renderers/FormPreview.js +2 -2
  277. package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -1
  278. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -1
  279. package/dist/views/page-builder/block-renderers/GalleryPreview.js +1 -3
  280. package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -1
  281. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -1
  282. package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -1
  283. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -1
  284. package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -1
  285. package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -1
  286. package/dist/views/page-builder/block-renderers/TextPreview.js +2 -6
  287. package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -1
  288. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -1
  289. package/dist/views/page-builder/block-renderers/VideoPreview.js +2 -5
  290. package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -1
  291. package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -1
  292. package/dist/views/page-builder/block-renderers/index.js.map +1 -1
  293. package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -1
  294. package/dist/views/page-builder/canvas/BlockRenderer.js +1 -5
  295. package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -1
  296. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -1
  297. package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -1
  298. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -1
  299. package/dist/views/page-builder/canvas/ColumnRenderer.js +1 -5
  300. package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -1
  301. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -1
  302. package/dist/views/page-builder/canvas/ContainerRenderer.js +1 -5
  303. package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -1
  304. package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -1
  305. package/dist/views/page-builder/canvas/RowRenderer.js +1 -5
  306. package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -1
  307. package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -1
  308. package/dist/views/page-builder/canvas/SectionRenderer.js +1 -5
  309. package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -1
  310. package/dist/views/page-builder/canvas/index.d.ts.map +1 -1
  311. package/dist/views/page-builder/canvas/index.js.map +1 -1
  312. package/package.json +2 -2
  313. package/src/AdminRoot.tsx +263 -191
  314. package/src/__tests__/lib/search.test.ts +60 -69
  315. package/src/__tests__/lib/utils.test.ts +12 -12
  316. package/src/__tests__/router/match-route.test.ts +24 -26
  317. package/src/__tests__/router/strip-base.test.ts +15 -15
  318. package/src/components/Breadcrumbs.tsx +27 -24
  319. package/src/components/CommandPalette.tsx +115 -99
  320. package/src/components/ContentOverviewChart.tsx +19 -14
  321. package/src/components/ErrorBoundary.tsx +13 -13
  322. package/src/components/FocalPointPicker.tsx +31 -20
  323. package/src/components/FolderTree.tsx +172 -139
  324. package/src/components/LivePreview.tsx +68 -41
  325. package/src/components/LocaleProvider.tsx +26 -20
  326. package/src/components/LocaleSwitcher.tsx +9 -11
  327. package/src/components/MediaPickerModal.tsx +46 -45
  328. package/src/components/PresenceIndicator.tsx +30 -27
  329. package/src/components/SEOPanel.tsx +378 -228
  330. package/src/components/SEOPerformance.tsx +52 -30
  331. package/src/components/ThemeProvider.tsx +46 -46
  332. package/src/components/TipTapEditor.tsx +60 -64
  333. package/src/components/VersionHistory.tsx +63 -52
  334. package/src/components/ui/Avatar.tsx +8 -8
  335. package/src/components/ui/Badge.tsx +7 -5
  336. package/src/components/ui/Button.tsx +24 -13
  337. package/src/components/ui/CommandPalette.tsx +56 -42
  338. package/src/components/ui/ConfirmDialog.tsx +14 -14
  339. package/src/components/ui/DataTable.tsx +37 -39
  340. package/src/components/ui/EmptyState.tsx +9 -11
  341. package/src/components/ui/Modal.tsx +21 -15
  342. package/src/components/ui/Pagination.tsx +34 -19
  343. package/src/components/ui/SearchInput.tsx +17 -7
  344. package/src/components/ui/Skeleton.tsx +7 -7
  345. package/src/components/ui/Toast.tsx +29 -22
  346. package/src/components/ui/index.ts +24 -24
  347. package/src/fields/ArrayField.tsx +43 -25
  348. package/src/fields/BlockBuilderField.tsx +80 -99
  349. package/src/fields/DateField.tsx +20 -12
  350. package/src/fields/FieldRenderer.tsx +34 -34
  351. package/src/fields/GroupField.tsx +8 -10
  352. package/src/fields/MediaField.tsx +8 -10
  353. package/src/fields/NavBuilderField.tsx +24 -25
  354. package/src/fields/NumberField.tsx +21 -14
  355. package/src/fields/RelationshipField.tsx +105 -91
  356. package/src/fields/RichTextField.tsx +16 -12
  357. package/src/fields/SelectField.tsx +42 -34
  358. package/src/fields/SlugField.tsx +29 -17
  359. package/src/fields/TextField.tsx +24 -16
  360. package/src/fields/ToggleField.tsx +7 -9
  361. package/src/fields/block-types.ts +50 -24
  362. package/src/fields/index.ts +17 -17
  363. package/src/hooks/useBuilderState.ts +260 -221
  364. package/src/hooks/useContentLock.ts +23 -20
  365. package/src/hooks/useDebounce.ts +7 -7
  366. package/src/hooks/useKeyboardShortcuts.ts +16 -16
  367. package/src/index.ts +69 -58
  368. package/src/layout/Header.tsx +21 -20
  369. package/src/layout/Layout.tsx +22 -24
  370. package/src/layout/Sidebar.tsx +107 -72
  371. package/src/lib/api.ts +34 -34
  372. package/src/lib/search.ts +30 -34
  373. package/src/lib/useApiData.ts +65 -62
  374. package/src/lib/utils.ts +3 -3
  375. package/src/router/index.ts +33 -35
  376. package/src/styles/build-input.css +2 -2
  377. package/src/styles/tailwind.css +1 -1
  378. package/src/styles/theme.css +26 -2
  379. package/src/views/CollectionList.tsx +275 -121
  380. package/src/views/Dashboard.tsx +164 -117
  381. package/src/views/DocumentEdit.tsx +298 -253
  382. package/src/views/ForgotPassword.tsx +27 -23
  383. package/src/views/FormEditor.tsx +165 -99
  384. package/src/views/FormSubmissions.tsx +261 -117
  385. package/src/views/Forms.tsx +56 -26
  386. package/src/views/Login.tsx +107 -84
  387. package/src/views/MediaBrowser.tsx +717 -523
  388. package/src/views/PageEditor.tsx +44 -46
  389. package/src/views/Pages.tsx +312 -149
  390. package/src/views/PostEditor.tsx +57 -51
  391. package/src/views/Posts.tsx +206 -74
  392. package/src/views/Redirects.tsx +173 -117
  393. package/src/views/ResetPassword.tsx +43 -32
  394. package/src/views/SEO.tsx +607 -160
  395. package/src/views/ScriptTagEditor.tsx +69 -69
  396. package/src/views/ScriptTags.tsx +54 -42
  397. package/src/views/Settings.tsx +430 -220
  398. package/src/views/SetupWizard.tsx +69 -46
  399. package/src/views/Users.tsx +154 -120
  400. package/src/views/page-builder/AIBlockAssist.tsx +21 -25
  401. package/src/views/page-builder/AIGenerateDialog.tsx +134 -127
  402. package/src/views/page-builder/BlockEditor.tsx +94 -96
  403. package/src/views/page-builder/BlockPicker.tsx +73 -88
  404. package/src/views/page-builder/BottomBar.tsx +15 -11
  405. package/src/views/page-builder/BuilderToolbar.tsx +32 -29
  406. package/src/views/page-builder/ContextPanel.tsx +57 -57
  407. package/src/views/page-builder/DesignScore.tsx +52 -59
  408. package/src/views/page-builder/NodeSettings.tsx +59 -59
  409. package/src/views/page-builder/PageBuilder.tsx +156 -155
  410. package/src/views/page-builder/PageSettings.tsx +16 -15
  411. package/src/views/page-builder/PageTemplates.tsx +23 -17
  412. package/src/views/page-builder/SEOPanel.tsx +90 -111
  413. package/src/views/page-builder/SavedSections.tsx +99 -105
  414. package/src/views/page-builder/TemplatePicker.tsx +44 -48
  415. package/src/views/page-builder/block-renderers/CTAPreview.tsx +11 -13
  416. package/src/views/page-builder/block-renderers/CardsPreview.tsx +13 -15
  417. package/src/views/page-builder/block-renderers/CodePreview.tsx +16 -16
  418. package/src/views/page-builder/block-renderers/FAQPreview.tsx +20 -23
  419. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +5 -5
  420. package/src/views/page-builder/block-renderers/FormPreview.tsx +9 -13
  421. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +22 -28
  422. package/src/views/page-builder/block-renderers/HeroPreview.tsx +17 -30
  423. package/src/views/page-builder/block-renderers/ImagePreview.tsx +12 -12
  424. package/src/views/page-builder/block-renderers/TextPreview.tsx +22 -22
  425. package/src/views/page-builder/block-renderers/VideoPreview.tsx +13 -18
  426. package/src/views/page-builder/block-renderers/index.ts +17 -17
  427. package/src/views/page-builder/canvas/BlockRenderer.tsx +19 -23
  428. package/src/views/page-builder/canvas/BuilderCanvas.tsx +17 -20
  429. package/src/views/page-builder/canvas/ColumnRenderer.tsx +22 -26
  430. package/src/views/page-builder/canvas/ContainerRenderer.tsx +20 -24
  431. package/src/views/page-builder/canvas/RowRenderer.tsx +19 -23
  432. package/src/views/page-builder/canvas/SectionRenderer.tsx +30 -34
  433. package/src/views/page-builder/canvas/index.ts +2 -2
@@ -1,14 +1,14 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState, useMemo } from 'react';
4
- import { analyzeSEO } from '@actuate-media/cms-core';
3
+ import { useState, useMemo } from 'react'
4
+ import { analyzeSEO } from '@actuate-media/cms-core'
5
5
  import type {
6
6
  PageNode,
7
7
  BuilderSEOAnalysis,
8
8
  BuilderSEOCheck,
9
9
  BuilderReadabilityResult,
10
- } from '@actuate-media/cms-core';
11
- import type { PageSettings } from '../../hooks/useBuilderState.js';
10
+ } from '@actuate-media/cms-core'
11
+ import type { PageSettings } from '../../hooks/useBuilderState.js'
12
12
  import {
13
13
  CheckCircle2,
14
14
  AlertCircle,
@@ -23,61 +23,56 @@ import {
23
23
  BarChart3,
24
24
  Target,
25
25
  Eye,
26
- } from 'lucide-react';
26
+ } from 'lucide-react'
27
27
 
28
28
  export interface BuilderSEOPanelProps {
29
- tree: PageNode;
30
- pageSettings: PageSettings;
31
- onPageSettingsChange: (settings: Partial<PageSettings>) => void;
32
- selectedNodeId: string | null;
29
+ tree: PageNode
30
+ pageSettings: PageSettings
31
+ onPageSettingsChange: (settings: Partial<PageSettings>) => void
32
+ selectedNodeId: string | null
33
33
  }
34
34
 
35
35
  function getScoreColor(score: number): string {
36
- if (score >= 70) return 'text-green-500';
37
- if (score >= 40) return 'text-amber-500';
38
- return 'text-red-500';
36
+ if (score >= 70) return 'text-green-500'
37
+ if (score >= 40) return 'text-amber-500'
38
+ return 'text-red-500'
39
39
  }
40
40
 
41
41
  function getRingStrokeColor(score: number): string {
42
- if (score >= 70) return 'rgb(34, 197, 94)';
43
- if (score >= 40) return 'rgb(245, 158, 11)';
44
- return 'rgb(239, 68, 68)';
42
+ if (score >= 70) return 'rgb(34, 197, 94)'
43
+ if (score >= 40) return 'rgb(245, 158, 11)'
44
+ return 'rgb(239, 68, 68)'
45
45
  }
46
46
 
47
47
  function getScoreLabel(score: number): string {
48
- if (score >= 80) return 'Excellent';
49
- if (score >= 70) return 'Good';
50
- if (score >= 50) return 'Needs Work';
51
- return 'Poor';
48
+ if (score >= 80) return 'Excellent'
49
+ if (score >= 70) return 'Good'
50
+ if (score >= 50) return 'Needs Work'
51
+ return 'Poor'
52
52
  }
53
53
 
54
54
  function StatusIcon({ status }: { status: BuilderSEOCheck['status'] }) {
55
55
  switch (status) {
56
56
  case 'good':
57
- return <CheckCircle2 size={14} className="text-green-500 shrink-0" />;
57
+ return <CheckCircle2 size={14} className="text-green-500 shrink-0" />
58
58
  case 'warning':
59
- return <AlertCircle size={14} className="text-amber-500 shrink-0" />;
59
+ return <AlertCircle size={14} className="text-amber-500 shrink-0" />
60
60
  case 'error':
61
- return <XCircle size={14} className="text-red-500 shrink-0" />;
61
+ return <XCircle size={14} className="text-red-500 shrink-0" />
62
62
  }
63
63
  }
64
64
 
65
65
  function ScoreRing({ score }: { score: number }) {
66
- const radius = 32;
67
- const strokeWidth = 6;
68
- const circumference = 2 * Math.PI * radius;
69
- const progress = Math.min(score, 100) / 100;
70
- const dashOffset = circumference * (1 - progress);
71
- const size = (radius + strokeWidth) * 2;
66
+ const radius = 32
67
+ const strokeWidth = 6
68
+ const circumference = 2 * Math.PI * radius
69
+ const progress = Math.min(score, 100) / 100
70
+ const dashOffset = circumference * (1 - progress)
71
+ const size = (radius + strokeWidth) * 2
72
72
 
73
73
  return (
74
74
  <div className="relative">
75
- <svg
76
- width={size}
77
- height={size}
78
- viewBox={`0 0 ${size} ${size}`}
79
- className="-rotate-90"
80
- >
75
+ <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className="-rotate-90">
81
76
  <circle
82
77
  cx={size / 2}
83
78
  cy={size / 2}
@@ -100,18 +95,16 @@ function ScoreRing({ score }: { score: number }) {
100
95
  />
101
96
  </svg>
102
97
  <div className="absolute inset-0 flex items-center justify-center">
103
- <span className={`text-lg font-medium ${getScoreColor(score)}`}>
104
- {score}
105
- </span>
98
+ <span className={`text-lg font-medium ${getScoreColor(score)}`}>{score}</span>
106
99
  </div>
107
100
  </div>
108
- );
101
+ )
109
102
  }
110
103
 
111
104
  function ScoreSummary({ checks }: { checks: BuilderSEOCheck[] }) {
112
- const passed = checks.filter((c) => c.status === 'good').length;
113
- const warnings = checks.filter((c) => c.status === 'warning').length;
114
- const errors = checks.filter((c) => c.status === 'error').length;
105
+ const passed = checks.filter((c) => c.status === 'good').length
106
+ const warnings = checks.filter((c) => c.status === 'warning').length
107
+ const errors = checks.filter((c) => c.status === 'error').length
115
108
 
116
109
  return (
117
110
  <div className="flex flex-col gap-1">
@@ -128,7 +121,7 @@ function ScoreSummary({ checks }: { checks: BuilderSEOCheck[] }) {
128
121
  <span className="text-xs text-muted-foreground">{errors} issues</span>
129
122
  </div>
130
123
  </div>
131
- );
124
+ )
132
125
  }
133
126
 
134
127
  function CollapsibleSection({
@@ -138,11 +131,11 @@ function CollapsibleSection({
138
131
  onToggle,
139
132
  children,
140
133
  }: {
141
- title: string;
142
- icon: typeof Search;
143
- expanded: boolean;
144
- onToggle: () => void;
145
- children: React.ReactNode;
134
+ title: string
135
+ icon: typeof Search
136
+ expanded: boolean
137
+ onToggle: () => void
138
+ children: React.ReactNode
146
139
  }) {
147
140
  return (
148
141
  <div className="border-b border-border last:border-b-0">
@@ -164,7 +157,7 @@ function CollapsibleSection({
164
157
  </button>
165
158
  {expanded && <div className="px-4 pb-4">{children}</div>}
166
159
  </div>
167
- );
160
+ )
168
161
  }
169
162
 
170
163
  function SEOChecksList({ checks }: { checks: BuilderSEOCheck[] }) {
@@ -180,15 +173,16 @@ function SEOChecksList({ checks }: { checks: BuilderSEOCheck[] }) {
180
173
  </div>
181
174
  ))}
182
175
  </div>
183
- );
176
+ )
184
177
  }
185
178
 
186
179
  function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResult }) {
187
- const fleschLabel = readability.fleschScore >= 60
188
- ? 'Easy'
189
- : readability.fleschScore >= 30
190
- ? 'Moderate'
191
- : 'Difficult';
180
+ const fleschLabel =
181
+ readability.fleschScore >= 60
182
+ ? 'Easy'
183
+ : readability.fleschScore >= 30
184
+ ? 'Moderate'
185
+ : 'Difficult'
192
186
 
193
187
  return (
194
188
  <div className="grid grid-cols-2 gap-3">
@@ -208,9 +202,7 @@ function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResul
208
202
  <Type size={12} className="text-muted-foreground" />
209
203
  <span className="text-xs text-muted-foreground">Word Count</span>
210
204
  </div>
211
- <span className="text-sm font-medium text-foreground">
212
- {readability.wordCount}
213
- </span>
205
+ <span className="text-sm font-medium text-foreground">{readability.wordCount}</span>
214
206
  <span className="text-xs text-muted-foreground">
215
207
  {readability.wordCount >= 300 ? 'Good length' : 'Short'}
216
208
  </span>
@@ -234,15 +226,11 @@ function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResul
234
226
  <Clock size={12} className="text-muted-foreground" />
235
227
  <span className="text-xs text-muted-foreground">Reading Time</span>
236
228
  </div>
237
- <span className="text-sm font-medium text-foreground">
238
- {readability.readingTime} min
239
- </span>
240
- <span className="text-xs text-muted-foreground">
241
- ~{readability.wordCount} words
242
- </span>
229
+ <span className="text-sm font-medium text-foreground">{readability.readingTime} min</span>
230
+ <span className="text-xs text-muted-foreground">~{readability.wordCount} words</span>
243
231
  </div>
244
232
  </div>
245
- );
233
+ )
246
234
  }
247
235
 
248
236
  function PerBlockHints({ hints }: { hints: BuilderSEOCheck[] }) {
@@ -258,25 +246,27 @@ function PerBlockHints({ hints }: { hints: BuilderSEOCheck[] }) {
258
246
  </div>
259
247
  ))}
260
248
  </div>
261
- );
249
+ )
262
250
  }
263
251
 
264
252
  function BasicSEOFields({
265
253
  pageSettings,
266
254
  onPageSettingsChange,
267
255
  }: {
268
- pageSettings: PageSettings;
269
- onPageSettingsChange: (settings: Partial<PageSettings>) => void;
256
+ pageSettings: PageSettings
257
+ onPageSettingsChange: (settings: Partial<PageSettings>) => void
270
258
  }) {
271
- const metaTitleLength = (pageSettings.metaTitle || '').length;
272
- const metaDescLength = (pageSettings.metaDescription || '').length;
259
+ const metaTitleLength = (pageSettings.metaTitle || '').length
260
+ const metaDescLength = (pageSettings.metaDescription || '').length
273
261
 
274
262
  return (
275
263
  <div className="flex flex-col gap-4">
276
264
  <div className="flex flex-col gap-1.5">
277
265
  <div className="flex items-center justify-between">
278
266
  <label className="text-xs font-medium text-foreground">Meta Title</label>
279
- <span className={`text-xs ${metaTitleLength > 60 ? 'text-red-500' : metaTitleLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}>
267
+ <span
268
+ className={`text-xs ${metaTitleLength > 60 ? 'text-red-500' : metaTitleLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}
269
+ >
280
270
  {metaTitleLength}/60
281
271
  </span>
282
272
  </div>
@@ -292,7 +282,9 @@ function BasicSEOFields({
292
282
  <div className="flex flex-col gap-1.5">
293
283
  <div className="flex items-center justify-between">
294
284
  <label className="text-xs font-medium text-foreground">Meta Description</label>
295
- <span className={`text-xs ${metaDescLength > 160 ? 'text-red-500' : metaDescLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}>
285
+ <span
286
+ className={`text-xs ${metaDescLength > 160 ? 'text-red-500' : metaDescLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}
287
+ >
296
288
  {metaDescLength}/160
297
289
  </span>
298
290
  </div>
@@ -316,46 +308,36 @@ function BasicSEOFields({
316
308
  />
317
309
  </div>
318
310
  </div>
319
- );
311
+ )
320
312
  }
321
313
 
322
314
  function SearchPreview({ pageSettings }: { pageSettings: PageSettings }) {
323
- const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page';
324
- const description = pageSettings.metaDescription || 'No description set';
325
- const slug = pageSettings.slug || 'page';
315
+ const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
316
+ const description = pageSettings.metaDescription || 'No description set'
317
+ const slug = pageSettings.slug || 'page'
326
318
 
327
319
  return (
328
320
  <div className="bg-background rounded-md border border-border p-4">
329
321
  <p className="text-xs text-muted-foreground mb-2">Google Search Preview</p>
330
322
  <div className="flex flex-col gap-1">
331
- <p className="text-sm text-primary truncate">
332
- {title}
333
- </p>
334
- <p className="text-xs text-green-600 truncate">
335
- example.com/{slug}
336
- </p>
337
- <p className="text-xs text-muted-foreground line-clamp-2">
338
- {description}
339
- </p>
323
+ <p className="text-sm text-primary truncate">{title}</p>
324
+ <p className="text-xs text-green-600 truncate">example.com/{slug}</p>
325
+ <p className="text-xs text-muted-foreground line-clamp-2">{description}</p>
340
326
  </div>
341
327
  </div>
342
- );
328
+ )
343
329
  }
344
330
 
345
331
  function SocialPreview({ pageSettings }: { pageSettings: PageSettings }) {
346
- const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page';
347
- const description = pageSettings.metaDescription || 'No description set';
332
+ const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
333
+ const description = pageSettings.metaDescription || 'No description set'
348
334
 
349
335
  return (
350
336
  <div className="bg-background rounded-md border border-border overflow-hidden">
351
337
  <p className="text-xs text-muted-foreground px-4 pt-3 pb-2">Open Graph Preview</p>
352
338
  {pageSettings.ogImage && (
353
339
  <div className="w-full h-32 bg-muted flex items-center justify-center overflow-hidden">
354
- <img
355
- src={pageSettings.ogImage}
356
- alt="OG preview"
357
- className="w-full h-full object-cover"
358
- />
340
+ <img src={pageSettings.ogImage} alt="OG preview" className="w-full h-full object-cover" />
359
341
  </div>
360
342
  )}
361
343
  {!pageSettings.ogImage && (
@@ -369,7 +351,7 @@ function SocialPreview({ pageSettings }: { pageSettings: PageSettings }) {
369
351
  <p className="text-xs text-muted-foreground line-clamp-2">{description}</p>
370
352
  </div>
371
353
  </div>
372
- );
354
+ )
373
355
  }
374
356
 
375
357
  export function BuilderSEOPanel({
@@ -381,22 +363,20 @@ export function BuilderSEOPanel({
381
363
  const analysis = useMemo<BuilderSEOAnalysis>(
382
364
  () => analyzeSEO(tree, pageSettings as any),
383
365
  [tree, pageSettings],
384
- );
366
+ )
385
367
 
386
- const [expandedSections, setExpandedSections] = useState<string[]>(['checks']);
368
+ const [expandedSections, setExpandedSections] = useState<string[]>(['checks'])
387
369
 
388
370
  const toggleSection = (section: string) => {
389
371
  setExpandedSections((prev) =>
390
- prev.includes(section)
391
- ? prev.filter((s) => s !== section)
392
- : [...prev, section]
393
- );
394
- };
372
+ prev.includes(section) ? prev.filter((s) => s !== section) : [...prev, section],
373
+ )
374
+ }
395
375
 
396
376
  const blockHints = useMemo(() => {
397
- if (!selectedNodeId) return [];
398
- return analysis.perBlockHints.get(selectedNodeId) || [];
399
- }, [analysis.perBlockHints, selectedNodeId]);
377
+ if (!selectedNodeId) return []
378
+ return analysis.perBlockHints.get(selectedNodeId) || []
379
+ }, [analysis.perBlockHints, selectedNodeId])
400
380
 
401
381
  if (!tree.children || tree.children.length === 0) {
402
382
  return (
@@ -407,7 +387,7 @@ export function BuilderSEOPanel({
407
387
  Add content to your page to see SEO analysis
408
388
  </p>
409
389
  </div>
410
- );
390
+ )
411
391
  }
412
392
 
413
393
  return (
@@ -415,7 +395,9 @@ export function BuilderSEOPanel({
415
395
  <div className="flex items-center gap-4 px-4 py-5 border-b border-border">
416
396
  <ScoreRing score={analysis.score} />
417
397
  <div className="flex flex-col gap-1">
418
- <span className="text-xs font-medium text-foreground">{getScoreLabel(analysis.score)}</span>
398
+ <span className="text-xs font-medium text-foreground">
399
+ {getScoreLabel(analysis.score)}
400
+ </span>
419
401
  <ScoreSummary checks={analysis.checks} />
420
402
  </div>
421
403
  </div>
@@ -456,10 +438,7 @@ export function BuilderSEOPanel({
456
438
  expanded={expandedSections.includes('basicSeo')}
457
439
  onToggle={() => toggleSection('basicSeo')}
458
440
  >
459
- <BasicSEOFields
460
- pageSettings={pageSettings}
461
- onPageSettingsChange={onPageSettingsChange}
462
- />
441
+ <BasicSEOFields pageSettings={pageSettings} onPageSettingsChange={onPageSettingsChange} />
463
442
  </CollapsibleSection>
464
443
 
465
444
  <CollapsibleSection
@@ -481,5 +460,5 @@ export function BuilderSEOPanel({
481
460
  </CollapsibleSection>
482
461
  </div>
483
462
  </div>
484
- );
463
+ )
485
464
  }