@pygmalionjs/pygmalion 0.2.35 → 0.2.36

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.
@@ -1,24 +1,24 @@
1
- import { jsxs as N, jsx as b } from "react/jsx-runtime";
2
- import { b as ne, m as Ze, i as et, g as tt, e as J, c as nt, a as rt, d as ot, f as st, h as it, j as at, k as ct, l as be, n as lt, o as dt, p as ut, q as ft, r as gt, t as mt, u as Oe, v as pt, w as ht, x as yt, y as $e, z as Se, A as de, B as ue, C as Me, S as wt, D as bt, E as De, G as St, H as ke, I as vt, J as It, K as xt, L as Pt, M as Et, O as Ct, P as Fe } from "./App-phpKmf_I.js";
3
- import { Q as Rn, R as Nn, T as An, U as On, V as $n, W as Mn, X as Dn, Y as kn, Z as Fn, _ as Tn, $ as zn, a0 as _n, a1 as jn, a2 as Bn, a3 as Un, a4 as Hn, a5 as qn, a6 as Gn, a7 as Kn, a8 as Vn, a9 as Jn, aa as Wn, ab as Ln, ac as Qn, ad as Xn, ae as Yn, af as Zn, ag as er, ah as tr, ai as nr, aj as rr, ak as or, al as sr, am as ir, an as ar, ao as cr, ap as lr, aq as dr, ar as ur, as as fr, at as gr, au as mr, av as pr } from "./App-phpKmf_I.js";
1
+ import { jsxs as A, jsx as b } from "react/jsx-runtime";
2
+ import { b as ne, m as Ze, i as et, g as tt, e as W, c as nt, a as rt, d as ot, f as st, h as it, j as at, k as ct, l as Se, n as lt, o as dt, p as ut, q as ft, r as mt, t as pt, u as Me, v as gt, w as ht, x as yt, y as Oe, z as be, A as de, B as ue, C as $e, S as wt, D as St, E as De, G as bt, H as ke, I as vt, J as It, K as xt, L as Pt, M as Et, O as Ct, P as Fe } from "./App-BE2sN74X.js";
3
+ import { Q as Rn, R as An, T as Mn, U as On, V as $n, W as Dn, X as kn, Y as Fn, Z as Tn, _ as zn, $ as _n, a0 as jn, a1 as Bn, a2 as Un, a3 as Hn, a4 as qn, a5 as Gn, a6 as Kn, a7 as Vn, a8 as Jn, a9 as Wn, aa as Ln, ab as Qn, ac as Xn, ad as Yn, ae as Zn, af as er, ag as tr, ah as nr, ai as rr, aj as or, ak as sr, al as ir, am as ar, an as cr, ao as lr, ap as dr, aq as ur, ar as fr, as as mr, at as pr, au as gr, av as hr } from "./App-BE2sN74X.js";
4
4
  import { createElement as Te, useMemo as ae, useState as se, useRef as xe, useCallback as te, useEffect as ie, useLayoutEffect as ze } from "react";
5
5
  function Pe(e, t = /* @__PURE__ */ new Set()) {
6
6
  if (e == null || typeof e == "string" || typeof e == "boolean" || typeof e == "number" && Number.isFinite(e))
7
7
  return e;
8
8
  if (Array.isArray(e))
9
- return e.map((n) => Pe(n, t));
9
+ return e.map((r) => Pe(r, t));
10
10
  if (typeof e != "object") return null;
11
11
  if (t.has(e))
12
12
  throw new Error("A storyboard recipe cannot contain circular references.");
13
13
  t.add(e);
14
14
  const o = {};
15
- for (const n of Object.keys(e).sort()) {
16
- const r = e[n];
17
- r !== void 0 && (o[n] = Pe(r, t));
15
+ for (const r of Object.keys(e).sort()) {
16
+ const n = e[r];
17
+ n !== void 0 && (o[r] = Pe(n, t));
18
18
  }
19
19
  return t.delete(e), o;
20
20
  }
21
- function Rt(e) {
21
+ function Nt(e) {
22
22
  return JSON.stringify(
23
23
  Pe({
24
24
  version: 1,
@@ -39,31 +39,31 @@ function Rt(e) {
39
39
  })
40
40
  );
41
41
  }
42
- function _(e) {
42
+ function T(e) {
43
43
  return [...new Set([...e].map((t) => t == null ? void 0 : t.trim()).filter(Boolean))].sort((t, o) => t.localeCompare(o));
44
44
  }
45
- function Nt(e, t) {
46
- var n;
47
- return ((n = e.id) == null ? void 0 : n.trim()) || `edge:${t + 1}`;
45
+ function Rt(e, t) {
46
+ var r;
47
+ return ((r = e.id) == null ? void 0 : r.trim()) || `edge:${t + 1}`;
48
48
  }
49
49
  function At(e) {
50
- const t = [...e.screens].sort((n, r) => n.id.localeCompare(r.id)), o = t[0].id;
50
+ const t = [...e.screens].sort((r, n) => r.id.localeCompare(n.id)), o = t[0].id;
51
51
  return {
52
52
  id: `story:${o}`,
53
53
  canonicalScreenId: o,
54
- screenIds: t.map((n) => n.id),
55
- names: _(t.map((n) => n.name)),
54
+ screenIds: t.map((r) => r.id),
55
+ names: T(t.map((r) => r.name)),
56
56
  recipeKey: e.recipeKey,
57
- routes: _(t.map((n) => n.route)),
58
- scenarioIds: _(
59
- t.flatMap((n) => [
60
- n.scenarioId,
61
- ...n.scenarioIds ?? []
57
+ routes: T(t.map((r) => r.route)),
58
+ scenarioIds: T(
59
+ t.flatMap((r) => [
60
+ r.scenarioId,
61
+ ...r.scenarioIds ?? []
62
62
  ])
63
63
  ),
64
- sourceKeys: _(t.map((n) => n.sourcePath)),
65
- flows: _(t.map((n) => n.flow)),
66
- states: _(t.map((n) => n.state))
64
+ sourceKeys: T(t.map((r) => r.sourcePath)),
65
+ flows: T(t.map((r) => r.flow)),
66
+ states: T(t.map((r) => r.state))
67
67
  };
68
68
  }
69
69
  function _e(e) {
@@ -75,267 +75,286 @@ function _e(e) {
75
75
  e.scenarioId
76
76
  ].join(":");
77
77
  }
78
- function Ot(e) {
79
- var X, z;
80
- const t = [], o = [], n = /* @__PURE__ */ new Map();
81
- for (const a of e.screens) {
82
- const c = a.id.trim();
83
- if (!c || n.has(c)) {
78
+ function Mt(e) {
79
+ var _, J;
80
+ const t = [], o = [], r = /* @__PURE__ */ new Map();
81
+ for (const i of e.screens) {
82
+ const a = i.id.trim();
83
+ if (!a || r.has(a)) {
84
84
  t.push({
85
85
  code: "duplicate-screen-id",
86
86
  severity: "error",
87
- message: c ? `Multiple storyboard screens use the id "${c}".` : "A storyboard screen has an empty id.",
88
- screenId: c || void 0
87
+ message: a ? `Multiple storyboard screens use the id "${a}".` : "A storyboard screen has an empty id.",
88
+ screenId: a || void 0
89
89
  });
90
90
  continue;
91
91
  }
92
- const d = c === a.id ? a : { ...a, id: c };
93
- n.set(c, d), o.push(d);
92
+ const l = a === i.id ? i : { ...i, id: a };
93
+ r.set(a, l), o.push(l);
94
94
  }
95
- const r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set();
96
- for (const a of o) {
97
- let c;
95
+ const n = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set();
96
+ for (const i of o) {
97
+ let a;
98
98
  try {
99
- if (c = (e.recipeKey ?? Rt)(a), !c.trim()) throw new Error("Recipe keys cannot be empty.");
100
- } catch (u) {
101
- s.add(a.id), t.push({
99
+ if (a = (e.recipeKey ?? Nt)(i), !a.trim()) throw new Error("Recipe keys cannot be empty.");
100
+ } catch (p) {
101
+ s.add(i.id), t.push({
102
102
  code: "invalid-recipe",
103
103
  severity: "error",
104
- message: u instanceof Error ? u.message : "Storyboard recipe identity could not be created.",
105
- screenId: a.id
106
- }), c = `invalid:${a.id}`;
104
+ message: p instanceof Error ? p.message : "Storyboard recipe identity could not be created.",
105
+ screenId: i.id
106
+ }), a = `invalid:${i.id}`;
107
107
  }
108
- const d = r.get(c);
109
- d ? d.screens.push(a) : r.set(c, { recipeKey: c, screens: [a] });
108
+ const l = n.get(a);
109
+ l ? l.screens.push(i) : n.set(a, { recipeKey: a, screens: [i] });
110
110
  }
111
- const i = [...r.values()].map(At).sort((a, c) => a.id.localeCompare(c.id)), l = {};
112
- for (const a of i)
113
- for (const c of a.screenIds) l[c] = a.id;
114
- const f = new Map(i.map((a) => [a.id, a])), p = /* @__PURE__ */ new Map();
115
- for (const a of e.assets ?? []) {
116
- const c = p.get(a.pageId);
117
- c ? c.push(a) : p.set(a.pageId, [a]);
111
+ const c = [...n.values()].map(At).sort((i, a) => i.id.localeCompare(a.id)), d = {};
112
+ for (const i of c)
113
+ for (const a of i.screenIds) d[a] = i.id;
114
+ const u = new Map(c.map((i) => [i.id, i])), g = (i, a) => T([
115
+ a,
116
+ ...(i ?? []).flatMap((l) => {
117
+ const p = l.trim(), I = d[p] ?? (u.has(p) ? p : null);
118
+ return I ? [I] : [];
119
+ })
120
+ ]), m = /* @__PURE__ */ new Map();
121
+ for (const i of e.assets ?? []) {
122
+ const a = m.get(i.pageId);
123
+ a ? a.push(i) : m.set(i.pageId, [i]);
118
124
  }
119
- const g = i.map((a) => {
120
- const c = a.screenIds.flatMap(
121
- (d) => p.get(d) ?? []
125
+ const y = c.map((i) => {
126
+ const a = i.screenIds.flatMap(
127
+ (l) => m.get(l) ?? []
122
128
  );
123
129
  return {
124
- ...a,
125
- scenarioIds: _([
126
- ...a.scenarioIds,
127
- ...c.map((d) => d.scenarioId)
130
+ ...i,
131
+ scenarioIds: T([
132
+ ...i.scenarioIds,
133
+ ...a.map((l) => l.scenarioId)
128
134
  ]),
129
- sourceKeys: _([
130
- ...a.sourceKeys,
131
- ...c.map((d) => d.sourcePath)
135
+ sourceKeys: T([
136
+ ...i.sourceKeys,
137
+ ...a.map((l) => l.sourcePath)
132
138
  ])
133
139
  };
134
- }), S = /* @__PURE__ */ new Map();
135
- for (const a of g)
136
- for (const c of a.routes) {
137
- const d = S.get(c);
138
- d ? d.push(a.id) : S.set(c, [a.id]);
140
+ }), h = /* @__PURE__ */ new Map();
141
+ for (const i of y)
142
+ for (const a of i.routes) {
143
+ const l = h.get(a);
144
+ l ? l.push(i.id) : h.set(a, [i.id]);
139
145
  }
140
- const h = (a, c, d) => {
141
- const u = a.trim(), P = l[u] ?? (f.has(u) ? u : null);
142
- if (P) return P;
143
- const I = _(S.get(u) ?? []);
144
- return I.length === 1 ? I[0] : I.length > 1 ? (t.push({
145
- code: d === "source" ? "ambiguous-edge-source" : "ambiguous-edge-target",
146
+ const x = (i, a, l) => {
147
+ const p = i.trim(), I = d[p] ?? (u.has(p) ? p : null);
148
+ if (I) return I;
149
+ const N = T(h.get(p) ?? []);
150
+ return N.length === 1 ? N[0] : N.length > 1 ? (t.push({
151
+ code: l === "source" ? "ambiguous-edge-source" : "ambiguous-edge-target",
146
152
  severity: "error",
147
- message: `Storyboard edge "${c}" references an ambiguous ${d} route.`,
148
- edgeId: c,
149
- screenId: u || void 0
153
+ message: `Storyboard edge "${a}" references an ambiguous ${l} route.`,
154
+ edgeId: a,
155
+ screenId: p || void 0
150
156
  }), null) : (t.push({
151
- code: d === "source" ? "unknown-edge-source" : "unknown-edge-target",
157
+ code: l === "source" ? "unknown-edge-source" : "unknown-edge-target",
152
158
  severity: "error",
153
- message: `Storyboard edge "${c}" references an unknown ${d}.`,
154
- edgeId: c,
155
- screenId: u || void 0
159
+ message: `Storyboard edge "${a}" references an unknown ${l}.`,
160
+ edgeId: a,
161
+ screenId: p || void 0
156
162
  }), null);
157
- }, x = [], y = /* @__PURE__ */ new Map(), A = [
163
+ }, S = [], E = /* @__PURE__ */ new Map(), f = [
158
164
  ["explicit", e.explicitEdges ?? []],
159
165
  ["inferred", e.inferredEdges ?? []]
160
166
  ];
161
- let m = 0;
162
- for (const [a, c] of A)
163
- for (const d of c) {
164
- const u = Nt(d, m);
165
- m += 1;
166
- const P = h(d.from, u, "source"), I = h(d.to, u, "target");
167
- if (!P || !I || P === I) continue;
168
- const D = `${P}\0${I}`, R = y.get(D);
169
- if (R) {
170
- if (!R.sourceEdgeIds.includes(u)) {
171
- const C = {
172
- ...R,
173
- sourceEdgeIds: _([
174
- ...R.sourceEdgeIds,
175
- u
176
- ])
177
- };
178
- y.set(D, C);
179
- const w = x.indexOf(R);
180
- w >= 0 && (x[w] = C);
181
- }
167
+ let O = 0;
168
+ for (const [i, a] of f)
169
+ for (const l of a) {
170
+ const p = Rt(l, O);
171
+ O += 1;
172
+ const I = x(l.from, p, "source"), N = x(l.to, p, "target");
173
+ if (!I || !N || I === N) continue;
174
+ const M = g(l.fromScope, I), q = g(l.toScope, N), C = `${I}\0${N}`, w = E.get(C);
175
+ if (w) {
176
+ const z = {
177
+ ...w,
178
+ fromNodeIds: T([
179
+ ...w.fromNodeIds ?? [w.from],
180
+ ...M
181
+ ]),
182
+ toNodeIds: T([
183
+ ...w.toNodeIds ?? [w.to],
184
+ ...q
185
+ ]),
186
+ sourceEdgeIds: T([
187
+ ...w.sourceEdgeIds,
188
+ p
189
+ ])
190
+ };
191
+ E.set(C, z);
192
+ const G = S.indexOf(w);
193
+ G >= 0 && (S[G] = z);
182
194
  continue;
183
195
  }
184
- const K = {
185
- id: u,
186
- from: P,
187
- to: I,
188
- kind: ((X = d.kind) == null ? void 0 : X.trim()) || void 0,
189
- label: ((z = d.label) == null ? void 0 : z.trim()) || void 0,
190
- origin: a,
191
- sourceEdgeIds: [u]
196
+ const R = {
197
+ id: p,
198
+ from: I,
199
+ to: N,
200
+ fromNodeIds: M,
201
+ toNodeIds: q,
202
+ kind: ((_ = l.kind) == null ? void 0 : _.trim()) || void 0,
203
+ label: ((J = l.label) == null ? void 0 : J.trim()) || void 0,
204
+ origin: i,
205
+ sourceEdgeIds: [p]
192
206
  };
193
- y.set(D, K), x.push(K);
207
+ E.set(C, R), S.push(R);
194
208
  }
195
- x.sort(
196
- (a, c) => `${a.from}:${a.to}:${a.id}`.localeCompare(`${c.from}:${c.to}:${c.id}`)
209
+ S.sort(
210
+ (i, a) => `${i.from}:${i.to}:${i.id}`.localeCompare(`${a.from}:${a.to}:${a.id}`)
197
211
  );
198
- const k = /* @__PURE__ */ new Map(), $ = /* @__PURE__ */ new Map();
199
- for (const a of x) {
200
- const c = $.get(a.from);
201
- c ? c.push(a) : $.set(a.from, [a]);
202
- const d = k.get(a.to);
203
- d ? d.push(a) : k.set(a.to, [a]);
212
+ const D = /* @__PURE__ */ new Map(), k = /* @__PURE__ */ new Map();
213
+ for (const i of S) {
214
+ for (const a of i.fromNodeIds ?? [i.from]) {
215
+ const l = k.get(a);
216
+ l ? l.push(i) : k.set(a, [i]);
217
+ }
218
+ for (const a of i.toNodeIds ?? [i.to]) {
219
+ const l = D.get(a);
220
+ l ? l.push(i) : D.set(a, [i]);
221
+ }
204
222
  }
205
223
  const F = [];
206
- for (const a of e.startScreenIds ?? []) {
207
- const c = a.trim(), d = l[c] ?? (f.has(c) ? c : null);
208
- if (!d) {
224
+ for (const i of e.startScreenIds ?? []) {
225
+ const a = i.trim(), l = d[a] ?? (u.has(a) ? a : null);
226
+ if (!l) {
209
227
  t.push({
210
228
  code: "unknown-start-screen",
211
229
  severity: "error",
212
- message: `Storyboard start references an unknown screen "${c}".`,
213
- screenId: c || void 0
230
+ message: `Storyboard start references an unknown screen "${a}".`,
231
+ screenId: a || void 0
214
232
  });
215
233
  continue;
216
234
  }
217
- F.push(d);
235
+ F.push(l);
218
236
  }
219
- const T = new Set(F);
220
- let j = _(F);
221
- j.length || (j = g.filter((a) => {
222
- var c;
223
- return (((c = k.get(a.id)) == null ? void 0 : c.length) ?? 0) === 0;
224
- }).map((a) => a.id).sort((a, c) => a.localeCompare(c))), !j.length && g.length && (j = [g[0].id]);
225
- const v = /* @__PURE__ */ new Set(), E = [...j];
226
- for (; E.length; ) {
227
- const a = E.shift();
228
- if (!v.has(a)) {
229
- v.add(a);
230
- for (const c of $.get(a) ?? []) E.push(c.to);
237
+ const Y = new Set(F);
238
+ let v = T(F);
239
+ v.length || (v = y.filter((i) => {
240
+ var a;
241
+ return (((a = D.get(i.id)) == null ? void 0 : a.length) ?? 0) === 0;
242
+ }).map((i) => i.id).sort((i, a) => i.localeCompare(a))), !v.length && y.length && (v = [y[0].id]);
243
+ const P = /* @__PURE__ */ new Set(), $ = [...v];
244
+ for (; $.length; ) {
245
+ const i = $.shift();
246
+ if (!P.has(i)) {
247
+ P.add(i);
248
+ for (const a of k.get(i) ?? [])
249
+ $.push(a.to), i === a.from && $.push(...a.toNodeIds ?? [a.to]);
231
250
  }
232
251
  }
233
- const M = g.filter((a) => {
234
- var d, u;
235
- const c = (((d = k.get(a.id)) == null ? void 0 : d.length) ?? 0) === 0 && (((u = $.get(a.id)) == null ? void 0 : u.length) ?? 0) === 0 && !T.has(a.id);
236
- return !v.has(a.id) || c && g.length > 1;
252
+ const j = y.filter((i) => {
253
+ var l, p;
254
+ const a = (((l = D.get(i.id)) == null ? void 0 : l.length) ?? 0) === 0 && (((p = k.get(i.id)) == null ? void 0 : p.length) ?? 0) === 0 && !Y.has(i.id);
255
+ return !P.has(i.id) || a && y.length > 1;
237
256
  });
238
- for (const a of M)
239
- for (const c of a.screenIds)
257
+ for (const i of j)
258
+ for (const a of i.screenIds)
240
259
  t.push({
241
260
  code: "disconnected-screen",
242
261
  severity: "warning",
243
- message: `Storyboard screen "${c}" is not connected to a graph branch.`,
244
- screenId: c,
245
- nodeId: a.id
262
+ message: `Storyboard screen "${a}" is not connected to a graph branch.`,
263
+ screenId: a,
264
+ nodeId: i.id
246
265
  });
247
- const B = /* @__PURE__ */ new Map();
248
- for (const a of g)
249
- for (const c of a.sourceKeys) {
250
- const d = B.get(c) ?? {
266
+ const L = /* @__PURE__ */ new Map();
267
+ for (const i of y)
268
+ for (const a of i.sourceKeys) {
269
+ const l = L.get(a) ?? {
251
270
  nodeIds: /* @__PURE__ */ new Set(),
252
271
  screenIds: /* @__PURE__ */ new Set()
253
272
  };
254
- d.nodeIds.add(a.id);
255
- for (const u of a.screenIds) d.screenIds.add(u);
256
- B.set(c, d);
273
+ l.nodeIds.add(i.id);
274
+ for (const p of i.screenIds) l.screenIds.add(p);
275
+ L.set(a, l);
257
276
  }
258
- const Z = [...B.entries()].map(([a, c]) => ({
259
- sourceKey: a,
260
- nodeIds: [...c.nodeIds].sort((d, u) => d.localeCompare(u)),
261
- screenIds: [...c.screenIds].sort((d, u) => d.localeCompare(u)),
262
- shared: c.nodeIds.size > 1
263
- })).sort((a, c) => a.sourceKey.localeCompare(c.sourceKey)), re = g.map((a) => {
264
- const c = [...$.get(a.id) ?? []].sort(
265
- (d, u) => d.id.localeCompare(u.id)
277
+ const re = [...L.entries()].map(([i, a]) => ({
278
+ sourceKey: i,
279
+ nodeIds: [...a.nodeIds].sort((l, p) => l.localeCompare(p)),
280
+ screenIds: [...a.screenIds].sort((l, p) => l.localeCompare(p)),
281
+ shared: a.nodeIds.size > 1
282
+ })).sort((i, a) => i.sourceKey.localeCompare(a.sourceKey)), oe = y.map((i) => {
283
+ const a = [...k.get(i.id) ?? []].sort(
284
+ (l, p) => l.id.localeCompare(p.id)
266
285
  );
267
286
  return {
268
- nodeId: a.id,
269
- edgeIds: c.map((d) => d.id),
270
- targetNodeIds: _(c.map((d) => d.to))
287
+ nodeId: i.id,
288
+ edgeIds: a.map((l) => l.id),
289
+ targetNodeIds: T(a.map((l) => l.to))
271
290
  };
272
- }).filter((a) => a.targetNodeIds.length > 1).sort((a, c) => a.nodeId.localeCompare(c.nodeId)), ee = new Set(
273
- g.flatMap((a) => a.scenarioIds)
274
- ), oe = new Set(
275
- (e.nonVisualScenarioIds ?? []).map((a) => a.trim())
276
- ), H = _(
277
- (e.scenarios ?? []).map((a) => a.id)
278
- ), W = H.filter(
279
- (a) => !ee.has(a) && !oe.has(a)
291
+ }).filter((i) => i.targetNodeIds.length > 1).sort((i, a) => i.nodeId.localeCompare(a.nodeId)), Z = new Set(
292
+ y.flatMap((i) => i.scenarioIds)
293
+ ), K = new Set(
294
+ (e.nonVisualScenarioIds ?? []).map((i) => i.trim())
295
+ ), Q = T(
296
+ (e.scenarios ?? []).map((i) => i.id)
297
+ ), U = Q.filter(
298
+ (i) => !Z.has(i) && !K.has(i)
280
299
  );
281
- for (const a of W)
300
+ for (const i of U)
282
301
  t.push({
283
302
  code: "missing-code-scenario",
284
303
  severity: "warning",
285
- message: `Code scenario "${a}" is not represented in the storyboard.`,
286
- scenarioId: a
304
+ message: `Code scenario "${i}" is not represented in the storyboard.`,
305
+ scenarioId: i
287
306
  });
288
307
  t.sort(
289
- (a, c) => _e(a).localeCompare(_e(c))
308
+ (i, a) => _e(i).localeCompare(_e(a))
290
309
  );
291
- const G = _(
292
- M.flatMap((a) => a.screenIds)
293
- ), L = {
310
+ const V = T(
311
+ j.flatMap((i) => i.screenIds)
312
+ ), ee = {
294
313
  screens: o.length,
295
- canonicalNodes: g.length,
296
- mergedScreens: Math.max(0, o.length - g.length),
297
- edges: x.length,
298
- connectedNodes: g.length - M.length,
299
- disconnectedScreens: G,
300
- codeScenarios: H.length,
301
- representedScenarios: H.filter(
302
- (a) => ee.has(a)
314
+ canonicalNodes: y.length,
315
+ mergedScreens: Math.max(0, o.length - y.length),
316
+ edges: S.length,
317
+ connectedNodes: y.length - j.length,
318
+ disconnectedScreens: V,
319
+ codeScenarios: Q.length,
320
+ representedScenarios: Q.filter(
321
+ (i) => Z.has(i)
303
322
  ).length,
304
- missingScenarios: W,
305
- complete: G.length === 0 && W.length === 0 && !t.some((a) => a.severity === "error") && s.size === 0
323
+ missingScenarios: U,
324
+ complete: V.length === 0 && U.length === 0 && !t.some((i) => i.severity === "error") && s.size === 0
306
325
  };
307
326
  return {
308
327
  version: 1,
309
- nodes: g,
310
- edges: x,
328
+ nodes: y,
329
+ edges: S,
311
330
  aliases: Object.fromEntries(
312
- Object.entries(l).sort(([a], [c]) => a.localeCompare(c))
331
+ Object.entries(d).sort(([i], [a]) => i.localeCompare(a))
313
332
  ),
314
- sourceGroups: Z,
315
- startNodeIds: j,
316
- branches: re,
333
+ sourceGroups: re,
334
+ startNodeIds: v,
335
+ branches: oe,
317
336
  warnings: t,
318
- coverage: L
337
+ coverage: ee
319
338
  };
320
339
  }
321
- function $t(e) {
340
+ function Ot(e) {
322
341
  return e ? JSON.parse(JSON.stringify(e)) : void 0;
323
342
  }
324
- function me(e) {
325
- if (Array.isArray(e)) return e.map(me);
343
+ function pe(e) {
344
+ if (Array.isArray(e)) return e.map(pe);
326
345
  if (e && typeof e == "object") {
327
- const t = Object.entries(e).filter(([, o]) => o !== void 0).sort(([o], [n]) => o.localeCompare(n)).map(([o, n]) => [o, me(n)]).filter(([, o]) => o !== void 0);
346
+ const t = Object.entries(e).filter(([, o]) => o !== void 0).sort(([o], [r]) => o.localeCompare(r)).map(([o, r]) => [o, pe(r)]).filter(([, o]) => o !== void 0);
328
347
  return t.length ? Object.fromEntries(t) : void 0;
329
348
  }
330
349
  return e;
331
350
  }
332
351
  function je(e) {
333
- return JSON.stringify(me(e ?? null));
352
+ return JSON.stringify(pe(e ?? null));
334
353
  }
335
- function Mt(e) {
354
+ function $t(e) {
336
355
  return !!(e && typeof e == "object" && !Array.isArray(e));
337
356
  }
338
- function V(e) {
357
+ function H(e) {
339
358
  const t = e == null ? void 0 : e.trim();
340
359
  if (!t) return null;
341
360
  let o = t;
@@ -349,92 +368,98 @@ function V(e) {
349
368
  function Ve(e) {
350
369
  return `source-route:${encodeURIComponent(e)}`;
351
370
  }
352
- function Re(e, t) {
353
- const o = e.split("/").filter(Boolean), n = t.split("/").filter(Boolean);
354
- let r = 0;
371
+ function Ne(e, t) {
372
+ const o = e.split("/").filter(Boolean), r = t.split("/").filter(Boolean);
373
+ let n = 0;
355
374
  for (let s = 0; s < o.length; s += 1) {
356
- const i = o[s];
357
- if (i === "*" || i.startsWith("*")) return !0;
358
- const l = n[r];
359
- if (!(i.endsWith("?") && l == null)) {
360
- if (l == null || !i.startsWith(":") && i !== l) return !1;
361
- r += 1;
375
+ const c = o[s];
376
+ if (c === "*" || c.startsWith("*")) return !0;
377
+ const d = r[n];
378
+ if (!(c.endsWith("?") && d == null)) {
379
+ if (d == null || !c.startsWith(":") && c !== d) return !1;
380
+ n += 1;
362
381
  }
363
382
  }
364
- return r === n.length;
383
+ return n === r.length;
365
384
  }
366
- function Be(e, t) {
367
- const o = V(e);
368
- if (!o) return [];
369
- const n = t.get(o);
370
- return n && !/[:*]/.test(o) ? [n] : [
371
- ...new Set(
372
- [...t.entries()].filter(([r]) => Re(o, r)).map(([, r]) => r)
373
- )
374
- ].sort((r, s) => r.localeCompare(s));
385
+ function Be(e, t, o) {
386
+ const r = H(e);
387
+ if (!r) return [];
388
+ const n = t.get(r);
389
+ return n && !/[:*]/.test(r) ? [
390
+ {
391
+ representativeId: n,
392
+ screenIds: o.get(r) ?? [n]
393
+ }
394
+ ] : [...t.entries()].filter(([s]) => Ne(r, s)).map(([s, c]) => ({
395
+ representativeId: c,
396
+ screenIds: o.get(s) ?? [c]
397
+ })).sort((s, c) => s.representativeId.localeCompare(c.representativeId));
375
398
  }
376
399
  function Dt(e) {
377
400
  var o;
378
401
  const t = /* @__PURE__ */ new Map();
379
- for (const n of e ?? []) {
380
- const r = V(n.path);
381
- !r || t.has(r) || t.set(r, {
382
- id: Ve(r),
383
- name: r,
402
+ for (const r of e ?? []) {
403
+ const n = H(r.path);
404
+ !n || t.has(n) || t.set(n, {
405
+ id: Ve(n),
406
+ name: n,
384
407
  section: "Source routes",
385
- codeName: ((o = n.id) == null ? void 0 : o.trim()) || void 0
408
+ codeName: ((o = r.id) == null ? void 0 : o.trim()) || void 0
386
409
  });
387
410
  }
388
- return [...t.values()].sort((n, r) => n.id.localeCompare(r.id));
389
- }
390
- function kt(e, t, o) {
391
- return (e ?? []).flatMap((n, r) => {
392
- var g, S, h;
393
- const s = (g = n.from) == null ? void 0 : g.trim(), i = (S = n.to) == null ? void 0 : S.trim();
394
- if (!s || !i || n.unresolvedTarget) return [];
395
- const l = o.has(s) ? [s] : Be(s, t), f = o.has(i) ? [i] : Be(i, t);
396
- if (!l.length || !f.length) return [];
397
- const p = ((h = n.id) == null ? void 0 : h.trim()) || `discovery-edge:${r + 1}`;
398
- return l.flatMap(
399
- (x, y) => f.map((A, m) => {
400
- var k, $;
411
+ return [...t.values()].sort((r, n) => r.id.localeCompare(n.id));
412
+ }
413
+ function kt(e, t, o, r) {
414
+ return (e ?? []).flatMap((n, s) => {
415
+ var y, h, x;
416
+ const c = (y = n.from) == null ? void 0 : y.trim(), d = (h = n.to) == null ? void 0 : h.trim();
417
+ if (!c || !d || n.unresolvedTarget) return [];
418
+ const u = r.has(c) ? [{ representativeId: c, screenIds: [c] }] : Be(c, t, o), g = r.has(d) ? [{ representativeId: d, screenIds: [d] }] : Be(d, t, o);
419
+ if (!u.length || !g.length) return [];
420
+ const m = ((x = n.id) == null ? void 0 : x.trim()) || `discovery-edge:${s + 1}`;
421
+ return u.flatMap(
422
+ (S, E) => g.map((f, O) => {
423
+ var D, k;
401
424
  return {
402
- id: l.length === 1 && f.length === 1 ? p : `${p}:${y + 1}:${m + 1}`,
403
- from: x,
404
- to: A,
405
- kind: ((k = n.kind) == null ? void 0 : k.trim()) || void 0,
406
- label: (($ = n.label) == null ? void 0 : $.trim()) || void 0
425
+ id: u.length === 1 && g.length === 1 ? m : `${m}:${E + 1}:${O + 1}`,
426
+ from: S.representativeId,
427
+ to: f.representativeId,
428
+ fromScope: S.screenIds,
429
+ toScope: f.screenIds,
430
+ kind: ((D = n.kind) == null ? void 0 : D.trim()) || void 0,
431
+ label: ((k = n.label) == null ? void 0 : k.trim()) || void 0
407
432
  };
408
433
  })
409
434
  );
410
435
  });
411
436
  }
412
437
  function Ft(e, t, o) {
413
- const n = V(e.route);
414
- if (!n) return [];
415
- const r = t.filter(
416
- (l) => {
417
- const f = V(l.route);
418
- return f ? Re(f, n) : !1;
438
+ const r = H(e.route);
439
+ if (!r) return [];
440
+ const n = t.filter(
441
+ (d) => {
442
+ const u = H(d.route);
443
+ return u ? Ne(u, r) : !1;
419
444
  }
420
445
  );
421
- if (!r.length) return [];
446
+ if (!n.length) return [];
422
447
  const s = je(
423
448
  Ze(o, e.environment)
424
- ), i = r.filter(
425
- (l) => je(l.environment) === s
449
+ ), c = n.filter(
450
+ (d) => je(d.environment) === s
426
451
  );
427
452
  return [
428
453
  ...new Set(
429
- i.map((l) => {
430
- var f;
431
- return (f = l.scenarioId) == null ? void 0 : f.trim();
432
- }).filter((l) => !!l)
454
+ c.map((d) => {
455
+ var u;
456
+ return (u = d.scenarioId) == null ? void 0 : u.trim();
457
+ }).filter((d) => !!d)
433
458
  )
434
- ].sort((l, f) => l.localeCompare(f));
459
+ ].sort((d, u) => d.localeCompare(u));
435
460
  }
436
461
  function Tt(e, t) {
437
- const o = e.some((s) => s.importKind != null), n = t.candidates ?? [], r = We(t);
462
+ const o = e.some((s) => s.importKind != null), r = t.candidates ?? [], n = We(t);
438
463
  return e.filter(
439
464
  (s) => o ? s.importKind === "screens" : !!s.route
440
465
  ).map((s) => ({
@@ -455,41 +480,56 @@ function Tt(e, t) {
455
480
  scenario: s.scenario,
456
481
  state: s.state,
457
482
  scenarioId: s.scenarioId,
458
- scenarioIds: Ft(s, n, r),
483
+ scenarioIds: Ft(s, r, n),
459
484
  interactions: s.interactions,
460
485
  environment: s.environment,
461
486
  preset: s.preset,
462
487
  assertions: s.assertions,
463
- sourcePath: [...s.sourcePaths ?? []].filter(Boolean).sort((i, l) => i.localeCompare(l))[0]
488
+ sourcePath: [...s.sourcePaths ?? []].filter(Boolean).sort((c, d) => c.localeCompare(d))[0]
464
489
  }));
465
490
  }
466
491
  function we(e, t) {
467
- var l, f, p, g;
468
- const o = (((l = e.interactions) == null ? void 0 : l.length) ?? 0) - (((f = t.interactions) == null ? void 0 : f.length) ?? 0);
492
+ var d, u, g, m;
493
+ const o = (((d = e.interactions) == null ? void 0 : d.length) ?? 0) - (((u = t.interactions) == null ? void 0 : u.length) ?? 0);
469
494
  if (o !== 0) return o;
470
- const n = (p = e.scenarioIds) != null && p.includes("environment:baseline") ? 0 : 1, r = (g = t.scenarioIds) != null && g.includes("environment:baseline") ? 0 : 1;
471
- if (n !== r) return n - r;
472
- const s = !e.environment && !e.preset ? 0 : 1, i = !t.environment && !t.preset ? 0 : 1;
473
- return s !== i ? s - i : e.id.localeCompare(t.id);
495
+ const r = (g = e.scenarioIds) != null && g.includes("environment:baseline") ? 0 : 1, n = (m = t.scenarioIds) != null && m.includes("environment:baseline") ? 0 : 1;
496
+ if (r !== n) return r - n;
497
+ const s = !e.environment && !e.preset ? 0 : 1, c = !t.environment && !t.preset ? 0 : 1;
498
+ return s !== c ? s - c : e.id.localeCompare(t.id);
474
499
  }
475
500
  function zt(e) {
476
501
  const t = /* @__PURE__ */ new Map();
477
502
  for (const o of e) {
478
- const n = V(o.route);
479
- if (!n) continue;
480
- const r = t.get(n);
481
- r ? r.push(o) : t.set(n, [o]);
503
+ const r = H(o.route);
504
+ if (!r) continue;
505
+ const n = t.get(r);
506
+ n ? n.push(o) : t.set(r, [o]);
482
507
  }
483
508
  return new Map(
484
- [...t.entries()].map(([o, n]) => {
485
- const r = [...n].sort(we);
486
- return [o, r[0].id];
509
+ [...t.entries()].map(([o, r]) => {
510
+ const n = [...r].sort(we);
511
+ return [o, n[0].id];
487
512
  })
488
513
  );
489
514
  }
490
515
  function _t(e) {
516
+ const t = /* @__PURE__ */ new Map();
517
+ for (const o of e) {
518
+ const r = H(o.route);
519
+ if (!r) continue;
520
+ const n = t.get(r);
521
+ n ? n.push(o.id) : t.set(r, [o.id]);
522
+ }
523
+ return new Map(
524
+ [...t.entries()].map(([o, r]) => [
525
+ o,
526
+ [...new Set(r)].sort((n, s) => n.localeCompare(s))
527
+ ])
528
+ );
529
+ }
530
+ function jt(e) {
491
531
  return e.action === "wait" ? null : JSON.stringify(
492
- me({
532
+ pe({
493
533
  action: e.action,
494
534
  selector: e.selector,
495
535
  text: e.text,
@@ -504,243 +544,254 @@ function _t(e) {
504
544
  );
505
545
  }
506
546
  function Je(e) {
507
- return (e.interactions ?? []).map(_t).filter((t) => t != null);
508
- }
509
- function jt(e, t) {
510
- return e.length < t.length && e.every((o, n) => o === t[n]);
547
+ return (e.interactions ?? []).map(jt).filter((t) => t != null);
511
548
  }
512
549
  function Bt(e, t) {
550
+ return e.length < t.length && e.every((o, r) => o === t[r]);
551
+ }
552
+ function Ut(e, t) {
513
553
  const o = /* @__PURE__ */ new Map();
514
- for (const n of e) {
515
- const r = V(n.route);
516
- if (!r) continue;
517
- const s = `${r}\0${Je(n).join("")}`, i = o.get(s);
518
- i ? i.push(n) : o.set(s, [n]);
554
+ for (const r of e) {
555
+ const n = H(r.route);
556
+ if (!n) continue;
557
+ const s = `${n}\0${Je(r).join("")}`, c = o.get(s);
558
+ c ? c.push(r) : o.set(s, [r]);
519
559
  }
520
- return [...o.values()].flatMap((n) => {
521
- if (n.length < 2) return [];
522
- const r = V(n[0].route), s = t.get(r), i = n.find((l) => l.id === s) ?? [...n].sort(we)[0];
523
- return n.filter((l) => l.id !== i.id).sort((l, f) => l.id.localeCompare(f.id)).map((l) => ({
524
- id: `discovery-variant:${encodeURIComponent(i.id)}:${encodeURIComponent(l.id)}`,
525
- from: i.id,
526
- to: l.id,
560
+ return [...o.values()].flatMap((r) => {
561
+ if (r.length < 2) return [];
562
+ const n = H(r[0].route), s = t.get(n), c = r.find((d) => d.id === s) ?? [...r].sort(we)[0];
563
+ return r.filter((d) => d.id !== c.id).sort((d, u) => d.id.localeCompare(u.id)).map((d) => ({
564
+ id: `discovery-variant:${encodeURIComponent(c.id)}:${encodeURIComponent(d.id)}`,
565
+ from: c.id,
566
+ to: d.id,
527
567
  kind: "variant"
528
568
  }));
529
569
  });
530
570
  }
531
- function Ut(e, t) {
571
+ function Ht(e, t) {
532
572
  const o = /* @__PURE__ */ new Map();
533
- for (const n of e) {
534
- const r = V(n.route);
535
- if (!r) continue;
536
- const s = o.get(r);
537
- s ? s.push(n) : o.set(r, [n]);
573
+ for (const r of e) {
574
+ const n = H(r.route);
575
+ if (!n) continue;
576
+ const s = o.get(n);
577
+ s ? s.push(r) : o.set(n, [r]);
538
578
  }
539
- return [...o.entries()].flatMap(([n, r]) => {
579
+ return [...o.entries()].flatMap(([r, n]) => {
540
580
  const s = new Map(
541
- r.map((f) => [f.id, Je(f)])
542
- ), i = t.get(n), l = r.find(
543
- (f) => f.id === i
581
+ n.map((u) => [u.id, Je(u)])
582
+ ), c = t.get(r), d = n.find(
583
+ (u) => u.id === c
544
584
  );
545
- return r.flatMap((f) => {
546
- const p = s.get(f.id);
547
- if (!p.length) return [];
548
- const S = r.filter(
549
- (h) => jt(
585
+ return n.flatMap((u) => {
586
+ const g = s.get(u.id);
587
+ if (!g.length) return [];
588
+ const y = n.filter(
589
+ (h) => Bt(
550
590
  s.get(h.id),
551
- p
591
+ g
552
592
  )
553
593
  ).sort((h, x) => {
554
- const y = s.get(x.id).length - s.get(h.id).length;
555
- if (y !== 0) return y;
556
- const A = h.flow && h.flow === f.flow ? 0 : 1, m = x.flow && x.flow === f.flow ? 0 : 1;
557
- if (A !== m) return A - m;
558
- const k = h.section && h.section === f.section ? 0 : 1, $ = x.section && x.section === f.section ? 0 : 1;
559
- if (k !== $) return k - $;
560
- const F = h.id === i ? 0 : 1, T = x.id === i ? 0 : 1;
561
- return F !== T ? F - T : we(h, x);
594
+ const S = s.get(x.id).length - s.get(h.id).length;
595
+ if (S !== 0) return S;
596
+ const E = h.flow && h.flow === u.flow ? 0 : 1, f = x.flow && x.flow === u.flow ? 0 : 1;
597
+ if (E !== f) return E - f;
598
+ const O = h.section && h.section === u.section ? 0 : 1, D = x.section && x.section === u.section ? 0 : 1;
599
+ if (O !== D) return O - D;
600
+ const k = h.id === c ? 0 : 1, F = x.id === c ? 0 : 1;
601
+ return k !== F ? k - F : we(h, x);
562
602
  })[0];
563
- return S ? [
603
+ return y ? [
564
604
  {
565
- id: `discovery-recipe:${encodeURIComponent(S.id)}:${encodeURIComponent(f.id)}`,
566
- from: S.id,
567
- to: f.id,
605
+ id: `discovery-recipe:${encodeURIComponent(y.id)}:${encodeURIComponent(u.id)}`,
606
+ from: y.id,
607
+ to: u.id,
568
608
  kind: "recipe-step"
569
609
  }
570
- ] : l && l.id !== f.id && s.get(l.id).join("") !== p.join("") ? [
610
+ ] : d && d.id !== u.id && s.get(d.id).join("") !== g.join("") ? [
571
611
  {
572
- id: `discovery-route-case:${encodeURIComponent(l.id)}:${encodeURIComponent(f.id)}`,
573
- from: l.id,
574
- to: f.id,
612
+ id: `discovery-route-case:${encodeURIComponent(d.id)}:${encodeURIComponent(u.id)}`,
613
+ from: d.id,
614
+ to: u.id,
575
615
  kind: "route-case"
576
616
  }
577
617
  ] : [];
578
618
  });
579
619
  });
580
620
  }
581
- function Ht(e) {
621
+ function qt(e) {
582
622
  var o;
583
623
  const t = /* @__PURE__ */ new Map();
584
- for (const n of e) {
585
- const r = (o = n.flow) == null ? void 0 : o.trim();
586
- if (!r) continue;
587
- const s = t.get(r);
588
- s ? s.push(n) : t.set(r, [n]);
624
+ for (const r of e) {
625
+ const n = (o = r.flow) == null ? void 0 : o.trim();
626
+ if (!n) continue;
627
+ const s = t.get(n);
628
+ s ? s.push(r) : t.set(n, [r]);
589
629
  }
590
- return [...t.values()].flatMap((n) => {
591
- const r = n[0], s = /* @__PURE__ */ new Map();
592
- for (const i of n) {
593
- const l = V(i.route);
594
- if (!l) continue;
595
- const f = s.get(l);
596
- f ? f.push(i) : s.set(l, [i]);
630
+ return [...t.values()].flatMap((r) => {
631
+ const n = r[0], s = /* @__PURE__ */ new Map();
632
+ for (const c of r) {
633
+ const d = H(c.route);
634
+ if (!d) continue;
635
+ const u = s.get(d);
636
+ u ? u.push(c) : s.set(d, [c]);
597
637
  }
598
- return s.size < 2 ? [] : [...s.values()].flatMap((i) => {
599
- const l = [...i].sort(
638
+ return s.size < 2 ? [] : [...s.values()].flatMap((c) => {
639
+ const d = [...c].sort(
600
640
  we
601
641
  )[0];
602
- return l.id === r.id ? [] : [
642
+ return d.id === n.id ? [] : [
603
643
  {
604
- id: `discovery-flow-route:${encodeURIComponent(r.id)}:${encodeURIComponent(l.id)}`,
605
- from: r.id,
606
- to: l.id,
644
+ id: `discovery-flow-route:${encodeURIComponent(n.id)}:${encodeURIComponent(d.id)}`,
645
+ from: n.id,
646
+ to: d.id,
607
647
  kind: "flow-route"
608
648
  }
609
649
  ];
610
650
  });
611
651
  });
612
652
  }
613
- function qt(e, t, o) {
614
- const n = new Set(
615
- (t.routes ?? []).map((r) => V(r.path)).filter((r) => !!r)
653
+ function Gt(e, t, o) {
654
+ const r = new Set(
655
+ (t.routes ?? []).map((n) => H(n.path)).filter((n) => !!n)
616
656
  );
617
- return e.map((r) => {
618
- const s = V(r.route);
619
- if (!s || o.get(s) !== r.id)
620
- return r;
621
- const i = [...n].filter(
622
- (l) => Re(l, s)
657
+ return e.map((n) => {
658
+ const s = H(n.route);
659
+ if (!s || o.get(s) !== n.id)
660
+ return n;
661
+ const c = [...r].filter(
662
+ (d) => Ne(d, s)
623
663
  );
624
- return i.length ? {
625
- ...r,
664
+ return c.length ? {
665
+ ...n,
626
666
  scenarioIds: [
627
667
  .../* @__PURE__ */ new Set([
628
- ...r.scenarioIds ?? [],
629
- ...i.map(Ve)
668
+ ...n.scenarioIds ?? [],
669
+ ...c.map(Ve)
630
670
  ])
631
- ].sort((l, f) => l.localeCompare(f))
632
- } : r;
671
+ ].sort((d, u) => d.localeCompare(u))
672
+ } : n;
633
673
  });
634
674
  }
635
- function Gt(e, t) {
636
- var p, g, S, h, x;
637
- const o = new Set(e.map((y) => y.id)), n = new Map(
638
- e.map((y, A) => [y.id, A])
639
- ), r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
640
- for (const y of o)
641
- r.set(y, /* @__PURE__ */ new Set()), s.set(y, /* @__PURE__ */ new Set()), i.set(y, /* @__PURE__ */ new Set());
642
- for (const y of t)
643
- !o.has(y.from) || !o.has(y.to) || ((p = r.get(y.to)) == null || p.add(y.from), (g = s.get(y.from)) == null || g.add(y.to), (S = i.get(y.from)) == null || S.add(y.to), (h = i.get(y.to)) == null || h.add(y.from));
644
- const l = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set();
645
- for (const y of o) {
646
- if (f.has(y)) continue;
647
- const A = [], m = [y];
648
- for (; m.length; ) {
649
- const v = m.shift();
650
- if (!f.has(v)) {
651
- f.add(v), A.push(v);
652
- for (const E of i.get(v) ?? [])
653
- f.has(E) || m.push(E);
675
+ function Kt(e, t) {
676
+ var g, m, y, h, x;
677
+ const o = new Set(e.map((S) => S.id)), r = new Map(
678
+ e.map((S, E) => [S.id, E])
679
+ ), n = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map();
680
+ for (const S of o)
681
+ n.set(S, /* @__PURE__ */ new Set()), s.set(S, /* @__PURE__ */ new Set()), c.set(S, /* @__PURE__ */ new Set());
682
+ for (const S of t) {
683
+ const E = [
684
+ ...(S.fromScope ?? [S.from]).map(
685
+ (f) => [f, S.to]
686
+ ),
687
+ ...(S.toScope ?? [S.to]).map(
688
+ (f) => [S.from, f]
689
+ )
690
+ ];
691
+ for (const [f, O] of E)
692
+ !o.has(f) || !o.has(O) || ((g = n.get(O)) == null || g.add(f), (m = s.get(f)) == null || m.add(O), (y = c.get(f)) == null || y.add(O), (h = c.get(O)) == null || h.add(f));
693
+ }
694
+ const d = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set();
695
+ for (const S of o) {
696
+ if (u.has(S)) continue;
697
+ const E = [], f = [S];
698
+ for (; f.length; ) {
699
+ const v = f.shift();
700
+ if (!u.has(v)) {
701
+ u.add(v), E.push(v);
702
+ for (const P of c.get(v) ?? [])
703
+ u.has(P) || f.push(P);
654
704
  }
655
705
  }
656
- if (A.length === 1 && (((x = i.get(A[0])) == null ? void 0 : x.size) ?? 0) === 0)
706
+ if (E.length === 1 && (((x = c.get(E[0])) == null ? void 0 : x.size) ?? 0) === 0)
657
707
  continue;
658
- const k = A.filter((v) => {
659
- var E;
660
- return (((E = r.get(v)) == null ? void 0 : E.size) ?? 0) === 0;
708
+ const O = E.filter((v) => {
709
+ var P;
710
+ return (((P = n.get(v)) == null ? void 0 : P.size) ?? 0) === 0;
661
711
  }).sort(
662
- (v, E) => (n.get(v) ?? Number.MAX_SAFE_INTEGER) - (n.get(E) ?? Number.MAX_SAFE_INTEGER) || v.localeCompare(E)
663
- ), $ = [...A].sort(
664
- (v, E) => (n.get(v) ?? Number.MAX_SAFE_INTEGER) - (n.get(E) ?? Number.MAX_SAFE_INTEGER) || v.localeCompare(E)
712
+ (v, P) => (r.get(v) ?? Number.MAX_SAFE_INTEGER) - (r.get(P) ?? Number.MAX_SAFE_INTEGER) || v.localeCompare(P)
713
+ ), D = [...E].sort(
714
+ (v, P) => (r.get(v) ?? Number.MAX_SAFE_INTEGER) - (r.get(P) ?? Number.MAX_SAFE_INTEGER) || v.localeCompare(P)
665
715
  )[0];
666
- if (!$) continue;
667
- const F = [$], T = /* @__PURE__ */ new Set(), j = (v) => {
668
- const E = [v];
669
- for (; E.length; ) {
670
- const M = E.shift();
671
- if (!T.has(M)) {
672
- T.add(M);
673
- for (const B of s.get(M) ?? [])
674
- T.has(B) || E.push(B);
716
+ if (!D) continue;
717
+ const k = [D], F = /* @__PURE__ */ new Set(), Y = (v) => {
718
+ const P = [v];
719
+ for (; P.length; ) {
720
+ const $ = P.shift();
721
+ if (!F.has($)) {
722
+ F.add($);
723
+ for (const j of s.get($) ?? [])
724
+ F.has(j) || P.push(j);
675
725
  }
676
726
  }
677
727
  };
678
- j($);
728
+ Y(D);
729
+ for (const v of O)
730
+ F.has(v) || (k.push(v), Y(v));
679
731
  for (const v of k)
680
- T.has(v) || (F.push(v), j(v));
681
- for (const v of F)
682
- l.add(v);
732
+ d.add(v);
683
733
  }
684
- return [...l].sort(
685
- (y, A) => (n.get(y) ?? Number.MAX_SAFE_INTEGER) - (n.get(A) ?? Number.MAX_SAFE_INTEGER) || y.localeCompare(A)
734
+ return [...d].sort(
735
+ (S, E) => (r.get(S) ?? Number.MAX_SAFE_INTEGER) - (r.get(E) ?? Number.MAX_SAFE_INTEGER) || S.localeCompare(E)
686
736
  );
687
737
  }
688
738
  function We(e) {
689
739
  var t, o;
690
- return $t(
740
+ return Ot(
691
741
  (o = (t = e.scenarios) == null ? void 0 : t.find(
692
- (n) => n.id === "environment:baseline"
742
+ (r) => r.id === "environment:baseline"
693
743
  )) == null ? void 0 : o.environment
694
744
  );
695
745
  }
696
- function Kt(e) {
746
+ function Vt(e) {
697
747
  const t = Tt(
698
748
  e.pages,
699
749
  e.manifest
700
- ), o = zt(t), n = qt(
750
+ ), o = zt(t), r = _t(t), n = Gt(
701
751
  t,
702
752
  e.manifest,
703
753
  o
704
- ), s = [
754
+ ), c = [
705
755
  ...kt(
706
756
  e.manifest.edges,
707
757
  o,
708
- new Set(n.map((i) => i.id))
758
+ r,
759
+ new Set(n.map((d) => d.id))
709
760
  ),
710
- ...Bt(n, o),
711
761
  ...Ut(n, o),
712
- ...Ht(n)
762
+ ...Ht(n, o),
763
+ ...qt(n)
713
764
  ];
714
- return Ot({
765
+ return Mt({
715
766
  screens: n,
716
767
  assets: e.assets,
717
768
  scenarios: Dt(e.manifest.routes),
718
- inferredEdges: s,
719
- startScreenIds: Gt(n, s)
769
+ inferredEdges: c,
770
+ startScreenIds: Kt(n, c)
720
771
  });
721
772
  }
722
773
  async function Le(e) {
723
- const o = await (e.fetcher ?? ((r, s) => fetch(r, s)))(e.endpoint, {
774
+ const o = await (e.fetcher ?? ((n, s) => fetch(n, s)))(e.endpoint, {
724
775
  headers: { accept: "application/json" },
725
776
  cache: "no-store",
726
777
  signal: e.signal
727
778
  });
728
779
  if (!o.ok)
729
780
  throw new Error(`Storyboard discovery failed (${o.status})`);
730
- const n = await o.json();
731
- if (!Mt(n))
781
+ const r = await o.json();
782
+ if (!$t(r))
732
783
  throw new Error("Storyboard discovery returned an invalid manifest.");
733
784
  return {
734
- manifest: n,
735
- baselineEnvironment: We(n),
736
- graph: Kt({
737
- manifest: n,
785
+ manifest: r,
786
+ baselineEnvironment: We(r),
787
+ graph: Vt({
788
+ manifest: r,
738
789
  pages: e.pages,
739
790
  assets: e.assets
740
791
  })
741
792
  };
742
793
  }
743
- async function fn(e) {
794
+ async function mn(e) {
744
795
  ne(null);
745
796
  try {
746
797
  const t = await Le(e);
@@ -749,20 +800,20 @@ async function fn(e) {
749
800
  throw ne(null), t;
750
801
  }
751
802
  }
752
- const pe = "var(--pygmalion-catalog-surface, #ffffff)", he = "var(--pygmalion-catalog-canvas, #f5f5f5)", Ee = "var(--pygmalion-catalog-border, #e5e7eb)", ye = "var(--pygmalion-catalog-text, #202124)", U = "var(--pygmalion-catalog-muted, #6b7280)", Vt = "var(--pygmalion-catalog-header, #11182f)", Jt = "var(--pygmalion-catalog-accent, #7c6cf2)";
753
- function gn({
803
+ const ge = "var(--pygmalion-catalog-surface, #ffffff)", he = "var(--pygmalion-catalog-canvas, #f5f5f5)", Ee = "var(--pygmalion-catalog-border, #e5e7eb)", ye = "var(--pygmalion-catalog-text, #202124)", B = "var(--pygmalion-catalog-muted, #6b7280)", Jt = "var(--pygmalion-catalog-header, #11182f)", Wt = "var(--pygmalion-catalog-accent, #7c6cf2)";
804
+ function pn({
754
805
  title: e,
755
806
  eyebrow: t,
756
807
  description: o,
757
- version: n,
758
- meta: r,
808
+ version: r,
809
+ meta: n,
759
810
  children: s,
760
- headerBackground: i = Vt,
761
- headerColor: l = "#ffffff",
762
- bodyBackground: f = pe,
763
- bodyGap: p = 40
811
+ headerBackground: c = Jt,
812
+ headerColor: d = "#ffffff",
813
+ bodyBackground: u = ge,
814
+ bodyGap: g = 40
764
815
  }) {
765
- return /* @__PURE__ */ N(
816
+ return /* @__PURE__ */ A(
766
817
  "section",
767
818
  {
768
819
  "data-pygmalion-catalog-document": "",
@@ -775,11 +826,11 @@ function gn({
775
826
  flexDirection: "column",
776
827
  overflow: "visible",
777
828
  color: ye,
778
- background: f,
829
+ background: u,
779
830
  fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif"
780
831
  },
781
832
  children: [
782
- /* @__PURE__ */ N(
833
+ /* @__PURE__ */ A(
783
834
  "header",
784
835
  {
785
836
  style: {
@@ -789,11 +840,11 @@ function gn({
789
840
  justifyContent: "space-between",
790
841
  gap: 48,
791
842
  padding: "44px 48px 48px",
792
- color: l,
793
- background: i
843
+ color: d,
844
+ background: c
794
845
  },
795
846
  children: [
796
- /* @__PURE__ */ N("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
847
+ /* @__PURE__ */ A("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
797
848
  t ? /* @__PURE__ */ b(
798
849
  "div",
799
850
  {
@@ -834,7 +885,7 @@ function gn({
834
885
  }
835
886
  ) : null
836
887
  ] }),
837
- n || r ? /* @__PURE__ */ N(
888
+ r || n ? /* @__PURE__ */ A(
838
889
  "div",
839
890
  {
840
891
  style: {
@@ -846,8 +897,8 @@ function gn({
846
897
  whiteSpace: "nowrap"
847
898
  },
848
899
  children: [
849
- n ? /* @__PURE__ */ b("span", { children: n }) : null,
850
- r ? /* @__PURE__ */ b("span", { children: r }) : null
900
+ r ? /* @__PURE__ */ b("span", { children: r }) : null,
901
+ n ? /* @__PURE__ */ b("span", { children: n }) : null
851
902
  ]
852
903
  }
853
904
  ) : null
@@ -863,9 +914,9 @@ function gn({
863
914
  display: "inline-flex",
864
915
  flexDirection: "column",
865
916
  alignItems: "flex-start",
866
- gap: p,
917
+ gap: g,
867
918
  padding: 48,
868
- background: f
919
+ background: u
869
920
  },
870
921
  children: s
871
922
  }
@@ -874,15 +925,15 @@ function gn({
874
925
  }
875
926
  );
876
927
  }
877
- function mn({
928
+ function gn({
878
929
  title: e,
879
930
  itemId: t,
880
931
  count: o,
881
- description: n,
882
- children: r,
932
+ description: r,
933
+ children: n,
883
934
  tone: s = "tinted"
884
935
  }) {
885
- return /* @__PURE__ */ N(
936
+ return /* @__PURE__ */ A(
886
937
  "section",
887
938
  {
888
939
  "data-pygmalion-catalog-section": "",
@@ -898,7 +949,7 @@ function mn({
898
949
  background: s === "tinted" ? he : "transparent"
899
950
  },
900
951
  children: [
901
- /* @__PURE__ */ N("header", { style: { display: "flex", alignItems: "baseline", gap: 8 }, children: [
952
+ /* @__PURE__ */ A("header", { style: { display: "flex", alignItems: "baseline", gap: 8 }, children: [
902
953
  /* @__PURE__ */ b(
903
954
  "h2",
904
955
  {
@@ -911,23 +962,23 @@ function mn({
911
962
  children: e
912
963
  }
913
964
  ),
914
- typeof o == "number" ? /* @__PURE__ */ b("span", { style: { color: U, fontSize: 11 }, children: o }) : null
965
+ typeof o == "number" ? /* @__PURE__ */ b("span", { style: { color: B, fontSize: 11 }, children: o }) : null
915
966
  ] }),
916
- n ? /* @__PURE__ */ b("div", { style: { marginTop: -10, color: U, fontSize: 11 }, children: n }) : null,
917
- r
967
+ r ? /* @__PURE__ */ b("div", { style: { marginTop: -10, color: B, fontSize: 11 }, children: r }) : null,
968
+ n
918
969
  ]
919
970
  }
920
971
  );
921
972
  }
922
- function pn({
973
+ function hn({
923
974
  rows: e,
924
975
  columns: t,
925
976
  cornerLabel: o,
926
- renderCell: n,
927
- renderRowLabel: r = (f) => f,
928
- renderColumnLabel: s = (f) => f,
929
- boundary: i = !0,
930
- cellStyle: l
977
+ renderCell: r,
978
+ renderRowLabel: n = (u) => u,
979
+ renderColumnLabel: s = (u) => u,
980
+ boundary: c = !0,
981
+ cellStyle: d
931
982
  }) {
932
983
  return /* @__PURE__ */ b(
933
984
  "div",
@@ -937,11 +988,11 @@ function pn({
937
988
  boxSizing: "border-box",
938
989
  display: "inline-block",
939
990
  width: "max-content",
940
- padding: i ? 16 : 0,
941
- border: i ? `1px dashed ${Jt}` : void 0,
942
- borderRadius: i ? 4 : void 0
991
+ padding: c ? 16 : 0,
992
+ border: c ? `1px dashed ${Wt}` : void 0,
993
+ borderRadius: c ? 4 : void 0
943
994
  },
944
- children: /* @__PURE__ */ N(
995
+ children: /* @__PURE__ */ A(
945
996
  "table",
946
997
  {
947
998
  style: {
@@ -950,13 +1001,13 @@ function pn({
950
1001
  borderSpacing: 0
951
1002
  },
952
1003
  children: [
953
- /* @__PURE__ */ b("thead", { children: /* @__PURE__ */ N("tr", { children: [
1004
+ /* @__PURE__ */ b("thead", { children: /* @__PURE__ */ A("tr", { children: [
954
1005
  /* @__PURE__ */ b(
955
1006
  "th",
956
1007
  {
957
1008
  style: {
958
1009
  padding: "0 16px 12px 0",
959
- color: U,
1010
+ color: B,
960
1011
  fontSize: 10,
961
1012
  fontWeight: 600,
962
1013
  textAlign: "left",
@@ -965,63 +1016,63 @@ function pn({
965
1016
  children: o
966
1017
  }
967
1018
  ),
968
- t.map((f) => /* @__PURE__ */ b(
1019
+ t.map((u) => /* @__PURE__ */ b(
969
1020
  "th",
970
1021
  {
971
1022
  style: {
972
1023
  padding: "0 16px 12px",
973
- color: U,
1024
+ color: B,
974
1025
  fontSize: 10,
975
1026
  fontWeight: 600,
976
1027
  textAlign: "center",
977
1028
  whiteSpace: "nowrap"
978
1029
  },
979
- children: s(f)
1030
+ children: s(u)
980
1031
  },
981
- f
1032
+ u
982
1033
  ))
983
1034
  ] }) }),
984
- /* @__PURE__ */ b("tbody", { children: e.map((f) => /* @__PURE__ */ N("tr", { children: [
1035
+ /* @__PURE__ */ b("tbody", { children: e.map((u) => /* @__PURE__ */ A("tr", { children: [
985
1036
  /* @__PURE__ */ b(
986
1037
  "th",
987
1038
  {
988
1039
  style: {
989
1040
  padding: "12px 16px 12px 0",
990
- color: U,
1041
+ color: B,
991
1042
  fontSize: 10,
992
1043
  fontWeight: 600,
993
1044
  textAlign: "left",
994
1045
  whiteSpace: "nowrap"
995
1046
  },
996
- children: r(f)
1047
+ children: n(u)
997
1048
  }
998
1049
  ),
999
- t.map((p) => /* @__PURE__ */ b(
1050
+ t.map((g) => /* @__PURE__ */ b(
1000
1051
  "td",
1001
1052
  {
1002
1053
  style: {
1003
1054
  padding: "12px 16px",
1004
1055
  textAlign: "center",
1005
1056
  verticalAlign: "middle",
1006
- ...l
1057
+ ...d
1007
1058
  },
1008
- children: n(f, p)
1059
+ children: r(u, g)
1009
1060
  },
1010
- p
1061
+ g
1011
1062
  ))
1012
- ] }, f)) })
1063
+ ] }, u)) })
1013
1064
  ]
1014
1065
  }
1015
1066
  )
1016
1067
  }
1017
1068
  );
1018
1069
  }
1019
- function Wt(e) {
1070
+ function Lt(e) {
1020
1071
  return e.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/[^\p{L}\p{N}]+/gu, "-").replace(/^-+|-+$/g, "").toLowerCase() || "page";
1021
1072
  }
1022
1073
  function Qe(e, t, o = "PygmalionCatalog") {
1023
- const n = (r) => Wt(r).replace(/-/g, "_");
1024
- return `${o}_${n(e)}_${n(t)}`;
1074
+ const r = (n) => Lt(n).replace(/-/g, "_");
1075
+ return `${o}_${r(e)}_${r(t)}`;
1025
1076
  }
1026
1077
  function Xe(e, t) {
1027
1078
  return {
@@ -1042,17 +1093,17 @@ function Ye(e) {
1042
1093
  t.add(o.id);
1043
1094
  }
1044
1095
  }
1045
- function Lt(e, t, o) {
1096
+ function Qt(e, t, o) {
1046
1097
  return typeof e == "function" ? e(t, o) : e;
1047
1098
  }
1048
- function Qt({
1099
+ function Xt({
1049
1100
  page: e,
1050
1101
  items: t,
1051
1102
  renderPreview: o,
1052
- secondaryLabel: n,
1053
- minimumColumnWidth: r
1103
+ secondaryLabel: r,
1104
+ minimumColumnWidth: n
1054
1105
  }) {
1055
- return /* @__PURE__ */ N(
1106
+ return /* @__PURE__ */ A(
1056
1107
  "section",
1057
1108
  {
1058
1109
  "data-pygmalion-catalog-page": e.id,
@@ -1067,9 +1118,9 @@ function Qt({
1067
1118
  fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif"
1068
1119
  },
1069
1120
  children: [
1070
- /* @__PURE__ */ N("header", { style: { marginBottom: 24 }, children: [
1121
+ /* @__PURE__ */ A("header", { style: { marginBottom: 24 }, children: [
1071
1122
  /* @__PURE__ */ b("h1", { style: { margin: 0, fontSize: 24, lineHeight: 1.35 }, children: e.name }),
1072
- /* @__PURE__ */ N("p", { style: { margin: "6px 0 0", color: U, fontSize: 13 }, children: [
1123
+ /* @__PURE__ */ A("p", { style: { margin: "6px 0 0", color: B, fontSize: 13 }, children: [
1073
1124
  t.length,
1074
1125
  " assets"
1075
1126
  ] })
@@ -1082,17 +1133,17 @@ function Qt({
1082
1133
  gridTemplateColumns: "repeat(6, max-content)",
1083
1134
  gap: 16
1084
1135
  },
1085
- children: t.map((s) => /* @__PURE__ */ N(
1136
+ children: t.map((s) => /* @__PURE__ */ A(
1086
1137
  "article",
1087
1138
  {
1088
1139
  "data-pygmalion-catalog-item": s.id,
1089
1140
  style: {
1090
- minWidth: r,
1091
- width: r,
1141
+ minWidth: n,
1142
+ width: n,
1092
1143
  padding: 16,
1093
1144
  border: `1px solid ${Ee}`,
1094
1145
  borderRadius: 12,
1095
- background: pe
1146
+ background: ge
1096
1147
  },
1097
1148
  children: [
1098
1149
  /* @__PURE__ */ b(
@@ -1123,13 +1174,13 @@ function Qt({
1123
1174
  children: s.name
1124
1175
  }
1125
1176
  ),
1126
- n ? /* @__PURE__ */ b("div", { style: { marginTop: 4, color: U, fontSize: 11, lineHeight: 1.45 }, children: n(s) }) : s.codeName ? /* @__PURE__ */ b(
1177
+ r ? /* @__PURE__ */ b("div", { style: { marginTop: 4, color: B, fontSize: 11, lineHeight: 1.45 }, children: r(s) }) : s.codeName ? /* @__PURE__ */ b(
1127
1178
  "div",
1128
1179
  {
1129
1180
  style: {
1130
1181
  marginTop: 4,
1131
1182
  overflow: "hidden",
1132
- color: U,
1183
+ color: B,
1133
1184
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
1134
1185
  fontSize: 11,
1135
1186
  textOverflow: "ellipsis",
@@ -1149,20 +1200,20 @@ function Qt({
1149
1200
  }
1150
1201
  );
1151
1202
  }
1152
- function hn(e) {
1203
+ function yn(e) {
1153
1204
  Ye(e.items);
1154
1205
  const t = /* @__PURE__ */ new Map();
1155
- for (const r of e.items) {
1156
- const s = e.pageFor(r), i = t.get(s.id);
1157
- if (i) {
1158
- if (i.page.name !== s.name || i.page.section !== s.section)
1206
+ for (const n of e.items) {
1207
+ const s = e.pageFor(n), c = t.get(s.id);
1208
+ if (c) {
1209
+ if (c.page.name !== s.name || c.page.section !== s.section)
1159
1210
  throw new Error(`Conflicting design catalog page descriptor: ${s.id}`);
1160
- i.items.push(r);
1211
+ c.items.push(n);
1161
1212
  continue;
1162
1213
  }
1163
1214
  t.set(s.id, {
1164
1215
  page: s,
1165
- items: [r],
1216
+ items: [n],
1166
1217
  registryName: Qe(
1167
1218
  e.kind,
1168
1219
  s.id,
@@ -1170,65 +1221,65 @@ function hn(e) {
1170
1221
  )
1171
1222
  });
1172
1223
  }
1173
- const o = {}, n = [];
1174
- for (const r of t.values()) {
1224
+ const o = {}, r = [];
1225
+ for (const n of t.values()) {
1175
1226
  const s = () => /* @__PURE__ */ b(
1176
- Qt,
1227
+ Xt,
1177
1228
  {
1178
- page: r.page,
1179
- items: r.items,
1229
+ page: n.page,
1230
+ items: n.items,
1180
1231
  renderPreview: e.renderPreview,
1181
1232
  secondaryLabel: e.secondaryLabel,
1182
1233
  minimumColumnWidth: e.minimumColumnWidth ?? 152
1183
1234
  }
1184
1235
  );
1185
- o[r.registryName] = {
1236
+ o[n.registryName] = {
1186
1237
  component: s,
1187
1238
  children: "none"
1188
1239
  };
1189
- const i = Lt(e.frame, r.page, r.items);
1190
- n.push({
1191
- ...r.page,
1192
- componentName: r.registryName,
1193
- width: (i == null ? void 0 : i.width) ?? 1,
1194
- height: (i == null ? void 0 : i.height) ?? 1,
1195
- frameSizeMode: i ? "fixed" : "content"
1240
+ const c = Qt(e.frame, n.page, n.items);
1241
+ r.push({
1242
+ ...n.page,
1243
+ componentName: n.registryName,
1244
+ width: (c == null ? void 0 : c.width) ?? 1,
1245
+ height: (c == null ? void 0 : c.height) ?? 1,
1246
+ frameSizeMode: c ? "fixed" : "content"
1196
1247
  });
1197
1248
  }
1198
1249
  return {
1199
1250
  registry: o,
1200
1251
  collection: {
1201
1252
  expectedCount: e.expectedCount ?? e.items.length,
1202
- assets: e.items.map((r) => Xe(r, e.pageFor(r).id)),
1203
- pages: n
1253
+ assets: e.items.map((n) => Xe(n, e.pageFor(n).id)),
1254
+ pages: r
1204
1255
  }
1205
1256
  };
1206
1257
  }
1207
- function Xt(e, t = 60) {
1208
- const o = Object.entries((e == null ? void 0 : e.props) ?? {}).filter(([, l]) => l.length > 0).sort(([l, f], [p, g]) => g.length - f.length || l.localeCompare(p)), n = o[0], r = o[1], s = Math.max(1, (n == null ? void 0 : n[1].length) ?? 1), i = r == null ? void 0 : r[1].slice(0, Math.max(1, Math.floor(t / s)));
1258
+ function Yt(e, t = 60) {
1259
+ const o = Object.entries((e == null ? void 0 : e.props) ?? {}).filter(([, d]) => d.length > 0).sort(([d, u], [g, m]) => m.length - u.length || d.localeCompare(g)), r = o[0], n = o[1], s = Math.max(1, (r == null ? void 0 : r[1].length) ?? 1), c = n == null ? void 0 : n[1].slice(0, Math.max(1, Math.floor(t / s)));
1209
1260
  return {
1210
- row: n,
1211
- column: r ? [r[0], i ?? []] : void 0,
1212
- fixed: o.slice(2).map(([l, f]) => [l, f[0]]),
1261
+ row: r,
1262
+ column: n ? [n[0], c ?? []] : void 0,
1263
+ fixed: o.slice(2).map(([d, u]) => [d, u[0]]),
1213
1264
  additional: o.slice(2)
1214
1265
  };
1215
1266
  }
1216
- function Yt(e, t, o, n) {
1267
+ function Zt(e, t, o, r) {
1217
1268
  return {
1218
1269
  ...e.defaultProps,
1219
1270
  ...Object.fromEntries(t.fixed),
1220
1271
  ...t.row && o ? { [t.row[0]]: o } : {},
1221
- ...t.column && n ? { [t.column[0]]: n } : {}
1272
+ ...t.column && r ? { [t.column[0]]: r } : {}
1222
1273
  };
1223
1274
  }
1224
- function Zt({
1275
+ function en({
1225
1276
  item: e,
1226
1277
  entry: t,
1227
1278
  maxVariantCells: o
1228
1279
  }) {
1229
- var l, f;
1280
+ var d, u;
1230
1281
  if (!t)
1231
- return /* @__PURE__ */ N(
1282
+ return /* @__PURE__ */ A(
1232
1283
  "section",
1233
1284
  {
1234
1285
  "data-pygmalion-catalog-component": e.id,
@@ -1243,12 +1294,12 @@ function Zt({
1243
1294
  },
1244
1295
  children: [
1245
1296
  /* @__PURE__ */ b("strong", { children: e.name }),
1246
- /* @__PURE__ */ b("p", { style: { color: U }, children: "The component is not registered." })
1297
+ /* @__PURE__ */ b("p", { style: { color: B }, children: "The component is not registered." })
1247
1298
  ]
1248
1299
  }
1249
1300
  );
1250
- const n = Xt(t, o), r = ((l = n.row) == null ? void 0 : l[1]) ?? [void 0], s = ((f = n.column) == null ? void 0 : f[1]) ?? [void 0], i = t.component;
1251
- return /* @__PURE__ */ N(
1301
+ const r = Yt(t, o), n = ((d = r.row) == null ? void 0 : d[1]) ?? [void 0], s = ((u = r.column) == null ? void 0 : u[1]) ?? [void 0], c = t.component;
1302
+ return /* @__PURE__ */ A(
1252
1303
  "section",
1253
1304
  {
1254
1305
  "data-pygmalion-catalog-component": e.id,
@@ -1263,9 +1314,9 @@ function Zt({
1263
1314
  fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif"
1264
1315
  },
1265
1316
  children: [
1266
- /* @__PURE__ */ N("header", { style: { marginBottom: 24 }, children: [
1317
+ /* @__PURE__ */ A("header", { style: { marginBottom: 24 }, children: [
1267
1318
  /* @__PURE__ */ b("h1", { style: { margin: 0, fontSize: 24 }, children: e.name }),
1268
- e.sourcePath ? /* @__PURE__ */ b("p", { style: { margin: "6px 0 0", color: U, fontSize: 12 }, children: e.sourcePath }) : null
1319
+ e.sourcePath ? /* @__PURE__ */ b("p", { style: { margin: "6px 0 0", color: B, fontSize: 12 }, children: e.sourcePath }) : null
1269
1320
  ] }),
1270
1321
  /* @__PURE__ */ b(
1271
1322
  "div",
@@ -1275,13 +1326,13 @@ function Zt({
1275
1326
  gridTemplateColumns: `repeat(${s.length}, max-content)`,
1276
1327
  gap: 12
1277
1328
  },
1278
- children: r.flatMap(
1279
- (p) => s.map((g) => {
1280
- const S = Yt(t, n, p, g), h = [
1281
- n.row && p ? `${n.row[0]}=${p}` : "",
1282
- n.column && g ? `${n.column[0]}=${g}` : ""
1329
+ children: n.flatMap(
1330
+ (g) => s.map((m) => {
1331
+ const y = Zt(t, r, g, m), h = [
1332
+ r.row && g ? `${r.row[0]}=${g}` : "",
1333
+ r.column && m ? `${r.column[0]}=${m}` : ""
1283
1334
  ].filter(Boolean).join(" · ");
1284
- return /* @__PURE__ */ N(
1335
+ return /* @__PURE__ */ A(
1285
1336
  "article",
1286
1337
  {
1287
1338
  style: {
@@ -1289,90 +1340,90 @@ function Zt({
1289
1340
  padding: 16,
1290
1341
  border: `1px solid ${Ee}`,
1291
1342
  borderRadius: 10,
1292
- background: pe
1343
+ background: ge
1293
1344
  },
1294
1345
  children: [
1295
- h ? /* @__PURE__ */ b("div", { style: { marginBottom: 12, color: U, fontSize: 11 }, children: h }) : null,
1346
+ h ? /* @__PURE__ */ b("div", { style: { marginBottom: 12, color: B, fontSize: 11 }, children: h }) : null,
1296
1347
  /* @__PURE__ */ b("div", { style: { display: "flex", minHeight: 44, alignItems: "center" }, children: Te(
1297
- i,
1298
- S,
1348
+ c,
1349
+ y,
1299
1350
  t.children === "text" ? t.defaultChildren ?? e.name : void 0
1300
1351
  ) })
1301
1352
  ]
1302
1353
  },
1303
- `${p ?? "default"}:${g ?? "default"}`
1354
+ `${g ?? "default"}:${m ?? "default"}`
1304
1355
  );
1305
1356
  })
1306
1357
  )
1307
1358
  }
1308
1359
  ),
1309
- n.additional.map(([p, g]) => /* @__PURE__ */ N("section", { style: { marginTop: 20 }, children: [
1310
- /* @__PURE__ */ b("h2", { style: { margin: "0 0 10px", color: U, fontSize: 12 }, children: p }),
1311
- /* @__PURE__ */ b("div", { style: { display: "flex", flexWrap: "wrap", gap: 12 }, children: g.map((S) => /* @__PURE__ */ N(
1360
+ r.additional.map(([g, m]) => /* @__PURE__ */ A("section", { style: { marginTop: 20 }, children: [
1361
+ /* @__PURE__ */ b("h2", { style: { margin: "0 0 10px", color: B, fontSize: 12 }, children: g }),
1362
+ /* @__PURE__ */ b("div", { style: { display: "flex", flexWrap: "wrap", gap: 12 }, children: m.map((y) => /* @__PURE__ */ A(
1312
1363
  "article",
1313
1364
  {
1314
1365
  style: {
1315
1366
  padding: 16,
1316
1367
  border: `1px solid ${Ee}`,
1317
1368
  borderRadius: 10,
1318
- background: pe
1369
+ background: ge
1319
1370
  },
1320
1371
  children: [
1321
- /* @__PURE__ */ b("div", { style: { marginBottom: 12, color: U, fontSize: 11 }, children: S }),
1372
+ /* @__PURE__ */ b("div", { style: { marginBottom: 12, color: B, fontSize: 11 }, children: y }),
1322
1373
  Te(
1323
- i,
1324
- { ...t.defaultProps, [p]: S },
1374
+ c,
1375
+ { ...t.defaultProps, [g]: y },
1325
1376
  t.children === "text" ? t.defaultChildren ?? e.name : void 0
1326
1377
  )
1327
1378
  ]
1328
1379
  },
1329
- S
1380
+ y
1330
1381
  )) })
1331
- ] }, p))
1382
+ ] }, g))
1332
1383
  ]
1333
1384
  }
1334
1385
  );
1335
1386
  }
1336
- function yn(e) {
1387
+ function wn(e) {
1337
1388
  Ye(e.items);
1338
- const t = {}, o = [], n = [], r = e.maxVariantCells ?? 60;
1389
+ const t = {}, o = [], r = [], n = e.maxVariantCells ?? 60;
1339
1390
  for (const s of e.items) {
1340
- const i = Qe(
1391
+ const c = Qe(
1341
1392
  e.kind,
1342
1393
  s.id,
1343
1394
  e.registryPrefix
1344
- ), l = e.registry[s.name], f = () => /* @__PURE__ */ b(
1345
- Zt,
1395
+ ), d = e.registry[s.name], u = () => /* @__PURE__ */ b(
1396
+ en,
1346
1397
  {
1347
1398
  item: s,
1348
- entry: l,
1349
- maxVariantCells: r
1399
+ entry: d,
1400
+ maxVariantCells: n
1350
1401
  }
1351
1402
  );
1352
- t[i] = { component: f, children: "none" }, o.push({
1403
+ t[c] = { component: u, children: "none" }, o.push({
1353
1404
  id: s.id,
1354
1405
  name: s.name,
1355
1406
  section: s.section,
1356
- componentName: i,
1407
+ componentName: c,
1357
1408
  // The seed exists only long enough to mount the intrinsic max-content
1358
1409
  // catalog root. The editor replaces it with actual rendered DOM bounds.
1359
1410
  width: 1,
1360
1411
  height: 1,
1361
1412
  frameSizeMode: "content"
1362
- }), n.push(Xe(s, s.id));
1413
+ }), r.push(Xe(s, s.id));
1363
1414
  }
1364
1415
  return {
1365
1416
  registry: t,
1366
1417
  collection: {
1367
1418
  expectedCount: e.expectedCount ?? e.items.length,
1368
- assets: n,
1419
+ assets: r,
1369
1420
  pages: o
1370
1421
  }
1371
1422
  };
1372
1423
  }
1373
- const Ue = /^[a-f0-9]{64}$/, en = /^\/__pygmalion-qa\/artifacts\/[A-Za-z0-9_-]{8,120}\.png$/, tn = /^p\d+$/;
1424
+ const Ue = /^[a-f0-9]{64}$/, tn = /^\/__pygmalion-qa\/artifacts\/[A-Za-z0-9_-]{8,120}\.png$/, nn = /^p\d+$/;
1374
1425
  function Ce(e) {
1375
- return typeof e == "string" && en.test(e) ? e : void 0;
1426
+ return typeof e == "string" && tn.test(e) ? e : void 0;
1376
1427
  }
1377
1428
  function He(e, t) {
1378
1429
  const o = new URL(e, t);
@@ -1392,128 +1443,128 @@ function qe(e) {
1392
1443
  const t = e;
1393
1444
  return !Number.isSafeInteger(t.width) || !Number.isSafeInteger(t.height) || Number(t.width) < 1 || Number(t.height) < 1 || Number(t.width) > 65536 || Number(t.height) > 65536 ? null : { width: Number(t.width), height: Number(t.height) };
1394
1445
  }
1395
- function nn(e) {
1446
+ function rn(e) {
1396
1447
  if (!e || typeof e != "object" || Array.isArray(e)) return null;
1397
- const t = e, o = qe(t.before), n = qe(t.after);
1398
- if (!o || !n || !Number.isSafeInteger(t.changedPixels) || !Number.isSafeInteger(t.totalPixels) || Number(t.changedPixels) < 0 || Number(t.totalPixels) < 1 || Number(t.changedPixels) > Number(t.totalPixels) || typeof t.threshold != "number" || !Number.isFinite(t.threshold) || t.threshold < 0 || t.threshold > 1)
1448
+ const t = e, o = qe(t.before), r = qe(t.after);
1449
+ if (!o || !r || !Number.isSafeInteger(t.changedPixels) || !Number.isSafeInteger(t.totalPixels) || Number(t.changedPixels) < 0 || Number(t.totalPixels) < 1 || Number(t.changedPixels) > Number(t.totalPixels) || typeof t.threshold != "number" || !Number.isFinite(t.threshold) || t.threshold < 0 || t.threshold > 1)
1399
1450
  return null;
1400
- const r = t.heatmapUrl == null ? null : Ce(t.heatmapUrl) ?? null;
1451
+ const n = t.heatmapUrl == null ? null : Ce(t.heatmapUrl) ?? null;
1401
1452
  return {
1402
1453
  before: o,
1403
- after: n,
1404
- dimensionsMatch: o.width === n.width && o.height === n.height,
1454
+ after: r,
1455
+ dimensionsMatch: o.width === r.width && o.height === r.height,
1405
1456
  changedPixels: Number(t.changedPixels),
1406
1457
  totalPixels: Number(t.totalPixels),
1407
1458
  diffRatio: Number(t.changedPixels) / Number(t.totalPixels),
1408
1459
  threshold: t.threshold,
1409
- heatmapUrl: r
1460
+ heatmapUrl: n
1410
1461
  };
1411
1462
  }
1412
- function rn(e, t) {
1463
+ function on(e, t) {
1413
1464
  if (!e || typeof e != "object" || Array.isArray(e)) return null;
1414
1465
  const o = e;
1415
1466
  if (typeof o.id != "string" || !o.id) return null;
1416
- const n = ve(o), r = ve(o.before) ?? n;
1417
- if (!r) return null;
1467
+ const r = ve(o), n = ve(o.before) ?? r;
1468
+ if (!n) return null;
1418
1469
  const s = ve(o.after);
1419
1470
  if (t === "changed" && !s) return null;
1420
- const i = s ? nn(o.pixelDiff) : null;
1471
+ const c = s ? rn(o.pixelDiff) : null;
1421
1472
  return {
1422
1473
  id: o.id,
1423
- before: r,
1474
+ before: n,
1424
1475
  ...s ? { after: s } : {},
1425
1476
  ...s ? {
1426
- domChanged: r.domStructureHash !== s.domStructureHash,
1427
- screenshotChanged: r.screenshotHash !== s.screenshotHash
1477
+ domChanged: n.domStructureHash !== s.domStructureHash,
1478
+ screenshotChanged: n.screenshotHash !== s.screenshotHash
1428
1479
  } : {},
1429
- ...i ? { pixelDiff: i } : {}
1480
+ ...c ? { pixelDiff: c } : {}
1430
1481
  };
1431
1482
  }
1432
- function on(e, t = []) {
1433
- const o = new Set(t), n = o.size > 0, r = /* @__PURE__ */ new Set(), s = [
1434
- ...e.styles.map((i) => i.affectedFrames ?? []),
1435
- ...e.texts.map((i) => i.affectedFrames ?? []),
1436
- ...e.operations.map((i) => i.affectedFrames ?? [])
1483
+ function sn(e, t = []) {
1484
+ const o = new Set(t), r = o.size > 0, n = /* @__PURE__ */ new Set(), s = [
1485
+ ...e.styles.map((c) => c.affectedFrames ?? []),
1486
+ ...e.texts.map((c) => c.affectedFrames ?? []),
1487
+ ...e.operations.map((c) => c.affectedFrames ?? [])
1437
1488
  ];
1438
- for (const i of s)
1439
- for (const l of i) {
1440
- if (n && tn.test(l.id) && !o.has(l.id))
1489
+ for (const c of s)
1490
+ for (const d of c) {
1491
+ if (r && nn.test(d.id) && !o.has(d.id))
1441
1492
  throw new Error(
1442
- `"Impact Screen"${l.name}"This internal editor ID (${l.id}) is used. A canonical screen ID is required.`
1493
+ `"Impact Screen"${d.name}"This internal editor ID (${d.id}) is used. A canonical screen ID is required.`
1443
1494
  );
1444
- !l.id || n && !o.has(l.id) || r.add(l.id);
1495
+ !d.id || r && !o.has(d.id) || n.add(d.id);
1445
1496
  }
1446
- return [...r].sort();
1497
+ return [...n].sort();
1447
1498
  }
1448
1499
  async function Ge(e, t, o) {
1449
- const n = await e(`${t.replace(/\/$/, "")}/capture`, {
1500
+ const r = await e(`${t.replace(/\/$/, "")}/capture`, {
1450
1501
  method: "POST",
1451
1502
  headers: { "content-type": "application/json" },
1452
1503
  body: JSON.stringify(o)
1453
- }), r = await n.json();
1454
- if (!n.ok || r.ok === !1)
1504
+ }), n = await r.json();
1505
+ if (!r.ok || n.ok === !1)
1455
1506
  throw new Error(
1456
- typeof r.error == "string" ? r.error : `Pygmalion visual QA capture failed (${n.status})`
1507
+ typeof n.error == "string" ? n.error : `Pygmalion visual QA capture failed (${r.status})`
1457
1508
  );
1458
- if (typeof r.baselineId != "string" || !r.baselineId)
1509
+ if (typeof n.baselineId != "string" || !n.baselineId)
1459
1510
  throw new Error("Pygmalion visual QA response has no baselineId");
1460
- const s = Array.isArray(r.frames) ? r.frames.map((g) => rn(g, o.phase)).filter((g) => g != null) : [], i = Array.isArray(r.failures) ? r.failures.map((g) => {
1461
- if (!g || typeof g != "object" || Array.isArray(g)) return null;
1462
- const S = g;
1463
- return typeof S.id == "string" && typeof S.error == "string" ? { id: S.id, error: S.error } : null;
1464
- }).filter((g) => g != null) : [], l = new Set(o.frameIds), p = new Set(s.map((g) => g.id)).size === s.length && s.every((g) => l.has(g.id)) && i.every((g) => l.has(g.id));
1511
+ const s = Array.isArray(n.frames) ? n.frames.map((m) => on(m, o.phase)).filter((m) => m != null) : [], c = Array.isArray(n.failures) ? n.failures.map((m) => {
1512
+ if (!m || typeof m != "object" || Array.isArray(m)) return null;
1513
+ const y = m;
1514
+ return typeof y.id == "string" && typeof y.error == "string" ? { id: y.id, error: y.error } : null;
1515
+ }).filter((m) => m != null) : [], d = new Set(o.frameIds), g = new Set(s.map((m) => m.id)).size === s.length && s.every((m) => d.has(m.id)) && c.every((m) => d.has(m.id));
1465
1516
  return {
1466
1517
  phase: o.phase,
1467
- baselineId: r.baselineId,
1468
- complete: r.complete !== !1 && p && i.length === 0 && s.length === o.frameIds.length,
1518
+ baselineId: n.baselineId,
1519
+ complete: n.complete !== !1 && g && c.length === 0 && s.length === o.frameIds.length,
1469
1520
  frames: s,
1470
- failures: i
1521
+ failures: c
1471
1522
  };
1472
1523
  }
1473
1524
  const Ie = {
1474
1525
  mirror: "/__pygmalion-dev-control",
1475
1526
  sessions: "/__pygmalion-design-session",
1476
1527
  inspect: "/__pygmalion-inspect"
1477
- }, sn = "pygmalion.designSessionId", an = "/__pygmalion-qa", ge = /* @__PURE__ */ new Map();
1528
+ }, an = "pygmalion.designSessionId", cn = "/__pygmalion-qa", me = /* @__PURE__ */ new Map();
1478
1529
  function Ke() {
1479
1530
  var e;
1480
1531
  return typeof window < "u" && ((e = window.crypto) != null && e.randomUUID) ? window.crypto.randomUUID() : `pygmalion-${Date.now()}-${Math.random().toString(36).slice(2)}`;
1481
1532
  }
1482
- function cn(e, t) {
1533
+ function ln(e, t) {
1483
1534
  if (e) return e;
1484
- const o = ge.get(t);
1535
+ const o = me.get(t);
1485
1536
  if (o) return o;
1486
1537
  try {
1487
- const n = window.localStorage.getItem(t);
1488
- if (n)
1489
- return ge.set(t, n), n;
1490
- const r = Ke();
1491
- return window.localStorage.setItem(t, r), ge.set(t, r), r;
1492
- } catch {
1538
+ const r = window.localStorage.getItem(t);
1539
+ if (r)
1540
+ return me.set(t, r), r;
1493
1541
  const n = Ke();
1494
- return ge.set(t, n), n;
1542
+ return window.localStorage.setItem(t, n), me.set(t, n), n;
1543
+ } catch {
1544
+ const r = Ke();
1545
+ return me.set(t, r), r;
1495
1546
  }
1496
1547
  }
1497
- async function Q(e) {
1548
+ async function X(e) {
1498
1549
  const t = await e.json();
1499
1550
  if (!e.ok) throw new Error(t.error ?? `Pygmalion request failed (${e.status})`);
1500
1551
  return t;
1501
1552
  }
1502
- function wn(e = {}) {
1503
- var L, X, z, a, c;
1553
+ function Sn(e = {}) {
1554
+ var V, ee, _, J, i;
1504
1555
  const {
1505
1556
  sessionId: t,
1506
- sessionStorageKey: o = sn,
1507
- autoStart: n = !0,
1508
- fetcher: r = fetch,
1557
+ sessionStorageKey: o = an,
1558
+ autoStart: r = !0,
1559
+ fetcher: n = fetch,
1509
1560
  formatApplyMessage: s
1510
- } = e, i = ((L = e.endpoints) == null ? void 0 : L.mirror) ?? Ie.mirror, l = ((X = e.endpoints) == null ? void 0 : X.sessions) ?? Ie.sessions, f = ((z = e.endpoints) == null ? void 0 : z.inspect) ?? Ie.inspect, p = e.visualQa != null, g = ((a = e.visualQa) == null ? void 0 : a.endpoint) ?? an, S = JSON.stringify(((c = e.visualQa) == null ? void 0 : c.eligibleFrameIds) ?? []), h = ae(
1511
- () => JSON.parse(S),
1512
- [S]
1561
+ } = e, c = ((V = e.endpoints) == null ? void 0 : V.mirror) ?? Ie.mirror, d = ((ee = e.endpoints) == null ? void 0 : ee.sessions) ?? Ie.sessions, u = ((_ = e.endpoints) == null ? void 0 : _.inspect) ?? Ie.inspect, g = e.visualQa != null, m = ((J = e.visualQa) == null ? void 0 : J.endpoint) ?? cn, y = JSON.stringify(((i = e.visualQa) == null ? void 0 : i.eligibleFrameIds) ?? []), h = ae(
1562
+ () => JSON.parse(y),
1563
+ [y]
1513
1564
  ), x = ae(
1514
- () => cn(t, o),
1565
+ () => ln(t, o),
1515
1566
  [t, o]
1516
- ), [y, A] = se({
1567
+ ), [S, E] = se({
1517
1568
  state: "idle",
1518
1569
  commit: null,
1519
1570
  shortCommit: null,
@@ -1523,300 +1574,300 @@ function wn(e = {}) {
1523
1574
  warning: null,
1524
1575
  error: null,
1525
1576
  appOrigin: null
1526
- }), [m, k] = se(null), [$, F] = se(null), [T, j] = se({
1577
+ }), [f, O] = se(null), [D, k] = se(null), [F, Y] = se({
1527
1578
  refs: [],
1528
1579
  defaultRef: null,
1529
1580
  worktreeRef: null
1530
- }), v = xe(null), E = xe(null), M = te(
1531
- async (d = !0, u) => {
1532
- if (u != null && v.current && await v.current.catch(() => {
1581
+ }), v = xe(null), P = xe(null), $ = te(
1582
+ async (a = !0, l) => {
1583
+ if (l != null && v.current && await v.current.catch(() => {
1533
1584
  }), v.current) return v.current;
1534
- const P = (async () => {
1535
- A((I) => ({ ...I, state: "syncing", error: null }));
1585
+ const p = (async () => {
1586
+ E((I) => ({ ...I, state: "syncing", error: null }));
1536
1587
  try {
1537
- const I = u != null;
1538
- let D = await r(`${i}/${d || I ? "refresh" : "status"}`, {
1539
- method: d || I ? "POST" : "GET",
1588
+ const I = l != null;
1589
+ let N = await n(`${c}/${a || I ? "refresh" : "status"}`, {
1590
+ method: a || I ? "POST" : "GET",
1540
1591
  ...I ? {
1541
1592
  headers: { "content-type": "application/json" },
1542
- body: JSON.stringify({ ref: u })
1593
+ body: JSON.stringify({ ref: l })
1543
1594
  } : {}
1544
- }), R = await Q(D);
1545
- const K = Date.now();
1546
- for (; !d && R.state === "syncing" && Date.now() - K < 12e4; )
1547
- await new Promise((O) => window.setTimeout(O, 500)), D = await r(`${i}/status`), R = await Q(D);
1548
- if (R.state !== "ready" || !R.appOrigin || !R.commit)
1549
- throw new Error(R.error ?? "Pygmalion could not prepare the source preview");
1550
- const C = await Q(
1551
- await r(`${l}/open`, {
1595
+ }), M = await X(N);
1596
+ const q = Date.now();
1597
+ for (; !a && M.state === "syncing" && Date.now() - q < 12e4; )
1598
+ await new Promise((R) => window.setTimeout(R, 500)), N = await n(`${c}/status`), M = await X(N);
1599
+ if (M.state !== "ready" || !M.appOrigin || !M.commit)
1600
+ throw new Error(M.error ?? "Pygmalion could not prepare the source preview");
1601
+ const C = await X(
1602
+ await n(`${d}/open`, {
1552
1603
  method: "POST",
1553
1604
  headers: { "content-type": "application/json" },
1554
- body: JSON.stringify({ sessionId: x, baseDevSha: R.commit })
1605
+ body: JSON.stringify({ sessionId: x, baseDevSha: M.commit })
1555
1606
  })
1556
1607
  );
1557
1608
  if (!C.ok || !C.session)
1558
1609
  throw new Error(C.error ?? "Pygmalion could not open the design session");
1559
1610
  let w = C.session;
1560
1611
  if (w.branchName) {
1561
- const O = await Q(
1562
- await r(`${l}/check`, {
1612
+ const R = await X(
1613
+ await n(`${d}/check`, {
1563
1614
  method: "POST",
1564
1615
  headers: { "content-type": "application/json" },
1565
1616
  body: JSON.stringify({ sessionId: w.id })
1566
1617
  })
1567
1618
  );
1568
- if (!O.ok || !O.session)
1569
- throw new Error(O.error ?? "Pygmalion could not check the design session");
1570
- w = O.session;
1619
+ if (!R.ok || !R.session)
1620
+ throw new Error(R.error ?? "Pygmalion could not check the design session");
1621
+ w = R.session;
1571
1622
  }
1572
- A(R), k(w), F(w.appOrigin ?? R.appOrigin);
1623
+ E(M), O(w), k(w.appOrigin ?? M.appOrigin);
1573
1624
  } catch (I) {
1574
- A((D) => ({
1575
- ...D,
1625
+ E((N) => ({
1626
+ ...N,
1576
1627
  state: "error",
1577
1628
  error: I instanceof Error ? I.message : String(I)
1578
1629
  }));
1579
1630
  }
1580
1631
  })();
1581
- v.current = P;
1632
+ v.current = p;
1582
1633
  try {
1583
- await P;
1634
+ await p;
1584
1635
  } finally {
1585
- v.current === P && (v.current = null);
1636
+ v.current === p && (v.current = null);
1586
1637
  }
1587
1638
  },
1588
- [r, i, l, x]
1589
- ), B = te(async () => {
1639
+ [n, c, d, x]
1640
+ ), j = te(async () => {
1590
1641
  try {
1591
- const d = await Q(
1592
- await r(`${i}/refs`)
1593
- ), u = {
1594
- refs: d.refs ?? [],
1595
- defaultRef: d.defaultRef ?? null,
1596
- worktreeRef: d.worktreeRef ?? null
1642
+ const a = await X(
1643
+ await n(`${c}/refs`)
1644
+ ), l = {
1645
+ refs: a.refs ?? [],
1646
+ defaultRef: a.defaultRef ?? null,
1647
+ worktreeRef: a.worktreeRef ?? null
1597
1648
  };
1598
- return j(u), u;
1649
+ return Y(l), l;
1599
1650
  } catch {
1600
- return T;
1651
+ return F;
1601
1652
  }
1602
- }, [r, i, T]), Z = te(
1603
- async (d, u) => {
1604
- if (m != null && m.branchName && !(u != null && u.discardEdits))
1653
+ }, [n, c, F]), L = te(
1654
+ async (a, l) => {
1655
+ if (f != null && f.branchName && !(l != null && l.discardEdits))
1605
1656
  throw new Error(
1606
1657
  "This design session has unapplied edits against the current source. Apply or revert them, or pass discardEdits to switch anyway."
1607
1658
  );
1608
- await M(!0, d);
1659
+ await $(!0, a);
1609
1660
  },
1610
- [M, m == null ? void 0 : m.branchName]
1661
+ [$, f == null ? void 0 : f.branchName]
1611
1662
  ), re = te(
1612
- async (d) => {
1613
- var R;
1614
- if (!m) throw new Error("Pygmalion design session is not ready");
1615
- const u = E.current;
1616
- if (u && (u.sessionId !== m.id || u.baseDevSha !== m.baseDevSha || u.revision !== m.revision || u.fingerprint !== JSON.stringify(d)))
1663
+ async (a) => {
1664
+ var M;
1665
+ if (!f) throw new Error("Pygmalion design session is not ready");
1666
+ const l = P.current;
1667
+ if (l && (l.sessionId !== f.id || l.baseDevSha !== f.baseDevSha || l.revision !== f.revision || l.fingerprint !== JSON.stringify(a)))
1617
1668
  throw new Error("The code diff you checked is out of date. Please check the diff for the current changes again.");
1618
- const P = await Q(
1619
- await r(`${l}/apply-visual`, {
1669
+ const p = await X(
1670
+ await n(`${d}/apply-visual`, {
1620
1671
  method: "POST",
1621
1672
  headers: { "content-type": "application/json" },
1622
1673
  body: JSON.stringify({
1623
- sessionId: m.id,
1624
- baseDevSha: m.baseDevSha,
1625
- expectedRevision: m.revision,
1626
- ...u ? { previewRevision: u.revision } : {},
1627
- changes: d
1674
+ sessionId: f.id,
1675
+ baseDevSha: f.baseDevSha,
1676
+ expectedRevision: f.revision,
1677
+ ...l ? { previewRevision: l.revision } : {},
1678
+ changes: a
1628
1679
  })
1629
1680
  })
1630
1681
  );
1631
- if (!P.ok || !P.session)
1632
- throw new Error(P.error ?? "Pygmalion could not apply the visual changes");
1633
- k(P.session), P.session.appOrigin && F(P.session.appOrigin);
1634
- const I = P.applied ?? d.styles.length + d.texts.length + d.operations.length;
1635
- let D;
1636
- if (u != null && u.qaBaselineId && ((R = u.qaFrameIds) != null && R.length) && P.session.appOrigin)
1682
+ if (!p.ok || !p.session)
1683
+ throw new Error(p.error ?? "Pygmalion could not apply the visual changes");
1684
+ O(p.session), p.session.appOrigin && k(p.session.appOrigin);
1685
+ const I = p.applied ?? a.styles.length + a.texts.length + a.operations.length;
1686
+ let N;
1687
+ if (l != null && l.qaBaselineId && ((M = l.qaFrameIds) != null && M.length) && p.session.appOrigin)
1637
1688
  try {
1638
- D = await Ge(r, g, {
1689
+ N = await Ge(n, m, {
1639
1690
  phase: "changed",
1640
- baselineId: u.qaBaselineId,
1641
- basePath: He(P.session.appOrigin, window.location.origin),
1642
- frameIds: u.qaFrameIds
1691
+ baselineId: l.qaBaselineId,
1692
+ basePath: He(p.session.appOrigin, window.location.origin),
1693
+ frameIds: l.qaFrameIds
1643
1694
  });
1644
- } catch (K) {
1645
- const C = K instanceof Error ? K.message : String(K);
1646
- D = {
1695
+ } catch (q) {
1696
+ const C = q instanceof Error ? q.message : String(q);
1697
+ N = {
1647
1698
  phase: "changed",
1648
- baselineId: u.qaBaselineId,
1699
+ baselineId: l.qaBaselineId,
1649
1700
  complete: !1,
1650
1701
  frames: [],
1651
- failures: u.qaFrameIds.map((w) => ({ id: w, error: C }))
1702
+ failures: l.qaFrameIds.map((w) => ({ id: w, error: C }))
1652
1703
  };
1653
1704
  }
1654
- return E.current = null, {
1705
+ return P.current = null, {
1655
1706
  applied: I,
1656
- branch: P.session.branchName ?? void 0,
1657
- integration: P.session.integration.state,
1658
- message: s == null ? void 0 : s(P.session, I),
1659
- ...D ? { qa: D } : {}
1707
+ branch: p.session.branchName ?? void 0,
1708
+ integration: p.session.integration.state,
1709
+ message: s == null ? void 0 : s(p.session, I),
1710
+ ...N ? { qa: N } : {}
1660
1711
  };
1661
1712
  },
1662
- [r, s, g, m, l]
1663
- ), ee = te(
1664
- async (d) => {
1665
- var R;
1666
- if (!m) throw new Error("Pygmalion design session is not ready");
1667
- E.current = null;
1668
- const u = await Q(
1669
- await r(`${l}/preview-visual`, {
1713
+ [n, s, m, f, d]
1714
+ ), oe = te(
1715
+ async (a) => {
1716
+ var M;
1717
+ if (!f) throw new Error("Pygmalion design session is not ready");
1718
+ P.current = null;
1719
+ const l = await X(
1720
+ await n(`${d}/preview-visual`, {
1670
1721
  method: "POST",
1671
1722
  headers: { "content-type": "application/json" },
1672
1723
  body: JSON.stringify({
1673
- sessionId: m.id,
1674
- baseDevSha: m.baseDevSha,
1675
- expectedRevision: m.revision,
1676
- changes: d
1724
+ sessionId: f.id,
1725
+ baseDevSha: f.baseDevSha,
1726
+ expectedRevision: f.revision,
1727
+ changes: a
1677
1728
  })
1678
1729
  })
1679
1730
  );
1680
- if (!u.ok || !Number.isSafeInteger(u.revision))
1681
- throw new Error(u.error ?? "Pygmalion could not preview the visual changes");
1682
- const P = p ? on(d, h) : [];
1731
+ if (!l.ok || !Number.isSafeInteger(l.revision))
1732
+ throw new Error(l.error ?? "Pygmalion could not preview the visual changes");
1733
+ const p = g ? sn(a, h) : [];
1683
1734
  let I;
1684
- const D = m.appOrigin ?? y.appOrigin;
1685
- if (P.length > 0) {
1686
- if (!D)
1735
+ const N = f.appOrigin ?? S.appOrigin;
1736
+ if (p.length > 0) {
1737
+ if (!N)
1687
1738
  throw new Error("Impact screen QA baseline preview not ready");
1688
- if (I = await Ge(r, g, {
1739
+ if (I = await Ge(n, m, {
1689
1740
  phase: "baseline",
1690
- basePath: He(D, window.location.origin),
1691
- frameIds: P
1741
+ basePath: He(N, window.location.origin),
1742
+ frameIds: p
1692
1743
  }), !I.complete)
1693
1744
  throw new Error(
1694
- ((R = I.failures[0]) == null ? void 0 : R.error) ?? `Failed to capture ${P.length - I.frames.length} affected frames`
1745
+ ((M = I.failures[0]) == null ? void 0 : M.error) ?? `Failed to capture ${p.length - I.frames.length} affected frames`
1695
1746
  );
1696
1747
  }
1697
- return E.current = {
1698
- sessionId: m.id,
1699
- baseDevSha: m.baseDevSha,
1700
- revision: u.revision,
1701
- fingerprint: JSON.stringify(d),
1702
- ...I ? { qaBaselineId: I.baselineId, qaFrameIds: P } : {}
1748
+ return P.current = {
1749
+ sessionId: f.id,
1750
+ baseDevSha: f.baseDevSha,
1751
+ revision: l.revision,
1752
+ fingerprint: JSON.stringify(a),
1753
+ ...I ? { qaBaselineId: I.baselineId, qaFrameIds: p } : {}
1703
1754
  }, {
1704
- revision: u.revision,
1705
- files: Array.isArray(u.files) ? u.files : [],
1706
- affectedFiles: Array.isArray(u.affectedFiles) ? u.affectedFiles : [],
1755
+ revision: l.revision,
1756
+ files: Array.isArray(l.files) ? l.files : [],
1757
+ affectedFiles: Array.isArray(l.affectedFiles) ? l.affectedFiles : [],
1707
1758
  ...I ? { qa: I } : {}
1708
1759
  };
1709
1760
  },
1710
1761
  [
1711
- r,
1712
- y.appOrigin,
1762
+ n,
1763
+ S.appOrigin,
1713
1764
  h,
1714
- g,
1715
1765
  m,
1716
- l,
1717
- p
1766
+ f,
1767
+ d,
1768
+ g
1718
1769
  ]
1719
- ), oe = te(
1720
- async (d) => {
1721
- if (d.length === 0) return { files: [] };
1722
- const u = await Q(
1723
- await r(`${f}/impact`, {
1770
+ ), Z = te(
1771
+ async (a) => {
1772
+ if (a.length === 0) return { files: [] };
1773
+ const l = await X(
1774
+ await n(`${u}/impact`, {
1724
1775
  method: "POST",
1725
1776
  headers: { "content-type": "application/json" },
1726
- body: JSON.stringify({ componentFiles: d })
1777
+ body: JSON.stringify({ componentFiles: a })
1727
1778
  })
1728
1779
  );
1729
- if (u.error || u.ok === !1)
1730
- throw new Error(u.error ?? "Pygmalion could not calculate source impact");
1731
- return { files: Array.isArray(u.files) ? u.files : [] };
1780
+ if (l.error || l.ok === !1)
1781
+ throw new Error(l.error ?? "Pygmalion could not calculate source impact");
1782
+ return { files: Array.isArray(l.files) ? l.files : [] };
1732
1783
  },
1733
- [r, f]
1734
- ), H = te(async () => {
1735
- if (!(m != null && m.canRevert) || !m.headSha)
1784
+ [n, u]
1785
+ ), K = te(async () => {
1786
+ if (!(f != null && f.canRevert) || !f.headSha)
1736
1787
  throw new Error("There are no reversible changes applied");
1737
- const d = await Q(
1738
- await r(`${l}/revert-visual`, {
1788
+ const a = await X(
1789
+ await n(`${d}/revert-visual`, {
1739
1790
  method: "POST",
1740
1791
  headers: { "content-type": "application/json" },
1741
1792
  body: JSON.stringify({
1742
- sessionId: m.id,
1743
- baseDevSha: m.baseDevSha,
1744
- expectedRevision: m.revision,
1745
- expectedHeadSha: m.headSha
1793
+ sessionId: f.id,
1794
+ baseDevSha: f.baseDevSha,
1795
+ expectedRevision: f.revision,
1796
+ expectedHeadSha: f.headSha
1746
1797
  })
1747
1798
  })
1748
1799
  );
1749
- if (!d.ok || d.reverted !== !0 || !d.operation || d.operation.kind !== "visual-revert" || !d.session)
1750
- throw new Error(d.error ?? "Pygmalion could not revert the last visual change");
1751
- return E.current = null, k(d.session), d.session.appOrigin && F(d.session.appOrigin), {
1800
+ if (!a.ok || a.reverted !== !0 || !a.operation || a.operation.kind !== "visual-revert" || !a.session)
1801
+ throw new Error(a.error ?? "Pygmalion could not revert the last visual change");
1802
+ return P.current = null, O(a.session), a.session.appOrigin && k(a.session.appOrigin), {
1752
1803
  reverted: !0,
1753
- operation: d.operation,
1754
- session: d.session
1804
+ operation: a.operation,
1805
+ session: a.session
1755
1806
  };
1756
- }, [r, m, l]);
1807
+ }, [n, f, d]);
1757
1808
  ie(() => {
1758
- n && M(!1);
1759
- }, [n, M]), ie(() => {
1760
- n && B();
1761
- }, [n]);
1762
- const W = (m == null ? void 0 : m.appOrigin) ?? y.appOrigin ?? $, G = (m == null ? void 0 : m.headSha) ?? (m == null ? void 0 : m.baseDevSha) ?? y.commit ?? "pending";
1809
+ r && $(!1);
1810
+ }, [r, $]), ie(() => {
1811
+ r && j();
1812
+ }, [r]);
1813
+ const Q = (f == null ? void 0 : f.appOrigin) ?? S.appOrigin ?? D, U = (f == null ? void 0 : f.headSha) ?? (f == null ? void 0 : f.baseDevSha) ?? S.commit ?? "pending";
1763
1814
  return {
1764
- mirror: y,
1765
- session: m,
1766
- ready: $ != null,
1767
- appOrigin: W,
1768
- previewRevision: `${G}:${(m == null ? void 0 : m.revision) ?? 0}`,
1769
- previewSourceRevision: G,
1770
- refresh: M,
1771
- switchSource: Z,
1772
- sourceRefs: T,
1773
- loadSourceRefs: B,
1774
- previewVisual: ee,
1775
- inspectImpact: oe,
1815
+ mirror: S,
1816
+ session: f,
1817
+ ready: D != null,
1818
+ appOrigin: Q,
1819
+ previewRevision: `${U}:${(f == null ? void 0 : f.revision) ?? 0}`,
1820
+ previewSourceRevision: U,
1821
+ refresh: $,
1822
+ switchSource: L,
1823
+ sourceRefs: F,
1824
+ loadSourceRefs: j,
1825
+ previewVisual: oe,
1826
+ inspectImpact: Z,
1776
1827
  applyVisual: re,
1777
- revertLastVisual: H
1828
+ revertLastVisual: K
1778
1829
  };
1779
1830
  }
1780
1831
  function bn({
1781
1832
  value: e,
1782
1833
  refs: t,
1783
1834
  onChange: o,
1784
- busy: n = !1,
1785
- defaultRef: r = null,
1835
+ busy: r = !1,
1836
+ defaultRef: n = null,
1786
1837
  worktreeRef: s = null,
1787
- label: i = "Source revision",
1788
- children: l,
1789
- className: f
1838
+ label: c = "Source revision",
1839
+ children: d,
1840
+ className: u
1790
1841
  }) {
1791
- const p = ae(
1842
+ const g = ae(
1792
1843
  () => ({
1793
1844
  local: t.filter((h) => h.kind === "local"),
1794
1845
  remote: t.filter((h) => h.kind === "remote")
1795
1846
  }),
1796
1847
  [t]
1797
- ), g = ae(() => {
1848
+ ), m = ae(() => {
1798
1849
  const h = new Set(t.map((x) => x.name));
1799
- return r && h.add(r), s && h.add(s), h;
1800
- }, [r, t, s]), S = e ?? r ?? "";
1801
- return /* @__PURE__ */ N(
1850
+ return n && h.add(n), s && h.add(s), h;
1851
+ }, [n, t, s]), y = e ?? n ?? "";
1852
+ return /* @__PURE__ */ A(
1802
1853
  "span",
1803
1854
  {
1804
- className: f,
1855
+ className: u,
1805
1856
  "data-pygmalion-source-ref": "",
1806
- "data-busy": n ? "" : void 0,
1857
+ "data-busy": r ? "" : void 0,
1807
1858
  style: { position: "relative", display: "inline-flex", alignItems: "center" },
1808
1859
  children: [
1809
- l ?? /* @__PURE__ */ b("span", { "data-pygmalion-source-ref-value": "", children: S || i }),
1810
- /* @__PURE__ */ N(
1860
+ d ?? /* @__PURE__ */ b("span", { "data-pygmalion-source-ref-value": "", children: y || c }),
1861
+ /* @__PURE__ */ A(
1811
1862
  "select",
1812
1863
  {
1813
- value: S,
1814
- disabled: n,
1815
- "aria-label": i,
1864
+ value: y,
1865
+ disabled: r,
1866
+ "aria-label": c,
1816
1867
  "data-pygmalion-source-ref-select": "",
1817
1868
  onChange: (h) => {
1818
1869
  const x = h.target.value;
1819
- x && x !== S && o(x);
1870
+ x && x !== y && o(x);
1820
1871
  },
1821
1872
  style: {
1822
1873
  position: "absolute",
@@ -1824,7 +1875,7 @@ function bn({
1824
1875
  width: "100%",
1825
1876
  height: "100%",
1826
1877
  opacity: 0,
1827
- cursor: n ? "default" : "pointer",
1878
+ cursor: r ? "default" : "pointer",
1828
1879
  // The native menu stays reachable; only the painted trigger is the host's.
1829
1880
  appearance: "none",
1830
1881
  border: 0,
@@ -1832,17 +1883,17 @@ function bn({
1832
1883
  margin: 0
1833
1884
  },
1834
1885
  children: [
1835
- S && !g.has(S) ? /* @__PURE__ */ b("option", { value: S, children: S }) : null,
1836
- s ? /* @__PURE__ */ N("option", { value: s, children: [
1886
+ y && !m.has(y) ? /* @__PURE__ */ b("option", { value: y, children: y }) : null,
1887
+ s ? /* @__PURE__ */ A("option", { value: s, children: [
1837
1888
  s,
1838
1889
  " · uncommitted work"
1839
1890
  ] }) : null,
1840
- p.local.length > 0 ? /* @__PURE__ */ b("optgroup", { label: "local", children: p.local.map((h) => /* @__PURE__ */ N("option", { value: h.name, children: [
1891
+ g.local.length > 0 ? /* @__PURE__ */ b("optgroup", { label: "local", children: g.local.map((h) => /* @__PURE__ */ A("option", { value: h.name, children: [
1841
1892
  h.name,
1842
1893
  " · ",
1843
1894
  h.commit
1844
1895
  ] }, h.fullName)) }) : null,
1845
- p.remote.length > 0 ? /* @__PURE__ */ b("optgroup", { label: "remote", children: p.remote.map((h) => /* @__PURE__ */ N("option", { value: h.name, children: [
1896
+ g.remote.length > 0 ? /* @__PURE__ */ b("optgroup", { label: "remote", children: g.remote.map((h) => /* @__PURE__ */ A("option", { value: h.name, children: [
1846
1897
  h.name,
1847
1898
  " · ",
1848
1899
  h.commit
@@ -1854,157 +1905,157 @@ function bn({
1854
1905
  }
1855
1906
  );
1856
1907
  }
1857
- const Sn = {
1858
- editor: J,
1908
+ const vn = {
1909
+ editor: W,
1859
1910
  getObserverTree: tt,
1860
1911
  isObservableProp: et
1861
1912
  };
1862
- function vn(e) {
1863
- J.navigateToPageByName(e);
1864
- }
1865
- function In() {
1866
- J.openPreview();
1913
+ function In(e) {
1914
+ W.navigateToPageByName(e);
1867
1915
  }
1868
1916
  function xn() {
1917
+ W.openPreview();
1918
+ }
1919
+ function Pn() {
1869
1920
  const e = De.entries.length > 0;
1870
- return e && De.discardPending(), J.resetCurrentEdits() || e;
1921
+ return e && De.discardPending(), W.resetCurrentEdits() || e;
1871
1922
  }
1872
- function Pn({
1923
+ function En({
1873
1924
  registry: e,
1874
1925
  tokens: t,
1875
1926
  initialPages: o,
1876
- componentConnections: n,
1877
- viewportPresets: r,
1927
+ componentConnections: r,
1928
+ viewportPresets: n,
1878
1929
  previewEnvironmentControls: s,
1879
- designImport: i,
1880
- onTokensChange: l,
1881
- appOrigin: f,
1882
- previewRevision: p,
1883
- previewCacheNamespace: g,
1884
- previewArtifacts: S,
1930
+ designImport: c,
1931
+ onTokensChange: d,
1932
+ appOrigin: u,
1933
+ previewRevision: g,
1934
+ previewCacheNamespace: m,
1935
+ previewArtifacts: y,
1885
1936
  previewArtifactEndpoint: h,
1886
1937
  previewConcurrency: x,
1887
- previewOpen: y,
1888
- onPreviewOpenChange: A,
1889
- flowCanvas: m,
1890
- onApply: k,
1891
- onDesignChange: $,
1892
- onInspectApply: F,
1893
- onInspectPreview: T,
1894
- onInspectImpact: j,
1938
+ previewOpen: S,
1939
+ onPreviewOpenChange: E,
1940
+ flowCanvas: f,
1941
+ onApply: O,
1942
+ onDesignChange: D,
1943
+ onInspectApply: k,
1944
+ onInspectPreview: F,
1945
+ onInspectImpact: Y,
1895
1946
  storyboardDiscovery: v = !0,
1896
- storyboardDiscoveryEndpoint: E = wt
1947
+ storyboardDiscoveryEndpoint: P = wt
1897
1948
  }) {
1898
- const [M, B] = se(!v), [Z, re] = se();
1899
- i && (i.assertComplete(), nt(i));
1900
- const ee = e ?? (i == null ? void 0 : i.getRegistry()), oe = t ?? (i == null ? void 0 : i.getTokens()), H = o ?? (i == null ? void 0 : i.getInitialPages());
1901
- ee && rt(ee), ot(n ?? []), oe && st(oe), r && it(r), It(l ?? null), at(g);
1902
- const W = Z ?? S, G = ae(
1903
- () => (H ?? []).flatMap(
1904
- (c) => c.route && c.importPageId ? [
1949
+ const [$, j] = se(!v), [L, re] = se();
1950
+ c && (c.assertComplete(), nt(c));
1951
+ const oe = e ?? (c == null ? void 0 : c.getRegistry()), Z = t ?? (c == null ? void 0 : c.getTokens()), K = o ?? (c == null ? void 0 : c.getInitialPages());
1952
+ oe && rt(oe), ot(r ?? []), Z && st(Z), n && it(n), It(d ?? null), at(m);
1953
+ const Q = L ?? y, U = ae(
1954
+ () => (K ?? []).flatMap(
1955
+ (i) => i.route && i.importPageId ? [
1905
1956
  {
1906
- canonicalId: c.importPageId,
1907
- route: c.route,
1908
- width: c.width,
1909
- height: c.height,
1910
- environment: c.environment,
1911
- preset: c.preset,
1912
- interactions: c.interactions,
1913
- assertions: c.assertions
1957
+ canonicalId: i.importPageId,
1958
+ route: i.route,
1959
+ width: i.width,
1960
+ height: i.height,
1961
+ environment: i.environment,
1962
+ preset: i.preset,
1963
+ interactions: i.interactions,
1964
+ assertions: i.assertions
1914
1965
  }
1915
1966
  ] : []
1916
1967
  ),
1917
- [H]
1918
- ), L = p ?? St(), X = f ?? ke(), z = xe([]), a = ae(
1919
- () => G.map((c) => ({
1920
- id: c.canonicalId,
1968
+ [K]
1969
+ ), V = g ?? bt(), ee = u ?? ke(), _ = xe([]), J = ae(
1970
+ () => U.map((i) => ({
1971
+ id: i.canonicalId,
1921
1972
  fingerprint: ct(
1922
- c,
1923
- L,
1924
- be()
1973
+ i,
1974
+ V,
1975
+ Se()
1925
1976
  )
1926
1977
  })),
1927
- [G, L, M]
1978
+ [U, V, $]
1928
1979
  );
1929
- return z.current = a, x != null && lt(x), xt(A ?? null), m != null && dt(m), Pt(k ?? null), Et(F ?? null), ut(T ?? null), Ct(j ?? null), H && J.initPagesFromComponents(H), ze(() => {
1930
- f != null && ft(f), p != null && gt(p), mt(s ?? []);
1931
- }, [f, s, p]), ze(() => {
1932
- !W || !H || !M || Oe(W, {
1933
- namespace: g ?? "",
1934
- previewRevision: L,
1935
- appOrigin: X,
1936
- baselineEnvironment: be(),
1980
+ return _.current = J, x != null && lt(x), xt(E ?? null), f != null && dt(f), Pt(O ?? null), Et(k ?? null), ut(F ?? null), Ct(Y ?? null), K && W.initPagesFromComponents(K), ze(() => {
1981
+ u != null && ft(u), g != null && mt(g), pt(s ?? []);
1982
+ }, [u, s, g]), ze(() => {
1983
+ !Q || !K || !$ || Me(Q, {
1984
+ namespace: m ?? "",
1985
+ previewRevision: V,
1986
+ appOrigin: ee,
1987
+ baselineEnvironment: Se(),
1937
1988
  allowStaleIdentity: !!h,
1938
- allowMatchingFrameIdentity: Z != null,
1939
- pages: G.map((c, d) => {
1940
- var u;
1989
+ allowMatchingFrameIdentity: L != null,
1990
+ pages: U.map((i, a) => {
1991
+ var l;
1941
1992
  return {
1942
- ...c,
1943
- fingerprint: (u = a[d]) == null ? void 0 : u.fingerprint
1993
+ ...i,
1994
+ fingerprint: (l = J[a]) == null ? void 0 : l.fingerprint
1944
1995
  };
1945
1996
  })
1946
1997
  });
1947
1998
  }, [
1948
- W,
1949
- a,
1950
- G,
1999
+ Q,
2000
+ J,
2001
+ U,
1951
2002
  h,
1952
- g,
1953
- Z,
1954
- X,
1955
- H,
2003
+ m,
1956
2004
  L,
1957
- M
2005
+ ee,
2006
+ K,
2007
+ V,
2008
+ $
1958
2009
  ]), ie(() => {
1959
- Fe($ ?? null);
1960
- const c = pt(J);
2010
+ Fe(D ?? null);
2011
+ const i = gt(W);
1961
2012
  return () => {
1962
- c(), Fe(null);
2013
+ i(), Fe(null);
1963
2014
  };
1964
- }, [$]), ie(() => {
1965
- if (re(void 0), !M || !h || !(g != null && g.trim()) || !(p != null && p.trim()))
2015
+ }, [D]), ie(() => {
2016
+ if (re(void 0), !$ || !h || !(m != null && m.trim()) || !(g != null && g.trim()))
1966
2017
  return;
1967
- const c = new AbortController(), d = ht({
2018
+ const i = new AbortController(), a = ht({
1968
2019
  endpoint: h,
1969
- captureBaseUrl: f
1970
- }), u = yt(p), P = (C) => {
1971
- Oe(C, {
1972
- namespace: g,
1973
- previewRevision: p,
2020
+ captureBaseUrl: u
2021
+ }), l = yt(g), p = (C) => {
2022
+ Me(C, {
2023
+ namespace: m,
2024
+ previewRevision: g,
1974
2025
  appOrigin: ke(),
1975
- baselineEnvironment: be(),
2026
+ baselineEnvironment: Se(),
1976
2027
  allowStaleIdentity: !0,
1977
2028
  allowMatchingFrameIdentity: !0,
1978
- pages: G.map((w, O) => {
1979
- var q;
2029
+ pages: U.map((w, R) => {
2030
+ var z;
1980
2031
  return {
1981
2032
  ...w,
1982
- fingerprint: (q = a[O]) == null ? void 0 : q.fingerprint
2033
+ fingerprint: (z = J[R]) == null ? void 0 : z.fingerprint
1983
2034
  };
1984
2035
  })
1985
2036
  }), re(C);
1986
- }, I = (C, w, O) => vt({
1987
- namespace: g,
1988
- sourceRevision: u,
1989
- transport: d,
1990
- signal: O,
2037
+ }, I = (C, w, R) => vt({
2038
+ namespace: m,
2039
+ sourceRevision: l,
2040
+ transport: a,
2041
+ signal: R,
1991
2042
  ...C.length ? { frames: C } : {},
1992
2043
  ...w ? {} : { generate: !1 }
1993
- }), D = (C, w) => {
1994
- const O = new Set(w);
1995
- return C.filter((q) => O.has(q.id));
1996
- }, R = (C, w) => C instanceof Error && C.message ? C.message : w, K = new AbortController();
1997
- if ($e(async (C) => {
1998
- var O, q, Y;
1999
- const w = await I(C, !0, K.signal);
2044
+ }), N = (C, w) => {
2045
+ const R = new Set(w);
2046
+ return C.filter((z) => R.has(z.id));
2047
+ }, M = (C, w) => C instanceof Error && C.message ? C.message : w, q = new AbortController();
2048
+ if (Oe(async (C) => {
2049
+ var R, z, G;
2050
+ const w = await I(C, !0, q.signal);
2000
2051
  if (w.status === "accepted") {
2001
- P(w.artifact);
2002
- const fe = new Set(((O = w.frameResolution) == null ? void 0 : O.exact) ?? []);
2052
+ p(w.artifact);
2053
+ const fe = new Set(((R = w.frameResolution) == null ? void 0 : R.exact) ?? []);
2003
2054
  if (C.every((le) => fe.has(le.id)))
2004
2055
  return { status: "accepted" };
2005
2056
  const ce = [
2006
- ...((q = w.frameResolution) == null ? void 0 : q.missing) ?? [],
2007
- ...((Y = w.frameResolution) == null ? void 0 : Y.stale) ?? []
2057
+ ...((z = w.frameResolution) == null ? void 0 : z.missing) ?? [],
2058
+ ...((G = w.frameResolution) == null ? void 0 : G.stale) ?? []
2008
2059
  ];
2009
2060
  return {
2010
2061
  status: "unavailable",
@@ -2016,76 +2067,76 @@ function Pn({
2016
2067
  message: w.errors.join(" ") || "The preview artifact was rejected."
2017
2068
  } : {
2018
2069
  status: "unavailable",
2019
- message: R(
2070
+ message: M(
2020
2071
  w.error,
2021
2072
  "The exact preview endpoint is unavailable."
2022
2073
  )
2023
2074
  };
2024
- }), z.current.length) {
2025
- const C = z.current.filter((w) => {
2026
- const O = Se(
2075
+ }), _.current.length) {
2076
+ const C = _.current.filter((w) => {
2077
+ const R = be(
2027
2078
  w.id,
2028
2079
  w.fingerprint
2029
2080
  ).status;
2030
- return O !== "exact" && O !== "generating";
2081
+ return R !== "exact" && R !== "generating";
2031
2082
  });
2032
2083
  de(C, { status: "checking" }), I(
2033
- z.current,
2084
+ _.current,
2034
2085
  !1,
2035
- c.signal
2086
+ i.signal
2036
2087
  ).then((w) => {
2037
- var Y, fe, ce;
2038
- if (c.signal.aborted) return;
2039
- const O = (le) => le.filter((Ne) => {
2040
- const Ae = Se(
2041
- Ne.id,
2042
- Ne.fingerprint
2088
+ var G, fe, ce;
2089
+ if (i.signal.aborted) return;
2090
+ const R = (le) => le.filter((Re) => {
2091
+ const Ae = be(
2092
+ Re.id,
2093
+ Re.fingerprint
2043
2094
  ).status;
2044
2095
  return Ae !== "generating" && Ae !== "exact";
2045
2096
  });
2046
2097
  if (w.status === "accepted") {
2047
- P(w.artifact), de(
2048
- D(
2049
- z.current,
2050
- ((Y = w.frameResolution) == null ? void 0 : Y.exact) ?? []
2098
+ p(w.artifact), de(
2099
+ N(
2100
+ _.current,
2101
+ ((G = w.frameResolution) == null ? void 0 : G.exact) ?? []
2051
2102
  ),
2052
2103
  { status: "exact" }
2053
2104
  );
2054
- const le = D(z.current, [
2105
+ const le = N(_.current, [
2055
2106
  ...((fe = w.frameResolution) == null ? void 0 : fe.missing) ?? [],
2056
2107
  ...((ce = w.frameResolution) == null ? void 0 : ce.stale) ?? []
2057
2108
  ]);
2058
- de(O(le), {
2109
+ de(R(le), {
2059
2110
  status: "outdated",
2060
2111
  message: "Select this frame to generate the exact preview."
2061
2112
  });
2062
2113
  return;
2063
2114
  }
2064
- const q = w.status === "rejected" ? w.errors.join(" ") || "The preview artifact was rejected." : R(
2115
+ const z = w.status === "rejected" ? w.errors.join(" ") || "The preview artifact was rejected." : M(
2065
2116
  w.error,
2066
2117
  "The exact preview endpoint is unavailable."
2067
2118
  );
2068
2119
  de(
2069
- O(z.current),
2120
+ R(_.current),
2070
2121
  {
2071
2122
  status: "error",
2072
2123
  reason: w.status === "rejected" ? "rejected" : "unavailable",
2073
- message: q
2124
+ message: z
2074
2125
  }
2075
2126
  );
2076
2127
  }).catch((w) => {
2077
- if (c.signal.aborted) return;
2078
- const O = z.current.filter((q) => {
2079
- const Y = Se(
2080
- q.id,
2081
- q.fingerprint
2128
+ if (i.signal.aborted) return;
2129
+ const R = _.current.filter((z) => {
2130
+ const G = be(
2131
+ z.id,
2132
+ z.fingerprint
2082
2133
  ).status;
2083
- return Y !== "generating" && Y !== "exact";
2134
+ return G !== "generating" && G !== "exact";
2084
2135
  });
2085
- de(O, {
2136
+ de(R, {
2086
2137
  status: "error",
2087
2138
  reason: "unavailable",
2088
- message: R(
2139
+ message: M(
2089
2140
  w,
2090
2141
  "The exact preview endpoint is unavailable."
2091
2142
  )
@@ -2093,47 +2144,47 @@ function Pn({
2093
2144
  });
2094
2145
  }
2095
2146
  return () => {
2096
- $e(null), K.abort(), c.abort();
2147
+ Oe(null), q.abort(), i.abort();
2097
2148
  };
2098
2149
  }, [
2099
2150
  h,
2151
+ m,
2100
2152
  g,
2101
- p,
2102
- f,
2103
- M
2153
+ u,
2154
+ $
2104
2155
  ]), ie(() => {
2105
- let c = !0;
2156
+ let i = !0;
2106
2157
  if (!v)
2107
- return ue(void 0), B(!0), () => {
2108
- c = !1;
2158
+ return ue(void 0), j(!0), () => {
2159
+ i = !1;
2109
2160
  };
2110
- const d = new AbortController();
2111
- return B(!1), ue(void 0), ne(null), Le({
2112
- endpoint: E,
2113
- signal: d.signal,
2114
- pages: J.pages.map((u) => ({
2115
- ...u,
2116
- id: u.importPageId ?? u.id,
2117
- importKind: u.importKind
2161
+ const a = new AbortController();
2162
+ return j(!1), ue(void 0), ne(null), Le({
2163
+ endpoint: P,
2164
+ signal: a.signal,
2165
+ pages: W.pages.map((l) => ({
2166
+ ...l,
2167
+ id: l.importPageId ?? l.id,
2168
+ importKind: l.importKind
2118
2169
  })),
2119
- assets: (i == null ? void 0 : i.getAssets("screens")) ?? []
2120
- }).then((u) => {
2121
- c && (ue(u.baselineEnvironment), Me(u.manifest.routes ?? null), ne(u.graph));
2170
+ assets: (c == null ? void 0 : c.getAssets("screens")) ?? []
2171
+ }).then((l) => {
2172
+ i && (ue(l.baselineEnvironment), $e(l.manifest.routes ?? null), ne(l.graph));
2122
2173
  }).catch(() => {
2123
- c && (ue(void 0), Me(null), ne(null));
2174
+ i && (ue(void 0), $e(null), ne(null));
2124
2175
  }).finally(() => {
2125
- c && B(!0);
2176
+ i && j(!0);
2126
2177
  }), () => {
2127
- c = !1, d.abort(), ue(void 0), ne(null);
2178
+ i = !1, a.abort(), ue(void 0), ne(null);
2128
2179
  };
2129
2180
  }, [
2130
- i,
2181
+ c,
2131
2182
  o,
2132
2183
  v,
2133
- E
2184
+ P
2134
2185
  ]), ie(() => {
2135
- y == null || y === J.previewOpen || (y ? J.openPreview({ notifyHost: !1 }) : J.closePreview({ notifyHost: !1 }));
2136
- }, [y]), M ? /* @__PURE__ */ b(bt, {}) : /* @__PURE__ */ b(
2186
+ S == null || S === W.previewOpen || (S ? W.openPreview({ notifyHost: !1 }) : W.closePreview({ notifyHost: !1 }));
2187
+ }, [S]), $ ? /* @__PURE__ */ b(St, {}) : /* @__PURE__ */ b(
2137
2188
  "div",
2138
2189
  {
2139
2190
  "data-pygmalion-storyboard-loading": "",
@@ -2153,83 +2204,83 @@ function Pn({
2153
2204
  }
2154
2205
  export {
2155
2206
  Rn as DEFAULT_DESIGN_COMPILE_LIMITS,
2156
- Nn as DESIGN_IMPORT_KINDS,
2157
- An as DESIGN_IR_SCHEMA,
2207
+ An as DESIGN_IMPORT_KINDS,
2208
+ Mn as DESIGN_IR_SCHEMA,
2158
2209
  On as DESIGN_IR_VERSION,
2159
- gn as PygmalionCatalogDocument,
2160
- pn as PygmalionCatalogMatrix,
2161
- mn as PygmalionCatalogSection,
2162
- Pn as PygmalionEditor,
2210
+ pn as PygmalionCatalogDocument,
2211
+ hn as PygmalionCatalogMatrix,
2212
+ gn as PygmalionCatalogSection,
2213
+ En as PygmalionEditor,
2163
2214
  wt as STORYBOARD_ENVIRONMENT_CONTROL,
2164
2215
  $n as STORYBOARD_ENVIRONMENT_QUERY,
2165
2216
  bn as SourceRefControl,
2166
- Sn as __debug,
2167
- Mn as applyTokenOverride,
2217
+ vn as __debug,
2218
+ Dn as applyTokenOverride,
2168
2219
  vt as bootstrapPreviewArtifact,
2169
- Dn as clearPreviewEnvironmentControlValues,
2170
- kn as clearPygmalionPreviewCache,
2171
- Fn as compileDesignDocument,
2172
- yn as createDesignComponentCatalog,
2173
- Xt as createDesignComponentVariantMatrix,
2174
- hn as createDesignGalleryCatalog,
2175
- Tn as createDesignImportController,
2176
- zn as createDesignIntermediateDocument,
2177
- _n as createDesignScreenCollection,
2220
+ kn as clearPreviewEnvironmentControlValues,
2221
+ Fn as clearPygmalionPreviewCache,
2222
+ Tn as compileDesignDocument,
2223
+ wn as createDesignComponentCatalog,
2224
+ Yt as createDesignComponentVariantMatrix,
2225
+ yn as createDesignGalleryCatalog,
2226
+ zn as createDesignImportController,
2227
+ _n as createDesignIntermediateDocument,
2228
+ jn as createDesignScreenCollection,
2178
2229
  ht as createPreviewArtifactHttpTransport,
2179
- jn as createPreviewCacheNamespace,
2180
- Bn as createPreviewFrameFingerprint,
2181
- Un as createPreviewRecipeFingerprint,
2182
- Hn as createStoryboardCaptureRecipeIdentity,
2183
- Ot as createStoryboardGraph,
2184
- Kt as createStoryboardGraphFromDiscovery,
2185
- qn as createStoryboardGraphViewModel,
2186
- Gn as createStoryboardRouteUrl,
2187
- Wt as designCatalogKey,
2230
+ Bn as createPreviewCacheNamespace,
2231
+ Un as createPreviewFrameFingerprint,
2232
+ Hn as createPreviewRecipeFingerprint,
2233
+ qn as createStoryboardCaptureRecipeIdentity,
2234
+ Mt as createStoryboardGraph,
2235
+ Vt as createStoryboardGraphFromDiscovery,
2236
+ Gn as createStoryboardGraphViewModel,
2237
+ Kn as createStoryboardRouteUrl,
2238
+ Lt as designCatalogKey,
2188
2239
  Qe as designCatalogRegistryName,
2189
- Kn as enumerateDesignComponentConnectionCases,
2190
- Vn as expandDesignScreenCasesViewports,
2191
- Jn as expandDesignScreenCollectionViewports,
2192
- Wn as getDesignCodegenAdapters,
2193
- Ln as getDesignComponentConnection,
2194
- Qn as getDesignComponentConnectionForComponent,
2195
- Xn as getDesignComponentConnections,
2196
- Yn as getPreviewEnvironmentControlValue,
2197
- Zn as getPreviewEnvironmentControls,
2198
- er as getPreviewEnvironmentOverride,
2199
- tr as getRecommendedPygmalionPreviewConcurrency,
2200
- be as getStoryboardBaselineEnvironment,
2240
+ Vn as enumerateDesignComponentConnectionCases,
2241
+ Jn as expandDesignScreenCasesViewports,
2242
+ Wn as expandDesignScreenCollectionViewports,
2243
+ Ln as getDesignCodegenAdapters,
2244
+ Qn as getDesignComponentConnection,
2245
+ Xn as getDesignComponentConnectionForComponent,
2246
+ Yn as getDesignComponentConnections,
2247
+ Zn as getPreviewEnvironmentControlValue,
2248
+ er as getPreviewEnvironmentControls,
2249
+ tr as getPreviewEnvironmentOverride,
2250
+ nr as getRecommendedPygmalionPreviewConcurrency,
2251
+ Se as getStoryboardBaselineEnvironment,
2201
2252
  We as getStoryboardDiscoveryBaselineEnvironment,
2202
- nr as getStoryboardGraph,
2203
- rr as getViewportPresets,
2253
+ rr as getStoryboardGraph,
2254
+ or as getViewportPresets,
2204
2255
  Le as loadStoryboardDiscovery,
2205
- or as mergeScreenPresets,
2256
+ sr as mergeScreenPresets,
2206
2257
  Ze as mergeStoryboardEnvironment,
2207
- fn as publishStoryboardDiscovery,
2208
- vn as pygmalionNavigate,
2209
- In as pygmalionOpenPreview,
2210
- xn as pygmalionResetCurrentEdits,
2211
- sr as reconstructRoutePreviewArtifactScreenshotV3,
2212
- ir as reconstructRoutePreviewArtifactSnapshotV3,
2213
- ar as registerDesignCodegenAdapter,
2214
- cr as resetTokenOverrides,
2215
- lr as resolvePreviewArtifactFrames,
2258
+ mn as publishStoryboardDiscovery,
2259
+ In as pygmalionNavigate,
2260
+ xn as pygmalionOpenPreview,
2261
+ Pn as pygmalionResetCurrentEdits,
2262
+ ir as reconstructRoutePreviewArtifactScreenshotV3,
2263
+ ar as reconstructRoutePreviewArtifactSnapshotV3,
2264
+ cr as registerDesignCodegenAdapter,
2265
+ lr as resetTokenOverrides,
2266
+ dr as resolvePreviewArtifactFrames,
2216
2267
  Tt as resolveStoryboardScreenCases,
2217
2268
  rt as setComponentRegistry,
2218
2269
  ot as setDesignComponentConnections,
2219
- dr as setPreviewEnvironmentControlValue,
2220
- mt as setPreviewEnvironmentControls,
2270
+ ur as setPreviewEnvironmentControlValue,
2271
+ pt as setPreviewEnvironmentControls,
2221
2272
  ft as setPygmalionAppOrigin,
2222
2273
  lt as setPygmalionPreviewConcurrency,
2223
- gt as setPygmalionPreviewRevision,
2274
+ mt as setPygmalionPreviewRevision,
2224
2275
  ue as setStoryboardBaselineEnvironment,
2225
2276
  ne as setStoryboardGraph,
2226
2277
  st as setTokens,
2227
2278
  it as setViewportPresets,
2228
- Rt as storyboardScreenRecipeKey,
2229
- ur as subscribePreviewEnvironmentControls,
2230
- fr as subscribeStoryboardGraph,
2231
- wn as usePygmalionProject,
2232
- gr as validateDesignComponentConnections,
2233
- mr as validatePreviewArtifactBundle,
2234
- pr as validateRoutePreviewArtifactV3Browser
2279
+ Nt as storyboardScreenRecipeKey,
2280
+ fr as subscribePreviewEnvironmentControls,
2281
+ mr as subscribeStoryboardGraph,
2282
+ Sn as usePygmalionProject,
2283
+ pr as validateDesignComponentConnections,
2284
+ gr as validatePreviewArtifactBundle,
2285
+ hr as validateRoutePreviewArtifactV3Browser
2235
2286
  };