@actuate-media/cms-admin 0.54.0 → 0.56.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 (229) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/__tests__/components/posts-badges.test.js +3 -3
  3. package/dist/__tests__/components/posts-badges.test.js.map +1 -1
  4. package/dist/__tests__/lib/page-editor-service.test.js +1 -0
  5. package/dist/__tests__/lib/page-editor-service.test.js.map +1 -1
  6. package/dist/actuate-admin.css +1 -1
  7. package/dist/components/AICoauthorBubbleMenu.js +2 -2
  8. package/dist/components/AICoauthorBubbleMenu.js.map +1 -1
  9. package/dist/components/Breadcrumbs.js +2 -2
  10. package/dist/components/Breadcrumbs.js.map +1 -1
  11. package/dist/components/CoauthorResultPopover.d.ts.map +1 -1
  12. package/dist/components/CoauthorResultPopover.js +1 -1
  13. package/dist/components/CoauthorResultPopover.js.map +1 -1
  14. package/dist/components/CommandPalette.d.ts.map +1 -1
  15. package/dist/components/CommandPalette.js +11 -11
  16. package/dist/components/CommandPalette.js.map +1 -1
  17. package/dist/components/CommentSidePanel.js +11 -11
  18. package/dist/components/CommentSidePanel.js.map +1 -1
  19. package/dist/components/ContentOverviewChart.js +2 -2
  20. package/dist/components/ContentOverviewChart.js.map +1 -1
  21. package/dist/components/FocalPointPicker.js +1 -1
  22. package/dist/components/FocalPointPicker.js.map +1 -1
  23. package/dist/components/LivePreview.d.ts.map +1 -1
  24. package/dist/components/LivePreview.js +5 -5
  25. package/dist/components/LivePreview.js.map +1 -1
  26. package/dist/components/LogoPlaceholder.js +1 -1
  27. package/dist/components/LogoPlaceholder.js.map +1 -1
  28. package/dist/components/MentionableTextarea.js +3 -3
  29. package/dist/components/MentionableTextarea.js.map +1 -1
  30. package/dist/components/NotificationBell.js +1 -1
  31. package/dist/components/NotificationBell.js.map +1 -1
  32. package/dist/components/OfflineStatus.js +8 -8
  33. package/dist/components/OfflineStatus.js.map +1 -1
  34. package/dist/components/PresenceChips.d.ts.map +1 -1
  35. package/dist/components/PresenceChips.js +10 -6
  36. package/dist/components/PresenceChips.js.map +1 -1
  37. package/dist/components/SEOConfigPanel.d.ts.map +1 -1
  38. package/dist/components/SEOConfigPanel.js +10 -10
  39. package/dist/components/SEOConfigPanel.js.map +1 -1
  40. package/dist/components/SEOPanel.js +12 -12
  41. package/dist/components/SEOPanel.js.map +1 -1
  42. package/dist/components/SEOPerformance.d.ts.map +1 -1
  43. package/dist/components/SEOPerformance.js +3 -3
  44. package/dist/components/SEOPerformance.js.map +1 -1
  45. package/dist/components/TipTapEditor.js +6 -6
  46. package/dist/components/TipTapEditor.js.map +1 -1
  47. package/dist/components/pages/tag-badges.js +6 -6
  48. package/dist/components/pages/tag-badges.js.map +1 -1
  49. package/dist/components/posts/badges.d.ts +0 -4
  50. package/dist/components/posts/badges.d.ts.map +1 -1
  51. package/dist/components/posts/badges.js +28 -42
  52. package/dist/components/posts/badges.js.map +1 -1
  53. package/dist/components/ui/Badge.js +5 -5
  54. package/dist/components/ui/Badge.js.map +1 -1
  55. package/dist/components/ui/Toast.d.ts.map +1 -1
  56. package/dist/components/ui/Toast.js +4 -4
  57. package/dist/components/ui/Toast.js.map +1 -1
  58. package/dist/fields/ComponentBlockField.js +2 -2
  59. package/dist/fields/ComponentBlockField.js.map +1 -1
  60. package/dist/fields/FieldRenderer.js +1 -1
  61. package/dist/fields/FieldRenderer.js.map +1 -1
  62. package/dist/fields/PropInput.js +1 -1
  63. package/dist/fields/PropInput.js.map +1 -1
  64. package/dist/fields/RelationshipField.js +5 -5
  65. package/dist/fields/RelationshipField.js.map +1 -1
  66. package/dist/fields/ToggleField.js +1 -1
  67. package/dist/fields/ToggleField.js.map +1 -1
  68. package/dist/lib/seo-service.d.ts +0 -2
  69. package/dist/lib/seo-service.d.ts.map +1 -1
  70. package/dist/lib/seo-service.js.map +1 -1
  71. package/dist/views/Dashboard.js +5 -5
  72. package/dist/views/Dashboard.js.map +1 -1
  73. package/dist/views/DocumentEdit.d.ts.map +1 -1
  74. package/dist/views/DocumentEdit.js +5 -5
  75. package/dist/views/DocumentEdit.js.map +1 -1
  76. package/dist/views/ForgotPassword.d.ts.map +1 -1
  77. package/dist/views/ForgotPassword.js +3 -2
  78. package/dist/views/ForgotPassword.js.map +1 -1
  79. package/dist/views/FormEditor.d.ts.map +1 -1
  80. package/dist/views/FormEditor.js +5 -5
  81. package/dist/views/FormEditor.js.map +1 -1
  82. package/dist/views/Login.d.ts.map +1 -1
  83. package/dist/views/Login.js +17 -17
  84. package/dist/views/Login.js.map +1 -1
  85. package/dist/views/PageEditor.d.ts.map +1 -1
  86. package/dist/views/PageEditor.js +2 -2
  87. package/dist/views/PageEditor.js.map +1 -1
  88. package/dist/views/Pages/PagesListView.js +6 -6
  89. package/dist/views/Pages/PagesListView.js.map +1 -1
  90. package/dist/views/Pages.d.ts.map +1 -1
  91. package/dist/views/Pages.js +16 -19
  92. package/dist/views/Pages.js.map +1 -1
  93. package/dist/views/ResetPassword.d.ts.map +1 -1
  94. package/dist/views/ResetPassword.js +3 -2
  95. package/dist/views/ResetPassword.js.map +1 -1
  96. package/dist/views/Settings.js +2 -2
  97. package/dist/views/Settings.js.map +1 -1
  98. package/dist/views/SetupWizard.d.ts.map +1 -1
  99. package/dist/views/SetupWizard.js +6 -5
  100. package/dist/views/SetupWizard.js.map +1 -1
  101. package/dist/views/page-builder/DesignScore.js +12 -12
  102. package/dist/views/page-builder/DesignScore.js.map +1 -1
  103. package/dist/views/page-builder/SEOPanel.js +9 -9
  104. package/dist/views/page-builder/SEOPanel.js.map +1 -1
  105. package/dist/views/page-editor/EditorCanvas.js +1 -1
  106. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  107. package/dist/views/page-editor/EditorTopBar.js +2 -2
  108. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  109. package/dist/views/page-editor/PagePreview.js +1 -1
  110. package/dist/views/page-editor/PagePreview.js.map +1 -1
  111. package/dist/views/page-editor/SectionInspector.js +1 -1
  112. package/dist/views/page-editor/SectionInspector.js.map +1 -1
  113. package/dist/views/page-editor/SitePreviewFrame.js +1 -1
  114. package/dist/views/page-editor/SitePreviewFrame.js.map +1 -1
  115. package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
  116. package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
  117. package/dist/views/page-editor/sections/AuthorBioSection.js +2 -2
  118. package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
  119. package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
  120. package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
  121. package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
  122. package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
  123. package/dist/views/page-editor/sections/EmbedSection.d.ts +10 -0
  124. package/dist/views/page-editor/sections/EmbedSection.d.ts.map +1 -0
  125. package/dist/views/page-editor/sections/EmbedSection.js +24 -0
  126. package/dist/views/page-editor/sections/EmbedSection.js.map +1 -0
  127. package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -1
  128. package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
  129. package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
  130. package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -1
  131. package/dist/views/page-editor/sections/GallerySection.js +1 -1
  132. package/dist/views/page-editor/sections/GallerySection.js.map +1 -1
  133. package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
  134. package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
  135. package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -1
  136. package/dist/views/page-editor/sections/MissionSection.js +1 -1
  137. package/dist/views/page-editor/sections/MissionSection.js.map +1 -1
  138. package/dist/views/page-editor/sections/PullQuoteSection.js +1 -1
  139. package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -1
  140. package/dist/views/page-editor/sections/RelatedPostsSection.js +1 -1
  141. package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -1
  142. package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
  143. package/dist/views/page-editor/sections/SectionRenderer.js +5 -1
  144. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
  145. package/dist/views/page-editor/sections/parts.js +6 -6
  146. package/dist/views/page-editor/sections/parts.js.map +1 -1
  147. package/dist/views/post-editor/PostEditorCanvas.js +2 -2
  148. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  149. package/dist/views/post-editor/PostHeader.js +2 -2
  150. package/dist/views/post-editor/PostHeader.js.map +1 -1
  151. package/dist/views/post-editor/PostHeaderPanel.js +1 -1
  152. package/dist/views/post-editor/PostHeaderPanel.js.map +1 -1
  153. package/dist/views/post-editor/PostPreview.js +1 -1
  154. package/dist/views/post-editor/PostPreview.js.map +1 -1
  155. package/dist/views/profile/AccountSecurity.js +1 -1
  156. package/dist/views/profile/AccountSecurity.js.map +1 -1
  157. package/dist/views/seo/TechnicalTab.d.ts.map +1 -1
  158. package/dist/views/seo/TechnicalTab.js +0 -10
  159. package/dist/views/seo/TechnicalTab.js.map +1 -1
  160. package/dist/views/settings/components.js +1 -1
  161. package/dist/views/settings/components.js.map +1 -1
  162. package/package.json +2 -2
  163. package/src/__tests__/components/posts-badges.test.tsx +3 -3
  164. package/src/__tests__/lib/page-editor-service.test.ts +1 -0
  165. package/src/components/AICoauthorBubbleMenu.tsx +4 -4
  166. package/src/components/Breadcrumbs.tsx +5 -5
  167. package/src/components/CoauthorResultPopover.tsx +26 -23
  168. package/src/components/CommandPalette.tsx +41 -39
  169. package/src/components/CommentSidePanel.tsx +20 -20
  170. package/src/components/ContentOverviewChart.tsx +4 -4
  171. package/src/components/FocalPointPicker.tsx +2 -2
  172. package/src/components/LivePreview.tsx +20 -17
  173. package/src/components/LogoPlaceholder.tsx +1 -1
  174. package/src/components/MentionableTextarea.tsx +5 -5
  175. package/src/components/NotificationBell.tsx +10 -10
  176. package/src/components/OfflineStatus.tsx +8 -8
  177. package/src/components/PresenceChips.tsx +12 -8
  178. package/src/components/SEOConfigPanel.tsx +40 -38
  179. package/src/components/SEOPanel.tsx +15 -15
  180. package/src/components/SEOPerformance.tsx +25 -23
  181. package/src/components/TipTapEditor.tsx +7 -7
  182. package/src/components/pages/tag-badges.tsx +6 -6
  183. package/src/components/posts/badges.tsx +28 -46
  184. package/src/components/ui/Badge.tsx +5 -5
  185. package/src/components/ui/Toast.tsx +4 -5
  186. package/src/fields/ComponentBlockField.tsx +2 -2
  187. package/src/fields/FieldRenderer.tsx +1 -1
  188. package/src/fields/PropInput.tsx +1 -1
  189. package/src/fields/RelationshipField.tsx +5 -5
  190. package/src/fields/ToggleField.tsx +1 -1
  191. package/src/lib/seo-service.ts +0 -2
  192. package/src/views/Dashboard.tsx +5 -5
  193. package/src/views/DocumentEdit.tsx +13 -11
  194. package/src/views/ForgotPassword.tsx +21 -18
  195. package/src/views/FormEditor.tsx +74 -69
  196. package/src/views/Login.tsx +45 -39
  197. package/src/views/PageEditor.tsx +26 -22
  198. package/src/views/Pages/PagesListView.tsx +6 -6
  199. package/src/views/Pages.tsx +64 -65
  200. package/src/views/ResetPassword.tsx +32 -29
  201. package/src/views/Settings.tsx +2 -2
  202. package/src/views/SetupWizard.tsx +42 -33
  203. package/src/views/page-builder/DesignScore.tsx +12 -12
  204. package/src/views/page-builder/SEOPanel.tsx +12 -12
  205. package/src/views/page-editor/EditorCanvas.tsx +1 -1
  206. package/src/views/page-editor/EditorTopBar.tsx +2 -2
  207. package/src/views/page-editor/PagePreview.tsx +1 -1
  208. package/src/views/page-editor/SectionInspector.tsx +1 -1
  209. package/src/views/page-editor/SitePreviewFrame.tsx +1 -1
  210. package/src/views/page-editor/sections/ArticleBodySection.tsx +5 -5
  211. package/src/views/page-editor/sections/AuthorBioSection.tsx +6 -6
  212. package/src/views/page-editor/sections/ByTheNumbersSection.tsx +5 -5
  213. package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
  214. package/src/views/page-editor/sections/EmbedSection.tsx +43 -0
  215. package/src/views/page-editor/sections/FeatureHighlightSection.tsx +7 -5
  216. package/src/views/page-editor/sections/GallerySection.tsx +6 -4
  217. package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
  218. package/src/views/page-editor/sections/MissionSection.tsx +4 -2
  219. package/src/views/page-editor/sections/PullQuoteSection.tsx +4 -4
  220. package/src/views/page-editor/sections/RelatedPostsSection.tsx +5 -5
  221. package/src/views/page-editor/sections/SectionRenderer.tsx +6 -2
  222. package/src/views/page-editor/sections/parts.tsx +6 -6
  223. package/src/views/post-editor/PostEditorCanvas.tsx +4 -4
  224. package/src/views/post-editor/PostHeader.tsx +5 -5
  225. package/src/views/post-editor/PostHeaderPanel.tsx +1 -1
  226. package/src/views/post-editor/PostPreview.tsx +1 -1
  227. package/src/views/profile/AccountSecurity.tsx +1 -1
  228. package/src/views/seo/TechnicalTab.tsx +0 -10
  229. package/src/views/settings/components.tsx +1 -1
@@ -11,11 +11,10 @@ interface Toast {
11
11
  }
12
12
 
13
13
  const typeClasses: Record<ToastType, string> = {
14
- success:
15
- 'border-emerald-500 bg-emerald-50 text-emerald-900 dark:bg-emerald-900/20 dark:text-emerald-300',
16
- error: 'border-red-500 bg-red-50 text-red-900 dark:bg-red-900/20 dark:text-red-300',
17
- warning: 'border-amber-500 bg-amber-50 text-amber-900 dark:bg-amber-900/20 dark:text-amber-300',
18
- info: 'border-blue-500 bg-blue-50 text-blue-900 dark:bg-blue-900/20 dark:text-blue-300',
14
+ success: 'border-success bg-success/10 text-success',
15
+ error: 'border-destructive bg-destructive/10 text-destructive',
16
+ warning: 'border-warning bg-warning/10 text-warning',
17
+ info: 'border-info bg-info/10 text-info',
19
18
  }
20
19
 
21
20
  export function useToast() {
@@ -117,7 +117,7 @@ export function ComponentBlockField({
117
117
 
118
118
  if (!currentSpec) {
119
119
  return (
120
- <div className="rounded-md border border-[var(--destructive)] bg-red-50 p-3 text-sm text-[var(--destructive)]">
120
+ <div className="bg-destructive/10 rounded-md border border-[var(--destructive)] p-3 text-sm text-[var(--destructive)]">
121
121
  Component block has no components to choose from.
122
122
  </div>
123
123
  )
@@ -147,7 +147,7 @@ export function ComponentBlockField({
147
147
  ) : null}
148
148
 
149
149
  {errorMessage ? (
150
- <div className="rounded-md border border-[var(--destructive)] bg-red-50 px-3 py-2 text-xs text-[var(--destructive)]">
150
+ <div className="bg-destructive/10 rounded-md border border-[var(--destructive)] px-3 py-2 text-xs text-[var(--destructive)]">
151
151
  {errorMessage}
152
152
  </div>
153
153
  ) : null}
@@ -62,7 +62,7 @@ export function FieldRenderer({ field, value, onChange }: FieldRendererProps) {
62
62
 
63
63
  if (!Component) {
64
64
  return (
65
- <div className="rounded-md border border-[var(--destructive)] bg-red-50 p-3 text-sm text-[var(--destructive)]">
65
+ <div className="bg-destructive/10 rounded-md border border-[var(--destructive)] p-3 text-sm text-[var(--destructive)]">
66
66
  Unknown field type: <code>{field.type}</code>
67
67
  </div>
68
68
  )
@@ -259,7 +259,7 @@ function BooleanInput({
259
259
  }`}
260
260
  >
261
261
  <span
262
- className={`pointer-events-none inline-block h-5 w-5 rounded-full bg-white shadow-sm ring-0 transition-transform ${
262
+ className={`bg-card pointer-events-none inline-block h-5 w-5 rounded-full shadow-sm ring-0 transition-transform ${
263
263
  boolVal ? 'translate-x-5' : 'translate-x-0'
264
264
  }`}
265
265
  />
@@ -26,10 +26,10 @@ interface RelatedDoc {
26
26
  }
27
27
 
28
28
  const STATUS_STYLES: Record<string, string> = {
29
- PUBLISHED: 'bg-green-100 text-green-800',
30
- DRAFT: 'bg-yellow-100 text-yellow-800',
31
- ARCHIVED: 'bg-gray-100 text-gray-600',
32
- SCHEDULED: 'bg-blue-100 text-blue-800',
29
+ PUBLISHED: 'bg-success/10 text-success',
30
+ DRAFT: 'bg-warning/10 text-warning',
31
+ ARCHIVED: 'bg-muted text-muted-foreground',
32
+ SCHEDULED: 'bg-info/10 text-info',
33
33
  }
34
34
 
35
35
  function relativeTime(dateStr: string | undefined): string {
@@ -150,7 +150,7 @@ export function RelationshipField({
150
150
  function renderOption(opt: RelatedDoc, isSelected: boolean) {
151
151
  const status = opt.status ?? (opt.data as any)?.status
152
152
  const collection = opt.collection ?? relationTo
153
- const statusClass = STATUS_STYLES[status] ?? 'bg-gray-100 text-gray-600'
153
+ const statusClass = STATUS_STYLES[status] ?? 'bg-muted text-muted-foreground'
154
154
 
155
155
  return (
156
156
  <button
@@ -24,7 +24,7 @@ export function ToggleField({ label, value = false, onChange, helpText }: Toggle
24
24
  }`}
25
25
  >
26
26
  <span
27
- className={`pointer-events-none inline-block h-5 w-5 rounded-full bg-white shadow-sm ring-0 transition-transform ${
27
+ className={`bg-card pointer-events-none inline-block h-5 w-5 rounded-full shadow-sm ring-0 transition-transform ${
28
28
  value ? 'translate-x-5' : 'translate-x-0'
29
29
  }`}
30
30
  />
@@ -356,8 +356,6 @@ export interface CrawlSettings {
356
356
  indexEntireSite: boolean
357
357
  includeImagesInSitemap: boolean
358
358
  includePostsInSitemap: boolean
359
- noindexPaginatedArchives: boolean
360
- noindexTagPages: boolean
361
359
  }
362
360
 
363
361
  export async function fetchSitemapStatus(): Promise<SitemapStatus | null> {
@@ -795,7 +795,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
795
795
  : contentHealth.tone === 'warn'
796
796
  ? 'text-warning'
797
797
  : contentHealth.tone === 'err'
798
- ? 'text-red-600 dark:text-red-400'
798
+ ? 'text-destructive dark:text-red-400'
799
799
  : 'text-muted-foreground'
800
800
  }`}
801
801
  >
@@ -810,7 +810,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
810
810
  : contentHealth.tone === 'warn'
811
811
  ? 'bg-warning'
812
812
  : contentHealth.tone === 'err'
813
- ? 'bg-red-500'
813
+ ? 'bg-destructive'
814
814
  : 'bg-muted-foreground/40'
815
815
  }`}
816
816
  style={{ width: `${Math.max(0, Math.min(100, contentHealth.score))}%` }}
@@ -833,7 +833,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
833
833
  <span
834
834
  className={`h-1.5 w-1.5 shrink-0 rounded-full ${
835
835
  iss.tone === 'err'
836
- ? 'bg-red-500'
836
+ ? 'bg-destructive'
837
837
  : iss.tone === 'warn'
838
838
  ? 'bg-warning'
839
839
  : 'bg-muted-foreground'
@@ -846,7 +846,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
846
846
  <span
847
847
  className={`shrink-0 text-sm font-medium ${
848
848
  iss.tone === 'err'
849
- ? 'text-red-600 dark:text-red-400'
849
+ ? 'text-destructive dark:text-red-400'
850
850
  : iss.tone === 'warn'
851
851
  ? 'text-warning'
852
852
  : 'text-muted-foreground'
@@ -1040,7 +1040,7 @@ function DeliveryTile({
1040
1040
  : tone === 'warn'
1041
1041
  ? 'text-warning'
1042
1042
  : tone === 'err'
1043
- ? 'text-red-600 dark:text-red-400'
1043
+ ? 'text-destructive dark:text-red-400'
1044
1044
  : 'text-muted-foreground'
1045
1045
  return (
1046
1046
  <div className="px-4 py-3.5">
@@ -292,15 +292,15 @@ export function DocumentEdit({
292
292
 
293
293
  const statusColor =
294
294
  docStatus === 'PUBLISHED'
295
- ? 'bg-green-100 text-green-800'
295
+ ? 'bg-success/10 text-success'
296
296
  : docStatus === 'SCHEDULED'
297
- ? 'bg-blue-100 text-blue-800'
298
- : 'bg-yellow-100 text-yellow-800'
297
+ ? 'bg-info/10 text-info'
298
+ : 'bg-warning/10 text-warning'
299
299
 
300
300
  if (loading) {
301
301
  return (
302
302
  <div className="flex min-h-[300px] items-center justify-center">
303
- <Loader2 className="h-8 w-8 animate-spin text-gray-400" />
303
+ <Loader2 className="text-muted-foreground h-8 w-8 animate-spin" />
304
304
  </div>
305
305
  )
306
306
  }
@@ -316,7 +316,7 @@ export function DocumentEdit({
316
316
  {docStatus}
317
317
  </span>
318
318
  {documentId && <PresenceIndicator documentId={documentId} />}
319
- {isDirty && <span className="text-xs font-medium text-amber-600">Unsaved changes</span>}
319
+ {isDirty && <span className="text-warning text-xs font-medium">Unsaved changes</span>}
320
320
  </div>
321
321
  <div className="flex items-center gap-2">
322
322
  <button
@@ -362,13 +362,15 @@ export function DocumentEdit({
362
362
  <div className="space-y-6">
363
363
  {fields.length === 0 ? (
364
364
  <div className="flex flex-col items-center justify-center rounded-lg border border-[var(--border)] py-16 text-center">
365
- <div className="mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-gray-100">
366
- <AlertTriangle className="h-6 w-6 text-gray-400" />
365
+ <div className="bg-muted mb-4 flex h-12 w-12 items-center justify-center rounded-full">
366
+ <AlertTriangle className="text-muted-foreground h-6 w-6" />
367
367
  </div>
368
- <h3 className="mb-1 text-sm font-medium text-gray-900">
368
+ <h3 className="text-foreground mb-1 text-sm font-medium">
369
369
  Collection schema not found
370
370
  </h3>
371
- <p className="text-sm text-gray-500">No fields are defined for this collection.</p>
371
+ <p className="text-muted-foreground text-sm">
372
+ No fields are defined for this collection.
373
+ </p>
372
374
  </div>
373
375
  ) : (
374
376
  <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
@@ -410,14 +412,14 @@ export function DocumentEdit({
410
412
  {!isNew && (
411
413
  <button
412
414
  onClick={() => setShowSchedule(true)}
413
- className="inline-flex w-full items-center justify-center gap-1.5 rounded-md border border-[var(--border)] bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50"
415
+ className="border-border bg-card text-foreground hover:bg-accent inline-flex w-full items-center justify-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium"
414
416
  >
415
417
  <Calendar className="h-4 w-4" />
416
418
  {scheduledAt || scheduledUnpublishAt ? 'Reschedule' : 'Schedule'}
417
419
  </button>
418
420
  )}
419
421
  {!isNew && (scheduledAt || scheduledUnpublishAt) && (
420
- <div className="space-y-1 rounded-md border border-blue-100 bg-blue-50 px-3 py-2 text-xs text-blue-900">
422
+ <div className="border-info/30 bg-info/10 text-foreground space-y-1 rounded-md border px-3 py-2 text-xs">
421
423
  {scheduledAt && (
422
424
  <div className="flex items-center gap-1.5">
423
425
  <Calendar className="h-3.5 w-3.5" />
@@ -8,6 +8,9 @@ export interface ForgotPasswordProps {
8
8
  onNavigate: (path: string) => void
9
9
  }
10
10
 
11
+ const fieldClass =
12
+ 'w-full rounded-lg border border-border bg-input-background px-3 py-2.5 text-sm text-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none'
13
+
11
14
  export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
12
15
  const [email, setEmail] = useState('')
13
16
  const [submitting, setSubmitting] = useState(false)
@@ -42,37 +45,37 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
42
45
  }
43
46
 
44
47
  return (
45
- <div className="flex min-h-screen items-center justify-center bg-gray-50 px-4">
48
+ <div className="bg-muted flex min-h-screen items-center justify-center px-4">
46
49
  <div className="w-full max-w-md">
47
50
  <div className="mb-8 text-center">
48
- <div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-blue-600">
49
- <Shield className="h-7 w-7 text-white" />
51
+ <div className="bg-primary mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl">
52
+ <Shield className="text-primary-foreground h-7 w-7" />
50
53
  </div>
51
- <h1 className="text-2xl font-medium text-gray-900">Reset Password</h1>
52
- <p className="mt-2 text-gray-600">
54
+ <h1 className="text-foreground text-2xl font-medium">Reset Password</h1>
55
+ <p className="text-muted-foreground mt-2">
53
56
  {sent
54
57
  ? 'Check your inbox for a reset link'
55
58
  : "Enter your email and we'll send you a reset link"}
56
59
  </p>
57
60
  </div>
58
61
 
59
- <div className="space-y-5 rounded-xl border border-gray-200 bg-white p-6 shadow-sm">
62
+ <div className="border-border bg-card space-y-5 rounded-xl border p-6 shadow-sm">
60
63
  {sent ? (
61
64
  <div className="space-y-4 text-center">
62
- <div className="mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100">
63
- <CheckCircle2 className="h-6 w-6 text-green-600" />
65
+ <div className="bg-success/10 mx-auto flex h-12 w-12 items-center justify-center rounded-full">
66
+ <CheckCircle2 className="text-success h-6 w-6" />
64
67
  </div>
65
- <p className="text-sm text-gray-600">
68
+ <p className="text-muted-foreground text-sm">
66
69
  If an account exists for <strong>{email}</strong>, you will receive a password reset
67
70
  email shortly.
68
71
  </p>
69
- <p className="text-xs text-gray-500">
72
+ <p className="text-muted-foreground text-xs">
70
73
  The link expires in 1 hour. Check your spam folder if you don't see it.
71
74
  </p>
72
75
  <button
73
76
  type="button"
74
77
  onClick={() => onNavigate('/login')}
75
- className="w-full rounded-lg bg-blue-600 py-2.5 font-medium text-white transition-colors hover:bg-blue-700"
78
+ className="bg-primary text-primary-foreground hover:bg-primary/90 w-full rounded-lg py-2.5 font-medium transition-colors"
76
79
  >
77
80
  Back to Sign In
78
81
  </button>
@@ -80,16 +83,16 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
80
83
  ) : (
81
84
  <form onSubmit={handleSubmit} className="space-y-5">
82
85
  {error && (
83
- <div className="flex items-start gap-3 rounded-lg border border-red-200 bg-red-50 p-3">
84
- <AlertTriangle className="mt-0.5 h-5 w-5 shrink-0 text-red-600" />
85
- <p className="text-sm text-red-800">{error}</p>
86
+ <div className="border-destructive/30 bg-destructive/10 flex items-start gap-3 rounded-lg border p-3">
87
+ <AlertTriangle className="text-destructive mt-0.5 h-5 w-5 shrink-0" />
88
+ <p className="text-destructive text-sm">{error}</p>
86
89
  </div>
87
90
  )}
88
91
 
89
92
  <div>
90
93
  <label
91
94
  htmlFor="forgot-email"
92
- className="mb-1.5 block text-sm font-medium text-gray-700"
95
+ className="text-foreground mb-1.5 block text-sm font-medium"
93
96
  >
94
97
  Email Address
95
98
  </label>
@@ -99,7 +102,7 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
99
102
  value={email}
100
103
  onChange={(e) => setEmail(e.target.value)}
101
104
  placeholder="admin@example.com"
102
- className="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none"
105
+ className={fieldClass}
103
106
  required
104
107
  autoFocus
105
108
  autoComplete="email"
@@ -109,7 +112,7 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
109
112
  <button
110
113
  type="submit"
111
114
  disabled={!canSubmit}
112
- className="flex w-full items-center justify-center gap-2 rounded-lg bg-blue-600 py-2.5 font-medium text-white transition-colors hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50"
115
+ className="bg-primary text-primary-foreground hover:bg-primary/90 flex w-full items-center justify-center gap-2 rounded-lg py-2.5 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50"
113
116
  >
114
117
  {submitting ? (
115
118
  <>
@@ -127,7 +130,7 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
127
130
  <button
128
131
  type="button"
129
132
  onClick={() => onNavigate('/login')}
130
- className="flex w-full items-center justify-center gap-2 text-sm text-gray-600 transition-colors hover:text-gray-800"
133
+ className="text-muted-foreground hover:text-foreground flex w-full items-center justify-center gap-2 text-sm transition-colors"
131
134
  >
132
135
  <ArrowLeft className="h-4 w-4" />
133
136
  Back to Sign In