@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.
- package/CHANGELOG.md +30 -0
- package/dist/__tests__/components/posts-badges.test.js +3 -3
- package/dist/__tests__/components/posts-badges.test.js.map +1 -1
- package/dist/__tests__/lib/page-editor-service.test.js +1 -0
- package/dist/__tests__/lib/page-editor-service.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/AICoauthorBubbleMenu.js +2 -2
- package/dist/components/AICoauthorBubbleMenu.js.map +1 -1
- package/dist/components/Breadcrumbs.js +2 -2
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/CoauthorResultPopover.d.ts.map +1 -1
- package/dist/components/CoauthorResultPopover.js +1 -1
- package/dist/components/CoauthorResultPopover.js.map +1 -1
- package/dist/components/CommandPalette.d.ts.map +1 -1
- package/dist/components/CommandPalette.js +11 -11
- package/dist/components/CommandPalette.js.map +1 -1
- package/dist/components/CommentSidePanel.js +11 -11
- package/dist/components/CommentSidePanel.js.map +1 -1
- package/dist/components/ContentOverviewChart.js +2 -2
- package/dist/components/ContentOverviewChart.js.map +1 -1
- package/dist/components/FocalPointPicker.js +1 -1
- package/dist/components/FocalPointPicker.js.map +1 -1
- package/dist/components/LivePreview.d.ts.map +1 -1
- package/dist/components/LivePreview.js +5 -5
- package/dist/components/LivePreview.js.map +1 -1
- package/dist/components/LogoPlaceholder.js +1 -1
- package/dist/components/LogoPlaceholder.js.map +1 -1
- package/dist/components/MentionableTextarea.js +3 -3
- package/dist/components/MentionableTextarea.js.map +1 -1
- package/dist/components/NotificationBell.js +1 -1
- package/dist/components/NotificationBell.js.map +1 -1
- package/dist/components/OfflineStatus.js +8 -8
- package/dist/components/OfflineStatus.js.map +1 -1
- package/dist/components/PresenceChips.d.ts.map +1 -1
- package/dist/components/PresenceChips.js +10 -6
- package/dist/components/PresenceChips.js.map +1 -1
- package/dist/components/SEOConfigPanel.d.ts.map +1 -1
- package/dist/components/SEOConfigPanel.js +10 -10
- package/dist/components/SEOConfigPanel.js.map +1 -1
- package/dist/components/SEOPanel.js +12 -12
- package/dist/components/SEOPanel.js.map +1 -1
- package/dist/components/SEOPerformance.d.ts.map +1 -1
- package/dist/components/SEOPerformance.js +3 -3
- package/dist/components/SEOPerformance.js.map +1 -1
- package/dist/components/TipTapEditor.js +6 -6
- package/dist/components/TipTapEditor.js.map +1 -1
- package/dist/components/pages/tag-badges.js +6 -6
- package/dist/components/pages/tag-badges.js.map +1 -1
- package/dist/components/posts/badges.d.ts +0 -4
- package/dist/components/posts/badges.d.ts.map +1 -1
- package/dist/components/posts/badges.js +28 -42
- package/dist/components/posts/badges.js.map +1 -1
- package/dist/components/ui/Badge.js +5 -5
- package/dist/components/ui/Badge.js.map +1 -1
- package/dist/components/ui/Toast.d.ts.map +1 -1
- package/dist/components/ui/Toast.js +4 -4
- package/dist/components/ui/Toast.js.map +1 -1
- package/dist/fields/ComponentBlockField.js +2 -2
- package/dist/fields/ComponentBlockField.js.map +1 -1
- package/dist/fields/FieldRenderer.js +1 -1
- package/dist/fields/FieldRenderer.js.map +1 -1
- package/dist/fields/PropInput.js +1 -1
- package/dist/fields/PropInput.js.map +1 -1
- package/dist/fields/RelationshipField.js +5 -5
- package/dist/fields/RelationshipField.js.map +1 -1
- package/dist/fields/ToggleField.js +1 -1
- package/dist/fields/ToggleField.js.map +1 -1
- package/dist/lib/seo-service.d.ts +0 -2
- package/dist/lib/seo-service.d.ts.map +1 -1
- package/dist/lib/seo-service.js.map +1 -1
- package/dist/views/Dashboard.js +5 -5
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/DocumentEdit.d.ts.map +1 -1
- package/dist/views/DocumentEdit.js +5 -5
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/ForgotPassword.d.ts.map +1 -1
- package/dist/views/ForgotPassword.js +3 -2
- package/dist/views/ForgotPassword.js.map +1 -1
- package/dist/views/FormEditor.d.ts.map +1 -1
- package/dist/views/FormEditor.js +5 -5
- package/dist/views/FormEditor.js.map +1 -1
- package/dist/views/Login.d.ts.map +1 -1
- package/dist/views/Login.js +17 -17
- package/dist/views/Login.js.map +1 -1
- package/dist/views/PageEditor.d.ts.map +1 -1
- package/dist/views/PageEditor.js +2 -2
- package/dist/views/PageEditor.js.map +1 -1
- package/dist/views/Pages/PagesListView.js +6 -6
- package/dist/views/Pages/PagesListView.js.map +1 -1
- package/dist/views/Pages.d.ts.map +1 -1
- package/dist/views/Pages.js +16 -19
- package/dist/views/Pages.js.map +1 -1
- package/dist/views/ResetPassword.d.ts.map +1 -1
- package/dist/views/ResetPassword.js +3 -2
- package/dist/views/ResetPassword.js.map +1 -1
- package/dist/views/Settings.js +2 -2
- package/dist/views/Settings.js.map +1 -1
- package/dist/views/SetupWizard.d.ts.map +1 -1
- package/dist/views/SetupWizard.js +6 -5
- package/dist/views/SetupWizard.js.map +1 -1
- package/dist/views/page-builder/DesignScore.js +12 -12
- package/dist/views/page-builder/DesignScore.js.map +1 -1
- package/dist/views/page-builder/SEOPanel.js +9 -9
- package/dist/views/page-builder/SEOPanel.js.map +1 -1
- package/dist/views/page-editor/EditorCanvas.js +1 -1
- package/dist/views/page-editor/EditorCanvas.js.map +1 -1
- package/dist/views/page-editor/EditorTopBar.js +2 -2
- package/dist/views/page-editor/EditorTopBar.js.map +1 -1
- package/dist/views/page-editor/PagePreview.js +1 -1
- package/dist/views/page-editor/PagePreview.js.map +1 -1
- package/dist/views/page-editor/SectionInspector.js +1 -1
- package/dist/views/page-editor/SectionInspector.js.map +1 -1
- package/dist/views/page-editor/SitePreviewFrame.js +1 -1
- package/dist/views/page-editor/SitePreviewFrame.js.map +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
- package/dist/views/page-editor/sections/AuthorBioSection.js +2 -2
- package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
- package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
- package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
- package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
- package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
- package/dist/views/page-editor/sections/EmbedSection.d.ts +10 -0
- package/dist/views/page-editor/sections/EmbedSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/EmbedSection.js +24 -0
- package/dist/views/page-editor/sections/EmbedSection.js.map +1 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -1
- package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
- package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
- package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -1
- package/dist/views/page-editor/sections/GallerySection.js +1 -1
- package/dist/views/page-editor/sections/GallerySection.js.map +1 -1
- package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
- package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
- package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -1
- package/dist/views/page-editor/sections/MissionSection.js +1 -1
- package/dist/views/page-editor/sections/MissionSection.js.map +1 -1
- package/dist/views/page-editor/sections/PullQuoteSection.js +1 -1
- package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -1
- package/dist/views/page-editor/sections/RelatedPostsSection.js +1 -1
- package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -1
- package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
- package/dist/views/page-editor/sections/SectionRenderer.js +5 -1
- package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
- package/dist/views/page-editor/sections/parts.js +6 -6
- package/dist/views/page-editor/sections/parts.js.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.js +2 -2
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
- package/dist/views/post-editor/PostHeader.js +2 -2
- package/dist/views/post-editor/PostHeader.js.map +1 -1
- package/dist/views/post-editor/PostHeaderPanel.js +1 -1
- package/dist/views/post-editor/PostHeaderPanel.js.map +1 -1
- package/dist/views/post-editor/PostPreview.js +1 -1
- package/dist/views/post-editor/PostPreview.js.map +1 -1
- package/dist/views/profile/AccountSecurity.js +1 -1
- package/dist/views/profile/AccountSecurity.js.map +1 -1
- package/dist/views/seo/TechnicalTab.d.ts.map +1 -1
- package/dist/views/seo/TechnicalTab.js +0 -10
- package/dist/views/seo/TechnicalTab.js.map +1 -1
- package/dist/views/settings/components.js +1 -1
- package/dist/views/settings/components.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/components/posts-badges.test.tsx +3 -3
- package/src/__tests__/lib/page-editor-service.test.ts +1 -0
- package/src/components/AICoauthorBubbleMenu.tsx +4 -4
- package/src/components/Breadcrumbs.tsx +5 -5
- package/src/components/CoauthorResultPopover.tsx +26 -23
- package/src/components/CommandPalette.tsx +41 -39
- package/src/components/CommentSidePanel.tsx +20 -20
- package/src/components/ContentOverviewChart.tsx +4 -4
- package/src/components/FocalPointPicker.tsx +2 -2
- package/src/components/LivePreview.tsx +20 -17
- package/src/components/LogoPlaceholder.tsx +1 -1
- package/src/components/MentionableTextarea.tsx +5 -5
- package/src/components/NotificationBell.tsx +10 -10
- package/src/components/OfflineStatus.tsx +8 -8
- package/src/components/PresenceChips.tsx +12 -8
- package/src/components/SEOConfigPanel.tsx +40 -38
- package/src/components/SEOPanel.tsx +15 -15
- package/src/components/SEOPerformance.tsx +25 -23
- package/src/components/TipTapEditor.tsx +7 -7
- package/src/components/pages/tag-badges.tsx +6 -6
- package/src/components/posts/badges.tsx +28 -46
- package/src/components/ui/Badge.tsx +5 -5
- package/src/components/ui/Toast.tsx +4 -5
- package/src/fields/ComponentBlockField.tsx +2 -2
- package/src/fields/FieldRenderer.tsx +1 -1
- package/src/fields/PropInput.tsx +1 -1
- package/src/fields/RelationshipField.tsx +5 -5
- package/src/fields/ToggleField.tsx +1 -1
- package/src/lib/seo-service.ts +0 -2
- package/src/views/Dashboard.tsx +5 -5
- package/src/views/DocumentEdit.tsx +13 -11
- package/src/views/ForgotPassword.tsx +21 -18
- package/src/views/FormEditor.tsx +74 -69
- package/src/views/Login.tsx +45 -39
- package/src/views/PageEditor.tsx +26 -22
- package/src/views/Pages/PagesListView.tsx +6 -6
- package/src/views/Pages.tsx +64 -65
- package/src/views/ResetPassword.tsx +32 -29
- package/src/views/Settings.tsx +2 -2
- package/src/views/SetupWizard.tsx +42 -33
- package/src/views/page-builder/DesignScore.tsx +12 -12
- package/src/views/page-builder/SEOPanel.tsx +12 -12
- package/src/views/page-editor/EditorCanvas.tsx +1 -1
- package/src/views/page-editor/EditorTopBar.tsx +2 -2
- package/src/views/page-editor/PagePreview.tsx +1 -1
- package/src/views/page-editor/SectionInspector.tsx +1 -1
- package/src/views/page-editor/SitePreviewFrame.tsx +1 -1
- package/src/views/page-editor/sections/ArticleBodySection.tsx +5 -5
- package/src/views/page-editor/sections/AuthorBioSection.tsx +6 -6
- package/src/views/page-editor/sections/ByTheNumbersSection.tsx +5 -5
- package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
- package/src/views/page-editor/sections/EmbedSection.tsx +43 -0
- package/src/views/page-editor/sections/FeatureHighlightSection.tsx +7 -5
- package/src/views/page-editor/sections/GallerySection.tsx +6 -4
- package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
- package/src/views/page-editor/sections/MissionSection.tsx +4 -2
- package/src/views/page-editor/sections/PullQuoteSection.tsx +4 -4
- package/src/views/page-editor/sections/RelatedPostsSection.tsx +5 -5
- package/src/views/page-editor/sections/SectionRenderer.tsx +6 -2
- package/src/views/page-editor/sections/parts.tsx +6 -6
- package/src/views/post-editor/PostEditorCanvas.tsx +4 -4
- package/src/views/post-editor/PostHeader.tsx +5 -5
- package/src/views/post-editor/PostHeaderPanel.tsx +1 -1
- package/src/views/post-editor/PostPreview.tsx +1 -1
- package/src/views/profile/AccountSecurity.tsx +1 -1
- package/src/views/seo/TechnicalTab.tsx +0 -10
- 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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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)]
|
|
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)]
|
|
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)]
|
|
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
|
)
|
package/src/fields/PropInput.tsx
CHANGED
|
@@ -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
|
|
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-
|
|
30
|
-
DRAFT: 'bg-
|
|
31
|
-
ARCHIVED: 'bg-
|
|
32
|
-
SCHEDULED: 'bg-
|
|
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-
|
|
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
|
|
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
|
/>
|
package/src/lib/seo-service.ts
CHANGED
|
@@ -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> {
|
package/src/views/Dashboard.tsx
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
295
|
+
? 'bg-success/10 text-success'
|
|
296
296
|
: docStatus === 'SCHEDULED'
|
|
297
|
-
? 'bg-
|
|
298
|
-
: 'bg-
|
|
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
|
|
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
|
|
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
|
|
366
|
-
<AlertTriangle className="h-6 w-6
|
|
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
|
|
368
|
+
<h3 className="text-foreground mb-1 text-sm font-medium">
|
|
369
369
|
Collection schema not found
|
|
370
370
|
</h3>
|
|
371
|
-
<p className="text-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
49
|
-
<Shield className="h-7 w-7
|
|
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
|
|
52
|
-
<p className="mt-2
|
|
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
|
|
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
|
|
63
|
-
<CheckCircle2 className="h-6 w-6
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
84
|
-
<AlertTriangle className="mt-0.5 h-5 w-5 shrink-0
|
|
85
|
-
<p className="text-
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|