@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 @@
|
|
|
1
|
+
{"version":3,"file":"version-history.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/version-history.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-container-queries.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/styles/canvas-container-queries.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
/**
|
|
5
|
+
* The editor canvas renders a page at a device's real CSS width and scales it
|
|
6
|
+
* with a transform, so the page must reflow against the CANVAS width, not the
|
|
7
|
+
* browser viewport. Two invariants make that work, and both fail silently:
|
|
8
|
+
*
|
|
9
|
+
* 1. `.prenta-canvas` must establish an inline-size query container. Without
|
|
10
|
+
* it, `@pv-*` variants never match and every breakpoint renders the
|
|
11
|
+
* narrowest layout — which looks plausible enough to ship.
|
|
12
|
+
* 2. Section renderers must not use viewport variants (`sm:`, `md:`, `lg:`).
|
|
13
|
+
* Those resolve against the editor window, so picking "Mobile" on a wide
|
|
14
|
+
* monitor yields a 390px canvas still laid out for desktop — the exact
|
|
15
|
+
* bug that made the old preview decorative.
|
|
16
|
+
*/
|
|
17
|
+
const SECTIONS_DIR = fileURLToPath(new URL('../../views/page-editor/sections/', import.meta.url));
|
|
18
|
+
const THEME_CSS = fileURLToPath(new URL('../../styles/theme.css', import.meta.url));
|
|
19
|
+
/** Viewport variants in a className position. Matches `sm:`…`2xl:` prefixes. */
|
|
20
|
+
const VIEWPORT_VARIANT = /(?<![\w@[-])(?:sm|md|lg|xl|2xl):[a-z0-9[]/g;
|
|
21
|
+
function sectionFiles() {
|
|
22
|
+
return readdirSync(SECTIONS_DIR).filter((f) => f.endsWith('.tsx') || f.endsWith('.ts'));
|
|
23
|
+
}
|
|
24
|
+
describe('canvas container queries', () => {
|
|
25
|
+
it('makes .prenta-canvas an inline-size query container', () => {
|
|
26
|
+
const css = readFileSync(THEME_CSS, 'utf8').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
27
|
+
expect(css).toMatch(/\.prenta-canvas\s*\{[^}]*container-type:\s*inline-size/);
|
|
28
|
+
});
|
|
29
|
+
it('defines every reflow step the handoff specifies', () => {
|
|
30
|
+
const css = readFileSync(THEME_CSS, 'utf8');
|
|
31
|
+
for (const [name, value] of [
|
|
32
|
+
['--container-pv-sm', '460px'],
|
|
33
|
+
['--container-pv-md', '700px'],
|
|
34
|
+
['--container-pv-lg', '900px'],
|
|
35
|
+
['--container-pv-xl', '1100px'],
|
|
36
|
+
['--container-pv-2xl', '2000px'],
|
|
37
|
+
]) {
|
|
38
|
+
expect(css, `${name} is missing or has moved`).toContain(`${name}: ${value}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('uses no viewport breakpoints in any section renderer', () => {
|
|
42
|
+
const offenders = [];
|
|
43
|
+
for (const file of sectionFiles()) {
|
|
44
|
+
const source = readFileSync(SECTIONS_DIR + file, 'utf8');
|
|
45
|
+
for (const match of source.matchAll(VIEWPORT_VARIANT)) {
|
|
46
|
+
offenders.push(`${file}: ${match[0]}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
expect(offenders, 'Section renderers must reflow on the canvas width. Use the @pv-* container ' +
|
|
50
|
+
'steps (theme.css) instead of sm:/md:/lg:.').toEqual([]);
|
|
51
|
+
});
|
|
52
|
+
it('restores the stock type scale inside the canvas, in the utilities layer', () => {
|
|
53
|
+
// The admin remaps six Tailwind size keys onto its own tokens (text-base =
|
|
54
|
+
// 13px). The canvas renders the consumer's website, where text-base must
|
|
55
|
+
// be 16px — and the reflow guard measures wrapping against these sizes, so
|
|
56
|
+
// a canvas on the admin scale makes every line count wrong.
|
|
57
|
+
const css = readFileSync(THEME_CSS, 'utf8');
|
|
58
|
+
// Layer order beats specificity: in @layer base this override would lose
|
|
59
|
+
// to the very utility it corrects.
|
|
60
|
+
const utilities = css.slice(css.indexOf('@layer utilities'));
|
|
61
|
+
expect(utilities, 'canvas type restoration must be in @layer utilities').toContain('.prenta-admin .prenta-canvas .text-base');
|
|
62
|
+
for (const [utility, size] of [
|
|
63
|
+
['text-xs', '0.75rem'],
|
|
64
|
+
['text-sm', '0.875rem'],
|
|
65
|
+
['text-base', '1rem'],
|
|
66
|
+
['text-lg', '1.125rem'],
|
|
67
|
+
['text-xl', '1.25rem'],
|
|
68
|
+
['text-2xl', '1.5rem'],
|
|
69
|
+
]) {
|
|
70
|
+
const rule = new RegExp(`\\.prenta-canvas \\.${utility}\\s*\\{[^}]*font-size:\\s*${size.replace('.', '\\.')}`);
|
|
71
|
+
expect(utilities, `${utility} is not restored to its stock size`).toMatch(rule);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it('only references container steps that exist', () => {
|
|
75
|
+
const declared = new Set(['@pv-sm', '@pv-md', '@pv-lg', '@pv-xl', '@pv-2xl']);
|
|
76
|
+
const used = new Set();
|
|
77
|
+
for (const file of sectionFiles()) {
|
|
78
|
+
const source = readFileSync(SECTIONS_DIR + file, 'utf8');
|
|
79
|
+
for (const match of source.matchAll(/@pv-[\w-]+?(?=:)/g))
|
|
80
|
+
used.add(match[0]);
|
|
81
|
+
}
|
|
82
|
+
// A typo'd step (`@pv-xxl:`) compiles to nothing and silently never applies.
|
|
83
|
+
expect([...used].filter((u) => !declared.has(u))).toEqual([]);
|
|
84
|
+
expect(used.size).toBeGreaterThan(0);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=canvas-container-queries.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-container-queries.test.js","sourceRoot":"","sources":["../../../src/__tests__/styles/canvas-container-queries.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C;;;;;;;;;;;;GAYG;AAEH,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACjG,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEnF,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,4CAA4C,CAAA;AAErE,SAAS,YAAY;IACnB,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AACzF,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;YAC1B,CAAC,mBAAmB,EAAE,OAAO,CAAC;YAC9B,CAAC,mBAAmB,EAAE,OAAO,CAAC;YAC9B,CAAC,mBAAmB,EAAE,OAAO,CAAC;YAC9B,CAAC,mBAAmB,EAAE,QAAQ,CAAC;YAC/B,CAAC,oBAAoB,EAAE,QAAQ,CAAC;SACjC,EAAE,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,0BAA0B,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;YACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACtD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QACD,MAAM,CACJ,SAAS,EACT,6EAA6E;YAC3E,2CAA2C,CAC9C,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,4DAA4D;QAC5D,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAE3C,yEAAyE;QACzE,mCAAmC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC5D,MAAM,CAAC,SAAS,EAAE,qDAAqD,CAAC,CAAC,SAAS,CAChF,yCAAyC,CAC1C,CAAA;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI;YAC5B,CAAC,SAAS,EAAE,SAAS,CAAC;YACtB,CAAC,SAAS,EAAE,UAAU,CAAC;YACvB,CAAC,WAAW,EAAE,MAAM,CAAC;YACrB,CAAC,SAAS,EAAE,UAAU,CAAC;YACvB,CAAC,SAAS,EAAE,SAAS,CAAC;YACtB,CAAC,UAAU,EAAE,QAAQ,CAAC;SACvB,EAAE,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,MAAM,CACrB,uBAAuB,OAAO,6BAA6B,IAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CACvF,CAAA;YACD,MAAM,CAAC,SAAS,EAAE,GAAG,OAAO,oCAAoC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;QAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;YACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9E,CAAC;QACD,6EAA6E;QAC7E,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packaging.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/styles/packaging.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import pkg from '../../../package.json' with { type: 'json' };
|
|
3
|
+
/**
|
|
4
|
+
* `@prenta/admin` exports a precompiled stylesheet
|
|
5
|
+
* (`@prenta/admin/styles/precompiled.css`) that consumers import purely for its
|
|
6
|
+
* side effects. `sideEffects: false` tells a bundler such an import is safe to
|
|
7
|
+
* eliminate — the admin would then render unstyled, with no error anywhere.
|
|
8
|
+
*
|
|
9
|
+
* The field is currently ABSENT, which is the safe default: bundlers assume
|
|
10
|
+
* side effects. This test exists so it stays safe. `@prenta/sections-react` hit
|
|
11
|
+
* exactly this problem and had to be corrected before publish.
|
|
12
|
+
*
|
|
13
|
+
* If someone does add the field to enable tree-shaking, it must be an array
|
|
14
|
+
* that keeps CSS side-effectful, not `false`.
|
|
15
|
+
*/
|
|
16
|
+
describe('@prenta/admin packaging', () => {
|
|
17
|
+
it('never declares itself free of side effects', () => {
|
|
18
|
+
const sideEffects = pkg.sideEffects;
|
|
19
|
+
expect(sideEffects, 'sideEffects: false lets bundlers drop the precompiled CSS import').not.toBe(false);
|
|
20
|
+
});
|
|
21
|
+
it('keeps CSS side-effectful if the field is ever narrowed to an array', () => {
|
|
22
|
+
const sideEffects = pkg.sideEffects;
|
|
23
|
+
if (!Array.isArray(sideEffects))
|
|
24
|
+
return;
|
|
25
|
+
expect(sideEffects.some((p) => String(p).endsWith('.css')), 'an array form must still list CSS').toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('still exports the stylesheet consumers import', () => {
|
|
28
|
+
expect(pkg.exports['./styles/precompiled.css']).toBe('./dist/prenta-admin.css');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=packaging.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packaging.test.js","sourceRoot":"","sources":["../../../src/__tests__/styles/packaging.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAE7D;;;;;;;;;;;;GAYG;AACH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,WAAW,GAAI,GAAiC,CAAC,WAAW,CAAA;QAClE,MAAM,CACJ,WAAW,EACX,kEAAkE,CACnE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,WAAW,GAAI,GAAiC,CAAC,WAAW,CAAA;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,OAAM;QACvC,MAAM,CACJ,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EACnD,mCAAmC,CACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-layer.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/styles/responsive-layer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
/**
|
|
5
|
+
* The responsive + accessibility layer (`src/styles/responsive.css`), ported
|
|
6
|
+
* from the design bundle's `design-system/cms-responsive.css`.
|
|
7
|
+
*
|
|
8
|
+
* Every way this breaks is invisible: a stylesheet that stops being imported,
|
|
9
|
+
* a rule whose class hook was renamed in a component, or a token override
|
|
10
|
+
* placed before the token it overrides all produce a page that renders
|
|
11
|
+
* perfectly and simply lacks the behaviour. None of it raises an error, and
|
|
12
|
+
* none of it shows up in a screenshot taken at a desktop width with a mouse.
|
|
13
|
+
*
|
|
14
|
+
* Reads the source rather than a compiled bundle so the suite does not depend
|
|
15
|
+
* on a build step; the entry-point assertion is what ties the two together.
|
|
16
|
+
*/
|
|
17
|
+
const PKG = fileURLToPath(new URL('../../../', import.meta.url));
|
|
18
|
+
const read = (rel) => readFileSync(PKG + rel, 'utf8');
|
|
19
|
+
const responsive = read('src/styles/responsive.css');
|
|
20
|
+
const theme = read('src/styles/theme.css');
|
|
21
|
+
const tokens = read('src/styles/prenta-tokens.css');
|
|
22
|
+
describe('responsive + accessibility layer', () => {
|
|
23
|
+
it('is imported by theme.css, which both entry points pull in', () => {
|
|
24
|
+
// `build-input.css` (precompiled) and `tailwind.css` (advanced) each
|
|
25
|
+
// import theme.css and nothing else of ours, so importing from there is
|
|
26
|
+
// what puts this layer in front of every consumer.
|
|
27
|
+
expect(theme).toContain("@import './responsive.css'");
|
|
28
|
+
expect(read('src/styles/build-input.css')).toContain("@import './theme.css'");
|
|
29
|
+
expect(read('src/styles/tailwind.css')).toContain("@import './theme.css'");
|
|
30
|
+
});
|
|
31
|
+
it('is imported AFTER the token block it overrides', () => {
|
|
32
|
+
// Same specificity, so source order alone decides. Imported first, the
|
|
33
|
+
// prefers-contrast block would parse, match, and change nothing.
|
|
34
|
+
expect(theme.indexOf("@import './prenta-tokens.css'")).toBeLessThan(theme.indexOf("@import './responsive.css'"));
|
|
35
|
+
});
|
|
36
|
+
it('scopes every rule to the admin root', () => {
|
|
37
|
+
// The admin renders inside consumer applications. A bare `:focus-visible`
|
|
38
|
+
// or `@media print` rule here would restyle the host's own pages.
|
|
39
|
+
const selectors = responsive
|
|
40
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
41
|
+
.split('\n')
|
|
42
|
+
.map((line) => line.trim())
|
|
43
|
+
.filter((line) => line.endsWith('{') && !line.startsWith('@'));
|
|
44
|
+
expect(selectors.length).toBeGreaterThan(10);
|
|
45
|
+
for (const selector of selectors) {
|
|
46
|
+
expect(selector, `unscoped selector: ${selector}`).toMatch(/\.prenta-admin/);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it('raises contrast rather than lowering it, in both themes', () => {
|
|
50
|
+
// The shipped --muted is already an AA correction over the handoff's own
|
|
51
|
+
// value (see prenta-tokens.css). A "more contrast" preference that moved
|
|
52
|
+
// it the other way would be worse than not honouring the preference.
|
|
53
|
+
const luminance = (hex) => {
|
|
54
|
+
const n = parseInt(hex.slice(1), 16);
|
|
55
|
+
return ((n >> 16) & 255) * 0.299 + ((n >> 8) & 255) * 0.587 + (n & 255) * 0.114;
|
|
56
|
+
};
|
|
57
|
+
const declaration = (css, name, from = 0) => {
|
|
58
|
+
const match = new RegExp(`${name}:\\s*(#[0-9a-f]{6})`, 'i').exec(css.slice(from));
|
|
59
|
+
return match?.[1] ?? null;
|
|
60
|
+
};
|
|
61
|
+
const contrastBlock = responsive.slice(responsive.indexOf('@media (prefers-contrast: more)'));
|
|
62
|
+
const darkStart = contrastBlock.indexOf('[data-theme=');
|
|
63
|
+
for (const name of ['--muted', '--sub', '--bdr']) {
|
|
64
|
+
const base = declaration(tokens, name);
|
|
65
|
+
const raised = declaration(contrastBlock.slice(0, darkStart), name);
|
|
66
|
+
// Light theme: darker text and borders on a light surface.
|
|
67
|
+
expect(luminance(raised), `light ${name}`).toBeLessThan(luminance(base));
|
|
68
|
+
const darkBase = declaration(tokens, name, tokens.indexOf(".prenta-admin[data-theme='dark']"));
|
|
69
|
+
const darkRaised = declaration(contrastBlock.slice(darkStart), name);
|
|
70
|
+
// Dark theme: lighter, on a dark surface.
|
|
71
|
+
expect(luminance(darkRaised), `dark ${name}`).toBeGreaterThan(luminance(darkBase));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it('grows touch targets only under a coarse pointer', () => {
|
|
75
|
+
const coarse = responsive.slice(responsive.indexOf('@media (pointer: coarse)'), responsive.indexOf('@media (min-width: 2000px)'));
|
|
76
|
+
expect(coarse).toContain('min-height: 44px');
|
|
77
|
+
expect(coarse).toContain('min-width: 44px');
|
|
78
|
+
// A 26px button is right with a mouse. No control floor is imposed outside
|
|
79
|
+
// this block — the 44px that appears in the stacked-layout rules is the
|
|
80
|
+
// collapsed strip's own height, not a minimum applied to a control.
|
|
81
|
+
const elsewhere = responsive.replace(coarse, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
82
|
+
expect(elsewhere).not.toMatch(/min-(height|width):\s*44px/);
|
|
83
|
+
});
|
|
84
|
+
it('grows the switch by its hit area, never by its box', () => {
|
|
85
|
+
// A switch positions its thumb against the track. Stretching the track to
|
|
86
|
+
// 44px leaves the thumb floating in dead space — the one carve-out the
|
|
87
|
+
// design bundle makes, and for this reason.
|
|
88
|
+
const hit = responsive.slice(responsive.indexOf('.prenta-touch-hit::after'));
|
|
89
|
+
expect(hit).toContain('position: absolute');
|
|
90
|
+
expect(hit.slice(0, hit.indexOf('}'))).not.toContain('min-height');
|
|
91
|
+
});
|
|
92
|
+
it('overrides the rail width with !important, because it is set inline', () => {
|
|
93
|
+
// The rail is drag-resizable and its width is an inline style, which no
|
|
94
|
+
// class can beat. Without this the stacked layout silently keeps a
|
|
95
|
+
// 360px-wide rail on a 390px screen.
|
|
96
|
+
const stacked = responsive.slice(responsive.indexOf('@media (max-width: 900px)'));
|
|
97
|
+
expect(stacked).toMatch(/\.prenta-editor-rail\s*\{[^}]*width:\s*100%\s*!important/);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('class hooks the layer targets', () => {
|
|
101
|
+
// A rule whose hook was renamed in a component is dead CSS with no error.
|
|
102
|
+
const hooks = [
|
|
103
|
+
['prenta-skip-link', 'src/layout/primitives/AdminShell.tsx'],
|
|
104
|
+
['prenta-editor-rail', 'src/components/EditorRail.tsx'],
|
|
105
|
+
['prenta-editor-rail-collapsed', 'src/components/EditorRail.tsx'],
|
|
106
|
+
['prenta-rail-label', 'src/components/EditorRail.tsx'],
|
|
107
|
+
['prenta-editor-body', 'src/views/page-editor/PageSectionEditor.tsx'],
|
|
108
|
+
['prenta-editor-header', 'src/views/page-editor/EditorTopBar.tsx'],
|
|
109
|
+
['prenta-editor-inspector', 'src/views/page-editor/SectionInspector.tsx'],
|
|
110
|
+
['prenta-canvas-scroll', 'src/views/page-editor/EditorCanvas.tsx'],
|
|
111
|
+
['prenta-canvas-fit', 'src/views/page-editor/EditorCanvas.tsx'],
|
|
112
|
+
['prenta-touch-target', 'src/components/EditorRail.tsx'],
|
|
113
|
+
['prenta-touch-hit', 'src/components/page-tab/DirectiveSwitch.tsx'],
|
|
114
|
+
];
|
|
115
|
+
for (const [hook, file] of hooks) {
|
|
116
|
+
it(`${hook} is applied in ${file.split('/').pop()}`, () => {
|
|
117
|
+
expect(responsive, `${hook} is unused in responsive.css`).toContain(hook);
|
|
118
|
+
expect(read(file), `${hook} is not applied by any component`).toContain(hook);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
it('points the skip link at a target that exists', () => {
|
|
122
|
+
const shell = read('src/layout/primitives/AdminShell.tsx');
|
|
123
|
+
expect(shell).toContain('href="#prenta-main"');
|
|
124
|
+
expect(shell).toContain('id="prenta-main"');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=responsive-layer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-layer.test.js","sourceRoot":"","sources":["../../../src/__tests__/styles/responsive-layer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C;;;;;;;;;;;;GAYG;AAEH,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAChE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,CAAC,CAAA;AAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAA;AACpD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAA;AAEnD,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,qEAAqE;QACrE,wEAAwE;QACxE,mDAAmD;QACnD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QAC7E,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,YAAY,CACjE,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAC5C,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,SAAS,GAAG,UAAU;aACzB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;aAChC,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QAEhE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACpC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAA;QACjF,CAAC,CAAA;QACD,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE;YAC1D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YACjF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;QAC3B,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAA;QAC7F,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAEvD,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAE,CAAA;YACvC,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,CAAE,CAAA;YACpE,2DAA2D;YAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YAExE,MAAM,QAAQ,GAAG,WAAW,CAC1B,MAAM,EACN,IAAI,EACJ,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAClD,CAAA;YACF,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,CAAE,CAAA;YACrE,0CAA0C;YAC1C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;QACpF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAC7B,UAAU,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAC9C,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CACjD,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3C,2EAA2E;QAC3E,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QACjF,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,0EAA0E;QAC1E,uEAAuE;QACvE,4CAA4C;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAA;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAC3C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,wEAAwE;QACxE,mEAAmE;QACnE,qCAAqC;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAA;QACjF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,0EAA0E;IAC1E,MAAM,KAAK,GAA4B;QACrC,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;QAC5D,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;QACvD,CAAC,8BAA8B,EAAE,+BAA+B,CAAC;QACjE,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;QACtD,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;QACrE,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;QAClE,CAAC,yBAAyB,EAAE,4CAA4C,CAAC;QACzE,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;QAClE,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;QAC/D,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;QACxD,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;KACpE,CAAA;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,EAAE,CAAC,GAAG,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,8BAA8B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,kCAAkC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,sCAAsC,CAAC,CAAA;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens-drift.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/styles/tokens-drift.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
// @ts-expect-error — plain .mjs build script, intentionally untyped
|
|
5
|
+
import { OUTPUTS, buildAll, readTokens } from '../../../scripts/generate-tokens.mjs';
|
|
6
|
+
/**
|
|
7
|
+
* The token files are generated from design-system/tokens.json. Before the
|
|
8
|
+
* generator existed, the runtime copy (src/styles/prenta-tokens.css) was a
|
|
9
|
+
* hand transcription of the handoff copy (design-system/tokens.css) and the
|
|
10
|
+
* two silently diverged — the radius scale was renamed in one and not the
|
|
11
|
+
* other, and the WCAG correction to `--muted` lived only downstream where a
|
|
12
|
+
* re-import of the handoff would have reverted it without anyone noticing.
|
|
13
|
+
*
|
|
14
|
+
* This suite fails if a generated file is edited by hand, if tokens.json
|
|
15
|
+
* changes without regenerating, or if the two CSS copies stop agreeing.
|
|
16
|
+
*/
|
|
17
|
+
const PKG = fileURLToPath(new URL('../../../', import.meta.url));
|
|
18
|
+
const read = (rel) => readFileSync(PKG + rel, 'utf8');
|
|
19
|
+
/** Declarations only — comments legitimately differ between the two copies. */
|
|
20
|
+
function declarationMap(css) {
|
|
21
|
+
const body = css.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
22
|
+
const out = new Map();
|
|
23
|
+
for (const match of body.matchAll(/(--[\w-]+)\s*:\s*([^;}]+)[;}]/g)) {
|
|
24
|
+
const name = match[1];
|
|
25
|
+
const value = match[2];
|
|
26
|
+
// Later declarations win in CSS; the dark block legitimately re-declares
|
|
27
|
+
// names from the light block, so keep the first (light) binding per file
|
|
28
|
+
// section by only recording a name once per call.
|
|
29
|
+
if (!out.has(name))
|
|
30
|
+
out.set(name, value.trim());
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
describe('design token generation', () => {
|
|
35
|
+
it('every generated file matches a fresh run of the generator', async () => {
|
|
36
|
+
const built = await buildAll(await readTokens());
|
|
37
|
+
for (const rel of Object.values(OUTPUTS)) {
|
|
38
|
+
const committed = read(rel);
|
|
39
|
+
expect(built[rel], `${rel} is out of date. Run: pnpm --filter @prenta/admin generate`).toBe(committed);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it('marks generated files so they are not hand-edited', () => {
|
|
43
|
+
for (const rel of Object.values(OUTPUTS)) {
|
|
44
|
+
expect(read(rel), `${rel} is missing its generated-file banner`).toContain('GENERATED FILE — DO NOT EDIT');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('the handoff copy and the runtime copy carry identical values', () => {
|
|
48
|
+
const handoff = declarationMap(read(OUTPUTS.tokensCss));
|
|
49
|
+
const runtime = declarationMap(read(OUTPUTS.runtimeCss));
|
|
50
|
+
expect(runtime.size).toBeGreaterThan(60);
|
|
51
|
+
expect([...handoff.keys()].sort()).toEqual([...runtime.keys()].sort());
|
|
52
|
+
for (const [name, value] of handoff) {
|
|
53
|
+
expect(runtime.get(name), `${name} differs between the two token copies`).toBe(value);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
it('scopes the runtime copy to .prenta-admin and never to :root', () => {
|
|
57
|
+
const runtime = read(OUTPUTS.runtimeCss).replace(/\/\*[\s\S]*?\*\//g, '');
|
|
58
|
+
expect(runtime).toContain('.prenta-admin {');
|
|
59
|
+
expect(runtime).not.toMatch(/(^|\s):root\s*[,{]/);
|
|
60
|
+
});
|
|
61
|
+
it('keeps deprecated aliases resolving to their canonical token', () => {
|
|
62
|
+
const runtime = declarationMap(read(OUTPUTS.runtimeCss));
|
|
63
|
+
// `--r-control` and `--motion-*` are the pre-2.0 names. 72 call sites still
|
|
64
|
+
// read `--motion-fast`; the aliases are what make the rename non-breaking.
|
|
65
|
+
expect(runtime.get('--r-control')).toBe('var(--r-ctl)');
|
|
66
|
+
expect(runtime.get('--motion-fast')).toBe('var(--mo-fast)');
|
|
67
|
+
expect(runtime.get('--motion-base')).toBe('var(--mo-base)');
|
|
68
|
+
});
|
|
69
|
+
it('keeps --muted above the WCAG AA threshold in both themes', () => {
|
|
70
|
+
// The handoff specifies #B0ADBE (2.2:1 on white). The admin renders --muted
|
|
71
|
+
// as real text, so the generator ships a corrected value recorded in
|
|
72
|
+
// tokens.json as a `designValue` deviation. If someone re-imports the
|
|
73
|
+
// handoff verbatim, this fails rather than shipping illegible hints.
|
|
74
|
+
const css = read(OUTPUTS.runtimeCss);
|
|
75
|
+
const [light, dark] = css.split('.prenta-admin[data-theme=');
|
|
76
|
+
const mutedOf = (block) => declarationMap(block).get('--muted');
|
|
77
|
+
expect(contrast(mutedOf(light), '#ffffff')).toBeGreaterThanOrEqual(4.5);
|
|
78
|
+
expect(contrast(mutedOf(dark), '#1c1a2e')).toBeGreaterThanOrEqual(4.5);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
/** WCAG 2.1 relative-luminance contrast ratio between two hex colors. */
|
|
82
|
+
function contrast(a, b) {
|
|
83
|
+
const lum = (hex) => {
|
|
84
|
+
const n = hex.trim().replace('#', '');
|
|
85
|
+
const channels = [0, 2, 4].map((i) => parseInt(n.slice(i, i + 2), 16) / 255);
|
|
86
|
+
const [r, g, bl] = channels.map((c) => c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
|
87
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * bl;
|
|
88
|
+
};
|
|
89
|
+
const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
|
|
90
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=tokens-drift.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens-drift.test.js","sourceRoot":"","sources":["../../../src/__tests__/styles/tokens-drift.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-renderer-compat.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/admin-renderer-compat.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { DEFAULT_SECTION_RENDERERS } from '@prenta/sections-react';
|
|
3
|
+
import { ADMIN_RENDER_OPTIONS } from '../../views/page-editor/sections/admin-renderers.js';
|
|
4
|
+
/**
|
|
5
|
+
* `AdminSectionRendererMap` is a hand-maintained structural mirror of
|
|
6
|
+
* `SectionRendererMap` from @prenta/sections-react — cms-admin depends on
|
|
7
|
+
* cms-core only, so the type is duplicated rather than imported.
|
|
8
|
+
*
|
|
9
|
+
* The mirror exists so a consumer can hand `<AdminRoot sectionRenderers>` the
|
|
10
|
+
* same components it registers for the public site and have the editor canvas
|
|
11
|
+
* preview what actually ships. That only works while the two shapes stay
|
|
12
|
+
* assignable, and nothing else in the build checks it — the duplication is
|
|
13
|
+
* invisible to the compiler until someone tries the assignment.
|
|
14
|
+
*
|
|
15
|
+
* This file IS that assignment. If the shapes drift, the type-check fails here
|
|
16
|
+
* rather than in a consumer's project.
|
|
17
|
+
*/
|
|
18
|
+
describe('admin renderer contract', () => {
|
|
19
|
+
it('accepts a real @prenta/sections-react renderer map', () => {
|
|
20
|
+
// The assignment is the assertion — this line fails `tsc` if the mirror
|
|
21
|
+
// drifts. Renderers are function types, so their parameters compare
|
|
22
|
+
// contravariantly: widening a field on the ADMIN side is what breaks it.
|
|
23
|
+
const supplied = DEFAULT_SECTION_RENDERERS;
|
|
24
|
+
expect(Object.keys(supplied)).toContain('hero');
|
|
25
|
+
expect(typeof supplied.hero).toBe('function');
|
|
26
|
+
});
|
|
27
|
+
it('supplies every option a public renderer resolves', () => {
|
|
28
|
+
// sections-react's `ResolvedRenderOptions` — a missing key throws at
|
|
29
|
+
// render time, not compile time, because renderers destructure it.
|
|
30
|
+
for (const key of ['sanitizeHtml', 'baseUrl', 'renderImage', 'lcp', 'prefetchedForms']) {
|
|
31
|
+
expect(ADMIN_RENDER_OPTIONS, `ADMIN_RENDER_OPTIONS is missing ${key}`).toHaveProperty(key);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it('never grants the LCP priority slot in the canvas', () => {
|
|
35
|
+
// On a public page exactly one image loads eagerly. The canvas has no
|
|
36
|
+
// such budget to protect and nothing competing for bandwidth, so every
|
|
37
|
+
// image should lazy-load — `claim()` always declines.
|
|
38
|
+
expect(ADMIN_RENDER_OPTIONS.lcp.claim()).toBe(false);
|
|
39
|
+
expect(ADMIN_RENDER_OPTIONS.lcp.claim()).toBe(false);
|
|
40
|
+
expect(ADMIN_RENDER_OPTIONS.lcp.claimed).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=admin-renderer-compat.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-renderer-compat.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/admin-renderer-compat.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAA;AAE1F;;;;;;;;;;;;;GAaG;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,wEAAwE;QACxE,oEAAoE;QACpE,yEAAyE;QACzE,MAAM,QAAQ,GAA4B,yBAAyB,CAAA;QAEnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/C,MAAM,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,qEAAqE;QACrE,mEAAmE;QACnE,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACvF,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,sEAAsE;QACtE,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -59,13 +59,61 @@ describe('pluggable admin section renderers', () => {
|
|
|
59
59
|
expect(screen.getByText(/Custom section "opal-flip-cards"/)).toBeTruthy();
|
|
60
60
|
});
|
|
61
61
|
});
|
|
62
|
-
it('
|
|
62
|
+
it('overrides built-in section types too', () => {
|
|
63
|
+
// REVERSED from the original behaviour, which consulted the map only for
|
|
64
|
+
// types the built-in switch did not know.
|
|
65
|
+
//
|
|
66
|
+
// The point of `<AdminRoot sectionRenderers>` is to hand the admin the
|
|
67
|
+
// same components the public site registers, so the canvas previews what
|
|
68
|
+
// actually ships. Excluding the built-ins made that impossible for the
|
|
69
|
+
// twelve types that matter most: a consumer passing
|
|
70
|
+
// `DEFAULT_SECTION_RENDERERS` from `@prenta/sections-react` had their
|
|
71
|
+
// hero, text, feature, stats and cta silently dropped, and the canvas
|
|
72
|
+
// rendered the admin's own approximations — different font size, weight
|
|
73
|
+
// and breakpoints — while presenting itself as a preview.
|
|
63
74
|
const renderers = {
|
|
64
|
-
hero: () => _jsx("div", { "data-testid": "
|
|
75
|
+
hero: () => _jsx("div", { "data-testid": "supplied-hero" }),
|
|
65
76
|
};
|
|
66
77
|
render(_jsx(AdminSectionRenderersProvider, { value: renderers, children: _jsx(SectionRenderer, { section: customSection({ sectionType: 'hero', name: 'Hero', content: {} }) }) }));
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
expect(screen.getByTestId('supplied-hero')).toBeTruthy();
|
|
79
|
+
});
|
|
80
|
+
it('falls back to the built-in when a supplied renderer for a built-in type throws', () => {
|
|
81
|
+
// A broken consumer renderer must degrade to the admin's own component,
|
|
82
|
+
// not to the "custom section" placeholder — the type IS known here.
|
|
83
|
+
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
84
|
+
const renderers = {
|
|
85
|
+
hero: () => {
|
|
86
|
+
throw new Error('consumer hero exploded');
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
render(_jsx(AdminSectionRenderersProvider, { value: renderers, children: _jsx(SectionRenderer, { section: customSection({
|
|
90
|
+
sectionType: 'hero',
|
|
91
|
+
name: 'Hero',
|
|
92
|
+
content: { heading: 'Built-in hero copy' },
|
|
93
|
+
}) }) }));
|
|
94
|
+
expect(screen.getByText('Built-in hero copy')).toBeTruthy();
|
|
95
|
+
vi.restoreAllMocks();
|
|
96
|
+
});
|
|
97
|
+
it('supplies the render options a public renderer expects', () => {
|
|
98
|
+
// sections-react renderers call `options.lcp.claim()` during render (hero,
|
|
99
|
+
// feature, gallery). A missing controller would throw on the first image,
|
|
100
|
+
// so the mirror must carry the whole shape, not just renderImage.
|
|
101
|
+
let seen = null;
|
|
102
|
+
const renderers = {
|
|
103
|
+
hero: ({ options }) => {
|
|
104
|
+
seen = options;
|
|
105
|
+
return _jsx("div", {});
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
render(_jsx(AdminSectionRenderersProvider, { value: renderers, children: _jsx(SectionRenderer, { section: customSection({ sectionType: 'hero', content: {} }) }) }));
|
|
109
|
+
const options = seen;
|
|
110
|
+
expect(typeof options.lcp.claim).toBe('function');
|
|
111
|
+
// The canvas never grants the priority slot — nothing competes for
|
|
112
|
+
// bandwidth there, so every image should lazy-load.
|
|
113
|
+
expect(options.lcp.claim()).toBe(false);
|
|
114
|
+
expect(options.prefetchedForms).toEqual({});
|
|
115
|
+
expect(typeof options.renderImage).toBe('function');
|
|
116
|
+
expect(typeof options.sanitizeHtml).toBe('function');
|
|
69
117
|
});
|
|
70
118
|
});
|
|
71
119
|
//# sourceMappingURL=admin-section-renderers.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-section-renderers.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/admin-section-renderers.test.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"admin-section-renderers.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/admin-section-renderers.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-review-mode.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/canvas-review-mode.render.test.tsx"],"names":[],"mappings":""}
|