@prenta/admin 2.7.0 → 2.8.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 (163) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/design-system/tokens.css +17 -0
  3. package/design-system/tokens.json +35 -1
  4. package/design-system/tokens.scss +15 -0
  5. package/design-system/tokens.tailwind.cjs +14 -0
  6. package/dist/AdminRoot.d.ts.map +1 -1
  7. package/dist/AdminRoot.js +2 -2
  8. package/dist/AdminRoot.js.map +1 -1
  9. package/dist/__tests__/lib/batch-wizard.test.d.ts +2 -0
  10. package/dist/__tests__/lib/batch-wizard.test.d.ts.map +1 -0
  11. package/dist/__tests__/lib/batch-wizard.test.js +144 -0
  12. package/dist/__tests__/lib/batch-wizard.test.js.map +1 -0
  13. package/dist/__tests__/lib/job-drawer.test.js +2 -0
  14. package/dist/__tests__/lib/job-drawer.test.js.map +1 -1
  15. package/dist/__tests__/lib/job-view.test.js +100 -3
  16. package/dist/__tests__/lib/job-view.test.js.map +1 -1
  17. package/dist/__tests__/lib/jobs-service.test.js +56 -2
  18. package/dist/__tests__/lib/jobs-service.test.js.map +1 -1
  19. package/dist/__tests__/views/appearance-chrome.render.test.d.ts +2 -0
  20. package/dist/__tests__/views/appearance-chrome.render.test.d.ts.map +1 -0
  21. package/dist/__tests__/views/appearance-chrome.render.test.js +688 -0
  22. package/dist/__tests__/views/appearance-chrome.render.test.js.map +1 -0
  23. package/dist/__tests__/views/header-footer-form.test.d.ts +2 -0
  24. package/dist/__tests__/views/header-footer-form.test.d.ts.map +1 -0
  25. package/dist/__tests__/views/header-footer-form.test.js +266 -0
  26. package/dist/__tests__/views/header-footer-form.test.js.map +1 -0
  27. package/dist/__tests__/views/jobs-drawer.render.test.js +442 -2
  28. package/dist/__tests__/views/jobs-drawer.render.test.js.map +1 -1
  29. package/dist/__tests__/views/jobs-list.render.test.js +7 -5
  30. package/dist/__tests__/views/jobs-list.render.test.js.map +1 -1
  31. package/dist/__tests__/views/jobs-wizard.render.test.d.ts +2 -0
  32. package/dist/__tests__/views/jobs-wizard.render.test.d.ts.map +1 -0
  33. package/dist/__tests__/views/jobs-wizard.render.test.js +588 -0
  34. package/dist/__tests__/views/jobs-wizard.render.test.js.map +1 -0
  35. package/dist/lib/api.d.ts +2 -0
  36. package/dist/lib/api.d.ts.map +1 -1
  37. package/dist/lib/api.js +8 -1
  38. package/dist/lib/api.js.map +1 -1
  39. package/dist/lib/batch-wizard.d.ts +84 -0
  40. package/dist/lib/batch-wizard.d.ts.map +1 -0
  41. package/dist/lib/batch-wizard.js +122 -0
  42. package/dist/lib/batch-wizard.js.map +1 -0
  43. package/dist/lib/chrome-service.d.ts +69 -0
  44. package/dist/lib/chrome-service.d.ts.map +1 -0
  45. package/dist/lib/chrome-service.js +108 -0
  46. package/dist/lib/chrome-service.js.map +1 -0
  47. package/dist/lib/job-view.d.ts +43 -0
  48. package/dist/lib/job-view.d.ts.map +1 -1
  49. package/dist/lib/job-view.js +57 -1
  50. package/dist/lib/job-view.js.map +1 -1
  51. package/dist/lib/jobs-service.d.ts +19 -1
  52. package/dist/lib/jobs-service.d.ts.map +1 -1
  53. package/dist/lib/jobs-service.js +41 -0
  54. package/dist/lib/jobs-service.js.map +1 -1
  55. package/dist/prenta-admin.css +1 -1
  56. package/dist/views/AppearanceChrome.d.ts +22 -4
  57. package/dist/views/AppearanceChrome.d.ts.map +1 -1
  58. package/dist/views/AppearanceChrome.js +451 -15
  59. package/dist/views/AppearanceChrome.js.map +1 -1
  60. package/dist/views/Jobs/CancelJobDialog.d.ts +7 -1
  61. package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -1
  62. package/dist/views/Jobs/CancelJobDialog.js +13 -3
  63. package/dist/views/Jobs/CancelJobDialog.js.map +1 -1
  64. package/dist/views/Jobs/DrawerReview.d.ts +7 -0
  65. package/dist/views/Jobs/DrawerReview.d.ts.map +1 -1
  66. package/dist/views/Jobs/DrawerReview.js +1 -1
  67. package/dist/views/Jobs/DrawerReview.js.map +1 -1
  68. package/dist/views/Jobs/JobDrawer.d.ts +23 -3
  69. package/dist/views/Jobs/JobDrawer.d.ts.map +1 -1
  70. package/dist/views/Jobs/JobDrawer.js +30 -5
  71. package/dist/views/Jobs/JobDrawer.js.map +1 -1
  72. package/dist/views/Jobs/JobsTable.d.ts +4 -2
  73. package/dist/views/Jobs/JobsTable.d.ts.map +1 -1
  74. package/dist/views/Jobs/JobsTable.js +6 -5
  75. package/dist/views/Jobs/JobsTable.js.map +1 -1
  76. package/dist/views/Jobs/NewBatchJob.d.ts +34 -0
  77. package/dist/views/Jobs/NewBatchJob.d.ts.map +1 -0
  78. package/dist/views/Jobs/NewBatchJob.js +282 -0
  79. package/dist/views/Jobs/NewBatchJob.js.map +1 -0
  80. package/dist/views/Jobs/WorkerStrip.d.ts +3 -1
  81. package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -1
  82. package/dist/views/Jobs/WorkerStrip.js +2 -2
  83. package/dist/views/Jobs/WorkerStrip.js.map +1 -1
  84. package/dist/views/Jobs/focus.d.ts +6 -0
  85. package/dist/views/Jobs/focus.d.ts.map +1 -1
  86. package/dist/views/Jobs/focus.js +10 -0
  87. package/dist/views/Jobs/focus.js.map +1 -1
  88. package/dist/views/Jobs.d.ts +12 -3
  89. package/dist/views/Jobs.d.ts.map +1 -1
  90. package/dist/views/Jobs.js +109 -31
  91. package/dist/views/Jobs.js.map +1 -1
  92. package/dist/views/header-footer/AnnouncementTab.d.ts +15 -0
  93. package/dist/views/header-footer/AnnouncementTab.d.ts.map +1 -0
  94. package/dist/views/header-footer/AnnouncementTab.js +43 -0
  95. package/dist/views/header-footer/AnnouncementTab.js.map +1 -0
  96. package/dist/views/header-footer/ChromeField.d.ts +25 -0
  97. package/dist/views/header-footer/ChromeField.d.ts.map +1 -0
  98. package/dist/views/header-footer/ChromeField.js +99 -0
  99. package/dist/views/header-footer/ChromeField.js.map +1 -0
  100. package/dist/views/header-footer/ChromePreview.d.ts +31 -0
  101. package/dist/views/header-footer/ChromePreview.d.ts.map +1 -0
  102. package/dist/views/header-footer/ChromePreview.js +195 -0
  103. package/dist/views/header-footer/ChromePreview.js.map +1 -0
  104. package/dist/views/header-footer/DeveloperTab.d.ts +17 -0
  105. package/dist/views/header-footer/DeveloperTab.d.ts.map +1 -0
  106. package/dist/views/header-footer/DeveloperTab.js +98 -0
  107. package/dist/views/header-footer/DeveloperTab.js.map +1 -0
  108. package/dist/views/header-footer/RegionTab.d.ts +27 -0
  109. package/dist/views/header-footer/RegionTab.d.ts.map +1 -0
  110. package/dist/views/header-footer/RegionTab.js +80 -0
  111. package/dist/views/header-footer/RegionTab.js.map +1 -0
  112. package/dist/views/header-footer/chrome-form.d.ts +137 -0
  113. package/dist/views/header-footer/chrome-form.d.ts.map +1 -0
  114. package/dist/views/header-footer/chrome-form.js +518 -0
  115. package/dist/views/header-footer/chrome-form.js.map +1 -0
  116. package/dist/views/header-footer/code-samples.d.ts +30 -0
  117. package/dist/views/header-footer/code-samples.d.ts.map +1 -0
  118. package/dist/views/header-footer/code-samples.js +127 -0
  119. package/dist/views/header-footer/code-samples.js.map +1 -0
  120. package/dist/views/header-footer/controls.d.ts +57 -0
  121. package/dist/views/header-footer/controls.d.ts.map +1 -0
  122. package/dist/views/header-footer/controls.js +43 -0
  123. package/dist/views/header-footer/controls.js.map +1 -0
  124. package/package.json +3 -3
  125. package/src/AdminRoot.tsx +16 -2
  126. package/src/__tests__/lib/batch-wizard.test.ts +199 -0
  127. package/src/__tests__/lib/job-drawer.test.ts +2 -0
  128. package/src/__tests__/lib/job-view.test.ts +123 -2
  129. package/src/__tests__/lib/jobs-service.test.ts +72 -3
  130. package/src/__tests__/views/appearance-chrome.render.test.tsx +818 -0
  131. package/src/__tests__/views/header-footer-form.test.ts +333 -0
  132. package/src/__tests__/views/jobs-drawer.render.test.tsx +508 -2
  133. package/src/__tests__/views/jobs-list.render.test.tsx +8 -5
  134. package/src/__tests__/views/jobs-wizard.render.test.tsx +707 -0
  135. package/src/lib/api.ts +12 -1
  136. package/src/lib/batch-wizard.ts +188 -0
  137. package/src/lib/chrome-service.ts +200 -0
  138. package/src/lib/job-view.ts +95 -1
  139. package/src/lib/jobs-service.ts +56 -1
  140. package/src/styles/prenta-tokens.css +17 -0
  141. package/src/styles/theme.css +15 -0
  142. package/src/views/AppearanceChrome.tsx +704 -46
  143. package/src/views/Jobs/CancelJobDialog.tsx +20 -2
  144. package/src/views/Jobs/DrawerReview.tsx +1 -1
  145. package/src/views/Jobs/JobDrawer.tsx +83 -3
  146. package/src/views/Jobs/JobsTable.tsx +11 -4
  147. package/src/views/Jobs/NewBatchJob.tsx +857 -0
  148. package/src/views/Jobs/WorkerStrip.tsx +16 -11
  149. package/src/views/Jobs/focus.ts +11 -0
  150. package/src/views/Jobs.tsx +163 -49
  151. package/src/views/header-footer/AnnouncementTab.tsx +231 -0
  152. package/src/views/header-footer/ChromeField.tsx +358 -0
  153. package/src/views/header-footer/ChromePreview.tsx +497 -0
  154. package/src/views/header-footer/DeveloperTab.tsx +331 -0
  155. package/src/views/header-footer/RegionTab.tsx +398 -0
  156. package/src/views/header-footer/chrome-form.ts +603 -0
  157. package/src/views/header-footer/code-samples.ts +146 -0
  158. package/src/views/header-footer/controls.tsx +166 -0
  159. package/dist/views/Jobs/placeholders.d.ts +0 -6
  160. package/dist/views/Jobs/placeholders.d.ts.map +0 -1
  161. package/dist/views/Jobs/placeholders.js +0 -20
  162. package/dist/views/Jobs/placeholders.js.map +0 -1
  163. package/src/views/Jobs/placeholders.tsx +0 -66
@@ -0,0 +1,195 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { fieldEntries, } from './chrome-form.js';
5
+ import { CARD } from './controls.js';
6
+ function rec(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {};
8
+ }
9
+ function text(value) {
10
+ return typeof value === 'string' ? value : '';
11
+ }
12
+ /** The message a Preview URL page receives, and the one it sends back when it's ready. */
13
+ const PREVIEW_MESSAGE = 'prenta:chrome-preview';
14
+ const PREVIEW_READY_MESSAGE = 'prenta:chrome-preview-ready';
15
+ function randomToken() {
16
+ const bytes = new Uint8Array(12);
17
+ globalThis.crypto?.getRandomValues?.(bytes);
18
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
19
+ }
20
+ /** The Preview URL's origin, or null when it isn't an http(s) URL. */
21
+ function previewOrigin(url) {
22
+ if (!url || !/^https?:\/\//i.test(url))
23
+ return null;
24
+ try {
25
+ return new URL(url).origin;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ /**
32
+ * The frame's address: the Preview URL with `draft={token}` in its query.
33
+ * Set through `URL`, so a fragment stays last and a `draft` already in the
34
+ * Preview URL is replaced rather than read first.
35
+ */
36
+ function previewFrameSrc(url, token) {
37
+ const src = new URL(url);
38
+ src.searchParams.set('draft', token);
39
+ return src.toString();
40
+ }
41
+ function entries(schema, form) {
42
+ if (!schema || !form)
43
+ return [];
44
+ return fieldEntries(schema).map(([key, def]) => ({ key, def, value: form.fields[key] }));
45
+ }
46
+ /** The first field of a type that passes `test`, in schema order. */
47
+ function find(list, type, test = () => true) {
48
+ const item = list.find((entry) => entry.def.type === type && test(entry.def, entry.key));
49
+ return item;
50
+ }
51
+ /** A toggled value's content when it's on; a plain value as it is. */
52
+ function onValue(def, value) {
53
+ if (!def.optional)
54
+ return value;
55
+ const toggle = rec(value);
56
+ return toggle.on === true ? toggle : null;
57
+ }
58
+ function menuOf(menus, slug) {
59
+ return typeof slug === 'string' && slug ? menus.find((menu) => menu.slug === slug) : undefined;
60
+ }
61
+ function topItems(menu) {
62
+ return menu ? menu.items : [];
63
+ }
64
+ const TONE_BACKGROUND = {
65
+ brand: 'var(--acc)',
66
+ dark: 'var(--site-txt)',
67
+ alert: 'var(--site-alert)',
68
+ };
69
+ function MockSite({ header, footer, announcement, menus, siteTitle, viewport, year, }) {
70
+ const mob = viewport === 'mob';
71
+ const h = entries(header?.schema, header?.form);
72
+ const f = entries(footer?.schema, footer?.form);
73
+ // Header
74
+ const mainMenu = find(h, 'menu', (def) => !def.list && !def.optional);
75
+ const topMenu = find(h, 'menu', (def, key) => !def.list && !!def.optional && key !== mainMenu?.key);
76
+ const cta = find(h, 'link');
77
+ const phone = find(h, 'text', (def) => def.format === 'tel');
78
+ const search = find(h, 'boolean', (_def, key) => key === 'search');
79
+ const headerVariant = header?.form.variant ?? '';
80
+ const minimal = headerVariant === 'minimal';
81
+ const centered = /center/.test(headerVariant);
82
+ const nav = topItems(menuOf(menus, mainMenu ? text(mainMenu.value) || mainMenu.def.default : undefined)).filter((item) => !item.button);
83
+ const top = topMenu ? onValue(topMenu.def, topMenu.value) : null;
84
+ const topLinks = top ? topItems(menuOf(menus, rec(top).value)) : [];
85
+ const ctaValue = cta ? rec(onValue(cta.def, cta.value)) : {};
86
+ const ctaLabel = text(ctaValue.label);
87
+ const phoneValue = phone
88
+ ? phone.def.optional
89
+ ? text(rec(onValue(phone.def, phone.value)).value)
90
+ : text(phone.value)
91
+ : '';
92
+ // Footer
93
+ const tone = find(f, 'select', (def) => def.options.includes('light'));
94
+ const light = tone ? tone.value === 'light' : false;
95
+ const about = find(f, 'textarea');
96
+ const cols = find(f, 'menu', (def) => !!def.list);
97
+ const copy = find(f, 'text', (def) => !!def.tokens?.includes('{year}'));
98
+ const email = find(f, 'text', (def) => def.format === 'email');
99
+ const footPhone = find(f, 'text', (def) => def.format === 'tel');
100
+ const address = find(f, 'text', (def, key) => !def.format && !def.tokens?.length && key !== copy?.key);
101
+ const news = find(f, 'boolean', (def, key) => key === 'news' || /newsletter/i.test(def.label ?? ''));
102
+ const social = find(f, 'social');
103
+ const legal = find(f, 'menu', (def) => !def.list);
104
+ const footerVariant = footer?.form.variant ?? '';
105
+ const fMinimal = footerVariant === 'minimal';
106
+ const compact = footerVariant === 'compact';
107
+ const colMenus = (Array.isArray(cols?.value) ? cols.value : [])
108
+ .map((slug) => menuOf(menus, slug))
109
+ .filter((menu) => !!menu);
110
+ const shownCols = compact ? colMenus.slice(0, 1) : colMenus;
111
+ const legalValue = legal ? onValue(legal.def, legal.value) : null;
112
+ const legalLinks = legal
113
+ ? topItems(menuOf(menus, legal.def.optional ? rec(legalValue).value : legalValue))
114
+ : [];
115
+ const textOf = (item) => item
116
+ ? item.def.optional
117
+ ? text(rec(onValue(item.def, item.value)).value)
118
+ : text(item.value)
119
+ : '';
120
+ const copyText = (textOf(copy) || `© {year} ${siteTitle}`).split('{year}').join(year);
121
+ const contact = [textOf(email), textOf(footPhone)].filter(Boolean).join(' · ');
122
+ const socialLinks = Array.isArray(social?.value) ? social.value.map(rec) : [];
123
+ const toneColor = TONE_BACKGROUND[announcement?.tone ?? 'brand'] ?? TONE_BACKGROUND.brand;
124
+ const footMuted = light ? 'text-site-sub' : 'text-site-foot-txt';
125
+ const footStrong = light ? 'text-site-txt' : 'text-site-bg';
126
+ return (_jsxs("div", { "data-preview-site": "", "data-viewport": viewport, className: `border-bdr bg-site-bg text-site-txt rounded-10 w-full overflow-hidden border text-[13px] leading-[normal] transition-[max-width] duration-200 ${mob ? 'max-w-[360px]' : 'max-w-[860px]'}`, children: [announcement?.on ? (_jsxs("div", { "data-preview-announcement": "", className: "flex items-center justify-center gap-2.5 px-3 py-[7px] text-center text-[12px] font-semibold text-white", style: { background: toneColor }, children: [_jsx("span", { children: announcement.text }), announcement.linkLabel ? _jsxs("u", { className: "font-bold", children: [announcement.linkLabel, " \u2192"] }) : null, announcement.dismissible ? _jsx("span", { className: "ml-1.5 opacity-75", children: "\u2715" }) : null] })) : null, header ? (_jsxs(_Fragment, { children: [topLinks.length > 0 && !mob && !minimal ? (_jsx("div", { className: "bg-site-alt text-site-sub flex justify-end gap-4 px-[18px] py-[5px] text-[11.5px]", children: topLinks.map((item) => (_jsx("span", { children: item.label }, item.id))) })) : null, _jsxs("div", { "data-preview-header": headerVariant, className: `border-site-bdr flex items-center gap-5 border-b px-[18px] py-3.5 ${centered ? 'flex-col gap-2.5' : ''}`, children: [_jsx("span", { className: "text-[16px] font-extrabold tracking-[-0.4px]", children: siteTitle }), mob && !minimal ? (_jsx("span", { "aria-hidden": true, className: "border-site-txt after:border-site-txt relative ml-auto h-3.5 w-[22px] border-y-2 after:absolute after:inset-x-0 after:top-1 after:border-t-2 after:content-['']" })) : (_jsxs(_Fragment, { children: [minimal ? (_jsx("span", { className: "flex-1" })) : (_jsx("nav", { className: `flex flex-1 flex-wrap gap-4 ${centered ? 'justify-center' : 'justify-end'}`, children: nav.map((item) => (_jsx("span", { className: "whitespace-nowrap", children: item.label }, item.id))) })), _jsxs("span", { className: "flex items-center gap-2.5 whitespace-nowrap", children: [search?.value === true && !minimal ? _jsx("span", { children: "\u2315" }) : null, phoneValue && !mob ? _jsx("span", { children: phoneValue }) : null, ctaLabel ? (_jsx("span", { className: "bg-acc rounded-7 px-3 py-[7px] text-[12.5px] font-semibold text-white", children: ctaLabel })) : null] })] }))] })] })) : null, _jsx("div", { className: `text-site-muted flex items-center justify-center bg-[repeating-linear-gradient(135deg,var(--site-alt)_0_10px,var(--site-alt2)_10px_20px)] text-[12px] ${mob ? 'h-20' : 'h-[120px]'}`, children: "Page content" }), footer ? (_jsxs("div", { "data-preview-footer": footerVariant, className: `px-[18px] pt-5 pb-3.5 text-[12px] ${light ? 'bg-site-alt text-site-sub' : 'bg-site-txt text-site-foot-txt'}`, children: [!fMinimal ? (_jsxs("div", { className: `grid gap-[18px] ${compact
127
+ ? mob
128
+ ? 'grid-cols-1'
129
+ : 'grid-cols-[1.3fr_1fr]'
130
+ : mob
131
+ ? 'grid-cols-2'
132
+ : 'grid-cols-[1.3fr_repeat(3,1fr)]'}`, children: [_jsxs("div", { children: [_jsx("div", { className: `mb-1.5 text-[15px] font-extrabold tracking-[-0.3px] ${footStrong}`, children: siteTitle }), about ? _jsx("div", { children: text(about.value) }) : null, !compact ? (_jsxs(_Fragment, { children: [textOf(address) ? _jsx("span", { className: "mt-1 block", children: textOf(address) }) : null, contact ? _jsx("span", { className: "mt-1 block", children: contact }) : null] })) : null, news?.value === true ? (_jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("i", { className: `rounded-6 h-[26px] flex-1 border ${light ? 'border-site-bdr bg-site-bg' : 'border-white/15 bg-white/8'}` }), _jsx("em", { className: "bg-acc rounded-6 px-[9px] py-1 font-semibold text-white not-italic", children: "Subscribe" })] })) : null] }), shownCols.map((menu) => (_jsxs("div", { children: [_jsx("b", { className: `mb-1.5 block text-[12px] ${footStrong}`, children: menu.name.replace(/^Footer · /, '') }), menu.items.map((item) => (_jsx("span", { className: "mt-1 block", children: item.label }, item.id)))] }, menu.slug)))] })) : null, _jsxs("div", { className: `flex flex-wrap gap-3 text-[11px] ${fMinimal
133
+ ? ''
134
+ : `mt-4 border-t pt-2.5 ${light ? 'border-site-bdr' : 'border-white/12'}`} ${footMuted}`, children: [_jsx("span", { children: copyText }), legalLinks.map((item) => (_jsx("span", { children: item.label }, item.id))), _jsx("span", { className: "ml-auto flex gap-2", children: socialLinks.map((link, index) => (_jsx("i", { title: text(link.platform), className: `block h-[18px] w-[18px] rounded-full ${light ? 'bg-site-chip' : 'bg-white/15'}` }, index))) })] })] })) : null] }));
135
+ }
136
+ /**
137
+ * The preview card (`.hf-pv`): a bar with the Desktop/Mobile switch over a
138
+ * stage that shows the site's Preview URL page, or the built-in mock.
139
+ *
140
+ * The Preview URL page loads as `{previewUrl}?draft={token}`. It gets the
141
+ * draft as `{ type: 'prenta:chrome-preview', token, chrome }`, posted to its
142
+ * origin only, when it loads, whenever the draft changes, and again whenever
143
+ * it posts `{ type: 'prenta:chrome-preview-ready', token }` to its parent.
144
+ */
145
+ export function ChromePreview({ header, footer, announcement, menus, siteTitle, previewUrl, draft, }) {
146
+ const [viewport, setViewport] = useState('desk');
147
+ const origin = previewOrigin(previewUrl);
148
+ const token = useMemo(() => randomToken(), []);
149
+ const frame = useRef(null);
150
+ const src = origin && previewUrl ? previewFrameSrc(previewUrl, token) : null;
151
+ const send = useCallback(() => {
152
+ const target = frame.current?.contentWindow;
153
+ if (!target || !origin)
154
+ return;
155
+ target.postMessage({ type: PREVIEW_MESSAGE, token, chrome: draft }, origin);
156
+ }, [draft, origin, token]);
157
+ useEffect(() => {
158
+ send();
159
+ }, [send]);
160
+ useEffect(() => {
161
+ if (!origin)
162
+ return;
163
+ function onMessage(event) {
164
+ if (event.origin !== origin || event.source !== frame.current?.contentWindow)
165
+ return;
166
+ const data = rec(event.data);
167
+ if (data.type === PREVIEW_READY_MESSAGE && data.token === token)
168
+ send();
169
+ }
170
+ window.addEventListener('message', onMessage);
171
+ return () => window.removeEventListener('message', onMessage);
172
+ }, [origin, send, token]);
173
+ const options = [
174
+ ['desk', 'Desktop'],
175
+ ['mob', 'Mobile'],
176
+ ];
177
+ function onKeyDown(event) {
178
+ if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key))
179
+ return;
180
+ event.preventDefault();
181
+ const next = viewport === 'desk' ? 'mob' : 'desk';
182
+ setViewport(next);
183
+ event.currentTarget.querySelector(`[data-viewport="${next}"]`)?.focus();
184
+ }
185
+ let host = '';
186
+ if (origin)
187
+ host = new URL(origin).host;
188
+ return (_jsxs("section", { "aria-label": "Preview", className: `${CARD} sticky top-3 [@media(width<=1100px)]:static`, children: [_jsxs("div", { className: "border-bdr text-sub flex flex-wrap items-center gap-2 border-b px-3 py-[9px] text-[12px] leading-[normal] font-semibold", children: ["Preview", _jsx("span", { className: "text-faint font-mono text-[11px] font-medium", children: origin
189
+ ? `${host} · draft values`
190
+ : 'built-in mock · set a Preview URL to render your components' }), _jsx("div", { role: "radiogroup", "aria-label": "Preview width", onKeyDown: onKeyDown, className: "rounded-8 border-bdr bg-bg ml-auto flex gap-0.5 border p-0.5", children: options.map(([id, label]) => {
191
+ const on = viewport === id;
192
+ return (_jsx("button", { type: "button", role: "radio", "aria-checked": on, tabIndex: on ? 0 : -1, "data-viewport": id, onClick: () => setViewport(id), className: `rounded-6 cursor-pointer border-0 px-[9px] py-[3px] text-[12px] leading-[normal] font-semibold ${on ? 'bg-card text-txt shadow-shd' : 'text-sub bg-transparent'}`, children: label }, id));
193
+ }) })] }), _jsx("div", { className: "rounded-b-12 bg-bg flex justify-center p-[18px]", children: src ? (_jsx("iframe", { ref: frame, src: src, title: "Site preview with draft values", onLoad: send, sandbox: "allow-scripts allow-same-origin", referrerPolicy: "no-referrer", className: `border-bdr bg-site-bg rounded-10 block h-[560px] w-full border transition-[max-width] duration-200 ${viewport === 'mob' ? 'max-w-[360px]' : 'max-w-[860px]'}` })) : (_jsx(MockSite, { header: header, footer: footer, announcement: announcement, menus: menus, siteTitle: siteTitle, viewport: viewport, year: String(new Date().getFullYear()) })) })] }));
194
+ }
195
+ //# sourceMappingURL=ChromePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChromePreview.js","sourceRoot":"","sources":["../../../src/views/header-footer/ChromePreview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ChromeSyncStatus } from '@prenta/core';
2
+ export interface ChromeSettingsForm {
3
+ revalidateUrl: string;
4
+ previewUrl: string;
5
+ }
6
+ export interface DeveloperTabProps {
7
+ sync: ChromeSyncStatus | null;
8
+ settings: ChromeSettingsForm;
9
+ onSettingsChange: (form: ChromeSettingsForm) => void;
10
+ canEditSettings: boolean;
11
+ secret: string | null;
12
+ settingsProblem: string | null;
13
+ now: number;
14
+ }
15
+ /** The Developer tab: the code samples, the live schema status, the On save settings and local dev. */
16
+ export declare function DeveloperTab({ sync, settings, onSettingsChange, canEditSettings, secret, settingsProblem, now, }: DeveloperTabProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=DeveloperTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeveloperTab.d.ts","sourceRoot":"","sources":["../../../src/views/header-footer/DeveloperTab.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAmMpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB;AA4FD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACpD,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,eAAe,EACf,GAAG,GACJ,EAAE,iBAAiB,2CAiBnB"}
@@ -0,0 +1,98 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId, useRef, useState } from 'react';
4
+ import { toast } from 'sonner';
5
+ import { CODE_SAMPLES, LOCAL_DEV_SAMPLE, highlight, } from './code-samples.js';
6
+ import { shortCommit, timeAgo } from './chrome-form.js';
7
+ import { CARD, CardHead, FieldLabel, Help, INPUT, KeyChip, MONO } from './controls.js';
8
+ const TOKEN_CLASS = {
9
+ comment: 'text-code-cmt',
10
+ string: 'text-code-str',
11
+ keyword: 'text-code-kw',
12
+ plain: undefined,
13
+ };
14
+ /** `.hf-code`: the dark code block, 12px DM Mono at 1.65. */
15
+ const CODE_BLOCK = 'bg-code-bg text-code-txt relative m-0 overflow-auto rounded-b-12 px-4 py-3.5 font-mono text-[12px] leading-[1.65] whitespace-pre';
16
+ function Highlighted({ src }) {
17
+ return (_jsx(_Fragment, { children: highlight(src).map((token, index) => TOKEN_CLASS[token.kind] ? (_jsx("span", { className: TOKEN_CLASS[token.kind], children: token.text }, index)) : (token.text)) }));
18
+ }
19
+ /** Put text on the clipboard and say so. */
20
+ async function copy(text, done = 'Copied') {
21
+ try {
22
+ if (!navigator.clipboard?.writeText)
23
+ throw new Error('No clipboard');
24
+ await navigator.clipboard.writeText(text);
25
+ toast(done);
26
+ }
27
+ catch {
28
+ toast.error('Couldn’t copy. Select the text and copy it instead.');
29
+ }
30
+ }
31
+ function HowItsWired() {
32
+ const id = useId();
33
+ const [current, setCurrent] = useState('config');
34
+ const refs = useRef([]);
35
+ const index = Math.max(0, CODE_SAMPLES.findIndex((sample) => sample.id === current));
36
+ const sample = CODE_SAMPLES[index];
37
+ function onKeyDown(event) {
38
+ const last = CODE_SAMPLES.length - 1;
39
+ let next;
40
+ if (event.key === 'ArrowRight')
41
+ next = index === last ? 0 : index + 1;
42
+ else if (event.key === 'ArrowLeft')
43
+ next = index === 0 ? last : index - 1;
44
+ else if (event.key === 'Home')
45
+ next = 0;
46
+ else if (event.key === 'End')
47
+ next = last;
48
+ else
49
+ return;
50
+ event.preventDefault();
51
+ setCurrent(CODE_SAMPLES[next].id);
52
+ refs.current[next]?.focus();
53
+ }
54
+ return (_jsxs("section", { "aria-labelledby": `${id}-title`, className: `${CARD} overflow-hidden`, children: [_jsx(CardHead, { id: `${id}-title`, title: "How it\u2019s wired", children: _jsx("div", { role: "tablist", "aria-label": "Code sample", onKeyDown: onKeyDown, className: "rounded-8 border-bdr bg-bg ml-auto flex gap-0.5 border p-0.5", children: CODE_SAMPLES.map((item, i) => {
55
+ const on = item.id === current;
56
+ return (_jsx("button", { ref: (el) => {
57
+ refs.current[i] = el;
58
+ }, id: `${id}-tab-${item.id}`, type: "button", role: "tab", "aria-selected": on, "aria-controls": `${id}-panel`, tabIndex: on ? 0 : -1, onClick: () => setCurrent(item.id), className: `rounded-6 cursor-pointer border-0 px-[9px] py-[3px] text-[12px] leading-[normal] font-semibold ${on ? 'bg-card text-txt shadow-shd' : 'text-sub bg-transparent'}`, children: item.label }, item.id));
59
+ }) }) }), _jsxs("pre", { id: `${id}-panel`, role: "tabpanel", "aria-labelledby": `${id}-tab-${sample.id}`,
60
+ // Scrolls, so it takes focus for keyboard scrolling.
61
+ tabIndex: 0, className: `${CODE_BLOCK} max-h-[520px]`, children: [_jsx("button", { type: "button", onClick: () => void copy(sample.src), "aria-label": `Copy ${sample.file}`, className: "rounded-6 border-code-btn-bdr bg-code-btn-bg text-code-btn-txt absolute top-2.5 right-2.5 cursor-pointer border px-2 py-[3px] font-mono text-[11px] leading-[1.65] font-medium", children: "Copy" }), _jsx("span", { className: "text-code-file mb-2 block text-[11px]", children: sample.file }), _jsx(Highlighted, { src: sample.src })] })] }));
62
+ }
63
+ function SchemaCard({ sync, now }) {
64
+ const id = useId();
65
+ const synced = sync?.status === 'synced' && sync.source;
66
+ const source = sync?.source ?? null;
67
+ const regions = [...(sync?.regions ?? []), 'announcement'].join(' · ');
68
+ const rows = [
69
+ [
70
+ 'Source',
71
+ source ? `${source.repo || 'unknown repo'}@${source.branch || 'unknown'}` : '—',
72
+ true,
73
+ ],
74
+ [
75
+ 'Last read',
76
+ source
77
+ ? `${shortCommit(source.commit) || 'unknown'} · ${timeAgo(source.readAt, now)}`
78
+ : 'never',
79
+ true,
80
+ ],
81
+ ['Regions', regions, false],
82
+ ['Fields', String(sync?.fieldCount ?? 0), false],
83
+ ];
84
+ return (_jsxs("section", { "aria-labelledby": `${id}-title`, className: CARD, children: [_jsx(CardHead, { id: `${id}-title`, title: "Schema", children: synced ? (_jsx("span", { className: "rounded-pill bg-suc-l text-suc inline-flex items-center gap-[5px] px-2 py-px text-[11px] leading-[normal] font-bold", children: "\u25CF In sync" })) : (_jsx("span", { className: "rounded-pill bg-warn-l text-warn inline-flex items-center gap-[5px] px-2 py-px text-[11px] leading-[normal] font-bold", children: "\u25CF Not read yet" })) }), _jsx("dl", { className: "m-0 flex flex-col", children: rows.map(([label, value, mono]) => (_jsxs("div", { className: "border-bdr text-sm2 text-sub flex items-center gap-2.5 border-t px-4 py-[9px] leading-[normal] first:border-t-0", children: [_jsx("dt", { children: label }), _jsx("dd", { className: `text-txt m-0 ml-auto min-w-0 truncate text-right font-semibold ${mono ? 'font-mono text-[11.5px]' : ''}`, children: value })] }, label))) }), _jsxs("div", { className: "text-hint text-faint px-4 pb-3 leading-[1.45]", children: [synced ? null : (_jsxs(_Fragment, { children: ["Add ", _jsx(KeyChip, { children: "prenta push chrome" }), " to your deploy to send the header and footer.", ' '] })), "Read on every deploy. Removed fields keep their values for 30 days; renamed fields need", ' ', _jsx(KeyChip, { children: "renamedFrom" }), "."] })] }));
85
+ }
86
+ function OnSaveCard({ form, onChange, canEdit, secret, problem, }) {
87
+ const id = useId();
88
+ return (_jsxs("section", { "aria-labelledby": `${id}-title`, className: CARD, children: [_jsx(CardHead, { id: `${id}-title`, title: "On save" }), _jsxs("div", { className: "flex flex-col gap-3.5 px-4 py-3.5", children: [_jsxs("div", { children: [_jsx(FieldLabel, { htmlFor: `${id}-revalidate`, children: "Revalidate URL" }), _jsx("input", { id: `${id}-revalidate`, className: `${INPUT} ${MONO}`, value: form.revalidateUrl, placeholder: canEdit ? 'https://' : 'Only admins can see this', disabled: !canEdit, spellCheck: false, onChange: (event) => onChange({ ...form, revalidateUrl: event.target.value }) }), _jsxs(Help, { children: ["POSTs ", _jsx(KeyChip, { children: "chrome.updated" }), " with the changed region. Also fires when a scheduled announcement starts or ends."] }), secret ? (_jsxs("div", { role: "status", className: "rounded-9 border-bdr bg-bg text-hint text-sub mt-2 flex flex-wrap items-center gap-2 border px-3 py-2 leading-[1.45]", children: [_jsxs("span", { className: "min-w-0 flex-1", children: ["Signing secret ", _jsx(KeyChip, { children: secret }), ". Copy it now; it won\u2019t be shown again."] }), _jsx("button", { type: "button", onClick: () => void copy(secret, 'Secret copied'), className: "rounded-8 border-bdr bg-card text-meta text-txt hover:border-acc-m hover:text-acc inline-flex h-7 cursor-pointer items-center border px-[9px] font-[550]", children: "Copy" })] })) : null] }), _jsxs("div", { children: [_jsx(FieldLabel, { htmlFor: `${id}-preview`, children: "Preview URL" }), _jsx("input", { id: `${id}-preview`, className: `${INPUT} ${MONO}`, value: form.previewUrl, placeholder: canEdit ? 'https://' : undefined, disabled: !canEdit, spellCheck: false, onChange: (event) => onChange({ ...form, previewUrl: event.target.value }) }), _jsx(Help, { children: "Renders your real components with draft values. Leave blank to use the built-in mock." })] }), problem ? (_jsx(Help, { tone: "error", children: _jsx("span", { role: "alert", children: problem }) })) : null] })] }));
89
+ }
90
+ function LocalDevCard() {
91
+ const id = useId();
92
+ return (_jsxs("section", { "aria-labelledby": `${id}-title`, className: `${CARD} overflow-hidden`, children: [_jsx(CardHead, { id: `${id}-title`, title: "Local dev" }), _jsx("pre", { tabIndex: 0, "aria-label": "Local dev commands", className: CODE_BLOCK, children: _jsx(Highlighted, { src: LOCAL_DEV_SAMPLE }) })] }));
93
+ }
94
+ /** The Developer tab: the code samples, the live schema status, the On save settings and local dev. */
95
+ export function DeveloperTab({ sync, settings, onSettingsChange, canEditSettings, secret, settingsProblem, now, }) {
96
+ return (_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_minmax(0,340px)] items-start gap-[18px] [@media(width<=1100px)]:grid-cols-[minmax(0,1fr)]", children: [_jsx(HowItsWired, {}), _jsxs("div", { className: "flex min-w-0 flex-col gap-3.5", children: [_jsx(SchemaCard, { sync: sync, now: now }), _jsx(OnSaveCard, { form: settings, onChange: onSettingsChange, canEdit: canEditSettings, secret: secret, problem: settingsProblem }), _jsx(LocalDevCard, {})] })] }));
97
+ }
98
+ //# sourceMappingURL=DeveloperTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeveloperTab.js","sourceRoot":"","sources":["../../../src/views/header-footer/DeveloperTab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ChromeOrphan, ChromeOverridesList, ChromeRegionName, RegionSchema } from '@prenta/core';
2
+ import type { ChromeMenuOption } from '../../lib/chrome-service.js';
3
+ import { type RegionForm } from './chrome-form.js';
4
+ export interface RegionTabProps {
5
+ region: ChromeRegionName;
6
+ schema: RegionSchema;
7
+ form: RegionForm;
8
+ onChange: (form: RegionForm) => void;
9
+ problems: Record<string, string>;
10
+ orphans: ChromeOrphan[];
11
+ removingOrphans: boolean;
12
+ onRemoveOrphans: () => void;
13
+ overrides: ChromeOverridesList | 'unavailable' | 'error';
14
+ menus: ChromeMenuOption[];
15
+ siteTitle: string;
16
+ readOnly: boolean;
17
+ /** A save is out: Remove now waits, so the save's If-Match still holds. */
18
+ saving: boolean;
19
+ now: number;
20
+ href: (path: string) => string;
21
+ onNavigate: (path: string) => void;
22
+ /** The admin route that edits a page, by collection and id. */
23
+ editPath: (collection: string, id: string) => string;
24
+ }
25
+ /** One region's cards, top to bottom: Source, Variant, Fields (with orphans), Page overrides. */
26
+ export declare function RegionTab({ region, schema, form, onChange, problems, orphans, removingOrphans, onRemoveOrphans, overrides, menus, siteTitle, readOnly, saving, now, href, onNavigate, editPath, }: RegionTabProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=RegionTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegionTab.d.ts","sourceRoot":"","sources":["../../../src/views/header-footer/RegionTab.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACb,MAAM,cAAc,CAAA;AAGrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AA+KzB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,SAAS,EAAE,mBAAmB,GAAG,aAAa,GAAG,OAAO,CAAA;IACxD,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;CACrD;AAED,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,eAAe,EACf,eAAe,EACf,SAAS,EACT,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,EACH,IAAI,EACJ,UAAU,EACV,QAAQ,GACT,EAAE,cAAc,2CA+JhB"}
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { AlertTriangle, Code } from 'lucide-react';
4
+ import { useRef } from 'react';
5
+ import { Button } from '../../components/ui/Button.js';
6
+ import { ChromeField } from './ChromeField.js';
7
+ import { componentPath, fieldEntries, overrideChips, repoFileUrl, shortCommit, timeAgo, } from './chrome-form.js';
8
+ import { CARD, CardHead, KeyChip, LockPill } from './controls.js';
9
+ const ORPHAN_TTL_MS = 30 * 86_400_000;
10
+ /** The kit's variant thumbnails, by variant id; other ids draw the default. */
11
+ function VariantThumb({ region, id }) {
12
+ const bar = 'block h-[5px] rounded-[3px] bg-bdr';
13
+ const logo = 'block h-[9px] w-4 rounded-[2px] bg-sub';
14
+ const cta = 'block h-[9px] w-3.5 rounded-[2px] bg-acc';
15
+ if (region === 'footer') {
16
+ const blocks = id === 'minimal' ? 0 : id === 'compact' ? 2 : 4;
17
+ return (_jsx("span", { "aria-hidden": true, className: "rounded-6 bg-site-thumb flex h-[30px] items-center gap-1 px-[7px]", children: blocks === 0 ? (_jsx("i", { className: "bg-site-thumb-bar block h-[5px] w-full rounded-[3px]" })) : (Array.from({ length: blocks }, (_, index) => (_jsx("i", { className: "bg-site-thumb-bar block h-3.5 flex-1 rounded-[3px]" }, index)))) }));
18
+ }
19
+ const centered = /center/.test(id);
20
+ const minimal = id === 'minimal';
21
+ return (_jsxs("span", { "aria-hidden": true, className: `rounded-6 bg-bg flex h-[30px] items-center gap-1 px-[7px] ${centered ? 'justify-center' : 'justify-between'}`, children: [_jsx("i", { className: logo }), centered ? null : minimal ? (_jsx("i", { className: cta })) : (_jsxs("span", { className: "flex gap-[3px]", children: [_jsx("i", { className: `${bar} w-2.5` }), _jsx("i", { className: `${bar} w-2.5` }), _jsx("i", { className: cta })] }))] }));
22
+ }
23
+ function VariantCards({ region, schema, value, onChange, disabled, }) {
24
+ const ids = Object.keys(schema.variants).filter((id) => Object.hasOwn(schema.variants, id));
25
+ const refs = useRef([]);
26
+ const selected = Math.max(0, ids.indexOf(value));
27
+ function onKeyDown(event) {
28
+ const last = ids.length - 1;
29
+ let next;
30
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown')
31
+ next = selected === last ? 0 : selected + 1;
32
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp')
33
+ next = selected === 0 ? last : selected - 1;
34
+ else
35
+ return;
36
+ event.preventDefault();
37
+ if (disabled)
38
+ return;
39
+ onChange(ids[next]);
40
+ refs.current[next]?.focus();
41
+ }
42
+ return (_jsx("div", { role: "radiogroup", "aria-label": `${region} variant`, onKeyDown: onKeyDown, className: "grid grid-cols-3 gap-2 [@media(width<=560px)]:grid-cols-2", children: ids.map((id, index) => {
43
+ const on = id === value;
44
+ return (_jsxs("button", { ref: (el) => {
45
+ refs.current[index] = el;
46
+ }, type: "button", role: "radio", "aria-checked": on, tabIndex: index === selected ? 0 : -1, disabled: disabled, onClick: () => onChange(id), className: `rounded-10 bg-card flex min-w-0 cursor-pointer flex-col gap-1.5 border p-2 text-left leading-[normal] disabled:cursor-not-allowed ${on ? 'border-acc shadow-[0_0_0_3px_var(--acc-l)]' : 'border-bdr'}`, children: [_jsx(VariantThumb, { region: region, id: id }), _jsx("b", { className: "text-txt text-[12px] leading-[normal] font-semibold", children: schema.variants[id] }), _jsx(KeyChip, { bare: true, size: 10.5, children: id })] }, id));
47
+ }) }));
48
+ }
49
+ function OrphanRow({ region, orphans, now, removing, disabled, onRemove, }) {
50
+ const expires = Math.min(...orphans.map((o) => Date.parse(o.orphanedAt) + ORPHAN_TTL_MS));
51
+ const days = Math.max(0, Math.ceil((expires - now) / 86_400_000));
52
+ const when = days <= 0 ? 'today' : `in ${days} ${days === 1 ? 'day' : 'days'}`;
53
+ const one = orphans.length === 1;
54
+ return (_jsxs("div", { className: "border-bdr bg-bg text-sub flex items-start gap-2.5 border-t px-4 py-2.5 text-[12px] leading-[normal]", children: [_jsx("span", { className: "text-warn mt-px shrink-0", children: _jsx(AlertTriangle, { size: 14, strokeWidth: 1.8, "aria-hidden": true }) }), _jsxs("span", { className: "min-w-0", children: [_jsx("b", { className: "text-txt font-semibold", children: one
55
+ ? '1 saved value isn’t in the schema anymore:'
56
+ : `${orphans.length} saved values aren’t in the schema anymore:` }), ' ', orphans.map((orphan, index) => (_jsxs("span", { children: [index > 0 ? ', ' : null, _jsx(KeyChip, { children: `${region}.${orphan.key}` })] }, orphan.key))), ".", ' ', one
57
+ ? `It’s no longer sent to the site and will be removed ${when}.`
58
+ : `They’re no longer sent to the site and will be removed ${when}.`] }), _jsx(Button, { variant: "ghost", size: "sm", className: "ml-auto", loading: removing, disabled: disabled, onClick: onRemove, children: "Remove now" })] }));
59
+ }
60
+ /** One region's cards, top to bottom: Source, Variant, Fields (with orphans), Page overrides. */
61
+ export function RegionTab({ region, schema, form, onChange, problems, orphans, removingOrphans, onRemoveOrphans, overrides, menus, siteTitle, readOnly, saving, now, href, onNavigate, editPath, }) {
62
+ const { source } = schema;
63
+ const repoUrl = repoFileUrl(source, schema.component);
64
+ const fields = fieldEntries(schema);
65
+ const pages = typeof overrides === 'object'
66
+ ? overrides.pages.filter((page) => page[region] !== undefined)
67
+ : [];
68
+ const brandPath = '/settings?tab=general';
69
+ function go(event, path) {
70
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
71
+ return;
72
+ event.preventDefault();
73
+ onNavigate(path);
74
+ }
75
+ return (_jsxs(_Fragment, { children: [_jsx("section", { "aria-label": "Source", className: CARD, children: _jsxs("div", { className: "flex flex-wrap items-center gap-3 px-4 py-3", children: [_jsx(Code, { size: 15, strokeWidth: 1.8, "aria-hidden": true, className: "text-txt shrink-0" }), _jsxs("div", { className: "min-w-0 leading-5", children: [_jsx("code", { className: "text-txt font-mono text-[12.5px] font-medium break-all", children: componentPath(schema.component) }), _jsxs("div", { className: "text-hint text-faint flex flex-wrap items-center gap-2 leading-[normal]", children: [_jsx("i", { "aria-hidden": true, className: "bg-suc block h-[7px] w-[7px] rounded-full" }), _jsx("span", { children: `Schema in sync · ${source.repo || 'unknown repo'}@${shortCommit(source.commit) || 'unknown'} · ${timeAgo(source.readAt, now)}` })] })] }), repoUrl ? (_jsx("a", { href: repoUrl, target: "_blank", rel: "noopener noreferrer", className: "text-sm2 text-acc ml-auto font-semibold whitespace-nowrap no-underline", children: "View in repo \u2197" })) : null] }) }), _jsxs("section", { "aria-labelledby": `hf-${region}-variant`, className: CARD, children: [_jsx(CardHead, { id: `hf-${region}-variant`, title: "Variant", description: "Site default. Pages can pick a different one.", children: _jsx(LockPill, { children: "Defined in code" }) }), _jsx("div", { className: "flex flex-col gap-3.5 px-4 py-3.5", children: _jsx(VariantCards, { region: region, schema: schema, value: form.variant, disabled: readOnly, onChange: (variant) => onChange({ ...form, variant }) }) })] }), _jsxs("section", { "aria-labelledby": `hf-${region}-fields`, className: CARD, children: [_jsx(CardHead, { id: `hf-${region}-fields`, title: "Fields", description: "Your developer chose what\u2019s editable here." }), _jsx("div", { className: "flex flex-col gap-3.5 px-4 py-3.5", children: fields.length === 0 ? (_jsx("p", { className: "text-meta text-sub m-0", children: "This region has no editable fields." })) : (fields.map(([key, def]) => (_jsx(ChromeField, { region: region, fieldKey: key, def: def, value: form.fields[key], menus: menus, siteTitle: siteTitle, disabled: readOnly, problem: problems[key], brandHref: href(brandPath), onOpenBrand: () => onNavigate(brandPath), onChange: (value) => onChange({ ...form, fields: { ...form.fields, [key]: value } }) }, key)))) }), orphans.length > 0 ? (_jsx(OrphanRow, { region: region, orphans: orphans, now: now, removing: removingOrphans, disabled: readOnly || saving, onRemove: onRemoveOrphans })) : null] }), _jsxs("section", { "aria-labelledby": `hf-${region}-overrides`, className: CARD, children: [_jsx(CardHead, { id: `hf-${region}-overrides`, title: "Page overrides", description: "Set in each page\u2019s settings. Child pages inherit." }), _jsxs("div", { className: "flex flex-col", children: [overrides === 'error' ? (_jsxs("p", { className: "text-meta text-faint m-0 px-4 py-2.5", role: "alert", children: ["Couldn\u2019t load the pages that override the ", region, "."] })) : overrides === 'unavailable' ? (_jsxs("p", { className: "text-meta text-faint m-0 px-4 py-2.5", children: ["Update the CMS to list the pages that override the ", region, "."] })) : pages.length === 0 ? (_jsxs("p", { className: "text-meta text-faint m-0 px-4 py-2.5", children: ["No page overrides the ", region, ". Every page uses the site default."] })) : (pages.map((page) => {
76
+ const path = editPath(page.collection, page.id);
77
+ return (_jsxs("a", { href: href(path), onClick: (event) => go(event, path), className: "border-bdr text-sm2 text-txt hover:bg-bg flex items-center gap-2.5 border-t px-4 py-[9px] no-underline first:border-t-0", children: [_jsx("span", { className: "min-w-0 truncate", children: page.title || page.path }), overrideChips(page, region).map((chip) => (_jsx("span", { className: "rounded-5 border-bdr bg-bg text-sub border px-1.5 font-mono text-[11px] font-medium whitespace-nowrap", children: chip }, chip))), _jsx("code", { className: "text-faint ml-auto font-mono text-[11.5px] whitespace-nowrap", children: page.path })] }, page.id));
78
+ })), typeof overrides === 'object' && overrides.truncated ? (_jsx("p", { className: "border-bdr text-hint text-faint m-0 border-t px-4 py-2", children: "Showing the 200 most recently changed pages with an override." })) : null] })] })] }));
79
+ }
80
+ //# sourceMappingURL=RegionTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegionTab.js","sourceRoot":"","sources":["../../../src/views/header-footer/RegionTab.tsx"],"names":[],"mappings":"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"}