@actuate-media/cms-admin 0.49.3 → 0.49.4
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 +11 -0
- package/dist/AdminRoot.js +2 -2
- package/dist/AdminRoot.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/CoauthorResultPopover.js +1 -1
- package/dist/components/CoauthorResultPopover.js.map +1 -1
- package/dist/components/CommentSidePanel.js +1 -1
- package/dist/components/CommentSidePanel.js.map +1 -1
- package/dist/components/ContentOverviewChart.js +1 -1
- package/dist/components/ContentOverviewChart.js.map +1 -1
- package/dist/components/NotificationBell.js +1 -1
- package/dist/components/NotificationBell.js.map +1 -1
- package/dist/components/PresenceChips.js +1 -1
- package/dist/components/PresenceChips.js.map +1 -1
- package/dist/components/SEOConfigPanel.js +2 -2
- package/dist/components/SEOConfigPanel.js.map +1 -1
- package/dist/components/SEOPanel.d.ts.map +1 -1
- package/dist/components/SEOPanel.js +2 -2
- package/dist/components/SEOPanel.js.map +1 -1
- package/dist/components/SEOPerformance.js +2 -2
- package/dist/components/SEOPerformance.js.map +1 -1
- package/dist/components/forms/EntriesTable.js +1 -1
- package/dist/components/forms/EntriesTable.js.map +1 -1
- package/dist/components/ui/Card.js +1 -1
- package/dist/components/ui/Card.js.map +1 -1
- package/dist/components/ui/EmptyState.js +1 -1
- package/dist/components/ui/EmptyState.js.map +1 -1
- package/dist/layout/Sidebar.js +1 -1
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/layout/primitives/PageContainer.js +1 -1
- package/dist/layout/primitives/PageContainer.js.map +1 -1
- package/dist/views/CollectionList.js +1 -1
- package/dist/views/CollectionList.js.map +1 -1
- package/dist/views/Dashboard.js +8 -8
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/DocumentEdit.js +1 -1
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/ForgotPassword.js +1 -1
- package/dist/views/ForgotPassword.js.map +1 -1
- package/dist/views/FormEditor.d.ts.map +1 -1
- package/dist/views/FormEditor.js +1 -1
- package/dist/views/FormEditor.js.map +1 -1
- package/dist/views/Login.js +1 -1
- package/dist/views/Login.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +3 -3
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/PageEditor.js +1 -1
- package/dist/views/PageEditor.js.map +1 -1
- package/dist/views/Pages/PagesListView.js +3 -3
- package/dist/views/Pages/PagesListView.js.map +1 -1
- package/dist/views/Pages.js +1 -1
- package/dist/views/Pages.js.map +1 -1
- package/dist/views/Posts/PostsListView.js +1 -1
- package/dist/views/Posts/PostsListView.js.map +1 -1
- package/dist/views/Redirects.js +2 -2
- package/dist/views/Redirects.js.map +1 -1
- package/dist/views/ResetPassword.js +2 -2
- package/dist/views/ResetPassword.js.map +1 -1
- package/dist/views/ScriptTagEditor.js +1 -1
- package/dist/views/ScriptTagEditor.js.map +1 -1
- package/dist/views/ScriptTags.js +1 -1
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/SetupWizard.js +2 -2
- package/dist/views/SetupWizard.js.map +1 -1
- package/dist/views/page-editor/SectionInspector.js +2 -2
- package/dist/views/page-editor/SectionInspector.js.map +1 -1
- package/dist/views/post-editor/PostHeader.d.ts.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/package.json +1 -1
- package/src/AdminRoot.tsx +2 -2
- package/src/components/CoauthorResultPopover.tsx +1 -1
- package/src/components/CommentSidePanel.tsx +1 -1
- package/src/components/ContentOverviewChart.tsx +1 -1
- package/src/components/NotificationBell.tsx +2 -2
- package/src/components/PresenceChips.tsx +1 -1
- package/src/components/SEOConfigPanel.tsx +3 -3
- package/src/components/SEOPanel.tsx +8 -6
- package/src/components/SEOPerformance.tsx +5 -5
- package/src/components/forms/EntriesTable.tsx +1 -1
- package/src/components/ui/Card.tsx +1 -1
- package/src/components/ui/EmptyState.tsx +1 -1
- package/src/layout/Sidebar.tsx +1 -1
- package/src/layout/primitives/PageContainer.tsx +1 -1
- package/src/views/CollectionList.tsx +1 -1
- package/src/views/Dashboard.tsx +12 -12
- package/src/views/DocumentEdit.tsx +4 -4
- package/src/views/ForgotPassword.tsx +1 -1
- package/src/views/FormEditor.tsx +1 -3
- package/src/views/Login.tsx +2 -2
- package/src/views/MediaBrowser.tsx +7 -9
- package/src/views/PageEditor.tsx +2 -2
- package/src/views/Pages/PagesListView.tsx +3 -3
- package/src/views/Pages.tsx +1 -1
- package/src/views/Posts/PostsListView.tsx +1 -1
- package/src/views/Redirects.tsx +2 -2
- package/src/views/ResetPassword.tsx +2 -2
- package/src/views/ScriptTagEditor.tsx +2 -2
- package/src/views/ScriptTags.tsx +2 -2
- package/src/views/SetupWizard.tsx +2 -2
- package/src/views/page-editor/SectionInspector.tsx +4 -4
- package/src/views/post-editor/PostHeader.tsx +2 -4
- package/src/views/post-editor/PostHeaderPanel.tsx +2 -2
|
@@ -414,7 +414,7 @@ function ScoreRing({ score }: { score: number }) {
|
|
|
414
414
|
className="transition-all duration-500"
|
|
415
415
|
/>
|
|
416
416
|
</svg>
|
|
417
|
-
<span className="absolute text-sm font-
|
|
417
|
+
<span className="absolute text-sm font-medium" style={{ color }}>
|
|
418
418
|
{score}
|
|
419
419
|
</span>
|
|
420
420
|
</div>
|
|
@@ -624,7 +624,7 @@ export function SEOPanel({
|
|
|
624
624
|
<div className="rounded-lg border border-[var(--border)] bg-[var(--card)]">
|
|
625
625
|
{/* Header */}
|
|
626
626
|
<div className="flex items-center justify-between border-b border-[var(--border)] px-4 py-3">
|
|
627
|
-
<h3 className="flex items-center gap-2 text-sm font-
|
|
627
|
+
<h3 className="flex items-center gap-2 text-sm font-medium text-[var(--foreground)]">
|
|
628
628
|
<Search className="h-4 w-4" />
|
|
629
629
|
SEO
|
|
630
630
|
</h3>
|
|
@@ -692,24 +692,26 @@ export function SEOPanel({
|
|
|
692
692
|
<div className="grid grid-cols-2 gap-3">
|
|
693
693
|
<div className="rounded-lg bg-[var(--muted)] p-2.5">
|
|
694
694
|
<p className="text-xs text-[var(--muted-foreground)]">Flesch Score</p>
|
|
695
|
-
<p className={`text-lg font-
|
|
695
|
+
<p className={`text-lg font-medium ${fleschColor}`}>{readability.fleschScore}</p>
|
|
696
696
|
<p className={`text-[10px] ${fleschColor}`}>{fleschLabel}</p>
|
|
697
697
|
</div>
|
|
698
698
|
<div className="rounded-lg bg-[var(--muted)] p-2.5">
|
|
699
699
|
<p className="text-xs text-[var(--muted-foreground)]">Word Count</p>
|
|
700
|
-
<p className="text-lg font-
|
|
700
|
+
<p className="text-lg font-medium text-[var(--foreground)]">
|
|
701
|
+
{readability.wordCount}
|
|
702
|
+
</p>
|
|
701
703
|
<p className="text-[10px] text-[var(--muted-foreground)]">words</p>
|
|
702
704
|
</div>
|
|
703
705
|
<div className="rounded-lg bg-[var(--muted)] p-2.5">
|
|
704
706
|
<p className="text-xs text-[var(--muted-foreground)]">Avg. Sentence</p>
|
|
705
|
-
<p className="text-lg font-
|
|
707
|
+
<p className="text-lg font-medium text-[var(--foreground)]">
|
|
706
708
|
{readability.avgSentenceLength.toFixed(1)}
|
|
707
709
|
</p>
|
|
708
710
|
<p className="text-[10px] text-[var(--muted-foreground)]">words/sentence</p>
|
|
709
711
|
</div>
|
|
710
712
|
<div className="rounded-lg bg-[var(--muted)] p-2.5">
|
|
711
713
|
<p className="text-xs text-[var(--muted-foreground)]">Reading Time</p>
|
|
712
|
-
<p className="text-lg font-
|
|
714
|
+
<p className="text-lg font-medium text-[var(--foreground)]">
|
|
713
715
|
{readability.readingTime}
|
|
714
716
|
</p>
|
|
715
717
|
<p className="text-[10px] text-[var(--muted-foreground)]">min</p>
|
|
@@ -27,7 +27,7 @@ function ScoreBadge({ score }: { score: number }) {
|
|
|
27
27
|
const bg = score >= 80 ? 'bg-green-50' : score >= 60 ? 'bg-amber-50' : 'bg-red-50'
|
|
28
28
|
return (
|
|
29
29
|
<span
|
|
30
|
-
className={`inline-flex h-9 w-9 items-center justify-center rounded-full text-sm font-
|
|
30
|
+
className={`inline-flex h-9 w-9 items-center justify-center rounded-full text-sm font-medium ${color} ${bg}`}
|
|
31
31
|
>
|
|
32
32
|
{score}
|
|
33
33
|
</span>
|
|
@@ -57,7 +57,7 @@ export function SEOPerformance({ onNavigate }: SEOPerformanceProps) {
|
|
|
57
57
|
<div className="flex items-center justify-between border-b border-gray-200 p-4">
|
|
58
58
|
<div className="flex items-center gap-2">
|
|
59
59
|
<Search className="h-4 w-4 text-gray-500" />
|
|
60
|
-
<h2 className="text-sm font-
|
|
60
|
+
<h2 className="text-sm font-medium text-gray-900">SEO Performance</h2>
|
|
61
61
|
</div>
|
|
62
62
|
{totalIssues > 0 && (
|
|
63
63
|
<span className="text-xs text-gray-500">
|
|
@@ -120,7 +120,7 @@ export function SEOPerformance({ onNavigate }: SEOPerformanceProps) {
|
|
|
120
120
|
<FileWarning className="h-4 w-4 text-red-400" />
|
|
121
121
|
<span className="text-sm text-gray-700">Missing meta descriptions</span>
|
|
122
122
|
</div>
|
|
123
|
-
<span className="text-sm font-
|
|
123
|
+
<span className="text-sm font-medium text-gray-900">
|
|
124
124
|
{issues.missingMetaDescriptions}
|
|
125
125
|
</span>
|
|
126
126
|
</div>
|
|
@@ -129,7 +129,7 @@ export function SEOPerformance({ onNavigate }: SEOPerformanceProps) {
|
|
|
129
129
|
<LinkIcon className="h-4 w-4 text-red-400" />
|
|
130
130
|
<span className="text-sm text-gray-700">Broken internal links</span>
|
|
131
131
|
</div>
|
|
132
|
-
<span className="text-sm font-
|
|
132
|
+
<span className="text-sm font-medium text-gray-900">
|
|
133
133
|
{issues.brokenInternalLinks}
|
|
134
134
|
</span>
|
|
135
135
|
</div>
|
|
@@ -138,7 +138,7 @@ export function SEOPerformance({ onNavigate }: SEOPerformanceProps) {
|
|
|
138
138
|
<ImageOff className="h-4 w-4 text-red-400" />
|
|
139
139
|
<span className="text-sm text-gray-700">Missing alt text</span>
|
|
140
140
|
</div>
|
|
141
|
-
<span className="text-sm font-
|
|
141
|
+
<span className="text-sm font-medium text-gray-900">{issues.missingAltText}</span>
|
|
142
142
|
</div>
|
|
143
143
|
</div>
|
|
144
144
|
{totalIssues > 0 && (
|
|
@@ -130,7 +130,7 @@ export function EntriesTable({
|
|
|
130
130
|
/>
|
|
131
131
|
)}
|
|
132
132
|
<span
|
|
133
|
-
className={`text-foreground truncate ${entry.unread ? 'font-
|
|
133
|
+
className={`text-foreground truncate ${entry.unread ? 'font-medium' : 'font-medium'}`}
|
|
134
134
|
>
|
|
135
135
|
{name}
|
|
136
136
|
</span>
|
|
@@ -62,7 +62,7 @@ export function CardTitle({
|
|
|
62
62
|
}: HTMLAttributes<HTMLHeadingElement>) {
|
|
63
63
|
return (
|
|
64
64
|
<h3
|
|
65
|
-
className={`text-lg leading-tight font-
|
|
65
|
+
className={`text-lg leading-tight font-medium tracking-tight text-[var(--card-foreground)] ${className}`}
|
|
66
66
|
{...rest}
|
|
67
67
|
>
|
|
68
68
|
{children}
|
|
@@ -13,7 +13,7 @@ export function EmptyState({ icon, title, description, actionLabel, onAction }:
|
|
|
13
13
|
return (
|
|
14
14
|
<div className="flex flex-col items-center justify-center py-16 text-center">
|
|
15
15
|
{icon && <div className="mb-4 text-[var(--muted-foreground)]">{icon}</div>}
|
|
16
|
-
<h3 className="text-lg font-
|
|
16
|
+
<h3 className="text-lg font-medium">{title}</h3>
|
|
17
17
|
{description && (
|
|
18
18
|
<p className="mt-1 max-w-sm text-sm text-[var(--muted-foreground)]">{description}</p>
|
|
19
19
|
)}
|
package/src/layout/Sidebar.tsx
CHANGED
|
@@ -390,7 +390,7 @@ function renderNavTree(items: NavItem[], ctx: NavRenderContext): ReactNode {
|
|
|
390
390
|
</div>
|
|
391
391
|
) : (
|
|
392
392
|
<div key={`g-${item.group}`} className="px-3 pt-4 pb-1">
|
|
393
|
-
<span className="text-sidebar-foreground/55 text-[10px] font-
|
|
393
|
+
<span className="text-sidebar-foreground/55 text-[10px] font-medium tracking-wider uppercase">
|
|
394
394
|
{item.group}
|
|
395
395
|
</span>
|
|
396
396
|
</div>
|
|
@@ -79,7 +79,7 @@ export function PageContainer({
|
|
|
79
79
|
{(title || description) && (
|
|
80
80
|
<div className="min-w-0">
|
|
81
81
|
{title && (
|
|
82
|
-
<h1 className="text-foreground truncate text-2xl font-
|
|
82
|
+
<h1 className="text-foreground truncate text-2xl font-medium tracking-tight">
|
|
83
83
|
{title}
|
|
84
84
|
</h1>
|
|
85
85
|
)}
|
|
@@ -284,7 +284,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
|
|
|
284
284
|
<div className="mb-4 flex flex-wrap items-center justify-between gap-3">
|
|
285
285
|
<div>
|
|
286
286
|
<h1
|
|
287
|
-
className="text-xl font-
|
|
287
|
+
className="text-xl font-medium sm:text-2xl"
|
|
288
288
|
style={{ color: 'var(--actuate-text, #111827)' }}
|
|
289
289
|
>
|
|
290
290
|
{labels.plural}
|
package/src/views/Dashboard.tsx
CHANGED
|
@@ -584,7 +584,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
584
584
|
consistent across navigation. The on-page secondary action row
|
|
585
585
|
below covers the same creation paths plus authoring shortcuts. */}
|
|
586
586
|
<div className="flex flex-col gap-1 sm:gap-0.5">
|
|
587
|
-
<h1 className="text-foreground text-xl font-
|
|
587
|
+
<h1 className="text-foreground text-xl font-medium tracking-tight sm:text-2xl">
|
|
588
588
|
{greeting}, {userName} <span aria-hidden>👋</span>
|
|
589
589
|
</h1>
|
|
590
590
|
<p className="text-muted-foreground text-sm">
|
|
@@ -623,7 +623,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
623
623
|
<card.icon className={`h-4 w-4 ${card.iconColor}`} />
|
|
624
624
|
</div>
|
|
625
625
|
<div className="flex items-baseline gap-1">
|
|
626
|
-
<span className="text-foreground text-2xl leading-none font-
|
|
626
|
+
<span className="text-foreground text-2xl leading-none font-medium tracking-tight">
|
|
627
627
|
{card.value}
|
|
628
628
|
</span>
|
|
629
629
|
{card.unit && (
|
|
@@ -664,7 +664,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
664
664
|
<section className="bg-card border-border overflow-hidden rounded-xl border shadow-sm">
|
|
665
665
|
<header className="border-border flex items-center justify-between border-b px-4 py-3">
|
|
666
666
|
<div className="min-w-0">
|
|
667
|
-
<h2 className="text-foreground text-sm font-
|
|
667
|
+
<h2 className="text-foreground text-sm font-medium">Recent Activity</h2>
|
|
668
668
|
<p className="text-muted-foreground mt-0.5 text-xs">Last 7 days across all content</p>
|
|
669
669
|
</div>
|
|
670
670
|
{(stats?.recentDocuments?.length ?? 0) > 8 && (
|
|
@@ -693,7 +693,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
693
693
|
>
|
|
694
694
|
<div className="flex min-w-0 items-start gap-3">
|
|
695
695
|
<div
|
|
696
|
-
className="mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[11px] font-
|
|
696
|
+
className="mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[11px] font-medium text-white"
|
|
697
697
|
style={{ background: it.avatar.color }}
|
|
698
698
|
aria-hidden
|
|
699
699
|
>
|
|
@@ -701,7 +701,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
701
701
|
</div>
|
|
702
702
|
<div className="min-w-0 flex-1">
|
|
703
703
|
<p className="text-foreground truncate text-sm leading-snug">
|
|
704
|
-
<span className="font-
|
|
704
|
+
<span className="font-medium">
|
|
705
705
|
“{it.title || 'Untitled'}”
|
|
706
706
|
</span>{' '}
|
|
707
707
|
<span className="text-muted-foreground">— {it.typeLabel}</span>
|
|
@@ -731,7 +731,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
731
731
|
<section className="bg-card border-border overflow-hidden rounded-xl border shadow-sm">
|
|
732
732
|
<header className="border-border flex items-center justify-between border-b px-4 py-3">
|
|
733
733
|
<div className="min-w-0">
|
|
734
|
-
<h2 className="text-foreground text-sm font-
|
|
734
|
+
<h2 className="text-foreground text-sm font-medium">Publishing Queue</h2>
|
|
735
735
|
<p className="text-muted-foreground mt-0.5 text-xs">
|
|
736
736
|
{publishQueue.length} item{publishQueue.length === 1 ? '' : 's'} scheduled
|
|
737
737
|
</p>
|
|
@@ -787,7 +787,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
787
787
|
<section className="bg-card border-border overflow-hidden rounded-xl border shadow-sm">
|
|
788
788
|
<header className="border-border flex items-center justify-between border-b px-4 py-3">
|
|
789
789
|
<div className="min-w-0">
|
|
790
|
-
<h2 className="text-foreground text-sm font-
|
|
790
|
+
<h2 className="text-foreground text-sm font-medium">Content Health</h2>
|
|
791
791
|
<p className="text-muted-foreground mt-0.5 text-xs">SEO & quality issues</p>
|
|
792
792
|
</div>
|
|
793
793
|
<button
|
|
@@ -799,7 +799,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
799
799
|
</header>
|
|
800
800
|
<div className="px-4 pt-3.5 pb-2.5">
|
|
801
801
|
<div className="mb-1.5 flex items-baseline justify-between">
|
|
802
|
-
<p className="text-foreground text-2xl leading-none font-
|
|
802
|
+
<p className="text-foreground text-2xl leading-none font-medium tracking-tight">
|
|
803
803
|
{contentHealth.score > 0 ? contentHealth.score : '—'}
|
|
804
804
|
{contentHealth.score > 0 && (
|
|
805
805
|
<span className="text-muted-foreground ml-0.5 text-sm font-normal">/100</span>
|
|
@@ -861,7 +861,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
861
861
|
{iss.label}
|
|
862
862
|
</span>
|
|
863
863
|
<span
|
|
864
|
-
className={`shrink-0 text-sm font-
|
|
864
|
+
className={`shrink-0 text-sm font-medium ${
|
|
865
865
|
iss.tone === 'err'
|
|
866
866
|
? 'text-red-600 dark:text-red-400'
|
|
867
867
|
: iss.tone === 'warn'
|
|
@@ -892,7 +892,7 @@ export function Dashboard({ config, session, onNavigate }: DashboardProps) {
|
|
|
892
892
|
<section className="bg-card border-border overflow-hidden rounded-xl border shadow-sm">
|
|
893
893
|
<header className="border-border flex items-center justify-between border-b px-4 py-3">
|
|
894
894
|
<div className="min-w-0">
|
|
895
|
-
<h2 className="text-foreground text-sm font-
|
|
895
|
+
<h2 className="text-foreground text-sm font-medium">Delivery API</h2>
|
|
896
896
|
<p className="text-muted-foreground mt-0.5 text-xs">
|
|
897
897
|
Headless content delivery · last 24 hours
|
|
898
898
|
</p>
|
|
@@ -1030,7 +1030,7 @@ function EmptyState({
|
|
|
1030
1030
|
className={`flex flex-col items-center justify-center gap-1.5 text-center ${compact ? 'px-4 py-6' : 'px-6 py-10'}`}
|
|
1031
1031
|
>
|
|
1032
1032
|
<Icon className="text-muted-foreground/50 mb-1 h-7 w-7" aria-hidden />
|
|
1033
|
-
<p className="text-foreground text-sm font-
|
|
1033
|
+
<p className="text-foreground text-sm font-medium">{title}</p>
|
|
1034
1034
|
<p className="text-muted-foreground max-w-xs text-xs">{subtitle}</p>
|
|
1035
1035
|
</div>
|
|
1036
1036
|
)
|
|
@@ -1065,7 +1065,7 @@ function DeliveryTile({
|
|
|
1065
1065
|
<Icon className="h-3.5 w-3.5" aria-hidden />
|
|
1066
1066
|
<span className="text-[11px] font-medium">{label}</span>
|
|
1067
1067
|
</div>
|
|
1068
|
-
<p className="text-foreground text-xl leading-tight font-
|
|
1068
|
+
<p className="text-foreground text-xl leading-tight font-medium tracking-tight">{value}</p>
|
|
1069
1069
|
{sub && (
|
|
1070
1070
|
<p className={`mt-0.5 inline-flex items-center gap-1 text-[11px] ${subTone}`}>
|
|
1071
1071
|
{SubIcon && <SubIcon className="h-3 w-3 shrink-0" aria-hidden />}
|
|
@@ -308,7 +308,7 @@ export function DocumentEdit({
|
|
|
308
308
|
<div className="space-y-4">
|
|
309
309
|
<div className="flex items-center justify-between">
|
|
310
310
|
<div className="flex items-center gap-3">
|
|
311
|
-
<h1 className="text-2xl font-
|
|
311
|
+
<h1 className="text-2xl font-medium">{displayTitle}</h1>
|
|
312
312
|
<span
|
|
313
313
|
className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${statusColor}`}
|
|
314
314
|
>
|
|
@@ -384,7 +384,7 @@ export function DocumentEdit({
|
|
|
384
384
|
|
|
385
385
|
<div className="space-y-6">
|
|
386
386
|
<div className="rounded-lg border border-[var(--border)] bg-[var(--card)] p-4">
|
|
387
|
-
<h3 className="mb-4 font-
|
|
387
|
+
<h3 className="mb-4 font-medium">Status</h3>
|
|
388
388
|
<div className="space-y-3">
|
|
389
389
|
{!isNew && docStatus === 'DRAFT' && (
|
|
390
390
|
<Button
|
|
@@ -436,7 +436,7 @@ export function DocumentEdit({
|
|
|
436
436
|
|
|
437
437
|
{sidebarFields.length > 0 && (
|
|
438
438
|
<div className="rounded-lg border border-[var(--border)] bg-[var(--card)] p-4">
|
|
439
|
-
<h3 className="mb-4 font-
|
|
439
|
+
<h3 className="mb-4 font-medium">Metadata</h3>
|
|
440
440
|
{sidebarFields.map((field: any) => (
|
|
441
441
|
<div key={field.name} className="mb-4">
|
|
442
442
|
<FieldRenderer
|
|
@@ -460,7 +460,7 @@ export function DocumentEdit({
|
|
|
460
460
|
|
|
461
461
|
{hasLayout && (
|
|
462
462
|
<div className="rounded-lg border border-[var(--border)] bg-[var(--card)] p-4">
|
|
463
|
-
<h3 className="mb-1 font-
|
|
463
|
+
<h3 className="mb-1 font-medium">Layout</h3>
|
|
464
464
|
<p className="mb-4 text-xs text-[var(--muted-foreground)]">
|
|
465
465
|
Assign header/footer variants. Child pages inherit from ancestors.
|
|
466
466
|
</p>
|
|
@@ -48,7 +48,7 @@ export function ForgotPassword({ onNavigate }: ForgotPasswordProps) {
|
|
|
48
48
|
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-blue-600">
|
|
49
49
|
<Shield className="h-7 w-7 text-white" />
|
|
50
50
|
</div>
|
|
51
|
-
<h1 className="text-2xl font-
|
|
51
|
+
<h1 className="text-2xl font-medium text-gray-900">Reset Password</h1>
|
|
52
52
|
<p className="mt-2 text-gray-600">
|
|
53
53
|
{sent
|
|
54
54
|
? 'Check your inbox for a reset link'
|
package/src/views/FormEditor.tsx
CHANGED
|
@@ -191,9 +191,7 @@ export function FormEditor({ formId, onNavigate }: FormEditorProps) {
|
|
|
191
191
|
<ArrowLeft className="h-5 w-5 text-gray-600" />
|
|
192
192
|
</button>
|
|
193
193
|
<div className="flex-1">
|
|
194
|
-
<h1 className="text-xl font-
|
|
195
|
-
{isNew ? 'New Form' : 'Edit Form'}
|
|
196
|
-
</h1>
|
|
194
|
+
<h1 className="text-xl font-medium text-gray-900">{isNew ? 'New Form' : 'Edit Form'}</h1>
|
|
197
195
|
</div>
|
|
198
196
|
<button
|
|
199
197
|
onClick={handleSave}
|
package/src/views/Login.tsx
CHANGED
|
@@ -393,7 +393,7 @@ export function Login({
|
|
|
393
393
|
) : (
|
|
394
394
|
<ActuateBrandLogo className="mx-auto mb-4 h-14 w-auto" />
|
|
395
395
|
))}
|
|
396
|
-
<h1 className="text-2xl font-
|
|
396
|
+
<h1 className="text-2xl font-medium text-gray-900">{brandName}</h1>
|
|
397
397
|
<p className="mt-2 text-gray-600">{brandTagline}</p>
|
|
398
398
|
</div>
|
|
399
399
|
|
|
@@ -403,7 +403,7 @@ export function Login({
|
|
|
403
403
|
className="space-y-5 rounded-xl border border-gray-200 bg-white p-6 shadow-sm"
|
|
404
404
|
>
|
|
405
405
|
<div>
|
|
406
|
-
<h2 className="text-lg font-
|
|
406
|
+
<h2 className="text-lg font-medium text-gray-900">Two-factor authentication</h2>
|
|
407
407
|
<p className="mt-1 text-sm text-gray-600">
|
|
408
408
|
{useBackupCode
|
|
409
409
|
? 'Enter one of your one-time backup codes.'
|
|
@@ -411,9 +411,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
411
411
|
<FolderInput className="text-muted-foreground h-5 w-5" />
|
|
412
412
|
</button>
|
|
413
413
|
<div>
|
|
414
|
-
<h1 className="text-foreground mb-1 text-xl font-
|
|
415
|
-
Media Library
|
|
416
|
-
</h1>
|
|
414
|
+
<h1 className="text-foreground mb-1 text-xl font-medium sm:text-2xl">Media Library</h1>
|
|
417
415
|
<p className="text-muted-foreground text-sm">{filteredAndSorted.length} files</p>
|
|
418
416
|
</div>
|
|
419
417
|
</div>
|
|
@@ -745,7 +743,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
745
743
|
{panelOpen && activeItem && (
|
|
746
744
|
<div className="border-border bg-card flex w-80 shrink-0 flex-col overflow-y-auto rounded-lg border lg:w-96">
|
|
747
745
|
<div className="border-border bg-card sticky top-0 z-10 flex items-center justify-between border-b p-4">
|
|
748
|
-
<h3 className="text-foreground truncate text-sm font-
|
|
746
|
+
<h3 className="text-foreground truncate text-sm font-medium">
|
|
749
747
|
{activeItem.name}
|
|
750
748
|
</h3>
|
|
751
749
|
<button
|
|
@@ -773,7 +771,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
773
771
|
<div className="flex items-start gap-2">
|
|
774
772
|
<AlertTriangle className="text-warning mt-0.5 h-4 w-4 shrink-0" />
|
|
775
773
|
<div>
|
|
776
|
-
<p className="text-warning mb-1 text-xs font-
|
|
774
|
+
<p className="text-warning mb-1 text-xs font-medium">
|
|
777
775
|
{issues.length} issue{issues.length !== 1 ? 's' : ''} found
|
|
778
776
|
</p>
|
|
779
777
|
<ul className="space-y-0.5">
|
|
@@ -801,7 +799,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
801
799
|
)}
|
|
802
800
|
|
|
803
801
|
<div className="border-border space-y-3 border-b p-4">
|
|
804
|
-
<h4 className="text-muted-foreground text-xs font-
|
|
802
|
+
<h4 className="text-muted-foreground text-xs font-medium tracking-wide uppercase">
|
|
805
803
|
File Information
|
|
806
804
|
</h4>
|
|
807
805
|
<div className="grid grid-cols-2 gap-3">
|
|
@@ -850,7 +848,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
850
848
|
</div>
|
|
851
849
|
|
|
852
850
|
<div className="border-border space-y-4 border-b p-4">
|
|
853
|
-
<h4 className="text-muted-foreground text-xs font-
|
|
851
|
+
<h4 className="text-muted-foreground text-xs font-medium tracking-wide uppercase">
|
|
854
852
|
SEO & Accessibility
|
|
855
853
|
</h4>
|
|
856
854
|
|
|
@@ -917,7 +915,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
917
915
|
</div>
|
|
918
916
|
|
|
919
917
|
<div className="border-border border-b p-4">
|
|
920
|
-
<h4 className="text-muted-foreground mb-3 text-xs font-
|
|
918
|
+
<h4 className="text-muted-foreground mb-3 text-xs font-medium tracking-wide uppercase">
|
|
921
919
|
Used On {activeItem.usedOn && `(${activeItem.usedOn.length})`}
|
|
922
920
|
</h4>
|
|
923
921
|
{activeItem.usedOn && activeItem.usedOn.length > 0 ? (
|
|
@@ -954,7 +952,7 @@ export function MediaBrowser({ onNavigate }: MediaBrowserProps) {
|
|
|
954
952
|
</div>
|
|
955
953
|
|
|
956
954
|
<div className="space-y-3 p-4">
|
|
957
|
-
<h4 className="text-muted-foreground text-xs font-
|
|
955
|
+
<h4 className="text-muted-foreground text-xs font-medium tracking-wide uppercase">
|
|
958
956
|
AI Optimization
|
|
959
957
|
</h4>
|
|
960
958
|
<button
|
package/src/views/PageEditor.tsx
CHANGED
|
@@ -122,7 +122,7 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
|
|
|
122
122
|
value={title}
|
|
123
123
|
onChange={(e) => setTitle(e.target.value)}
|
|
124
124
|
placeholder="Page title"
|
|
125
|
-
className="mb-4 w-full border-none px-0 text-2xl font-
|
|
125
|
+
className="mb-4 w-full border-none px-0 text-2xl font-medium placeholder:text-gray-300 focus:ring-0 focus:outline-none sm:text-3xl"
|
|
126
126
|
/>
|
|
127
127
|
|
|
128
128
|
<div className="mb-4">
|
|
@@ -149,7 +149,7 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
|
|
|
149
149
|
<div className="w-[30%] overflow-y-auto border-l border-gray-200 bg-gray-50">
|
|
150
150
|
<div className="space-y-4 p-4">
|
|
151
151
|
<div className="rounded-lg border border-gray-200 bg-white p-4">
|
|
152
|
-
<h3 className="mb-3 text-sm font-
|
|
152
|
+
<h3 className="mb-3 text-sm font-medium text-gray-900">Publish</h3>
|
|
153
153
|
<div className="space-y-3">
|
|
154
154
|
<div>
|
|
155
155
|
<label className="mb-1 block text-xs font-medium text-gray-700">Status</label>
|
|
@@ -347,7 +347,7 @@ export function PagesListView({ onNavigate }: PagesListViewProps) {
|
|
|
347
347
|
|
|
348
348
|
{/* Tag filter bar */}
|
|
349
349
|
<div className="flex flex-wrap items-center gap-2">
|
|
350
|
-
<span className="text-muted-foreground text-[10px] font-
|
|
350
|
+
<span className="text-muted-foreground text-[10px] font-medium tracking-wider uppercase">
|
|
351
351
|
Tags
|
|
352
352
|
</span>
|
|
353
353
|
{tags.map((t) => (
|
|
@@ -637,7 +637,7 @@ function GroupBlock({
|
|
|
637
637
|
{showHeader && (
|
|
638
638
|
<tr className="bg-muted/30 border-border border-b">
|
|
639
639
|
<td colSpan={7} className="px-3 py-2">
|
|
640
|
-
<span className="text-foreground inline-flex items-center gap-2 text-xs font-
|
|
640
|
+
<span className="text-foreground inline-flex items-center gap-2 text-xs font-medium tracking-wider uppercase">
|
|
641
641
|
{color && <span aria-hidden className={`h-2 w-2 rounded-full ${dotFor(color)}`} />}
|
|
642
642
|
{label}
|
|
643
643
|
<span className="text-muted-foreground tabular-nums">{count}</span>
|
|
@@ -819,7 +819,7 @@ function PageRow({
|
|
|
819
819
|
<div className="flex items-center gap-2">
|
|
820
820
|
<span
|
|
821
821
|
aria-hidden
|
|
822
|
-
className="bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-
|
|
822
|
+
className="bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-medium"
|
|
823
823
|
>
|
|
824
824
|
{page.authorInitials}
|
|
825
825
|
</span>
|
package/src/views/Pages.tsx
CHANGED
|
@@ -279,7 +279,7 @@ export function Pages({ onNavigate }: PagesProps) {
|
|
|
279
279
|
<FolderInput className="h-5 w-5 text-gray-600" />
|
|
280
280
|
</button>
|
|
281
281
|
<div>
|
|
282
|
-
<h1 className="text-xl font-
|
|
282
|
+
<h1 className="text-xl font-medium text-gray-900 sm:text-2xl">Pages</h1>
|
|
283
283
|
<p className="text-sm text-gray-500">
|
|
284
284
|
{totalCount} page{totalCount !== 1 ? 's' : ''}
|
|
285
285
|
</p>
|
|
@@ -711,7 +711,7 @@ function PostRow({
|
|
|
711
711
|
<div className="flex items-center gap-2">
|
|
712
712
|
<span
|
|
713
713
|
aria-hidden
|
|
714
|
-
className="bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-
|
|
714
|
+
className="bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-medium"
|
|
715
715
|
>
|
|
716
716
|
{post.authorInitials}
|
|
717
717
|
</span>
|
package/src/views/Redirects.tsx
CHANGED
|
@@ -143,7 +143,7 @@ export function Redirects({ onNavigate }: RedirectsProps) {
|
|
|
143
143
|
|
|
144
144
|
<div className="mb-4 flex items-center justify-between">
|
|
145
145
|
<div>
|
|
146
|
-
<h1 className="text-foreground mb-1 text-xl font-
|
|
146
|
+
<h1 className="text-foreground mb-1 text-xl font-medium sm:text-2xl">Redirects</h1>
|
|
147
147
|
<p className="text-muted-foreground text-sm">
|
|
148
148
|
{filteredAndSorted.length} total redirects
|
|
149
149
|
</p>
|
|
@@ -286,7 +286,7 @@ export function Redirects({ onNavigate }: RedirectsProps) {
|
|
|
286
286
|
<Dialog.Portal container={adminPortalContainer()}>
|
|
287
287
|
<Dialog.Overlay className="fixed inset-0 z-50 bg-black/50" />
|
|
288
288
|
<Dialog.Content className="bg-card fixed top-1/2 left-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg p-6 shadow-lg">
|
|
289
|
-
<Dialog.Title className="text-foreground mb-4 text-lg font-
|
|
289
|
+
<Dialog.Title className="text-foreground mb-4 text-lg font-medium">
|
|
290
290
|
Add Redirect
|
|
291
291
|
</Dialog.Title>
|
|
292
292
|
<form onSubmit={handleSubmit} className="space-y-4">
|
|
@@ -25,7 +25,7 @@ export function ResetPassword({ onNavigate, token }: ResetPasswordProps) {
|
|
|
25
25
|
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-red-100">
|
|
26
26
|
<XCircle className="h-7 w-7 text-red-600" />
|
|
27
27
|
</div>
|
|
28
|
-
<h1 className="text-2xl font-
|
|
28
|
+
<h1 className="text-2xl font-medium text-gray-900">Invalid Reset Link</h1>
|
|
29
29
|
<p className="mt-2 text-gray-600">
|
|
30
30
|
This password reset link is invalid or has expired.
|
|
31
31
|
</p>
|
|
@@ -87,7 +87,7 @@ export function ResetPassword({ onNavigate, token }: ResetPasswordProps) {
|
|
|
87
87
|
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-blue-600">
|
|
88
88
|
<Shield className="h-7 w-7 text-white" />
|
|
89
89
|
</div>
|
|
90
|
-
<h1 className="text-2xl font-
|
|
90
|
+
<h1 className="text-2xl font-medium text-gray-900">
|
|
91
91
|
{success ? 'Password Reset' : 'Choose New Password'}
|
|
92
92
|
</h1>
|
|
93
93
|
<p className="mt-2 text-gray-600">
|
|
@@ -134,7 +134,7 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
|
|
|
134
134
|
<ArrowLeft className="h-4 w-4" />
|
|
135
135
|
Back to Script Tags
|
|
136
136
|
</button>
|
|
137
|
-
<h1 className="text-foreground text-2xl font-
|
|
137
|
+
<h1 className="text-foreground text-2xl font-medium">
|
|
138
138
|
{isNew ? 'New Script Tag' : 'Edit Script Tag'}
|
|
139
139
|
</h1>
|
|
140
140
|
</div>
|
|
@@ -179,7 +179,7 @@ export function ScriptTagEditor({ tagId, onNavigate }: ScriptTagEditorProps) {
|
|
|
179
179
|
</div>
|
|
180
180
|
|
|
181
181
|
<div className="border-border bg-card space-y-4 rounded-lg border p-4">
|
|
182
|
-
<h3 className="text-foreground text-sm font-
|
|
182
|
+
<h3 className="text-foreground text-sm font-medium">Placement & Scope</h3>
|
|
183
183
|
|
|
184
184
|
<div>
|
|
185
185
|
<label className="text-foreground mb-1 block text-sm font-medium">Placement</label>
|
package/src/views/ScriptTags.tsx
CHANGED
|
@@ -95,7 +95,7 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
|
|
|
95
95
|
|
|
96
96
|
<div className="mb-4 flex items-center justify-between">
|
|
97
97
|
<div>
|
|
98
|
-
<h1 className="text-foreground mb-1 text-2xl font-
|
|
98
|
+
<h1 className="text-foreground mb-1 text-2xl font-medium">Script Tags</h1>
|
|
99
99
|
<p className="text-muted-foreground text-sm">
|
|
100
100
|
Manage tracking codes, analytics, and custom scripts injected into your site
|
|
101
101
|
</p>
|
|
@@ -113,7 +113,7 @@ export function ScriptTags({ onNavigate }: ScriptTagsProps) {
|
|
|
113
113
|
{tags.length === 0 && !error ? (
|
|
114
114
|
<div className="border-border bg-card rounded-lg border p-12 text-center">
|
|
115
115
|
<Code2 className="text-muted-foreground mx-auto mb-3 h-10 w-10" />
|
|
116
|
-
<h3 className="text-foreground text-sm font-
|
|
116
|
+
<h3 className="text-foreground text-sm font-medium">No script tags yet</h3>
|
|
117
117
|
<p className="text-muted-foreground mt-1 text-sm">
|
|
118
118
|
Add tracking codes like Google Analytics, Tag Manager, or Facebook Pixel.
|
|
119
119
|
</p>
|
|
@@ -74,7 +74,7 @@ export function SetupWizard({ onComplete, siteName = 'Actuate CMS' }: SetupWizar
|
|
|
74
74
|
<div className="mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-green-100">
|
|
75
75
|
<CheckCircle2 className="h-8 w-8 text-green-600" />
|
|
76
76
|
</div>
|
|
77
|
-
<h1 className="mb-2 text-2xl font-
|
|
77
|
+
<h1 className="mb-2 text-2xl font-medium text-gray-900">Setup Complete</h1>
|
|
78
78
|
<p className="mb-6 text-gray-600">
|
|
79
79
|
Your admin account has been created. You can now sign in to manage your content.
|
|
80
80
|
</p>
|
|
@@ -96,7 +96,7 @@ export function SetupWizard({ onComplete, siteName = 'Actuate CMS' }: SetupWizar
|
|
|
96
96
|
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-blue-600">
|
|
97
97
|
<Shield className="h-7 w-7 text-white" />
|
|
98
98
|
</div>
|
|
99
|
-
<h1 className="text-2xl font-
|
|
99
|
+
<h1 className="text-2xl font-medium text-gray-900">Welcome to {siteName}</h1>
|
|
100
100
|
<p className="mt-2 text-gray-600">Create your admin account to get started</p>
|
|
101
101
|
</div>
|
|
102
102
|
|
|
@@ -139,7 +139,7 @@ export function SectionInspector({
|
|
|
139
139
|
|
|
140
140
|
{/* Content fields (schema-driven) */}
|
|
141
141
|
<fieldset disabled={!canEdit} className="space-y-3">
|
|
142
|
-
<legend className="text-muted-foreground mb-2 text-[10px] font-
|
|
142
|
+
<legend className="text-muted-foreground mb-2 text-[10px] font-medium tracking-wider uppercase">
|
|
143
143
|
Content
|
|
144
144
|
</legend>
|
|
145
145
|
{def?.fields.map((field) => (
|
|
@@ -154,7 +154,7 @@ export function SectionInspector({
|
|
|
154
154
|
|
|
155
155
|
{/* Section meta + visibility */}
|
|
156
156
|
<fieldset disabled={!canEdit} className="space-y-3">
|
|
157
|
-
<legend className="text-muted-foreground mb-2 text-[10px] font-
|
|
157
|
+
<legend className="text-muted-foreground mb-2 text-[10px] font-medium tracking-wider uppercase">
|
|
158
158
|
Section settings
|
|
159
159
|
</legend>
|
|
160
160
|
<div>
|
|
@@ -203,7 +203,7 @@ export function SectionInspector({
|
|
|
203
203
|
|
|
204
204
|
{/* Appearance */}
|
|
205
205
|
<fieldset disabled={!canEdit} className="space-y-3">
|
|
206
|
-
<legend className="text-muted-foreground mb-2 text-[10px] font-
|
|
206
|
+
<legend className="text-muted-foreground mb-2 text-[10px] font-medium tracking-wider uppercase">
|
|
207
207
|
Appearance
|
|
208
208
|
</legend>
|
|
209
209
|
<div>
|
|
@@ -263,7 +263,7 @@ export function SectionInspector({
|
|
|
263
263
|
|
|
264
264
|
{/* Advanced */}
|
|
265
265
|
<fieldset disabled={!canEdit} className="space-y-3">
|
|
266
|
-
<legend className="text-muted-foreground mb-2 text-[10px] font-
|
|
266
|
+
<legend className="text-muted-foreground mb-2 text-[10px] font-medium tracking-wider uppercase">
|
|
267
267
|
Advanced
|
|
268
268
|
</legend>
|
|
269
269
|
<div>
|
|
@@ -49,9 +49,7 @@ export function PostHeader({ config, context }: PostHeaderProps) {
|
|
|
49
49
|
<div className="absolute inset-0 bg-linear-to-t from-black/70 to-black/10" aria-hidden />
|
|
50
50
|
<div className="absolute inset-x-0 bottom-0 px-6 pb-8">
|
|
51
51
|
<div className={`mx-auto flex max-w-3xl flex-col ${align}`}>
|
|
52
|
-
<h1 className="text-3xl font-
|
|
53
|
-
{title}
|
|
54
|
-
</h1>
|
|
52
|
+
<h1 className="text-3xl font-medium tracking-tight text-white sm:text-4xl">{title}</h1>
|
|
55
53
|
{config.showExcerpt && context.excerpt && (
|
|
56
54
|
<p className="mt-3 max-w-2xl text-lg text-white/90">{context.excerpt}</p>
|
|
57
55
|
)}
|
|
@@ -67,7 +65,7 @@ export function PostHeader({ config, context }: PostHeaderProps) {
|
|
|
67
65
|
<div
|
|
68
66
|
className={`flex max-w-3xl flex-col ${align} ${config.layout === 'centered' ? 'mx-auto' : ''}`}
|
|
69
67
|
>
|
|
70
|
-
<h1 className="text-3xl font-
|
|
68
|
+
<h1 className="text-3xl font-medium tracking-tight text-zinc-900 sm:text-4xl">{title}</h1>
|
|
71
69
|
{config.showExcerpt && context.excerpt && (
|
|
72
70
|
<p className="mt-3 max-w-2xl text-lg text-zinc-600">{context.excerpt}</p>
|
|
73
71
|
)}
|