@pantheon-systems/puck-css 0.5.0 → 0.7.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 (54) hide show
  1. package/dist/core/types.d.ts +6 -0
  2. package/dist/core/types.d.ts.map +1 -1
  3. package/dist/data/fields.d.ts +12 -0
  4. package/dist/data/fields.d.ts.map +1 -0
  5. package/dist/data/fields.js +40 -0
  6. package/dist/data/fields.js.map +1 -0
  7. package/dist/editor/P1PuckProvider.js +66 -9
  8. package/dist/editor/P1PuckProvider.js.map +1 -1
  9. package/dist/editor/components/VersionBannerOverride.d.ts.map +1 -1
  10. package/dist/editor/components/VersionBannerOverride.js +7 -1
  11. package/dist/editor/components/VersionBannerOverride.js.map +1 -1
  12. package/dist/editor/plugin/P1Plugin.d.ts +2 -0
  13. package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
  14. package/dist/editor/plugin/P1Plugin.js +1 -1
  15. package/dist/editor/plugin/P1Plugin.js.map +1 -1
  16. package/dist/editor/useComponentRegistry.d.ts +2 -5
  17. package/dist/editor/useComponentRegistry.d.ts.map +1 -1
  18. package/dist/editor/useComponentRegistry.js +3 -172
  19. package/dist/editor/useComponentRegistry.js.map +1 -1
  20. package/dist/editor/useP1Editor.js +2 -2
  21. package/dist/editor/useP1Editor.js.map +1 -1
  22. package/dist/editor/useP1Plugin.d.ts +2 -0
  23. package/dist/editor/useP1Plugin.d.ts.map +1 -1
  24. package/dist/editor/useP1Plugin.js +1 -0
  25. package/dist/editor/useP1Plugin.js.map +1 -1
  26. package/dist/editor/utils/componentRegistry.d.ts +22 -2
  27. package/dist/editor/utils/componentRegistry.d.ts.map +1 -1
  28. package/dist/editor/utils/componentRegistry.js +9 -2
  29. package/dist/editor/utils/componentRegistry.js.map +1 -1
  30. package/dist/editor/utils/syncComponentRegistry.d.ts +29 -0
  31. package/dist/editor/utils/syncComponentRegistry.d.ts.map +1 -0
  32. package/dist/editor/utils/syncComponentRegistry.js +212 -0
  33. package/dist/editor/utils/syncComponentRegistry.js.map +1 -0
  34. package/dist/editor/utils/syncComponentRegistryWriteOnly.d.ts +24 -0
  35. package/dist/editor/utils/syncComponentRegistryWriteOnly.d.ts.map +1 -0
  36. package/dist/editor/utils/syncComponentRegistryWriteOnly.js +41 -0
  37. package/dist/editor/utils/syncComponentRegistryWriteOnly.js.map +1 -0
  38. package/dist/pds/components/P1EditorHeader.d.ts +6 -1
  39. package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
  40. package/dist/pds/components/P1EditorHeader.js +72 -4
  41. package/dist/pds/components/P1EditorHeader.js.map +1 -1
  42. package/dist/pds/components/P1EditorHeader.module.css +21 -3
  43. package/dist/pds/components/P1EditorSubheader.module.css +5 -2
  44. package/dist/pds/theme/pds-core-content.d.ts +1 -1
  45. package/dist/pds/theme/pds-core-content.d.ts.map +1 -1
  46. package/dist/pds/theme/pds-core-content.js +3 -2
  47. package/dist/pds/theme/pds-core-content.js.map +1 -1
  48. package/dist/registry-sync.d.ts +7 -0
  49. package/dist/registry-sync.d.ts.map +1 -0
  50. package/dist/registry-sync.js +8 -0
  51. package/dist/registry-sync.js.map +1 -0
  52. package/package.json +17 -4
  53. package/src/pds/theme/pds-core-content.ts +3 -2
  54. package/src/pds/theme/pds-core.css +3 -2
@@ -0,0 +1,212 @@
1
+ /**
2
+ * syncComponentRegistry
3
+ *
4
+ * Serialises ComponentDescriptor objects to CSS documents under the
5
+ * /_registry/ path prefix, hash-checking to skip unchanged components.
6
+ *
7
+ * Extracted from useComponentRegistry.ts (verbatim, renamed) so it can run
8
+ * outside React — the browser hook and a headless CI sync script both call
9
+ * this same function. No React import here by design.
10
+ */
11
+ import { ConflictError } from '@pantheon-systems/css-client';
12
+ import { buildRegistryIndex, } from './componentRegistry.js';
13
+ // =============================================================================
14
+ // Registry path helpers
15
+ // =============================================================================
16
+ const REGISTRY_PREFIX = '_registry/';
17
+ export const COMPONENT_PREFIX = '_registry/components/';
18
+ export const INDEX_PATH = '_registry/index';
19
+ /**
20
+ * Maximum age of the registry index's last full per-component verification
21
+ * (PCC-3430) before the fast path is forced to re-verify every component's
22
+ * actual document content instead of trusting the index's hashes map alone.
23
+ * Bounds how long an index/document desync can persist undetected.
24
+ */
25
+ export const REGISTRY_VERIFICATION_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
26
+ export function componentPath(name) {
27
+ return `${COMPONENT_PREFIX}${name}`;
28
+ }
29
+ export async function syncComponentRegistry(client, siteId, branchId, descriptors) {
30
+ // Step 1: List all existing registry documents
31
+ const existingDocs = (await client.documents.list(siteId, branchId, {
32
+ pathPrefix: REGISTRY_PREFIX,
33
+ }));
34
+ // Step 2: Build lookup maps for existing component docs
35
+ const docByName = new Map();
36
+ let indexDoc;
37
+ for (const doc of existingDocs) {
38
+ if (doc.path === INDEX_PATH) {
39
+ indexDoc = doc;
40
+ }
41
+ else if (doc.path.startsWith(COMPONENT_PREFIX)) {
42
+ const name = doc.path.slice(COMPONENT_PREFIX.length);
43
+ docByName.set(name, doc);
44
+ }
45
+ }
46
+ // Step 3: Resolve stored hashes — fast path (from index) or legacy (per-component).
47
+ //
48
+ // Fast path: if the index version has a `hashes` map, read all hashes from it
49
+ // in a single request instead of fetching each component version individually.
50
+ // This collapses N simultaneous getLatest calls (one per component) into 1.
51
+ //
52
+ // Legacy fallback: index exists but has no `hashes` field (written by an older
53
+ // version of this hook), or no index exists yet. Falls back to per-component
54
+ // fetches so existing registries continue to work on the first run after deploy.
55
+ const storedHashByName = new Map();
56
+ let gotHashesFromIndex = false;
57
+ let existingVerifiedAt;
58
+ if (indexDoc !== undefined) {
59
+ try {
60
+ const indexVersion = await client.versions.getLatest(siteId, branchId, indexDoc.id);
61
+ const indexSnapshot = indexVersion.snapshot;
62
+ if (typeof indexSnapshot.verifiedAt === 'string') {
63
+ existingVerifiedAt = indexSnapshot.verifiedAt;
64
+ }
65
+ const verifiedAtMs = existingVerifiedAt !== undefined ? Date.parse(existingVerifiedAt) : NaN;
66
+ const verificationIsStale = !Number.isFinite(verifiedAtMs) || Date.now() - verifiedAtMs > REGISTRY_VERIFICATION_INTERVAL_MS;
67
+ if (indexSnapshot.hashes !== undefined && typeof indexSnapshot.hashes === 'object' && !verificationIsStale) {
68
+ for (const [name, hash] of Object.entries(indexSnapshot.hashes)) {
69
+ if (typeof hash === 'string') {
70
+ storedHashByName.set(name, hash);
71
+ }
72
+ }
73
+ gotHashesFromIndex = true;
74
+ console.debug('[syncComponentRegistry] Fast path: loaded', storedHashByName.size, 'hashes from index');
75
+ }
76
+ else if (verificationIsStale) {
77
+ // PCC-3430: the fast path trusts `hashes` without ever reading the
78
+ // documents it describes. If an entry ever comes to record a hash
79
+ // that doesn't match its document's real content (e.g. an
80
+ // out-of-band revert the index was never told about), the fast path
81
+ // has no way to detect this on its own and would skip forever.
82
+ // Periodically forcing a real per-component check bounds how long
83
+ // such a desync can persist instead of letting it stick indefinitely.
84
+ console.debug('[syncComponentRegistry] Registry verification is stale — forcing per-component fetch to self-heal any index/document desync');
85
+ }
86
+ else {
87
+ console.debug('[syncComponentRegistry] Index exists but has no hashes field (legacy format) — falling back to per-component fetch');
88
+ }
89
+ }
90
+ catch (err) {
91
+ console.debug('[syncComponentRegistry] Index version fetch failed — falling back to per-component fetch:', err);
92
+ }
93
+ }
94
+ else {
95
+ console.debug('[syncComponentRegistry] No index document found — will create one after registration');
96
+ }
97
+ if (!gotHashesFromIndex) {
98
+ // Legacy path: fetch each component version individually to get stored hash.
99
+ console.debug('[syncComponentRegistry] Legacy path: fetching', docByName.size, 'component versions individually');
100
+ await Promise.all(Array.from(docByName.entries()).map(async ([name, doc]) => {
101
+ try {
102
+ const version = await client.versions.getLatest(siteId, branchId, doc.id);
103
+ const snapshot = version.snapshot;
104
+ if (typeof snapshot.descriptorHash === 'string') {
105
+ storedHashByName.set(name, snapshot.descriptorHash);
106
+ }
107
+ }
108
+ catch {
109
+ // Version fetch failure → treat as hash mismatch, will overwrite
110
+ }
111
+ }));
112
+ }
113
+ // Step 4: Write only changed/new descriptors
114
+ let registered = 0;
115
+ let skipped = 0;
116
+ await Promise.all(descriptors.map(async (descriptor) => {
117
+ const storedHash = storedHashByName.get(descriptor.name);
118
+ const existingDoc = docByName.get(descriptor.name);
119
+ // Skip only when the hash is unchanged AND the component document still
120
+ // exists on this branch. A hash-only check is unsafe: the index can drift
121
+ // out of sync with on-disk component docs (e.g. a partial historical
122
+ // write, an out-of-band deletion, or branch CoW interactions where the
123
+ // index was inherited but its referenced component docs were not). In
124
+ // that case the index reports a matching hash for a name whose document
125
+ // is missing, and the registry stays permanently stuck at fewer
126
+ // components than the running config defines. Requiring `existingDoc`
127
+ // forces the missing component through the create path on the next run,
128
+ // which self-heals the desync and rewrites the index from the full
129
+ // descriptor set.
130
+ if (existingDoc !== undefined && storedHash === descriptor.descriptorHash) {
131
+ skipped++;
132
+ return;
133
+ }
134
+ let docId;
135
+ if (existingDoc === undefined) {
136
+ try {
137
+ const newDoc = await client.documents.create({
138
+ siteId,
139
+ branchId,
140
+ path: componentPath(descriptor.name),
141
+ });
142
+ docId = newDoc.id;
143
+ }
144
+ catch (err) {
145
+ if (err instanceof ConflictError) {
146
+ const existing = await client.documents.getByPath(siteId, componentPath(descriptor.name));
147
+ docId = existing.id;
148
+ }
149
+ else {
150
+ throw err;
151
+ }
152
+ }
153
+ }
154
+ else {
155
+ docId = existingDoc.id;
156
+ }
157
+ await client.versions.create(siteId, {
158
+ documentId: docId,
159
+ branchId,
160
+ snapshot: descriptor,
161
+ });
162
+ registered++;
163
+ }));
164
+ console.debug('[syncComponentRegistry] Registration complete:', 'registered =', registered, 'skipped =', skipped, 'total =', descriptors.length, '| gotHashesFromIndex =', gotHashesFromIndex);
165
+ // Detect hash instability: if we got hashes from the index but still had to register
166
+ // components, log which components had mismatched hashes.
167
+ if (gotHashesFromIndex && registered > 0) {
168
+ const changed = descriptors.filter(d => storedHashByName.get(d.name) !== d.descriptorHash);
169
+ console.warn('[syncComponentRegistry] Hash mismatch detected for', changed.length, 'component(s) despite index being present.', 'These components will trigger a full re-registration on every load if their hashes are unstable:', changed.map(d => ({ name: d.name, stored: storedHashByName.get(d.name), computed: d.descriptorHash })));
170
+ }
171
+ // Step 5: Write index when something changed, index doesn't exist yet, OR the existing
172
+ // index lacks the `hashes` field (legacy format). The third condition promotes legacy
173
+ // indexes to the fast-path format so that the next startup can skip per-component fetches.
174
+ const indexNeedsWrite = registered > 0 || indexDoc === undefined || !gotHashesFromIndex;
175
+ console.debug('[syncComponentRegistry] indexNeedsWrite =', indexNeedsWrite, '(registered > 0:', registered > 0, ', no indexDoc:', indexDoc === undefined, ', legacy format:', !gotHashesFromIndex, ')');
176
+ if (indexNeedsWrite) {
177
+ // A per-component verification just ran whenever we didn't trust the
178
+ // fast path (missing index, legacy format, or forced by staleness) —
179
+ // stamp verifiedAt as confirmed now. Otherwise carry the existing value
180
+ // forward: a fast-path-only run (skips + a changed component or two)
181
+ // doesn't verify every component's actual content, so it must not reset
182
+ // the clock on the next forced verification.
183
+ const verifiedAt = !gotHashesFromIndex ? new Date().toISOString() : existingVerifiedAt;
184
+ const index = buildRegistryIndex(descriptors, siteId, branchId, verifiedAt);
185
+ let indexDocId;
186
+ if (indexDoc === undefined) {
187
+ try {
188
+ const newIndexDoc = await client.documents.create({ siteId, branchId, path: INDEX_PATH });
189
+ indexDocId = newIndexDoc.id;
190
+ }
191
+ catch (err) {
192
+ if (err instanceof ConflictError) {
193
+ const existing = await client.documents.getByPath(siteId, INDEX_PATH);
194
+ indexDocId = existing.id;
195
+ }
196
+ else {
197
+ throw err;
198
+ }
199
+ }
200
+ }
201
+ else {
202
+ indexDocId = indexDoc.id;
203
+ }
204
+ await client.versions.create(siteId, {
205
+ documentId: indexDocId,
206
+ branchId,
207
+ snapshot: index,
208
+ });
209
+ }
210
+ return { registered, skipped, total: descriptors.length };
211
+ }
212
+ //# sourceMappingURL=syncComponentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncComponentRegistry.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * syncComponentRegistryWriteOnly
3
+ *
4
+ * A write-only variant of syncComponentRegistry for callers holding a
5
+ * write:registry-scoped token, which has no read access at all by design
6
+ * (see collaborative-state-system's §0 write:registry scope). Skips the
7
+ * existence/hash-check reads entirely and always creates-or-versions every
8
+ * descriptor, relying on the backend's upsert-on-conflict behavior for
9
+ * _registry/* paths (a live conflict on these paths creates a new version
10
+ * instead of erroring). Every run rewrites every component + the index,
11
+ * whether or not anything changed — accepted as a low-volume cost (the CI
12
+ * workflow only triggers on pushes touching component code) in exchange for
13
+ * a token that genuinely cannot read anything.
14
+ *
15
+ * The interactive editor keeps using syncComponentRegistry, unmodified,
16
+ * with its skip-if-unchanged behavior — this variant is CI-only.
17
+ */
18
+ import type { P1Client } from '@pantheon-systems/css-client';
19
+ import { type ComponentDescriptor } from './componentRegistry.js';
20
+ export interface WriteOnlyRegistrationResult {
21
+ total: number;
22
+ }
23
+ export declare function syncComponentRegistryWriteOnly(client: P1Client, siteId: string, branchId: string, descriptors: ComponentDescriptor[]): Promise<WriteOnlyRegistrationResult>;
24
+ //# sourceMappingURL=syncComponentRegistryWriteOnly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncComponentRegistryWriteOnly.d.ts","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistryWriteOnly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAsB,KAAK,mBAAmB,EAAsB,MAAM,wBAAwB,CAAC;AAG1G,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,mBAAmB,EAAE,GACjC,OAAO,CAAC,2BAA2B,CAAC,CA0BtC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * syncComponentRegistryWriteOnly
3
+ *
4
+ * A write-only variant of syncComponentRegistry for callers holding a
5
+ * write:registry-scoped token, which has no read access at all by design
6
+ * (see collaborative-state-system's §0 write:registry scope). Skips the
7
+ * existence/hash-check reads entirely and always creates-or-versions every
8
+ * descriptor, relying on the backend's upsert-on-conflict behavior for
9
+ * _registry/* paths (a live conflict on these paths creates a new version
10
+ * instead of erroring). Every run rewrites every component + the index,
11
+ * whether or not anything changed — accepted as a low-volume cost (the CI
12
+ * workflow only triggers on pushes touching component code) in exchange for
13
+ * a token that genuinely cannot read anything.
14
+ *
15
+ * The interactive editor keeps using syncComponentRegistry, unmodified,
16
+ * with its skip-if-unchanged behavior — this variant is CI-only.
17
+ */
18
+ import { buildRegistryIndex } from './componentRegistry.js';
19
+ import { componentPath, INDEX_PATH } from './syncComponentRegistry.js';
20
+ export async function syncComponentRegistryWriteOnly(client, siteId, branchId, descriptors) {
21
+ await Promise.all(descriptors.map((descriptor) => client.documents.create({
22
+ siteId,
23
+ branchId,
24
+ path: componentPath(descriptor.name),
25
+ snapshot: descriptor,
26
+ })));
27
+ // Every descriptor above was just unconditionally rewritten with its true
28
+ // current content — that IS a full per-component verification, the
29
+ // strongest one possible (PCC-3430). Stamping verifiedAt here means the
30
+ // next editor load can trust the fast path immediately instead of forcing
31
+ // an unnecessary per-component fetch right after this run.
32
+ const index = buildRegistryIndex(descriptors, siteId, branchId, new Date().toISOString());
33
+ await client.documents.create({
34
+ siteId,
35
+ branchId,
36
+ path: INDEX_PATH,
37
+ snapshot: index,
38
+ });
39
+ return { total: descriptors.length };
40
+ }
41
+ //# sourceMappingURL=syncComponentRegistryWriteOnly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncComponentRegistryWriteOnly.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistryWriteOnly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,kBAAkB,EAAgD,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMvE,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,WAAkC;IAElC,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC7B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QACtB,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,UAAgD;KAC3D,CAAC,CACH,CACF,CAAC;IAEF,0EAA0E;IAC1E,mEAAmE;IACnE,wEAAwE;IACxE,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,KAAK,GAAkB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACzG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC5B,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAA2C;KACtD,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AACvC,CAAC"}
@@ -10,6 +10,7 @@ import React from 'react';
10
10
  import type { PageNavigatorDocument } from './PageNavigator.js';
11
11
  import type { Template, TemplateSummary } from '../../features/content-type-templates/types.js';
12
12
  export type { PageNavigatorDocument };
13
+ export declare const BEFORE_NAVIGATE_TIMEOUT_MS = 8000;
13
14
  export interface CurrentUser {
14
15
  id: string;
15
16
  name?: string;
@@ -29,6 +30,10 @@ export interface P1EditorHeaderProps {
29
30
  siteName: string;
30
31
  siteId?: string;
31
32
  dashboardUrl?: string;
33
+ /** Custom logo image URL. When provided, replaces the default PantheonLogo. */
34
+ logoUrl?: string;
35
+ /** Called (and awaited) before the logo link navigates — use to flush pending saves. */
36
+ onBeforeLogoNavigate?: () => Promise<void>;
32
37
  onSelectDocument: (doc: PageNavigatorDocument) => void;
33
38
  onCreateDocument?: (path: string, template?: TemplateSummary | null, title?: string) => Promise<void>;
34
39
  onLogout: () => void;
@@ -48,5 +53,5 @@ export interface P1EditorHeaderProps {
48
53
  defaultUrlPattern?: string;
49
54
  }) => Promise<Template>;
50
55
  }
51
- export declare function P1EditorHeader({ documents, currentDocument, selectedDocumentPath, currentUser, siteName, siteId, dashboardUrl, onSelectDocument, onCreateDocument, onLogout, templates, templatesLoading, onCreateTemplate, datasources, }: P1EditorHeaderProps): React.ReactElement;
56
+ export declare function P1EditorHeader({ documents, currentDocument, selectedDocumentPath, currentUser, siteName, siteId, dashboardUrl, logoUrl, onBeforeLogoNavigate, onSelectDocument, onCreateDocument, onLogout, templates, templatesLoading, onCreateTemplate, datasources, }: P1EditorHeaderProps): React.ReactElement;
52
57
  //# sourceMappingURL=P1EditorHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"P1EditorHeader.d.ts","sourceRoot":"","sources":["../../../src/pds/components/P1EditorHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAIhG,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC9C,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjE,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,GACZ,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAgT1C"}
1
+ {"version":3,"file":"P1EditorHeader.d.ts","sourceRoot":"","sources":["../../../src/pds/components/P1EditorHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAIhG,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC9C,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,gBAAgB,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjE,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,GACZ,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAwX1C"}
@@ -14,7 +14,8 @@ import { getAvatarStyleOverride } from '../../collaboration/utils/avatarColor.js
14
14
  import { PageNavigator } from './PageNavigator.js';
15
15
  import { CreatePageModal } from './CreatePageModal.js';
16
16
  import styles from './P1EditorHeader.module.css';
17
- export function P1EditorHeader({ documents, currentDocument, selectedDocumentPath, currentUser, siteName, siteId, dashboardUrl, onSelectDocument, onCreateDocument, onLogout, templates, templatesLoading, onCreateTemplate, datasources, }) {
17
+ export const BEFORE_NAVIGATE_TIMEOUT_MS = 8000;
18
+ export function P1EditorHeader({ documents, currentDocument, selectedDocumentPath, currentUser, siteName, siteId, dashboardUrl, logoUrl, onBeforeLogoNavigate, onSelectDocument, onCreateDocument, onLogout, templates, templatesLoading, onCreateTemplate, datasources, }) {
18
19
  const [pageNavigatorOpen, setPageNavigatorOpen] = useState(false);
19
20
  // The Create Page modal, opened from the page navigator's "+ New page" /
20
21
  // "+ New template". `createModalMode` selects which screen it opens on.
@@ -26,6 +27,8 @@ export function P1EditorHeader({ documents, currentDocument, selectedDocumentPat
26
27
  const [userMenuStyle, setUserMenuStyle] = useState({});
27
28
  const userMenuTriggerRef = useRef(null);
28
29
  const userMenuRef = useRef(null);
30
+ const [logoImgError, setLogoImgError] = useState(false);
31
+ useEffect(() => { setLogoImgError(false); }, [logoUrl]);
29
32
  const handlePageSelectorClick = useCallback(() => {
30
33
  setUserMenuOpen(false);
31
34
  if (!pageNavigatorOpen && pageSelectorRef.current) {
@@ -107,10 +110,75 @@ export function P1EditorHeader({ documents, currentDocument, selectedDocumentPat
107
110
  const baseUrl = (dashboardUrl || 'https://content.pantheon.io').replace(/\/$/, '');
108
111
  return `${baseUrl}/dashboard/sites/${siteId}`;
109
112
  }, [siteId, dashboardUrl]);
110
- return (_jsxs("header", { "data-testid": "p1-editor-header", className: styles.header, children: [dashboardHref ? (_jsx("a", { href: dashboardHref, className: styles.logoLink, title: "Go to P1 Dashboard", "data-testid": "p1-logo-link", target: "_blank", rel: "noopener noreferrer", children: _jsx(PantheonLogo, { "data-testid": "p1-logo", className: styles.logo, displayType: "sub-brand", subBrand: "P1", size: "s", linkContent: null }) })) : (_jsx(PantheonLogo, { "data-testid": "p1-logo", className: styles.logo, displayType: "sub-brand", subBrand: "P1", size: "s", linkContent: null })), _jsx("div", { "data-testid": "site-label", className: styles.siteLabel, children: _jsxs("span", { className: styles.labelText, children: ["Site: ", siteName] }) }), _jsxs("div", { className: styles.pageSelectorGroup, children: [_jsxs("button", { ref: pageSelectorRef, "data-testid": "page-selector", className: styles.pageSelector, onClick: handlePageSelectorClick, type: "button", "aria-haspopup": "true", "aria-expanded": pageNavigatorOpen, children: [_jsx(Icon, { iconName: "folderTree", iconSize: "s", "aria-hidden": "true" }), _jsxs("span", { className: styles.labelText, children: [currentDocument?.path || selectedDocumentPath || 'Select a page', _jsx(Icon, { iconName: "angleDown", iconSize: "s", "aria-hidden": "true" })] })] }), (() => {
113
+ const [logoNavSaving, setLogoNavSaving] = useState(false);
114
+ const logoNavTimerRef = useRef(undefined);
115
+ const logoNavMountedRef = useRef(true);
116
+ useEffect(() => {
117
+ logoNavMountedRef.current = true;
118
+ return () => {
119
+ logoNavMountedRef.current = false;
120
+ window.clearTimeout(logoNavTimerRef.current);
121
+ };
122
+ }, []);
123
+ const handleLogoClick = useCallback((e) => {
124
+ if (!dashboardHref)
125
+ return;
126
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0)
127
+ return;
128
+ e.preventDefault();
129
+ if (logoNavSaving)
130
+ return;
131
+ const navigate = () => {
132
+ if (!logoNavMountedRef.current)
133
+ return;
134
+ window.location.href = dashboardHref;
135
+ };
136
+ if (!onBeforeLogoNavigate) {
137
+ navigate();
138
+ return;
139
+ }
140
+ let settled = false;
141
+ const settle = () => {
142
+ settled = true;
143
+ window.clearTimeout(logoNavTimerRef.current);
144
+ setLogoNavSaving(false);
145
+ };
146
+ const confirmLeave = () => {
147
+ if (!logoNavMountedRef.current)
148
+ return;
149
+ const leave = window.confirm('Save failed — your latest changes couldn’t be saved. Leave anyway?');
150
+ if (leave)
151
+ navigate();
152
+ };
153
+ setLogoNavSaving(true);
154
+ logoNavTimerRef.current = window.setTimeout(() => {
155
+ if (settled)
156
+ return;
157
+ settle();
158
+ confirmLeave();
159
+ }, BEFORE_NAVIGATE_TIMEOUT_MS);
160
+ onBeforeLogoNavigate()
161
+ .then(() => {
162
+ if (settled)
163
+ return;
164
+ settle();
165
+ navigate();
166
+ })
167
+ .catch((err) => {
168
+ if (settled)
169
+ return;
170
+ settle();
171
+ console.error('[P1EditorHeader] Pre-navigation save failed:', err);
172
+ confirmLeave();
173
+ });
174
+ }, [onBeforeLogoNavigate, dashboardHref, logoNavSaving]);
175
+ return (_jsxs("header", { "data-testid": "p1-editor-header", className: styles.header, children: [_jsx("a", { href: dashboardHref, className: logoNavSaving ? `${styles.logoLink} ${styles.logoLinkSaving}` : styles.logoLink, title: dashboardHref ? 'Go to P1 Dashboard' : undefined, "data-testid": "p1-logo-link", "aria-busy": logoNavSaving || undefined, "aria-disabled": logoNavSaving || undefined, onClick: handleLogoClick, children: logoUrl && !logoImgError ? (_jsx("img", { src: logoUrl, alt: "Pantheon P1", "data-testid": "p1-logo", className: styles.logo, onError: () => setLogoImgError(true) })) : (_jsx(PantheonLogo, { "data-testid": "p1-logo", className: styles.logo, displayType: "sub-brand", subBrand: "P1", size: "s", linkContent: null })) }), _jsx("div", { className: styles.divider, "aria-hidden": "true" }), _jsx("div", { "data-testid": "site-label", className: styles.siteLabel, children: _jsxs("span", { className: styles.labelText, children: ["Site: ", siteName] }) }), _jsxs("div", { className: styles.pageSelectorGroup, children: [_jsxs("button", { ref: pageSelectorRef, "data-testid": "page-selector", className: styles.pageSelector, onClick: handlePageSelectorClick, type: "button", "aria-haspopup": "true", "aria-expanded": pageNavigatorOpen, children: [_jsx(Icon, { iconName: "folderTree", iconSize: "s", "aria-hidden": "true" }), _jsxs("span", { className: styles.labelText, children: [currentDocument?.path || selectedDocumentPath || 'Select a page', _jsx(Icon, { iconName: "angleDown", iconSize: "s", "aria-hidden": "true" })] })] }), (() => {
111
176
  const pagePath = currentDocument?.path || selectedDocumentPath;
112
- // Show button if there's a path and it's not empty/root
113
- const shouldShow = pagePath && pagePath !== '/' && pagePath !== '';
177
+ // Templates (edited at _registry/templates/<name>) aren't publicly
178
+ // published, so there's no page to view hide the button for them.
179
+ const isTemplatePath = typeof pagePath === 'string' && /^\/?_registry\/templates\//.test(pagePath);
180
+ // Show for any real page path, including the home page ("/").
181
+ const shouldShow = !!pagePath && !isTemplatePath;
114
182
  return shouldShow ? (_jsx("a", { href: pagePath, target: "_blank", rel: "noopener noreferrer", className: styles.externalLinkButton, title: "Open page in new tab", "data-testid": "open-external", children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }), _jsx("polyline", { points: "15 3 21 3 21 9" }), _jsx("line", { x1: "10", x2: "21", y1: "14", y2: "3" })] }) })) : null;
115
183
  })()] }), _jsx(PageNavigator, { open: pageNavigatorOpen, documents: documents, currentDocument: currentDocument, isMainBranch: true, onSelect: handleSelectDocument, onCreateDocument: onCreateDocument, onCreatePage: () => {
116
184
  setPageNavigatorOpen(false);
@@ -1 +1 @@
1
- {"version":3,"file":"P1EditorHeader.js","sourceRoot":"","sources":["../../../src/pds/components/P1EditorHeader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"P1EditorHeader.js","sourceRoot":"","sources":["../../../src/pds/components/P1EditorHeader.tsx"],"names":[],"mappings":"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"}
@@ -40,6 +40,7 @@
40
40
  text-decoration: none;
41
41
  display: inline-flex;
42
42
  align-items: center;
43
+ gap: 7px;
43
44
  cursor: pointer;
44
45
  transition: opacity 0.2s cubic-bezier(0.2, 0, 0, 1);
45
46
  }
@@ -48,6 +49,16 @@
48
49
  opacity: 0.7;
49
50
  }
50
51
 
52
+ /* When no href (no siteId configured), suppress interactive affordances */
53
+ .logoLink:not([href]),
54
+ .logoLink:not([href]) .logo {
55
+ cursor: default;
56
+ }
57
+
58
+ .logoLink:not([href]):hover {
59
+ opacity: 1;
60
+ }
61
+
51
62
  .logoLink .logo {
52
63
  cursor: pointer;
53
64
  }
@@ -59,8 +70,10 @@
59
70
  }
60
71
 
61
72
  /* Scale the Pantheon bolt icon to compact header size */
62
- .logo svg {
73
+ .logo svg,
74
+ img.logo {
63
75
  height: 1.563rem;
76
+ width: auto;
64
77
  }
65
78
 
66
79
  /* Scale sub-brand wordmark to match compact proportions */
@@ -69,12 +82,17 @@
69
82
  padding-inline-end: 0;
70
83
  }
71
84
 
85
+ .logoLinkSaving {
86
+ opacity: 0.5;
87
+ pointer-events: none;
88
+ cursor: progress;
89
+ }
90
+
72
91
  /* ── Site label ───────────────────────────────────────────── */
73
92
 
74
93
  .siteLabel {
75
94
  display: inline-flex;
76
95
  align-items: center;
77
- padding: 0.41rem 0.64rem;
78
96
  font-family: var(--pds-typography-ff-default, 'Inter', sans-serif);
79
97
  font-size: var(--pds-typography-size-s, 0.875rem);
80
98
  font-weight: var(--pds-typography-fw-medium, 500);
@@ -90,7 +108,7 @@
90
108
  .divider {
91
109
  width: 1px;
92
110
  height: 20px;
93
- background: oklch(0.96 0 0); /* c.borderSubtle */
111
+ background: oklch(0.8853 0 0);
94
112
  flex-shrink: 0;
95
113
  }
96
114
 
@@ -82,8 +82,11 @@
82
82
  flex-shrink: 0;
83
83
  }
84
84
 
85
- /* Remove rounded corners and right border on workstream switcher when grouped */
86
- .workstreamPublishGroup :global(.WorkstreamSwitcher-module__vbDGzq__trigger) {
85
+ /* Remove rounded corners and right border on workstream switcher when grouped.
86
+ * Match by attribute substring rather than a fixed CSS-module hash so the rule
87
+ * survives rebuilds (the hash changes between build tools, e.g. vbDGzq -> qeUOEG). */
88
+ .workstreamPublishGroup
89
+ :global([class*='WorkstreamSwitcher-module'][class*='__trigger']) {
87
90
  border-top-right-radius: 0;
88
91
  border-bottom-right-radius: 0;
89
92
  border-right: none;