@actuate-media/cms-admin 0.65.0 → 0.67.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 (138) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +7 -4
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/components/inspector-pane.test.d.ts +2 -0
  6. package/dist/__tests__/components/inspector-pane.test.d.ts.map +1 -0
  7. package/dist/__tests__/components/inspector-pane.test.js +31 -0
  8. package/dist/__tests__/components/inspector-pane.test.js.map +1 -0
  9. package/dist/__tests__/lib/pages-tree.test.d.ts +2 -0
  10. package/dist/__tests__/lib/pages-tree.test.d.ts.map +1 -0
  11. package/dist/__tests__/lib/pages-tree.test.js +173 -0
  12. package/dist/__tests__/lib/pages-tree.test.js.map +1 -0
  13. package/dist/__tests__/views/dashboard.test.js +7 -3
  14. package/dist/__tests__/views/dashboard.test.js.map +1 -1
  15. package/dist/__tests__/views/media-seo-audit.render.test.d.ts +2 -0
  16. package/dist/__tests__/views/media-seo-audit.render.test.d.ts.map +1 -0
  17. package/dist/__tests__/views/media-seo-audit.render.test.js +102 -0
  18. package/dist/__tests__/views/media-seo-audit.render.test.js.map +1 -0
  19. package/dist/__tests__/views/onboarding-block.render.test.d.ts +2 -0
  20. package/dist/__tests__/views/onboarding-block.render.test.d.ts.map +1 -0
  21. package/dist/__tests__/views/onboarding-block.render.test.js +146 -0
  22. package/dist/__tests__/views/onboarding-block.render.test.js.map +1 -0
  23. package/dist/__tests__/views/pages-list-view.test.js +77 -1
  24. package/dist/__tests__/views/pages-list-view.test.js.map +1 -1
  25. package/dist/actuate-admin.css +1 -1
  26. package/dist/components/script-tags/ScriptTagEditorPane.d.ts +26 -0
  27. package/dist/components/script-tags/ScriptTagEditorPane.d.ts.map +1 -0
  28. package/dist/components/script-tags/ScriptTagEditorPane.js +160 -0
  29. package/dist/components/script-tags/ScriptTagEditorPane.js.map +1 -0
  30. package/dist/components/ui/InspectorPane.d.ts +51 -0
  31. package/dist/components/ui/InspectorPane.d.ts.map +1 -0
  32. package/dist/components/ui/InspectorPane.js +42 -0
  33. package/dist/components/ui/InspectorPane.js.map +1 -0
  34. package/dist/components/ui/RowActions.d.ts +19 -0
  35. package/dist/components/ui/RowActions.d.ts.map +1 -0
  36. package/dist/components/ui/RowActions.js +16 -0
  37. package/dist/components/ui/RowActions.js.map +1 -0
  38. package/dist/components/ui/index.d.ts +4 -0
  39. package/dist/components/ui/index.d.ts.map +1 -1
  40. package/dist/components/ui/index.js +2 -0
  41. package/dist/components/ui/index.js.map +1 -1
  42. package/dist/layout/Header.js +1 -1
  43. package/dist/layout/Header.js.map +1 -1
  44. package/dist/layout/Layout.js +8 -38
  45. package/dist/layout/Layout.js.map +1 -1
  46. package/dist/lib/page-editor-service.d.ts +11 -2
  47. package/dist/lib/page-editor-service.d.ts.map +1 -1
  48. package/dist/lib/page-editor-service.js +8 -2
  49. package/dist/lib/page-editor-service.js.map +1 -1
  50. package/dist/lib/pages-service.d.ts +9 -0
  51. package/dist/lib/pages-service.d.ts.map +1 -1
  52. package/dist/lib/pages-service.js +14 -0
  53. package/dist/lib/pages-service.js.map +1 -1
  54. package/dist/lib/pages-tree.d.ts +44 -0
  55. package/dist/lib/pages-tree.d.ts.map +1 -0
  56. package/dist/lib/pages-tree.js +106 -0
  57. package/dist/lib/pages-tree.js.map +1 -0
  58. package/dist/lib/posts-service.d.ts +11 -0
  59. package/dist/lib/posts-service.d.ts.map +1 -1
  60. package/dist/lib/posts-service.js +13 -0
  61. package/dist/lib/posts-service.js.map +1 -1
  62. package/dist/lib/seo-service.d.ts +3 -0
  63. package/dist/lib/seo-service.d.ts.map +1 -1
  64. package/dist/lib/seo-service.js.map +1 -1
  65. package/dist/views/Dashboard.d.ts.map +1 -1
  66. package/dist/views/Dashboard.js +40 -3
  67. package/dist/views/Dashboard.js.map +1 -1
  68. package/dist/views/MediaBrowser.d.ts.map +1 -1
  69. package/dist/views/MediaBrowser.js +55 -2
  70. package/dist/views/MediaBrowser.js.map +1 -1
  71. package/dist/views/MediaSeoAudit.d.ts +25 -0
  72. package/dist/views/MediaSeoAudit.d.ts.map +1 -0
  73. package/dist/views/MediaSeoAudit.js +97 -0
  74. package/dist/views/MediaSeoAudit.js.map +1 -0
  75. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  76. package/dist/views/Pages/PagesListView.js +145 -16
  77. package/dist/views/Pages/PagesListView.js.map +1 -1
  78. package/dist/views/Pages/PagesTreeTable.d.ts +35 -0
  79. package/dist/views/Pages/PagesTreeTable.d.ts.map +1 -0
  80. package/dist/views/Pages/PagesTreeTable.js +28 -0
  81. package/dist/views/Pages/PagesTreeTable.js.map +1 -0
  82. package/dist/views/Posts/PostsListView.d.ts.map +1 -1
  83. package/dist/views/Posts/PostsListView.js +66 -9
  84. package/dist/views/Posts/PostsListView.js.map +1 -1
  85. package/dist/views/ScriptTags.d.ts +5 -1
  86. package/dist/views/ScriptTags.d.ts.map +1 -1
  87. package/dist/views/ScriptTags.js +32 -7
  88. package/dist/views/ScriptTags.js.map +1 -1
  89. package/dist/views/dashboard/OnboardingBlock.d.ts +29 -0
  90. package/dist/views/dashboard/OnboardingBlock.d.ts.map +1 -0
  91. package/dist/views/dashboard/OnboardingBlock.js +71 -0
  92. package/dist/views/dashboard/OnboardingBlock.js.map +1 -0
  93. package/dist/views/page-editor/PageSectionEditor.d.ts +7 -1
  94. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  95. package/dist/views/page-editor/PageSectionEditor.js +3 -3
  96. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  97. package/dist/views/page-editor/PageSettingsModal.d.ts +1 -1
  98. package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
  99. package/dist/views/page-editor/PageSettingsModal.js +42 -3
  100. package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
  101. package/dist/views/seo/TechnicalTab.d.ts.map +1 -1
  102. package/dist/views/seo/TechnicalTab.js +15 -0
  103. package/dist/views/seo/TechnicalTab.js.map +1 -1
  104. package/package.json +3 -3
  105. package/src/AdminRoot.tsx +7 -3
  106. package/src/__tests__/components/inspector-pane.test.tsx +64 -0
  107. package/src/__tests__/lib/pages-tree.test.ts +197 -0
  108. package/src/__tests__/views/dashboard.test.tsx +7 -3
  109. package/src/__tests__/views/media-seo-audit.render.test.tsx +117 -0
  110. package/src/__tests__/views/onboarding-block.render.test.tsx +193 -0
  111. package/src/__tests__/views/pages-list-view.test.tsx +93 -1
  112. package/src/components/script-tags/ScriptTagEditorPane.tsx +474 -0
  113. package/src/components/ui/InspectorPane.tsx +129 -0
  114. package/src/components/ui/RowActions.tsx +50 -0
  115. package/src/components/ui/index.ts +12 -0
  116. package/src/layout/Header.tsx +2 -2
  117. package/src/layout/Layout.tsx +8 -80
  118. package/src/lib/page-editor-service.ts +16 -2
  119. package/src/lib/pages-service.ts +18 -0
  120. package/src/lib/pages-tree.ts +145 -0
  121. package/src/lib/posts-service.ts +26 -0
  122. package/src/lib/seo-service.ts +3 -0
  123. package/src/views/Dashboard.tsx +286 -214
  124. package/src/views/MediaBrowser.tsx +673 -512
  125. package/src/views/MediaSeoAudit.tsx +320 -0
  126. package/src/views/Pages/PagesListView.tsx +459 -185
  127. package/src/views/Pages/PagesTreeTable.tsx +339 -0
  128. package/src/views/Posts/PostsListView.tsx +135 -10
  129. package/src/views/ScriptTags.tsx +204 -129
  130. package/src/views/dashboard/OnboardingBlock.tsx +233 -0
  131. package/src/views/page-editor/PageSectionEditor.tsx +9 -2
  132. package/src/views/page-editor/PageSettingsModal.tsx +75 -2
  133. package/src/views/seo/TechnicalTab.tsx +15 -0
  134. package/dist/views/ScriptTagEditor.d.ts +0 -6
  135. package/dist/views/ScriptTagEditor.d.ts.map +0 -1
  136. package/dist/views/ScriptTagEditor.js +0 -111
  137. package/dist/views/ScriptTagEditor.js.map +0 -1
  138. package/src/views/ScriptTagEditor.tsx +0 -353
@@ -0,0 +1,160 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
4
+ import { Copy, Minus, Plus, Trash2, X } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { InspectorPaneBody, InspectorPaneFooter, InspectorPaneHeader, InspectorPaneSection, } from '../ui/InspectorPane.js';
7
+ import { Toggle } from '../ui/Toggle.js';
8
+ import { ConfirmDialog } from '../ui/ConfirmDialog.js';
9
+ import { cmsApi } from '../../lib/api.js';
10
+ export const PLACEMENT_LABELS = {
11
+ head: 'Head',
12
+ body_open: 'Body start',
13
+ body_close: 'Body end',
14
+ };
15
+ export const CONSENT_LABELS = {
16
+ none: 'No consent',
17
+ analytics: 'Analytics',
18
+ marketing: 'Marketing',
19
+ functional: 'Functional',
20
+ preferences: 'Preferences',
21
+ };
22
+ const PLACEMENT_OPTIONS = [
23
+ { value: 'head', label: 'Head', hint: '<head>' },
24
+ { value: 'body_open', label: 'Body start', hint: '<body>' },
25
+ { value: 'body_close', label: 'Body end', hint: '</body>' },
26
+ ];
27
+ const SCOPE_OPTIONS = [
28
+ { value: 'site', label: 'Entire site' },
29
+ { value: 'parents', label: 'Parent pages' },
30
+ { value: 'urls', label: 'Specific URLs' },
31
+ ];
32
+ const CONSENT_OPTIONS = ['none', 'analytics', 'marketing', 'functional', 'preferences'];
33
+ function OptionTile({ active, onClick, children, }) {
34
+ return (_jsx("button", { type: "button", "aria-pressed": active, onClick: onClick, className: `rounded-[7px] border px-2 py-2 text-[12px] font-medium transition-colors duration-[var(--motion-fast)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none ${active
35
+ ? 'border-[var(--acc)] bg-[var(--acc-l)] text-[var(--acc)]'
36
+ : 'border-[var(--bdr)] bg-[var(--card)] text-[var(--sub)] hover:border-[var(--acc-m)]'}`, children: children }));
37
+ }
38
+ function ToggleRow({ label, hint, checked, onCheckedChange, }) {
39
+ return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-1.5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-[12.5px] font-medium text-[var(--txt)]", children: label }), _jsx("div", { className: "text-[11px] text-[var(--muted)]", children: hint })] }), _jsx(Toggle, { checked: checked, onCheckedChange: onCheckedChange, "aria-label": label })] }));
40
+ }
41
+ export function ScriptTagEditorPane({ tag, onClose, onChanged }) {
42
+ const isNew = tag === null;
43
+ const [name, setName] = useState('');
44
+ const [code, setCode] = useState('');
45
+ const [placement, setPlacement] = useState('head');
46
+ const [scope, setScope] = useState('site');
47
+ const [targetPaths, setTargetPaths] = useState([]);
48
+ const [pathInput, setPathInput] = useState('');
49
+ const [priority, setPriority] = useState(100);
50
+ const [enabled, setEnabled] = useState(true);
51
+ const [loadAsync, setLoadAsync] = useState(false);
52
+ const [disableInPreview, setDisableInPreview] = useState(true);
53
+ const [consentCategory, setConsentCategory] = useState('none');
54
+ const [saving, setSaving] = useState(false);
55
+ const [confirmDelete, setConfirmDelete] = useState(false);
56
+ useEffect(() => {
57
+ setName(tag?.name ?? '');
58
+ setCode(tag?.code ?? '');
59
+ setPlacement(tag?.placement ?? 'head');
60
+ setScope(tag?.scope ?? 'site');
61
+ setTargetPaths(tag?.targetPaths ?? []);
62
+ setPathInput('');
63
+ setPriority(tag?.priority ?? 100);
64
+ setEnabled(tag?.enabled ?? true);
65
+ setLoadAsync(tag?.loadAsync ?? false);
66
+ setDisableInPreview(tag?.disableInPreview ?? true);
67
+ setConsentCategory(tag?.consentCategory ?? 'none');
68
+ }, [tag]);
69
+ const addPath = () => {
70
+ const trimmed = pathInput.trim();
71
+ if (!trimmed)
72
+ return;
73
+ const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
74
+ if (!targetPaths.includes(normalized))
75
+ setTargetPaths([...targetPaths, normalized]);
76
+ setPathInput('');
77
+ };
78
+ const buildPayload = () => ({
79
+ name: name.trim(),
80
+ code,
81
+ placement,
82
+ scope,
83
+ targetPaths: scope === 'site' ? [] : targetPaths,
84
+ priority,
85
+ enabled,
86
+ loadAsync,
87
+ disableInPreview,
88
+ consentCategory,
89
+ });
90
+ const validate = () => {
91
+ if (!name.trim()) {
92
+ toast.error('Name is required');
93
+ return false;
94
+ }
95
+ if (!code.trim()) {
96
+ toast.error('Code snippet is required');
97
+ return false;
98
+ }
99
+ if (scope !== 'site' && targetPaths.length === 0) {
100
+ toast.error('At least one target path is required for this scope');
101
+ return false;
102
+ }
103
+ return true;
104
+ };
105
+ const handleSave = async () => {
106
+ if (!validate())
107
+ return;
108
+ setSaving(true);
109
+ const res = isNew
110
+ ? await cmsApi('/script-tags', {
111
+ method: 'POST',
112
+ body: JSON.stringify(buildPayload()),
113
+ })
114
+ : await cmsApi(`/script-tags/${tag.id}`, {
115
+ method: 'PUT',
116
+ body: JSON.stringify(buildPayload()),
117
+ });
118
+ setSaving(false);
119
+ if (res.error) {
120
+ toast.error(res.error);
121
+ return;
122
+ }
123
+ toast.success(isNew ? 'Script created' : 'Script saved');
124
+ onChanged(res.data?.id ?? tag?.id);
125
+ };
126
+ const handleDuplicate = async () => {
127
+ if (!tag)
128
+ return;
129
+ const res = await cmsApi('/script-tags', {
130
+ method: 'POST',
131
+ body: JSON.stringify({ ...buildPayload(), name: `${name.trim()} (Copy)`, enabled: false }),
132
+ });
133
+ if (res.error) {
134
+ toast.error(res.error);
135
+ return;
136
+ }
137
+ toast.success('Script duplicated (created disabled)');
138
+ onChanged(res.data?.id);
139
+ };
140
+ const handleDelete = async () => {
141
+ if (!tag)
142
+ return;
143
+ const res = await cmsApi(`/script-tags/${tag.id}`, { method: 'DELETE' });
144
+ setConfirmDelete(false);
145
+ if (res.error) {
146
+ toast.error(res.error);
147
+ return;
148
+ }
149
+ toast.success('Script deleted');
150
+ onChanged();
151
+ onClose();
152
+ };
153
+ return (_jsxs(_Fragment, { children: [_jsxs(InspectorPaneHeader, { onClose: onClose, closeLabel: "Close script editor", children: [_jsxs("div", { className: "flex items-center gap-2.5", children: [_jsx("input", { type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Script name\u2026", "aria-label": "Script name", className: "min-w-0 flex-1 rounded-[7px] border border-transparent bg-transparent px-1.5 py-1 text-[14px] font-semibold text-[var(--txt)] transition-colors duration-[var(--motion-fast)] hover:border-[var(--bdr)] focus:border-[var(--acc)] focus:outline-none" }), _jsx(Toggle, { checked: enabled, onCheckedChange: setEnabled, variant: "enabled", "aria-label": enabled ? 'Deactivate script' : 'Activate script' })] }), _jsxs("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5 px-1.5", children: [_jsx("span", { className: "rounded-[5px] border border-[var(--bdr)] bg-[var(--bg)] px-1.5 py-0.5 text-[10.5px] text-[var(--sub)]", children: PLACEMENT_LABELS[placement] ?? placement }), _jsx("span", { className: "rounded-[5px] border border-[var(--bdr)] bg-[var(--bg)] px-1.5 py-0.5 text-[10.5px] text-[var(--sub)]", children: CONSENT_LABELS[consentCategory] ?? consentCategory })] })] }), _jsxs(InspectorPaneBody, { children: [_jsxs(InspectorPaneSection, { title: "Code", subtitle: "HTML / JS", children: [_jsx("textarea", { value: code, onChange: (e) => setCode(e.target.value), placeholder: "<!-- Paste your script here -->", rows: 8, spellCheck: false, "aria-label": "Script code", className: "w-full rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] px-2.5 py-2 font-mono text-[11.5px] text-[var(--txt)] focus:border-[var(--acc)] focus:outline-none" }), _jsx("p", { className: "mt-1 text-[11px] text-[var(--muted)]", children: "Fires on frontend only \u2014 never injected during CMS rendering." })] }), _jsxs(InspectorPaneSection, { title: "Injection Location", children: [_jsx("div", { className: "grid grid-cols-3 gap-1.5", role: "group", "aria-label": "Injection location", children: PLACEMENT_OPTIONS.map((opt) => (_jsxs(OptionTile, { active: placement === opt.value, onClick: () => setPlacement(opt.value), children: [_jsx("span", { className: "block", children: opt.label }), _jsx("span", { className: "block font-mono text-[10px] font-normal text-[var(--muted)]", children: opt.hint })] }, opt.value))) }), _jsxs("div", { className: "mt-3 flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-[12.5px] font-medium text-[var(--txt)]", children: "Load Priority" }), _jsx("div", { className: "text-[11px] text-[var(--muted)]", children: "Lower = fires first" })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { type: "button", "aria-label": "Decrease priority", onClick: () => setPriority((p) => Math.max(0, p - 1)), className: "flex h-[27px] w-[27px] items-center justify-center rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:border-[var(--acc-m)] hover:text-[var(--acc)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(Minus, { size: 13 }) }), _jsx("input", { type: "number", value: priority, min: 0, onChange: (e) => setPriority(Math.max(0, parseInt(e.target.value, 10) || 0)), "aria-label": "Load priority", className: "w-14 rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] px-1.5 py-1 text-center font-mono text-[12px] text-[var(--txt)] focus:border-[var(--acc)] focus:outline-none" }), _jsx("button", { type: "button", "aria-label": "Increase priority", onClick: () => setPriority((p) => p + 1), className: "flex h-[27px] w-[27px] items-center justify-center rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:border-[var(--acc-m)] hover:text-[var(--acc)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(Plus, { size: 13 }) })] })] })] }), _jsxs(InspectorPaneSection, { title: "Firing Conditions", children: [_jsx("div", { className: "grid grid-cols-3 gap-1.5", role: "group", "aria-label": "Scope", children: SCOPE_OPTIONS.map((opt) => (_jsx(OptionTile, { active: scope === opt.value, onClick: () => setScope(opt.value), children: opt.label }, opt.value))) }), scope !== 'site' && (_jsxs("div", { className: "mt-3", children: [_jsx("label", { htmlFor: "script-tag-path-input", className: "mb-1 block text-[11.5px] font-medium text-[var(--sub)]", children: scope === 'parents' ? 'Parent paths (includes child pages)' : 'URL paths' }), _jsxs("div", { className: "flex gap-1.5", children: [_jsx("input", { id: "script-tag-path-input", type: "text", value: pathInput, onChange: (e) => setPathInput(e.target.value), onKeyDown: (e) => {
154
+ if (e.key === 'Enter') {
155
+ e.preventDefault();
156
+ addPath();
157
+ }
158
+ }, placeholder: "/services", className: "min-w-0 flex-1 rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] px-2.5 py-1.5 font-mono text-[12px] text-[var(--txt)] focus:border-[var(--acc)] focus:outline-none" }), _jsx("button", { type: "button", onClick: addPath, "aria-label": "Add path", className: "flex h-[31px] w-[31px] shrink-0 items-center justify-center rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:border-[var(--acc-m)] hover:text-[var(--acc)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(Plus, { size: 14 }) })] }), targetPaths.length > 0 && (_jsx("div", { className: "mt-2 flex flex-wrap gap-1.5", children: targetPaths.map((p) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-[var(--r-pill)] border border-[var(--bdr)] bg-[var(--bg)] px-2 py-0.5 font-mono text-[11px] text-[var(--sub)]", children: [p, _jsx("button", { type: "button", onClick: () => setTargetPaths(targetPaths.filter((x) => x !== p)), "aria-label": `Remove ${p}`, className: "text-[var(--muted)] hover:text-[var(--err)]", children: _jsx(X, { size: 11 }) })] }, p))) }))] }))] }), _jsxs(InspectorPaneSection, { title: "Cookie Consent", subtitle: "GDPR / CCPA", children: [_jsx("div", { className: "mb-1.5 text-[12.5px] font-medium text-[var(--txt)]", children: "Consent category required" }), _jsx("div", { className: "grid grid-cols-3 gap-1.5", role: "group", "aria-label": "Consent category", children: CONSENT_OPTIONS.map((value) => (_jsx(OptionTile, { active: consentCategory === value, onClick: () => setConsentCategory(value), children: CONSENT_LABELS[value] }, value))) }), consentCategory !== 'none' && (_jsx("p", { className: "mt-2 text-[11px] text-[var(--muted)]", children: "The script is injected only after the visitor accepts cookies (Actuate Consent \u201CAccept all\u201D)." }))] }), _jsxs(InspectorPaneSection, { title: "Advanced", children: [_jsx(ToggleRow, { label: "Load async", hint: "Non-blocking \u2014 doesn't delay page render", checked: loadAsync, onCheckedChange: setLoadAsync }), _jsx(ToggleRow, { label: "Disable in preview mode", hint: "Skip firing inside CMS page preview", checked: disableInPreview, onCheckedChange: setDisableInPreview })] })] }), _jsxs(InspectorPaneFooter, { children: [_jsx("button", { type: "button", onClick: () => void handleSave(), disabled: saving, className: "w-full rounded-[7px] bg-[var(--acc)] px-3 py-2 text-[13px] font-semibold text-white transition-colors duration-[var(--motion-fast)] hover:opacity-90 focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", children: saving ? 'Saving…' : 'Save Script' }), !isNew && (_jsxs("div", { className: "mt-2 flex items-center justify-center gap-4", children: [_jsxs("button", { type: "button", onClick: () => void handleDuplicate(), className: "inline-flex items-center gap-1.5 text-[12px] text-[var(--sub)] transition-colors duration-[var(--motion-fast)] hover:text-[var(--acc)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: [_jsx(Copy, { size: 12 }), "Duplicate"] }), _jsxs("button", { type: "button", onClick: () => setConfirmDelete(true), className: "inline-flex items-center gap-1.5 text-[12px] text-[var(--sub)] transition-colors duration-[var(--motion-fast)] hover:text-[var(--err)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: [_jsx(Trash2, { size: 12 }), "Delete"] })] }))] }), _jsx(ConfirmDialog, { open: confirmDelete, title: "Delete script?", description: `"${name || 'This script'}" will stop firing on your site immediately.`, confirmLabel: "Delete", destructive: true, onConfirm: () => void handleDelete(), onClose: () => setConfirmDelete(false) })] }));
159
+ }
160
+ //# sourceMappingURL=ScriptTagEditorPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptTagEditorPane.js","sourceRoot":"","sources":["../../../src/components/script-tags/ScriptTagEditorPane.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Design-system inline split-pane pattern: a list that shrinks while a
4
+ * fixed-width editor/detail pane slides in beside it (Script Tags 420px,
5
+ * Entries 400px, Forms 390px, SEO Content 380px in the handoff).
6
+ *
7
+ * Compose as:
8
+ *
9
+ * <SplitPaneLayout>
10
+ * <SplitPaneList>…table…</SplitPaneList>
11
+ * <InspectorPane open={!!selected} width={420} aria-label="Edit script">
12
+ * <InspectorPaneHeader onClose={close}>…</InspectorPaneHeader>
13
+ * <InspectorPaneBody>…sections…</InspectorPaneBody>
14
+ * <InspectorPaneFooter>…save…</InspectorPaneFooter>
15
+ * </InspectorPane>
16
+ * </SplitPaneLayout>
17
+ */
18
+ export declare function SplitPaneLayout({ children, className, }: {
19
+ children: ReactNode;
20
+ className?: string;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function SplitPaneList({ children, className, }: {
23
+ children: ReactNode;
24
+ className?: string;
25
+ }): import("react/jsx-runtime").JSX.Element;
26
+ export interface InspectorPaneProps {
27
+ open: boolean;
28
+ /** Outer shell width in px when open (inner card fills it minus 12px gutters). */
29
+ width: number;
30
+ children: ReactNode;
31
+ 'aria-label': string;
32
+ }
33
+ export declare function InspectorPane({ open, width, children, 'aria-label': ariaLabel, }: InspectorPaneProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function InspectorPaneHeader({ children, onClose, closeLabel, }: {
35
+ children: ReactNode;
36
+ onClose: () => void;
37
+ closeLabel?: string;
38
+ }): import("react/jsx-runtime").JSX.Element;
39
+ export declare function InspectorPaneBody({ children }: {
40
+ children: ReactNode;
41
+ }): import("react/jsx-runtime").JSX.Element;
42
+ /** Bordered section with the design's uppercase 10.5px section title. */
43
+ export declare function InspectorPaneSection({ title, subtitle, children, }: {
44
+ title?: string;
45
+ subtitle?: string;
46
+ children: ReactNode;
47
+ }): import("react/jsx-runtime").JSX.Element;
48
+ export declare function InspectorPaneFooter({ children }: {
49
+ children: ReactNode;
50
+ }): import("react/jsx-runtime").JSX.Element;
51
+ //# sourceMappingURL=InspectorPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorPane.d.ts","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAEA;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAEA;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACxB,EAAE,kBAAkB,2CAiBpB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAA0B,GAC3B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,2CAcA;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAEtE;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;CACpB,2CAcA;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAExE"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { X } from 'lucide-react';
4
+ /**
5
+ * Design-system inline split-pane pattern: a list that shrinks while a
6
+ * fixed-width editor/detail pane slides in beside it (Script Tags 420px,
7
+ * Entries 400px, Forms 390px, SEO Content 380px in the handoff).
8
+ *
9
+ * Compose as:
10
+ *
11
+ * <SplitPaneLayout>
12
+ * <SplitPaneList>…table…</SplitPaneList>
13
+ * <InspectorPane open={!!selected} width={420} aria-label="Edit script">
14
+ * <InspectorPaneHeader onClose={close}>…</InspectorPaneHeader>
15
+ * <InspectorPaneBody>…sections…</InspectorPaneBody>
16
+ * <InspectorPaneFooter>…save…</InspectorPaneFooter>
17
+ * </InspectorPane>
18
+ * </SplitPaneLayout>
19
+ */
20
+ export function SplitPaneLayout({ children, className, }) {
21
+ return _jsx("div", { className: `flex min-h-0 flex-1 overflow-hidden ${className ?? ''}`, children: children });
22
+ }
23
+ export function SplitPaneList({ children, className, }) {
24
+ return _jsx("div", { className: `min-w-0 flex-1 overflow-y-auto ${className ?? ''}`, children: children });
25
+ }
26
+ export function InspectorPane({ open, width, children, 'aria-label': ariaLabel, }) {
27
+ return (_jsx("div", { className: "shrink-0 overflow-hidden bg-[var(--bg)] motion-safe:transition-[width] motion-safe:duration-200", style: { width: open ? width : 0 }, "aria-hidden": !open, children: _jsx("div", { role: "region", "aria-label": ariaLabel, className: "my-3 mr-3 ml-4 flex h-[calc(100%-24px)] flex-col overflow-hidden rounded-[var(--r)] border border-[var(--bdr)] bg-[var(--sb)] shadow-[var(--shd2)]", style: { width: width - 28 }, children: open ? children : null }) }));
28
+ }
29
+ export function InspectorPaneHeader({ children, onClose, closeLabel = 'Close panel', }) {
30
+ return (_jsxs("div", { className: "flex items-start gap-2 border-b border-[var(--bdr)] px-4 py-3.5", children: [_jsx("div", { className: "min-w-0 flex-1", children: children }), _jsx("button", { type: "button", onClick: onClose, "aria-label": closeLabel, className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[6px] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--bg)] hover:text-[var(--txt)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(X, { size: 16 }) })] }));
31
+ }
32
+ export function InspectorPaneBody({ children }) {
33
+ return _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: children });
34
+ }
35
+ /** Bordered section with the design's uppercase 10.5px section title. */
36
+ export function InspectorPaneSection({ title, subtitle, children, }) {
37
+ return (_jsxs("div", { className: "border-b border-[var(--bdr)] px-4 py-3.5 last:border-b-0", children: [title && (_jsxs("div", { className: "mb-2.5 flex items-baseline gap-2", children: [_jsx("span", { className: "text-[10.5px] font-semibold tracking-[0.6px] text-[var(--muted)] uppercase", children: title }), subtitle && _jsx("span", { className: "text-[11px] text-[var(--muted)]", children: subtitle })] })), children] }));
38
+ }
39
+ export function InspectorPaneFooter({ children }) {
40
+ return _jsx("div", { className: "border-t border-[var(--bdr)] px-4 py-3.5", children: children });
41
+ }
42
+ //# sourceMappingURL=InspectorPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorPane.js","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,uCAAuC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,kCAAkC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AAC9F,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACJ;IACnB,OAAO,CACL,cACE,SAAS,EAAC,iGAAiG,EAC3G,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,iBACrB,CAAC,IAAI,YAElB,cACE,IAAI,EAAC,QAAQ,gBACD,SAAS,EACrB,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,YAE3B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACnB,GACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,aAAa,GAK3B;IACC,OAAO,CACL,eAAK,SAAS,EAAC,iEAAiE,aAC9E,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAChD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,UAAU,EACtB,SAAS,EAAC,mQAAmQ,YAE7Q,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAA2B;IACrE,OAAO,cAAK,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAO,CAAA;AACzE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GAKT;IACC,OAAO,CACL,eAAK,SAAS,EAAC,0DAA0D,aACtE,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,4EAA4E,YACzF,KAAK,GACD,EACN,QAAQ,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAQ,IAC5E,CACP,EACA,QAAQ,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACvE,OAAO,cAAK,SAAS,EAAC,0CAA0C,YAAE,QAAQ,GAAO,CAAA;AACnF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ /**
3
+ * Design-system table row actions (`.row-actions` / `.ra-icon-btn`): a
4
+ * right-aligned cluster of 27px bordered icon buttons that fades in on row
5
+ * hover (the row must have the `group` class) and on keyboard focus.
6
+ */
7
+ export declare function RowActions({ children, className }: {
8
+ children: ReactNode;
9
+ className?: string;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export interface RowActionButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
12
+ /** Accessible label — required, these are icon-only buttons. */
13
+ 'aria-label': string;
14
+ /** Red hover treatment for destructive actions. */
15
+ danger?: boolean;
16
+ children: ReactNode;
17
+ }
18
+ export declare function RowActionButton({ danger, className, children, ...rest }: RowActionButtonProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=RowActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowActions.d.ts","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAQ9F;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,CACP;IACC,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,oBAAoB,2CActB"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Design-system table row actions (`.row-actions` / `.ra-icon-btn`): a
5
+ * right-aligned cluster of 27px bordered icon buttons that fades in on row
6
+ * hover (the row must have the `group` class) and on keyboard focus.
7
+ */
8
+ export function RowActions({ children, className }) {
9
+ return (_jsx("div", { className: `flex items-center justify-end gap-1 opacity-0 transition-opacity duration-[var(--motion-fast)] group-hover:opacity-100 focus-within:opacity-100 ${className ?? ''}`, children: children }));
10
+ }
11
+ export function RowActionButton({ danger = false, className, children, ...rest }) {
12
+ return (_jsx("button", { type: "button", className: `flex h-[27px] w-[27px] items-center justify-center rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 ${danger
13
+ ? 'hover:border-[var(--err)] hover:bg-[var(--err-l)] hover:text-[var(--err)]'
14
+ : 'hover:border-[var(--acc-m)] hover:bg-[var(--acc-l)] hover:text-[var(--acc)]'} ${className ?? ''}`, ...rest, children: children }));
15
+ }
16
+ //# sourceMappingURL=RowActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowActions.js","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC7F,OAAO,CACL,cACE,SAAS,EAAE,mJAAmJ,SAAS,IAAI,EAAE,EAAE,YAE9K,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAaD,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAAG,KAAK,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACc;IACrB,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,qTACT,MAAM;YACJ,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,6EACN,IAAI,SAAS,IAAI,EAAE,EAAE,KACjB,IAAI,YAEP,QAAQ,GACF,CACV,CAAA;AACH,CAAC"}
@@ -34,6 +34,10 @@ export { FilterPill } from './FilterPill.js';
34
34
  export type { FilterPillProps } from './FilterPill.js';
35
35
  export { StatPill } from './StatPill.js';
36
36
  export type { StatPillProps } from './StatPill.js';
37
+ export { RowActions, RowActionButton } from './RowActions.js';
38
+ export type { RowActionButtonProps } from './RowActions.js';
39
+ export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
40
+ export type { InspectorPaneProps } from './InspectorPane.js';
37
41
  export { formControlBase, formControlState } from './form-control.js';
38
42
  export { CommandPalette } from './CommandPalette.js';
39
43
  export type { CommandPaletteProps } from './CommandPalette.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACnE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export { Toggle, toggleTrackVariants, toggleThumbVariants } from './Toggle.js';
16
16
  export { StatusBadge, statusBadgeVariants } from './StatusBadge.js';
17
17
  export { FilterPill } from './FilterPill.js';
18
18
  export { StatPill } from './StatPill.js';
19
+ export { RowActions, RowActionButton } from './RowActions.js';
20
+ export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
19
21
  export { formControlBase, formControlState } from './form-control.js';
20
22
  export { CommandPalette } from './CommandPalette.js';
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -24,6 +24,6 @@ export function Header({ onToggleSidebar, session, onNavigate, onLogout, pageAct
24
24
  e.target.blur();
25
25
  }, className: inputVariants({
26
26
  class: 'h-9 w-full max-w-md py-1.5 pr-14 pl-9 focus-visible:ring-0 focus-visible:ring-offset-0',
27
- }) }), _jsx("span", { className: "border-border bg-background text-muted-foreground pointer-events-none absolute top-1/2 right-2 hidden -translate-y-1/2 rounded border px-1.5 py-0.5 font-mono text-[10px] sm:inline-flex", "aria-hidden": true, children: "\u2318K" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Search", children: _jsx(Search, { className: "text-muted-foreground h-5 w-5" }) }), _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [_jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "hover:bg-accent rounded-lg p-2 transition-colors", "aria-label": resolvedTheme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode', children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "text-muted-foreground h-5 w-5" })) : (_jsx(Moon, { className: "text-muted-foreground h-5 w-5" })) }), _jsx(NotificationBell, {}), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "hover:bg-accent flex items-center gap-1.5 rounded-lg p-1 transition-colors", "aria-label": "Account menu", children: [_jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-linear-to-br from-blue-500 to-purple-600", children: _jsx("span", { className: "text-sm font-medium text-white", children: initial }) }), _jsx(ChevronDown, { className: "text-muted-foreground hidden h-4 w-4 sm:block", "aria-hidden": true })] }) }), _jsx(DropdownMenu.Portal, { container: adminPortalContainer(), children: _jsxs(DropdownMenu.Content, { className: "bg-popover text-popover-foreground border-border z-50 min-w-[200px] rounded-lg border p-1 shadow-lg", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "border-border border-b px-3 py-2", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-muted-foreground text-xs", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/profile'), children: [_jsx(User, { className: "h-4 w-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "bg-border my-1 h-px" }), _jsx(DropdownMenu.Item, { className: "text-destructive hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onLogout?.(), children: "Logout" })] }) })] }), pageActions && (_jsx("div", { className: "border-border ml-2 hidden items-center gap-2 border-l pl-3 md:flex", children: pageActions }))] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
27
+ }) }), _jsx("span", { className: "border-border bg-background text-muted-foreground pointer-events-none absolute top-1/2 right-2 hidden -translate-y-1/2 rounded border px-1.5 py-0.5 font-mono text-[10px] sm:inline-flex", "aria-hidden": true, children: "\u2318K" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "hover:bg-accent rounded-lg p-2 transition-colors md:hidden", "aria-label": "Search", children: _jsx(Search, { className: "text-muted-foreground h-5 w-5" }) }), _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [_jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "hover:bg-accent rounded-lg p-2 transition-colors", "aria-label": resolvedTheme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode', children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "text-muted-foreground h-5 w-5" })) : (_jsx(Moon, { className: "text-muted-foreground h-5 w-5" })) }), _jsx(NotificationBell, {}), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "hover:bg-accent flex items-center gap-1.5 rounded-lg p-1 transition-colors", "aria-label": "Account menu", children: [_jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-[var(--acc)]", children: _jsx("span", { className: "text-xs font-semibold text-white", children: initial }) }), _jsx(ChevronDown, { className: "text-muted-foreground hidden h-4 w-4 sm:block", "aria-hidden": true })] }) }), _jsx(DropdownMenu.Portal, { container: adminPortalContainer(), children: _jsxs(DropdownMenu.Content, { className: "bg-popover text-popover-foreground border-border z-50 min-w-[200px] rounded-lg border p-1 shadow-lg", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "border-border border-b px-3 py-2", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-muted-foreground text-xs", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/profile'), children: [_jsx(User, { className: "h-4 w-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "bg-border my-1 h-px" }), _jsx(DropdownMenu.Item, { className: "text-destructive hover:bg-accent flex cursor-pointer items-center gap-2 rounded px-3 py-2 text-sm outline-none", onSelect: () => onLogout?.(), children: "Logout" })] }) })] }), pageActions && (_jsx("div", { className: "border-border ml-2 hidden items-center gap-2 border-l pl-3 md:flex", children: pageActions }))] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
28
28
  }
29
29
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useMemo, useState, useEffect } from 'react';
4
- import { ExternalLink, Plus } from 'lucide-react';
4
+ import { Plus } from 'lucide-react';
5
5
  import { Sidebar } from './Sidebar.js';
6
6
  import { Header } from './Header.js';
7
7
  import { Breadcrumbs } from '../components/Breadcrumbs.js';
@@ -41,38 +41,22 @@ export function Layout({ config, session, currentPath, onNavigate, onLogout, chi
41
41
  * primary/secondary pair that mirrors the reference dashboard.
42
42
  *
43
43
  * Resolution rules:
44
- * - Dashboard / home"+ New Post" + "View Site"
45
- * - List views just "+ New <Type>"
44
+ * - Dashboard / Posts / Pages nothing here; those views render their
45
+ * hero CTAs inside the page header per the design
46
+ * - Other list views → just "+ New <Type>"
46
47
  * - Editor views → no top-bar action (editor renders its own toolbar)
47
48
  */
48
49
  function computePageActions({ currentPath, config, onNavigate, }) {
49
50
  const collections = collectionList(config);
50
- const postCollections = collections.filter((c) => c.type === 'post');
51
- const newPostPath = resolveNewPostPath(postCollections);
52
- const siteUrl = config?.site?.url ?? config?.seo?.siteUrl ?? null;
51
+ // Dashboard, /posts, and /pages render their own hero CTAs in the page
52
+ // header (design `.page-hdr` → `.hdr-r`), so the top bar stays empty there.
53
53
  const isDashboard = currentPath === '/' || currentPath === '/dashboard';
54
- // Dashboard: keep the existing "+ New Post" / "View Site" pair. With
55
- // a single Post Type we route straight to its editor; with several we
56
- // route to the picker so the user can choose the type first.
57
- if (isDashboard) {
58
- return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => onNavigate(newPostPath), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post"] }), siteUrl ? (_jsxs("a", { href: siteUrl, target: "_blank", rel: "noopener noreferrer", className: "border-border bg-background text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(ExternalLink, { className: "h-3.5 w-3.5", "aria-hidden": true }), "View Site"] })) : null] }));
59
- }
60
- // Posts area — "+ New Post" + "Manage types" on the list page;
61
- // "+ New Post Type" on the types page. The buttons live in the top
62
- // bar so the page header stays clean. See the dashboard rule for
63
- // why these come from a single config-aware helper.
64
- if (currentPath === '/posts') {
65
- return (_jsxs("button", { type: "button", onClick: () => onNavigate(newPostPath), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post"] }));
54
+ if (isDashboard || currentPath === '/posts' || currentPath === '/pages') {
55
+ return null;
66
56
  }
67
57
  if (currentPath === '/posts/types') {
68
58
  return (_jsxs("button", { type: "button", onClick: () => onNavigate('/posts/types/new'), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New Post Type"] }));
69
59
  }
70
- // Pages list — "+ New page" routes to the page creation flow. Handled
71
- // explicitly (not via the collection loop) so the label/route stay
72
- // exact even though `pages` is a reserved route.
73
- if (currentPath === '/pages') {
74
- return (_jsxs("button", { type: "button", onClick: () => onNavigate('/pages/new'), className: "bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors focus:outline-none focus-visible:ring-2", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New page"] }));
75
- }
76
60
  // List views — surface "+ New X" so authors can keep creating without
77
61
  // hunting for a per-list button. Skip on editor views; those have their
78
62
  // own toolbar.
@@ -83,20 +67,6 @@ function computePageActions({ currentPath, config, onNavigate, }) {
83
67
  }
84
68
  return null;
85
69
  }
86
- /**
87
- * Where "+ New Post" should land, given the configured post-type
88
- * collections:
89
- * - exactly one → straight to that type's editor (`/<slug>/new`)
90
- * - more than one → the type picker (`/posts/new`)
91
- * - none → the Post Type setup instructions
92
- */
93
- function resolveNewPostPath(postCollections) {
94
- if (postCollections.length === 1)
95
- return `/${postCollections[0].slug}/new`;
96
- if (postCollections.length > 1)
97
- return '/posts/new';
98
- return '/posts/types/new';
99
- }
100
70
  function collectionList(config) {
101
71
  if (!config?.collections)
102
72
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAWhC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,MAAM,EACN,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,GACI;IACZ,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAC7D,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAClC,CAAA;IAED,OAAO,CACL,8BACE,KAAC,OAAO,IAAC,QAAQ,EAAC,cAAc,GAAG,EACnC,KAAC,UAAU,IACT,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACvD,OAAO,EACL,KAAC,OAAO,IACN,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,EAC9D,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,EAEJ,MAAM,EACJ,KAAC,MAAM,IACL,eAAe,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAC/D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACxB,EAEJ,WAAW,EAAE,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAI,YAE9E,cAAK,SAAS,EAAC,QAAQ,YAAE,QAAQ,GAAO,GAC7B,IACZ,CACJ,CAAA;AACH,CAAC;AAUD;;;;;;;;;;;;;;;GAeG;AACH,SAAS,kBAAkB,CAAC,EAC1B,WAAW,EACX,MAAM,EACN,UAAU,GACS;IACnB,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAE1C,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,YAAY,CAAA;IACvE,IAAI,WAAW,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACxE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,WAAW,KAAK,cAAc,EAAE,CAAC;QACnC,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAC7C,SAAS,EAAC,kOAAkO,aAE5O,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,wBAAe,qBAErC,CACV,CAAA;IACH,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,eAAe;IACf,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,EAC3C,SAAS,EAAC,kOAAkO,aAE5O,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,wBAAe,UACvC,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,IAAI,IAC1B,CACV,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AASD,SAAS,cAAc,CAAC,MAAW;IACjC,IAAI,CAAC,MAAM,EAAE,WAAW;QAAE,OAAO,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAA;IAC9B,MAAM,IAAI,GAAU,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACjE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC"}
@@ -9,6 +9,12 @@ export interface EditorPage {
9
9
  slug: string;
10
10
  path: string;
11
11
  status: PageStatus;
12
+ /**
13
+ * Parent page for the tree hierarchy (`data.parentPageId`), or null for
14
+ * a top-level page. Preselected when arriving via "Add sub-page"
15
+ * (`/pages/new?parent=<id>`); editable in Page settings.
16
+ */
17
+ parentPageId: string | null;
12
18
  sections: PageSection[];
13
19
  seoTitle: string;
14
20
  seoDescription: string;
@@ -48,6 +54,9 @@ export declare function createPage(page: EditorPage): Promise<EditorPage>;
48
54
  export declare function savePageDraft(page: EditorPage): Promise<EditorPage>;
49
55
  /** Publish: persist the latest content and flip status to PUBLISHED. */
50
56
  export declare function publishPage(page: EditorPage): Promise<EditorPage>;
51
- /** A blank page scaffold for `/pages/new`. */
52
- export declare function emptyPage(): EditorPage;
57
+ /**
58
+ * A blank page scaffold for `/pages/new`. `parentPageId` is preset when
59
+ * the flow was entered via "Add sub-page" in the Pages tree view.
60
+ */
61
+ export declare function emptyPage(parentPageId?: string | null): EditorPage;
53
62
  //# sourceMappingURL=page-editor-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-editor-service.d.ts","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,KAAK,WAAW,EACjB,MAAM,uCAAuC,CAAA;AAK9C,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAIxE,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAEzE,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,gBAAgB,CAoCnF;AAoBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AA6CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI5E;AAgCD,wDAAwD;AACxD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtE;AAED,iDAAiD;AACjD,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzE;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUvE;AAED,8CAA8C;AAC9C,wBAAgB,SAAS,IAAI,UAAU,CActC"}
1
+ {"version":3,"file":"page-editor-service.d.ts","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,KAAK,WAAW,EACjB,MAAM,uCAAuC,CAAA;AAK9C,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAIxE,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAEzE,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,gBAAgB,CAoCnF;AAoBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AA+CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI5E;AAkCD,wDAAwD;AACxD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtE;AAED,iDAAiD;AACjD,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzE;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUvE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,UAAU,CAexE"}