@actuate-media/cms-admin 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +8 -5
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/__tests__/layout/primitives.test.d.ts +2 -0
  5. package/dist/__tests__/layout/primitives.test.d.ts.map +1 -0
  6. package/dist/__tests__/layout/primitives.test.js +34 -0
  7. package/dist/__tests__/layout/primitives.test.js.map +1 -0
  8. package/dist/__tests__/lib/cv.test.d.ts +2 -0
  9. package/dist/__tests__/lib/cv.test.d.ts.map +1 -0
  10. package/dist/__tests__/lib/cv.test.js +66 -0
  11. package/dist/__tests__/lib/cv.test.js.map +1 -0
  12. package/dist/actuate-admin.css +1 -1
  13. package/dist/assets/actuate-logo.d.ts +36 -0
  14. package/dist/assets/actuate-logo.d.ts.map +1 -0
  15. package/dist/assets/actuate-logo.js +15 -0
  16. package/dist/assets/actuate-logo.js.map +1 -0
  17. package/dist/components/Breadcrumbs.js +2 -2
  18. package/dist/components/CommandPalette.js +10 -10
  19. package/dist/components/ContentOverviewChart.js +3 -3
  20. package/dist/components/ErrorBoundary.js +1 -1
  21. package/dist/components/FocalPointPicker.js +2 -2
  22. package/dist/components/FolderTree.js +20 -20
  23. package/dist/components/LivePreview.js +3 -3
  24. package/dist/components/LocaleSwitcher.js +1 -1
  25. package/dist/components/MediaPickerModal.js +4 -4
  26. package/dist/components/PresenceIndicator.js +1 -1
  27. package/dist/components/SEOConfigPanel.d.ts +2 -0
  28. package/dist/components/SEOConfigPanel.d.ts.map +1 -0
  29. package/dist/components/SEOConfigPanel.js +174 -0
  30. package/dist/components/SEOConfigPanel.js.map +1 -0
  31. package/dist/components/SEOPanel.js +9 -9
  32. package/dist/components/SEOPerformance.js +2 -2
  33. package/dist/components/SchedulePublishDialog.js +1 -1
  34. package/dist/components/SharePreviewLinkDialog.js +1 -1
  35. package/dist/components/TipTapEditor.js +5 -5
  36. package/dist/components/VersionHistory.js +2 -2
  37. package/dist/components/ui/Badge.d.ts +33 -3
  38. package/dist/components/ui/Badge.d.ts.map +1 -1
  39. package/dist/components/ui/Badge.js +42 -8
  40. package/dist/components/ui/Badge.js.map +1 -1
  41. package/dist/components/ui/Button.d.ts +19 -8
  42. package/dist/components/ui/Button.d.ts.map +1 -1
  43. package/dist/components/ui/Button.js +35 -14
  44. package/dist/components/ui/Button.js.map +1 -1
  45. package/dist/components/ui/Card.d.ts +26 -0
  46. package/dist/components/ui/Card.d.ts.map +1 -0
  47. package/dist/components/ui/Card.js +45 -0
  48. package/dist/components/ui/Card.js.map +1 -0
  49. package/dist/components/ui/DataTable.js +1 -1
  50. package/dist/components/ui/Input.d.ts +15 -0
  51. package/dist/components/ui/Input.d.ts.map +1 -0
  52. package/dist/components/ui/Input.js +23 -0
  53. package/dist/components/ui/Input.js.map +1 -0
  54. package/dist/components/ui/SearchInput.js +1 -1
  55. package/dist/components/ui/Select.d.ts +16 -0
  56. package/dist/components/ui/Select.d.ts.map +1 -0
  57. package/dist/components/ui/Select.js +25 -0
  58. package/dist/components/ui/Select.js.map +1 -0
  59. package/dist/components/ui/Toast.js +1 -1
  60. package/dist/components/ui/index.d.ts +10 -4
  61. package/dist/components/ui/index.d.ts.map +1 -1
  62. package/dist/components/ui/index.js +5 -2
  63. package/dist/components/ui/index.js.map +1 -1
  64. package/dist/fields/BlockBuilderField.js +3 -3
  65. package/dist/fields/DateField.js +1 -1
  66. package/dist/fields/RelationshipField.js +3 -3
  67. package/dist/fields/TextField.js +1 -1
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +3 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/layout/Header.js +1 -1
  73. package/dist/layout/Layout.d.ts +14 -0
  74. package/dist/layout/Layout.d.ts.map +1 -1
  75. package/dist/layout/Layout.js +17 -11
  76. package/dist/layout/Layout.js.map +1 -1
  77. package/dist/layout/Sidebar.d.ts.map +1 -1
  78. package/dist/layout/Sidebar.js +21 -11
  79. package/dist/layout/Sidebar.js.map +1 -1
  80. package/dist/layout/primitives/AdminShell.d.ts +43 -0
  81. package/dist/layout/primitives/AdminShell.d.ts.map +1 -0
  82. package/dist/layout/primitives/AdminShell.js +51 -0
  83. package/dist/layout/primitives/AdminShell.js.map +1 -0
  84. package/dist/layout/primitives/Box.d.ts +19 -0
  85. package/dist/layout/primitives/Box.d.ts.map +1 -0
  86. package/dist/layout/primitives/Box.js +12 -0
  87. package/dist/layout/primitives/Box.js.map +1 -0
  88. package/dist/layout/primitives/Cluster.d.ts +27 -0
  89. package/dist/layout/primitives/Cluster.d.ts.map +1 -0
  90. package/dist/layout/primitives/Cluster.js +37 -0
  91. package/dist/layout/primitives/Cluster.js.map +1 -0
  92. package/dist/layout/primitives/Grid.d.ts +45 -0
  93. package/dist/layout/primitives/Grid.d.ts.map +1 -0
  94. package/dist/layout/primitives/Grid.js +59 -0
  95. package/dist/layout/primitives/Grid.js.map +1 -0
  96. package/dist/layout/primitives/PageContainer.d.ts +36 -0
  97. package/dist/layout/primitives/PageContainer.d.ts.map +1 -0
  98. package/dist/layout/primitives/PageContainer.js +41 -0
  99. package/dist/layout/primitives/PageContainer.js.map +1 -0
  100. package/dist/layout/primitives/Split.d.ts +34 -0
  101. package/dist/layout/primitives/Split.d.ts.map +1 -0
  102. package/dist/layout/primitives/Split.js +27 -0
  103. package/dist/layout/primitives/Split.js.map +1 -0
  104. package/dist/layout/primitives/Stack.d.ts +23 -0
  105. package/dist/layout/primitives/Stack.d.ts.map +1 -0
  106. package/dist/layout/primitives/Stack.js +34 -0
  107. package/dist/layout/primitives/Stack.js.map +1 -0
  108. package/dist/layout/primitives/index.d.ts +30 -0
  109. package/dist/layout/primitives/index.d.ts.map +1 -0
  110. package/dist/layout/primitives/index.js +22 -0
  111. package/dist/layout/primitives/index.js.map +1 -0
  112. package/dist/layout/primitives/tokens.d.ts +48 -0
  113. package/dist/layout/primitives/tokens.d.ts.map +1 -0
  114. package/dist/layout/primitives/tokens.js +54 -0
  115. package/dist/layout/primitives/tokens.js.map +1 -0
  116. package/dist/lib/cv.d.ts +53 -0
  117. package/dist/lib/cv.d.ts.map +1 -0
  118. package/dist/lib/cv.js +39 -0
  119. package/dist/lib/cv.js.map +1 -0
  120. package/dist/views/ApiKeys.js +7 -7
  121. package/dist/views/CollectionList.js +8 -8
  122. package/dist/views/Dashboard.d.ts.map +1 -1
  123. package/dist/views/Dashboard.js +333 -78
  124. package/dist/views/Dashboard.js.map +1 -1
  125. package/dist/views/DocumentEdit.js +3 -3
  126. package/dist/views/ForgotPassword.js +2 -2
  127. package/dist/views/FormEditor.js +5 -5
  128. package/dist/views/FormSubmissions.js +6 -6
  129. package/dist/views/Forms.js +2 -2
  130. package/dist/views/Login.d.ts +16 -1
  131. package/dist/views/Login.d.ts.map +1 -1
  132. package/dist/views/Login.js +17 -7
  133. package/dist/views/Login.js.map +1 -1
  134. package/dist/views/MediaBrowser.js +16 -16
  135. package/dist/views/PageEditor.js +2 -2
  136. package/dist/views/Pages.js +10 -10
  137. package/dist/views/PostEditor.js +2 -2
  138. package/dist/views/Posts.js +4 -4
  139. package/dist/views/Redirects.js +4 -4
  140. package/dist/views/ResetPassword.js +2 -2
  141. package/dist/views/SEO.js +6 -6
  142. package/dist/views/ScriptTagEditor.js +4 -4
  143. package/dist/views/ScriptTags.js +2 -2
  144. package/dist/views/Settings.d.ts.map +1 -1
  145. package/dist/views/Settings.js +9 -8
  146. package/dist/views/Settings.js.map +1 -1
  147. package/dist/views/SetupWizard.js +2 -2
  148. package/dist/views/Users.js +4 -4
  149. package/dist/views/page-builder/AIBlockAssist.js +1 -1
  150. package/dist/views/page-builder/AIGenerateDialog.js +10 -10
  151. package/dist/views/page-builder/BlockEditor.js +10 -10
  152. package/dist/views/page-builder/BlockPicker.js +4 -4
  153. package/dist/views/page-builder/BottomBar.js +1 -1
  154. package/dist/views/page-builder/BuilderToolbar.js +2 -2
  155. package/dist/views/page-builder/ContextPanel.js +2 -2
  156. package/dist/views/page-builder/DesignScore.js +9 -9
  157. package/dist/views/page-builder/NodeSettings.js +8 -8
  158. package/dist/views/page-builder/PageBuilder.js +3 -3
  159. package/dist/views/page-builder/PageSettings.js +1 -1
  160. package/dist/views/page-builder/PageTemplates.js +2 -2
  161. package/dist/views/page-builder/SEOPanel.js +13 -13
  162. package/dist/views/page-builder/SavedSections.js +5 -5
  163. package/dist/views/page-builder/TemplatePicker.js +2 -2
  164. package/dist/views/page-builder/block-renderers/CTAPreview.js +5 -5
  165. package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
  166. package/dist/views/page-builder/block-renderers/CodePreview.js +1 -1
  167. package/dist/views/page-builder/block-renderers/FAQPreview.js +3 -3
  168. package/dist/views/page-builder/block-renderers/FallbackPreview.js +1 -1
  169. package/dist/views/page-builder/block-renderers/FormPreview.js +3 -3
  170. package/dist/views/page-builder/block-renderers/GalleryPreview.js +5 -5
  171. package/dist/views/page-builder/block-renderers/HeroPreview.js +3 -3
  172. package/dist/views/page-builder/block-renderers/ImagePreview.js +3 -3
  173. package/dist/views/page-builder/block-renderers/TextPreview.js +3 -3
  174. package/dist/views/page-builder/block-renderers/VideoPreview.js +4 -4
  175. package/dist/views/page-builder/canvas/BlockRenderer.js +1 -1
  176. package/dist/views/page-builder/canvas/BuilderCanvas.js +3 -3
  177. package/dist/views/page-builder/canvas/ColumnRenderer.js +2 -2
  178. package/dist/views/page-builder/canvas/ContainerRenderer.js +2 -2
  179. package/dist/views/page-builder/canvas/RowRenderer.js +2 -2
  180. package/dist/views/page-builder/canvas/SectionRenderer.js +2 -2
  181. package/package.json +6 -2
  182. package/src/AdminRoot.tsx +21 -11
  183. package/src/__tests__/layout/primitives.test.ts +37 -0
  184. package/src/__tests__/lib/cv.test.ts +74 -0
  185. package/src/assets/actuate-logo.tsx +72 -0
  186. package/src/components/Breadcrumbs.tsx +6 -6
  187. package/src/components/CommandPalette.tsx +34 -34
  188. package/src/components/ContentOverviewChart.tsx +3 -3
  189. package/src/components/ErrorBoundary.tsx +3 -3
  190. package/src/components/FocalPointPicker.tsx +4 -4
  191. package/src/components/FolderTree.tsx +38 -38
  192. package/src/components/LivePreview.tsx +16 -16
  193. package/src/components/LocaleSwitcher.tsx +7 -7
  194. package/src/components/MediaPickerModal.tsx +21 -21
  195. package/src/components/PresenceIndicator.tsx +2 -2
  196. package/src/components/SEOConfigPanel.tsx +582 -0
  197. package/src/components/SEOPanel.tsx +46 -46
  198. package/src/components/SEOPerformance.tsx +21 -21
  199. package/src/components/SchedulePublishDialog.tsx +4 -4
  200. package/src/components/SharePreviewLinkDialog.tsx +1 -1
  201. package/src/components/TipTapEditor.tsx +33 -33
  202. package/src/components/VersionHistory.tsx +16 -16
  203. package/src/components/ui/Badge.tsx +66 -14
  204. package/src/components/ui/Button.tsx +70 -33
  205. package/src/components/ui/Card.tsx +101 -0
  206. package/src/components/ui/DataTable.tsx +1 -1
  207. package/src/components/ui/Input.tsx +35 -0
  208. package/src/components/ui/SearchInput.tsx +4 -4
  209. package/src/components/ui/Select.tsx +56 -0
  210. package/src/components/ui/Toast.tsx +1 -1
  211. package/src/components/ui/index.ts +18 -4
  212. package/src/fields/BlockBuilderField.tsx +3 -3
  213. package/src/fields/DateField.tsx +1 -1
  214. package/src/fields/RelationshipField.tsx +10 -10
  215. package/src/fields/TextField.tsx +1 -1
  216. package/src/index.ts +28 -0
  217. package/src/layout/Header.tsx +28 -28
  218. package/src/layout/Layout.tsx +39 -46
  219. package/src/layout/Sidebar.tsx +37 -64
  220. package/src/layout/primitives/AdminShell.tsx +118 -0
  221. package/src/layout/primitives/Box.tsx +30 -0
  222. package/src/layout/primitives/Cluster.tsx +74 -0
  223. package/src/layout/primitives/Grid.tsx +120 -0
  224. package/src/layout/primitives/PageContainer.tsx +96 -0
  225. package/src/layout/primitives/Split.tsx +73 -0
  226. package/src/layout/primitives/Stack.tsx +67 -0
  227. package/src/layout/primitives/index.ts +36 -0
  228. package/src/layout/primitives/tokens.ts +76 -0
  229. package/src/lib/cv.ts +96 -0
  230. package/src/styles/build-input.css +1 -1
  231. package/src/views/ApiKeys.tsx +57 -57
  232. package/src/views/CollectionList.tsx +30 -30
  233. package/src/views/Dashboard.tsx +737 -186
  234. package/src/views/DocumentEdit.tsx +9 -9
  235. package/src/views/ForgotPassword.tsx +18 -18
  236. package/src/views/FormEditor.tsx +75 -75
  237. package/src/views/FormSubmissions.tsx +76 -76
  238. package/src/views/Forms.tsx +27 -27
  239. package/src/views/Login.tsx +65 -25
  240. package/src/views/MediaBrowser.tsx +127 -127
  241. package/src/views/PageEditor.tsx +25 -25
  242. package/src/views/Pages.tsx +59 -59
  243. package/src/views/PostEditor.tsx +37 -37
  244. package/src/views/Posts.tsx +48 -48
  245. package/src/views/Redirects.tsx +21 -21
  246. package/src/views/ResetPassword.tsx +28 -28
  247. package/src/views/SEO.tsx +144 -144
  248. package/src/views/ScriptTagEditor.tsx +24 -24
  249. package/src/views/ScriptTags.tsx +10 -10
  250. package/src/views/Settings.tsx +88 -80
  251. package/src/views/SetupWizard.tsx +28 -28
  252. package/src/views/Users.tsx +20 -20
  253. package/src/views/page-builder/AIBlockAssist.tsx +1 -1
  254. package/src/views/page-builder/AIGenerateDialog.tsx +63 -63
  255. package/src/views/page-builder/BlockEditor.tsx +26 -26
  256. package/src/views/page-builder/BlockPicker.tsx +22 -22
  257. package/src/views/page-builder/BottomBar.tsx +8 -8
  258. package/src/views/page-builder/BuilderToolbar.tsx +17 -17
  259. package/src/views/page-builder/ContextPanel.tsx +3 -3
  260. package/src/views/page-builder/DesignScore.tsx +21 -21
  261. package/src/views/page-builder/NodeSettings.tsx +27 -27
  262. package/src/views/page-builder/PageBuilder.tsx +11 -11
  263. package/src/views/page-builder/PageSettings.tsx +4 -4
  264. package/src/views/page-builder/PageTemplates.tsx +18 -18
  265. package/src/views/page-builder/SEOPanel.tsx +53 -53
  266. package/src/views/page-builder/SavedSections.tsx +37 -37
  267. package/src/views/page-builder/TemplatePicker.tsx +17 -17
  268. package/src/views/page-builder/block-renderers/CTAPreview.tsx +13 -13
  269. package/src/views/page-builder/block-renderers/CardsPreview.tsx +5 -5
  270. package/src/views/page-builder/block-renderers/CodePreview.tsx +6 -6
  271. package/src/views/page-builder/block-renderers/FAQPreview.tsx +13 -13
  272. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +3 -3
  273. package/src/views/page-builder/block-renderers/FormPreview.tsx +20 -20
  274. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +8 -8
  275. package/src/views/page-builder/block-renderers/HeroPreview.tsx +16 -16
  276. package/src/views/page-builder/block-renderers/ImagePreview.tsx +4 -4
  277. package/src/views/page-builder/block-renderers/TextPreview.tsx +14 -14
  278. package/src/views/page-builder/block-renderers/VideoPreview.tsx +12 -12
  279. package/src/views/page-builder/canvas/BlockRenderer.tsx +4 -4
  280. package/src/views/page-builder/canvas/BuilderCanvas.tsx +6 -6
  281. package/src/views/page-builder/canvas/ColumnRenderer.tsx +3 -3
  282. package/src/views/page-builder/canvas/ContainerRenderer.tsx +2 -2
  283. package/src/views/page-builder/canvas/RowRenderer.tsx +2 -2
  284. package/src/views/page-builder/canvas/SectionRenderer.tsx +2 -2
@@ -61,29 +61,29 @@ export function Breadcrumbs({ currentPath, onNavigate }: BreadcrumbsProps) {
61
61
  return (
62
62
  <nav
63
63
  aria-label="Breadcrumb"
64
- className="flex items-center gap-1 text-sm py-2.5 px-4 bg-white border-b border-gray-200 overflow-x-auto"
64
+ className="flex items-center gap-1 overflow-x-auto border-b border-gray-200 bg-white px-4 py-2.5 text-sm"
65
65
  >
66
66
  <button
67
67
  type="button"
68
68
  onClick={() => onNavigate('/')}
69
- className="flex items-center gap-1 text-gray-500 hover:text-blue-600 transition-colors shrink-0"
69
+ className="flex shrink-0 items-center gap-1 text-gray-500 transition-colors hover:text-blue-600"
70
70
  >
71
- <Home className="w-3.5 h-3.5" />
71
+ <Home className="h-3.5 w-3.5" />
72
72
  <span className="hidden sm:inline">Dashboard</span>
73
73
  </button>
74
74
 
75
75
  {crumbs.map((crumb, i) => {
76
76
  const isLast = i === crumbs.length - 1
77
77
  return (
78
- <span key={crumb.path} className="flex items-center gap-1 shrink-0">
79
- <ChevronRight className="w-3.5 h-3.5 text-gray-400" />
78
+ <span key={crumb.path} className="flex shrink-0 items-center gap-1">
79
+ <ChevronRight className="h-3.5 w-3.5 text-gray-400" />
80
80
  {isLast ? (
81
81
  <span className="font-medium text-gray-900">{crumb.label}</span>
82
82
  ) : (
83
83
  <button
84
84
  type="button"
85
85
  onClick={() => onNavigate(crumb.path)}
86
- className="text-gray-500 hover:text-blue-600 transition-colors"
86
+ className="text-gray-500 transition-colors hover:text-blue-600"
87
87
  >
88
88
  {crumb.label}
89
89
  </button>
@@ -181,7 +181,7 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
181
181
 
182
182
  return (
183
183
  <div
184
- className="fixed inset-0 z-50 bg-black/50 flex items-start justify-center pt-[20vh] px-4"
184
+ className="fixed inset-0 z-50 flex items-start justify-center bg-black/50 px-4 pt-[20vh]"
185
185
  onClick={() => {
186
186
  onOpenChange(false)
187
187
  setSearch('')
@@ -195,7 +195,7 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
195
195
  onClick={(e) => e.stopPropagation()}
196
196
  >
197
197
  <Command
198
- className="bg-white rounded-lg shadow-2xl w-full overflow-hidden"
198
+ className="w-full overflow-hidden rounded-lg bg-white shadow-2xl"
199
199
  onKeyDown={(e) => {
200
200
  if (e.key === 'Escape') {
201
201
  onOpenChange(false)
@@ -205,17 +205,17 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
205
205
  shouldFilter={!hasQuery}
206
206
  >
207
207
  <div className="flex items-center border-b border-gray-200 px-4">
208
- <Search className="w-5 h-5 text-gray-400 mr-3 shrink-0" />
208
+ <Search className="mr-3 h-5 w-5 shrink-0 text-gray-400" />
209
209
  <Command.Input
210
210
  value={search}
211
211
  onValueChange={setSearch}
212
212
  placeholder="Search or jump to..."
213
- className="w-full py-4 text-base bg-transparent focus:outline-none placeholder:text-gray-400"
213
+ className="w-full bg-transparent py-4 text-base placeholder:text-gray-400 focus:outline-none"
214
214
  />
215
215
  {loading && (
216
- <div className="w-4 h-4 border-2 border-gray-300 border-t-gray-600 rounded-full animate-spin shrink-0 mr-2" />
216
+ <div className="mr-2 h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-gray-300 border-t-gray-600" />
217
217
  )}
218
- <kbd className="hidden sm:inline-block px-2 py-1 text-xs font-mono bg-gray-100 text-gray-600 rounded shrink-0">
218
+ <kbd className="hidden shrink-0 rounded bg-gray-100 px-2 py-1 font-mono text-xs text-gray-600 sm:inline-block">
219
219
  ESC
220
220
  </kbd>
221
221
  </div>
@@ -227,15 +227,15 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
227
227
 
228
228
  {!hasQuery && recentItems.length > 0 && (
229
229
  <Command.Group heading="Recent" className="px-2 py-2">
230
- <div className="text-xs font-medium text-gray-500 mb-2">RECENT</div>
230
+ <div className="mb-2 text-xs font-medium text-gray-500">RECENT</div>
231
231
  {recentItems.map((item) => (
232
232
  <Command.Item
233
233
  key={`recent-${item.id}`}
234
234
  value={`recent ${item.label}`}
235
235
  onSelect={() => handleSelect(item.path, item)}
236
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
236
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
237
237
  >
238
- <Clock className="w-4 h-4 text-gray-400" />
238
+ <Clock className="h-4 w-4 text-gray-400" />
239
239
  <span>{item.label}</span>
240
240
  <span className="ml-auto text-xs text-gray-400 capitalize">{item.type}</span>
241
241
  </Command.Item>
@@ -245,7 +245,7 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
245
245
 
246
246
  {hasQuery && documents.length > 0 && (
247
247
  <Command.Group heading="Documents" className="px-2 py-2">
248
- <div className="text-xs font-medium text-gray-500 mb-2">DOCUMENTS</div>
248
+ <div className="mb-2 text-xs font-medium text-gray-500">DOCUMENTS</div>
249
249
  {documents.map((doc) => (
250
250
  <Command.Item
251
251
  key={`doc-${doc.id}`}
@@ -258,10 +258,10 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
258
258
  type: 'document',
259
259
  })
260
260
  }
261
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
261
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
262
262
  >
263
- <FileText className="w-4 h-4 text-gray-500" />
264
- <div className="flex flex-col min-w-0">
263
+ <FileText className="h-4 w-4 text-gray-500" />
264
+ <div className="flex min-w-0 flex-col">
265
265
  <span className="truncate">{doc.title ?? doc.slug ?? doc.id}</span>
266
266
  <span className="text-xs text-gray-400">
267
267
  {doc.collection} &middot; {doc.status}
@@ -273,8 +273,8 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
273
273
  )}
274
274
 
275
275
  {hasQuery && media.length > 0 && (
276
- <Command.Group heading="Media" className="px-2 py-2 mt-1">
277
- <div className="text-xs font-medium text-gray-500 mb-2">MEDIA</div>
276
+ <Command.Group heading="Media" className="mt-1 px-2 py-2">
277
+ <div className="mb-2 text-xs font-medium text-gray-500">MEDIA</div>
278
278
  {media.map((m) => (
279
279
  <Command.Item
280
280
  key={`media-${m.id}`}
@@ -287,10 +287,10 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
287
287
  type: 'media',
288
288
  })
289
289
  }
290
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
290
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
291
291
  >
292
- <Image className="w-4 h-4 text-gray-500" />
293
- <div className="flex flex-col min-w-0">
292
+ <Image className="h-4 w-4 text-gray-500" />
293
+ <div className="flex min-w-0 flex-col">
294
294
  <span className="truncate">{m.filename}</span>
295
295
  <span className="text-xs text-gray-400">{m.mimeType}</span>
296
296
  </div>
@@ -300,8 +300,8 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
300
300
  )}
301
301
 
302
302
  {hasQuery && users.length > 0 && (
303
- <Command.Group heading="Users" className="px-2 py-2 mt-1">
304
- <div className="text-xs font-medium text-gray-500 mb-2">USERS</div>
303
+ <Command.Group heading="Users" className="mt-1 px-2 py-2">
304
+ <div className="mb-2 text-xs font-medium text-gray-500">USERS</div>
305
305
  {users.map((u) => (
306
306
  <Command.Item
307
307
  key={`user-${u.id}`}
@@ -314,10 +314,10 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
314
314
  type: 'user',
315
315
  })
316
316
  }
317
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
317
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
318
318
  >
319
- <Users className="w-4 h-4 text-gray-500" />
320
- <div className="flex flex-col min-w-0">
319
+ <Users className="h-4 w-4 text-gray-500" />
320
+ <div className="flex min-w-0 flex-col">
321
321
  <span className="truncate">{u.name}</span>
322
322
  <span className="text-xs text-gray-400">
323
323
  {u.email} &middot; {u.role}
@@ -330,7 +330,7 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
330
330
 
331
331
  {(!hasQuery || !hasResults) && (
332
332
  <Command.Group heading="Navigation" className="px-2 py-2">
333
- <div className="text-xs font-medium text-gray-500 mb-2">NAVIGATION</div>
333
+ <div className="mb-2 text-xs font-medium text-gray-500">NAVIGATION</div>
334
334
  {navigationCommands.map((cmd) => {
335
335
  const Icon = cmd.icon
336
336
  return (
@@ -338,9 +338,9 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
338
338
  key={cmd.id}
339
339
  value={cmd.label}
340
340
  onSelect={() => handleSelect(cmd.action)}
341
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
341
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
342
342
  >
343
- <Icon className="w-4 h-4 text-gray-500" />
343
+ <Icon className="h-4 w-4 text-gray-500" />
344
344
  <span>{cmd.label}</span>
345
345
  </Command.Item>
346
346
  )
@@ -348,8 +348,8 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
348
348
  </Command.Group>
349
349
  )}
350
350
 
351
- <Command.Group heading="Actions" className="px-2 py-2 mt-2">
352
- <div className="text-xs font-medium text-gray-500 mb-2">ACTIONS</div>
351
+ <Command.Group heading="Actions" className="mt-2 px-2 py-2">
352
+ <div className="mb-2 text-xs font-medium text-gray-500">ACTIONS</div>
353
353
  {staticActions.map((cmd) => {
354
354
  const Icon = cmd.icon
355
355
  return (
@@ -364,9 +364,9 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
364
364
  type: 'action',
365
365
  })
366
366
  }
367
- className="flex items-center gap-3 px-3 py-2 rounded-lg cursor-pointer hover:bg-gray-100 data-[selected=true]:bg-gray-100"
367
+ className="flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-100 data-[selected=true]:bg-gray-100"
368
368
  >
369
- <Icon className="w-4 h-4 text-gray-500" />
369
+ <Icon className="h-4 w-4 text-gray-500" />
370
370
  <span>{cmd.label}</span>
371
371
  </Command.Item>
372
372
  )
@@ -374,19 +374,19 @@ export function CommandPalette({ open, onOpenChange, onNavigate }: CommandPalett
374
374
  </Command.Group>
375
375
  </Command.List>
376
376
 
377
- <div className="border-t border-gray-200 px-4 py-3 bg-gray-50 flex items-center justify-between text-xs text-gray-500">
377
+ <div className="flex items-center justify-between border-t border-gray-200 bg-gray-50 px-4 py-3 text-xs text-gray-500">
378
378
  <div className="flex items-center gap-4">
379
379
  <span className="flex items-center gap-1">
380
- <kbd className="px-1.5 py-0.5 bg-white border border-gray-300 rounded text-[10px]">
380
+ <kbd className="rounded border border-gray-300 bg-white px-1.5 py-0.5 text-[10px]">
381
381
 
382
382
  </kbd>
383
- <kbd className="px-1.5 py-0.5 bg-white border border-gray-300 rounded text-[10px]">
383
+ <kbd className="rounded border border-gray-300 bg-white px-1.5 py-0.5 text-[10px]">
384
384
 
385
385
  </kbd>
386
386
  to navigate
387
387
  </span>
388
388
  <span className="flex items-center gap-1">
389
- <kbd className="px-1.5 py-0.5 bg-white border border-gray-300 rounded text-[10px]">
389
+ <kbd className="rounded border border-gray-300 bg-white px-1.5 py-0.5 text-[10px]">
390
390
 
391
391
  </kbd>
392
392
  to select
@@ -20,7 +20,7 @@ export function ContentOverviewChart({ published, drafts, scheduled }: ContentOv
20
20
 
21
21
  if (total === 0) {
22
22
  return (
23
- <div className="flex items-center justify-center h-full text-sm text-gray-400">
23
+ <div className="flex h-full items-center justify-center text-sm text-gray-400">
24
24
  No content yet
25
25
  </div>
26
26
  )
@@ -28,7 +28,7 @@ export function ContentOverviewChart({ published, drafts, scheduled }: ContentOv
28
28
 
29
29
  return (
30
30
  <div className="flex items-center gap-6">
31
- <div className="w-36 h-36 shrink-0">
31
+ <div className="h-36 w-36 shrink-0">
32
32
  <ResponsiveContainer width="100%" height="100%">
33
33
  <PieChart>
34
34
  <Pie
@@ -54,7 +54,7 @@ export function ContentOverviewChart({ published, drafts, scheduled }: ContentOv
54
54
  return (
55
55
  <div key={entry.name} className="flex items-center gap-3">
56
56
  <span
57
- className="w-2.5 h-2.5 rounded-full shrink-0"
57
+ className="h-2.5 w-2.5 shrink-0 rounded-full"
58
58
  style={{ backgroundColor: COLORS[idx] }}
59
59
  />
60
60
  <div className="min-w-0">
@@ -32,13 +32,13 @@ export class ErrorBoundary extends Component<Props, State> {
32
32
  return (
33
33
  <div className="flex min-h-[200px] items-center justify-center p-6">
34
34
  <div className="text-center">
35
- <h2 className="text-lg font-medium text-foreground mb-2">Something went wrong</h2>
36
- <p className="text-sm text-muted-foreground mb-4">
35
+ <h2 className="text-foreground mb-2 text-lg font-medium">Something went wrong</h2>
36
+ <p className="text-muted-foreground mb-4 text-sm">
37
37
  {this.state.error?.message ?? 'An unexpected error occurred'}
38
38
  </p>
39
39
  <button
40
40
  onClick={() => this.setState({ hasError: false, error: null })}
41
- className="px-4 py-2 text-sm font-medium text-primary-foreground bg-primary rounded-md hover:bg-primary/90 transition-colors"
41
+ className="text-primary-foreground bg-primary hover:bg-primary/90 rounded-md px-4 py-2 text-sm font-medium transition-colors"
42
42
  >
43
43
  Try Again
44
44
  </button>
@@ -28,12 +28,12 @@ export function FocalPointPicker({ imageUrl, focalX, focalY, onChange }: FocalPo
28
28
  return (
29
29
  <div className="space-y-2">
30
30
  <div className="flex items-center gap-2 text-sm font-medium text-[var(--foreground)]">
31
- <Crosshair className="w-4 h-4" />
31
+ <Crosshair className="h-4 w-4" />
32
32
  Focal Point
33
33
  </div>
34
34
  <div
35
35
  ref={containerRef}
36
- className="relative rounded-lg overflow-hidden border border-[var(--border)] cursor-crosshair select-none"
36
+ className="relative cursor-crosshair overflow-hidden rounded-lg border border-[var(--border)] select-none"
37
37
  style={{ maxHeight: '200px' }}
38
38
  onClick={handlePosition}
39
39
  onMouseDown={() => setDragging(true)}
@@ -46,11 +46,11 @@ export function FocalPointPicker({ imageUrl, focalX, focalY, onChange }: FocalPo
46
46
  <img
47
47
  src={imageUrl}
48
48
  alt="Focal point preview"
49
- className="w-full h-full object-contain"
49
+ className="h-full w-full object-contain"
50
50
  draggable={false}
51
51
  />
52
52
  <div
53
- className="absolute w-6 h-6 -ml-3 -mt-3 rounded-full border-2 border-white shadow-lg bg-blue-500/50 pointer-events-none"
53
+ className="pointer-events-none absolute -mt-3 -ml-3 h-6 w-6 rounded-full border-2 border-white bg-blue-500/50 shadow-lg"
54
54
  style={{ left: `${focalX * 100}%`, top: `${focalY * 100}%` }}
55
55
  >
56
56
  <div className="absolute inset-1 rounded-full bg-white" />
@@ -189,9 +189,9 @@ export function FolderTree({
189
189
  return (
190
190
  <div key={folder.id}>
191
191
  <div
192
- className={`group flex items-center gap-1 px-2 py-1.5 rounded-md cursor-pointer text-sm transition-colors ${
192
+ className={`group flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-sm transition-colors ${
193
193
  isActive
194
- ? 'bg-blue-50 text-blue-700 font-medium'
194
+ ? 'bg-blue-50 font-medium text-blue-700'
195
195
  : isDragOver
196
196
  ? 'bg-blue-100 ring-2 ring-blue-300'
197
197
  : 'text-gray-700 hover:bg-gray-100'
@@ -208,23 +208,23 @@ export function FolderTree({
208
208
  >
209
209
  <button
210
210
  type="button"
211
- className={`p-0.5 rounded hover:bg-gray-200 transition-colors ${hasChildren ? '' : 'invisible'}`}
211
+ className={`rounded p-0.5 transition-colors hover:bg-gray-200 ${hasChildren ? '' : 'invisible'}`}
212
212
  onClick={(e) => {
213
213
  e.stopPropagation()
214
214
  toggleExpand(folder.id)
215
215
  }}
216
216
  >
217
217
  {isExpanded ? (
218
- <ChevronDown className="w-3.5 h-3.5" />
218
+ <ChevronDown className="h-3.5 w-3.5" />
219
219
  ) : (
220
- <ChevronRight className="w-3.5 h-3.5" />
220
+ <ChevronRight className="h-3.5 w-3.5" />
221
221
  )}
222
222
  </button>
223
223
 
224
224
  {isExpanded ? (
225
- <FolderOpen className="w-4 h-4 text-blue-500 shrink-0" />
225
+ <FolderOpen className="h-4 w-4 shrink-0 text-blue-500" />
226
226
  ) : (
227
- <FolderIcon className="w-4 h-4 text-gray-400 shrink-0" />
227
+ <FolderIcon className="h-4 w-4 shrink-0 text-gray-400" />
228
228
  )}
229
229
 
230
230
  {editingId === folder.id ? (
@@ -238,11 +238,11 @@ export function FolderTree({
238
238
  if (e.key === 'Enter') handleRename(folder.id)
239
239
  if (e.key === 'Escape') setEditingId(null)
240
240
  }}
241
- className="flex-1 min-w-0 text-sm border border-blue-300 rounded px-1 py-0 focus:outline-none focus:ring-1 focus:ring-blue-500"
241
+ className="min-w-0 flex-1 rounded border border-blue-300 px-1 py-0 text-sm focus:ring-1 focus:ring-blue-500 focus:outline-none"
242
242
  onClick={(e) => e.stopPropagation()}
243
243
  />
244
244
  ) : (
245
- <span className="flex-1 min-w-0 truncate">{folder.name}</span>
245
+ <span className="min-w-0 flex-1 truncate">{folder.name}</span>
246
246
  )}
247
247
 
248
248
  {count !== undefined && !editingId && (
@@ -251,13 +251,13 @@ export function FolderTree({
251
251
 
252
252
  <button
253
253
  type="button"
254
- className="p-0.5 rounded opacity-0 group-hover:opacity-100 hover:bg-gray-200 transition-all"
254
+ className="rounded p-0.5 opacity-0 transition-all group-hover:opacity-100 hover:bg-gray-200"
255
255
  onClick={(e) => {
256
256
  e.stopPropagation()
257
257
  setContextMenu({ id: folder.id, x: e.clientX, y: e.clientY })
258
258
  }}
259
259
  >
260
- <MoreHorizontal className="w-3.5 h-3.5 text-gray-500" />
260
+ <MoreHorizontal className="h-3.5 w-3.5 text-gray-500" />
261
261
  </button>
262
262
  </div>
263
263
 
@@ -269,7 +269,7 @@ export function FolderTree({
269
269
  className="flex items-center gap-1 px-2 py-1"
270
270
  style={{ paddingLeft: `${24 + (depth + 1) * 16}px` }}
271
271
  >
272
- <FolderIcon className="w-4 h-4 text-gray-400 shrink-0" />
272
+ <FolderIcon className="h-4 w-4 shrink-0 text-gray-400" />
273
273
  <input
274
274
  ref={newFolderInputRef}
275
275
  type="text"
@@ -284,7 +284,7 @@ export function FolderTree({
284
284
  }
285
285
  }}
286
286
  placeholder="Folder name..."
287
- className="flex-1 min-w-0 text-sm border border-blue-300 rounded px-1 py-0 focus:outline-none focus:ring-1 focus:ring-blue-500"
287
+ className="min-w-0 flex-1 rounded border border-blue-300 px-1 py-0 text-sm focus:ring-1 focus:ring-blue-500 focus:outline-none"
288
288
  />
289
289
  </div>
290
290
  )}
@@ -297,19 +297,19 @@ export function FolderTree({
297
297
  if (loading) {
298
298
  return (
299
299
  <div className="flex items-center justify-center py-8">
300
- <Loader2 className="w-5 h-5 animate-spin text-gray-400" />
300
+ <Loader2 className="h-5 w-5 animate-spin text-gray-400" />
301
301
  </div>
302
302
  )
303
303
  }
304
304
 
305
305
  return (
306
- <div className="flex flex-col h-full">
306
+ <div className="flex h-full flex-col">
307
307
  <div className="space-y-0.5 px-1 py-2">
308
308
  <button
309
309
  type="button"
310
- className={`w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-sm transition-colors ${
310
+ className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
311
311
  isSelected({ type: 'smart', smart: 'all' })
312
- ? 'bg-blue-50 text-blue-700 font-medium'
312
+ ? 'bg-blue-50 font-medium text-blue-700'
313
313
  : 'text-gray-700 hover:bg-gray-100'
314
314
  }`}
315
315
  onClick={() => onSelect({ type: 'smart', smart: 'all' })}
@@ -317,7 +317,7 @@ export function FolderTree({
317
317
  onDragLeave={handleDragLeave}
318
318
  onDrop={(e) => handleDrop(e, null)}
319
319
  >
320
- <LayoutGrid className="w-4 h-4 shrink-0" />
320
+ <LayoutGrid className="h-4 w-4 shrink-0" />
321
321
  <span className="flex-1 text-left">All</span>
322
322
  {totalCount !== undefined && (
323
323
  <span className="text-xs text-gray-400 tabular-nums">{totalCount}</span>
@@ -326,14 +326,14 @@ export function FolderTree({
326
326
 
327
327
  <button
328
328
  type="button"
329
- className={`w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-sm transition-colors ${
329
+ className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
330
330
  isSelected({ type: 'smart', smart: 'recent' })
331
- ? 'bg-blue-50 text-blue-700 font-medium'
331
+ ? 'bg-blue-50 font-medium text-blue-700'
332
332
  : 'text-gray-700 hover:bg-gray-100'
333
333
  }`}
334
334
  onClick={() => onSelect({ type: 'smart', smart: 'recent' })}
335
335
  >
336
- <Clock className="w-4 h-4 shrink-0" />
336
+ <Clock className="h-4 w-4 shrink-0" />
337
337
  <span className="flex-1 text-left">Recent</span>
338
338
  {recentCount !== undefined && (
339
339
  <span className="text-xs text-gray-400 tabular-nums">{recentCount}</span>
@@ -342,14 +342,14 @@ export function FolderTree({
342
342
 
343
343
  <button
344
344
  type="button"
345
- className={`w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-sm transition-colors ${
345
+ className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
346
346
  isSelected({ type: 'smart', smart: 'uncategorized' })
347
- ? 'bg-blue-50 text-blue-700 font-medium'
347
+ ? 'bg-blue-50 font-medium text-blue-700'
348
348
  : 'text-gray-700 hover:bg-gray-100'
349
349
  }`}
350
350
  onClick={() => onSelect({ type: 'smart', smart: 'uncategorized' })}
351
351
  >
352
- <Inbox className="w-4 h-4 shrink-0" />
352
+ <Inbox className="h-4 w-4 shrink-0" />
353
353
  <span className="flex-1 text-left">Uncategorized</span>
354
354
  {uncategorizedCount !== undefined && (
355
355
  <span className="text-xs text-gray-400 tabular-nums">{uncategorizedCount}</span>
@@ -357,14 +357,14 @@ export function FolderTree({
357
357
  </button>
358
358
  </div>
359
359
 
360
- <div className="border-t border-gray-200 my-1" />
360
+ <div className="my-1 border-t border-gray-200" />
361
361
 
362
- <div className="flex-1 overflow-y-auto px-1 py-1 space-y-0.5">
362
+ <div className="flex-1 space-y-0.5 overflow-y-auto px-1 py-1">
363
363
  {folders.map((folder) => renderFolder(folder, 0))}
364
364
 
365
365
  {creatingIn === null && (
366
366
  <div className="flex items-center gap-1 px-2 py-1">
367
- <FolderIcon className="w-4 h-4 text-gray-400 shrink-0 ml-5" />
367
+ <FolderIcon className="ml-5 h-4 w-4 shrink-0 text-gray-400" />
368
368
  <input
369
369
  ref={newFolderInputRef}
370
370
  type="text"
@@ -379,7 +379,7 @@ export function FolderTree({
379
379
  }
380
380
  }}
381
381
  placeholder="Folder name..."
382
- className="flex-1 min-w-0 text-sm border border-blue-300 rounded px-1 py-0 focus:outline-none focus:ring-1 focus:ring-blue-500"
382
+ className="min-w-0 flex-1 rounded border border-blue-300 px-1 py-0 text-sm focus:ring-1 focus:ring-blue-500 focus:outline-none"
383
383
  />
384
384
  </div>
385
385
  )}
@@ -392,21 +392,21 @@ export function FolderTree({
392
392
  setCreatingIn(null)
393
393
  setNewFolderName('')
394
394
  }}
395
- className="w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-100 transition-colors"
395
+ className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm text-gray-600 transition-colors hover:bg-gray-100"
396
396
  >
397
- <Plus className="w-4 h-4" />
397
+ <Plus className="h-4 w-4" />
398
398
  New Folder
399
399
  </button>
400
400
  </div>
401
401
 
402
402
  {contextMenu && (
403
403
  <div
404
- className="fixed z-50 bg-white rounded-lg border border-gray-200 shadow-lg py-1 min-w-[160px]"
404
+ className="fixed z-50 min-w-[160px] rounded-lg border border-gray-200 bg-white py-1 shadow-lg"
405
405
  style={{ left: contextMenu.x, top: contextMenu.y }}
406
406
  >
407
407
  <button
408
408
  type="button"
409
- className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 transition-colors"
409
+ className="flex w-full items-center gap-2 px-3 py-1.5 text-sm text-gray-700 transition-colors hover:bg-gray-100"
410
410
  onClick={() => {
411
411
  const folder = findFolder(folders, contextMenu.id)
412
412
  if (folder) {
@@ -416,12 +416,12 @@ export function FolderTree({
416
416
  setContextMenu(null)
417
417
  }}
418
418
  >
419
- <Pencil className="w-3.5 h-3.5" />
419
+ <Pencil className="h-3.5 w-3.5" />
420
420
  Rename
421
421
  </button>
422
422
  <button
423
423
  type="button"
424
- className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 transition-colors"
424
+ className="flex w-full items-center gap-2 px-3 py-1.5 text-sm text-gray-700 transition-colors hover:bg-gray-100"
425
425
  onClick={() => {
426
426
  setCreatingIn(contextMenu.id)
427
427
  setNewFolderName('')
@@ -429,19 +429,19 @@ export function FolderTree({
429
429
  setContextMenu(null)
430
430
  }}
431
431
  >
432
- <FolderPlus className="w-3.5 h-3.5" />
432
+ <FolderPlus className="h-3.5 w-3.5" />
433
433
  New Subfolder
434
434
  </button>
435
- <div className="border-t border-gray-200 my-1" />
435
+ <div className="my-1 border-t border-gray-200" />
436
436
  <button
437
437
  type="button"
438
- className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-red-600 hover:bg-red-50 transition-colors"
438
+ className="flex w-full items-center gap-2 px-3 py-1.5 text-sm text-red-600 transition-colors hover:bg-red-50"
439
439
  onClick={() => {
440
440
  handleDelete(contextMenu.id)
441
441
  setContextMenu(null)
442
442
  }}
443
443
  >
444
- <Trash2 className="w-3.5 h-3.5" />
444
+ <Trash2 className="h-3.5 w-3.5" />
445
445
  Delete
446
446
  </button>
447
447
  </div>