@mt-gloss/ui 0.1.113 → 0.1.115

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,29 +1,51 @@
1
- import { u as L, f as J, S as fe, a as ge, g as E, c as k } from "./COMMITS-DG0Q_9DU.js";
2
- import { C as Pt, b as xt, P as At, e as Et, i as kt, r as Dt, d as Ot } from "./COMMITS-DG0Q_9DU.js";
3
- import { jsx as s, jsxs as h, Fragment as Z } from "react/jsx-runtime";
4
- import B, { useState as T, useRef as I, createContext as ee, useContext as te, useMemo as W, useEffect as A, useCallback as x, useLayoutEffect as be } from "react";
5
- import { useSensors as ye, useSensor as G, PointerSensor as ve, KeyboardSensor as Ce, DndContext as Se, closestCenter as Te } from "@dnd-kit/core";
6
- import { sortableKeyboardCoordinates as _e, SortableContext as we, horizontalListSortingStrategy as Ne, arrayMove as Pe, useSortable as xe } from "@dnd-kit/sortable";
7
- import { CSS as Ae } from "@dnd-kit/utilities";
8
- import { M as Q } from "./MetricCard-Cyoxhb_S.js";
9
- function ft() {
10
- const e = L();
1
+ import { u as F, h as pe, g as Ne, S as Se, b as we, j as I, d as M } from "./COMMITS-CeuMPpjt.js";
2
+ import { C as It, c as Mt, P as $t, f as Rt, i as Ft, r as Ut, e as zt } from "./COMMITS-CeuMPpjt.js";
3
+ import { jsx as a, jsxs as h, Fragment as me } from "react/jsx-runtime";
4
+ import se, { useState as E, useRef as U, createContext as he, useContext as fe, useMemo as re, useEffect as L, useCallback as x, useLayoutEffect as Ee } from "react";
5
+ import { useSensors as Pe, useSensor as le, PointerSensor as xe, KeyboardSensor as Ae, DndContext as ke, closestCenter as De } from "@dnd-kit/core";
6
+ import { sortableKeyboardCoordinates as Oe, SortableContext as Le, horizontalListSortingStrategy as Ie, arrayMove as Me, useSortable as $e } from "@dnd-kit/sortable";
7
+ import { CSS as Re } from "@dnd-kit/utilities";
8
+ import { M as oe } from "./MetricCard-Cyoxhb_S.js";
9
+ function Nt() {
10
+ const e = F();
11
11
  if (e?.state.activePanelId !== "settings") return null;
12
12
  const t = e.state.activeTrigger;
13
13
  return t?.kind === "card-overflow" ? t.cardId : null;
14
14
  }
15
- function Ee({ children: e }) {
16
- return /* @__PURE__ */ s("div", { className: "clone-stage", children: e });
15
+ function Fe({ children: e }) {
16
+ return /* @__PURE__ */ a("div", { className: "clone-stage", children: e });
17
17
  }
18
- function ke({ span: e, rotating: t = !0, children: l }) {
19
- const i = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" "), n = l != null ? "full" : "fallback";
20
- return /* @__PURE__ */ s("div", { className: i, "data-clone-fidelity": n, children: l });
18
+ function Ue({ span: e, rotating: t = !0, children: r }) {
19
+ const i = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" "), n = r != null ? "full" : "fallback";
20
+ return /* @__PURE__ */ a("div", { className: i, "data-clone-fidelity": n, children: r });
21
21
  }
22
- function De({ value: e, onChange: t }) {
22
+ function ze({
23
+ value: e,
24
+ onChange: t,
25
+ enabled: r = !1,
26
+ onToggleEnabled: i
27
+ }) {
28
+ const n = "settings-threshold-enabled";
23
29
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--threshold", children: [
24
- /* @__PURE__ */ s("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
25
- /* @__PURE__ */ h("div", { className: "settings-shell__slider-row", children: [
26
- /* @__PURE__ */ s(
30
+ /* @__PURE__ */ h("div", { className: "settings-shell__toggle-row", children: [
31
+ /* @__PURE__ */ a("label", { htmlFor: n, className: "settings-shell__toggle-label", children: "Show threshold indicator" }),
32
+ /* @__PURE__ */ a(
33
+ "input",
34
+ {
35
+ id: n,
36
+ type: "checkbox",
37
+ role: "switch",
38
+ "aria-label": "Enable threshold indicator",
39
+ "aria-checked": r,
40
+ checked: r,
41
+ onChange: (o) => i?.(o.target.checked),
42
+ className: "settings-shell__toggle"
43
+ }
44
+ )
45
+ ] }),
46
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
47
+ /* @__PURE__ */ h("div", { className: "settings-shell__slider-row", "aria-disabled": !r, children: [
48
+ /* @__PURE__ */ a(
27
49
  "input",
28
50
  {
29
51
  id: "settings-threshold-input",
@@ -36,6 +58,7 @@ function De({ value: e, onChange: t }) {
36
58
  "aria-valuenow": e,
37
59
  "aria-valuemin": 0,
38
60
  "aria-valuemax": 100,
61
+ disabled: !r,
39
62
  className: "settings-shell__slider"
40
63
  }
41
64
  ),
@@ -43,14 +66,15 @@ function De({ value: e, onChange: t }) {
43
66
  e,
44
67
  "%"
45
68
  ] })
46
- ] })
69
+ ] }),
70
+ !r && /* @__PURE__ */ a("p", { className: "settings-shell__help", "aria-live": "polite", children: "Off — the card uses its default styling. Turn on to tint values below the threshold." })
47
71
  ] });
48
72
  }
49
- function Oe({ value: e, onChange: t }) {
73
+ function Ve({ value: e, onChange: t }) {
50
74
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--timeframe", children: [
51
- /* @__PURE__ */ s("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
75
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
52
76
  /* @__PURE__ */ h("div", { className: "settings-shell__slider-row", children: [
53
- /* @__PURE__ */ s(
77
+ /* @__PURE__ */ a(
54
78
  "input",
55
79
  {
56
80
  id: "settings-timeframe-input",
@@ -73,32 +97,32 @@ function Oe({ value: e, onChange: t }) {
73
97
  ] })
74
98
  ] });
75
99
  }
76
- function Le({ id: e, onRemove: t }) {
77
- const { attributes: l, listeners: i, setNodeRef: n, transform: c, transition: u, isDragging: r } = xe({ id: e }), a = {
78
- transform: Ae.Transform.toString(c),
100
+ function He({ id: e, onRemove: t }) {
101
+ const { attributes: r, listeners: i, setNodeRef: n, transform: o, transition: u, isDragging: s } = $e({ id: e }), l = {
102
+ transform: Re.Transform.toString(o),
79
103
  transition: u,
80
- opacity: r ? 0.6 : 1
104
+ opacity: s ? 0.6 : 1
81
105
  };
82
106
  return /* @__PURE__ */ h(
83
107
  "li",
84
108
  {
85
109
  ref: n,
86
- style: a,
87
- className: `settings-shell__slot-pill${r ? " settings-shell__slot-pill--dragging" : ""}`,
110
+ style: l,
111
+ className: `settings-shell__slot-pill${s ? " settings-shell__slot-pill--dragging" : ""}`,
88
112
  children: [
89
- /* @__PURE__ */ s(
113
+ /* @__PURE__ */ a(
90
114
  "button",
91
115
  {
92
116
  type: "button",
93
117
  className: "settings-shell__slot-pill__handle",
94
118
  "aria-label": `Reorder ${e}`,
95
- ...l,
119
+ ...r,
96
120
  ...i,
97
- children: /* @__PURE__ */ s("span", { "aria-hidden": "true", className: "settings-shell__slot-pill__grip", children: "⋮⋮" })
121
+ children: /* @__PURE__ */ a("span", { "aria-hidden": "true", className: "settings-shell__slot-pill__grip", children: "⋮⋮" })
98
122
  }
99
123
  ),
100
- /* @__PURE__ */ s("span", { className: "settings-shell__slot-pill__label", children: e }),
101
- /* @__PURE__ */ s(
124
+ /* @__PURE__ */ a("span", { className: "settings-shell__slot-pill__label", children: e }),
125
+ /* @__PURE__ */ a(
102
126
  "button",
103
127
  {
104
128
  type: "button",
@@ -112,82 +136,110 @@ function Le({ id: e, onRemove: t }) {
112
136
  }
113
137
  );
114
138
  }
115
- function Ie({ value: e, onChange: t }) {
116
- const l = ye(
117
- G(ve, { activationConstraint: { distance: 4 } }),
118
- G(Ce, { coordinateGetter: _e })
119
- ), i = (c) => {
120
- const { active: u, over: r } = c;
121
- if (!r || u.id === r.id) return;
122
- const a = e.findIndex((d) => d === u.id), o = e.findIndex((d) => d === r.id);
123
- a === -1 || o === -1 || t(Pe([...e], a, o));
124
- }, n = (c) => {
125
- t(e.filter((u) => u !== c));
139
+ function Ke({ value: e, onChange: t }) {
140
+ const r = Pe(
141
+ le(xe, { activationConstraint: { distance: 4 } }),
142
+ le(Ae, { coordinateGetter: Oe })
143
+ ), i = (o) => {
144
+ const { active: u, over: s } = o;
145
+ if (!s || u.id === s.id) return;
146
+ const l = e.findIndex((d) => d === u.id), c = e.findIndex((d) => d === s.id);
147
+ l === -1 || c === -1 || t(Me([...e], l, c));
148
+ }, n = (o) => {
149
+ t(e.filter((u) => u !== o));
126
150
  };
127
151
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--slots", "aria-label": "Stack slots", children: [
128
- /* @__PURE__ */ s("span", { className: "settings-shell__label", children: "Stack slots" }),
129
- /* @__PURE__ */ s(Se, { sensors: l, collisionDetection: Te, onDragEnd: i, children: /* @__PURE__ */ s(we, { items: [...e], strategy: Ne, children: /* @__PURE__ */ s("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((c) => /* @__PURE__ */ s(Le, { id: c, onRemove: () => n(c) }, c)) }) }) }),
130
- e.length === 0 && /* @__PURE__ */ s("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
131
- /* @__PURE__ */ s("p", { className: "settings-shell__help settings-shell__help--small", children: "Drag to reorder · click × to remove" })
152
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", children: "Stack slots" }),
153
+ /* @__PURE__ */ a(ke, { sensors: r, collisionDetection: De, onDragEnd: i, children: /* @__PURE__ */ a(Le, { items: [...e], strategy: Ie, children: /* @__PURE__ */ a("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((o) => /* @__PURE__ */ a(He, { id: o, onRemove: () => n(o) }, o)) }) }) }),
154
+ e.length === 0 && /* @__PURE__ */ a("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
155
+ /* @__PURE__ */ a("p", { className: "settings-shell__help settings-shell__help--small", children: "Drag to reorder · click × to remove" })
132
156
  ] });
133
157
  }
134
- const Me = ["#1d6fd8", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"];
135
- function $e({ value: e, onSelect: t }) {
158
+ const Ye = ["#1d6fd8", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"];
159
+ function Be({
160
+ value: e,
161
+ onSelect: t,
162
+ enabled: r = !1,
163
+ onToggleEnabled: i
164
+ }) {
165
+ const n = "settings-accent-enabled";
136
166
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--color", role: "group", "aria-label": "Accent color", children: [
137
- /* @__PURE__ */ s("span", { className: "settings-shell__label", children: "Accent color" }),
138
- /* @__PURE__ */ s("div", { className: "settings-shell__swatch-row", children: Me.map((l) => {
139
- const i = e === l;
140
- return /* @__PURE__ */ s(
167
+ /* @__PURE__ */ h("div", { className: "settings-shell__toggle-row", children: [
168
+ /* @__PURE__ */ a("label", { htmlFor: n, className: "settings-shell__toggle-label", children: "Override default accent" }),
169
+ /* @__PURE__ */ a(
170
+ "input",
171
+ {
172
+ id: n,
173
+ type: "checkbox",
174
+ role: "switch",
175
+ "aria-label": "Enable accent override",
176
+ "aria-checked": r,
177
+ checked: r,
178
+ onChange: (o) => i?.(o.target.checked),
179
+ className: "settings-shell__toggle"
180
+ }
181
+ )
182
+ ] }),
183
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", children: "Accent color" }),
184
+ /* @__PURE__ */ a("div", { className: "settings-shell__swatch-row", "aria-disabled": !r, children: Ye.map((o) => {
185
+ const u = e === o;
186
+ return /* @__PURE__ */ a(
141
187
  "button",
142
188
  {
143
189
  type: "button",
144
- "aria-pressed": i,
145
- "aria-label": `Accent ${l}`,
146
- className: `settings-shell__swatch${i ? " settings-shell__swatch--active" : ""}`,
147
- style: { backgroundColor: l },
148
- onClick: () => t(l)
190
+ "aria-pressed": u,
191
+ "aria-label": `Accent ${o}`,
192
+ className: `settings-shell__swatch${u ? " settings-shell__swatch--active" : ""}`,
193
+ style: { backgroundColor: o },
194
+ disabled: !r,
195
+ onClick: () => t(o)
149
196
  },
150
- l
197
+ o
151
198
  );
152
- }) })
199
+ }) }),
200
+ !r && /* @__PURE__ */ a("p", { className: "settings-shell__help", "aria-live": "polite", children: "Off — the card uses its default accent. Turn on to override." })
153
201
  ] });
154
202
  }
155
- const Re = ["Orders", "Quota", "Unassigned"], Fe = ["threshold", "timeframe", "color"];
156
- function gt({
203
+ const We = ["Orders", "Quota", "Unassigned"], Ge = ["threshold", "timeframe", "color"];
204
+ function St({
157
205
  isOpen: e,
158
206
  cardSpan: t,
159
- cardLabel: l = "Metric",
207
+ cardLabel: r = "Metric",
160
208
  cardValue: i = "—",
161
209
  previewSlot: n,
162
- dimensions: c = Fe,
210
+ dimensions: o = Ge,
163
211
  initialTab: u,
164
- initialValues: r
212
+ initialValues: s
165
213
  }) {
166
- const a = L(), o = a?.state.activeTrigger, d = o?.kind === "card-overflow" ? o.cardId : null, p = J(), m = o?.span, f = t ?? m ?? 1, C = c[0] ?? "threshold", [b, S] = B.useState(u ?? C);
167
- B.useEffect(() => {
168
- c.includes(b) || S(C);
169
- }, [c, b, C]);
170
- const v = d != null ? a?.state?.bufferByCard?.[d]?.changes ?? {} : {}, y = typeof v.threshold == "number" ? v.threshold : typeof r?.threshold == "number" ? r.threshold : 80, P = typeof v.timeframe == "number" ? v.timeframe : typeof r?.timeframe == "number" ? r.timeframe : 30, ce = typeof v.accent == "string" ? v.accent : typeof r?.accent == "string" ? r.accent : null, de = Array.isArray(v.slots) ? v.slots : Array.isArray(r?.slots) ? r.slots : Re, ue = (_) => {
171
- d == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "threshold", value: Number(_.target.value) });
172
- }, pe = (_) => {
173
- d == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "timeframe", value: Number(_.target.value) });
174
- }, me = (_) => {
175
- d == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accent", value: _ });
176
- }, he = (_) => {
177
- d == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "slots", value: _ });
214
+ const l = F(), c = l?.state.activeTrigger, d = c?.kind === "card-overflow" ? c.cardId : null, m = pe(), f = c?.span, v = t ?? f ?? 1, p = o[0] ?? "threshold", [b, w] = se.useState(u ?? p);
215
+ se.useEffect(() => {
216
+ o.includes(b) || w(p);
217
+ }, [o, b, p]);
218
+ const T = d != null ? l?.state?.bufferByCard?.[d]?.changes ?? {} : {}, y = typeof T.threshold == "number" ? T.threshold : typeof s?.threshold == "number" ? s.threshold : 80, A = typeof T.timeframe == "number" ? T.timeframe : typeof s?.timeframe == "number" ? s.timeframe : 30, z = typeof T.accent == "string" ? T.accent : typeof s?.accent == "string" ? s.accent : null, V = Array.isArray(T.slots) ? T.slots : Array.isArray(s?.slots) ? s.slots : We, D = typeof T.thresholdEnabled == "boolean" ? T.thresholdEnabled : typeof s?.thresholdEnabled == "boolean" ? s.thresholdEnabled : !1, H = typeof T.accentEnabled == "boolean" ? T.accentEnabled : typeof s?.accentEnabled == "boolean" ? s.accentEnabled : !1, K = (C) => {
219
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "threshold", value: Number(C.target.value) });
220
+ }, Y = (C) => {
221
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "timeframe", value: Number(C.target.value) });
222
+ }, ae = (C) => {
223
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accent", value: C });
224
+ }, B = (C) => {
225
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "slots", value: C });
226
+ }, g = (C) => {
227
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "thresholdEnabled", value: C });
228
+ }, N = (C) => {
229
+ d == null || l == null || l.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accentEnabled", value: C });
178
230
  };
179
231
  return /* @__PURE__ */ h("div", { className: "settings-shell", "data-shell": "settings", "aria-hidden": !e, children: [
180
- /* @__PURE__ */ s("div", { "aria-hidden": "true", children: /* @__PURE__ */ s(Ee, { children: /* @__PURE__ */ s(ke, { span: f, rotating: !p, children: n ?? /* @__PURE__ */ h(Z, { children: [
181
- /* @__PURE__ */ s("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: l }),
182
- /* @__PURE__ */ s("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: i })
232
+ /* @__PURE__ */ a("div", { "aria-hidden": "true", children: /* @__PURE__ */ a(Fe, { children: /* @__PURE__ */ a(Ue, { span: v, rotating: !m, children: n ?? /* @__PURE__ */ h(me, { children: [
233
+ /* @__PURE__ */ a("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: r }),
234
+ /* @__PURE__ */ a("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: i })
183
235
  ] }) }) }) }),
184
- /* @__PURE__ */ s(
185
- fe,
236
+ /* @__PURE__ */ a(
237
+ Ne,
186
238
  {
187
- dimensions: c,
239
+ dimensions: o,
188
240
  activeTab: b,
189
- onSelect: S,
190
- reduced: p
241
+ onSelect: w,
242
+ reduced: m
191
243
  }
192
244
  ),
193
245
  /* @__PURE__ */ h(
@@ -199,16 +251,32 @@ function gt({
199
251
  tabIndex: 0,
200
252
  className: "settings-shell__tabpanel",
201
253
  children: [
202
- b === "threshold" && /* @__PURE__ */ s(De, { value: y, onChange: ue }),
203
- b === "timeframe" && /* @__PURE__ */ s(Oe, { value: P, onChange: pe }),
204
- b === "slots" && /* @__PURE__ */ s(Ie, { value: de, onChange: he }),
205
- b === "color" && /* @__PURE__ */ s($e, { value: ce, onSelect: me })
254
+ b === "threshold" && /* @__PURE__ */ a(
255
+ ze,
256
+ {
257
+ value: y,
258
+ onChange: K,
259
+ enabled: D,
260
+ onToggleEnabled: g
261
+ }
262
+ ),
263
+ b === "timeframe" && /* @__PURE__ */ a(Ve, { value: A, onChange: Y }),
264
+ b === "slots" && /* @__PURE__ */ a(Ke, { value: V, onChange: B }),
265
+ b === "color" && /* @__PURE__ */ a(
266
+ Be,
267
+ {
268
+ value: z,
269
+ onSelect: ae,
270
+ enabled: H,
271
+ onToggleEnabled: N
272
+ }
273
+ )
206
274
  ]
207
275
  }
208
276
  )
209
277
  ] });
210
278
  }
211
- const ne = [
279
+ const ge = [
212
280
  "Overbought",
213
281
  "What's selling",
214
282
  "On track vs plan",
@@ -216,7 +284,7 @@ const ne = [
216
284
  "Vendor performance",
217
285
  "Assortment mix",
218
286
  "Customer retention"
219
- ], ae = "Overbought", z = {
287
+ ], be = "Overbought", ee = {
220
288
  Overbought: {
221
289
  headline: "Am I overbought?",
222
290
  helper: "Find slow-moving inventory before discount cycles eat margin."
@@ -246,8 +314,8 @@ const ne = [
246
314
  helper: "Repeat-rate and lapsed-account signals from the buyer file."
247
315
  }
248
316
  };
249
- z["Customer retention"].beta = !0;
250
- const se = {
317
+ ee["Customer retention"].beta = !0;
318
+ const ve = {
251
319
  Overbought: {
252
320
  primary: [
253
321
  {
@@ -712,47 +780,47 @@ const se = {
712
780
  ]
713
781
  }
714
782
  };
715
- function re({
783
+ function ye({
716
784
  lenses: e,
717
785
  activeLens: t,
718
- onLensChange: l,
786
+ onLensChange: r,
719
787
  variant: i = "pills",
720
- lensMeta: n = z
788
+ lensMeta: n = ee
721
789
  }) {
722
- return i === "pills" ? /* @__PURE__ */ s("div", { className: "cat-pills-wrap", children: /* @__PURE__ */ s("div", { className: "cat-pills", role: "tablist", "aria-label": "Metric lenses", children: e.map((c) => {
723
- const u = c === t, r = n[c], a = ["cat-pill"];
724
- return u && a.push("active"), /* @__PURE__ */ h(
790
+ return i === "pills" ? /* @__PURE__ */ a("div", { className: "cat-pills-wrap", children: /* @__PURE__ */ a("div", { className: "cat-pills", role: "tablist", "aria-label": "Metric lenses", children: e.map((o) => {
791
+ const u = o === t, s = n[o], l = ["cat-pill"];
792
+ return u && l.push("active"), /* @__PURE__ */ h(
725
793
  "button",
726
794
  {
727
795
  type: "button",
728
796
  role: "tab",
729
797
  "aria-selected": u,
730
- className: a.join(" "),
731
- "data-lens": c,
798
+ className: l.join(" "),
799
+ "data-lens": o,
732
800
  onClick: () => {
733
- u || l(c);
801
+ u || r(o);
734
802
  },
735
803
  children: [
736
- c,
737
- r?.beta && /* @__PURE__ */ s("span", { className: "cat-pill-beta", "aria-label": "Beta", children: "BETA" })
804
+ o,
805
+ s?.beta && /* @__PURE__ */ a("span", { className: "cat-pill-beta", "aria-label": "Beta", children: "BETA" })
738
806
  ]
739
807
  },
740
- c
808
+ o
741
809
  );
742
- }) }) }) : /* @__PURE__ */ s(Ue, { lenses: e, activeLens: t, onLensChange: l });
810
+ }) }) }) : /* @__PURE__ */ a(Qe, { lenses: e, activeLens: t, onLensChange: r });
743
811
  }
744
- function Ue({
812
+ function Qe({
745
813
  lenses: e,
746
814
  activeLens: t,
747
- onLensChange: l
815
+ onLensChange: r
748
816
  }) {
749
- const [i, n] = T(!1), c = I(null), u = () => {
750
- c.current != null && (window.clearTimeout(c.current), c.current = null);
751
- }, r = () => {
752
- u(), c.current = window.setTimeout(() => n(!1), 100);
753
- }, a = e.filter((o) => o !== t);
754
- return /* @__PURE__ */ s("div", { className: "cat-segmented-wrap", children: /* @__PURE__ */ h("div", { className: "cat-segmented", children: [
755
- /* @__PURE__ */ s(
817
+ const [i, n] = E(!1), o = U(null), u = () => {
818
+ o.current != null && (window.clearTimeout(o.current), o.current = null);
819
+ }, s = () => {
820
+ u(), o.current = window.setTimeout(() => n(!1), 100);
821
+ }, l = e.filter((c) => c !== t);
822
+ return /* @__PURE__ */ a("div", { className: "cat-segmented-wrap", children: /* @__PURE__ */ h("div", { className: "cat-segmented", children: [
823
+ /* @__PURE__ */ a(
756
824
  "button",
757
825
  {
758
826
  type: "button",
@@ -769,28 +837,28 @@ function Ue({
769
837
  onMouseEnter: () => {
770
838
  u(), n(!0);
771
839
  },
772
- onMouseLeave: r,
840
+ onMouseLeave: s,
773
841
  children: [
774
- /* @__PURE__ */ s("button", { type: "button", className: "cat-seg cat-seg-more-btn", "aria-haspopup": "menu", "aria-expanded": i, children: "More ▾" }),
775
- i && /* @__PURE__ */ s(
842
+ /* @__PURE__ */ a("button", { type: "button", className: "cat-seg cat-seg-more-btn", "aria-haspopup": "menu", "aria-expanded": i, children: "More ▾" }),
843
+ i && /* @__PURE__ */ a(
776
844
  "div",
777
845
  {
778
846
  className: "cat-seg-overflow",
779
847
  role: "menu",
780
848
  onMouseEnter: u,
781
- onMouseLeave: r,
782
- children: a.map((o) => /* @__PURE__ */ s(
849
+ onMouseLeave: s,
850
+ children: l.map((c) => /* @__PURE__ */ a(
783
851
  "button",
784
852
  {
785
853
  type: "button",
786
- "data-lens": o,
854
+ "data-lens": c,
787
855
  role: "menuitem",
788
856
  onClick: () => {
789
- l(o), n(!1);
857
+ r(c), n(!1);
790
858
  },
791
- children: o
859
+ children: c
792
860
  },
793
- o
861
+ c
794
862
  ))
795
863
  }
796
864
  )
@@ -799,46 +867,46 @@ function Ue({
799
867
  )
800
868
  ] }) });
801
869
  }
802
- function V({ tiles: e, selectedTileId: t, onSelectTile: l, renderTile: i }) {
803
- return /* @__PURE__ */ s("div", { className: "cat-tiles", children: e.map((n) => {
804
- const c = n.id === t, u = n.subStats != null && n.subStats.length > 0;
805
- let r = null;
806
- u ? n.subStats.length === 5 ? r = "span-5" : n.subStats.length === 3 ? r = "span-3" : r = "span-2" : n.stack === !0 && (r = "span-2");
807
- const a = ["cat-tile"];
808
- r && a.push(r), c && a.push("selected"), n.isNew && a.push("is-new"), n.startHere && a.push("start-here"), n.donut && a.push("has-donut");
809
- const o = 1;
870
+ function X({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: i }) {
871
+ return /* @__PURE__ */ a("div", { className: "cat-tiles", children: e.map((n) => {
872
+ const o = n.id === t, u = n.subStats != null && n.subStats.length > 0;
873
+ let s = null;
874
+ u ? n.subStats.length === 5 ? s = "span-5" : n.subStats.length === 3 ? s = "span-3" : s = "span-2" : n.stack === !0 && (s = "span-2");
875
+ const l = ["cat-tile"];
876
+ s && l.push(s), o && l.push("selected"), n.isNew && l.push("is-new"), n.startHere && l.push("start-here"), n.donut && l.push("has-donut");
877
+ const c = 1;
810
878
  let d = 0.7;
811
879
  if (n.donut) {
812
- const p = /([\d.]+)\s*%/.exec(n.value);
813
- if (p) {
814
- const m = parseFloat(p[1]);
815
- Number.isFinite(m) && (d = Math.max(0, Math.min(1, m / 100)));
880
+ const m = /([\d.]+)\s*%/.exec(n.value);
881
+ if (m) {
882
+ const f = parseFloat(m[1]);
883
+ Number.isFinite(f) && (d = Math.max(0, Math.min(1, f / 100)));
816
884
  }
817
885
  }
818
886
  return /* @__PURE__ */ h(
819
887
  "button",
820
888
  {
821
889
  type: "button",
822
- className: a.join(" "),
890
+ className: l.join(" "),
823
891
  "data-metric": n.id,
824
892
  "data-desc": n.desc,
825
- "data-col-span": String(o),
893
+ "data-col-span": String(c),
826
894
  "data-donut": n.donut ? "true" : void 0,
827
895
  "data-accent": n.accent,
828
- "aria-pressed": c,
829
- onClick: () => l(n.id, n.desc),
896
+ "aria-pressed": o,
897
+ onClick: () => r(n.id, n.desc),
830
898
  style: n.accent ? { "--cat-tile-accent": n.accent } : void 0,
831
899
  children: [
832
- n.startHere && /* @__PURE__ */ s("span", { className: "cat-tile-start-here", "aria-hidden": "true", children: "START HERE" }),
833
- i ? i(n) : /* @__PURE__ */ s(
900
+ n.startHere && /* @__PURE__ */ a("span", { className: "cat-tile-start-here", "aria-hidden": "true", children: "START HERE" }),
901
+ i ? i(n) : /* @__PURE__ */ a(
834
902
  "div",
835
903
  {
836
904
  className: "cat-tile-primitive-wrapper gloss-metric-card",
837
905
  "data-col-span": "1",
838
906
  style: { pointerEvents: "none", width: "100%", height: "100%" },
839
907
  "aria-hidden": "true",
840
- children: n.donut ? /* @__PURE__ */ s(
841
- Q,
908
+ children: n.donut ? /* @__PURE__ */ a(
909
+ oe,
842
910
  {
843
911
  variant: "donut",
844
912
  label: n.label,
@@ -846,40 +914,40 @@ function V({ tiles: e, selectedTileId: t, onSelectTile: l, renderTile: i }) {
846
914
  donutValue: d,
847
915
  donutMax: 1,
848
916
  accentColor: n.accent,
849
- colSpan: o
917
+ colSpan: c
850
918
  }
851
- ) : /* @__PURE__ */ s(
852
- Q,
919
+ ) : /* @__PURE__ */ a(
920
+ oe,
853
921
  {
854
922
  variant: "standard",
855
923
  label: n.label,
856
924
  value: n.value,
857
- colSpan: o
925
+ colSpan: c
858
926
  }
859
927
  )
860
928
  }
861
929
  ),
862
- n.variants && n.variants.length > 0 && /* @__PURE__ */ s("span", { className: "cat-tile-variants", "aria-hidden": "true", children: n.variants.map((p) => /* @__PURE__ */ s("span", { children: p }, p)) }),
863
- n.isNew && /* @__PURE__ */ s("span", { className: "cat-tile-new-dot", "aria-hidden": "true" })
930
+ n.variants && n.variants.length > 0 && /* @__PURE__ */ a("span", { className: "cat-tile-variants", "aria-hidden": "true", children: n.variants.map((m) => /* @__PURE__ */ a("span", { children: m }, m)) }),
931
+ n.isNew && /* @__PURE__ */ a("span", { className: "cat-tile-new-dot", "aria-hidden": "true" })
864
932
  ]
865
933
  },
866
934
  n.id
867
935
  );
868
936
  }) });
869
937
  }
870
- const Y = ee(null);
871
- function Ve() {
872
- return te(Y);
938
+ const te = he(null);
939
+ function qe() {
940
+ return fe(te);
873
941
  }
874
- function He({ mode: e, dispatch: t }) {
875
- const l = Ve();
876
- if (l == null && e == null) return null;
877
- const i = l?.mode ?? e ?? "add", n = l?.selectedTileId ?? null, c = l?.description ?? null, u = n == null;
942
+ function je({ mode: e, dispatch: t }) {
943
+ const r = qe();
944
+ if (r == null && e == null) return null;
945
+ const i = r?.mode ?? e ?? "add", n = r?.selectedTileId ?? null, o = r?.description ?? null, u = n == null;
878
946
  return /* @__PURE__ */ h("div", { className: "panel-footer catalog", children: [
879
- /* @__PURE__ */ s("div", { className: "cat-description", id: "cat-desc", children: c ?? /* @__PURE__ */ s("em", { children: "Tap a metric to see its description" }) }),
947
+ /* @__PURE__ */ a("div", { className: "cat-description", id: "cat-desc", children: o ?? /* @__PURE__ */ a("em", { children: "Tap a metric to see its description" }) }),
880
948
  /* @__PURE__ */ h("div", { style: { display: "flex", padding: "10px 14px", gap: 8 }, children: [
881
- /* @__PURE__ */ s("div", { className: "spacer", style: { flex: 1 } }),
882
- /* @__PURE__ */ s(
949
+ /* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
950
+ /* @__PURE__ */ a(
883
951
  "button",
884
952
  {
885
953
  id: "btn-cat-cancel",
@@ -889,7 +957,7 @@ function He({ mode: e, dispatch: t }) {
889
957
  children: "Cancel"
890
958
  }
891
959
  ),
892
- i === "add" && /* @__PURE__ */ s(
960
+ i === "add" && /* @__PURE__ */ a(
893
961
  "button",
894
962
  {
895
963
  id: "btn-cat-add",
@@ -900,7 +968,7 @@ function He({ mode: e, dispatch: t }) {
900
968
  children: "Add metric"
901
969
  }
902
970
  ),
903
- i === "replace" && /* @__PURE__ */ s(
971
+ i === "replace" && /* @__PURE__ */ a(
904
972
  "button",
905
973
  {
906
974
  id: "btn-cat-replace",
@@ -914,170 +982,174 @@ function He({ mode: e, dispatch: t }) {
914
982
  ] })
915
983
  ] });
916
984
  }
917
- function q(e, t) {
985
+ function ie(e, t) {
918
986
  if (t.length === 0) return !0;
919
- const l = t.toLowerCase();
920
- if (e.label.toLowerCase().includes(l) || e.value.toLowerCase().includes(l)) return !0;
987
+ const r = t.toLowerCase();
988
+ if (e.label.toLowerCase().includes(r) || e.value.toLowerCase().includes(r)) return !0;
921
989
  if (e.subStats) {
922
990
  for (const i of e.subStats)
923
- if (i.label.toLowerCase().includes(l) || i.value.toLowerCase().includes(l)) return !0;
991
+ if (i.label.toLowerCase().includes(r) || i.value.toLowerCase().includes(r)) return !0;
924
992
  }
925
993
  return !1;
926
994
  }
927
- function bt({
995
+ function wt({
928
996
  isOpen: e,
929
- lenses: t = ne,
930
- defaultLens: l = ae,
931
- tilesByLens: i = se,
932
- lensMeta: n = z,
933
- footerSlot: c,
997
+ lenses: t = ge,
998
+ defaultLens: r = be,
999
+ tilesByLens: i = ve,
1000
+ lensMeta: n = ee,
1001
+ footerSlot: o,
934
1002
  renderTile: u
935
1003
  }) {
936
- const [r, a] = T(l), [o, d] = T(null), [p, m] = T(null), [f, C] = T(""), b = i[r] ?? { primary: [] }, S = n[r], w = W(
937
- () => b.primary.filter((y) => q(y, f)),
938
- [b.primary, f]
939
- ), v = W(
940
- () => (b.secondary ?? []).filter((y) => q(y, f)),
941
- [b.secondary, f]
1004
+ const [s, l] = E(r), [c, d] = E(null), [m, f] = E(null), [v, p] = E(""), b = i[s] ?? { primary: [] }, w = n[s], S = re(
1005
+ () => b.primary.filter((y) => ie(y, v)),
1006
+ [b.primary, v]
1007
+ ), T = re(
1008
+ () => (b.secondary ?? []).filter((y) => ie(y, v)),
1009
+ [b.secondary, v]
942
1010
  );
943
1011
  return /* @__PURE__ */ h(
944
- Y.Provider,
1012
+ te.Provider,
945
1013
  {
946
- value: { mode: "add", selectedTileId: o, description: p },
1014
+ value: { mode: "add", selectedTileId: c, description: m },
947
1015
  children: [
948
1016
  /* @__PURE__ */ h("div", { "data-shell": "catalog-add", "aria-hidden": !e, children: [
949
- /* @__PURE__ */ s("div", { className: "cat-search", children: /* @__PURE__ */ s(
1017
+ /* @__PURE__ */ a("div", { className: "cat-search", children: /* @__PURE__ */ a(
950
1018
  "input",
951
1019
  {
952
1020
  type: "search",
953
1021
  className: "cat-search-input",
954
1022
  placeholder: "Search metrics",
955
1023
  "aria-label": "Search metrics",
956
- value: f,
957
- onChange: (y) => C(y.target.value)
1024
+ value: v,
1025
+ onChange: (y) => p(y.target.value)
958
1026
  }
959
1027
  ) }),
960
- /* @__PURE__ */ s(
961
- re,
1028
+ /* @__PURE__ */ a(
1029
+ ye,
962
1030
  {
963
1031
  lenses: t,
964
- activeLens: r,
1032
+ activeLens: s,
965
1033
  lensMeta: n,
966
1034
  variant: "pills",
967
1035
  onLensChange: (y) => {
968
- a(y), d(null), m(null), C("");
1036
+ l(y), d(null), f(null), p("");
969
1037
  }
970
1038
  }
971
1039
  ),
972
- S && /* @__PURE__ */ h("div", { className: "cat-lens-meta", children: [
973
- /* @__PURE__ */ s("h3", { className: "cat-lens-headline", children: S.headline }),
974
- /* @__PURE__ */ s("p", { className: "cat-lens-helper", children: S.helper })
1040
+ w && /* @__PURE__ */ h("div", { className: "cat-lens-meta", children: [
1041
+ /* @__PURE__ */ a("h3", { className: "cat-lens-headline", children: w.headline }),
1042
+ /* @__PURE__ */ a("p", { className: "cat-lens-helper", children: w.helper })
975
1043
  ] }),
976
- /* @__PURE__ */ s(
977
- V,
1044
+ /* @__PURE__ */ a(
1045
+ X,
978
1046
  {
979
- tiles: w,
980
- selectedTileId: o,
981
- onSelectTile: (y, P) => {
982
- d(y), m(P);
1047
+ tiles: S,
1048
+ selectedTileId: c,
1049
+ onSelectTile: (y, A) => {
1050
+ d(y), f(A);
983
1051
  },
984
1052
  renderTile: u
985
1053
  }
986
1054
  ),
987
- v.length > 0 && /* @__PURE__ */ h("div", { className: "cat-more-in-lens", children: [
988
- /* @__PURE__ */ s("div", { className: "cat-more-in-lens__heading", children: "MORE IN THIS LENS" }),
989
- /* @__PURE__ */ s(
990
- V,
1055
+ T.length > 0 && /* @__PURE__ */ h("div", { className: "cat-more-in-lens", children: [
1056
+ /* @__PURE__ */ a("div", { className: "cat-more-in-lens__heading", children: "MORE IN THIS LENS" }),
1057
+ /* @__PURE__ */ a(
1058
+ X,
991
1059
  {
992
- tiles: v,
993
- selectedTileId: o,
994
- onSelectTile: (y, P) => {
995
- d(y), m(P);
1060
+ tiles: T,
1061
+ selectedTileId: c,
1062
+ onSelectTile: (y, A) => {
1063
+ d(y), f(A);
996
1064
  },
997
1065
  renderTile: u
998
1066
  }
999
1067
  )
1000
1068
  ] }),
1001
- w.length === 0 && v.length === 0 && f.length > 0 && /* @__PURE__ */ h("div", { className: "cat-empty", children: [
1069
+ S.length === 0 && T.length === 0 && v.length > 0 && /* @__PURE__ */ h("div", { className: "cat-empty", children: [
1002
1070
  'No metrics match "',
1003
- f,
1071
+ v,
1004
1072
  '".'
1005
1073
  ] })
1006
1074
  ] }),
1007
- c
1075
+ o
1008
1076
  ]
1009
1077
  }
1010
1078
  );
1011
1079
  }
1012
- function yt({
1080
+ function Et({
1013
1081
  isOpen: e,
1014
1082
  replacingLabel: t,
1015
- lenses: l = ne,
1016
- defaultLens: i = ae,
1017
- tilesByLens: n = se,
1018
- footerSlot: c,
1083
+ lenses: r = ge,
1084
+ defaultLens: i = be,
1085
+ tilesByLens: n = ve,
1086
+ footerSlot: o,
1019
1087
  renderTile: u
1020
1088
  }) {
1021
- const [r, a] = T(i), [o, d] = T(null), [p, m] = T(null), f = n[r] ?? { primary: [] }, C = [...f.primary, ...f.secondary ?? []];
1089
+ const [s, l] = E(i), [c, d] = E(null), [m, f] = E(null), v = n[s] ?? { primary: [] }, p = [...v.primary, ...v.secondary ?? []];
1022
1090
  return /* @__PURE__ */ h(
1023
- Y.Provider,
1091
+ te.Provider,
1024
1092
  {
1025
- value: { mode: "replace", selectedTileId: o, description: p },
1093
+ value: { mode: "replace", selectedTileId: c, description: m },
1026
1094
  children: [
1027
1095
  /* @__PURE__ */ h("div", { "data-shell": "catalog-replace", "aria-hidden": !e, children: [
1028
1096
  t && /* @__PURE__ */ h("p", { className: "cat-subtitle", children: [
1029
1097
  "replacing ",
1030
1098
  t
1031
1099
  ] }),
1032
- /* @__PURE__ */ s(
1033
- re,
1100
+ /* @__PURE__ */ a(
1101
+ ye,
1034
1102
  {
1035
- lenses: l,
1036
- activeLens: r,
1103
+ lenses: r,
1104
+ activeLens: s,
1037
1105
  onLensChange: (b) => {
1038
- a(b), d(null), m(null);
1106
+ l(b), d(null), f(null);
1039
1107
  }
1040
1108
  }
1041
1109
  ),
1042
- /* @__PURE__ */ s(
1043
- V,
1110
+ /* @__PURE__ */ a(
1111
+ X,
1044
1112
  {
1045
- tiles: C,
1046
- selectedTileId: o,
1047
- onSelectTile: (b, S) => {
1048
- d(b), m(S);
1113
+ tiles: p,
1114
+ selectedTileId: c,
1115
+ onSelectTile: (b, w) => {
1116
+ d(b), f(w);
1049
1117
  },
1050
1118
  renderTile: u
1051
1119
  }
1052
1120
  )
1053
1121
  ] }),
1054
- c
1122
+ o
1055
1123
  ]
1056
1124
  }
1057
1125
  );
1058
1126
  }
1059
- const le = ee(null);
1060
- function oe() {
1061
- return te(le);
1127
+ const Ce = he(null);
1128
+ function _e() {
1129
+ return fe(Ce);
1062
1130
  }
1063
- function ze(e = {}) {
1064
- const l = oe()?.setPages;
1131
+ function Ze(e = {}) {
1132
+ const t = _e(), r = t?.createPage, i = t?.setPages;
1065
1133
  return /* @__PURE__ */ h(
1066
1134
  "div",
1067
1135
  {
1068
1136
  className: "panel-footer pm",
1069
1137
  style: { display: "flex", justifyContent: "flex-end", padding: "10px 14px" },
1070
1138
  children: [
1071
- /* @__PURE__ */ s("div", { className: "spacer", style: { flex: 1 } }),
1072
- /* @__PURE__ */ s(
1139
+ /* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
1140
+ /* @__PURE__ */ a(
1073
1141
  "button",
1074
1142
  {
1075
1143
  id: "btn-new-page",
1076
1144
  type: "button",
1077
1145
  className: "btn btn-primary",
1078
1146
  onClick: () => {
1079
- l && l((i) => [
1080
- ...i,
1147
+ if (r) {
1148
+ r();
1149
+ return;
1150
+ }
1151
+ i && i((n) => [
1152
+ ...n,
1081
1153
  { id: `new-${Date.now()}`, name: "Untitled", active: !1 }
1082
1154
  ]);
1083
1155
  },
@@ -1088,27 +1160,29 @@ function ze(e = {}) {
1088
1160
  }
1089
1161
  );
1090
1162
  }
1091
- function Ye({ page: e, onRename: t, onKebab: l, onDragStart: i }) {
1092
- const n = oe(), [c, u] = T(!1), r = I(null);
1093
- A(() => {
1094
- if (!c) return;
1095
- const m = (f) => {
1096
- r.current && (r.current.contains(f.target) || u(!1));
1163
+ function ce({ page: e, onRename: t, onKebab: r, onDragStart: i, onSwitchPage: n }) {
1164
+ const o = _e(), [u, s] = E(!1), l = U(null);
1165
+ L(() => {
1166
+ if (!u) return;
1167
+ const p = (b) => {
1168
+ l.current && (l.current.contains(b.target) || s(!1));
1097
1169
  };
1098
- return document.addEventListener("mousedown", m, !0), () => document.removeEventListener("mousedown", m, !0);
1099
- }, [c]);
1100
- const a = () => {
1101
- if (u(!1), t) return t(e.id);
1102
- if (!n?.renamePage) return;
1103
- const m = window.prompt("Rename page", e.name);
1104
- m != null && m.trim().length > 0 && n.renamePage(e.id, m.trim());
1105
- }, o = () => {
1106
- u(!1), n?.duplicatePage?.(e.id);
1170
+ return document.addEventListener("mousedown", p, !0), () => document.removeEventListener("mousedown", p, !0);
1171
+ }, [u]);
1172
+ const c = () => {
1173
+ if (s(!1), t) return t(e.id);
1174
+ if (!o?.renamePage) return;
1175
+ const p = window.prompt("Rename page", e.name);
1176
+ p != null && p.trim().length > 0 && o.renamePage(e.id, p.trim());
1107
1177
  }, d = () => {
1108
- u(!1), !e.active && n?.deletePage?.(e.id);
1109
- }, p = ["pm-row"];
1110
- return e.active && p.push("active"), /* @__PURE__ */ h("div", { ref: r, className: p.join(" "), "data-page-id": e.id, role: "listitem", children: [
1111
- /* @__PURE__ */ s(
1178
+ s(!1), o?.duplicatePage?.(e.id);
1179
+ }, m = () => {
1180
+ s(!1), o?.deletePage?.(e.id);
1181
+ }, f = (p) => {
1182
+ p.stopPropagation(), n && !e.active && n(e.id);
1183
+ }, v = ["pm-row"];
1184
+ return e.active && v.push("active"), /* @__PURE__ */ h("div", { ref: l, className: v.join(" "), "data-page-id": e.id, role: "listitem", children: [
1185
+ /* @__PURE__ */ a(
1112
1186
  "div",
1113
1187
  {
1114
1188
  className: "pm-handle",
@@ -1117,83 +1191,173 @@ function Ye({ page: e, onRename: t, onKebab: l, onDragStart: i }) {
1117
1191
  children: "⋮⋮"
1118
1192
  }
1119
1193
  ),
1120
- /* @__PURE__ */ s("div", { className: "pm-name", children: e.name }),
1121
- /* @__PURE__ */ s(
1194
+ /* @__PURE__ */ a(
1195
+ "div",
1196
+ {
1197
+ className: "pm-name",
1198
+ role: n && !e.active ? "button" : void 0,
1199
+ tabIndex: n && !e.active ? 0 : void 0,
1200
+ onClick: n ? f : void 0,
1201
+ onKeyDown: (p) => {
1202
+ !n || e.active || (p.key === "Enter" || p.key === " ") && (p.preventDefault(), p.stopPropagation(), n(e.id));
1203
+ },
1204
+ "aria-label": n && !e.active ? `Switch to ${e.name}` : void 0,
1205
+ children: e.name
1206
+ }
1207
+ ),
1208
+ /* @__PURE__ */ a(
1122
1209
  "button",
1123
1210
  {
1124
1211
  type: "button",
1125
1212
  className: "pm-kebab",
1126
1213
  "aria-label": "Page options",
1127
1214
  "aria-haspopup": "menu",
1128
- "aria-expanded": c,
1129
- onClick: (m) => {
1130
- if (m.stopPropagation(), l) return l(e.id);
1131
- u((f) => !f);
1215
+ "aria-expanded": u,
1216
+ onPointerDown: (p) => p.stopPropagation(),
1217
+ onMouseDown: (p) => p.stopPropagation(),
1218
+ onClick: (p) => {
1219
+ if (p.stopPropagation(), r) return r(e.id);
1220
+ s((b) => !b);
1132
1221
  },
1133
1222
  children: "⋯"
1134
1223
  }
1135
1224
  ),
1136
- c && /* @__PURE__ */ h("div", { className: "pm-kebab-menu", role: "menu", "data-page-id": e.id, children: [
1137
- /* @__PURE__ */ s("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: a, children: "Rename" }),
1138
- /* @__PURE__ */ s("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: o, children: "Duplicate" }),
1139
- /* @__PURE__ */ s(
1140
- "button",
1141
- {
1142
- type: "button",
1143
- role: "menuitem",
1144
- className: "pm-kebab-menu__item pm-kebab-menu__item--danger",
1145
- onClick: d,
1146
- "aria-disabled": e.active,
1147
- children: "Delete"
1148
- }
1149
- )
1150
- ] })
1225
+ u && /* @__PURE__ */ h(
1226
+ "div",
1227
+ {
1228
+ className: "pm-kebab-menu",
1229
+ role: "menu",
1230
+ "data-page-id": e.id,
1231
+ onPointerDown: (p) => p.stopPropagation(),
1232
+ onMouseDown: (p) => p.stopPropagation(),
1233
+ children: [
1234
+ /* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: c, children: "Rename" }),
1235
+ /* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: d, children: "Duplicate" }),
1236
+ /* @__PURE__ */ a(
1237
+ "button",
1238
+ {
1239
+ type: "button",
1240
+ role: "menuitem",
1241
+ className: "pm-kebab-menu__item pm-kebab-menu__item--danger",
1242
+ onClick: m,
1243
+ children: "Delete"
1244
+ }
1245
+ )
1246
+ ]
1247
+ }
1248
+ )
1151
1249
  ] });
1152
1250
  }
1153
- const Ke = [
1251
+ const Xe = [
1154
1252
  { id: "p-pipeline", name: "My Pipeline", active: !0 },
1155
1253
  { id: "p-numbers", name: "My Numbers", active: !1 },
1156
1254
  { id: "p-morning", name: "My Morning", active: !1 },
1157
1255
  { id: "p-accounts", name: "My Accounts", active: !1 }
1158
1256
  ];
1159
- function vt({
1257
+ function Pt({
1160
1258
  isOpen: e,
1161
- pages: t = Ke,
1162
- footerSlot: l
1259
+ pages: t = Xe,
1260
+ footerSlot: r,
1261
+ externalPages: i,
1262
+ activePageId: n,
1263
+ onRename: o,
1264
+ onDuplicate: u,
1265
+ onDelete: s,
1266
+ onReorder: l,
1267
+ onCreatePage: c,
1268
+ onSwitchPage: d
1163
1269
  }) {
1164
- const [i, n] = T(() => [...t]), c = x((a, o) => {
1165
- n((d) => d.map((p) => p.id === a ? { ...p, name: o } : p));
1166
- }, []), u = x((a) => {
1167
- n((o) => {
1168
- const d = o.find((f) => f.id === a);
1169
- if (!d) return o;
1170
- const p = {
1171
- id: `${d.id}-copy-${Date.now()}`,
1172
- name: `${d.name} copy`,
1270
+ const [m, f] = E(() => [...t]), v = x((g, N) => {
1271
+ f((C) => C.map((P) => P.id === g ? { ...P, name: N } : P));
1272
+ }, []), p = x((g) => {
1273
+ f((N) => {
1274
+ const C = N.find((W) => W.id === g);
1275
+ if (!C) return N;
1276
+ const P = {
1277
+ id: `${C.id}-copy-${Date.now()}`,
1278
+ name: `${C.name} copy`,
1173
1279
  active: !1
1174
- }, m = o.findIndex((f) => f.id === a);
1175
- return [...o.slice(0, m + 1), p, ...o.slice(m + 1)];
1280
+ }, k = N.findIndex((W) => W.id === g);
1281
+ return [...N.slice(0, k + 1), P, ...N.slice(k + 1)];
1176
1282
  });
1177
- }, []), r = x((a) => {
1178
- n((o) => o.filter((d) => d.id !== a));
1179
- }, []);
1180
- return /* @__PURE__ */ s(le.Provider, { value: { pages: i, setPages: n, renamePage: c, duplicatePage: u, deletePage: r }, children: /* @__PURE__ */ h("div", { "data-shell": "page-management", "aria-hidden": !e, children: [
1181
- /* @__PURE__ */ s("div", { className: "pm-list", role: "list", children: i.map((a) => /* @__PURE__ */ s(Ye, { page: a }, a.id)) }),
1182
- l != null && /* @__PURE__ */ s("div", { className: "pm-footer-pin", children: l })
1183
- ] }) });
1283
+ }, []), b = x((g) => {
1284
+ f((N) => N.filter((C) => C.id !== g));
1285
+ }, []), w = x((g) => {
1286
+ f((N) => {
1287
+ const C = new Map(N.map((k) => [k.id, k])), P = g.map((k) => C.get(k)).filter(Boolean);
1288
+ return P.length === N.length ? P : N;
1289
+ });
1290
+ }, []), S = i != null, T = S ? i : m, y = n != null ? T.map((g) => ({ ...g, active: g.id === n })) : [...T], A = o ?? (S ? void 0 : v), z = u ?? (S ? void 0 : p), V = s ?? (S ? void 0 : b), D = l ?? (S ? void 0 : w), H = x(
1291
+ (g) => {
1292
+ S || f(g);
1293
+ },
1294
+ [S]
1295
+ ), K = x(
1296
+ (g) => {
1297
+ const N = g[0]?.items.map((C) => C.id) ?? [];
1298
+ N.length > 0 && D && D(N);
1299
+ },
1300
+ [D]
1301
+ ), Y = y.map((g) => `${g.id}:${g.name}`).join("|"), B = D != null && y.length > 1 ? /* @__PURE__ */ a(
1302
+ Se,
1303
+ {
1304
+ zones: [
1305
+ {
1306
+ zoneKey: "pm-pages",
1307
+ items: y.map((g) => ({ ...g, id: g.id }))
1308
+ }
1309
+ ],
1310
+ onZoneChange: K,
1311
+ renderZone: (g, N, C) => /* @__PURE__ */ a("div", { className: "pm-list", role: "list", children: C }),
1312
+ renderItem: (g) => /* @__PURE__ */ a(
1313
+ ce,
1314
+ {
1315
+ page: g,
1316
+ onSwitchPage: d
1317
+ },
1318
+ g.id
1319
+ )
1320
+ },
1321
+ Y
1322
+ ) : /* @__PURE__ */ a("div", { className: "pm-list", role: "list", children: y.map((g) => /* @__PURE__ */ a(
1323
+ ce,
1324
+ {
1325
+ page: g,
1326
+ onSwitchPage: d
1327
+ },
1328
+ g.id
1329
+ )) });
1330
+ return /* @__PURE__ */ a(
1331
+ Ce.Provider,
1332
+ {
1333
+ value: {
1334
+ pages: y,
1335
+ setPages: H,
1336
+ renamePage: A,
1337
+ duplicatePage: z,
1338
+ deletePage: V,
1339
+ // Sprint 2026-05-20 — propagate live create binding for footer.
1340
+ createPage: c
1341
+ },
1342
+ children: /* @__PURE__ */ h("div", { "data-shell": "page-management", "aria-hidden": !e, children: [
1343
+ B,
1344
+ r != null && /* @__PURE__ */ a("div", { className: "pm-footer-pin", children: r })
1345
+ ] })
1346
+ }
1347
+ );
1184
1348
  }
1185
- const Ct = {
1349
+ const xt = {
1186
1350
  SETTINGS: "settings",
1187
1351
  CATALOG_ADD: "catalog-add",
1188
1352
  CATALOG_REPLACE: "catalog-replace",
1189
1353
  PAGE_MGMT: "page-management",
1190
1354
  NOTIFICATION_CENTER: "notification-center"
1191
- }, Be = {
1355
+ }, Je = {
1192
1356
  position: "fixed",
1193
1357
  inset: 0,
1194
1358
  pointerEvents: "none",
1195
1359
  zIndex: 55
1196
- }, We = {
1360
+ }, et = {
1197
1361
  position: "absolute",
1198
1362
  inset: 0,
1199
1363
  zIndex: 1,
@@ -1202,94 +1366,94 @@ const Ct = {
1202
1366
  pointerEvents: "none",
1203
1367
  background: "rgba(0, 0, 0, 0.04)"
1204
1368
  };
1205
- function St() {
1206
- const { state: e, dispatch: t, getCloseLog: l } = ge();
1207
- A(() => {
1369
+ function At() {
1370
+ const { state: e, dispatch: t, getCloseLog: r } = we();
1371
+ L(() => {
1208
1372
  if (e.activePanelId == null) return;
1209
- function c(u) {
1373
+ function o(u) {
1210
1374
  u.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
1211
1375
  }
1212
- return document.addEventListener("keydown", c), () => document.removeEventListener("keydown", c);
1376
+ return document.addEventListener("keydown", o), () => document.removeEventListener("keydown", o);
1213
1377
  }, [e.activePanelId, t]);
1214
- const i = I(e);
1215
- be(() => {
1378
+ const i = U(e);
1379
+ Ee(() => {
1216
1380
  i.current = e;
1217
- }), A(() => {
1381
+ }), L(() => {
1218
1382
  if (process.env.NODE_ENV === "production") return;
1219
- const c = window;
1220
- return c.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), c.__panelsHostHandle = {
1383
+ const o = window;
1384
+ return o.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), o.__panelsHostHandle = {
1221
1385
  dispatch: t,
1222
1386
  getState: () => i.current,
1223
- getCloseLog: l
1387
+ getCloseLog: r
1224
1388
  }, () => {
1225
- c.__panelsHostHandle?.dispatch === t && delete window.__panelsHostHandle;
1389
+ o.__panelsHostHandle?.dispatch === t && delete window.__panelsHostHandle;
1226
1390
  };
1227
- }, [t, l]);
1391
+ }, [t, r]);
1228
1392
  const n = x(() => {
1229
1393
  t({ type: "CLOSE_PANEL", reason: "nav-escape-hatch" });
1230
1394
  }, [t]);
1231
- return /* @__PURE__ */ s("div", { "data-panel-host": "true", style: Be, children: e.activePanelId != null && /* @__PURE__ */ s(
1395
+ return /* @__PURE__ */ a("div", { "data-panel-host": "true", style: Je, children: e.activePanelId != null && /* @__PURE__ */ a(
1232
1396
  "div",
1233
1397
  {
1234
1398
  "data-panel-scrim": "true",
1235
- style: We,
1399
+ style: et,
1236
1400
  onClick: n
1237
1401
  }
1238
1402
  ) });
1239
1403
  }
1240
- const Ge = 700;
1241
- function Qe(e) {
1242
- const [t, l] = T(null), i = I(null);
1243
- return A(() => {
1404
+ const tt = 700;
1405
+ function nt(e) {
1406
+ const [t, r] = E(null), i = U(null);
1407
+ return L(() => {
1244
1408
  if (e != null) {
1245
- i.current != null && (clearTimeout(i.current), i.current = null), l(null);
1409
+ i.current != null && (clearTimeout(i.current), i.current = null), r(null);
1246
1410
  return;
1247
1411
  }
1248
- return l((n) => n), i.current = setTimeout(() => {
1249
- l(null), i.current = null;
1250
- }, Ge), () => {
1412
+ return r((n) => n), i.current = setTimeout(() => {
1413
+ r(null), i.current = null;
1414
+ }, tt), () => {
1251
1415
  i.current != null && (clearTimeout(i.current), i.current = null);
1252
1416
  };
1253
- }, [e]), A(() => {
1254
- e != null && l(e);
1417
+ }, [e]), L(() => {
1418
+ e != null && r(e);
1255
1419
  }, [e]), e != null ? { panelId: e, isOpen: !0 } : t != null ? { panelId: t, isOpen: !1 } : { panelId: null, isOpen: !1 };
1256
1420
  }
1257
- function Tt({ panelComponents: e, children: t }) {
1258
- const l = L();
1259
- if (l == null) return null;
1260
- const { state: i, dispatch: n } = l, c = Qe(i.activePanelId);
1261
- if (c.panelId == null) return null;
1262
- const u = c.panelId, r = c.isOpen, a = e?.[u];
1263
- if (a == null && t == null)
1421
+ function kt({ panelComponents: e, children: t }) {
1422
+ const r = F();
1423
+ if (r == null) return null;
1424
+ const { state: i, dispatch: n } = r, o = nt(i.activePanelId);
1425
+ if (o.panelId == null) return null;
1426
+ const u = o.panelId, s = o.isOpen, l = e?.[u];
1427
+ if (l == null && t == null)
1264
1428
  return process.env.NODE_ENV !== "production" && console.error(
1265
1429
  "[panels] No panel component registered for activePanelId:",
1266
1430
  u
1267
1431
  ), null;
1268
1432
  if (u === "settings") {
1269
- const o = i.isDirty, d = i.activeTrigger, p = d?.kind === "card-overflow" ? d.cardId : null;
1270
- return /* @__PURE__ */ s(E, { isOpen: r, children: /* @__PURE__ */ s(
1271
- k,
1433
+ const c = i.isDirty, d = i.activeTrigger, m = d?.kind === "card-overflow" ? d.cardId : null;
1434
+ return /* @__PURE__ */ a(I, { isOpen: s, children: /* @__PURE__ */ a(
1435
+ M,
1272
1436
  {
1273
- isOpen: r,
1437
+ isOpen: s,
1274
1438
  title: "Configure metric",
1275
1439
  variant: "merged-stage",
1276
1440
  onClose: () => n({ type: "CLOSE_PANEL", reason: "header-x" }),
1277
- footer: /* @__PURE__ */ h(Z, { children: [
1278
- /* @__PURE__ */ s(
1441
+ footer: /* @__PURE__ */ h(me, { children: [
1442
+ /* @__PURE__ */ a(
1279
1443
  "button",
1280
1444
  {
1281
1445
  id: "btn-reset",
1282
1446
  type: "button",
1283
1447
  className: "gloss-panel-chrome__footer-btn",
1284
- disabled: !o,
1448
+ disabled: !c,
1285
1449
  onClick: () => {
1286
- p != null && n({ type: "CLEAR_BUFFER", cardId: p });
1450
+ m != null && n({ type: "CLEAR_BUFFER", cardId: m });
1287
1451
  },
1288
1452
  children: "Reset"
1289
1453
  }
1290
1454
  ),
1291
- /* @__PURE__ */ s("span", { style: { flex: 1 } }),
1292
- /* @__PURE__ */ s(
1455
+ /* @__PURE__ */ a("span", { style: { flex: 1 } }),
1456
+ /* @__PURE__ */ a(
1293
1457
  "button",
1294
1458
  {
1295
1459
  id: "settings-cancel",
@@ -1299,350 +1463,350 @@ function Tt({ panelComponents: e, children: t }) {
1299
1463
  children: "Cancel"
1300
1464
  }
1301
1465
  ),
1302
- /* @__PURE__ */ s(
1466
+ /* @__PURE__ */ a(
1303
1467
  "button",
1304
1468
  {
1305
1469
  id: "settings-apply",
1306
1470
  type: "button",
1307
1471
  className: "gloss-panel-chrome__footer-btn gloss-panel-chrome__footer-btn--primary",
1308
- disabled: !o,
1472
+ disabled: !c,
1309
1473
  onClick: () => n({ type: "CLOSE_PANEL", reason: "apply-button" }),
1310
1474
  children: "Apply"
1311
1475
  }
1312
1476
  )
1313
1477
  ] }),
1314
- children: a != null ? /* @__PURE__ */ s(a, { isOpen: r }) : t
1478
+ children: l != null ? /* @__PURE__ */ a(l, { isOpen: s }) : t
1315
1479
  }
1316
1480
  ) });
1317
1481
  }
1318
1482
  if (u === "catalog-add" || u === "catalog-replace") {
1319
- if (a == null) return null;
1320
- const o = u === "catalog-replace" ? "replace" : "add";
1321
- return /* @__PURE__ */ s(E, { isOpen: r, children: /* @__PURE__ */ s(
1322
- k,
1483
+ if (l == null) return null;
1484
+ const c = u === "catalog-replace" ? "replace" : "add";
1485
+ return /* @__PURE__ */ a(I, { isOpen: s, children: /* @__PURE__ */ a(
1486
+ M,
1323
1487
  {
1324
- isOpen: r,
1488
+ isOpen: s,
1325
1489
  onClose: () => n({ type: "CLOSE_PANEL", reason: "header-x" }),
1326
1490
  footer: null,
1327
- title: o === "replace" ? "Replace metric" : "Add a metric",
1328
- children: /* @__PURE__ */ s(
1329
- a,
1491
+ title: c === "replace" ? "Replace metric" : "Add a metric",
1492
+ children: /* @__PURE__ */ a(
1493
+ l,
1330
1494
  {
1331
- isOpen: r,
1332
- footerSlot: /* @__PURE__ */ s(He, { mode: o, dispatch: n })
1495
+ isOpen: s,
1496
+ footerSlot: /* @__PURE__ */ a(je, { mode: c, dispatch: n })
1333
1497
  }
1334
1498
  )
1335
1499
  }
1336
1500
  ) });
1337
1501
  }
1338
- return u === "page-management" ? a == null ? null : /* @__PURE__ */ s(E, { isOpen: r, children: /* @__PURE__ */ s(
1339
- k,
1502
+ return u === "page-management" ? l == null ? null : /* @__PURE__ */ a(I, { isOpen: s, children: /* @__PURE__ */ a(
1503
+ M,
1340
1504
  {
1341
- isOpen: r,
1505
+ isOpen: s,
1342
1506
  onClose: () => n({ type: "CLOSE_PANEL", reason: "header-x" }),
1343
1507
  footer: null,
1344
1508
  title: "Manage pages",
1345
- children: /* @__PURE__ */ s(a, { isOpen: r, footerSlot: /* @__PURE__ */ s(ze, {}) })
1509
+ children: /* @__PURE__ */ a(l, { isOpen: s, footerSlot: /* @__PURE__ */ a(Ze, {}) })
1346
1510
  }
1347
- ) }) : /* @__PURE__ */ s(E, { isOpen: r, children: /* @__PURE__ */ s(
1348
- k,
1511
+ ) }) : /* @__PURE__ */ a(I, { isOpen: s, children: /* @__PURE__ */ a(
1512
+ M,
1349
1513
  {
1350
1514
  isOpen: !0,
1351
1515
  onClose: () => n({ type: "CLOSE_PANEL", reason: "header-x" }),
1352
1516
  footer: null,
1353
- children: a != null ? /* @__PURE__ */ s(a, { isOpen: r }) : t
1517
+ children: l != null ? /* @__PURE__ */ a(l, { isOpen: s }) : t
1354
1518
  }
1355
1519
  ) });
1356
1520
  }
1357
- function j(e) {
1521
+ function de(e) {
1358
1522
  return e === null ? null : e.kind === "manage-pages-action" ? `global-${e.align ?? "left"}` : e.kind === "card-overflow" || e.kind === "empty-cell" ? `section-${e.sectionIndex}` : null;
1359
1523
  }
1360
- const qe = 685, X = 627, je = "cubic-bezier(0.22, 1, 0.36, 1)", Xe = 200;
1361
- function ie(e, t) {
1524
+ const at = 685, ue = 627, st = "cubic-bezier(0.22, 1, 0.36, 1)", rt = 200;
1525
+ function Te(e, t) {
1362
1526
  if (typeof window > "u") return t;
1363
- const l = window.getComputedStyle(document.documentElement).getPropertyValue(e).trim();
1364
- if (!l) return t;
1365
- const i = parseFloat(l);
1366
- return Number.isNaN(i) ? t : l.endsWith("s") && !l.endsWith("ms") ? i * 1e3 : i;
1527
+ const r = window.getComputedStyle(document.documentElement).getPropertyValue(e).trim();
1528
+ if (!r) return t;
1529
+ const i = parseFloat(r);
1530
+ return Number.isNaN(i) ? t : r.endsWith("s") && !r.endsWith("ms") ? i * 1e3 : i;
1367
1531
  }
1368
- function Je(e, t) {
1532
+ function lt(e, t) {
1369
1533
  return typeof window > "u" ? t : window.getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
1370
1534
  }
1371
- function D(e) {
1535
+ function $(e) {
1372
1536
  e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
1373
1537
  }
1374
- function Ze(e) {
1375
- const { mountEl: t, chromeEl: l, reducedMotion: i, onAssert: n } = e;
1376
- if (t == null || l == null) {
1377
- D(e), n?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
1538
+ function ot(e) {
1539
+ const { mountEl: t, chromeEl: r, reducedMotion: i, onAssert: n } = e;
1540
+ if (t == null || r == null) {
1541
+ $(e), n?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
1378
1542
  return;
1379
1543
  }
1380
1544
  if (i) {
1381
1545
  e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), n?.({ branch: "slide-reduced-motion", timestamp: Date.now() });
1382
1546
  return;
1383
1547
  }
1384
- if (typeof l.animate != "function") {
1385
- D(e), n?.({ branch: "slide-no-waapi", timestamp: Date.now() });
1548
+ if (typeof r.animate != "function") {
1549
+ $(e), n?.({ branch: "slide-no-waapi", timestamp: Date.now() });
1386
1550
  return;
1387
1551
  }
1388
- const c = l.cloneNode(!0);
1389
- c.id = "panel-chrome-frozen", c.style.cssText = "position:absolute;left:8px;right:8px;top:8px;z-index:1;pointer-events:none;", t.appendChild(c), l.style.zIndex = "2", e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
1390
- const u = ie("--panel-open-dur", qe), r = Je("--panel-easing", je), a = l.animate(
1552
+ const o = r.cloneNode(!0);
1553
+ o.id = "panel-chrome-frozen", o.style.cssText = "position:absolute;left:8px;right:8px;top:8px;z-index:1;pointer-events:none;", t.appendChild(o), r.style.zIndex = "2", e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
1554
+ const u = Te("--panel-open-dur", at), s = lt("--panel-easing", st), l = r.animate(
1391
1555
  [{ transform: "translateY(100%)" }, { transform: "translateY(0)" }],
1392
- { duration: u, easing: r, fill: "forwards" }
1556
+ { duration: u, easing: s, fill: "forwards" }
1393
1557
  );
1394
- a.addEventListener(
1558
+ l.addEventListener(
1395
1559
  "finish",
1396
1560
  () => {
1397
- c.remove(), l.style.zIndex = "", a.cancel(), n?.({ branch: "slide-complete", frozen: "cleaned", timestamp: Date.now() });
1561
+ o.remove(), r.style.zIndex = "", l.cancel(), n?.({ branch: "slide-complete", frozen: "cleaned", timestamp: Date.now() });
1398
1562
  },
1399
1563
  { once: !0 }
1400
1564
  );
1401
1565
  }
1402
- function et(e) {
1403
- const { mountEl: t, onAssert: l } = e;
1566
+ function it(e) {
1567
+ const { mountEl: t, onAssert: r } = e;
1404
1568
  if (t == null) {
1405
- e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => D(e), X), l?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
1569
+ e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => $(e), ue), r?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
1406
1570
  return;
1407
1571
  }
1408
- const i = ie("--panel-close-dur", X);
1409
- let n = !1, c = null;
1410
- const u = (a) => {
1411
- a.target !== t || a.propertyName !== "max-height" || n || (n = !0, c != null && clearTimeout(c), t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), l?.({ branch: "handoff-complete", timestamp: Date.now() }));
1412
- }, r = () => {
1413
- n || (n = !0, t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), l?.({ branch: "handoff-forced", timestamp: Date.now() }));
1572
+ const i = Te("--panel-close-dur", ue);
1573
+ let n = !1, o = null;
1574
+ const u = (l) => {
1575
+ l.target !== t || l.propertyName !== "max-height" || n || (n = !0, o != null && clearTimeout(o), t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-complete", timestamp: Date.now() }));
1576
+ }, s = () => {
1577
+ n || (n = !0, t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-forced", timestamp: Date.now() }));
1414
1578
  };
1415
- t.addEventListener("transitionend", u), e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), c = setTimeout(r, i + Xe);
1579
+ t.addEventListener("transitionend", u), e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), o = setTimeout(s, i + rt);
1416
1580
  }
1417
- function tt(e) {
1418
- const { state: t, onAssert: l } = e;
1581
+ function ct(e) {
1582
+ const { state: t, onAssert: r } = e;
1419
1583
  if (t.activePanelId && t.isDirty) {
1420
- e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), l?.({ branch: "blocked-dirty", timestamp: Date.now() });
1584
+ e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "blocked-dirty", timestamp: Date.now() });
1421
1585
  return;
1422
1586
  }
1423
- const i = j(t.activeTrigger), n = j(e.trigger);
1587
+ const i = de(t.activeTrigger), n = de(e.trigger);
1424
1588
  if (!!t.activePanelId && i != null && i === n) {
1425
- Ze(e);
1589
+ ot(e);
1426
1590
  return;
1427
1591
  }
1428
1592
  if (t.activePanelId) {
1429
- et(e);
1593
+ it(e);
1430
1594
  return;
1431
1595
  }
1432
- D(e), l?.({ branch: "fresh-open", timestamp: Date.now() });
1596
+ $(e), r?.({ branch: "fresh-open", timestamp: Date.now() });
1433
1597
  }
1434
- function nt() {
1598
+ function dt() {
1435
1599
  if (!(typeof window > "u"))
1436
1600
  return window.__panelsAsserter;
1437
1601
  }
1438
- function _t() {
1439
- const e = L(), t = J();
1602
+ function Dt() {
1603
+ const e = F(), t = pe();
1440
1604
  return x(
1441
- (l, i) => {
1605
+ (r, i) => {
1442
1606
  if (!e)
1443
1607
  return;
1444
- const n = typeof document < "u" ? document.querySelector('[data-mount="panel"]') : null, c = typeof document < "u" ? document.querySelector('[data-chrome="panel"]') : null, u = {
1445
- panelId: l,
1608
+ const n = typeof document < "u" ? document.querySelector('[data-mount="panel"]') : null, o = typeof document < "u" ? document.querySelector('[data-chrome="panel"]') : null, u = {
1609
+ panelId: r,
1446
1610
  trigger: i,
1447
1611
  state: e.state,
1448
1612
  dispatch: e.dispatch,
1449
1613
  mountEl: n,
1450
- chromeEl: c,
1614
+ chromeEl: o,
1451
1615
  reducedMotion: t,
1452
- onAssert: (r) => {
1453
- nt()?.recordTransition?.(r);
1616
+ onAssert: (s) => {
1617
+ dt()?.recordTransition?.(s);
1454
1618
  }
1455
1619
  };
1456
- tt(u);
1620
+ ct(u);
1457
1621
  },
1458
1622
  [e, t]
1459
1623
  );
1460
1624
  }
1461
- let O = !1, M = null;
1462
- function H() {
1625
+ let R = !1, G = null;
1626
+ function J() {
1463
1627
  const e = [];
1464
1628
  let t = "cleaned";
1465
1629
  document.querySelectorAll("#panel-chrome-frozen").length > 0 && (e.push("#panel-chrome-frozen"), t = "lingering");
1466
1630
  const i = document.querySelectorAll(".gloss-panel-mount");
1467
1631
  i.length > 1 && e.push(`mount-count=${i.length}`);
1468
- const n = i[0] ?? null, c = n ? n.querySelectorAll(".gloss-panel-chrome") : [];
1469
- c.length > 1 && e.push(`chrome-count=${c.length}`);
1470
- const u = c[0] ?? null;
1632
+ const n = i[0] ?? null, o = n ? n.querySelectorAll(".gloss-panel-chrome") : [];
1633
+ o.length > 1 && e.push(`chrome-count=${o.length}`);
1634
+ const u = o[0] ?? null;
1471
1635
  if (u) {
1472
1636
  const d = u.style.zIndex;
1473
1637
  d !== "" && d !== "2" && e.push(`chrome-zindex=${d}`);
1474
1638
  }
1475
- const r = n ? "present" : "absent", a = u ? "present" : "absent";
1639
+ const s = n ? "present" : "absent", l = u ? "present" : "absent";
1476
1640
  return {
1477
1641
  valid: e.length === 0,
1478
- mount: r,
1479
- chrome: a,
1642
+ mount: s,
1643
+ chrome: l,
1480
1644
  frozen: t,
1481
1645
  orphans: e,
1482
1646
  timestamp: Date.now()
1483
1647
  };
1484
1648
  }
1485
- const $ = "8px 8px 0px", R = "64px", F = "inset(0px 0px 60px 0px)", U = "inset(0px -40px -40px -40px)";
1486
- function g(e, t, l, i, n) {
1487
- return { id: e, constraint: t, expected: l, actual: i, pass: n };
1649
+ const Q = "8px 8px 0px", q = "64px", j = "inset(0px 0px 60px 0px)", Z = "inset(0px -40px -40px -40px)";
1650
+ function _(e, t, r, i, n) {
1651
+ return { id: e, constraint: t, expected: r, actual: i, pass: n };
1488
1652
  }
1489
- function N(e) {
1653
+ function O(e) {
1490
1654
  const t = parseInt(e, 10);
1491
1655
  return Number.isFinite(t) ? t : NaN;
1492
1656
  }
1493
- function K() {
1494
- const e = [], t = document.querySelector(".gloss-panel-mount"), l = t?.querySelector(".gloss-panel-chrome") ?? null, i = document.querySelector(".gloss-panel-coordinator") ?? document.querySelector("[data-panel-coordinator]"), n = document.querySelector(".bell-cutout"), c = document.querySelector(".bell-popover"), u = document.querySelector(".gloss-bottom-toolbar");
1657
+ function ne() {
1658
+ const e = [], t = document.querySelector(".gloss-panel-mount"), r = t?.querySelector(".gloss-panel-chrome") ?? null, i = document.querySelector(".gloss-panel-coordinator") ?? document.querySelector("[data-panel-coordinator]"), n = document.querySelector(".bell-cutout"), o = document.querySelector(".bell-popover"), u = document.querySelector(".gloss-bottom-toolbar");
1495
1659
  if (!t)
1496
- e.push(g("C1", "mount --reveal-y matches clip-path inset-bottom Npx", "mount present", "absent", !1));
1660
+ e.push(_("C1", "mount --reveal-y matches clip-path inset-bottom Npx", "mount present", "absent", !1));
1497
1661
  else {
1498
- const r = getComputedStyle(t), a = r.getPropertyValue("--reveal-y").trim() || t.style.getPropertyValue("--reveal-y").trim(), o = r.clipPath || t.style.clipPath || "", d = o.match(/inset\(\s*0(?:px)?\s+0(?:px)?\s+(\d+)px\s+0(?:px)?\s*\)/), p = d ? parseInt(d[1], 10) : NaN, m = N(a), f = Number.isFinite(p) && Number.isFinite(m) && p === m;
1662
+ const s = getComputedStyle(t), l = s.getPropertyValue("--reveal-y").trim() || t.style.getPropertyValue("--reveal-y").trim(), c = s.clipPath || t.style.clipPath || "", d = c.match(/inset\(\s*0(?:px)?\s+0(?:px)?\s+(\d+)px\s+0(?:px)?\s*\)/), m = d ? parseInt(d[1], 10) : NaN, f = O(l), v = Number.isFinite(m) && Number.isFinite(f) && m === f;
1499
1663
  e.push(
1500
- g(
1664
+ _(
1501
1665
  "C1",
1502
1666
  "mount --reveal-y matches clip-path inset-bottom Npx",
1503
- `inset(0 0 ${m}px 0) === --reveal-y(${m}px)`,
1504
- `--reveal-y=${a || "n/a"} clip-path=${o || "n/a"}`,
1505
- f
1667
+ `inset(0 0 ${f}px 0) === --reveal-y(${f}px)`,
1668
+ `--reveal-y=${l || "n/a"} clip-path=${c || "n/a"}`,
1669
+ v
1506
1670
  )
1507
1671
  );
1508
1672
  }
1509
1673
  if (!t)
1510
- e.push(g("C2", "mount padding constant", $, "absent", !1));
1674
+ e.push(_("C2", "mount padding constant", Q, "absent", !1));
1511
1675
  else {
1512
- const r = t.style.padding, a = getComputedStyle(t), o = r || a.padding || "", d = o === $ || o === "8px 8px 0px 8px";
1513
- e.push(g("C2", "mount padding constant", $, o || "n/a", d));
1676
+ const s = t.style.padding, l = getComputedStyle(t), c = s || l.padding || "", d = c === Q || c === "8px 8px 0px 8px";
1677
+ e.push(_("C2", "mount padding constant", Q, c || "n/a", d));
1514
1678
  }
1515
1679
  if (!t)
1516
- e.push(g("C3", "mount.bottom resolves to var(--tb-h)=64px", R, "absent", !1));
1680
+ e.push(_("C3", "mount.bottom resolves to var(--tb-h)=64px", q, "absent", !1));
1517
1681
  else {
1518
- const a = getComputedStyle(t).bottom || t.style.bottom || "", o = a === R;
1519
- e.push(g("C3", "mount.bottom resolves to var(--tb-h)=64px", R, a || "n/a", o));
1682
+ const l = getComputedStyle(t).bottom || t.style.bottom || "", c = l === q;
1683
+ e.push(_("C3", "mount.bottom resolves to var(--tb-h)=64px", q, l || "n/a", c));
1520
1684
  }
1521
- if (!l)
1522
- e.push(g("C4", "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px", "formula match", "absent", !1));
1685
+ if (!r)
1686
+ e.push(_("C4", "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px", "formula match", "absent", !1));
1523
1687
  else {
1524
- const r = getComputedStyle(l), a = N(
1525
- r.getPropertyValue("--row-h").trim() || l.style.getPropertyValue("--row-h").trim() || "0"
1526
- ), o = N(
1527
- r.getPropertyValue("--row-gap").trim() || l.style.getPropertyValue("--row-gap").trim() || "0"
1528
- ), d = a * 3 + o * 3 - 8, p = N(r.height || l.style.height || ""), m = Number.isFinite(a) && Number.isFinite(o) && Number.isFinite(p) && Number.isFinite(d) && p === d;
1688
+ const s = getComputedStyle(r), l = O(
1689
+ s.getPropertyValue("--row-h").trim() || r.style.getPropertyValue("--row-h").trim() || "0"
1690
+ ), c = O(
1691
+ s.getPropertyValue("--row-gap").trim() || r.style.getPropertyValue("--row-gap").trim() || "0"
1692
+ ), d = l * 3 + c * 3 - 8, m = O(s.height || r.style.height || ""), f = Number.isFinite(l) && Number.isFinite(c) && Number.isFinite(m) && Number.isFinite(d) && m === d;
1529
1693
  e.push(
1530
- g(
1694
+ _(
1531
1695
  "C4",
1532
1696
  "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px",
1533
- `${d}px (rh=${a} rg=${o})`,
1534
- `${p}px`,
1535
- m
1697
+ `${d}px (rh=${l} rg=${c})`,
1698
+ `${m}px`,
1699
+ f
1536
1700
  )
1537
1701
  );
1538
1702
  }
1539
- if (!i || !l)
1703
+ if (!i || !r)
1540
1704
  e.push(
1541
- g(
1705
+ _(
1542
1706
  "C5",
1543
1707
  'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
1544
1708
  "present",
1545
- `coordinator=${i ? "present" : "absent"} chrome=${l ? "present" : "absent"}`,
1709
+ `coordinator=${i ? "present" : "absent"} chrome=${r ? "present" : "absent"}`,
1546
1710
  !1
1547
1711
  )
1548
1712
  );
1549
1713
  else {
1550
- const r = getComputedStyle(i), a = getComputedStyle(l), o = r.perspective || i.style.perspective || "", d = (r.perspectiveOrigin || i.style.perspectiveOrigin || "").trim(), p = a.perspectiveStyle || l.style.perspectiveStyle || "", b = o !== "" && o !== "none" && (d === "center bottom" || d === "50% 100%") && p === "flat";
1714
+ const s = getComputedStyle(i), l = getComputedStyle(r), c = s.perspective || i.style.perspective || "", d = (s.perspectiveOrigin || i.style.perspectiveOrigin || "").trim(), m = l.perspectiveStyle || r.style.perspectiveStyle || "", b = c !== "" && c !== "none" && (d === "center bottom" || d === "50% 100%") && m === "flat";
1551
1715
  e.push(
1552
- g(
1716
+ _(
1553
1717
  "C5",
1554
1718
  'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
1555
1719
  "perspective:not-none, origin:center bottom, chrome-style:flat",
1556
- `perspective=${o} origin=${d} chrome-style=${p}`,
1720
+ `perspective=${c} origin=${d} chrome-style=${m}`,
1557
1721
  b
1558
1722
  )
1559
1723
  );
1560
1724
  }
1561
1725
  {
1562
- let r = !1, a = "absent";
1726
+ let s = !1, l = "absent";
1563
1727
  try {
1564
- for (const o of Array.from(document.styleSheets)) {
1728
+ for (const c of Array.from(document.styleSheets)) {
1565
1729
  let d = [];
1566
1730
  try {
1567
- d = Array.from(o.cssRules ?? []);
1731
+ d = Array.from(c.cssRules ?? []);
1568
1732
  } catch {
1569
1733
  continue;
1570
1734
  }
1571
- for (const p of d)
1572
- if (p.name === "stage-spin") {
1573
- const f = Array.from(p.cssRules), C = f.find((y) => y.keyText === "0%" || y.keyText === "from"), b = f.find((y) => y.keyText === "100%" || y.keyText === "to"), S = C?.style.transform ?? "", w = b?.style.transform ?? "", v = /rotateY\(\s*0(?:deg)?\s*\)/;
1574
- r = v.test(S) && v.test(w), a = `0%=${S || "n/a"} 100%=${w || "n/a"}`;
1735
+ for (const m of d)
1736
+ if (m.name === "stage-spin") {
1737
+ const v = Array.from(m.cssRules), p = v.find((y) => y.keyText === "0%" || y.keyText === "from"), b = v.find((y) => y.keyText === "100%" || y.keyText === "to"), w = p?.style.transform ?? "", S = b?.style.transform ?? "", T = /rotateY\(\s*0(?:deg)?\s*\)/;
1738
+ s = T.test(w) && T.test(S), l = `0%=${w || "n/a"} 100%=${S || "n/a"}`;
1575
1739
  break;
1576
1740
  }
1577
- if (a !== "absent") break;
1741
+ if (l !== "absent") break;
1578
1742
  }
1579
1743
  } catch {
1580
- a = "inspection-error";
1744
+ l = "inspection-error";
1581
1745
  }
1582
1746
  e.push(
1583
- g(
1747
+ _(
1584
1748
  "C6",
1585
1749
  "@keyframes stage-spin 0% AND 100% anchor at rotateY(0)",
1586
1750
  "both frames rotateY(0)",
1587
- a,
1588
- r
1751
+ l,
1752
+ s
1589
1753
  )
1590
1754
  );
1591
1755
  }
1592
1756
  {
1593
- const r = document.documentElement, a = getComputedStyle(r), o = a.getPropertyValue("--panel-open-dur").trim() || r.style.getPropertyValue("--panel-open-dur").trim(), d = a.getPropertyValue("--panel-close-dur").trim() || r.style.getPropertyValue("--panel-close-dur").trim(), p = N(o) || parseFloat(o) * (o.endsWith("s") && !o.endsWith("ms") ? 1e3 : 1), m = N(d) || parseFloat(d) * (d.endsWith("s") && !d.endsWith("ms") ? 1e3 : 1), f = Number.isFinite(p) && Number.isFinite(m) && p > m;
1757
+ const s = document.documentElement, l = getComputedStyle(s), c = l.getPropertyValue("--panel-open-dur").trim() || s.style.getPropertyValue("--panel-open-dur").trim(), d = l.getPropertyValue("--panel-close-dur").trim() || s.style.getPropertyValue("--panel-close-dur").trim(), m = O(c) || parseFloat(c) * (c.endsWith("s") && !c.endsWith("ms") ? 1e3 : 1), f = O(d) || parseFloat(d) * (d.endsWith("s") && !d.endsWith("ms") ? 1e3 : 1), v = Number.isFinite(m) && Number.isFinite(f) && m > f;
1594
1758
  e.push(
1595
- g("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${o || "n/a"} close=${d || "n/a"}`, f)
1759
+ _("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${c || "n/a"} close=${d || "n/a"}`, v)
1596
1760
  );
1597
1761
  }
1598
1762
  if (!n)
1599
- e.push(g("C8", "BellCutout zero computed animation/transition", "no inline timing", "absent", !1));
1763
+ e.push(_("C8", "BellCutout zero computed animation/transition", "no inline timing", "absent", !1));
1600
1764
  else {
1601
- const r = getComputedStyle(n), a = r.animationName || "", o = r.transitionProperty || "", d = (a === "" || a === "none") && (o === "" || o === "none" || o === "all");
1765
+ const s = getComputedStyle(n), l = s.animationName || "", c = s.transitionProperty || "", d = (l === "" || l === "none") && (c === "" || c === "none" || c === "all");
1602
1766
  e.push(
1603
- g(
1767
+ _(
1604
1768
  "C8",
1605
1769
  "BellCutout zero computed animation/transition",
1606
1770
  "animation:none AND transition:none",
1607
- `animation=${a || "n/a"} transition=${o || "n/a"}`,
1771
+ `animation=${l || "n/a"} transition=${c || "n/a"}`,
1608
1772
  d
1609
1773
  )
1610
1774
  );
1611
1775
  }
1612
1776
  if (!t)
1613
- e.push(g("C9", "mount closed-state clipPath", F, "absent", !1));
1777
+ e.push(_("C9", "mount closed-state clipPath", j, "absent", !1));
1614
1778
  else {
1615
- const r = t.style.clipPath, a = getComputedStyle(t), o = r || a.clipPath || "", d = o === F;
1616
- e.push(g("C9", "mount closed-state clipPath", F, o || "n/a", d));
1779
+ const s = t.style.clipPath, l = getComputedStyle(t), c = s || l.clipPath || "", d = c === j;
1780
+ e.push(_("C9", "mount closed-state clipPath", j, c || "n/a", d));
1617
1781
  }
1618
- if (!c)
1619
- e.push(g("C10", "bell-popover parentElement === document.body (open)", "body", "absent", !1));
1782
+ if (!o)
1783
+ e.push(_("C10", "bell-popover parentElement === document.body (open)", "body", "absent", !1));
1620
1784
  else {
1621
- const r = c.parentElement, a = r === document.body;
1785
+ const s = o.parentElement, l = s === document.body;
1622
1786
  e.push(
1623
- g(
1787
+ _(
1624
1788
  "C10",
1625
1789
  "bell-popover parentElement === document.body (open)",
1626
1790
  "body",
1627
- r === document.body ? "body" : r?.tagName ?? "n/a",
1628
- a
1791
+ s === document.body ? "body" : s?.tagName ?? "n/a",
1792
+ l
1629
1793
  )
1630
1794
  );
1631
1795
  }
1632
1796
  if (!i)
1633
- e.push(g("C11", "coordinator overflow === visible", "visible", "absent", !1));
1797
+ e.push(_("C11", "coordinator overflow === visible", "visible", "absent", !1));
1634
1798
  else {
1635
- const a = getComputedStyle(i).overflow || i.style.overflow || "", o = a === "visible";
1636
- e.push(g("C11", "coordinator overflow === visible", "visible", a || "n/a", o));
1799
+ const l = getComputedStyle(i).overflow || i.style.overflow || "", c = l === "visible";
1800
+ e.push(_("C11", "coordinator overflow === visible", "visible", l || "n/a", c));
1637
1801
  }
1638
1802
  if (!u)
1639
- e.push(g("C12", "toolbar clipPath = inset(0 -40 -40 -40)", U, "absent", !1));
1803
+ e.push(_("C12", "toolbar clipPath = inset(0 -40 -40 -40)", Z, "absent", !1));
1640
1804
  else {
1641
- const r = u.style.clipPath, a = getComputedStyle(u), o = r || a.clipPath || "", d = o === U;
1642
- e.push(g("C12", "toolbar clipPath = inset(0 -40 -40 -40)", U, o || "n/a", d));
1805
+ const s = u.style.clipPath, l = getComputedStyle(u), c = s || l.clipPath || "", d = c === Z;
1806
+ e.push(_("C12", "toolbar clipPath = inset(0 -40 -40 -40)", Z, c || "n/a", d));
1643
1807
  }
1644
1808
  return e.push(
1645
- g(
1809
+ _(
1646
1810
  "C13",
1647
1811
  "same-position slide via WAAPI (mid-transition getAnimations().length > 0)",
1648
1812
  "WAAPI driver wired in orchestrator (source-proof)",
@@ -1650,7 +1814,7 @@ function K() {
1650
1814
  "wiring_only"
1651
1815
  )
1652
1816
  ), e.push(
1653
- g(
1817
+ _(
1654
1818
  "C14",
1655
1819
  'cross-position handoff transitionend filtered by propertyName="max-height"',
1656
1820
  "transitionend filter wired in orchestrator (source-proof)",
@@ -1659,11 +1823,11 @@ function K() {
1659
1823
  )
1660
1824
  ), e;
1661
1825
  }
1662
- function at(e) {
1663
- return K().find((t) => t.id === e);
1826
+ function ut(e) {
1827
+ return ne().find((t) => t.id === e);
1664
1828
  }
1665
- function st() {
1666
- const e = H();
1829
+ function pt() {
1830
+ const e = J();
1667
1831
  return { q12: [
1668
1832
  {
1669
1833
  id: "Q12-12",
@@ -1672,76 +1836,76 @@ function st() {
1672
1836
  actual: `valid=${e.valid} mount=${e.mount} chrome=${e.chrome} frozen=${e.frozen} orphans=[${e.orphans.join(",")}]`,
1673
1837
  pass: e.valid
1674
1838
  }
1675
- ], cc: K() };
1839
+ ], cc: ne() };
1676
1840
  }
1677
- function rt() {
1841
+ function mt() {
1678
1842
  return {
1679
- enable: lt,
1680
- disable: ot,
1681
- isEnabled: () => O,
1682
- getLastReport: () => M,
1843
+ enable: ht,
1844
+ disable: ft,
1845
+ isEnabled: () => R,
1846
+ getLastReport: () => G,
1683
1847
  recordTransition: (e) => {
1684
- O && (M = { ...e, ...H() });
1848
+ R && (G = { ...e, ...J() });
1685
1849
  },
1686
1850
  assertOnce: () => {
1687
- const e = H();
1688
- return M = e, e;
1851
+ const e = J();
1852
+ return G = e, e;
1689
1853
  },
1690
- assertCcOnly: K,
1691
- getCcRowById: at,
1692
- assertPanelTruths: st
1854
+ assertCcOnly: ne,
1855
+ getCcRowById: ut,
1856
+ assertPanelTruths: pt
1693
1857
  };
1694
1858
  }
1695
- function lt() {
1696
- if (O = !0, typeof window > "u") return;
1697
- window.__panelsAsserter || (window.__panelsAsserter = rt(), console.info(
1859
+ function ht() {
1860
+ if (R = !0, typeof window > "u") return;
1861
+ window.__panelsAsserter || (window.__panelsAsserter = mt(), console.info(
1698
1862
  "[panels] asserter enabled (P3b Q12-12 + P6 W5 cc:C1..C14). Inspect via window.__panelsAsserter."
1699
1863
  ));
1700
1864
  }
1701
- function ot() {
1702
- O = !1;
1865
+ function ft() {
1866
+ R = !1;
1703
1867
  }
1704
1868
  export {
1705
- Pt as COMMITS,
1706
- bt as CatalogAddShell,
1707
- He as CatalogFooter,
1708
- yt as CatalogReplaceShell,
1709
- Y as CatalogStateContext,
1710
- ke as CloneCard,
1711
- Ee as CloneStage,
1712
- ae as MOCK_DEFAULT_LENS,
1713
- ne as MOCK_LENSES,
1714
- z as MOCK_LENS_META,
1715
- Ke as MOCK_PAGES,
1716
- se as MOCK_TILES_BY_LENS,
1717
- Ct as PANEL_IDS,
1718
- ze as PageMgmtFooter,
1719
- vt as PageMgmtShell,
1720
- le as PageMgmtStateContext,
1721
- k as PanelChrome,
1722
- xt as PanelHost,
1723
- St as PanelHostShell,
1724
- E as PanelMount,
1725
- At as PanelProvider,
1726
- Tt as PanelSlot,
1727
- gt as SettingsShell,
1728
- K as assertCcOnly,
1729
- H as assertPanelDomShape,
1730
- st as assertPanelTruths,
1731
- Et as deriveSurfaceState,
1732
- ot as disablePanelAsserter,
1733
- lt as enablePanelAsserter,
1734
- at as getCcRowById,
1735
- kt as initialState,
1736
- j as positionKey,
1737
- Dt as reducer,
1738
- tt as transitionToPanel,
1739
- Ve as useCatalogState,
1740
- ft as useEditingCardId,
1741
- oe as usePageMgmtState,
1742
- ge as usePanelContext,
1743
- L as usePanelContextOptional,
1744
- Ot as usePanelCoordinator,
1745
- J as useReducedMotionPanel,
1746
- _t as useTransitionToPanel
1869
+ It as COMMITS,
1870
+ wt as CatalogAddShell,
1871
+ je as CatalogFooter,
1872
+ Et as CatalogReplaceShell,
1873
+ te as CatalogStateContext,
1874
+ Ue as CloneCard,
1875
+ Fe as CloneStage,
1876
+ be as MOCK_DEFAULT_LENS,
1877
+ ge as MOCK_LENSES,
1878
+ ee as MOCK_LENS_META,
1879
+ Xe as MOCK_PAGES,
1880
+ ve as MOCK_TILES_BY_LENS,
1881
+ xt as PANEL_IDS,
1882
+ Ze as PageMgmtFooter,
1883
+ Pt as PageMgmtShell,
1884
+ Ce as PageMgmtStateContext,
1885
+ M as PanelChrome,
1886
+ Mt as PanelHost,
1887
+ At as PanelHostShell,
1888
+ I as PanelMount,
1889
+ $t as PanelProvider,
1890
+ kt as PanelSlot,
1891
+ St as SettingsShell,
1892
+ ne as assertCcOnly,
1893
+ J as assertPanelDomShape,
1894
+ pt as assertPanelTruths,
1895
+ Rt as deriveSurfaceState,
1896
+ ft as disablePanelAsserter,
1897
+ ht as enablePanelAsserter,
1898
+ ut as getCcRowById,
1899
+ Ft as initialState,
1900
+ de as positionKey,
1901
+ Ut as reducer,
1902
+ ct as transitionToPanel,
1903
+ qe as useCatalogState,
1904
+ Nt as useEditingCardId,
1905
+ _e as usePageMgmtState,
1906
+ we as usePanelContext,
1907
+ F as usePanelContextOptional,
1908
+ zt as usePanelCoordinator,
1909
+ pe as useReducedMotionPanel,
1910
+ Dt as useTransitionToPanel
1747
1911
  };