@prenta/admin 0.93.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/dist/__tests__/lib/version-diff.test.d.ts +2 -0
  3. package/dist/__tests__/lib/version-diff.test.d.ts.map +1 -0
  4. package/dist/__tests__/lib/version-diff.test.js +230 -0
  5. package/dist/__tests__/lib/version-diff.test.js.map +1 -0
  6. package/dist/__tests__/lib/version-history.test.d.ts +2 -0
  7. package/dist/__tests__/lib/version-history.test.d.ts.map +1 -0
  8. package/dist/__tests__/lib/version-history.test.js +125 -0
  9. package/dist/__tests__/lib/version-history.test.js.map +1 -0
  10. package/dist/__tests__/styles/responsive-layer.test.d.ts +2 -0
  11. package/dist/__tests__/styles/responsive-layer.test.d.ts.map +1 -0
  12. package/dist/__tests__/styles/responsive-layer.test.js +127 -0
  13. package/dist/__tests__/styles/responsive-layer.test.js.map +1 -0
  14. package/dist/__tests__/views/canvas-review-mode.render.test.d.ts +2 -0
  15. package/dist/__tests__/views/canvas-review-mode.render.test.d.ts.map +1 -0
  16. package/dist/__tests__/views/canvas-review-mode.render.test.js +70 -0
  17. package/dist/__tests__/views/canvas-review-mode.render.test.js.map +1 -0
  18. package/dist/__tests__/views/editor-top-bar.render.test.js +29 -0
  19. package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
  20. package/dist/__tests__/views/version-history-panel.render.test.d.ts +2 -0
  21. package/dist/__tests__/views/version-history-panel.render.test.d.ts.map +1 -0
  22. package/dist/__tests__/views/version-history-panel.render.test.js +153 -0
  23. package/dist/__tests__/views/version-history-panel.render.test.js.map +1 -0
  24. package/dist/components/EditorRail.js +3 -3
  25. package/dist/components/EditorRail.js.map +1 -1
  26. package/dist/components/page-tab/DirectiveSwitch.d.ts.map +1 -1
  27. package/dist/components/page-tab/DirectiveSwitch.js +5 -1
  28. package/dist/components/page-tab/DirectiveSwitch.js.map +1 -1
  29. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  30. package/dist/layout/primitives/AdminShell.js +2 -2
  31. package/dist/layout/primitives/AdminShell.js.map +1 -1
  32. package/dist/lib/version-diff.d.ts +50 -0
  33. package/dist/lib/version-diff.d.ts.map +1 -0
  34. package/dist/lib/version-diff.js +294 -0
  35. package/dist/lib/version-diff.js.map +1 -0
  36. package/dist/lib/version-history.d.ts +73 -0
  37. package/dist/lib/version-history.d.ts.map +1 -0
  38. package/dist/lib/version-history.js +126 -0
  39. package/dist/lib/version-history.js.map +1 -0
  40. package/dist/prenta-admin.css +1 -1
  41. package/dist/views/page-editor/EditorCanvas.d.ts +14 -1
  42. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
  43. package/dist/views/page-editor/EditorCanvas.js +3 -3
  44. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  45. package/dist/views/page-editor/EditorTopBar.d.ts +8 -2
  46. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
  47. package/dist/views/page-editor/EditorTopBar.js +8 -6
  48. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  49. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  50. package/dist/views/page-editor/PageSectionEditor.js +115 -32
  51. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  52. package/dist/views/page-editor/ReviewBar.d.ts +21 -0
  53. package/dist/views/page-editor/ReviewBar.d.ts.map +1 -0
  54. package/dist/views/page-editor/ReviewBar.js +22 -0
  55. package/dist/views/page-editor/ReviewBar.js.map +1 -0
  56. package/dist/views/page-editor/SectionInspector.d.ts.map +1 -1
  57. package/dist/views/page-editor/SectionInspector.js +1 -1
  58. package/dist/views/page-editor/SectionInspector.js.map +1 -1
  59. package/dist/views/page-editor/SectionsPanel.js +1 -1
  60. package/dist/views/page-editor/SectionsPanel.js.map +1 -1
  61. package/dist/views/page-editor/VersionHistoryPanel.d.ts +29 -0
  62. package/dist/views/page-editor/VersionHistoryPanel.d.ts.map +1 -0
  63. package/dist/views/page-editor/VersionHistoryPanel.js +81 -0
  64. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -0
  65. package/dist/views/page-editor/sections/SectionRenderer.d.ts +13 -1
  66. package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
  67. package/dist/views/page-editor/sections/SectionRenderer.js +23 -8
  68. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
  69. package/package.json +3 -3
  70. package/src/__tests__/lib/version-diff.test.ts +278 -0
  71. package/src/__tests__/lib/version-history.test.ts +166 -0
  72. package/src/__tests__/styles/responsive-layer.test.ts +152 -0
  73. package/src/__tests__/views/canvas-review-mode.render.test.tsx +94 -0
  74. package/src/__tests__/views/editor-top-bar.render.test.tsx +42 -0
  75. package/src/__tests__/views/version-history-panel.render.test.tsx +195 -0
  76. package/src/components/EditorRail.tsx +5 -5
  77. package/src/components/page-tab/DirectiveSwitch.tsx +4 -1
  78. package/src/layout/primitives/AdminShell.tsx +13 -1
  79. package/src/lib/version-diff.ts +376 -0
  80. package/src/lib/version-history.ts +192 -0
  81. package/src/styles/responsive.css +281 -0
  82. package/src/styles/theme.css +8 -0
  83. package/src/views/page-editor/EditorCanvas.tsx +34 -7
  84. package/src/views/page-editor/EditorTopBar.tsx +20 -8
  85. package/src/views/page-editor/PageSectionEditor.tsx +162 -43
  86. package/src/views/page-editor/ReviewBar.tsx +76 -0
  87. package/src/views/page-editor/SectionInspector.tsx +2 -1
  88. package/src/views/page-editor/SectionsPanel.tsx +2 -2
  89. package/src/views/page-editor/VersionHistoryPanel.tsx +302 -0
  90. package/src/views/page-editor/sections/SectionRenderer.tsx +53 -12
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canvas-review-mode.render.test.d.ts.map
@@ -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":""}
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { afterEach, describe, expect, it, vi } from 'vitest';
4
+ import { cleanup, fireEvent, render, screen } from '@testing-library/react';
5
+ import { SectionRenderer } from '../../views/page-editor/sections/SectionRenderer.js';
6
+ afterEach(cleanup);
7
+ const SECTION = {
8
+ id: 's1',
9
+ sectionType: 'hero',
10
+ name: 'Hero Banner',
11
+ visible: true,
12
+ content: { heading: 'A headline' },
13
+ settings: {},
14
+ };
15
+ function sectionEl() {
16
+ const el = document.querySelector('[data-section-id="s1"]');
17
+ if (!el)
18
+ throw new Error('section not rendered');
19
+ return el;
20
+ }
21
+ describe('SectionRenderer — review mode', () => {
22
+ it('marks a changed section and names the change in its label', () => {
23
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, reviewing: true, changed: true }));
24
+ expect(screen.getByText('Hero Banner — changed')).toBeTruthy();
25
+ expect(sectionEl().getAttribute('data-changed')).toBe('true');
26
+ expect(sectionEl().className).toContain('outline-dashed');
27
+ });
28
+ it('leaves an unchanged section unlabelled and unoutlined', () => {
29
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, reviewing: true, changed: false }));
30
+ expect(screen.queryByText(/— changed/)).toBeNull();
31
+ expect(sectionEl().getAttribute('data-changed')).toBeNull();
32
+ expect(sectionEl().className).not.toContain('outline-dashed');
33
+ });
34
+ it('keeps the changed label even though review mode suppresses editing chrome', () => {
35
+ // The trap the handoff calls out by name: review mode and site-preview
36
+ // mode both drop the cursor, the hover outline and the section label, so
37
+ // it is tempting to share one suppression rule. Doing that hides the one
38
+ // label review mode exists to show.
39
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, reviewing: true, changed: true, selected: true }));
40
+ expect(sectionEl().getAttribute('data-editable')).toBeNull();
41
+ expect(sectionEl().className).not.toContain('cursor-pointer');
42
+ // The selection label is gone…
43
+ expect(screen.queryByText('Hero Banner')).toBeNull();
44
+ // …and the changed label is not.
45
+ expect(screen.getByText('Hero Banner — changed')).toBeTruthy();
46
+ });
47
+ it('does not select a section while reviewing — that would edit the current page', () => {
48
+ const onSelect = vi.fn();
49
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, reviewing: true, changed: true, onSelect: onSelect }));
50
+ fireEvent.click(sectionEl());
51
+ expect(onSelect).not.toHaveBeenCalled();
52
+ });
53
+ it('still selects normally when not reviewing', () => {
54
+ const onSelect = vi.fn();
55
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, onSelect: onSelect }));
56
+ fireEvent.click(sectionEl());
57
+ expect(onSelect).toHaveBeenCalledWith('s1');
58
+ expect(sectionEl().getAttribute('data-editable')).toBe('true');
59
+ });
60
+ it('names the change in the accessible name, not only in colour and a dashed border', () => {
61
+ render(_jsx(SectionRenderer, { section: SECTION, editable: true, reviewing: true, changed: true }));
62
+ expect(sectionEl().getAttribute('aria-label')).toBe('Hero Banner section — changed in this version');
63
+ });
64
+ it('keeps a hidden section muted in a snapshot, as it was when saved', () => {
65
+ render(_jsx(SectionRenderer, { section: { ...SECTION, visible: false }, editable: true, reviewing: true, changed: false }));
66
+ expect(sectionEl().className).toContain('opacity-40');
67
+ expect(screen.getByText('Hidden')).toBeTruthy();
68
+ });
69
+ });
70
+ //# sourceMappingURL=canvas-review-mode.render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-review-mode.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/canvas-review-mode.render.test.tsx"],"names":[],"mappings":"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"}
@@ -74,4 +74,33 @@ describe('EditorTopBar view-on-site vs view-live', () => {
74
74
  expect(screen.queryByRole('button', { name: /View (live|draft)/ })).toBeNull();
75
75
  });
76
76
  });
77
+ describe('EditorTopBar history button', () => {
78
+ it('reports whether history is showing, since it takes over the rail rather than opening a dialog', () => {
79
+ const { unmount } = render(_jsx(EditorTopBar, { ...baseProps, onHistory: vi.fn() }));
80
+ expect(screen.getByRole('button', { name: 'Version history' }).getAttribute('aria-pressed')).toBe('false');
81
+ unmount();
82
+ render(_jsx(EditorTopBar, { ...baseProps, onHistory: vi.fn(), historyOpen: true }));
83
+ const open = screen.getByRole('button', { name: 'Version history' });
84
+ expect(open.getAttribute('aria-pressed')).toBe('true');
85
+ expect(open.getAttribute('title')).toBe('Close version history');
86
+ });
87
+ it('gives every icon-only control a touch target', () => {
88
+ // These buttons are 32px square, which is a fine mouse target and an
89
+ // unusable thumb one. `prenta-touch-target` is what grows them under a
90
+ // coarse pointer — and it is applied per control, so a button written with
91
+ // a conditional className is easy to leave out. Exactly that happened to
92
+ // the history button, whose pressed state made it the odd one out.
93
+ render(_jsx(EditorTopBar, { ...baseProps, onHistory: vi.fn(), onViewOnSite: vi.fn(), onToggleSitePreview: vi.fn() }));
94
+ for (const name of [
95
+ 'Page settings',
96
+ 'Version history',
97
+ 'Preview page',
98
+ 'Inline site preview',
99
+ 'View draft on site',
100
+ ]) {
101
+ const button = screen.getByRole('button', { name });
102
+ expect(button.className, `${name} has no touch target`).toContain('prenta-touch-target');
103
+ }
104
+ });
105
+ });
77
106
  //# sourceMappingURL=editor-top-bar.render.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-top-bar.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/editor-top-bar.render.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor-top-bar.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/editor-top-bar.render.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=version-history-panel.render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-history-panel.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/version-history-panel.render.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,153 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { afterEach, describe, expect, it, vi } from 'vitest';
4
+ import { cleanup, fireEvent, render, screen, within } from '@testing-library/react';
5
+ import { VersionHistoryPanel } from '../../views/page-editor/VersionHistoryPanel.js';
6
+ afterEach(cleanup);
7
+ function section(id, content) {
8
+ return { id, sectionType: 'hero', name: 'Hero Banner', visible: true, content, settings: {} };
9
+ }
10
+ const NOW = new Date();
11
+ const iso = (hoursAgo) => new Date(NOW.getTime() - hoursAgo * 3_600_000).toISOString();
12
+ const VERSIONS = [
13
+ {
14
+ id: 'v3',
15
+ changeType: 'PUBLISH',
16
+ createdAt: iso(1),
17
+ author: { id: 'u1', name: 'Sarah Mills' },
18
+ sections: [section('s1', { heading: 'Third headline' })],
19
+ },
20
+ {
21
+ id: 'v2',
22
+ changeType: 'UPDATE',
23
+ createdAt: iso(2),
24
+ author: { id: 'u2', name: 'Dan Ito' },
25
+ sections: [section('s1', { heading: 'Second headline' })],
26
+ },
27
+ {
28
+ id: 'v1',
29
+ changeType: 'CREATE',
30
+ createdAt: iso(30),
31
+ author: { id: 'u1', name: 'Sarah Mills' },
32
+ sections: [section('s1', { heading: 'First headline' })],
33
+ },
34
+ ];
35
+ function renderPanel(props = {}) {
36
+ const onSelect = vi.fn();
37
+ const onRestore = vi.fn();
38
+ const onClose = vi.fn();
39
+ render(_jsx(VersionHistoryPanel, { versions: VERSIONS, loading: false, error: null, selectedIndex: 0, onSelect: onSelect, onClose: onClose, onRestore: onRestore, restoring: false, canRestore: true, ...props }));
40
+ return { onSelect, onRestore, onClose };
41
+ }
42
+ describe('VersionHistoryPanel', () => {
43
+ it('groups entries under sticky day headings', () => {
44
+ renderPanel();
45
+ expect(screen.getByRole('heading', { name: 'Today' })).toBeTruthy();
46
+ // v1 is 30 hours back, so it lands on its own day.
47
+ expect(screen.getAllByRole('heading', { level: 3 }).length).toBeGreaterThan(1);
48
+ });
49
+ it('marks the newest entry as current and shows the published pill', () => {
50
+ renderPanel();
51
+ expect(screen.getByText('Current')).toBeTruthy();
52
+ expect(screen.getByText('Published')).toBeTruthy();
53
+ // No pill claims "Draft" — nothing in this codebase records one.
54
+ expect(screen.queryByText('Draft')).toBeNull();
55
+ });
56
+ it('summarises each entry by what that save changed', () => {
57
+ renderPanel();
58
+ // v3 changed one field against v2.
59
+ expect(screen.getByText(/Sarah Mills · 1 change$/)).toBeTruthy();
60
+ // v1 has no predecessor in the list, so it reports no computed changes
61
+ // rather than claiming it created everything.
62
+ expect(screen.getByText(/Sarah Mills · no content changes/)).toBeTruthy();
63
+ });
64
+ it('shows the computed field diff, old struck through and new after it', () => {
65
+ renderPanel();
66
+ // The newest changed entry auto-expands.
67
+ expect(screen.getByText('Heading')).toBeTruthy();
68
+ const oldValue = screen.getByText('Second headline');
69
+ const newValue = screen.getByText('Third headline');
70
+ expect(oldValue.className).toContain('line-through');
71
+ expect(newValue.className).not.toContain('line-through');
72
+ });
73
+ it('selects the version when its row is activated, which is what drives the canvas', () => {
74
+ const { onSelect } = renderPanel();
75
+ fireEvent.click(screen.getByText(/Dan Ito/));
76
+ expect(onSelect).toHaveBeenCalledWith(1);
77
+ });
78
+ it('offers Restore only on the selected older row', () => {
79
+ renderPanel({ selectedIndex: 0 });
80
+ // Selected row is the current one — restoring it is a no-op.
81
+ expect(screen.queryByRole('button', { name: /Restore this version/ })).toBeNull();
82
+ cleanup();
83
+ renderPanel({ selectedIndex: 1 });
84
+ const restore = screen.getByRole('button', { name: /Restore this version/ });
85
+ expect(restore).toBeTruthy();
86
+ });
87
+ it('shows the diff for whichever version is selected, including one selected from outside', () => {
88
+ // The review bar and the canvas both move the selection without the panel
89
+ // being clicked. When disclosure was tracked separately from selection,
90
+ // the diff described one version while the canvas rendered another — and
91
+ // Restore sat on a row that was not open.
92
+ renderPanel({ selectedIndex: 1 });
93
+ expect(screen.getByText('First headline')).toBeTruthy();
94
+ expect(screen.getByText('Second headline')).toBeTruthy();
95
+ expect(screen.queryByText('Third headline')).toBeNull();
96
+ expect(screen.getByRole('button', { name: /Restore this version/ })).toBeTruthy();
97
+ });
98
+ it('collapses the row it is already on rather than reselecting it', () => {
99
+ const { onSelect } = renderPanel({ selectedIndex: 0 });
100
+ expect(screen.getByText('Heading')).toBeTruthy();
101
+ fireEvent.click(screen.getByText(/Sarah Mills · 1 change/));
102
+ expect(onSelect).not.toHaveBeenCalled();
103
+ expect(screen.queryByText('Heading')).toBeNull();
104
+ });
105
+ it('can restore the oldest version, which by definition has no diff to show', () => {
106
+ // Restore used to live inside the diff block, so a version with no
107
+ // computed changes — the oldest one held, or a metadata-only save — was
108
+ // reviewable and not restorable. That is the wrong way round: the oldest
109
+ // version is the one a rollback most often wants.
110
+ renderPanel({ selectedIndex: 2 });
111
+ expect(screen.getByText(/No section changes to show/)).toBeTruthy();
112
+ expect(screen.getByRole('button', { name: /Restore this version/ })).toBeTruthy();
113
+ });
114
+ it('hides Restore from a user who cannot edit', () => {
115
+ renderPanel({ selectedIndex: 1, canRestore: false });
116
+ expect(screen.queryByRole('button', { name: /Restore this version/ })).toBeNull();
117
+ });
118
+ it('restores the version whose row was clicked', () => {
119
+ const { onRestore } = renderPanel({ selectedIndex: 1 });
120
+ fireEvent.click(screen.getByRole('button', { name: /Restore this version/ }));
121
+ expect(onRestore).toHaveBeenCalledWith(expect.objectContaining({ id: 'v2' }));
122
+ });
123
+ it('renders two non-adjacent groups sharing a day label without colliding', () => {
124
+ // `groupVersionsByDay` walks CONSECUTIVE runs, so an out-of-order page
125
+ // legitimately yields ['Today', 'Yesterday', 'Today'] — its own test
126
+ // asserts that. Keyed on the label, the second "Today" collides with the
127
+ // first and React mis-associates the two sections' contents.
128
+ const outOfOrder = [
129
+ { ...VERSIONS[0], id: 'a', createdAt: iso(1) },
130
+ { ...VERSIONS[1], id: 'b', createdAt: iso(30) },
131
+ { ...VERSIONS[2], id: 'c', createdAt: iso(2) },
132
+ ];
133
+ const spy = vi.spyOn(console, 'error').mockImplementation(() => { });
134
+ renderPanel({ versions: outOfOrder });
135
+ expect(screen.getAllByRole('heading', { name: 'Today' })).toHaveLength(2);
136
+ expect(spy.mock.calls.some((call) => String(call[0]).includes('same key')), 'React reported duplicate keys').toBe(false);
137
+ spy.mockRestore();
138
+ });
139
+ it('reports an empty history rather than an empty box', () => {
140
+ renderPanel({ versions: [] });
141
+ expect(screen.getByText(/No versions yet/)).toBeTruthy();
142
+ });
143
+ it('surfaces a load failure', () => {
144
+ renderPanel({ versions: [], error: 'Network unreachable' });
145
+ expect(screen.getByText('Network unreachable')).toBeTruthy();
146
+ });
147
+ it('announces itself as a named region so it is reachable without sight of the overlay', () => {
148
+ renderPanel();
149
+ const region = screen.getByRole('region', { name: 'Version history' });
150
+ expect(within(region).getByRole('button', { name: 'Close version history' })).toBeTruthy();
151
+ });
152
+ });
153
+ //# sourceMappingURL=version-history-panel.render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-history-panel.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/version-history-panel.render.test.tsx"],"names":[],"mappings":"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"}
@@ -64,9 +64,9 @@ export function EditorRail({ collapsedLabel, children }) {
64
64
  };
65
65
  }, [dragging, applyWidth]);
66
66
  if (!open) {
67
- return (_jsxs("div", { className: "bg-card border-border flex shrink-0 flex-col items-center gap-3 border-r py-3", style: { width: RAIL_COLLAPSED_WIDTH }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), "aria-label": `Expand ${collapsedLabel} panel`, title: `Expand ${collapsedLabel} panel`, className: "text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-6.5 w-6.5 items-center justify-center rounded-md transition-colors", children: _jsx(PanelLeftOpen, { className: "h-4 w-4", "aria-hidden": true }) }), _jsx("span", { className: "text-muted-foreground text-[10px] font-bold tracking-[0.8px] whitespace-nowrap uppercase [writing-mode:vertical-rl]", "aria-hidden": true, children: collapsedLabel })] }));
67
+ return (_jsxs("div", { className: "prenta-editor-rail-collapsed bg-card border-border flex shrink-0 flex-col items-center gap-3 border-r py-3", style: { width: RAIL_COLLAPSED_WIDTH }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), "aria-label": `Expand ${collapsedLabel} panel`, title: `Expand ${collapsedLabel} panel`, className: "prenta-touch-target text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-6.5 w-6.5 items-center justify-center rounded-md transition-colors", children: _jsx(PanelLeftOpen, { className: "h-4 w-4", "aria-hidden": true }) }), _jsx("span", { className: "prenta-rail-label text-muted-foreground text-[10px] font-bold tracking-[0.8px] whitespace-nowrap uppercase [writing-mode:vertical-rl]", "aria-hidden": true, children: collapsedLabel })] }));
68
68
  }
69
- return (_jsxs("div", { ref: railRef, className: `bg-card border-border relative flex shrink-0 flex-col border-r ${
69
+ return (_jsxs("div", { ref: railRef, className: `prenta-editor-rail bg-card border-border relative flex shrink-0 flex-col border-r ${
70
70
  // A width transition during a drag fights the pointer: the panel
71
71
  // chases the cursor a frame behind and the resize feels broken.
72
72
  dragging ? '' : 'motion-safe:transition-[width] motion-safe:duration-(--mo-slow)'}`, style: { width }, children: [_jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: children({ width, dragging, collapse }) }), _jsx("div", {
@@ -99,6 +99,6 @@ export function EditorRail({ collapsedLabel, children }) {
99
99
  * dragging, and the collapse control.
100
100
  */
101
101
  export function RailHeader({ title, width, dragging, onCollapse, }) {
102
- return (_jsxs("div", { className: "border-border flex items-center justify-between gap-2 border-b px-3.5 py-2.5", children: [_jsx("h2", { className: "text-foreground truncate text-[12.5px] font-semibold", children: title }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [dragging && (_jsxs("span", { className: "text-muted-foreground text-[11px] tabular-nums", "aria-hidden": true, children: [width, "px"] })), _jsx("button", { type: "button", onClick: onCollapse, "aria-label": `Collapse ${title} panel`, title: `Collapse ${title} panel`, className: "text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-6.5 w-6.5 items-center justify-center rounded-md transition-colors", children: _jsx(PanelLeftClose, { className: "h-4 w-4", "aria-hidden": true }) })] })] }));
102
+ return (_jsxs("div", { className: "border-border flex items-center justify-between gap-2 border-b px-3.5 py-2.5", children: [_jsx("h2", { className: "text-foreground truncate text-[12.5px] font-semibold", children: title }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [dragging && (_jsxs("span", { className: "text-muted-foreground text-[11px] tabular-nums", "aria-hidden": true, children: [width, "px"] })), _jsx("button", { type: "button", onClick: onCollapse, "aria-label": `Collapse ${title} panel`, title: `Collapse ${title} panel`, className: "prenta-touch-target text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-6.5 w-6.5 items-center justify-center rounded-md transition-colors", children: _jsx(PanelLeftClose, { className: "h-4 w-4", "aria-hidden": true }) })] })] }));
103
103
  }
104
104
  //# sourceMappingURL=EditorRail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorRail.js","sourceRoot":"","sources":["../../src/components/EditorRail.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditorRail.js","sourceRoot":"","sources":["../../src/components/EditorRail.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DirectiveSwitch.d.ts","sourceRoot":"","sources":["../../../src/components/page-tab/DirectiveSwitch.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,QAAgB,GACjB,EAAE,oBAAoB,2CAmCtB"}
1
+ {"version":3,"file":"DirectiveSwitch.d.ts","sourceRoot":"","sources":["../../../src/components/page-tab/DirectiveSwitch.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,QAAgB,GACjB,EAAE,oBAAoB,2CAsCtB"}
@@ -24,6 +24,10 @@ import * as Switch from '@radix-ui/react-switch';
24
24
  */
25
25
  export function DirectiveSwitch({ id, label, hint, checked, onChange, permissiveToken, restrictiveToken, disabled = false, }) {
26
26
  const token = checked ? permissiveToken : restrictiveToken;
27
- return (_jsxs("div", { className: "flex items-start justify-between gap-3 py-1.5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("label", { htmlFor: id, className: "text-foreground block text-[12.5px] font-medium", children: label }), hint && _jsx("p", { className: "text-muted-foreground mt-0.5 text-[11px] leading-snug", children: hint })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx("code", { className: `rounded px-1.5 py-0.5 font-mono text-[9.5px] font-bold ${checked ? 'bg-success/12 text-success' : 'bg-destructive/12 text-destructive'}`, children: token }), _jsx(Switch.Root, { id: id, checked: checked, onCheckedChange: onChange, disabled: disabled, "aria-label": `${label} — currently ${token}`, className: `focus-visible:ring-ring relative h-[19px] w-[34px] shrink-0 rounded-full transition-colors duration-(--mo-base) focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50 ${checked ? 'bg-success' : 'bg-destructive/55'}`, children: _jsx(Switch.Thumb, { className: "block h-3.5 w-3.5 translate-x-[2.5px] rounded-full bg-white shadow-[0_1px_3px_rgba(0,0,0,0.25)] transition-transform duration-(--mo-base) data-[state=checked]:translate-x-[18px]" }) })] })] }));
27
+ return (_jsxs("div", { className: "flex items-start justify-between gap-3 py-1.5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("label", { htmlFor: id, className: "text-foreground block text-[12.5px] font-medium", children: label }), hint && _jsx("p", { className: "text-muted-foreground mt-0.5 text-[11px] leading-snug", children: hint })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx("code", { className: `rounded px-1.5 py-0.5 font-mono text-[9.5px] font-bold ${checked ? 'bg-success/12 text-success' : 'bg-destructive/12 text-destructive'}`, children: token }), _jsx(Switch.Root, { id: id, checked: checked, onCheckedChange: onChange, disabled: disabled, "aria-label": `${label} — currently ${token}`,
28
+ // `prenta-touch-hit`, not `prenta-touch-target`: growing the track to
29
+ // 44px would strand the thumb, which is positioned against it. The
30
+ // hit area grows; the switch keeps its measured 34×19.
31
+ className: `prenta-touch-hit focus-visible:ring-ring relative h-[19px] w-[34px] shrink-0 rounded-full transition-colors duration-(--mo-base) focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50 ${checked ? 'bg-success' : 'bg-destructive/55'}`, children: _jsx(Switch.Thumb, { className: "block h-3.5 w-3.5 translate-x-[2.5px] rounded-full bg-white shadow-[0_1px_3px_rgba(0,0,0,0.25)] transition-transform duration-(--mo-base) data-[state=checked]:translate-x-[18px]" }) })] })] }));
28
32
  }
29
33
  //# sourceMappingURL=DirectiveSwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DirectiveSwitch.js","sourceRoot":"","sources":["../../../src/components/page-tab/DirectiveSwitch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAkBhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,QAAQ,GAAG,KAAK,GACK;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAE1D,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,eAAK,SAAS,EAAC,SAAS,aACtB,gBAAO,OAAO,EAAE,EAAE,EAAE,SAAS,EAAC,iDAAiD,YAC5E,KAAK,GACA,EACP,IAAI,IAAI,YAAG,SAAS,EAAC,uDAAuD,YAAE,IAAI,GAAK,IACpF,EAEN,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eACE,SAAS,EAAE,0DACT,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oCAC3C,EAAE,YAED,KAAK,GACD,EACP,KAAC,MAAM,CAAC,IAAI,IACV,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,QAAQ,gBACN,GAAG,KAAK,gBAAgB,KAAK,EAAE,EAC3C,SAAS,EAAE,uLACT,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mBAC3B,EAAE,YAEF,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,mLAAmL,GAAG,GAClM,IACV,IACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"DirectiveSwitch.js","sourceRoot":"","sources":["../../../src/components/page-tab/DirectiveSwitch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAkBhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,QAAQ,GAAG,KAAK,GACK;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAE1D,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,eAAK,SAAS,EAAC,SAAS,aACtB,gBAAO,OAAO,EAAE,EAAE,EAAE,SAAS,EAAC,iDAAiD,YAC5E,KAAK,GACA,EACP,IAAI,IAAI,YAAG,SAAS,EAAC,uDAAuD,YAAE,IAAI,GAAK,IACpF,EAEN,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eACE,SAAS,EAAE,0DACT,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oCAC3C,EAAE,YAED,KAAK,GACD,EACP,KAAC,MAAM,CAAC,IAAI,IACV,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,QAAQ,gBACN,GAAG,KAAK,gBAAgB,KAAK,EAAE;wBAC3C,sEAAsE;wBACtE,mEAAmE;wBACnE,uDAAuD;wBACvD,SAAS,EAAE,wMACT,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mBAC3B,EAAE,YAEF,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,mLAAmL,GAAG,GAClM,IACV,IACF,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,OAAO,EAAE,SAAS,CAAA;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uEAAuE;IACvE,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAyB,EACzB,oBAAoB,EACpB,iBAAuB,GACxB,EAAE,eAAe,2CAiEjB"}
1
+ {"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,OAAO,EAAE,SAAS,CAAA;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uEAAuE;IACvE,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAyB,EACzB,oBAAoB,EACpB,iBAAuB,GACxB,EAAE,eAAe,2CA6EjB"}
@@ -31,7 +31,7 @@ export function AdminShell({ sidebar, header, breadcrumbs, children, mobileSideb
31
31
  }, [desktopBreakpoint]);
32
32
  return (_jsxs("div", { className: "bg-background text-foreground h-screen overflow-hidden", style: isDesktop
33
33
  ? { display: 'grid', gridTemplateColumns: 'auto minmax(0, 1fr)' }
34
- : { display: 'block', position: 'relative' }, children: [!isDesktop && mobileSidebarOpen && (_jsx("div", { "aria-hidden": true, className: "fixed inset-0 z-40 bg-black/30 backdrop-blur-sm", onClick: onMobileSidebarClose })), _jsx("div", { className: "z-50", style: isDesktop
34
+ : { display: 'block', position: 'relative' }, children: [_jsx("a", { className: "prenta-skip-link", href: "#prenta-main", children: "Skip to content" }), !isDesktop && mobileSidebarOpen && (_jsx("div", { "aria-hidden": true, className: "fixed inset-0 z-40 bg-black/30 backdrop-blur-sm", onClick: onMobileSidebarClose })), _jsx("div", { className: "z-50", style: isDesktop
35
35
  ? {
36
36
  gridColumn: '1 / 2',
37
37
  height: '100vh',
@@ -46,6 +46,6 @@ export function AdminShell({ sidebar, header, breadcrumbs, children, mobileSideb
46
46
  transition: 'transform 300ms ease',
47
47
  }, children: sidebar }), _jsxs("div", { className: "flex flex-col overflow-hidden", style: isDesktop
48
48
  ? { gridColumn: '2 / 3', height: '100vh', minWidth: 0 }
49
- : { height: '100vh', minWidth: 0 }, children: [header, breadcrumbs, _jsx("main", { className: "min-h-0 flex-1 overflow-y-auto", children: children })] })] }));
49
+ : { height: '100vh', minWidth: 0 }, children: [header, breadcrumbs, _jsx("main", { id: "prenta-main", className: "min-h-0 flex-1 overflow-y-auto", children: children })] })] }));
50
50
  }
51
51
  //# sourceMappingURL=AdminShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminShell.js","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AA0B3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,EACpB,iBAAiB,GAAG,GAAG,GACP;IAChB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,iBAAiB,KAAK,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,EAAE,CAAA;QACT,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,OAAO,CACL,eACE,SAAS,EAAC,wDAAwD,EAClE,KAAK,EACH,SAAS;YACP,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,qBAAqB,EAAE;YACjE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAG/C,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAClC,mCAEE,SAAS,EAAC,iDAAiD,EAC3D,OAAO,EAAE,oBAAoB,GAC7B,CACH,EAED,cACE,SAAS,EAAC,MAAM,EAChB,KAAK,EACH,SAAS;oBACP,CAAC,CAAC;wBACE,UAAU,EAAE,OAAO;wBACnB,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,QAAQ;qBACnB;oBACH,CAAC,CAAC;wBACE,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB;wBACpE,UAAU,EAAE,sBAAsB;qBACnC,YAGN,OAAO,GACJ,EAEN,eACE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EACH,SAAS;oBACP,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACvD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAGrC,MAAM,EACN,WAAW,EACZ,eAAM,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAQ,IAC9D,IACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AdminShell.js","sourceRoot":"","sources":["../../../src/layout/primitives/AdminShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AA0B3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,EACpB,iBAAiB,GAAG,GAAG,GACP;IAChB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,iBAAiB,KAAK,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,EAAE,CAAA;QACT,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,OAAO,CACL,eACE,SAAS,EAAC,wDAAwD,EAClE,KAAK,EACH,SAAS;YACP,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,qBAAqB,EAAE;YACjE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAShD,YAAG,SAAS,EAAC,kBAAkB,EAAC,IAAI,EAAC,cAAc,gCAE/C,EAEH,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAClC,mCAEE,SAAS,EAAC,iDAAiD,EAC3D,OAAO,EAAE,oBAAoB,GAC7B,CACH,EAED,cACE,SAAS,EAAC,MAAM,EAChB,KAAK,EACH,SAAS;oBACP,CAAC,CAAC;wBACE,UAAU,EAAE,OAAO;wBACnB,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,QAAQ;qBACnB;oBACH,CAAC,CAAC;wBACE,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB;wBACpE,UAAU,EAAE,sBAAsB;qBACnC,YAGN,OAAO,GACJ,EAEN,eACE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EACH,SAAS;oBACP,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACvD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAGrC,MAAM,EACN,WAAW,EACZ,eAAM,EAAE,EAAC,aAAa,EAAC,SAAS,EAAC,gCAAgC,YAC9D,QAAQ,GACJ,IACH,IACF,CACP,CAAA;AACH,CAAC"}