@prenta/admin 0.92.0 → 0.94.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/CHANGELOG.md +663 -0
- package/design-system/tokens.css +173 -71
- package/design-system/tokens.json +244 -63
- package/design-system/tokens.scss +203 -98
- package/design-system/tokens.tailwind.cjs +93 -38
- package/dist/AdminRoot.d.ts +27 -6
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/breakpoint-controls.render.test.d.ts +2 -0
- package/dist/__tests__/components/breakpoint-controls.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/breakpoint-controls.render.test.js +51 -0
- package/dist/__tests__/components/breakpoint-controls.render.test.js.map +1 -0
- package/dist/__tests__/components/canvas-edit-tip.render.test.d.ts +2 -0
- package/dist/__tests__/components/canvas-edit-tip.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/canvas-edit-tip.render.test.js +37 -0
- package/dist/__tests__/components/canvas-edit-tip.render.test.js.map +1 -0
- package/dist/__tests__/components/editor-rail.render.test.d.ts +2 -0
- package/dist/__tests__/components/editor-rail.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/editor-rail.render.test.js +138 -0
- package/dist/__tests__/components/editor-rail.render.test.js.map +1 -0
- package/dist/__tests__/components/media-block.render.test.d.ts +2 -0
- package/dist/__tests__/components/media-block.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/media-block.render.test.js +108 -0
- package/dist/__tests__/components/media-block.render.test.js.map +1 -0
- package/dist/__tests__/components/page-audit-panel.render.test.d.ts +2 -0
- package/dist/__tests__/components/page-audit-panel.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/page-audit-panel.render.test.js +59 -0
- package/dist/__tests__/components/page-audit-panel.render.test.js.map +1 -0
- package/dist/__tests__/components/reflow-meter.render.test.d.ts +2 -0
- package/dist/__tests__/components/reflow-meter.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/reflow-meter.render.test.js +94 -0
- package/dist/__tests__/components/reflow-meter.render.test.js.map +1 -0
- package/dist/__tests__/components/seo-char-count.test.js +24 -6
- package/dist/__tests__/components/seo-char-count.test.js.map +1 -1
- package/dist/__tests__/components/serp-preview.render.test.d.ts +2 -0
- package/dist/__tests__/components/serp-preview.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/serp-preview.render.test.js +25 -0
- package/dist/__tests__/components/serp-preview.render.test.js.map +1 -0
- package/dist/__tests__/lib/breakpoints.test.d.ts +2 -0
- package/dist/__tests__/lib/breakpoints.test.d.ts.map +1 -0
- package/dist/__tests__/lib/breakpoints.test.js +67 -0
- package/dist/__tests__/lib/breakpoints.test.js.map +1 -0
- package/dist/__tests__/lib/canvas-edit-chrome.test.d.ts +2 -0
- package/dist/__tests__/lib/canvas-edit-chrome.test.d.ts.map +1 -0
- package/dist/__tests__/lib/canvas-edit-chrome.test.js +44 -0
- package/dist/__tests__/lib/canvas-edit-chrome.test.js.map +1 -0
- package/dist/__tests__/lib/media-format.test.d.ts +2 -0
- package/dist/__tests__/lib/media-format.test.d.ts.map +1 -0
- package/dist/__tests__/lib/media-format.test.js +70 -0
- package/dist/__tests__/lib/media-format.test.js.map +1 -0
- package/dist/__tests__/lib/page-audit-input.test.d.ts +2 -0
- package/dist/__tests__/lib/page-audit-input.test.d.ts.map +1 -0
- package/dist/__tests__/lib/page-audit-input.test.js +122 -0
- package/dist/__tests__/lib/page-audit-input.test.js.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.js +2 -0
- package/dist/__tests__/lib/page-editor-service.test.js.map +1 -1
- package/dist/__tests__/lib/page-redirect.test.d.ts +2 -0
- package/dist/__tests__/lib/page-redirect.test.d.ts.map +1 -0
- package/dist/__tests__/lib/page-redirect.test.js +26 -0
- package/dist/__tests__/lib/page-redirect.test.js.map +1 -0
- package/dist/__tests__/lib/rail-width.test.d.ts +2 -0
- package/dist/__tests__/lib/rail-width.test.d.ts.map +1 -0
- package/dist/__tests__/lib/rail-width.test.js +69 -0
- package/dist/__tests__/lib/rail-width.test.js.map +1 -0
- package/dist/__tests__/lib/reflow-baseline.test.d.ts +2 -0
- package/dist/__tests__/lib/reflow-baseline.test.d.ts.map +1 -0
- package/dist/__tests__/lib/reflow-baseline.test.js +56 -0
- package/dist/__tests__/lib/reflow-baseline.test.js.map +1 -0
- package/dist/__tests__/lib/reflow-probe.test.d.ts +2 -0
- package/dist/__tests__/lib/reflow-probe.test.d.ts.map +1 -0
- package/dist/__tests__/lib/reflow-probe.test.js +73 -0
- package/dist/__tests__/lib/reflow-probe.test.js.map +1 -0
- package/dist/__tests__/lib/version-diff.test.d.ts +2 -0
- package/dist/__tests__/lib/version-diff.test.d.ts.map +1 -0
- package/dist/__tests__/lib/version-diff.test.js +230 -0
- package/dist/__tests__/lib/version-diff.test.js.map +1 -0
- package/dist/__tests__/lib/version-history.test.d.ts +2 -0
- package/dist/__tests__/lib/version-history.test.d.ts.map +1 -0
- package/dist/__tests__/lib/version-history.test.js +125 -0
- package/dist/__tests__/lib/version-history.test.js.map +1 -0
- package/dist/__tests__/styles/canvas-container-queries.test.d.ts +2 -0
- package/dist/__tests__/styles/canvas-container-queries.test.d.ts.map +1 -0
- package/dist/__tests__/styles/canvas-container-queries.test.js +87 -0
- package/dist/__tests__/styles/canvas-container-queries.test.js.map +1 -0
- package/dist/__tests__/styles/packaging.test.d.ts +2 -0
- package/dist/__tests__/styles/packaging.test.d.ts.map +1 -0
- package/dist/__tests__/styles/packaging.test.js +31 -0
- package/dist/__tests__/styles/packaging.test.js.map +1 -0
- package/dist/__tests__/styles/responsive-layer.test.d.ts +2 -0
- package/dist/__tests__/styles/responsive-layer.test.d.ts.map +1 -0
- package/dist/__tests__/styles/responsive-layer.test.js +127 -0
- package/dist/__tests__/styles/responsive-layer.test.js.map +1 -0
- package/dist/__tests__/styles/tokens-drift.test.d.ts +2 -0
- package/dist/__tests__/styles/tokens-drift.test.d.ts.map +1 -0
- package/dist/__tests__/styles/tokens-drift.test.js +92 -0
- package/dist/__tests__/styles/tokens-drift.test.js.map +1 -0
- package/dist/__tests__/views/admin-renderer-compat.test.d.ts +2 -0
- package/dist/__tests__/views/admin-renderer-compat.test.d.ts.map +1 -0
- package/dist/__tests__/views/admin-renderer-compat.test.js +43 -0
- package/dist/__tests__/views/admin-renderer-compat.test.js.map +1 -0
- package/dist/__tests__/views/admin-section-renderers.test.js +52 -4
- package/dist/__tests__/views/admin-section-renderers.test.js.map +1 -1
- package/dist/__tests__/views/canvas-review-mode.render.test.d.ts +2 -0
- package/dist/__tests__/views/canvas-review-mode.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/canvas-review-mode.render.test.js +70 -0
- package/dist/__tests__/views/canvas-review-mode.render.test.js.map +1 -0
- package/dist/__tests__/views/editor-top-bar.render.test.js +30 -1
- package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
- package/dist/__tests__/views/page-tab.render.test.d.ts +2 -0
- package/dist/__tests__/views/page-tab.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/page-tab.render.test.js +151 -0
- package/dist/__tests__/views/page-tab.render.test.js.map +1 -0
- package/dist/__tests__/views/section-class-parity.test.d.ts +2 -0
- package/dist/__tests__/views/section-class-parity.test.d.ts.map +1 -0
- package/dist/__tests__/views/section-class-parity.test.js +81 -0
- package/dist/__tests__/views/section-class-parity.test.js.map +1 -0
- package/dist/__tests__/views/sections-panel-design-owned.render.test.d.ts +2 -0
- package/dist/__tests__/views/sections-panel-design-owned.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/sections-panel-design-owned.render.test.js +86 -0
- package/dist/__tests__/views/sections-panel-design-owned.render.test.js.map +1 -0
- package/dist/__tests__/views/version-history-panel.render.test.d.ts +2 -0
- package/dist/__tests__/views/version-history-panel.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/version-history-panel.render.test.js +153 -0
- package/dist/__tests__/views/version-history-panel.render.test.js.map +1 -0
- package/dist/components/BreakpointPicker.d.ts +18 -0
- package/dist/components/BreakpointPicker.d.ts.map +1 -0
- package/dist/components/BreakpointPicker.js +31 -0
- package/dist/components/BreakpointPicker.js.map +1 -0
- package/dist/components/CanvasEditTip.d.ts +6 -0
- package/dist/components/CanvasEditTip.d.ts.map +1 -0
- package/dist/components/CanvasEditTip.js +22 -0
- package/dist/components/CanvasEditTip.js.map +1 -0
- package/dist/components/EditorRail.d.ts +36 -0
- package/dist/components/EditorRail.d.ts.map +1 -0
- package/dist/components/EditorRail.js +104 -0
- package/dist/components/EditorRail.js.map +1 -0
- package/dist/components/EditorRailTabs.d.ts +32 -0
- package/dist/components/EditorRailTabs.d.ts.map +1 -0
- package/dist/components/EditorRailTabs.js +45 -0
- package/dist/components/EditorRailTabs.js.map +1 -0
- package/dist/components/MediaBlock.d.ts +49 -0
- package/dist/components/MediaBlock.d.ts.map +1 -0
- package/dist/components/MediaBlock.js +50 -0
- package/dist/components/MediaBlock.js.map +1 -0
- package/dist/components/ReflowMeter.d.ts +28 -0
- package/dist/components/ReflowMeter.d.ts.map +1 -0
- package/dist/components/ReflowMeter.js +42 -0
- package/dist/components/ReflowMeter.js.map +1 -0
- package/dist/components/ZoomChip.d.ts +17 -0
- package/dist/components/ZoomChip.d.ts.map +1 -0
- package/dist/components/ZoomChip.js +17 -0
- package/dist/components/ZoomChip.js.map +1 -0
- package/dist/components/breakpoint-icons.d.ts +3 -0
- package/dist/components/breakpoint-icons.d.ts.map +1 -0
- package/dist/components/breakpoint-icons.js +16 -0
- package/dist/components/breakpoint-icons.js.map +1 -0
- package/dist/components/page-tab/AuthorPicker.d.ts +31 -0
- package/dist/components/page-tab/AuthorPicker.d.ts.map +1 -0
- package/dist/components/page-tab/AuthorPicker.js +95 -0
- package/dist/components/page-tab/AuthorPicker.js.map +1 -0
- package/dist/components/page-tab/DirectiveSwitch.d.ts +38 -0
- package/dist/components/page-tab/DirectiveSwitch.d.ts.map +1 -0
- package/dist/components/page-tab/DirectiveSwitch.js +33 -0
- package/dist/components/page-tab/DirectiveSwitch.js.map +1 -0
- package/dist/components/seo/EditorSeoScoreBadge.d.ts +8 -1
- package/dist/components/seo/EditorSeoScoreBadge.d.ts.map +1 -1
- package/dist/components/seo/EditorSeoScoreBadge.js +2 -2
- package/dist/components/seo/EditorSeoScoreBadge.js.map +1 -1
- package/dist/components/seo/PageAuditPanel.d.ts +14 -0
- package/dist/components/seo/PageAuditPanel.d.ts.map +1 -0
- package/dist/components/seo/PageAuditPanel.js +59 -0
- package/dist/components/seo/PageAuditPanel.js.map +1 -0
- package/dist/components/seo/SeoCharCount.d.ts +19 -7
- package/dist/components/seo/SeoCharCount.d.ts.map +1 -1
- package/dist/components/seo/SeoCharCount.js +30 -16
- package/dist/components/seo/SeoCharCount.js.map +1 -1
- package/dist/components/seo/SeoEditorPane.d.ts +15 -1
- package/dist/components/seo/SeoEditorPane.d.ts.map +1 -1
- package/dist/components/seo/SeoEditorPane.js +118 -21
- package/dist/components/seo/SeoEditorPane.js.map +1 -1
- package/dist/components/seo/SerpPreview.d.ts +20 -0
- package/dist/components/seo/SerpPreview.d.ts.map +1 -0
- package/dist/components/seo/SerpPreview.js +6 -0
- package/dist/components/seo/SerpPreview.js.map +1 -0
- package/dist/hooks/usePageAudit.d.ts +41 -0
- package/dist/hooks/usePageAudit.d.ts.map +1 -0
- package/dist/hooks/usePageAudit.js +68 -0
- package/dist/hooks/usePageAudit.js.map +1 -0
- package/dist/hooks/useReflowGuard.d.ts +47 -0
- package/dist/hooks/useReflowGuard.d.ts.map +1 -0
- package/dist/hooks/useReflowGuard.js +52 -0
- package/dist/hooks/useReflowGuard.js.map +1 -0
- package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
- package/dist/layout/primitives/AdminShell.js +2 -2
- package/dist/layout/primitives/AdminShell.js.map +1 -1
- package/dist/lib/breakpoints.d.ts +51 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +84 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/canvas-edit-chrome.d.ts +22 -0
- package/dist/lib/canvas-edit-chrome.d.ts.map +1 -0
- package/dist/lib/canvas-edit-chrome.js +81 -0
- package/dist/lib/canvas-edit-chrome.js.map +1 -0
- package/dist/lib/media-format.d.ts +55 -0
- package/dist/lib/media-format.d.ts.map +1 -0
- package/dist/lib/media-format.js +93 -0
- package/dist/lib/media-format.js.map +1 -0
- package/dist/lib/page-audit-input.d.ts +45 -0
- package/dist/lib/page-audit-input.d.ts.map +1 -0
- package/dist/lib/page-audit-input.js +53 -0
- package/dist/lib/page-audit-input.js.map +1 -0
- package/dist/lib/page-editor-service.d.ts +12 -0
- package/dist/lib/page-editor-service.d.ts.map +1 -1
- package/dist/lib/page-editor-service.js +6 -0
- package/dist/lib/page-editor-service.js.map +1 -1
- package/dist/lib/page-redirect.d.ts +39 -0
- package/dist/lib/page-redirect.d.ts.map +1 -0
- package/dist/lib/page-redirect.js +38 -0
- package/dist/lib/page-redirect.js.map +1 -0
- package/dist/lib/rail-width.d.ts +23 -0
- package/dist/lib/rail-width.d.ts.map +1 -0
- package/dist/lib/rail-width.js +59 -0
- package/dist/lib/rail-width.js.map +1 -0
- package/dist/lib/reflow-baseline.d.ts +45 -0
- package/dist/lib/reflow-baseline.d.ts.map +1 -0
- package/dist/lib/reflow-baseline.js +38 -0
- package/dist/lib/reflow-baseline.js.map +1 -0
- package/dist/lib/reflow-probe.d.ts +159 -0
- package/dist/lib/reflow-probe.d.ts.map +1 -0
- package/dist/lib/reflow-probe.js +228 -0
- package/dist/lib/reflow-probe.js.map +1 -0
- package/dist/lib/seo-service.d.ts +10 -0
- package/dist/lib/seo-service.d.ts.map +1 -1
- package/dist/lib/seo-service.js.map +1 -1
- package/dist/lib/version-diff.d.ts +50 -0
- package/dist/lib/version-diff.d.ts.map +1 -0
- package/dist/lib/version-diff.js +294 -0
- package/dist/lib/version-diff.js.map +1 -0
- package/dist/lib/version-history.d.ts +73 -0
- package/dist/lib/version-history.d.ts.map +1 -0
- package/dist/lib/version-history.js +126 -0
- package/dist/lib/version-history.js.map +1 -0
- package/dist/prenta-admin.css +1 -1
- package/dist/views/page-editor/CanvasMetaLine.d.ts +19 -0
- package/dist/views/page-editor/CanvasMetaLine.d.ts.map +1 -0
- package/dist/views/page-editor/CanvasMetaLine.js +23 -0
- package/dist/views/page-editor/CanvasMetaLine.js.map +1 -0
- package/dist/views/page-editor/EditorCanvas.d.ts +47 -8
- package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
- package/dist/views/page-editor/EditorCanvas.js +68 -34
- package/dist/views/page-editor/EditorCanvas.js.map +1 -1
- package/dist/views/page-editor/EditorTopBar.d.ts +21 -2
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
- package/dist/views/page-editor/EditorTopBar.js +13 -20
- package/dist/views/page-editor/EditorTopBar.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +383 -78
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/PageTab.d.ts +36 -0
- package/dist/views/page-editor/PageTab.d.ts.map +1 -0
- package/dist/views/page-editor/PageTab.js +65 -0
- package/dist/views/page-editor/PageTab.js.map +1 -0
- package/dist/views/page-editor/ReviewBar.d.ts +21 -0
- package/dist/views/page-editor/ReviewBar.d.ts.map +1 -0
- package/dist/views/page-editor/ReviewBar.js +22 -0
- package/dist/views/page-editor/ReviewBar.js.map +1 -0
- package/dist/views/page-editor/SectionInspector.d.ts.map +1 -1
- package/dist/views/page-editor/SectionInspector.js +64 -20
- package/dist/views/page-editor/SectionInspector.js.map +1 -1
- package/dist/views/page-editor/SectionsPanel.d.ts +30 -5
- package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -1
- package/dist/views/page-editor/SectionsPanel.js +38 -7
- package/dist/views/page-editor/SectionsPanel.js.map +1 -1
- package/dist/views/page-editor/SitePreviewFrame.d.ts.map +1 -1
- package/dist/views/page-editor/SitePreviewFrame.js +3 -0
- package/dist/views/page-editor/SitePreviewFrame.js.map +1 -1
- package/dist/views/page-editor/VersionHistoryPanel.d.ts +29 -0
- package/dist/views/page-editor/VersionHistoryPanel.d.ts.map +1 -0
- package/dist/views/page-editor/VersionHistoryPanel.js +81 -0
- package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -0
- package/dist/views/page-editor/reflow-context.d.ts +28 -0
- package/dist/views/page-editor/reflow-context.d.ts.map +1 -0
- package/dist/views/page-editor/reflow-context.js +14 -0
- package/dist/views/page-editor/reflow-context.js.map +1 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts.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.d.ts.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/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 +7 -3
- 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.d.ts.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.d.ts.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 +13 -1
- package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
- package/dist/views/page-editor/sections/SectionRenderer.js +66 -26
- package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
- package/dist/views/page-editor/sections/admin-renderers.d.ts +47 -15
- package/dist/views/page-editor/sections/admin-renderers.d.ts.map +1 -1
- package/dist/views/page-editor/sections/admin-renderers.js +27 -15
- package/dist/views/page-editor/sections/admin-renderers.js.map +1 -1
- package/dist/views/page-editor/sections/parts.d.ts +0 -1
- package/dist/views/page-editor/sections/parts.d.ts.map +1 -1
- package/dist/views/page-editor/sections/parts.js +41 -16
- package/dist/views/page-editor/sections/parts.js.map +1 -1
- package/dist/views/page-editor/viewports.d.ts +7 -14
- package/dist/views/page-editor/viewports.d.ts.map +1 -1
- package/dist/views/page-editor/viewports.js +7 -12
- package/dist/views/page-editor/viewports.js.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.d.ts +2 -1
- package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.js +5 -2
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +2 -20
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostTemplateEditor.js +4 -1
- package/dist/views/post-editor/PostTemplateEditor.js.map +1 -1
- package/package.json +5 -3
- package/src/AdminRoot.tsx +27 -6
- package/src/__tests__/components/breakpoint-controls.render.test.tsx +57 -0
- package/src/__tests__/components/canvas-edit-tip.render.test.tsx +41 -0
- package/src/__tests__/components/editor-rail.render.test.tsx +192 -0
- package/src/__tests__/components/media-block.render.test.tsx +126 -0
- package/src/__tests__/components/page-audit-panel.render.test.tsx +64 -0
- package/src/__tests__/components/reflow-meter.render.test.tsx +144 -0
- package/src/__tests__/components/seo-char-count.test.tsx +26 -6
- package/src/__tests__/components/serp-preview.render.test.tsx +32 -0
- package/src/__tests__/lib/breakpoints.test.ts +84 -0
- package/src/__tests__/lib/canvas-edit-chrome.test.ts +56 -0
- package/src/__tests__/lib/media-format.test.ts +89 -0
- package/src/__tests__/lib/page-audit-input.test.ts +144 -0
- package/src/__tests__/lib/page-editor-service.test.ts +2 -0
- package/src/__tests__/lib/page-redirect.test.ts +29 -0
- package/src/__tests__/lib/rail-width.test.ts +86 -0
- package/src/__tests__/lib/reflow-baseline.test.ts +64 -0
- package/src/__tests__/lib/reflow-probe.test.ts +95 -0
- package/src/__tests__/lib/version-diff.test.ts +278 -0
- package/src/__tests__/lib/version-history.test.ts +166 -0
- package/src/__tests__/styles/canvas-container-queries.test.ts +103 -0
- package/src/__tests__/styles/packaging.test.ts +38 -0
- package/src/__tests__/styles/responsive-layer.test.ts +152 -0
- package/src/__tests__/styles/tokens-drift.test.ts +110 -0
- package/src/__tests__/views/admin-renderer-compat.test.ts +48 -0
- package/src/__tests__/views/admin-section-renderers.test.tsx +70 -4
- package/src/__tests__/views/canvas-review-mode.render.test.tsx +94 -0
- package/src/__tests__/views/editor-top-bar.render.test.tsx +43 -1
- package/src/__tests__/views/page-tab.render.test.tsx +226 -0
- package/src/__tests__/views/section-class-parity.test.ts +98 -0
- package/src/__tests__/views/sections-panel-design-owned.render.test.tsx +104 -0
- package/src/__tests__/views/version-history-panel.render.test.tsx +195 -0
- package/src/components/BreakpointPicker.tsx +114 -0
- package/src/components/CanvasEditTip.tsx +46 -0
- package/src/components/EditorRail.tsx +219 -0
- package/src/components/EditorRailTabs.tsx +117 -0
- package/src/components/MediaBlock.tsx +223 -0
- package/src/components/ReflowMeter.tsx +125 -0
- package/src/components/ZoomChip.tsx +39 -0
- package/src/components/breakpoint-icons.ts +17 -0
- package/src/components/page-tab/AuthorPicker.tsx +240 -0
- package/src/components/page-tab/DirectiveSwitch.tsx +89 -0
- package/src/components/seo/EditorSeoScoreBadge.tsx +9 -1
- package/src/components/seo/PageAuditPanel.tsx +192 -0
- package/src/components/seo/SeoCharCount.tsx +55 -24
- package/src/components/seo/SeoEditorPane.tsx +213 -31
- package/src/components/seo/SerpPreview.tsx +41 -0
- package/src/hooks/usePageAudit.ts +98 -0
- package/src/hooks/useReflowGuard.ts +96 -0
- package/src/layout/primitives/AdminShell.tsx +13 -1
- package/src/lib/breakpoints.ts +107 -0
- package/src/lib/canvas-edit-chrome.ts +82 -0
- package/src/lib/media-format.ts +99 -0
- package/src/lib/page-audit-input.ts +104 -0
- package/src/lib/page-editor-service.ts +18 -0
- package/src/lib/page-redirect.ts +60 -0
- package/src/lib/rail-width.ts +58 -0
- package/src/lib/reflow-baseline.ts +70 -0
- package/src/lib/reflow-probe.ts +299 -0
- package/src/lib/seo-service.ts +10 -0
- package/src/lib/version-diff.ts +376 -0
- package/src/lib/version-history.ts +192 -0
- package/src/styles/prenta-tokens.css +120 -42
- package/src/styles/responsive.css +281 -0
- package/src/styles/theme.css +138 -0
- package/src/views/page-editor/CanvasMetaLine.tsx +50 -0
- package/src/views/page-editor/EditorCanvas.tsx +140 -54
- package/src/views/page-editor/EditorTopBar.tsx +55 -51
- package/src/views/page-editor/PageSectionEditor.tsx +575 -185
- package/src/views/page-editor/PageTab.tsx +433 -0
- package/src/views/page-editor/ReviewBar.tsx +76 -0
- package/src/views/page-editor/SectionInspector.tsx +84 -42
- package/src/views/page-editor/SectionsPanel.tsx +282 -141
- package/src/views/page-editor/SitePreviewFrame.tsx +3 -0
- package/src/views/page-editor/VersionHistoryPanel.tsx +302 -0
- package/src/views/page-editor/reflow-context.ts +43 -0
- package/src/views/page-editor/sections/ByTheNumbersSection.tsx +3 -2
- package/src/views/page-editor/sections/CtaBannerSection.tsx +3 -1
- package/src/views/page-editor/sections/FeatureHighlightSection.tsx +3 -2
- package/src/views/page-editor/sections/GallerySection.tsx +7 -3
- 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 +3 -1
- package/src/views/page-editor/sections/RelatedPostsSection.tsx +2 -1
- package/src/views/page-editor/sections/SectionRenderer.tsx +115 -34
- package/src/views/page-editor/sections/admin-renderers.tsx +54 -15
- package/src/views/page-editor/sections/parts.tsx +46 -18
- package/src/views/page-editor/viewports.ts +13 -26
- package/src/views/post-editor/PostEditorCanvas.tsx +18 -11
- package/src/views/post-editor/PostSectionEditor.tsx +1 -56
- package/src/views/post-editor/PostTemplateEditor.tsx +3 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version history data layer for the page editor.
|
|
3
|
+
*
|
|
4
|
+
* History in this editor is a **mode, not a popup**: selecting a version
|
|
5
|
+
* renders it on the canvas, so the panel needs the full section snapshot of
|
|
6
|
+
* every entry, not just its metadata. `GET /collections/:slug/:id/versions`
|
|
7
|
+
* already returns each version's whole `data` blob — the same blob the restore
|
|
8
|
+
* endpoint writes back — so the snapshots are read straight off the list
|
|
9
|
+
* response and no second request per row is needed.
|
|
10
|
+
*/
|
|
11
|
+
import { cmsApi } from './api.js'
|
|
12
|
+
import { coerceSections, type PageSection } from '@prenta/core/page-sections'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Mirrors the `ChangeType` enum in the Prisma schema.
|
|
16
|
+
*
|
|
17
|
+
* `PUBLISH` and `RESTORE` were declared there from the beginning and nothing
|
|
18
|
+
* ever wrote them; `cms-core` now does. Rows written before that read `UPDATE`
|
|
19
|
+
* whatever they actually were, which is why {@link versionKind} labels
|
|
20
|
+
* `UPDATE` as "Saved" rather than "Draft" — the neutral reading is the only
|
|
21
|
+
* one that is true for both old and new rows.
|
|
22
|
+
*/
|
|
23
|
+
export type VersionChangeType = 'CREATE' | 'UPDATE' | 'PUBLISH' | 'RESTORE' | 'DELETE'
|
|
24
|
+
|
|
25
|
+
export interface VersionAuthor {
|
|
26
|
+
id: string
|
|
27
|
+
/** Display name, falling back to email and then to a non-blank placeholder. */
|
|
28
|
+
name: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface PageVersion {
|
|
32
|
+
id: string
|
|
33
|
+
changeType: VersionChangeType
|
|
34
|
+
createdAt: string
|
|
35
|
+
author: VersionAuthor
|
|
36
|
+
/** Full page content as of this version — what the canvas renders. */
|
|
37
|
+
sections: PageSection[]
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Versions sharing a calendar day, newest day first. */
|
|
41
|
+
export interface VersionDayGroup {
|
|
42
|
+
/** `Today` / `Yesterday` / `Jul 27` — the sticky header text. */
|
|
43
|
+
label: string
|
|
44
|
+
versions: PageVersion[]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** How one change type presents as a pill. */
|
|
48
|
+
export interface VersionKind {
|
|
49
|
+
label: string
|
|
50
|
+
/** Semantic tone; the panel maps these onto token classes. */
|
|
51
|
+
tone: 'live' | 'draft' | 'neutral' | 'danger'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const KINDS: Record<VersionChangeType, VersionKind> = {
|
|
55
|
+
// "Published" is the one distinction that matters in a version list: which
|
|
56
|
+
// of these could a visitor have seen?
|
|
57
|
+
PUBLISH: { label: 'Published', tone: 'live' },
|
|
58
|
+
CREATE: { label: 'Created', tone: 'neutral' },
|
|
59
|
+
// NOT "Draft". Every version written before cms-core started recording
|
|
60
|
+
// PUBLISH is an UPDATE regardless of whether it went live, so calling this
|
|
61
|
+
// "Draft" would state something false about historical rows. "Saved" is true
|
|
62
|
+
// of all of them.
|
|
63
|
+
UPDATE: { label: 'Saved', tone: 'draft' },
|
|
64
|
+
RESTORE: { label: 'Restored', tone: 'neutral' },
|
|
65
|
+
DELETE: { label: 'Deleted', tone: 'danger' },
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function versionKind(changeType: string): VersionKind {
|
|
69
|
+
return KINDS[changeType as VersionChangeType] ?? { label: 'Saved', tone: 'draft' }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
interface VersionApiRow {
|
|
73
|
+
id: string
|
|
74
|
+
changeType: string
|
|
75
|
+
createdAt: string
|
|
76
|
+
data: Record<string, unknown> | null
|
|
77
|
+
changedBy?: { id: string; name?: string | null; email?: string | null } | null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function toAuthor(row: VersionApiRow): VersionAuthor {
|
|
81
|
+
const by = row.changedBy
|
|
82
|
+
return {
|
|
83
|
+
id: by?.id ?? '',
|
|
84
|
+
// An avatar built from an empty string renders a blank circle, so the
|
|
85
|
+
// fallback has to be a real word rather than ''.
|
|
86
|
+
name: by?.name?.trim() || by?.email?.trim() || 'Unknown',
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function toPageVersion(row: VersionApiRow): PageVersion {
|
|
91
|
+
const data = row.data ?? {}
|
|
92
|
+
return {
|
|
93
|
+
id: row.id,
|
|
94
|
+
changeType: (row.changeType as VersionChangeType) ?? 'UPDATE',
|
|
95
|
+
createdAt: row.createdAt,
|
|
96
|
+
author: toAuthor(row),
|
|
97
|
+
// `preserve` matches how the editor reads the live document. Coercing a
|
|
98
|
+
// snapshot more strictly than the current page would make an unmanaged
|
|
99
|
+
// section look like it was deleted in every version that contains one.
|
|
100
|
+
sections: coerceSections(data.sections, { onUnknown: 'preserve' }),
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Newest first, matching the API's own ordering. */
|
|
105
|
+
export async function fetchPageVersions(
|
|
106
|
+
collectionSlug: string,
|
|
107
|
+
documentId: string,
|
|
108
|
+
): Promise<PageVersion[]> {
|
|
109
|
+
const res = await cmsApi<{ versions: VersionApiRow[]; total: number }>(
|
|
110
|
+
`/collections/${collectionSlug}/${documentId}/versions?pageSize=50`,
|
|
111
|
+
)
|
|
112
|
+
if (res.error) throw new Error(res.error)
|
|
113
|
+
const rows = res.data?.versions ?? []
|
|
114
|
+
return rows.map(toPageVersion)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export async function restorePageVersion(
|
|
118
|
+
collectionSlug: string,
|
|
119
|
+
documentId: string,
|
|
120
|
+
versionId: string,
|
|
121
|
+
): Promise<void> {
|
|
122
|
+
const res = await cmsApi(
|
|
123
|
+
`/collections/${collectionSlug}/${documentId}/versions/${versionId}/restore`,
|
|
124
|
+
{ method: 'POST' },
|
|
125
|
+
)
|
|
126
|
+
if (res.error) throw new Error(res.error)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ─── Presentation helpers ────────────────────────────────────────────
|
|
130
|
+
|
|
131
|
+
function startOfDay(date: Date): number {
|
|
132
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime()
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* `Today` / `Yesterday` / a short date.
|
|
137
|
+
*
|
|
138
|
+
* `now` is a parameter rather than a `Date.now()` call so the label is
|
|
139
|
+
* testable — "relative to today" is untestable when today is whatever the
|
|
140
|
+
* suite happens to run on.
|
|
141
|
+
*/
|
|
142
|
+
export function dayLabel(iso: string, now: Date = new Date()): string {
|
|
143
|
+
const date = new Date(iso)
|
|
144
|
+
if (Number.isNaN(date.getTime())) return 'Unknown date'
|
|
145
|
+
|
|
146
|
+
const days = Math.round((startOfDay(now) - startOfDay(date)) / 86_400_000)
|
|
147
|
+
if (days === 0) return 'Today'
|
|
148
|
+
if (days === 1) return 'Yesterday'
|
|
149
|
+
|
|
150
|
+
return date.toLocaleDateString(undefined, {
|
|
151
|
+
month: 'short',
|
|
152
|
+
day: 'numeric',
|
|
153
|
+
// Drop the year within the current one — "Jul 27, 2026" in a list where
|
|
154
|
+
// every entry is 2026 is four characters of noise per row.
|
|
155
|
+
...(date.getFullYear() === now.getFullYear() ? {} : { year: 'numeric' }),
|
|
156
|
+
})
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function timeLabel(iso: string): string {
|
|
160
|
+
const date = new Date(iso)
|
|
161
|
+
if (Number.isNaN(date.getTime())) return ''
|
|
162
|
+
return date.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Group an already-ordered list into consecutive runs sharing a day label.
|
|
167
|
+
*
|
|
168
|
+
* Consecutive runs, not a keyed bucket: the list arrives newest-first and must
|
|
169
|
+
* stay that way, and a `Map` keyed on the label would silently merge two runs
|
|
170
|
+
* that are not adjacent if the API ever returned an unsorted page.
|
|
171
|
+
*/
|
|
172
|
+
export function groupVersionsByDay(
|
|
173
|
+
versions: readonly PageVersion[],
|
|
174
|
+
now: Date = new Date(),
|
|
175
|
+
): VersionDayGroup[] {
|
|
176
|
+
const groups: VersionDayGroup[] = []
|
|
177
|
+
for (const version of versions) {
|
|
178
|
+
const label = dayLabel(version.createdAt, now)
|
|
179
|
+
const last = groups[groups.length - 1]
|
|
180
|
+
if (last && last.label === label) last.versions.push(version)
|
|
181
|
+
else groups.push({ label, versions: [version] })
|
|
182
|
+
}
|
|
183
|
+
return groups
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** Two-letter monogram for the row avatar. */
|
|
187
|
+
export function initials(name: string): string {
|
|
188
|
+
const parts = name.trim().split(/\s+/).filter(Boolean)
|
|
189
|
+
if (parts.length === 0) return '?'
|
|
190
|
+
if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase()
|
|
191
|
+
return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase()
|
|
192
|
+
}
|
|
@@ -1,29 +1,39 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* PrentaCMS design tokens — scoped to the admin root.
|
|
3
|
-
* Source: design-system/tokens.json
|
|
4
|
-
*
|
|
3
|
+
* GENERATED FILE — DO NOT EDIT. Source: design-system/tokens.json.
|
|
4
|
+
* Regenerate: pnpm --filter @prenta/admin generate
|
|
5
|
+
*
|
|
6
|
+
* Scoped to .prenta-admin rather than :root on purpose: the admin renders
|
|
7
|
+
* inside consumer applications, and custom properties resolve by INHERITANCE,
|
|
8
|
+
* not by specificity — a host site's :root would otherwise win against every
|
|
9
|
+
* admin rule reading these names. Appearance settings mutate --acc / --primary
|
|
10
|
+
* at runtime on this same element.
|
|
5
11
|
*/
|
|
6
12
|
|
|
7
13
|
.prenta-admin {
|
|
8
14
|
/* Surfaces */
|
|
9
|
-
--bg: #f5f4fa;
|
|
10
|
-
--sb: #ffffff;
|
|
11
|
-
--card: #ffffff;
|
|
12
|
-
--bdr: #e8e6f2;
|
|
15
|
+
--bg: #f5f4fa; /* App background */
|
|
16
|
+
--sb: #ffffff; /* Sidebar / topbar surface */
|
|
17
|
+
--card: #ffffff; /* Card / panel surface */
|
|
18
|
+
--bdr: #e8e6f2; /* Hairline border */
|
|
13
19
|
|
|
14
20
|
/* Text */
|
|
15
|
-
--txt: #1a1827;
|
|
16
|
-
--sub: #6b6878;
|
|
17
|
-
/*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
--txt: #1a1827; /* Primary text */
|
|
22
|
+
--sub: #6b6878; /* Secondary text */
|
|
23
|
+
/*
|
|
24
|
+
* Tertiary text. The handoff value #B0ADBE is 2.2:1 on --card — below WCAG
|
|
25
|
+
* AA. The admin uses --muted as real text (section labels, check hints,
|
|
26
|
+
* canvas meta line, character counters), so it is darkened to 4.6:1 while
|
|
27
|
+
* staying one step lighter than --sub to preserve the hierarchy. Do not
|
|
28
|
+
* revert without also changing every --muted consumer to decorative use.
|
|
29
|
+
* Handoff value: #b0adbe — deliberately overridden.
|
|
30
|
+
*/
|
|
21
31
|
--muted: #716e83;
|
|
22
32
|
|
|
23
33
|
/* Accent */
|
|
24
|
-
--acc: #7c3aed;
|
|
25
|
-
--acc-l: #ede9fe;
|
|
26
|
-
--acc-m: #c4b5fd;
|
|
34
|
+
--acc: #7c3aed; /* Accent / interactive */
|
|
35
|
+
--acc-l: #ede9fe; /* Accent tint (hover/active bg) */
|
|
36
|
+
--acc-m: #c4b5fd; /* Accent mid (focus ring) */
|
|
27
37
|
|
|
28
38
|
/* Semantic */
|
|
29
39
|
--suc: #059669;
|
|
@@ -35,11 +45,7 @@
|
|
|
35
45
|
--info: #0891b2;
|
|
36
46
|
--info-l: #e0f7fa;
|
|
37
47
|
|
|
38
|
-
/*
|
|
39
|
-
* Page / post-type tag palette — distinct editorial hues.
|
|
40
|
-
* Kept separate from status tokens so "pink" is not warning orange and
|
|
41
|
-
* "blue" is not info cyan. Soft companions tint pill backgrounds.
|
|
42
|
-
*/
|
|
48
|
+
/* Tag palette */
|
|
43
49
|
--tag-purple: #7c3aed;
|
|
44
50
|
--tag-purple-soft: #f3e8ff;
|
|
45
51
|
--tag-green: #0f766e;
|
|
@@ -60,56 +66,123 @@
|
|
|
60
66
|
--ai2: #c026d3;
|
|
61
67
|
--ai-soft: linear-gradient(135deg, rgba(124, 58, 237, 0.09), rgba(192, 38, 211, 0.07));
|
|
62
68
|
|
|
69
|
+
/* Controls */
|
|
70
|
+
/*
|
|
71
|
+
* Switch knob stays white in both themes per the design system; tokenized so
|
|
72
|
+
* a consumer theme can move it.
|
|
73
|
+
*/
|
|
74
|
+
--toggle-thumb: #ffffff;
|
|
75
|
+
|
|
76
|
+
/* Type */
|
|
77
|
+
/*
|
|
78
|
+
* UI text. Self-hosted woff2 under design-system/fonts — never a third-party
|
|
79
|
+
* request, because the admin renders inside consumer applications.
|
|
80
|
+
*/
|
|
81
|
+
--font-sans: 'DM Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
82
|
+
/* Code, robots directives, token names */
|
|
83
|
+
--font-mono: 'DM Mono', ui-monospace, 'SFMono-Regular', monospace;
|
|
84
|
+
--fw-reg: 450;
|
|
85
|
+
--fw-med: 500;
|
|
86
|
+
--fw-semi: 600;
|
|
87
|
+
--fw-bold: 700;
|
|
88
|
+
--fs-page: 21px; /* Page title */
|
|
89
|
+
--fs-card: 14px; /* Card / section title */
|
|
90
|
+
--fs-body: 13px; /* Body, controls, table cells */
|
|
91
|
+
--fs-sub: 12px; /* Secondary / captions */
|
|
92
|
+
--fs-hint: 11.5px; /* Hints, metadata */
|
|
93
|
+
--fs-label: 10px; /* Section labels */
|
|
94
|
+
|
|
63
95
|
/* Layout */
|
|
64
96
|
--sbw: 224px;
|
|
65
97
|
--sbw-col: 60px;
|
|
66
98
|
--tbh: 56px;
|
|
67
|
-
--r: 10px;
|
|
68
|
-
--r-control: 8px;
|
|
69
|
-
--r-sm: 6px;
|
|
70
|
-
--r-pill: 99px;
|
|
71
99
|
|
|
72
|
-
/*
|
|
73
|
-
--
|
|
74
|
-
--
|
|
100
|
+
/* Radius */
|
|
101
|
+
--r-sm: 6px; /* Small buttons, badges, tags, chips-in-rows */
|
|
102
|
+
--r-field: 7px; /* Text inputs, textareas, selects */
|
|
103
|
+
/*
|
|
104
|
+
* Primary / secondary buttons, dropdowns. --r-control is the pre-2.0 name,
|
|
105
|
+
* kept resolving for existing rules.
|
|
106
|
+
*/
|
|
107
|
+
--r-ctl: 8px;
|
|
108
|
+
--r-control: var(--r-ctl); /* deprecated alias */
|
|
109
|
+
--r: 10px; /* Cards and panels */
|
|
110
|
+
--r-fig: 12px; /* Canvas figures and media frames */
|
|
111
|
+
--r-pill: 99px; /* Toggles, meters, notice pills */
|
|
112
|
+
|
|
113
|
+
/* Spacing */
|
|
114
|
+
--sp-2: 2px;
|
|
115
|
+
--sp-4: 4px;
|
|
116
|
+
--sp-6: 6px;
|
|
117
|
+
--sp-8: 8px;
|
|
118
|
+
--sp-10: 10px;
|
|
119
|
+
--sp-12: 12px; /* Row padding-y */
|
|
120
|
+
--sp-14: 14px; /* Panel padding */
|
|
121
|
+
--sp-16: 16px; /* Editor header padding-x */
|
|
122
|
+
--sp-18: 18px; /* Canvas gutter top */
|
|
123
|
+
--sp-20: 20px;
|
|
124
|
+
--sp-24: 24px; /* Canvas gutter sides */
|
|
125
|
+
--sp-28: 28px;
|
|
126
|
+
--sp-32: 32px;
|
|
127
|
+
--sp-40: 40px; /* Canvas gutter bottom */
|
|
128
|
+
|
|
129
|
+
/* Control sizing */
|
|
130
|
+
--h-chip: 26px; /* Rail buttons, theme toggle */
|
|
131
|
+
--h-field: 33px; /* Text inputs and small buttons */
|
|
132
|
+
--h-ctl: 34px; /* Header controls: icon buttons, breakpoint trigger, zoom chip, SEO chip */
|
|
133
|
+
|
|
134
|
+
/* Border */
|
|
135
|
+
--bw: 1px;
|
|
136
|
+
--bw-ctl: 1.5px; /* Input and card border */
|
|
137
|
+
--bw-focus: 2px; /* Focus and active outline */
|
|
138
|
+
--ring: 0 0 0 3px var(--acc-m); /* Focus ring shadow */
|
|
75
139
|
|
|
76
|
-
/*
|
|
77
|
-
--
|
|
78
|
-
--
|
|
79
|
-
--fs-page: 21px;
|
|
80
|
-
--fs-card: 14px;
|
|
81
|
-
--fs-body: 13px;
|
|
82
|
-
--fs-sub: 12px;
|
|
83
|
-
--fs-hint: 11.5px;
|
|
84
|
-
--fs-label: 10px;
|
|
140
|
+
/* Elevation */
|
|
141
|
+
--shd: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 4px rgba(0, 0, 0, 0.04); /* Card resting */
|
|
142
|
+
--shd2: 0 4px 16px rgba(0, 0, 0, 0.1); /* Popovers, modals, hover */
|
|
85
143
|
|
|
86
144
|
/* Motion */
|
|
87
|
-
--
|
|
88
|
-
--motion-
|
|
145
|
+
--mo-fast: 0.12s; /* Hover, color */
|
|
146
|
+
--motion-fast: var(--mo-fast); /* deprecated alias */
|
|
147
|
+
--mo-base: 0.18s; /* Toggles, reveals */
|
|
148
|
+
--motion-base: var(--mo-base); /* deprecated alias */
|
|
149
|
+
--mo-slow: 0.22s; /* Panels, canvas scale */
|
|
150
|
+
--ease: cubic-bezier(0.4, 0, 0.2, 1);
|
|
151
|
+
/* Pre-2.0 composite. Use --mo-slow var(--ease) instead. */
|
|
89
152
|
--motion-layout: 0.22s cubic-bezier(0.4, 0, 0.2, 1);
|
|
90
153
|
|
|
91
|
-
/*
|
|
92
|
-
|
|
93
|
-
--
|
|
154
|
+
/* Layering */
|
|
155
|
+
--z-raise: 2; /* Canvas section labels, sticky group headers */
|
|
156
|
+
--z-resizer: 30; /* Panel drag handle */
|
|
157
|
+
--z-overlay: 45; /* In-panel overlays (version history) */
|
|
158
|
+
--z-menu: 120; /* Dropdowns, flyouts */
|
|
159
|
+
--z-toast: 200;
|
|
94
160
|
}
|
|
95
161
|
|
|
96
162
|
.dark .prenta-admin,
|
|
97
163
|
.prenta-admin.dark,
|
|
98
164
|
.prenta-admin[data-theme='dark'] {
|
|
165
|
+
/* Surfaces */
|
|
99
166
|
--bg: #0d0c18;
|
|
100
167
|
--sb: #141222;
|
|
101
168
|
--card: #1c1a2e;
|
|
102
169
|
--bdr: #2c2a42;
|
|
103
170
|
|
|
171
|
+
/* Text */
|
|
104
172
|
--txt: #eae8f5;
|
|
105
173
|
--sub: #8e8ba8;
|
|
106
|
-
/*
|
|
174
|
+
/*
|
|
175
|
+
* Same AA correction as light mode — the handoff value #504E68 is 2.1:1 on
|
|
176
|
+
* --card. Handoff value: #504e68 — deliberately overridden.
|
|
177
|
+
*/
|
|
107
178
|
--muted: #8784a2;
|
|
108
179
|
|
|
180
|
+
/* Accent */
|
|
109
181
|
--acc: #9d71f0;
|
|
110
182
|
--acc-l: #231950;
|
|
111
183
|
--acc-m: #5e3eaa;
|
|
112
184
|
|
|
185
|
+
/* Semantic */
|
|
113
186
|
--suc: #10b981;
|
|
114
187
|
--suc-l: #022c22;
|
|
115
188
|
--warn: #fbbf24;
|
|
@@ -119,6 +192,7 @@
|
|
|
119
192
|
--info: #38bdf8;
|
|
120
193
|
--info-l: #0a2838;
|
|
121
194
|
|
|
195
|
+
/* Tag palette */
|
|
122
196
|
--tag-purple: #a78bfa;
|
|
123
197
|
--tag-purple-soft: #2e1065;
|
|
124
198
|
--tag-green: #2dd4bf;
|
|
@@ -134,8 +208,12 @@
|
|
|
134
208
|
--tag-gray: #94a3b8;
|
|
135
209
|
--tag-gray-soft: #1e293b;
|
|
136
210
|
|
|
211
|
+
/* AI */
|
|
212
|
+
--ai1: #7c3aed;
|
|
213
|
+
--ai2: #c026d3;
|
|
137
214
|
--ai-soft: linear-gradient(135deg, rgba(157, 113, 240, 0.16), rgba(192, 38, 211, 0.12));
|
|
138
215
|
|
|
216
|
+
/* Elevation */
|
|
139
217
|
--shd: 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);
|
|
140
218
|
--shd2: 0 4px 20px rgba(0, 0, 0, 0.45);
|
|
141
219
|
}
|