@actuate-media/cms-admin 0.14.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +148 -2
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/posts-badges.test.d.ts +2 -0
- package/dist/__tests__/components/posts-badges.test.d.ts.map +1 -0
- package/dist/__tests__/components/posts-badges.test.js +68 -0
- package/dist/__tests__/components/posts-badges.test.js.map +1 -0
- package/dist/__tests__/layout/sidebar-posts.test.d.ts +2 -0
- package/dist/__tests__/layout/sidebar-posts.test.d.ts.map +1 -0
- package/dist/__tests__/layout/sidebar-posts.test.js +162 -0
- package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.d.ts +2 -0
- package/dist/__tests__/lib/page-editor-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.js +137 -0
- package/dist/__tests__/lib/page-editor-service.test.js.map +1 -0
- package/dist/__tests__/lib/pages-service.test.d.ts +2 -0
- package/dist/__tests__/lib/pages-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/pages-service.test.js +140 -0
- package/dist/__tests__/lib/pages-service.test.js.map +1 -0
- package/dist/__tests__/lib/post-editor-service.test.d.ts +2 -0
- package/dist/__tests__/lib/post-editor-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/post-editor-service.test.js +185 -0
- package/dist/__tests__/lib/post-editor-service.test.js.map +1 -0
- package/dist/__tests__/lib/posts-service.test.d.ts +2 -0
- package/dist/__tests__/lib/posts-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/posts-service.test.js +244 -0
- package/dist/__tests__/lib/posts-service.test.js.map +1 -0
- package/dist/__tests__/views/posts-list-view.test.d.ts +2 -0
- package/dist/__tests__/views/posts-list-view.test.d.ts.map +1 -0
- package/dist/__tests__/views/posts-list-view.test.js +98 -0
- package/dist/__tests__/views/posts-list-view.test.js.map +1 -0
- package/dist/actuate-admin.css +1 -1
- package/dist/components/pages/tag-badges.d.ts +21 -0
- package/dist/components/pages/tag-badges.d.ts.map +1 -0
- package/dist/components/pages/tag-badges.js +56 -0
- package/dist/components/pages/tag-badges.js.map +1 -0
- package/dist/components/posts/badges.d.ts +25 -0
- package/dist/components/posts/badges.d.ts.map +1 -0
- package/dist/components/posts/badges.js +123 -0
- package/dist/components/posts/badges.js.map +1 -0
- package/dist/components/posts/icons.d.ts +12 -0
- package/dist/components/posts/icons.d.ts.map +1 -0
- package/dist/components/posts/icons.js +26 -0
- package/dist/components/posts/icons.js.map +1 -0
- package/dist/layout/Header.d.ts +14 -1
- package/dist/layout/Header.d.ts.map +1 -1
- package/dist/layout/Header.js +10 -3
- package/dist/layout/Header.js.map +1 -1
- package/dist/layout/Layout.d.ts.map +1 -1
- package/dist/layout/Layout.js +78 -2
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/Sidebar.d.ts +16 -0
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +176 -49
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/lib/page-editor-service.d.ts +45 -0
- package/dist/lib/page-editor-service.d.ts.map +1 -0
- package/dist/lib/page-editor-service.js +153 -0
- package/dist/lib/page-editor-service.js.map +1 -0
- package/dist/lib/pages-service.d.ts +143 -0
- package/dist/lib/pages-service.d.ts.map +1 -0
- package/dist/lib/pages-service.js +444 -0
- package/dist/lib/pages-service.js.map +1 -0
- package/dist/lib/post-editor-service.d.ts +57 -0
- package/dist/lib/post-editor-service.d.ts.map +1 -0
- package/dist/lib/post-editor-service.js +234 -0
- package/dist/lib/post-editor-service.js.map +1 -0
- package/dist/lib/posts-service.d.ts +73 -0
- package/dist/lib/posts-service.d.ts.map +1 -0
- package/dist/lib/posts-service.js +245 -0
- package/dist/lib/posts-service.js.map +1 -0
- package/dist/lib/preview-link.d.ts +32 -0
- package/dist/lib/preview-link.d.ts.map +1 -0
- package/dist/lib/preview-link.js +40 -0
- package/dist/lib/preview-link.js.map +1 -0
- package/dist/router/index.d.ts +1 -0
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +9 -1
- package/dist/router/index.js.map +1 -1
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +147 -62
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/Pages/PageTagManager.d.ts +14 -0
- package/dist/views/Pages/PageTagManager.d.ts.map +1 -0
- package/dist/views/Pages/PageTagManager.js +145 -0
- package/dist/views/Pages/PageTagManager.js.map +1 -0
- package/dist/views/Pages/PagesListView.d.ts +18 -0
- package/dist/views/Pages/PagesListView.d.ts.map +1 -0
- package/dist/views/Pages/PagesListView.js +287 -0
- package/dist/views/Pages/PagesListView.js.map +1 -0
- package/dist/views/Posts/NewPostPicker.d.ts +16 -0
- package/dist/views/Posts/NewPostPicker.d.ts.map +1 -0
- package/dist/views/Posts/NewPostPicker.js +59 -0
- package/dist/views/Posts/NewPostPicker.js.map +1 -0
- package/dist/views/Posts/NewPostTypeInstructions.d.ts +18 -0
- package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -0
- package/dist/views/Posts/NewPostTypeInstructions.js +147 -0
- package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -0
- package/dist/views/Posts/PostTypesView.d.ts +26 -0
- package/dist/views/Posts/PostTypesView.d.ts.map +1 -0
- package/dist/views/Posts/PostTypesView.js +52 -0
- package/dist/views/Posts/PostTypesView.js.map +1 -0
- package/dist/views/Posts/PostsListView.d.ts +25 -0
- package/dist/views/Posts/PostsListView.d.ts.map +1 -0
- package/dist/views/Posts/PostsListView.js +239 -0
- package/dist/views/Posts/PostsListView.js.map +1 -0
- package/dist/views/Posts/post-type-presets.d.ts +32 -0
- package/dist/views/Posts/post-type-presets.d.ts.map +1 -0
- package/dist/views/Posts/post-type-presets.js +72 -0
- package/dist/views/Posts/post-type-presets.js.map +1 -0
- package/dist/views/page-builder/Widgets.d.ts +13 -0
- package/dist/views/page-builder/Widgets.d.ts.map +1 -0
- package/dist/views/page-builder/Widgets.js +15 -0
- package/dist/views/page-builder/Widgets.js.map +1 -0
- package/dist/views/page-editor/AddSectionModal.d.ts +20 -0
- package/dist/views/page-editor/AddSectionModal.d.ts.map +1 -0
- package/dist/views/page-editor/AddSectionModal.js +22 -0
- package/dist/views/page-editor/AddSectionModal.js.map +1 -0
- package/dist/views/page-editor/EditorCanvas.d.ts +18 -0
- package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -0
- package/dist/views/page-editor/EditorCanvas.js +64 -0
- package/dist/views/page-editor/EditorCanvas.js.map +1 -0
- package/dist/views/page-editor/EditorTopBar.d.ts +30 -0
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -0
- package/dist/views/page-editor/EditorTopBar.js +42 -0
- package/dist/views/page-editor/EditorTopBar.js.map +1 -0
- package/dist/views/page-editor/PagePreview.d.ts +13 -0
- package/dist/views/page-editor/PagePreview.d.ts.map +1 -0
- package/dist/views/page-editor/PagePreview.js +37 -0
- package/dist/views/page-editor/PagePreview.js.map +1 -0
- package/dist/views/page-editor/PageSectionEditor.d.ts +16 -0
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -0
- package/dist/views/page-editor/PageSectionEditor.js +272 -0
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -0
- package/dist/views/page-editor/PageSettingsModal.d.ts +12 -0
- package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -0
- package/dist/views/page-editor/PageSettingsModal.js +52 -0
- package/dist/views/page-editor/PageSettingsModal.js.map +1 -0
- package/dist/views/page-editor/SectionInspector.d.ts +17 -0
- package/dist/views/page-editor/SectionInspector.d.ts.map +1 -0
- package/dist/views/page-editor/SectionInspector.js +98 -0
- package/dist/views/page-editor/SectionInspector.js.map +1 -0
- package/dist/views/page-editor/SectionsPanel.d.ts +15 -0
- package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -0
- package/dist/views/page-editor/SectionsPanel.js +43 -0
- package/dist/views/page-editor/SectionsPanel.js.map +1 -0
- package/dist/views/page-editor/ValidationSummary.d.ts +9 -0
- package/dist/views/page-editor/ValidationSummary.d.ts.map +1 -0
- package/dist/views/page-editor/ValidationSummary.js +10 -0
- package/dist/views/page-editor/ValidationSummary.js.map +1 -0
- package/dist/views/page-editor/section-icons.d.ts +4 -0
- package/dist/views/page-editor/section-icons.d.ts.map +1 -0
- package/dist/views/page-editor/section-icons.js +20 -0
- package/dist/views/page-editor/section-icons.js.map +1 -0
- package/dist/views/page-editor/section-types.d.ts +11 -0
- package/dist/views/page-editor/section-types.d.ts.map +1 -0
- package/dist/views/page-editor/section-types.js +10 -0
- package/dist/views/page-editor/section-types.js.map +1 -0
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts +13 -0
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/ArticleBodySection.js +23 -0
- package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -0
- package/dist/views/page-editor/sections/AuthorBioSection.d.ts +8 -0
- package/dist/views/page-editor/sections/AuthorBioSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/AuthorBioSection.js +21 -0
- package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts +5 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.js +10 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -0
- package/dist/views/page-editor/sections/CtaBannerSection.d.ts +5 -0
- package/dist/views/page-editor/sections/CtaBannerSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/CtaBannerSection.js +10 -0
- package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts +5 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.js +18 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -0
- package/dist/views/page-editor/sections/GallerySection.d.ts +6 -0
- package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/GallerySection.js +17 -0
- package/dist/views/page-editor/sections/GallerySection.js.map +1 -0
- package/dist/views/page-editor/sections/HeroBannerSection.d.ts +5 -0
- package/dist/views/page-editor/sections/HeroBannerSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/HeroBannerSection.js +11 -0
- package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -0
- package/dist/views/page-editor/sections/MissionSection.d.ts +6 -0
- package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/MissionSection.js +12 -0
- package/dist/views/page-editor/sections/MissionSection.js.map +1 -0
- package/dist/views/page-editor/sections/PullQuoteSection.d.ts +6 -0
- package/dist/views/page-editor/sections/PullQuoteSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/PullQuoteSection.js +13 -0
- package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.d.ts +12 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.js +23 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -0
- package/dist/views/page-editor/sections/SectionRenderer.d.ts +22 -0
- package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -0
- package/dist/views/page-editor/sections/SectionRenderer.js +52 -0
- package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -0
- package/dist/views/page-editor/sections/index.d.ts +14 -0
- package/dist/views/page-editor/sections/index.d.ts.map +1 -0
- package/dist/views/page-editor/sections/index.js +12 -0
- package/dist/views/page-editor/sections/index.js.map +1 -0
- package/dist/views/page-editor/sections/parts.d.ts +55 -0
- package/dist/views/page-editor/sections/parts.d.ts.map +1 -0
- package/dist/views/page-editor/sections/parts.js +60 -0
- package/dist/views/page-editor/sections/parts.js.map +1 -0
- package/dist/views/page-editor/viewports.d.ts +14 -0
- package/dist/views/page-editor/viewports.d.ts.map +1 -0
- package/dist/views/page-editor/viewports.js +12 -0
- package/dist/views/page-editor/viewports.js.map +1 -0
- package/dist/views/post-editor/PostEditorCanvas.d.ts +21 -0
- package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -0
- package/dist/views/post-editor/PostEditorCanvas.js +58 -0
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -0
- package/dist/views/post-editor/PostFieldsModal.d.ts +12 -0
- package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -0
- package/dist/views/post-editor/PostFieldsModal.js +53 -0
- package/dist/views/post-editor/PostFieldsModal.js.map +1 -0
- package/dist/views/post-editor/PostHeader.d.ts +15 -0
- package/dist/views/post-editor/PostHeader.d.ts.map +1 -0
- package/dist/views/post-editor/PostHeader.js +27 -0
- package/dist/views/post-editor/PostHeader.js.map +1 -0
- package/dist/views/post-editor/PostHeaderPanel.d.ts +11 -0
- package/dist/views/post-editor/PostHeaderPanel.d.ts.map +1 -0
- package/dist/views/post-editor/PostHeaderPanel.js +21 -0
- package/dist/views/post-editor/PostHeaderPanel.js.map +1 -0
- package/dist/views/post-editor/PostPreview.d.ts +14 -0
- package/dist/views/post-editor/PostPreview.d.ts.map +1 -0
- package/dist/views/post-editor/PostPreview.js +53 -0
- package/dist/views/post-editor/PostPreview.js.map +1 -0
- package/dist/views/post-editor/PostSectionEditor.d.ts +17 -0
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -0
- package/dist/views/post-editor/PostSectionEditor.js +290 -0
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -0
- package/dist/views/post-editor/PostTemplateEditor.d.ts +9 -0
- package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -0
- package/dist/views/post-editor/PostTemplateEditor.js +144 -0
- package/dist/views/post-editor/PostTemplateEditor.js.map +1 -0
- package/package.json +2 -2
- package/src/AdminRoot.tsx +213 -2
- package/src/__tests__/components/posts-badges.test.tsx +77 -0
- package/src/__tests__/layout/sidebar-posts.test.ts +179 -0
- package/src/__tests__/lib/page-editor-service.test.ts +173 -0
- package/src/__tests__/lib/pages-service.test.ts +157 -0
- package/src/__tests__/lib/post-editor-service.test.ts +215 -0
- package/src/__tests__/lib/posts-service.test.ts +279 -0
- package/src/__tests__/views/posts-list-view.test.ts +110 -0
- package/src/components/pages/tag-badges.tsx +104 -0
- package/src/components/posts/badges.tsx +170 -0
- package/src/components/posts/icons.ts +40 -0
- package/src/layout/Header.tsx +90 -43
- package/src/layout/Layout.tsx +166 -1
- package/src/layout/Sidebar.tsx +287 -101
- package/src/lib/page-editor-service.ts +233 -0
- package/src/lib/pages-service.ts +599 -0
- package/src/lib/post-editor-service.ts +342 -0
- package/src/lib/posts-service.ts +366 -0
- package/src/lib/preview-link.ts +63 -0
- package/src/router/index.ts +10 -1
- package/src/views/Dashboard.tsx +270 -131
- package/src/views/Pages/PageTagManager.tsx +436 -0
- package/src/views/Pages/PagesListView.tsx +944 -0
- package/src/views/Posts/NewPostPicker.tsx +147 -0
- package/src/views/Posts/NewPostTypeInstructions.tsx +344 -0
- package/src/views/Posts/PostTypesView.tsx +194 -0
- package/src/views/Posts/PostsListView.tsx +869 -0
- package/src/views/Posts/post-type-presets.ts +105 -0
- package/src/views/page-builder/Widgets.tsx +44 -0
- package/src/views/page-editor/AddSectionModal.tsx +56 -0
- package/src/views/page-editor/EditorCanvas.tsx +127 -0
- package/src/views/page-editor/EditorTopBar.tsx +233 -0
- package/src/views/page-editor/PagePreview.tsx +96 -0
- package/src/views/page-editor/PageSectionEditor.tsx +476 -0
- package/src/views/page-editor/PageSettingsModal.tsx +154 -0
- package/src/views/page-editor/SectionInspector.tsx +599 -0
- package/src/views/page-editor/SectionsPanel.tsx +270 -0
- package/src/views/page-editor/ValidationSummary.tsx +53 -0
- package/src/views/page-editor/section-icons.ts +33 -0
- package/src/views/page-editor/section-types.ts +27 -0
- package/src/views/page-editor/sections/ArticleBodySection.tsx +57 -0
- package/src/views/page-editor/sections/AuthorBioSection.tsx +61 -0
- package/src/views/page-editor/sections/ByTheNumbersSection.tsx +41 -0
- package/src/views/page-editor/sections/CtaBannerSection.tsx +29 -0
- package/src/views/page-editor/sections/FeatureHighlightSection.tsx +63 -0
- package/src/views/page-editor/sections/GallerySection.tsx +54 -0
- package/src/views/page-editor/sections/HeroBannerSection.tsx +44 -0
- package/src/views/page-editor/sections/MissionSection.tsx +22 -0
- package/src/views/page-editor/sections/PullQuoteSection.tsx +27 -0
- package/src/views/page-editor/sections/RelatedPostsSection.tsx +55 -0
- package/src/views/page-editor/sections/SectionRenderer.tsx +102 -0
- package/src/views/page-editor/sections/index.ts +13 -0
- package/src/views/page-editor/sections/parts.tsx +113 -0
- package/src/views/page-editor/viewports.ts +25 -0
- package/src/views/post-editor/PostEditorCanvas.tsx +123 -0
- package/src/views/post-editor/PostFieldsModal.tsx +196 -0
- package/src/views/post-editor/PostHeader.tsx +87 -0
- package/src/views/post-editor/PostHeaderPanel.tsx +107 -0
- package/src/views/post-editor/PostPreview.tsx +114 -0
- package/src/views/post-editor/PostSectionEditor.tsx +506 -0
- package/src/views/post-editor/PostTemplateEditor.tsx +347 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Shared status / type / SEO indicators for the Posts admin area.
|
|
5
|
+
*
|
|
6
|
+
* Colors are restricted to the theme tokens already used elsewhere in
|
|
7
|
+
* the admin (`success`, `warning`, `destructive`, `primary`, `muted`)
|
|
8
|
+
* plus a small named-color palette (`purple`, `green`, `orange`, ...)
|
|
9
|
+
* that maps to fixed Tailwind utilities. This keeps the badges working
|
|
10
|
+
* in both light and dark mode and avoids leaking `bg-[#...]` arbitrary
|
|
11
|
+
* values into components.
|
|
12
|
+
*/
|
|
13
|
+
// ─── Named color palette ─────────────────────────────────────────────
|
|
14
|
+
const PALETTE = {
|
|
15
|
+
purple: {
|
|
16
|
+
bg: 'bg-violet-50 dark:bg-violet-950/40',
|
|
17
|
+
text: 'text-violet-700 dark:text-violet-300',
|
|
18
|
+
ring: 'ring-violet-200 dark:ring-violet-900',
|
|
19
|
+
border: 'border-violet-500',
|
|
20
|
+
},
|
|
21
|
+
green: {
|
|
22
|
+
bg: 'bg-emerald-50 dark:bg-emerald-950/40',
|
|
23
|
+
text: 'text-emerald-700 dark:text-emerald-300',
|
|
24
|
+
ring: 'ring-emerald-200 dark:ring-emerald-900',
|
|
25
|
+
border: 'border-emerald-500',
|
|
26
|
+
},
|
|
27
|
+
orange: {
|
|
28
|
+
bg: 'bg-amber-50 dark:bg-amber-950/40',
|
|
29
|
+
text: 'text-amber-700 dark:text-amber-300',
|
|
30
|
+
ring: 'ring-amber-200 dark:ring-amber-900',
|
|
31
|
+
border: 'border-amber-500',
|
|
32
|
+
},
|
|
33
|
+
red: {
|
|
34
|
+
bg: 'bg-red-50 dark:bg-red-950/40',
|
|
35
|
+
text: 'text-red-700 dark:text-red-300',
|
|
36
|
+
ring: 'ring-red-200 dark:ring-red-900',
|
|
37
|
+
border: 'border-red-500',
|
|
38
|
+
},
|
|
39
|
+
blue: {
|
|
40
|
+
bg: 'bg-blue-50 dark:bg-blue-950/40',
|
|
41
|
+
text: 'text-blue-700 dark:text-blue-300',
|
|
42
|
+
ring: 'ring-blue-200 dark:ring-blue-900',
|
|
43
|
+
border: 'border-blue-500',
|
|
44
|
+
},
|
|
45
|
+
pink: {
|
|
46
|
+
bg: 'bg-pink-50 dark:bg-pink-950/40',
|
|
47
|
+
text: 'text-pink-700 dark:text-pink-300',
|
|
48
|
+
ring: 'ring-pink-200 dark:ring-pink-900',
|
|
49
|
+
border: 'border-pink-500',
|
|
50
|
+
},
|
|
51
|
+
gray: {
|
|
52
|
+
bg: 'bg-muted',
|
|
53
|
+
text: 'text-muted-foreground',
|
|
54
|
+
ring: 'ring-border',
|
|
55
|
+
border: 'border-border',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export function paletteFor(color) {
|
|
59
|
+
if (!color)
|
|
60
|
+
return PALETTE.gray;
|
|
61
|
+
return PALETTE[color] ?? PALETTE.gray;
|
|
62
|
+
}
|
|
63
|
+
// ─── PostStatusBadge ─────────────────────────────────────────────────
|
|
64
|
+
const STATUS_LABEL = {
|
|
65
|
+
PUBLISHED: 'Published',
|
|
66
|
+
DRAFT: 'Draft',
|
|
67
|
+
SCHEDULED: 'Scheduled',
|
|
68
|
+
ARCHIVED: 'Archived',
|
|
69
|
+
};
|
|
70
|
+
const STATUS_PALETTE = {
|
|
71
|
+
PUBLISHED: 'green',
|
|
72
|
+
DRAFT: 'gray',
|
|
73
|
+
SCHEDULED: 'orange',
|
|
74
|
+
ARCHIVED: 'gray',
|
|
75
|
+
};
|
|
76
|
+
const STATUS_GLYPH = {
|
|
77
|
+
PUBLISHED: '●',
|
|
78
|
+
DRAFT: '○',
|
|
79
|
+
SCHEDULED: '◐',
|
|
80
|
+
ARCHIVED: '◌',
|
|
81
|
+
};
|
|
82
|
+
export function PostStatusBadge({ status }) {
|
|
83
|
+
const p = paletteFor(STATUS_PALETTE[status]);
|
|
84
|
+
return (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium ${p.bg} ${p.text}`, "aria-label": `Status: ${STATUS_LABEL[status]}`, children: [_jsx("span", { "aria-hidden": true, className: "text-[10px] leading-none", children: STATUS_GLYPH[status] }), STATUS_LABEL[status]] }));
|
|
85
|
+
}
|
|
86
|
+
// ─── PostTypeBadge ───────────────────────────────────────────────────
|
|
87
|
+
export function PostTypeBadge({ label, color, onClick, }) {
|
|
88
|
+
const p = paletteFor(color);
|
|
89
|
+
const className = `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${p.bg} ${p.text}`;
|
|
90
|
+
if (onClick) {
|
|
91
|
+
return (_jsx("button", { type: "button", onClick: onClick, className: `${className} hover:opacity-80`, children: label }));
|
|
92
|
+
}
|
|
93
|
+
return _jsx("span", { className: className, children: label });
|
|
94
|
+
}
|
|
95
|
+
// ─── SeoScoreIndicator ───────────────────────────────────────────────
|
|
96
|
+
/**
|
|
97
|
+
* Returns the palette key for an SEO score so callers can match the
|
|
98
|
+
* colored dot. 80+ green, 60–79 orange, 1–59 red, missing = gray.
|
|
99
|
+
*/
|
|
100
|
+
export function seoScorePalette(score) {
|
|
101
|
+
if (score === null || Number.isNaN(score))
|
|
102
|
+
return 'gray';
|
|
103
|
+
if (score >= 80)
|
|
104
|
+
return 'green';
|
|
105
|
+
if (score >= 60)
|
|
106
|
+
return 'orange';
|
|
107
|
+
if (score >= 1)
|
|
108
|
+
return 'red';
|
|
109
|
+
return 'gray';
|
|
110
|
+
}
|
|
111
|
+
export function SeoScoreIndicator({ score }) {
|
|
112
|
+
const colorKey = seoScorePalette(score);
|
|
113
|
+
const p = paletteFor(colorKey);
|
|
114
|
+
if (score === null) {
|
|
115
|
+
return (_jsxs("span", { className: "text-muted-foreground inline-flex items-center gap-1.5 text-xs", children: [_jsx("span", { "aria-hidden": true, className: `h-2 w-2 rounded-full ${p.bg.split(' ')[0]}` }), _jsx("span", { className: "tabular-nums", children: "\u2014" })] }));
|
|
116
|
+
}
|
|
117
|
+
return (_jsxs("span", { className: "text-foreground inline-flex items-center gap-1.5 text-xs", children: [_jsx("span", { "aria-hidden": true, className: `h-2 w-2 rounded-full ${colorKey === 'green'
|
|
118
|
+
? 'bg-emerald-500'
|
|
119
|
+
: colorKey === 'orange'
|
|
120
|
+
? 'bg-amber-500'
|
|
121
|
+
: 'bg-red-500'}` }), _jsx("span", { className: "tabular-nums", children: score })] }));
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=badges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badges.js","sourceRoot":"","sources":["../../../src/components/posts/badges.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type LucideIcon } from 'lucide-react';
|
|
2
|
+
/**
|
|
3
|
+
* Icon registry for Post Types. Keyed by the string value stored in a
|
|
4
|
+
* collection's `admin.icon`. Rendering surfaces (Post Types cards, the
|
|
5
|
+
* New Post picker, the Quick Post Type gallery) all resolve through
|
|
6
|
+
* `resolvePostTypeIcon` so a single map keeps them in sync — adding an
|
|
7
|
+
* icon here makes it available everywhere at once.
|
|
8
|
+
*/
|
|
9
|
+
export declare const POST_TYPE_ICONS: Record<string, LucideIcon>;
|
|
10
|
+
export type PostTypeIconName = keyof typeof POST_TYPE_ICONS;
|
|
11
|
+
export declare function resolvePostTypeIcon(name: string | null | undefined): LucideIcon;
|
|
12
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/posts/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,UAAU,EAChB,MAAM,cAAc,CAAA;AAErB;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAWtD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAA;AAE3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAG/E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FileText, Briefcase, Newspaper, BookOpen, Folder, Layers, Image as ImageIcon, Calendar, Users, HelpCircle, } from 'lucide-react';
|
|
2
|
+
/**
|
|
3
|
+
* Icon registry for Post Types. Keyed by the string value stored in a
|
|
4
|
+
* collection's `admin.icon`. Rendering surfaces (Post Types cards, the
|
|
5
|
+
* New Post picker, the Quick Post Type gallery) all resolve through
|
|
6
|
+
* `resolvePostTypeIcon` so a single map keeps them in sync — adding an
|
|
7
|
+
* icon here makes it available everywhere at once.
|
|
8
|
+
*/
|
|
9
|
+
export const POST_TYPE_ICONS = {
|
|
10
|
+
'file-text': FileText,
|
|
11
|
+
briefcase: Briefcase,
|
|
12
|
+
newspaper: Newspaper,
|
|
13
|
+
book: BookOpen,
|
|
14
|
+
folder: Folder,
|
|
15
|
+
layers: Layers,
|
|
16
|
+
image: ImageIcon,
|
|
17
|
+
calendar: Calendar,
|
|
18
|
+
users: Users,
|
|
19
|
+
help: HelpCircle,
|
|
20
|
+
};
|
|
21
|
+
export function resolvePostTypeIcon(name) {
|
|
22
|
+
if (!name)
|
|
23
|
+
return FileText;
|
|
24
|
+
return POST_TYPE_ICONS[name.toLowerCase()] ?? FileText;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/posts/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,MAAM,EACN,MAAM,EACN,KAAK,IAAI,SAAS,EAClB,QAAQ,EACR,KAAK,EACL,UAAU,GAEX,MAAM,cAAc,CAAA;AAErB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,UAAU;CACjB,CAAA;AAID,MAAM,UAAU,mBAAmB,CAAC,IAA+B;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAA;IAC1B,OAAO,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,QAAQ,CAAA;AACxD,CAAC"}
|
package/dist/layout/Header.d.ts
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
1
2
|
export interface HeaderProps {
|
|
2
3
|
onToggleSidebar: () => void;
|
|
3
4
|
session?: any;
|
|
4
5
|
onNavigate: (path: string) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Page-specific actions rendered on the far right of the top bar
|
|
8
|
+
* (after the search input + utility icons). Used to surface
|
|
9
|
+
* dashboard-level primary actions like "+ New Post" / "View Site"
|
|
10
|
+
* without forcing every view to render its own header.
|
|
11
|
+
*
|
|
12
|
+
* The Layout decides what to pass here based on `currentPath`.
|
|
13
|
+
* Keeping the slot on Header rather than per-view means the
|
|
14
|
+
* actions row stays consistent across navigation and never reflows
|
|
15
|
+
* on view-change.
|
|
16
|
+
*/
|
|
17
|
+
pageActions?: ReactNode;
|
|
5
18
|
}
|
|
6
|
-
export declare function Header({ onToggleSidebar, session, onNavigate }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function Header({ onToggleSidebar, session, onNavigate, pageActions }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
7
20
|
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAQhD,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,SAAS,CAAA;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,WAAW,2CA0JxF"}
|
package/dist/layout/Header.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { Search,
|
|
4
|
+
import { Search, User, ChevronDown, Menu, Sun, Moon } from 'lucide-react';
|
|
5
5
|
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
|
|
6
6
|
import { CommandPalette } from '../components/CommandPalette.js';
|
|
7
|
+
import { NotificationBell } from '../components/NotificationBell.js';
|
|
7
8
|
import { useTheme } from '../components/ThemeProvider.js';
|
|
8
9
|
import { LocaleSwitcher } from '../components/LocaleSwitcher.js';
|
|
9
|
-
export function Header({ onToggleSidebar, session, onNavigate }) {
|
|
10
|
+
export function Header({ onToggleSidebar, session, onNavigate, pageActions }) {
|
|
10
11
|
const [showCommandPalette, setShowCommandPalette] = useState(false);
|
|
11
12
|
const [searchQuery, setSearchQuery] = useState('');
|
|
12
13
|
const { resolvedTheme, setTheme } = useTheme();
|
|
13
14
|
const toggleTheme = () => {
|
|
14
15
|
setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
+
const initial = session?.user?.name?.charAt(0)?.toUpperCase() ??
|
|
18
|
+
session?.user?.email?.charAt(0)?.toUpperCase() ??
|
|
19
|
+
'A';
|
|
20
|
+
return (_jsxs(_Fragment, { children: [_jsxs("header", { className: "border-border bg-background flex h-14 items-center gap-3 border-b px-4", children: [_jsx("button", { onClick: onToggleSidebar, className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Toggle sidebar", children: _jsx(Menu, { className: "text-foreground h-5 w-5", strokeWidth: 2 }) }), _jsxs("div", { className: "relative hidden flex-1 md:block", children: [_jsx(Search, { className: "text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2", "aria-hidden": true }), _jsx("input", { type: "text", placeholder: "Search...", "aria-label": "Search content", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onFocus: () => setShowCommandPalette(true), onKeyDown: (e) => {
|
|
21
|
+
if (e.key === 'Escape')
|
|
22
|
+
e.target.blur();
|
|
23
|
+
}, className: "border-border bg-input-background text-foreground placeholder:text-muted-foreground focus:ring-ring h-9 w-full max-w-md rounded-lg border py-1.5 pr-14 pl-9 text-sm focus:border-transparent focus:ring-2 focus:outline-none" }), _jsx("span", { className: "border-border bg-background text-muted-foreground pointer-events-none absolute top-1/2 right-2 hidden -translate-y-1/2 rounded border px-1.5 py-0.5 font-mono text-[10px] sm:inline-flex", "aria-hidden": true, children: "\u2318K" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Search", children: _jsx(Search, { className: "text-muted-foreground h-5 w-5" }) }), _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [_jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "hover:bg-accent rounded-lg p-2 transition-colors", "aria-label": resolvedTheme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode', children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "text-muted-foreground h-5 w-5" })) : (_jsx(Moon, { className: "text-muted-foreground h-5 w-5" })) }), _jsx(NotificationBell, {}), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "hover:bg-accent flex items-center gap-1.5 rounded-lg p-1 transition-colors", "aria-label": "Account menu", children: [_jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-linear-to-br from-blue-500 to-purple-600", children: _jsx("span", { className: "text-sm font-medium text-white", children: initial }) }), _jsx(ChevronDown, { className: "text-muted-foreground hidden h-4 w-4 sm:block", "aria-hidden": true })] }) }), _jsx(DropdownMenu.Portal, { children: _jsxs(DropdownMenu.Content, { className: "bg-popover text-popover-foreground border-border z-50 min-w-[200px] rounded-lg border p-1 shadow-lg", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "border-border border-b px-3 py-2", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-muted-foreground text-xs", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/profile'), children: [_jsx(User, { className: "h-4 w-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "bg-border my-1 h-px" }), _jsx(DropdownMenu.Item, { className: "text-destructive hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/logout'), children: "Logout" })] }) })] }), pageActions && (_jsx("div", { className: "border-border ml-2 hidden items-center gap-2 border-l pl-3 md:flex", children: pageActions }))] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
|
|
17
24
|
}
|
|
18
25
|
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAoBhE,MAAM,UAAU,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAe;IACvF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE9C,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,QAAQ,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC,CAAA;IAED,MAAM,OAAO,GACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;QAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;QAC9C,GAAG,CAAA;IAEL,OAAO,CACL,8BACE,kBAAQ,SAAS,EAAC,wEAAwE,aACxF,iBACE,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,4DAA4D,gBAC3D,gBAAgB,YAE3B,KAAC,IAAI,IAAC,SAAS,EAAC,yBAAyB,EAAC,WAAW,EAAE,CAAC,GAAI,GACrD,EAIT,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,MAAM,IACL,SAAS,EAAC,4FAA4F,wBAEtG,EACF,gBACE,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,WAAW,gBACZ,gBAAgB,EAC3B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAC1C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oCACf,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;wCAAG,CAAC,CAAC,MAA2B,CAAC,IAAI,EAAE,CAAA;gCAC/D,CAAC,EACD,SAAS,EAAC,8NAA8N,GACxO,EAEF,eACE,SAAS,EAAC,0LAA0L,6CAI/L,IACH,EAGN,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAC1C,SAAS,EAAC,4DAA4D,gBAC3D,QAAQ,YAEnB,KAAC,MAAM,IAAC,SAAS,EAAC,+BAA+B,GAAG,GAC7C,EAET,eAAK,SAAS,EAAC,mCAAmC,aAChD,KAAC,cAAc,KAAG,EAElB,iBACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,kDAAkD,gBAChD,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,YAEpF,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,CAC1B,KAAC,GAAG,IAAC,SAAS,EAAC,+BAA+B,GAAG,CAClD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,SAAS,EAAC,+BAA+B,GAAG,CACnD,GACM,EAKT,KAAC,gBAAgB,KAAG,EAEpB,MAAC,YAAY,CAAC,IAAI,eAChB,KAAC,YAAY,CAAC,OAAO,IAAC,OAAO,kBAC3B,kBACE,SAAS,EAAC,4EAA4E,gBAC3E,cAAc,aAEzB,cAAK,SAAS,EAAC,mGAAmG,YAChH,eAAM,SAAS,EAAC,gCAAgC,YAAE,OAAO,GAAQ,GAC7D,EACN,KAAC,WAAW,IACV,SAAS,EAAC,+CAA+C,wBAEzD,IACK,GACY,EAEvB,KAAC,YAAY,CAAC,MAAM,cAClB,MAAC,YAAY,CAAC,OAAO,IACnB,SAAS,EAAC,qGAAqG,EAC/G,KAAK,EAAC,KAAK,EACX,UAAU,EAAE,CAAC,aAEb,eAAK,SAAS,EAAC,kCAAkC,aAC/C,YAAG,SAAS,EAAC,qBAAqB,YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY,GAAK,EAC5E,YAAG,SAAS,EAAC,+BAA+B,YACzC,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,mBAAmB,GAC1C,IACA,EACN,MAAC,YAAY,CAAC,IAAI,IAChB,SAAS,EAAC,+FAA+F,EACzG,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,aAEtC,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,eAEV,EACpB,KAAC,YAAY,CAAC,IAAI,IAChB,SAAS,EAAC,+FAA+F,EACzG,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,yBAGrB,EACpB,KAAC,YAAY,CAAC,SAAS,IAAC,SAAS,EAAC,qBAAqB,GAAG,EAC1D,KAAC,YAAY,CAAC,IAAI,IAChB,SAAS,EAAC,gHAAgH,EAC1H,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,uBAGnB,IACC,GACH,IACJ,EAOnB,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,oEAAoE,YAChF,WAAW,GACR,CACP,IACG,IACC,EAET,KAAC,cAAc,IACb,IAAI,EAAE,kBAAkB,EACxB,YAAY,EAAE,qBAAqB,EACnC,UAAU,EAAE,UAAU,GACtB,IACD,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAQpE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA0CzF"}
|
package/dist/layout/Layout.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect } from 'react';
|
|
3
|
+
import { useMemo, useState, useEffect } from 'react';
|
|
4
|
+
import { ExternalLink, Plus } from 'lucide-react';
|
|
4
5
|
import { Sidebar } from './Sidebar.js';
|
|
5
6
|
import { Header } from './Header.js';
|
|
6
7
|
import { Breadcrumbs } from '../components/Breadcrumbs.js';
|
|
@@ -26,6 +27,81 @@ export function Layout({ config, session, currentPath, onNavigate, children }) {
|
|
|
26
27
|
useEffect(() => {
|
|
27
28
|
setMobileSidebarOpen(false);
|
|
28
29
|
}, [currentPath]);
|
|
29
|
-
|
|
30
|
+
const pageActions = useMemo(() => computePageActions({ currentPath, config, onNavigate }), [currentPath, config, onNavigate]);
|
|
31
|
+
return (_jsxs(_Fragment, { children: [_jsx(Toaster, { position: "bottom-right" }), _jsx(AdminShell, { mobileSidebarOpen: mobileSidebarOpen, onMobileSidebarClose: () => setMobileSidebarOpen(false), sidebar: _jsx(Sidebar, { collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed), currentPath: currentPath, onNavigate: onNavigate, config: config }), header: _jsx(Header, { onToggleSidebar: () => setMobileSidebarOpen(!mobileSidebarOpen), session: session, onNavigate: onNavigate, pageActions: pageActions }), breadcrumbs: _jsx(Breadcrumbs, { currentPath: currentPath, onNavigate: onNavigate }), children: _jsx("div", { className: "h-full", children: children }) })] }));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Per-route primary actions that render on the right of the top bar.
|
|
35
|
+
*
|
|
36
|
+
* Centralised here so the top bar's actions row stays consistent
|
|
37
|
+
* across view changes — no flicker on navigation, no per-view header
|
|
38
|
+
* reimplementation. Views that need view-local actions (e.g. a
|
|
39
|
+
* "Save draft" button on the post editor) continue to render them
|
|
40
|
+
* inside their own hero; this slot is for the highest-level
|
|
41
|
+
* primary/secondary pair that mirrors the reference dashboard.
|
|
42
|
+
*
|
|
43
|
+
* Resolution rules:
|
|
44
|
+
* - Dashboard / home → "+ New Post" + "View Site"
|
|
45
|
+
* - List views → just "+ New <Type>"
|
|
46
|
+
* - Editor views → no top-bar action (editor renders its own toolbar)
|
|
47
|
+
*/
|
|
48
|
+
function computePageActions({ currentPath, config, onNavigate, }) {
|
|
49
|
+
const collections = collectionList(config);
|
|
50
|
+
const postCollections = collections.filter((c) => c.type === 'post');
|
|
51
|
+
const newPostPath = resolveNewPostPath(postCollections);
|
|
52
|
+
const siteUrl = config?.site?.url ?? config?.seo?.siteUrl ?? null;
|
|
53
|
+
const isDashboard = currentPath === '/' || currentPath === '/dashboard';
|
|
54
|
+
// Dashboard: keep the existing "+ New Post" / "View Site" pair. With
|
|
55
|
+
// a single Post Type we route straight to its editor; with several we
|
|
56
|
+
// route to the picker so the user can choose the type first.
|
|
57
|
+
if (isDashboard) {
|
|
58
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => onNavigate(newPostPath), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post"] }), siteUrl ? (_jsxs("a", { href: siteUrl, target: "_blank", rel: "noopener noreferrer", className: "border-border bg-background text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(ExternalLink, { className: "h-3.5 w-3.5", "aria-hidden": true }), "View Site"] })) : null] }));
|
|
59
|
+
}
|
|
60
|
+
// Posts area — "+ New Post" + "Manage types" on the list page;
|
|
61
|
+
// "+ New Post Type" on the types page. The buttons live in the top
|
|
62
|
+
// bar so the page header stays clean. See the dashboard rule for
|
|
63
|
+
// why these come from a single config-aware helper.
|
|
64
|
+
if (currentPath === '/posts') {
|
|
65
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate(newPostPath), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post"] }));
|
|
66
|
+
}
|
|
67
|
+
if (currentPath === '/posts/types') {
|
|
68
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate('/posts/types/new'), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post Type"] }));
|
|
69
|
+
}
|
|
70
|
+
// Pages list — "+ New page" routes to the page creation flow. Handled
|
|
71
|
+
// explicitly (not via the collection loop) so the label/route stay
|
|
72
|
+
// exact even though `pages` is a reserved route.
|
|
73
|
+
if (currentPath === '/pages') {
|
|
74
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate('/pages/new'), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New page"] }));
|
|
75
|
+
}
|
|
76
|
+
// List views — surface "+ New X" so authors can keep creating without
|
|
77
|
+
// hunting for a per-list button. Skip on editor views; those have their
|
|
78
|
+
// own toolbar.
|
|
79
|
+
for (const c of collections) {
|
|
80
|
+
if (currentPath === `/${c.slug}`) {
|
|
81
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate(`/${c.slug}/new`), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New ", c.labels?.singular ?? c.slug] }));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Where "+ New Post" should land, given the configured post-type
|
|
88
|
+
* collections:
|
|
89
|
+
* - exactly one → straight to that type's editor (`/<slug>/new`)
|
|
90
|
+
* - more than one → the type picker (`/posts/new`)
|
|
91
|
+
* - none → the Post Type setup instructions
|
|
92
|
+
*/
|
|
93
|
+
function resolveNewPostPath(postCollections) {
|
|
94
|
+
if (postCollections.length === 1)
|
|
95
|
+
return `/${postCollections[0].slug}/new`;
|
|
96
|
+
if (postCollections.length > 1)
|
|
97
|
+
return '/posts/new';
|
|
98
|
+
return '/posts/types/new';
|
|
99
|
+
}
|
|
100
|
+
function collectionList(config) {
|
|
101
|
+
if (!config?.collections)
|
|
102
|
+
return [];
|
|
103
|
+
const raw = config.collections;
|
|
104
|
+
const list = Array.isArray(raw) ? raw : Object.values(raw);
|
|
105
|
+
return list.filter((c) => !c?.admin?.hidden);
|
|
30
106
|
}
|
|
31
107
|
//# sourceMappingURL=Layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"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"}
|
package/dist/layout/Sidebar.d.ts
CHANGED
|
@@ -11,6 +11,22 @@ export interface NavItem {
|
|
|
11
11
|
path: string;
|
|
12
12
|
label: string;
|
|
13
13
|
icon: LucideIcon;
|
|
14
|
+
/**
|
|
15
|
+
* Section header. Items sharing the same `group` are grouped together
|
|
16
|
+
* under a header rendered on first encounter. Items without a `group`
|
|
17
|
+
* render at the top of the nav in document order.
|
|
18
|
+
*/
|
|
14
19
|
group?: string;
|
|
20
|
+
/** Indented children rendered immediately after this item. */
|
|
21
|
+
children?: NavItem[];
|
|
15
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the sidebar nav tree from the CMS config. If no collections are
|
|
25
|
+
* configured, returns the curated `defaultNavItems` tree. When
|
|
26
|
+
* collections ARE configured, page-type collections inherit the
|
|
27
|
+
* Pages / Saved Sections / Templates child block, and every static
|
|
28
|
+
* destination (Media, Forms, SEO, Script Tags, Users, API Keys,
|
|
29
|
+
* Settings) is anchored under the right Content / Settings group.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildNavItems(config: any): NavItem[];
|
|
16
32
|
//# sourceMappingURL=Sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAqI9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,YAAY,2CA+Cd;AAiHD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,CA4GpD"}
|