@actuate-media/cms-admin 0.66.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.
- package/CHANGELOG.md +21 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +7 -4
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/inspector-pane.test.d.ts +2 -0
- package/dist/__tests__/components/inspector-pane.test.d.ts.map +1 -0
- package/dist/__tests__/components/inspector-pane.test.js +31 -0
- package/dist/__tests__/components/inspector-pane.test.js.map +1 -0
- package/dist/__tests__/lib/pages-tree.test.d.ts +2 -0
- package/dist/__tests__/lib/pages-tree.test.d.ts.map +1 -0
- package/dist/__tests__/lib/pages-tree.test.js +173 -0
- package/dist/__tests__/lib/pages-tree.test.js.map +1 -0
- package/dist/__tests__/views/dashboard.test.js +7 -3
- package/dist/__tests__/views/dashboard.test.js.map +1 -1
- package/dist/__tests__/views/media-seo-audit.render.test.d.ts +2 -0
- package/dist/__tests__/views/media-seo-audit.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/media-seo-audit.render.test.js +102 -0
- package/dist/__tests__/views/media-seo-audit.render.test.js.map +1 -0
- package/dist/__tests__/views/onboarding-block.render.test.d.ts +2 -0
- package/dist/__tests__/views/onboarding-block.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/onboarding-block.render.test.js +146 -0
- package/dist/__tests__/views/onboarding-block.render.test.js.map +1 -0
- package/dist/__tests__/views/pages-list-view.test.js +77 -1
- package/dist/__tests__/views/pages-list-view.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/script-tags/ScriptTagEditorPane.d.ts +26 -0
- package/dist/components/script-tags/ScriptTagEditorPane.d.ts.map +1 -0
- package/dist/components/script-tags/ScriptTagEditorPane.js +160 -0
- package/dist/components/script-tags/ScriptTagEditorPane.js.map +1 -0
- package/dist/components/ui/InspectorPane.d.ts +51 -0
- package/dist/components/ui/InspectorPane.d.ts.map +1 -0
- package/dist/components/ui/InspectorPane.js +42 -0
- package/dist/components/ui/InspectorPane.js.map +1 -0
- package/dist/components/ui/index.d.ts +2 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +1 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/lib/page-editor-service.d.ts +11 -2
- package/dist/lib/page-editor-service.d.ts.map +1 -1
- package/dist/lib/page-editor-service.js +8 -2
- package/dist/lib/page-editor-service.js.map +1 -1
- package/dist/lib/pages-tree.d.ts +44 -0
- package/dist/lib/pages-tree.d.ts.map +1 -0
- package/dist/lib/pages-tree.js +106 -0
- package/dist/lib/pages-tree.js.map +1 -0
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +31 -2
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +28 -2
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/MediaSeoAudit.d.ts +25 -0
- package/dist/views/MediaSeoAudit.d.ts.map +1 -0
- package/dist/views/MediaSeoAudit.js +97 -0
- package/dist/views/MediaSeoAudit.js.map +1 -0
- package/dist/views/Pages/PagesListView.d.ts.map +1 -1
- package/dist/views/Pages/PagesListView.js +90 -10
- package/dist/views/Pages/PagesListView.js.map +1 -1
- package/dist/views/Pages/PagesTreeTable.d.ts +35 -0
- package/dist/views/Pages/PagesTreeTable.d.ts.map +1 -0
- package/dist/views/Pages/PagesTreeTable.js +28 -0
- package/dist/views/Pages/PagesTreeTable.js.map +1 -0
- package/dist/views/ScriptTags.d.ts +5 -1
- package/dist/views/ScriptTags.d.ts.map +1 -1
- package/dist/views/ScriptTags.js +32 -7
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/dashboard/OnboardingBlock.d.ts +29 -0
- package/dist/views/dashboard/OnboardingBlock.d.ts.map +1 -0
- package/dist/views/dashboard/OnboardingBlock.js +71 -0
- package/dist/views/dashboard/OnboardingBlock.js.map +1 -0
- package/dist/views/page-editor/PageSectionEditor.d.ts +7 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +3 -3
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.d.ts +1 -1
- package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.js +42 -3
- package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
- package/package.json +2 -2
- package/src/AdminRoot.tsx +7 -3
- package/src/__tests__/components/inspector-pane.test.tsx +64 -0
- package/src/__tests__/lib/pages-tree.test.ts +197 -0
- package/src/__tests__/views/dashboard.test.tsx +7 -3
- package/src/__tests__/views/media-seo-audit.render.test.tsx +117 -0
- package/src/__tests__/views/onboarding-block.render.test.tsx +193 -0
- package/src/__tests__/views/pages-list-view.test.tsx +93 -1
- package/src/components/script-tags/ScriptTagEditorPane.tsx +474 -0
- package/src/components/ui/InspectorPane.tsx +129 -0
- package/src/components/ui/index.ts +10 -0
- package/src/lib/page-editor-service.ts +16 -2
- package/src/lib/pages-tree.ts +145 -0
- package/src/views/Dashboard.tsx +238 -196
- package/src/views/MediaBrowser.tsx +641 -511
- package/src/views/MediaSeoAudit.tsx +320 -0
- package/src/views/Pages/PagesListView.tsx +352 -183
- package/src/views/Pages/PagesTreeTable.tsx +339 -0
- package/src/views/ScriptTags.tsx +204 -129
- package/src/views/dashboard/OnboardingBlock.tsx +233 -0
- package/src/views/page-editor/PageSectionEditor.tsx +9 -2
- package/src/views/page-editor/PageSettingsModal.tsx +75 -2
- package/dist/views/ScriptTagEditor.d.ts +0 -6
- package/dist/views/ScriptTagEditor.d.ts.map +0 -1
- package/dist/views/ScriptTagEditor.js +0 -111
- package/dist/views/ScriptTagEditor.js.map +0 -1
- 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"}
|
|
@@ -36,6 +36,8 @@ export { StatPill } from './StatPill.js';
|
|
|
36
36
|
export type { StatPillProps } from './StatPill.js';
|
|
37
37
|
export { RowActions, RowActionButton } from './RowActions.js';
|
|
38
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';
|
|
39
41
|
export { formControlBase, formControlState } from './form-control.js';
|
|
40
42
|
export { CommandPalette } from './CommandPalette.js';
|
|
41
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,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,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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"}
|
|
@@ -17,6 +17,7 @@ export { StatusBadge, statusBadgeVariants } from './StatusBadge.js';
|
|
|
17
17
|
export { FilterPill } from './FilterPill.js';
|
|
18
18
|
export { StatPill } from './StatPill.js';
|
|
19
19
|
export { RowActions, RowActionButton } from './RowActions.js';
|
|
20
|
+
export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
|
|
20
21
|
export { formControlBase, formControlState } from './form-control.js';
|
|
21
22
|
export { CommandPalette } from './CommandPalette.js';
|
|
22
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,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE7D,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"}
|
|
@@ -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
|
-
/**
|
|
52
|
-
|
|
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;
|
|
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"}
|
|
@@ -108,6 +108,7 @@ function rowToEditorPage(doc) {
|
|
|
108
108
|
slug,
|
|
109
109
|
path: typeof data.path === 'string' && data.path ? data.path : slug ? `/${slug}` : '/',
|
|
110
110
|
status: doc.status ?? 'DRAFT',
|
|
111
|
+
parentPageId: typeof data.parentPageId === 'string' && data.parentPageId ? data.parentPageId : null,
|
|
111
112
|
// Preserve unknown (externally-managed) sections so the editor can show
|
|
112
113
|
// them read-only and round-trip them on save instead of dropping them.
|
|
113
114
|
sections: coerceSectionsCore(data.sections, { onUnknown: 'preserve' }),
|
|
@@ -135,6 +136,7 @@ function toWriteBody(page, extra) {
|
|
|
135
136
|
title: page.title,
|
|
136
137
|
slug: page.slug,
|
|
137
138
|
path: page.path,
|
|
139
|
+
parentPageId: page.parentPageId,
|
|
138
140
|
// Unmanaged sections are part of `page.sections`, so they round-trip on
|
|
139
141
|
// every save (no data loss). Strip the derived `unmanaged` marker — it is
|
|
140
142
|
// recomputed from the registry on read, so persisting it would only stale.
|
|
@@ -180,14 +182,18 @@ export async function publishPage(page) {
|
|
|
180
182
|
throw new Error(res.error ?? 'Failed to publish page');
|
|
181
183
|
return rowToEditorPage(res.data);
|
|
182
184
|
}
|
|
183
|
-
/**
|
|
184
|
-
|
|
185
|
+
/**
|
|
186
|
+
* A blank page scaffold for `/pages/new`. `parentPageId` is preset when
|
|
187
|
+
* the flow was entered via "Add sub-page" in the Pages tree view.
|
|
188
|
+
*/
|
|
189
|
+
export function emptyPage(parentPageId = null) {
|
|
185
190
|
return {
|
|
186
191
|
id: null,
|
|
187
192
|
title: '',
|
|
188
193
|
slug: '',
|
|
189
194
|
path: '',
|
|
190
195
|
status: 'DRAFT',
|
|
196
|
+
parentPageId,
|
|
191
197
|
sections: [],
|
|
192
198
|
seoTitle: '',
|
|
193
199
|
seoDescription: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-editor-service.js","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,IAAI,kBAAkB,EACpC,sBAAsB,GAEvB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAIhE,gEAAgE;AAChE,4EAA4E;AAC5E,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,CAAA;AAID,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"page-editor-service.js","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page hierarchy resolution for the Pages tree view.
|
|
3
|
+
*
|
|
4
|
+
* Parent resolution strategy (in priority order):
|
|
5
|
+
* 1. `parentPageId` — explicit link, used when it points at a page that
|
|
6
|
+
* exists in the set (and isn't the page itself).
|
|
7
|
+
* 2. Path-prefix derivation — for rows without a usable `parentPageId`,
|
|
8
|
+
* the longest existing path prefix wins: "/about/team" becomes a child
|
|
9
|
+
* of the page whose path is "/about". Missing intermediate levels are
|
|
10
|
+
* skipped ("/a/b/c" with no "/a/b" attaches to "/a"). The root path
|
|
11
|
+
* "/" is never treated as a prefix parent, so top-level pages stay
|
|
12
|
+
* siblings of the homepage.
|
|
13
|
+
*
|
|
14
|
+
* Safety guarantees:
|
|
15
|
+
* - Orphans (parent id not in the set) become roots.
|
|
16
|
+
* - Cycles (a → b → a) are broken deterministically: walking up from each
|
|
17
|
+
* page in input order, the edge that closes a cycle is severed and that
|
|
18
|
+
* page becomes a root. Every page appears in the tree exactly once.
|
|
19
|
+
* - Sibling ordering is stable: title (locale-aware), then path.
|
|
20
|
+
*
|
|
21
|
+
* Pure functions — no network, no React — so the view and the unit tests
|
|
22
|
+
* share one implementation.
|
|
23
|
+
*/
|
|
24
|
+
import type { Page } from './pages-service.js';
|
|
25
|
+
export interface PageTreeNode {
|
|
26
|
+
page: Page;
|
|
27
|
+
children: PageTreeNode[];
|
|
28
|
+
}
|
|
29
|
+
/** One visible row of the flattened tree table. */
|
|
30
|
+
export interface PageTreeRow {
|
|
31
|
+
page: Page;
|
|
32
|
+
depth: number;
|
|
33
|
+
hasChildren: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Build the parent/child hierarchy for the tree view. Returns root nodes. */
|
|
36
|
+
export declare function buildPageTree(pages: Page[]): PageTreeNode[];
|
|
37
|
+
/**
|
|
38
|
+
* Flatten the tree into visible rows: children render only when their
|
|
39
|
+
* parent's id is in `expanded`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function flattenPageTree(nodes: PageTreeNode[], expanded: Set<string>): PageTreeRow[];
|
|
42
|
+
/** Default expand state: every root node that has children starts open. */
|
|
43
|
+
export declare function defaultExpandedIds(roots: PageTreeNode[]): Set<string>;
|
|
44
|
+
//# sourceMappingURL=pages-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages-tree.d.ts","sourceRoot":"","sources":["../../src/lib/pages-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB;AAgCD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAsD3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAW3F;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAErE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
function normalizePath(path) {
|
|
2
|
+
let p = path.trim();
|
|
3
|
+
if (!p.startsWith('/'))
|
|
4
|
+
p = `/${p}`;
|
|
5
|
+
p = p.replace(/\/{2,}/g, '/');
|
|
6
|
+
if (p.length > 1)
|
|
7
|
+
p = p.replace(/\/+$/, '');
|
|
8
|
+
return p;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Longest existing path-prefix parent, or null. Only prefixes with at
|
|
12
|
+
* least one segment count — "/" (the homepage) is never a derived parent.
|
|
13
|
+
*/
|
|
14
|
+
function derivePathParent(page, idByPath) {
|
|
15
|
+
const segments = normalizePath(page.path).split('/').filter(Boolean);
|
|
16
|
+
for (let i = segments.length - 1; i >= 1; i--) {
|
|
17
|
+
const prefix = `/${segments.slice(0, i).join('/')}`;
|
|
18
|
+
const candidate = idByPath.get(prefix);
|
|
19
|
+
if (candidate !== undefined && candidate !== page.id)
|
|
20
|
+
return candidate;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function compareSiblings(a, b) {
|
|
25
|
+
return (a.page.title.localeCompare(b.page.title) ||
|
|
26
|
+
a.page.path.localeCompare(b.page.path) ||
|
|
27
|
+
a.page.id.localeCompare(b.page.id));
|
|
28
|
+
}
|
|
29
|
+
/** Build the parent/child hierarchy for the tree view. Returns root nodes. */
|
|
30
|
+
export function buildPageTree(pages) {
|
|
31
|
+
const byId = new Map();
|
|
32
|
+
for (const p of pages)
|
|
33
|
+
byId.set(p.id, p);
|
|
34
|
+
// First occurrence wins on duplicate paths, keeping resolution stable
|
|
35
|
+
// with respect to input order.
|
|
36
|
+
const idByPath = new Map();
|
|
37
|
+
for (const p of pages) {
|
|
38
|
+
const norm = normalizePath(p.path);
|
|
39
|
+
if (!idByPath.has(norm))
|
|
40
|
+
idByPath.set(norm, p.id);
|
|
41
|
+
}
|
|
42
|
+
const parentOf = new Map();
|
|
43
|
+
for (const p of pages) {
|
|
44
|
+
const explicit = p.parentPageId && p.parentPageId !== p.id && byId.has(p.parentPageId) ? p.parentPageId : null;
|
|
45
|
+
parentOf.set(p.id, explicit ?? derivePathParent(p, idByPath));
|
|
46
|
+
}
|
|
47
|
+
// Cycle guard: walk each page's ancestor chain; the edge that revisits a
|
|
48
|
+
// seen node is severed, rooting that page. Deterministic in input order.
|
|
49
|
+
for (const p of pages) {
|
|
50
|
+
const seen = new Set([p.id]);
|
|
51
|
+
let cur = p.id;
|
|
52
|
+
for (;;) {
|
|
53
|
+
const parent = parentOf.get(cur) ?? null;
|
|
54
|
+
if (parent === null)
|
|
55
|
+
break;
|
|
56
|
+
if (seen.has(parent)) {
|
|
57
|
+
parentOf.set(cur, null);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
seen.add(parent);
|
|
61
|
+
cur = parent;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const nodeById = new Map();
|
|
65
|
+
for (const p of pages)
|
|
66
|
+
nodeById.set(p.id, { page: p, children: [] });
|
|
67
|
+
const roots = [];
|
|
68
|
+
for (const p of pages) {
|
|
69
|
+
const node = nodeById.get(p.id);
|
|
70
|
+
const parentId = parentOf.get(p.id) ?? null;
|
|
71
|
+
const parentNode = parentId !== null ? nodeById.get(parentId) : undefined;
|
|
72
|
+
if (parentNode)
|
|
73
|
+
parentNode.children.push(node);
|
|
74
|
+
else
|
|
75
|
+
roots.push(node);
|
|
76
|
+
}
|
|
77
|
+
const sortRecursive = (nodes) => {
|
|
78
|
+
nodes.sort(compareSiblings);
|
|
79
|
+
for (const n of nodes)
|
|
80
|
+
sortRecursive(n.children);
|
|
81
|
+
};
|
|
82
|
+
sortRecursive(roots);
|
|
83
|
+
return roots;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Flatten the tree into visible rows: children render only when their
|
|
87
|
+
* parent's id is in `expanded`.
|
|
88
|
+
*/
|
|
89
|
+
export function flattenPageTree(nodes, expanded) {
|
|
90
|
+
const rows = [];
|
|
91
|
+
const walk = (list, depth) => {
|
|
92
|
+
for (const node of list) {
|
|
93
|
+
const hasChildren = node.children.length > 0;
|
|
94
|
+
rows.push({ page: node.page, depth, hasChildren });
|
|
95
|
+
if (hasChildren && expanded.has(node.page.id))
|
|
96
|
+
walk(node.children, depth + 1);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
walk(nodes, 0);
|
|
100
|
+
return rows;
|
|
101
|
+
}
|
|
102
|
+
/** Default expand state: every root node that has children starts open. */
|
|
103
|
+
export function defaultExpandedIds(roots) {
|
|
104
|
+
return new Set(roots.filter((n) => n.children.length > 0).map((n) => n.page.id));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=pages-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages-tree.js","sourceRoot":"","sources":["../../src/lib/pages-tree.ts"],"names":[],"mappings":"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"}
|