@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,40 +1,40 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState, useEffect } from 'react';
4
- import { X, RotateCcw, Clock, User, Loader2 } from 'lucide-react';
5
- import { toast } from 'sonner';
6
- import { cmsApi } from '../lib/api.js';
3
+ import { useState, useEffect } from 'react'
4
+ import { X, RotateCcw, Clock, User, Loader2 } from 'lucide-react'
5
+ import { toast } from 'sonner'
6
+ import { cmsApi } from '../lib/api.js'
7
7
 
8
8
  interface Version {
9
- id: string;
10
- changeType: string;
11
- createdAt: string;
12
- data: Record<string, unknown>;
9
+ id: string
10
+ changeType: string
11
+ createdAt: string
12
+ data: Record<string, unknown>
13
13
  changedBy?: {
14
- id: string;
15
- name?: string;
16
- email?: string;
17
- };
14
+ id: string
15
+ name?: string
16
+ email?: string
17
+ }
18
18
  }
19
19
 
20
20
  export interface VersionHistoryProps {
21
- collectionSlug: string;
22
- documentId: string;
23
- open: boolean;
24
- onClose: () => void;
25
- onRestore?: (data: Record<string, unknown>) => void;
21
+ collectionSlug: string
22
+ documentId: string
23
+ open: boolean
24
+ onClose: () => void
25
+ onRestore?: (data: Record<string, unknown>) => void
26
26
  }
27
27
 
28
28
  function timeAgo(dateStr: string): string {
29
- const diff = Date.now() - new Date(dateStr).getTime();
30
- const minutes = Math.floor(diff / 60_000);
31
- if (minutes < 1) return 'just now';
32
- if (minutes < 60) return `${minutes}m ago`;
33
- const hours = Math.floor(minutes / 60);
34
- if (hours < 24) return `${hours}h ago`;
35
- const days = Math.floor(hours / 24);
36
- if (days < 30) return `${days}d ago`;
37
- return new Date(dateStr).toLocaleDateString();
29
+ const diff = Date.now() - new Date(dateStr).getTime()
30
+ const minutes = Math.floor(diff / 60_000)
31
+ if (minutes < 1) return 'just now'
32
+ if (minutes < 60) return `${minutes}m ago`
33
+ const hours = Math.floor(minutes / 60)
34
+ if (hours < 24) return `${hours}h ago`
35
+ const days = Math.floor(hours / 24)
36
+ if (days < 30) return `${days}d ago`
37
+ return new Date(dateStr).toLocaleDateString()
38
38
  }
39
39
 
40
40
  const CHANGE_TYPE_LABELS: Record<string, { label: string; color: string }> = {
@@ -42,47 +42,53 @@ const CHANGE_TYPE_LABELS: Record<string, { label: string; color: string }> = {
42
42
  UPDATE: { label: 'Updated', color: 'bg-blue-100 text-blue-800' },
43
43
  DELETE: { label: 'Deleted', color: 'bg-red-100 text-red-800' },
44
44
  RESTORE: { label: 'Restored', color: 'bg-purple-100 text-purple-800' },
45
- };
45
+ }
46
46
 
47
- export function VersionHistory({ collectionSlug, documentId, open, onClose, onRestore }: VersionHistoryProps) {
48
- const [versions, setVersions] = useState<Version[]>([]);
49
- const [loading, setLoading] = useState(false);
50
- const [restoring, setRestoring] = useState<string | null>(null);
47
+ export function VersionHistory({
48
+ collectionSlug,
49
+ documentId,
50
+ open,
51
+ onClose,
52
+ onRestore,
53
+ }: VersionHistoryProps) {
54
+ const [versions, setVersions] = useState<Version[]>([])
55
+ const [loading, setLoading] = useState(false)
56
+ const [restoring, setRestoring] = useState<string | null>(null)
51
57
 
52
58
  useEffect(() => {
53
- if (open) fetchVersions();
54
- }, [open, collectionSlug, documentId]);
59
+ if (open) fetchVersions()
60
+ }, [open, collectionSlug, documentId])
55
61
 
56
62
  async function fetchVersions() {
57
- setLoading(true);
63
+ setLoading(true)
58
64
  const res = await cmsApi<{ versions: Version[]; total: number }>(
59
65
  `/collections/${collectionSlug}/${documentId}/versions?pageSize=50`,
60
- );
66
+ )
61
67
  if (res.data) {
62
- setVersions((res.data as any).versions ?? []);
68
+ setVersions((res.data as any).versions ?? [])
63
69
  }
64
- setLoading(false);
70
+ setLoading(false)
65
71
  }
66
72
 
67
73
  async function handleRestore(version: Version) {
68
- setRestoring(version.id);
74
+ setRestoring(version.id)
69
75
  const res = await cmsApi<any>(
70
76
  `/collections/${collectionSlug}/${documentId}/versions/${version.id}/restore`,
71
77
  { method: 'POST' },
72
- );
78
+ )
73
79
  if (res.error) {
74
- toast.error(res.error);
80
+ toast.error(res.error)
75
81
  } else {
76
- toast.success('Version restored');
82
+ toast.success('Version restored')
77
83
  if (onRestore && version.data) {
78
- onRestore(version.data);
84
+ onRestore(version.data)
79
85
  }
80
- fetchVersions();
86
+ fetchVersions()
81
87
  }
82
- setRestoring(null);
88
+ setRestoring(null)
83
89
  }
84
90
 
85
- if (!open) return null;
91
+ if (!open) return null
86
92
 
87
93
  return (
88
94
  <div className="fixed inset-0 z-50 flex justify-end">
@@ -93,7 +99,10 @@ export function VersionHistory({ collectionSlug, documentId, open, onClose, onRe
93
99
  <Clock className="w-5 h-5 text-gray-600" />
94
100
  <h2 className="text-lg font-semibold text-gray-900">Version History</h2>
95
101
  </div>
96
- <button onClick={onClose} className="p-1.5 hover:bg-gray-100 rounded-lg transition-colors">
102
+ <button
103
+ onClick={onClose}
104
+ className="p-1.5 hover:bg-gray-100 rounded-lg transition-colors"
105
+ >
97
106
  <X className="w-5 h-5 text-gray-500" />
98
107
  </button>
99
108
  </div>
@@ -113,15 +122,17 @@ export function VersionHistory({ collectionSlug, documentId, open, onClose, onRe
113
122
  const typeInfo = CHANGE_TYPE_LABELS[version.changeType] ?? {
114
123
  label: version.changeType,
115
124
  color: 'bg-gray-100 text-gray-800',
116
- };
117
- const isLatest = index === 0;
125
+ }
126
+ const isLatest = index === 0
118
127
 
119
128
  return (
120
129
  <div key={version.id} className="px-4 py-3 hover:bg-gray-50 transition-colors">
121
130
  <div className="flex items-start justify-between gap-3">
122
131
  <div className="flex-1 min-w-0">
123
132
  <div className="flex items-center gap-2 mb-1">
124
- <span className={`inline-flex px-2 py-0.5 rounded-full text-xs font-medium ${typeInfo.color}`}>
133
+ <span
134
+ className={`inline-flex px-2 py-0.5 rounded-full text-xs font-medium ${typeInfo.color}`}
135
+ >
125
136
  {typeInfo.label}
126
137
  </span>
127
138
  {isLatest && (
@@ -156,12 +167,12 @@ export function VersionHistory({ collectionSlug, documentId, open, onClose, onRe
156
167
  )}
157
168
  </div>
158
169
  </div>
159
- );
170
+ )
160
171
  })}
161
172
  </div>
162
173
  )}
163
174
  </div>
164
175
  </div>
165
176
  </div>
166
- );
177
+ )
167
178
  }
@@ -1,16 +1,16 @@
1
- type AvatarSize = 'sm' | 'md' | 'lg';
1
+ type AvatarSize = 'sm' | 'md' | 'lg'
2
2
 
3
3
  export interface AvatarProps {
4
- src?: string | null;
5
- name?: string;
6
- size?: AvatarSize;
4
+ src?: string | null
5
+ name?: string
6
+ size?: AvatarSize
7
7
  }
8
8
 
9
9
  const sizeClasses: Record<AvatarSize, string> = {
10
10
  sm: 'h-6 w-6 text-[10px]',
11
11
  md: 'h-9 w-9 text-xs',
12
12
  lg: 'h-12 w-12 text-sm',
13
- };
13
+ }
14
14
 
15
15
  function getInitials(name: string): string {
16
16
  return name
@@ -18,7 +18,7 @@ function getInitials(name: string): string {
18
18
  .map((part) => part.charAt(0))
19
19
  .join('')
20
20
  .toUpperCase()
21
- .slice(0, 2);
21
+ .slice(0, 2)
22
22
  }
23
23
 
24
24
  export function Avatar({ src, name = '', size = 'md' }: AvatarProps) {
@@ -29,7 +29,7 @@ export function Avatar({ src, name = '', size = 'md' }: AvatarProps) {
29
29
  alt={name}
30
30
  className={`inline-block shrink-0 rounded-full object-cover ${sizeClasses[size]}`}
31
31
  />
32
- );
32
+ )
33
33
  }
34
34
 
35
35
  return (
@@ -38,5 +38,5 @@ export function Avatar({ src, name = '', size = 'md' }: AvatarProps) {
38
38
  >
39
39
  {getInitials(name) || '?'}
40
40
  </span>
41
- );
41
+ )
42
42
  }
@@ -1,5 +1,5 @@
1
1
  export interface BadgeProps {
2
- status: 'published' | 'draft' | 'archived' | 'scheduled';
2
+ status: 'published' | 'draft' | 'archived' | 'scheduled'
3
3
  }
4
4
 
5
5
  const statusClasses: Record<BadgeProps['status'], string> = {
@@ -7,19 +7,21 @@ const statusClasses: Record<BadgeProps['status'], string> = {
7
7
  draft: 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300',
8
8
  archived: 'bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400',
9
9
  scheduled: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400',
10
- };
10
+ }
11
11
 
12
12
  const statusLabels: Record<BadgeProps['status'], string> = {
13
13
  published: 'Published',
14
14
  draft: 'Draft',
15
15
  archived: 'Archived',
16
16
  scheduled: 'Scheduled',
17
- };
17
+ }
18
18
 
19
19
  export function Badge({ status }: BadgeProps) {
20
20
  return (
21
- <span className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${statusClasses[status]}`}>
21
+ <span
22
+ className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${statusClasses[status]}`}
23
+ >
22
24
  {statusLabels[status]}
23
25
  </span>
24
- );
26
+ )
25
27
  }
@@ -1,15 +1,15 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { type ButtonHTMLAttributes, type ReactNode } from 'react';
3
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react'
4
4
 
5
- type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost';
6
- type ButtonSize = 'sm' | 'md' | 'lg';
5
+ type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost'
6
+ type ButtonSize = 'sm' | 'md' | 'lg'
7
7
 
8
8
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
9
- variant?: ButtonVariant;
10
- size?: ButtonSize;
11
- loading?: boolean;
12
- children: ReactNode;
9
+ variant?: ButtonVariant
10
+ size?: ButtonSize
11
+ loading?: boolean
12
+ children: ReactNode
13
13
  }
14
14
 
15
15
  const variantClasses: Record<ButtonVariant, string> = {
@@ -17,13 +17,13 @@ const variantClasses: Record<ButtonVariant, string> = {
17
17
  secondary: 'bg-[var(--secondary)] text-[var(--secondary-foreground)] hover:opacity-80',
18
18
  danger: 'bg-[var(--destructive)] text-[var(--destructive-foreground)] hover:opacity-90',
19
19
  ghost: 'bg-transparent hover:bg-[var(--accent)] text-[var(--foreground)]',
20
- };
20
+ }
21
21
 
22
22
  const sizeClasses: Record<ButtonSize, string> = {
23
23
  sm: 'px-2.5 py-1 text-xs',
24
24
  md: 'px-4 py-2 text-sm',
25
25
  lg: 'px-6 py-2.5 text-base',
26
- };
26
+ }
27
27
 
28
28
  export function Button({
29
29
  variant = 'primary',
@@ -42,11 +42,22 @@ export function Button({
42
42
  >
43
43
  {loading && (
44
44
  <svg className="h-4 w-4 animate-spin" viewBox="0 0 24 24" fill="none">
45
- <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
46
- <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z" />
45
+ <circle
46
+ className="opacity-25"
47
+ cx="12"
48
+ cy="12"
49
+ r="10"
50
+ stroke="currentColor"
51
+ strokeWidth="4"
52
+ />
53
+ <path
54
+ className="opacity-75"
55
+ fill="currentColor"
56
+ d="M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
57
+ />
47
58
  </svg>
48
59
  )}
49
60
  {children}
50
61
  </button>
51
- );
62
+ )
52
63
  }
@@ -1,82 +1,93 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useState, useEffect, useRef } from 'react';
3
+ import { useState, useEffect, useRef } from 'react'
4
4
 
5
5
  interface CommandItem {
6
- id: string;
7
- label: string;
8
- group: string;
9
- onSelect: () => void;
6
+ id: string
7
+ label: string
8
+ group: string
9
+ onSelect: () => void
10
10
  }
11
11
 
12
12
  export interface CommandPaletteProps {
13
- open: boolean;
14
- onClose: () => void;
15
- items: CommandItem[];
13
+ open: boolean
14
+ onClose: () => void
15
+ items: CommandItem[]
16
16
  }
17
17
 
18
18
  export function CommandPalette({ open, onClose, items }: CommandPaletteProps) {
19
- const [query, setQuery] = useState('');
20
- const [activeIndex, setActiveIndex] = useState(0);
21
- const inputRef = useRef<HTMLInputElement>(null);
19
+ const [query, setQuery] = useState('')
20
+ const [activeIndex, setActiveIndex] = useState(0)
21
+ const inputRef = useRef<HTMLInputElement>(null)
22
22
 
23
- const filtered = items.filter((item) =>
24
- item.label.toLowerCase().includes(query.toLowerCase()),
25
- );
23
+ const filtered = items.filter((item) => item.label.toLowerCase().includes(query.toLowerCase()))
26
24
 
27
- const groups = Array.from(new Set(filtered.map((i) => i.group)));
25
+ const groups = Array.from(new Set(filtered.map((i) => i.group)))
28
26
 
29
27
  useEffect(() => {
30
28
  if (open) {
31
- setQuery('');
32
- setActiveIndex(0);
33
- requestAnimationFrame(() => inputRef.current?.focus());
29
+ setQuery('')
30
+ setActiveIndex(0)
31
+ requestAnimationFrame(() => inputRef.current?.focus())
34
32
  }
35
- }, [open]);
33
+ }, [open])
36
34
 
37
35
  useEffect(() => {
38
- if (!open) return;
36
+ if (!open) return
39
37
 
40
38
  function handleKey(e: KeyboardEvent) {
41
39
  if (e.key === 'Escape') {
42
- onClose();
43
- return;
40
+ onClose()
41
+ return
44
42
  }
45
43
  if (e.key === 'ArrowDown') {
46
- e.preventDefault();
47
- setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
44
+ e.preventDefault()
45
+ setActiveIndex((i) => Math.min(i + 1, filtered.length - 1))
48
46
  }
49
47
  if (e.key === 'ArrowUp') {
50
- e.preventDefault();
51
- setActiveIndex((i) => Math.max(i - 1, 0));
48
+ e.preventDefault()
49
+ setActiveIndex((i) => Math.max(i - 1, 0))
52
50
  }
53
51
  if (e.key === 'Enter' && filtered[activeIndex]) {
54
- filtered[activeIndex].onSelect();
55
- onClose();
52
+ filtered[activeIndex].onSelect()
53
+ onClose()
56
54
  }
57
55
  }
58
56
 
59
- document.addEventListener('keydown', handleKey);
60
- return () => document.removeEventListener('keydown', handleKey);
61
- }, [open, onClose, filtered, activeIndex]);
57
+ document.addEventListener('keydown', handleKey)
58
+ return () => document.removeEventListener('keydown', handleKey)
59
+ }, [open, onClose, filtered, activeIndex])
62
60
 
63
- if (!open) return null;
61
+ if (!open) return null
64
62
 
65
- let flatIndex = -1;
63
+ let flatIndex = -1
66
64
 
67
65
  return (
68
66
  <div className="fixed inset-0 z-[70] flex items-start justify-center pt-[20vh]">
69
67
  <div className="fixed inset-0 bg-black/50" onClick={onClose} role="presentation" />
70
68
  <div className="relative z-10 w-full max-w-lg overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--popover)] shadow-2xl">
71
69
  <div className="flex items-center border-b border-[var(--border)] px-4">
72
- <svg className="mr-2 h-4 w-4 text-[var(--muted-foreground)]" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
73
- <path strokeLinecap="round" strokeLinejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
70
+ <svg
71
+ className="mr-2 h-4 w-4 text-[var(--muted-foreground)]"
72
+ fill="none"
73
+ viewBox="0 0 24 24"
74
+ stroke="currentColor"
75
+ strokeWidth={2}
76
+ >
77
+ <path
78
+ strokeLinecap="round"
79
+ strokeLinejoin="round"
80
+ d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
81
+ />
74
82
  </svg>
75
83
  <input
76
84
  ref={inputRef}
77
85
  type="text"
78
86
  value={query}
79
- onChange={(e) => { setQuery(e.target.value); setActiveIndex(0); }}
87
+ onChange={(e) => {
88
+ setQuery(e.target.value)
89
+ setActiveIndex(0)
90
+ }}
80
91
  placeholder="Type a command or search..."
81
92
  className="flex-1 bg-transparent py-3 text-sm outline-none"
82
93
  />
@@ -91,19 +102,22 @@ export function CommandPalette({ open, onClose, items }: CommandPaletteProps) {
91
102
  {filtered
92
103
  .filter((i) => i.group === group)
93
104
  .map((item) => {
94
- flatIndex++;
95
- const idx = flatIndex;
105
+ flatIndex++
106
+ const idx = flatIndex
96
107
  return (
97
108
  <button
98
109
  key={item.id}
99
- onClick={() => { item.onSelect(); onClose(); }}
110
+ onClick={() => {
111
+ item.onSelect()
112
+ onClose()
113
+ }}
100
114
  className={`flex w-full px-4 py-2 text-sm ${
101
115
  idx === activeIndex ? 'bg-[var(--accent)]' : ''
102
116
  }`}
103
117
  >
104
118
  {item.label}
105
119
  </button>
106
- );
120
+ )
107
121
  })}
108
122
  </div>
109
123
  ))}
@@ -115,5 +129,5 @@ export function CommandPalette({ open, onClose, items }: CommandPaletteProps) {
115
129
  </div>
116
130
  </div>
117
131
  </div>
118
- );
132
+ )
119
133
  }
@@ -1,17 +1,17 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { Modal } from './Modal.js';
4
- import { Button } from './Button.js';
3
+ import { Modal } from './Modal.js'
4
+ import { Button } from './Button.js'
5
5
 
6
6
  export interface ConfirmDialogProps {
7
- open: boolean;
8
- onClose: () => void;
9
- onConfirm: () => void;
10
- title: string;
11
- description: string;
12
- confirmLabel?: string;
13
- cancelLabel?: string;
14
- destructive?: boolean;
7
+ open: boolean
8
+ onClose: () => void
9
+ onConfirm: () => void
10
+ title: string
11
+ description: string
12
+ confirmLabel?: string
13
+ cancelLabel?: string
14
+ destructive?: boolean
15
15
  }
16
16
 
17
17
  export function ConfirmDialog({
@@ -37,8 +37,8 @@ export function ConfirmDialog({
37
37
  <Button
38
38
  variant={destructive ? 'danger' : 'primary'}
39
39
  onClick={() => {
40
- onConfirm();
41
- onClose();
40
+ onConfirm()
41
+ onClose()
42
42
  }}
43
43
  >
44
44
  {confirmLabel}
@@ -48,5 +48,5 @@ export function ConfirmDialog({
48
48
  >
49
49
  <p className="text-sm text-[var(--muted-foreground)]">{description}</p>
50
50
  </Modal>
51
- );
51
+ )
52
52
  }