@mt-gloss/ui 0.1.107 → 0.1.108

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,28 +1,29 @@
1
- import { u as k, f as Q, S as he, a as fe, g as A, c as T } from "./COMMITS-DG0Q_9DU.js";
2
- import { C as Et, b as xt, P as At, e as Tt, i as Lt, r as Ot, d as kt } from "./COMMITS-DG0Q_9DU.js";
3
- import { jsx as s, jsxs as h, Fragment as X } from "react/jsx-runtime";
4
- import K, { useState as _, useRef as I, createContext as J, useContext as Z, useMemo as W, useEffect as x, useCallback as E, useLayoutEffect as ge } from "react";
5
- import { useSensors as be, useSensor as q, PointerSensor as ve, KeyboardSensor as ye, DndContext as Se, closestCenter as _e } from "@dnd-kit/core";
6
- import { sortableKeyboardCoordinates as Ne, SortableContext as Ce, horizontalListSortingStrategy as we, arrayMove as Pe, useSortable as Ee } from "@dnd-kit/sortable";
1
+ import { u as k, f as X, S as fe, a as ge, g as x, c as T } from "./COMMITS-DG0Q_9DU.js";
2
+ import { C as Et, b as At, P as xt, e as Tt, i as Ot, r as Lt, d as kt } from "./COMMITS-DG0Q_9DU.js";
3
+ import { jsx as a, jsxs as h, Fragment as J } from "react/jsx-runtime";
4
+ import B, { useState as C, useRef as I, createContext as Z, useContext as ee, useMemo as Y, useEffect as A, useCallback as E, useLayoutEffect as ve } from "react";
5
+ import { useSensors as be, useSensor as W, PointerSensor as ye, KeyboardSensor as Se, DndContext as Ce, closestCenter as _e } from "@dnd-kit/core";
6
+ import { sortableKeyboardCoordinates as Ne, SortableContext as we, horizontalListSortingStrategy as Pe, arrayMove as Ee, useSortable as Ae } from "@dnd-kit/sortable";
7
7
  import { CSS as xe } from "@dnd-kit/utilities";
8
+ import { M as G } from "./MetricCard-Cyoxhb_S.js";
8
9
  function ft() {
9
10
  const e = k();
10
11
  if (e?.state.activePanelId !== "settings") return null;
11
12
  const t = e.state.activeTrigger;
12
13
  return t?.kind === "card-overflow" ? t.cardId : null;
13
14
  }
14
- function Ae({ children: e }) {
15
- return /* @__PURE__ */ s("div", { className: "clone-stage", children: e });
15
+ function Te({ children: e }) {
16
+ return /* @__PURE__ */ a("div", { className: "clone-stage", children: e });
16
17
  }
17
- function Te({ span: e, rotating: t = !0, children: r }) {
18
+ function Oe({ span: e, rotating: t = !0, children: r }) {
18
19
  const n = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" ");
19
- return /* @__PURE__ */ s("div", { className: n, children: r });
20
+ return /* @__PURE__ */ a("div", { className: n, children: r });
20
21
  }
21
22
  function Le({ value: e, onChange: t }) {
22
23
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--threshold", children: [
23
- /* @__PURE__ */ s("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
24
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
24
25
  /* @__PURE__ */ h("div", { className: "settings-shell__slider-row", children: [
25
- /* @__PURE__ */ s(
26
+ /* @__PURE__ */ a(
26
27
  "input",
27
28
  {
28
29
  id: "settings-threshold-input",
@@ -45,11 +46,11 @@ function Le({ value: e, onChange: t }) {
45
46
  ] })
46
47
  ] });
47
48
  }
48
- function Oe({ value: e, onChange: t }) {
49
+ function ke({ value: e, onChange: t }) {
49
50
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--timeframe", children: [
50
- /* @__PURE__ */ s("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
51
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
51
52
  /* @__PURE__ */ h("div", { className: "settings-shell__slider-row", children: [
52
- /* @__PURE__ */ s(
53
+ /* @__PURE__ */ a(
53
54
  "input",
54
55
  {
55
56
  id: "settings-timeframe-input",
@@ -72,20 +73,20 @@ function Oe({ value: e, onChange: t }) {
72
73
  ] })
73
74
  ] });
74
75
  }
75
- function ke({ id: e, onRemove: t }) {
76
- const { attributes: r, listeners: n, setNodeRef: c, transform: i, transition: d, isDragging: l } = Ee({ id: e }), a = {
76
+ function Ie({ id: e, onRemove: t }) {
77
+ const { attributes: r, listeners: n, setNodeRef: d, transform: i, transition: u, isDragging: l } = Ae({ id: e }), s = {
77
78
  transform: xe.Transform.toString(i),
78
- transition: d,
79
+ transition: u,
79
80
  opacity: l ? 0.6 : 1
80
81
  };
81
82
  return /* @__PURE__ */ h(
82
83
  "li",
83
84
  {
84
- ref: c,
85
- style: a,
85
+ ref: d,
86
+ style: s,
86
87
  className: `settings-shell__slot-pill${l ? " settings-shell__slot-pill--dragging" : ""}`,
87
88
  children: [
88
- /* @__PURE__ */ s(
89
+ /* @__PURE__ */ a(
89
90
  "button",
90
91
  {
91
92
  type: "button",
@@ -93,11 +94,11 @@ function ke({ id: e, onRemove: t }) {
93
94
  "aria-label": `Reorder ${e}`,
94
95
  ...r,
95
96
  ...n,
96
- children: /* @__PURE__ */ s("span", { "aria-hidden": "true", className: "settings-shell__slot-pill__grip", children: "⋮⋮" })
97
+ children: /* @__PURE__ */ a("span", { "aria-hidden": "true", className: "settings-shell__slot-pill__grip", children: "⋮⋮" })
97
98
  }
98
99
  ),
99
- /* @__PURE__ */ s("span", { className: "settings-shell__slot-pill__label", children: e }),
100
- /* @__PURE__ */ s(
100
+ /* @__PURE__ */ a("span", { className: "settings-shell__slot-pill__label", children: e }),
101
+ /* @__PURE__ */ a(
101
102
  "button",
102
103
  {
103
104
  type: "button",
@@ -111,32 +112,32 @@ function ke({ id: e, onRemove: t }) {
111
112
  }
112
113
  );
113
114
  }
114
- function Ie({ value: e, onChange: t }) {
115
+ function De({ value: e, onChange: t }) {
115
116
  const r = be(
116
- q(ve, { activationConstraint: { distance: 4 } }),
117
- q(ye, { coordinateGetter: Ne })
117
+ W(ye, { activationConstraint: { distance: 4 } }),
118
+ W(Se, { coordinateGetter: Ne })
118
119
  ), n = (i) => {
119
- const { active: d, over: l } = i;
120
- if (!l || d.id === l.id) return;
121
- const a = e.findIndex((u) => u === d.id), o = e.findIndex((u) => u === l.id);
122
- a === -1 || o === -1 || t(Pe([...e], a, o));
123
- }, c = (i) => {
124
- t(e.filter((d) => d !== i));
120
+ const { active: u, over: l } = i;
121
+ if (!l || u.id === l.id) return;
122
+ const s = e.findIndex((c) => c === u.id), o = e.findIndex((c) => c === l.id);
123
+ s === -1 || o === -1 || t(Ee([...e], s, o));
124
+ }, d = (i) => {
125
+ t(e.filter((u) => u !== i));
125
126
  };
126
127
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--slots", "aria-label": "Stack slots", children: [
127
- /* @__PURE__ */ s("span", { className: "settings-shell__label", children: "Stack slots" }),
128
- /* @__PURE__ */ s(Se, { sensors: r, collisionDetection: _e, onDragEnd: n, children: /* @__PURE__ */ s(Ce, { items: [...e], strategy: we, children: /* @__PURE__ */ s("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((i) => /* @__PURE__ */ s(ke, { id: i, onRemove: () => c(i) }, i)) }) }) }),
129
- e.length === 0 && /* @__PURE__ */ s("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
130
- /* @__PURE__ */ s("p", { className: "settings-shell__help settings-shell__help--small", children: "Drag to reorder · click × to remove" })
128
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", children: "Stack slots" }),
129
+ /* @__PURE__ */ a(Ce, { sensors: r, collisionDetection: _e, onDragEnd: n, children: /* @__PURE__ */ a(we, { items: [...e], strategy: Pe, children: /* @__PURE__ */ a("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((i) => /* @__PURE__ */ a(Ie, { id: i, onRemove: () => d(i) }, i)) }) }) }),
130
+ e.length === 0 && /* @__PURE__ */ a("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
131
+ /* @__PURE__ */ a("p", { className: "settings-shell__help settings-shell__help--small", children: "Drag to reorder · click × to remove" })
131
132
  ] });
132
133
  }
133
- const De = ["#1d6fd8", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"];
134
- function Me({ value: e, onSelect: t }) {
134
+ const Me = ["#1d6fd8", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"];
135
+ function $e({ value: e, onSelect: t }) {
135
136
  return /* @__PURE__ */ h("div", { className: "settings-shell__field settings-shell__field--color", role: "group", "aria-label": "Accent color", children: [
136
- /* @__PURE__ */ s("span", { className: "settings-shell__label", children: "Accent color" }),
137
- /* @__PURE__ */ s("div", { className: "settings-shell__swatch-row", children: De.map((r) => {
137
+ /* @__PURE__ */ a("span", { className: "settings-shell__label", children: "Accent color" }),
138
+ /* @__PURE__ */ a("div", { className: "settings-shell__swatch-row", children: Me.map((r) => {
138
139
  const n = e === r;
139
- return /* @__PURE__ */ s(
140
+ return /* @__PURE__ */ a(
140
141
  "button",
141
142
  {
142
143
  type: "button",
@@ -151,41 +152,41 @@ function Me({ value: e, onSelect: t }) {
151
152
  }) })
152
153
  ] });
153
154
  }
154
- const Re = ["Orders", "Quota", "Unassigned"], $e = ["threshold", "timeframe", "color"];
155
+ const Re = ["Orders", "Quota", "Unassigned"], Fe = ["threshold", "timeframe", "color"];
155
156
  function gt({
156
157
  isOpen: e,
157
158
  cardSpan: t,
158
159
  cardLabel: r = "Metric",
159
160
  cardValue: n = "—",
160
- previewSlot: c,
161
- dimensions: i = $e,
162
- initialTab: d,
161
+ previewSlot: d,
162
+ dimensions: i = Fe,
163
+ initialTab: u,
163
164
  initialValues: l
164
165
  }) {
165
- const a = k(), o = a?.state.activeTrigger, u = o?.kind === "card-overflow" ? o.cardId : null, p = Q(), m = o?.span, b = t ?? m ?? 1, y = i[0] ?? "threshold", [v, N] = K.useState(d ?? y);
166
- K.useEffect(() => {
167
- i.includes(v) || N(y);
168
- }, [i, v, y]);
169
- const g = u != null ? a?.state?.bufferByCard?.[u]?.changes ?? {} : {}, S = typeof g.threshold == "number" ? g.threshold : typeof l?.threshold == "number" ? l.threshold : 80, oe = typeof g.timeframe == "number" ? g.timeframe : typeof l?.timeframe == "number" ? l.timeframe : 30, ie = typeof g.accent == "string" ? g.accent : typeof l?.accent == "string" ? l.accent : null, ce = Array.isArray(g.slots) ? g.slots : Array.isArray(l?.slots) ? l.slots : Re, de = (w) => {
170
- u == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: u, key: "threshold", value: Number(w.target.value) });
171
- }, ue = (w) => {
172
- u == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: u, key: "timeframe", value: Number(w.target.value) });
166
+ const s = k(), o = s?.state.activeTrigger, c = o?.kind === "card-overflow" ? o.cardId : null, p = X(), m = o?.span, v = t ?? m ?? 1, y = i[0] ?? "threshold", [b, _] = B.useState(u ?? y);
167
+ B.useEffect(() => {
168
+ i.includes(b) || _(y);
169
+ }, [i, b, y]);
170
+ const g = c != null ? s?.state?.bufferByCard?.[c]?.changes ?? {} : {}, S = typeof g.threshold == "number" ? g.threshold : typeof l?.threshold == "number" ? l.threshold : 80, ie = typeof g.timeframe == "number" ? g.timeframe : typeof l?.timeframe == "number" ? l.timeframe : 30, ce = typeof g.accent == "string" ? g.accent : typeof l?.accent == "string" ? l.accent : null, de = Array.isArray(g.slots) ? g.slots : Array.isArray(l?.slots) ? l.slots : Re, ue = (w) => {
171
+ c == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: c, key: "threshold", value: Number(w.target.value) });
173
172
  }, pe = (w) => {
174
- u == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: u, key: "accent", value: w });
173
+ c == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: c, key: "timeframe", value: Number(w.target.value) });
175
174
  }, me = (w) => {
176
- u == null || a == null || a.dispatch({ type: "SET_BUFFER_VALUE", cardId: u, key: "slots", value: w });
175
+ c == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: c, key: "accent", value: w });
176
+ }, he = (w) => {
177
+ c == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: c, key: "slots", value: w });
177
178
  };
178
179
  return /* @__PURE__ */ h("div", { className: "settings-shell", "data-shell": "settings", "aria-hidden": !e, children: [
179
- /* @__PURE__ */ s("div", { "aria-hidden": "true", children: /* @__PURE__ */ s(Ae, { children: /* @__PURE__ */ s(Te, { span: b, rotating: !p, children: c ?? /* @__PURE__ */ h(X, { children: [
180
- /* @__PURE__ */ s("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: r }),
181
- /* @__PURE__ */ s("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: n })
180
+ /* @__PURE__ */ a("div", { "aria-hidden": "true", children: /* @__PURE__ */ a(Te, { children: /* @__PURE__ */ a(Oe, { span: v, rotating: !p, children: d ?? /* @__PURE__ */ h(J, { children: [
181
+ /* @__PURE__ */ a("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: r }),
182
+ /* @__PURE__ */ a("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: n })
182
183
  ] }) }) }) }),
183
- /* @__PURE__ */ s(
184
- he,
184
+ /* @__PURE__ */ a(
185
+ fe,
185
186
  {
186
187
  dimensions: i,
187
- activeTab: v,
188
- onSelect: N,
188
+ activeTab: b,
189
+ onSelect: _,
189
190
  reduced: p
190
191
  }
191
192
  ),
@@ -193,21 +194,21 @@ function gt({
193
194
  "div",
194
195
  {
195
196
  role: "tabpanel",
196
- id: `settings-tabpanel-${v}`,
197
+ id: `settings-tabpanel-${b}`,
197
198
  "aria-label": "Settings dimension controls",
198
199
  tabIndex: 0,
199
200
  className: "settings-shell__tabpanel",
200
201
  children: [
201
- v === "threshold" && /* @__PURE__ */ s(Le, { value: S, onChange: de }),
202
- v === "timeframe" && /* @__PURE__ */ s(Oe, { value: oe, onChange: ue }),
203
- v === "slots" && /* @__PURE__ */ s(Ie, { value: ce, onChange: me }),
204
- v === "color" && /* @__PURE__ */ s(Me, { value: ie, onSelect: pe })
202
+ b === "threshold" && /* @__PURE__ */ a(Le, { value: S, onChange: ue }),
203
+ b === "timeframe" && /* @__PURE__ */ a(ke, { value: ie, onChange: pe }),
204
+ b === "slots" && /* @__PURE__ */ a(De, { value: de, onChange: he }),
205
+ b === "color" && /* @__PURE__ */ a($e, { value: ce, onSelect: me })
205
206
  ]
206
207
  }
207
208
  )
208
209
  ] });
209
210
  }
210
- const ee = [
211
+ const te = [
211
212
  "Overbought",
212
213
  "What's selling",
213
214
  "On track vs plan",
@@ -215,7 +216,7 @@ const ee = [
215
216
  "Vendor performance",
216
217
  "Assortment mix",
217
218
  "Customer retention"
218
- ], te = "Overbought", U = {
219
+ ], ne = "Overbought", z = {
219
220
  Overbought: {
220
221
  headline: "Am I overbought?",
221
222
  helper: "Find slow-moving inventory before discount cycles eat margin."
@@ -245,8 +246,8 @@ const ee = [
245
246
  helper: "Repeat-rate and lapsed-account signals from the buyer file."
246
247
  }
247
248
  };
248
- U["Customer retention"].beta = !0;
249
- const ne = {
249
+ z["Customer retention"].beta = !0;
250
+ const se = {
250
251
  Overbought: {
251
252
  primary: [
252
253
  {
@@ -366,6 +367,86 @@ const ne = {
366
367
  { label: "YTD", value: "38.1%" }
367
368
  ],
368
369
  desc: "Gross margin pace across multiple windows."
370
+ },
371
+ // PHASE 17 D1 — agency-revenue port (J1) + commission-economics port (J6)
372
+ {
373
+ id: "agency-sales",
374
+ label: "Sales",
375
+ value: "$892,450",
376
+ desc: "Agency total sales with trend sparkline"
377
+ },
378
+ {
379
+ id: "agency-commission",
380
+ label: "Commissions",
381
+ value: "$133,868",
382
+ desc: "Total commission earned by the agency"
383
+ },
384
+ {
385
+ id: "agency-growth",
386
+ label: "Sales Growth",
387
+ value: "+18%",
388
+ desc: "Year-over-year agency sales growth rate"
389
+ },
390
+ {
391
+ id: "agency-aov",
392
+ label: "Avg Order",
393
+ value: "$2,340",
394
+ desc: "Average order value with trend sparkline"
395
+ },
396
+ {
397
+ id: "agency-conversion",
398
+ label: "Conversion",
399
+ value: "68%",
400
+ desc: "Order completion rate vs cancellations"
401
+ },
402
+ {
403
+ id: "agency-revenue-compact",
404
+ label: "Total Revenue",
405
+ value: "$892,450",
406
+ desc: "Agency revenue with sparkline trend"
407
+ },
408
+ // degrade-to-standard: stacked-group with MTD segment shown at span-1
409
+ {
410
+ id: "agency-sales-stacked",
411
+ label: "Sales",
412
+ value: "$892,450",
413
+ desc: "Agency sales across three timeframes at a glance (MTD shown)"
414
+ },
415
+ {
416
+ id: "agency-aov-stacked",
417
+ label: "Avg Order",
418
+ value: "$2,340",
419
+ desc: "Average order value across three timeframes (MTD shown)"
420
+ },
421
+ {
422
+ id: "agency-yoy-versus",
423
+ label: "YoY Comparison",
424
+ value: "$892K",
425
+ desc: "TY vs LY sales side-by-side"
426
+ },
427
+ {
428
+ id: "agency-revenue-by-mfr",
429
+ label: "Mfr Revenue",
430
+ value: "$892K",
431
+ desc: "Revenue mix across top manufacturers"
432
+ },
433
+ {
434
+ id: "agency-outstanding",
435
+ label: "Outstanding",
436
+ value: "$24,500",
437
+ desc: "Unpaid order balance across all accounts"
438
+ },
439
+ {
440
+ id: "agency-commission-rate",
441
+ label: "Commission",
442
+ value: "8.4%",
443
+ desc: "Effective commission rate %"
444
+ },
445
+ {
446
+ id: "agency-commission-aging",
447
+ label: "Commission Aging",
448
+ value: "$24K",
449
+ desc: "Unpaid commission aging by buckets"
369
450
  }
370
451
  ]
371
452
  },
@@ -384,6 +465,44 @@ const ne = {
384
465
  value: "18",
385
466
  desc: "Open shipments projected to miss SLA.",
386
467
  isNew: !0
468
+ },
469
+ // PHASE 17 D1 — agency-order-flow port (J5)
470
+ {
471
+ id: "agency-activity",
472
+ label: "Orders",
473
+ value: "47 Orders",
474
+ desc: "Daily team order count with bar chart"
475
+ },
476
+ {
477
+ id: "agency-unassigned-orders",
478
+ label: "Unassigned",
479
+ value: "0",
480
+ desc: "Orders awaiting salesperson assignment"
481
+ },
482
+ {
483
+ id: "agency-orders-compact",
484
+ label: "Order Count",
485
+ value: "156",
486
+ desc: "Total order count with bar chart trend"
487
+ },
488
+ // degrade-to-standard: stacked-group with MTD segment shown at span-1
489
+ {
490
+ id: "agency-orders-stacked",
491
+ label: "Orders",
492
+ value: "156",
493
+ desc: "Order count across three timeframes at a glance (MTD shown)"
494
+ },
495
+ {
496
+ id: "agency-order-pipeline-value",
497
+ label: "Pipeline Value",
498
+ value: "$284,500",
499
+ desc: "Open + transmitted order $ pipeline"
500
+ },
501
+ {
502
+ id: "agency-cancel-rate",
503
+ label: "Cancel Rate",
504
+ value: "4.2%",
505
+ desc: "Order cancel-rate percentage (warn-tinted highlight)"
387
506
  }
388
507
  ]
389
508
  },
@@ -403,6 +522,19 @@ const ne = {
403
522
  desc: "Vendor fill rate against placed orders.",
404
523
  donut: !0,
405
524
  accent: "#2563eb"
525
+ },
526
+ // PHASE 17 D1 — agency-brand-portfolio port (J3)
527
+ {
528
+ id: "agency-mfr-mix",
529
+ label: "Mfr Mix",
530
+ value: "$892K",
531
+ desc: "Revenue mix by manufacturer (segmented bar)"
532
+ },
533
+ {
534
+ id: "agency-mfr-new-line",
535
+ label: "New Mfrs",
536
+ value: "3",
537
+ desc: "New manufacturer count for the period"
406
538
  }
407
539
  ]
408
540
  },
@@ -438,51 +570,76 @@ const ne = {
438
570
  label: "Lapsed accounts",
439
571
  value: "47",
440
572
  desc: "Accounts with zero orders in the last 90 days."
573
+ },
574
+ // PHASE 17 D1 — agency-account-coverage port (J4)
575
+ {
576
+ id: "agency-new-accounts",
577
+ label: "New Accounts",
578
+ value: "12",
579
+ desc: "New customer accounts opened this period"
580
+ },
581
+ {
582
+ id: "agency-customers-compact",
583
+ label: "Customers",
584
+ value: "287",
585
+ desc: "Active customer count with bar chart trend"
586
+ },
587
+ {
588
+ id: "agency-inactive-accounts",
589
+ label: "Inactive Act",
590
+ value: "5",
591
+ desc: "Inactive customer-account count (warn-tinted)"
592
+ },
593
+ {
594
+ id: "agency-account-churn",
595
+ label: "Account Churn",
596
+ value: "8%",
597
+ desc: "Customer churn rate (LY-active not TY-active)"
441
598
  }
442
599
  ]
443
600
  }
444
601
  };
445
- function se({
602
+ function ae({
446
603
  lenses: e,
447
604
  activeLens: t,
448
605
  onLensChange: r,
449
606
  variant: n = "pills",
450
- lensMeta: c = U
607
+ lensMeta: d = z
451
608
  }) {
452
- return n === "pills" ? /* @__PURE__ */ s("div", { className: "cat-pills-wrap", children: /* @__PURE__ */ s("div", { className: "cat-pills", role: "tablist", "aria-label": "Metric lenses", children: e.map((i) => {
453
- const d = i === t, l = c[i], a = ["cat-pill"];
454
- return d && a.push("active"), /* @__PURE__ */ h(
609
+ return n === "pills" ? /* @__PURE__ */ a("div", { className: "cat-pills-wrap", children: /* @__PURE__ */ a("div", { className: "cat-pills", role: "tablist", "aria-label": "Metric lenses", children: e.map((i) => {
610
+ const u = i === t, l = d[i], s = ["cat-pill"];
611
+ return u && s.push("active"), /* @__PURE__ */ h(
455
612
  "button",
456
613
  {
457
614
  type: "button",
458
615
  role: "tab",
459
- "aria-selected": d,
460
- className: a.join(" "),
616
+ "aria-selected": u,
617
+ className: s.join(" "),
461
618
  "data-lens": i,
462
619
  onClick: () => {
463
- d || r(i);
620
+ u || r(i);
464
621
  },
465
622
  children: [
466
623
  i,
467
- l?.beta && /* @__PURE__ */ s("span", { className: "cat-pill-beta", "aria-label": "Beta", children: "BETA" })
624
+ l?.beta && /* @__PURE__ */ a("span", { className: "cat-pill-beta", "aria-label": "Beta", children: "BETA" })
468
625
  ]
469
626
  },
470
627
  i
471
628
  );
472
- }) }) }) : /* @__PURE__ */ s(Fe, { lenses: e, activeLens: t, onLensChange: r });
629
+ }) }) }) : /* @__PURE__ */ a(Ue, { lenses: e, activeLens: t, onLensChange: r });
473
630
  }
474
- function Fe({
631
+ function Ue({
475
632
  lenses: e,
476
633
  activeLens: t,
477
634
  onLensChange: r
478
635
  }) {
479
- const [n, c] = _(!1), i = I(null), d = () => {
636
+ const [n, d] = C(!1), i = I(null), u = () => {
480
637
  i.current != null && (window.clearTimeout(i.current), i.current = null);
481
638
  }, l = () => {
482
- d(), i.current = window.setTimeout(() => c(!1), 100);
483
- }, a = e.filter((o) => o !== t);
484
- return /* @__PURE__ */ s("div", { className: "cat-segmented-wrap", children: /* @__PURE__ */ h("div", { className: "cat-segmented", children: [
485
- /* @__PURE__ */ s(
639
+ u(), i.current = window.setTimeout(() => d(!1), 100);
640
+ }, s = e.filter((o) => o !== t);
641
+ return /* @__PURE__ */ a("div", { className: "cat-segmented-wrap", children: /* @__PURE__ */ h("div", { className: "cat-segmented", children: [
642
+ /* @__PURE__ */ a(
486
643
  "button",
487
644
  {
488
645
  type: "button",
@@ -497,26 +654,26 @@ function Fe({
497
654
  {
498
655
  className: "cat-seg-more",
499
656
  onMouseEnter: () => {
500
- d(), c(!0);
657
+ u(), d(!0);
501
658
  },
502
659
  onMouseLeave: l,
503
660
  children: [
504
- /* @__PURE__ */ s("button", { type: "button", className: "cat-seg cat-seg-more-btn", "aria-haspopup": "menu", "aria-expanded": n, children: "More ▾" }),
505
- n && /* @__PURE__ */ s(
661
+ /* @__PURE__ */ a("button", { type: "button", className: "cat-seg cat-seg-more-btn", "aria-haspopup": "menu", "aria-expanded": n, children: "More ▾" }),
662
+ n && /* @__PURE__ */ a(
506
663
  "div",
507
664
  {
508
665
  className: "cat-seg-overflow",
509
666
  role: "menu",
510
- onMouseEnter: d,
667
+ onMouseEnter: u,
511
668
  onMouseLeave: l,
512
- children: a.map((o) => /* @__PURE__ */ s(
669
+ children: s.map((o) => /* @__PURE__ */ a(
513
670
  "button",
514
671
  {
515
672
  type: "button",
516
673
  "data-lens": o,
517
674
  role: "menuitem",
518
675
  onClick: () => {
519
- r(o), c(!1);
676
+ r(o), d(!1);
520
677
  },
521
678
  children: o
522
679
  },
@@ -529,65 +686,86 @@ function Fe({
529
686
  )
530
687
  ] }) });
531
688
  }
532
- function He(e) {
533
- return e.split("·").map((t, r) => {
534
- const n = t.trim(), c = n.match(/^([$+\-]?[\d,]+(?:\.\d+)?[%+]?)\s*(.*)$/), i = c ? c[1] : "", d = c ? c[2] : n;
535
- return /* @__PURE__ */ h("span", { children: [
536
- /* @__PURE__ */ s("strong", { children: i }),
537
- /* @__PURE__ */ s("small", { children: d })
538
- ] }, r);
539
- });
540
- }
541
- function ze(e) {
542
- return e.map((t, r) => /* @__PURE__ */ h("span", { children: [
543
- /* @__PURE__ */ s("strong", { children: t.value }),
544
- /* @__PURE__ */ s("small", { children: t.label })
545
- ] }, r));
546
- }
547
- function H({ tiles: e, selectedTileId: t, onSelectTile: r }) {
548
- return /* @__PURE__ */ s("div", { className: "cat-tiles", children: e.map((n) => {
549
- const c = n.id === t, i = n.subStats != null && n.subStats.length > 0;
550
- let d = null;
551
- i ? n.subStats.length === 5 ? d = "span-5" : n.subStats.length === 3 ? d = "span-3" : d = "span-2" : n.stack === !0 && (d = "span-2");
689
+ function U({ tiles: e, selectedTileId: t, onSelectTile: r }) {
690
+ return /* @__PURE__ */ a("div", { className: "cat-tiles", children: e.map((n) => {
691
+ const d = n.id === t, i = n.subStats != null && n.subStats.length > 0;
692
+ let u = null;
693
+ i ? n.subStats.length === 5 ? u = "span-5" : n.subStats.length === 3 ? u = "span-3" : u = "span-2" : n.stack === !0 && (u = "span-2");
552
694
  const l = ["cat-tile"];
553
- return d && l.push(d), c && l.push("selected"), n.isNew && l.push("is-new"), n.startHere && l.push("start-here"), n.donut && l.push("has-donut"), /* @__PURE__ */ h(
695
+ u && l.push(u), d && l.push("selected"), n.isNew && l.push("is-new"), n.startHere && l.push("start-here"), n.donut && l.push("has-donut");
696
+ const s = 1;
697
+ let o = 0.7;
698
+ if (n.donut) {
699
+ const c = /([\d.]+)\s*%/.exec(n.value);
700
+ if (c) {
701
+ const p = parseFloat(c[1]);
702
+ Number.isFinite(p) && (o = Math.max(0, Math.min(1, p / 100)));
703
+ }
704
+ }
705
+ return /* @__PURE__ */ h(
554
706
  "button",
555
707
  {
556
708
  type: "button",
557
709
  className: l.join(" "),
558
710
  "data-metric": n.id,
559
711
  "data-desc": n.desc,
712
+ "data-col-span": String(s),
560
713
  "data-donut": n.donut ? "true" : void 0,
561
714
  "data-accent": n.accent,
562
- "aria-pressed": c,
715
+ "aria-pressed": d,
563
716
  onClick: () => r(n.id, n.desc),
564
717
  style: n.accent ? { "--cat-tile-accent": n.accent } : void 0,
565
718
  children: [
566
- n.startHere && /* @__PURE__ */ s("span", { className: "cat-tile-start-here", "aria-hidden": "true", children: "START HERE" }),
567
- /* @__PURE__ */ s("span", { className: "cat-tile-label", children: n.label }),
568
- /* @__PURE__ */ s("span", { className: "cat-tile-value", children: i ? ze(n.subStats) : n.stack === !0 ? He(n.value) : n.value }),
569
- n.variants && n.variants.length > 0 && /* @__PURE__ */ s("span", { className: "cat-tile-variants", "aria-hidden": "true", children: n.variants.map((a) => /* @__PURE__ */ s("span", { children: a }, a)) }),
570
- n.isNew && /* @__PURE__ */ s("span", { className: "cat-tile-new-dot", "aria-hidden": "true" }),
571
- n.donut && /* @__PURE__ */ s("span", { className: "cat-tile-donut", "aria-hidden": "true" })
719
+ n.startHere && /* @__PURE__ */ a("span", { className: "cat-tile-start-here", "aria-hidden": "true", children: "START HERE" }),
720
+ /* @__PURE__ */ a(
721
+ "div",
722
+ {
723
+ className: "cat-tile-primitive-wrapper gloss-metric-card",
724
+ style: { pointerEvents: "none", width: "100%", height: "100%" },
725
+ "aria-hidden": "true",
726
+ children: n.donut ? /* @__PURE__ */ a(
727
+ G,
728
+ {
729
+ variant: "donut",
730
+ label: n.label,
731
+ value: n.value,
732
+ donutValue: o,
733
+ donutMax: 1,
734
+ accentColor: n.accent,
735
+ colSpan: s
736
+ }
737
+ ) : /* @__PURE__ */ a(
738
+ G,
739
+ {
740
+ variant: "standard",
741
+ label: n.label,
742
+ value: n.value,
743
+ colSpan: s
744
+ }
745
+ )
746
+ }
747
+ ),
748
+ n.variants && n.variants.length > 0 && /* @__PURE__ */ a("span", { className: "cat-tile-variants", "aria-hidden": "true", children: n.variants.map((c) => /* @__PURE__ */ a("span", { children: c }, c)) }),
749
+ n.isNew && /* @__PURE__ */ a("span", { className: "cat-tile-new-dot", "aria-hidden": "true" })
572
750
  ]
573
751
  },
574
752
  n.id
575
753
  );
576
754
  }) });
577
755
  }
578
- const V = J(null);
579
- function Ue() {
580
- return Z(V);
756
+ const V = Z(null);
757
+ function He() {
758
+ return ee(V);
581
759
  }
582
- function Ve({ mode: e, dispatch: t }) {
583
- const r = Ue();
760
+ function ze({ mode: e, dispatch: t }) {
761
+ const r = He();
584
762
  if (r == null && e == null) return null;
585
- const n = r?.mode ?? e ?? "add", c = r?.selectedTileId ?? null, i = r?.description ?? null, d = c == null;
763
+ const n = r?.mode ?? e ?? "add", d = r?.selectedTileId ?? null, i = r?.description ?? null, u = d == null;
586
764
  return /* @__PURE__ */ h("div", { className: "panel-footer catalog", children: [
587
- /* @__PURE__ */ s("div", { className: "cat-description", id: "cat-desc", children: i ?? /* @__PURE__ */ s("em", { children: "Tap a metric to see its description" }) }),
765
+ /* @__PURE__ */ a("div", { className: "cat-description", id: "cat-desc", children: i ?? /* @__PURE__ */ a("em", { children: "Tap a metric to see its description" }) }),
588
766
  /* @__PURE__ */ h("div", { style: { display: "flex", padding: "10px 14px", gap: 8 }, children: [
589
- /* @__PURE__ */ s("div", { className: "spacer", style: { flex: 1 } }),
590
- /* @__PURE__ */ s(
767
+ /* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
768
+ /* @__PURE__ */ a(
591
769
  "button",
592
770
  {
593
771
  id: "btn-cat-cancel",
@@ -597,24 +775,24 @@ function Ve({ mode: e, dispatch: t }) {
597
775
  children: "Cancel"
598
776
  }
599
777
  ),
600
- n === "add" && /* @__PURE__ */ s(
778
+ n === "add" && /* @__PURE__ */ a(
601
779
  "button",
602
780
  {
603
781
  id: "btn-cat-add",
604
782
  type: "button",
605
783
  className: "btn btn-primary",
606
- disabled: d,
784
+ disabled: u,
607
785
  onClick: () => t({ type: "CLOSE_PANEL", reason: "apply-button" }),
608
786
  children: "Add metric"
609
787
  }
610
788
  ),
611
- n === "replace" && /* @__PURE__ */ s(
789
+ n === "replace" && /* @__PURE__ */ a(
612
790
  "button",
613
791
  {
614
792
  id: "btn-cat-replace",
615
793
  type: "button",
616
794
  className: "btn btn-primary",
617
- disabled: d,
795
+ disabled: u,
618
796
  onClick: () => t({ type: "CLOSE_PANEL", reason: "apply-button" }),
619
797
  children: "Replace metric"
620
798
  }
@@ -622,7 +800,7 @@ function Ve({ mode: e, dispatch: t }) {
622
800
  ] })
623
801
  ] });
624
802
  }
625
- function G(e, t) {
803
+ function q(e, t) {
626
804
  if (t.length === 0) return !0;
627
805
  const r = t.toLowerCase();
628
806
  if (e.label.toLowerCase().includes(r) || e.value.toLowerCase().includes(r)) return !0;
@@ -632,28 +810,28 @@ function G(e, t) {
632
810
  }
633
811
  return !1;
634
812
  }
635
- function bt({
813
+ function vt({
636
814
  isOpen: e,
637
- lenses: t = ee,
638
- defaultLens: r = te,
639
- tilesByLens: n = ne,
640
- lensMeta: c = U,
815
+ lenses: t = te,
816
+ defaultLens: r = ne,
817
+ tilesByLens: n = se,
818
+ lensMeta: d = z,
641
819
  footerSlot: i
642
820
  }) {
643
- const [d, l] = _(r), [a, o] = _(null), [u, p] = _(null), [m, b] = _(""), y = n[d] ?? { primary: [] }, v = c[d], N = W(
644
- () => y.primary.filter((g) => G(g, m)),
821
+ const [u, l] = C(r), [s, o] = C(null), [c, p] = C(null), [m, v] = C(""), y = n[u] ?? { primary: [] }, b = d[u], _ = Y(
822
+ () => y.primary.filter((g) => q(g, m)),
645
823
  [y.primary, m]
646
- ), C = W(
647
- () => (y.secondary ?? []).filter((g) => G(g, m)),
824
+ ), N = Y(
825
+ () => (y.secondary ?? []).filter((g) => q(g, m)),
648
826
  [y.secondary, m]
649
827
  );
650
828
  return /* @__PURE__ */ h(
651
829
  V.Provider,
652
830
  {
653
- value: { mode: "add", selectedTileId: a, description: u },
831
+ value: { mode: "add", selectedTileId: s, description: c },
654
832
  children: [
655
833
  /* @__PURE__ */ h("div", { "data-shell": "catalog-add", "aria-hidden": !e, children: [
656
- /* @__PURE__ */ s("div", { className: "cat-search", children: /* @__PURE__ */ s(
834
+ /* @__PURE__ */ a("div", { className: "cat-search", children: /* @__PURE__ */ a(
657
835
  "input",
658
836
  {
659
837
  type: "search",
@@ -661,49 +839,49 @@ function bt({
661
839
  placeholder: "Search metrics",
662
840
  "aria-label": "Search metrics",
663
841
  value: m,
664
- onChange: (g) => b(g.target.value)
842
+ onChange: (g) => v(g.target.value)
665
843
  }
666
844
  ) }),
667
- /* @__PURE__ */ s(
668
- se,
845
+ /* @__PURE__ */ a(
846
+ ae,
669
847
  {
670
848
  lenses: t,
671
- activeLens: d,
672
- lensMeta: c,
849
+ activeLens: u,
850
+ lensMeta: d,
673
851
  variant: "pills",
674
852
  onLensChange: (g) => {
675
- l(g), o(null), p(null), b("");
853
+ l(g), o(null), p(null), v("");
676
854
  }
677
855
  }
678
856
  ),
679
- v && /* @__PURE__ */ h("div", { className: "cat-lens-meta", children: [
680
- /* @__PURE__ */ s("h3", { className: "cat-lens-headline", children: v.headline }),
681
- /* @__PURE__ */ s("p", { className: "cat-lens-helper", children: v.helper })
857
+ b && /* @__PURE__ */ h("div", { className: "cat-lens-meta", children: [
858
+ /* @__PURE__ */ a("h3", { className: "cat-lens-headline", children: b.headline }),
859
+ /* @__PURE__ */ a("p", { className: "cat-lens-helper", children: b.helper })
682
860
  ] }),
683
- /* @__PURE__ */ s(
684
- H,
861
+ /* @__PURE__ */ a(
862
+ U,
685
863
  {
686
- tiles: N,
687
- selectedTileId: a,
864
+ tiles: _,
865
+ selectedTileId: s,
688
866
  onSelectTile: (g, S) => {
689
867
  o(g), p(S);
690
868
  }
691
869
  }
692
870
  ),
693
- C.length > 0 && /* @__PURE__ */ h("div", { className: "cat-more-in-lens", children: [
694
- /* @__PURE__ */ s("div", { className: "cat-more-in-lens__heading", children: "MORE IN THIS LENS" }),
695
- /* @__PURE__ */ s(
696
- H,
871
+ N.length > 0 && /* @__PURE__ */ h("div", { className: "cat-more-in-lens", children: [
872
+ /* @__PURE__ */ a("div", { className: "cat-more-in-lens__heading", children: "MORE IN THIS LENS" }),
873
+ /* @__PURE__ */ a(
874
+ U,
697
875
  {
698
- tiles: C,
699
- selectedTileId: a,
876
+ tiles: N,
877
+ selectedTileId: s,
700
878
  onSelectTile: (g, S) => {
701
879
  o(g), p(S);
702
880
  }
703
881
  }
704
882
  )
705
883
  ] }),
706
- N.length === 0 && C.length === 0 && m.length > 0 && /* @__PURE__ */ h("div", { className: "cat-empty", children: [
884
+ _.length === 0 && N.length === 0 && m.length > 0 && /* @__PURE__ */ h("div", { className: "cat-empty", children: [
707
885
  'No metrics match "',
708
886
  m,
709
887
  '".'
@@ -714,42 +892,42 @@ function bt({
714
892
  }
715
893
  );
716
894
  }
717
- function vt({
895
+ function bt({
718
896
  isOpen: e,
719
897
  replacingLabel: t,
720
- lenses: r = ee,
721
- defaultLens: n = te,
722
- tilesByLens: c = ne,
898
+ lenses: r = te,
899
+ defaultLens: n = ne,
900
+ tilesByLens: d = se,
723
901
  footerSlot: i
724
902
  }) {
725
- const [d, l] = _(n), [a, o] = _(null), [u, p] = _(null), m = c[d] ?? { primary: [] }, b = [...m.primary, ...m.secondary ?? []];
903
+ const [u, l] = C(n), [s, o] = C(null), [c, p] = C(null), m = d[u] ?? { primary: [] }, v = [...m.primary, ...m.secondary ?? []];
726
904
  return /* @__PURE__ */ h(
727
905
  V.Provider,
728
906
  {
729
- value: { mode: "replace", selectedTileId: a, description: u },
907
+ value: { mode: "replace", selectedTileId: s, description: c },
730
908
  children: [
731
909
  /* @__PURE__ */ h("div", { "data-shell": "catalog-replace", "aria-hidden": !e, children: [
732
910
  t && /* @__PURE__ */ h("p", { className: "cat-subtitle", children: [
733
911
  "replacing ",
734
912
  t
735
913
  ] }),
736
- /* @__PURE__ */ s(
737
- se,
914
+ /* @__PURE__ */ a(
915
+ ae,
738
916
  {
739
917
  lenses: r,
740
- activeLens: d,
918
+ activeLens: u,
741
919
  onLensChange: (y) => {
742
920
  l(y), o(null), p(null);
743
921
  }
744
922
  }
745
923
  ),
746
- /* @__PURE__ */ s(
747
- H,
924
+ /* @__PURE__ */ a(
925
+ U,
748
926
  {
749
- tiles: b,
750
- selectedTileId: a,
751
- onSelectTile: (y, v) => {
752
- o(y), p(v);
927
+ tiles: v,
928
+ selectedTileId: s,
929
+ onSelectTile: (y, b) => {
930
+ o(y), p(b);
753
931
  }
754
932
  }
755
933
  )
@@ -759,20 +937,20 @@ function vt({
759
937
  }
760
938
  );
761
939
  }
762
- const ae = J(null);
763
- function re() {
764
- return Z(ae);
940
+ const re = Z(null);
941
+ function le() {
942
+ return ee(re);
765
943
  }
766
- function Be(e = {}) {
767
- const r = re()?.setPages;
944
+ function Ve(e = {}) {
945
+ const r = le()?.setPages;
768
946
  return /* @__PURE__ */ h(
769
947
  "div",
770
948
  {
771
949
  className: "panel-footer pm",
772
950
  style: { display: "flex", justifyContent: "flex-end", padding: "10px 14px" },
773
951
  children: [
774
- /* @__PURE__ */ s("div", { className: "spacer", style: { flex: 1 } }),
775
- /* @__PURE__ */ s(
952
+ /* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
953
+ /* @__PURE__ */ a(
776
954
  "button",
777
955
  {
778
956
  id: "btn-new-page",
@@ -792,26 +970,26 @@ function Be(e = {}) {
792
970
  );
793
971
  }
794
972
  function Ke({ page: e, onRename: t, onKebab: r, onDragStart: n }) {
795
- const c = re(), [i, d] = _(!1), l = I(null);
796
- x(() => {
973
+ const d = le(), [i, u] = C(!1), l = I(null);
974
+ A(() => {
797
975
  if (!i) return;
798
- const m = (b) => {
799
- l.current && (l.current.contains(b.target) || d(!1));
976
+ const m = (v) => {
977
+ l.current && (l.current.contains(v.target) || u(!1));
800
978
  };
801
979
  return document.addEventListener("mousedown", m, !0), () => document.removeEventListener("mousedown", m, !0);
802
980
  }, [i]);
803
- const a = () => {
804
- if (d(!1), t) return t(e.id);
805
- if (!c?.renamePage) return;
981
+ const s = () => {
982
+ if (u(!1), t) return t(e.id);
983
+ if (!d?.renamePage) return;
806
984
  const m = window.prompt("Rename page", e.name);
807
- m != null && m.trim().length > 0 && c.renamePage(e.id, m.trim());
985
+ m != null && m.trim().length > 0 && d.renamePage(e.id, m.trim());
808
986
  }, o = () => {
809
- d(!1), c?.duplicatePage?.(e.id);
810
- }, u = () => {
811
- d(!1), !e.active && c?.deletePage?.(e.id);
987
+ u(!1), d?.duplicatePage?.(e.id);
988
+ }, c = () => {
989
+ u(!1), !e.active && d?.deletePage?.(e.id);
812
990
  }, p = ["pm-row"];
813
991
  return e.active && p.push("active"), /* @__PURE__ */ h("div", { ref: l, className: p.join(" "), "data-page-id": e.id, role: "listitem", children: [
814
- /* @__PURE__ */ s(
992
+ /* @__PURE__ */ a(
815
993
  "div",
816
994
  {
817
995
  className: "pm-handle",
@@ -820,8 +998,8 @@ function Ke({ page: e, onRename: t, onKebab: r, onDragStart: n }) {
820
998
  children: "⋮⋮"
821
999
  }
822
1000
  ),
823
- /* @__PURE__ */ s("div", { className: "pm-name", children: e.name }),
824
- /* @__PURE__ */ s(
1001
+ /* @__PURE__ */ a("div", { className: "pm-name", children: e.name }),
1002
+ /* @__PURE__ */ a(
825
1003
  "button",
826
1004
  {
827
1005
  type: "button",
@@ -831,21 +1009,21 @@ function Ke({ page: e, onRename: t, onKebab: r, onDragStart: n }) {
831
1009
  "aria-expanded": i,
832
1010
  onClick: (m) => {
833
1011
  if (m.stopPropagation(), r) return r(e.id);
834
- d((b) => !b);
1012
+ u((v) => !v);
835
1013
  },
836
1014
  children: "⋯"
837
1015
  }
838
1016
  ),
839
1017
  i && /* @__PURE__ */ h("div", { className: "pm-kebab-menu", role: "menu", "data-page-id": e.id, children: [
840
- /* @__PURE__ */ s("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: a, children: "Rename" }),
841
- /* @__PURE__ */ s("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: o, children: "Duplicate" }),
842
- /* @__PURE__ */ s(
1018
+ /* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: s, children: "Rename" }),
1019
+ /* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: o, children: "Duplicate" }),
1020
+ /* @__PURE__ */ a(
843
1021
  "button",
844
1022
  {
845
1023
  type: "button",
846
1024
  role: "menuitem",
847
1025
  className: "pm-kebab-menu__item pm-kebab-menu__item--danger",
848
- onClick: u,
1026
+ onClick: c,
849
1027
  "aria-disabled": e.active,
850
1028
  children: "Delete"
851
1029
  }
@@ -853,7 +1031,7 @@ function Ke({ page: e, onRename: t, onKebab: r, onDragStart: n }) {
853
1031
  ] })
854
1032
  ] });
855
1033
  }
856
- const We = [
1034
+ const Be = [
857
1035
  { id: "p-pipeline", name: "My Pipeline", active: !0 },
858
1036
  { id: "p-numbers", name: "My Numbers", active: !1 },
859
1037
  { id: "p-morning", name: "My Morning", active: !1 },
@@ -861,28 +1039,28 @@ const We = [
861
1039
  ];
862
1040
  function yt({
863
1041
  isOpen: e,
864
- pages: t = We,
1042
+ pages: t = Be,
865
1043
  footerSlot: r
866
1044
  }) {
867
- const [n, c] = _(() => [...t]), i = E((a, o) => {
868
- c((u) => u.map((p) => p.id === a ? { ...p, name: o } : p));
869
- }, []), d = E((a) => {
870
- c((o) => {
871
- const u = o.find((b) => b.id === a);
872
- if (!u) return o;
1045
+ const [n, d] = C(() => [...t]), i = E((s, o) => {
1046
+ d((c) => c.map((p) => p.id === s ? { ...p, name: o } : p));
1047
+ }, []), u = E((s) => {
1048
+ d((o) => {
1049
+ const c = o.find((v) => v.id === s);
1050
+ if (!c) return o;
873
1051
  const p = {
874
- id: `${u.id}-copy-${Date.now()}`,
875
- name: `${u.name} copy`,
1052
+ id: `${c.id}-copy-${Date.now()}`,
1053
+ name: `${c.name} copy`,
876
1054
  active: !1
877
- }, m = o.findIndex((b) => b.id === a);
1055
+ }, m = o.findIndex((v) => v.id === s);
878
1056
  return [...o.slice(0, m + 1), p, ...o.slice(m + 1)];
879
1057
  });
880
- }, []), l = E((a) => {
881
- c((o) => o.filter((u) => u.id !== a));
1058
+ }, []), l = E((s) => {
1059
+ d((o) => o.filter((c) => c.id !== s));
882
1060
  }, []);
883
- return /* @__PURE__ */ s(ae.Provider, { value: { pages: n, setPages: c, renamePage: i, duplicatePage: d, deletePage: l }, children: /* @__PURE__ */ h("div", { "data-shell": "page-management", "aria-hidden": !e, children: [
884
- /* @__PURE__ */ s("div", { className: "pm-list", role: "list", children: n.map((a) => /* @__PURE__ */ s(Ke, { page: a }, a.id)) }),
885
- r != null && /* @__PURE__ */ s("div", { className: "pm-footer-pin", children: r })
1061
+ return /* @__PURE__ */ a(re.Provider, { value: { pages: n, setPages: d, renamePage: i, duplicatePage: u, deletePage: l }, children: /* @__PURE__ */ h("div", { "data-shell": "page-management", "aria-hidden": !e, children: [
1062
+ /* @__PURE__ */ a("div", { className: "pm-list", role: "list", children: n.map((s) => /* @__PURE__ */ a(Ke, { page: s }, s.id)) }),
1063
+ r != null && /* @__PURE__ */ a("div", { className: "pm-footer-pin", children: r })
886
1064
  ] }) });
887
1065
  }
888
1066
  const St = {
@@ -891,12 +1069,12 @@ const St = {
891
1069
  CATALOG_REPLACE: "catalog-replace",
892
1070
  PAGE_MGMT: "page-management",
893
1071
  NOTIFICATION_CENTER: "notification-center"
894
- }, qe = {
1072
+ }, Ye = {
895
1073
  position: "fixed",
896
1074
  inset: 0,
897
1075
  pointerEvents: "none",
898
1076
  zIndex: 55
899
- }, Ge = {
1077
+ }, We = {
900
1078
  position: "absolute",
901
1079
  inset: 0,
902
1080
  zIndex: 1,
@@ -905,19 +1083,19 @@ const St = {
905
1083
  pointerEvents: "none",
906
1084
  background: "rgba(0, 0, 0, 0.04)"
907
1085
  };
908
- function _t() {
909
- const { state: e, dispatch: t, getCloseLog: r } = fe();
910
- x(() => {
1086
+ function Ct() {
1087
+ const { state: e, dispatch: t, getCloseLog: r } = ge();
1088
+ A(() => {
911
1089
  if (e.activePanelId == null) return;
912
- function i(d) {
913
- d.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
1090
+ function i(u) {
1091
+ u.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
914
1092
  }
915
1093
  return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
916
1094
  }, [e.activePanelId, t]);
917
1095
  const n = I(e);
918
- ge(() => {
1096
+ ve(() => {
919
1097
  n.current = e;
920
- }), x(() => {
1098
+ }), A(() => {
921
1099
  if (process.env.NODE_ENV === "production") return;
922
1100
  const i = window;
923
1101
  return i.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), i.__panelsHostHandle = {
@@ -928,57 +1106,57 @@ function _t() {
928
1106
  i.__panelsHostHandle?.dispatch === t && delete window.__panelsHostHandle;
929
1107
  };
930
1108
  }, [t, r]);
931
- const c = E(() => {
1109
+ const d = E(() => {
932
1110
  t({ type: "CLOSE_PANEL", reason: "nav-escape-hatch" });
933
1111
  }, [t]);
934
- return /* @__PURE__ */ s("div", { "data-panel-host": "true", style: qe, children: e.activePanelId != null && /* @__PURE__ */ s(
1112
+ return /* @__PURE__ */ a("div", { "data-panel-host": "true", style: Ye, children: e.activePanelId != null && /* @__PURE__ */ a(
935
1113
  "div",
936
1114
  {
937
1115
  "data-panel-scrim": "true",
938
- style: Ge,
939
- onClick: c
1116
+ style: We,
1117
+ onClick: d
940
1118
  }
941
1119
  ) });
942
1120
  }
943
- const Ye = 700;
944
- function je(e) {
945
- const [t, r] = _(null), n = I(null);
946
- return x(() => {
1121
+ const Ge = 700;
1122
+ function qe(e) {
1123
+ const [t, r] = C(null), n = I(null);
1124
+ return A(() => {
947
1125
  if (e != null) {
948
1126
  n.current != null && (clearTimeout(n.current), n.current = null), r(null);
949
1127
  return;
950
1128
  }
951
- return r((c) => c), n.current = setTimeout(() => {
1129
+ return r((d) => d), n.current = setTimeout(() => {
952
1130
  r(null), n.current = null;
953
- }, Ye), () => {
1131
+ }, Ge), () => {
954
1132
  n.current != null && (clearTimeout(n.current), n.current = null);
955
1133
  };
956
- }, [e]), x(() => {
1134
+ }, [e]), A(() => {
957
1135
  e != null && r(e);
958
1136
  }, [e]), e != null ? { panelId: e, isOpen: !0 } : t != null ? { panelId: t, isOpen: !1 } : { panelId: null, isOpen: !1 };
959
1137
  }
960
- function Nt({ panelComponents: e, children: t }) {
1138
+ function _t({ panelComponents: e, children: t }) {
961
1139
  const r = k();
962
1140
  if (r == null) return null;
963
- const { state: n, dispatch: c } = r, i = je(n.activePanelId);
1141
+ const { state: n, dispatch: d } = r, i = qe(n.activePanelId);
964
1142
  if (i.panelId == null) return null;
965
- const d = i.panelId, l = i.isOpen, a = e?.[d];
966
- if (a == null && t == null)
1143
+ const u = i.panelId, l = i.isOpen, s = e?.[u];
1144
+ if (s == null && t == null)
967
1145
  return process.env.NODE_ENV !== "production" && console.error(
968
1146
  "[panels] No panel component registered for activePanelId:",
969
- d
1147
+ u
970
1148
  ), null;
971
- if (d === "settings") {
972
- const o = n.isDirty, u = n.activeTrigger, p = u?.kind === "card-overflow" ? u.cardId : null;
973
- return /* @__PURE__ */ s(A, { isOpen: l, children: /* @__PURE__ */ s(
1149
+ if (u === "settings") {
1150
+ const o = n.isDirty, c = n.activeTrigger, p = c?.kind === "card-overflow" ? c.cardId : null;
1151
+ return /* @__PURE__ */ a(x, { isOpen: l, children: /* @__PURE__ */ a(
974
1152
  T,
975
1153
  {
976
1154
  isOpen: l,
977
1155
  title: "Configure metric",
978
1156
  variant: "merged-stage",
979
- onClose: () => c({ type: "CLOSE_PANEL", reason: "header-x" }),
980
- footer: /* @__PURE__ */ h(X, { children: [
981
- /* @__PURE__ */ s(
1157
+ onClose: () => d({ type: "CLOSE_PANEL", reason: "header-x" }),
1158
+ footer: /* @__PURE__ */ h(J, { children: [
1159
+ /* @__PURE__ */ a(
982
1160
  "button",
983
1161
  {
984
1162
  id: "btn-reset",
@@ -986,254 +1164,254 @@ function Nt({ panelComponents: e, children: t }) {
986
1164
  className: "gloss-panel-chrome__footer-btn",
987
1165
  disabled: !o,
988
1166
  onClick: () => {
989
- p != null && c({ type: "CLEAR_BUFFER", cardId: p });
1167
+ p != null && d({ type: "CLEAR_BUFFER", cardId: p });
990
1168
  },
991
1169
  children: "Reset"
992
1170
  }
993
1171
  ),
994
- /* @__PURE__ */ s("span", { style: { flex: 1 } }),
995
- /* @__PURE__ */ s(
1172
+ /* @__PURE__ */ a("span", { style: { flex: 1 } }),
1173
+ /* @__PURE__ */ a(
996
1174
  "button",
997
1175
  {
998
1176
  id: "settings-cancel",
999
1177
  type: "button",
1000
1178
  className: "gloss-panel-chrome__footer-btn",
1001
- onClick: () => c({ type: "CLOSE_PANEL", reason: "cancel-button" }),
1179
+ onClick: () => d({ type: "CLOSE_PANEL", reason: "cancel-button" }),
1002
1180
  children: "Cancel"
1003
1181
  }
1004
1182
  ),
1005
- /* @__PURE__ */ s(
1183
+ /* @__PURE__ */ a(
1006
1184
  "button",
1007
1185
  {
1008
1186
  id: "settings-apply",
1009
1187
  type: "button",
1010
1188
  className: "gloss-panel-chrome__footer-btn gloss-panel-chrome__footer-btn--primary",
1011
1189
  disabled: !o,
1012
- onClick: () => c({ type: "CLOSE_PANEL", reason: "apply-button" }),
1190
+ onClick: () => d({ type: "CLOSE_PANEL", reason: "apply-button" }),
1013
1191
  children: "Apply"
1014
1192
  }
1015
1193
  )
1016
1194
  ] }),
1017
- children: a != null ? /* @__PURE__ */ s(a, { isOpen: l }) : t
1195
+ children: s != null ? /* @__PURE__ */ a(s, { isOpen: l }) : t
1018
1196
  }
1019
1197
  ) });
1020
1198
  }
1021
- if (d === "catalog-add" || d === "catalog-replace") {
1022
- if (a == null) return null;
1023
- const o = d === "catalog-replace" ? "replace" : "add";
1024
- return /* @__PURE__ */ s(A, { isOpen: l, children: /* @__PURE__ */ s(
1199
+ if (u === "catalog-add" || u === "catalog-replace") {
1200
+ if (s == null) return null;
1201
+ const o = u === "catalog-replace" ? "replace" : "add";
1202
+ return /* @__PURE__ */ a(x, { isOpen: l, children: /* @__PURE__ */ a(
1025
1203
  T,
1026
1204
  {
1027
1205
  isOpen: l,
1028
- onClose: () => c({ type: "CLOSE_PANEL", reason: "header-x" }),
1206
+ onClose: () => d({ type: "CLOSE_PANEL", reason: "header-x" }),
1029
1207
  footer: null,
1030
1208
  title: o === "replace" ? "Replace metric" : "Add a metric",
1031
- children: /* @__PURE__ */ s(
1032
- a,
1209
+ children: /* @__PURE__ */ a(
1210
+ s,
1033
1211
  {
1034
1212
  isOpen: l,
1035
- footerSlot: /* @__PURE__ */ s(Ve, { mode: o, dispatch: c })
1213
+ footerSlot: /* @__PURE__ */ a(ze, { mode: o, dispatch: d })
1036
1214
  }
1037
1215
  )
1038
1216
  }
1039
1217
  ) });
1040
1218
  }
1041
- return d === "page-management" ? a == null ? null : /* @__PURE__ */ s(A, { isOpen: l, children: /* @__PURE__ */ s(
1219
+ return u === "page-management" ? s == null ? null : /* @__PURE__ */ a(x, { isOpen: l, children: /* @__PURE__ */ a(
1042
1220
  T,
1043
1221
  {
1044
1222
  isOpen: l,
1045
- onClose: () => c({ type: "CLOSE_PANEL", reason: "header-x" }),
1223
+ onClose: () => d({ type: "CLOSE_PANEL", reason: "header-x" }),
1046
1224
  footer: null,
1047
1225
  title: "Manage pages",
1048
- children: /* @__PURE__ */ s(a, { isOpen: l, footerSlot: /* @__PURE__ */ s(Be, {}) })
1226
+ children: /* @__PURE__ */ a(s, { isOpen: l, footerSlot: /* @__PURE__ */ a(Ve, {}) })
1049
1227
  }
1050
- ) }) : /* @__PURE__ */ s(A, { isOpen: l, children: /* @__PURE__ */ s(
1228
+ ) }) : /* @__PURE__ */ a(x, { isOpen: l, children: /* @__PURE__ */ a(
1051
1229
  T,
1052
1230
  {
1053
1231
  isOpen: !0,
1054
- onClose: () => c({ type: "CLOSE_PANEL", reason: "header-x" }),
1232
+ onClose: () => d({ type: "CLOSE_PANEL", reason: "header-x" }),
1055
1233
  footer: null,
1056
- children: a != null ? /* @__PURE__ */ s(a, { isOpen: l }) : t
1234
+ children: s != null ? /* @__PURE__ */ a(s, { isOpen: l }) : t
1057
1235
  }
1058
1236
  ) });
1059
1237
  }
1060
- function Y(e) {
1238
+ function j(e) {
1061
1239
  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;
1062
1240
  }
1063
- const Qe = 685, j = 627, Xe = "cubic-bezier(0.22, 1, 0.36, 1)", Je = 200;
1064
- function le(e, t) {
1241
+ const je = 685, Q = 627, Qe = "cubic-bezier(0.22, 1, 0.36, 1)", Xe = 200;
1242
+ function oe(e, t) {
1065
1243
  if (typeof window > "u") return t;
1066
1244
  const r = window.getComputedStyle(document.documentElement).getPropertyValue(e).trim();
1067
1245
  if (!r) return t;
1068
1246
  const n = parseFloat(r);
1069
1247
  return Number.isNaN(n) ? t : r.endsWith("s") && !r.endsWith("ms") ? n * 1e3 : n;
1070
1248
  }
1071
- function Ze(e, t) {
1249
+ function Je(e, t) {
1072
1250
  return typeof window > "u" ? t : window.getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
1073
1251
  }
1074
- function L(e) {
1252
+ function O(e) {
1075
1253
  e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
1076
1254
  }
1077
- function et(e) {
1078
- const { mountEl: t, chromeEl: r, reducedMotion: n, onAssert: c } = e;
1255
+ function Ze(e) {
1256
+ const { mountEl: t, chromeEl: r, reducedMotion: n, onAssert: d } = e;
1079
1257
  if (t == null || r == null) {
1080
- L(e), c?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
1258
+ O(e), d?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
1081
1259
  return;
1082
1260
  }
1083
1261
  if (n) {
1084
- e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), c?.({ branch: "slide-reduced-motion", timestamp: Date.now() });
1262
+ e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), d?.({ branch: "slide-reduced-motion", timestamp: Date.now() });
1085
1263
  return;
1086
1264
  }
1087
1265
  if (typeof r.animate != "function") {
1088
- L(e), c?.({ branch: "slide-no-waapi", timestamp: Date.now() });
1266
+ O(e), d?.({ branch: "slide-no-waapi", timestamp: Date.now() });
1089
1267
  return;
1090
1268
  }
1091
1269
  const i = r.cloneNode(!0);
1092
1270
  i.id = "panel-chrome-frozen", i.style.cssText = "position:absolute;left:8px;right:8px;top:8px;z-index:1;pointer-events:none;", t.appendChild(i), r.style.zIndex = "2", e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
1093
- const d = le("--panel-open-dur", Qe), l = Ze("--panel-easing", Xe), a = r.animate(
1271
+ const u = oe("--panel-open-dur", je), l = Je("--panel-easing", Qe), s = r.animate(
1094
1272
  [{ transform: "translateY(100%)" }, { transform: "translateY(0)" }],
1095
- { duration: d, easing: l, fill: "forwards" }
1273
+ { duration: u, easing: l, fill: "forwards" }
1096
1274
  );
1097
- a.addEventListener(
1275
+ s.addEventListener(
1098
1276
  "finish",
1099
1277
  () => {
1100
- i.remove(), r.style.zIndex = "", a.cancel(), c?.({ branch: "slide-complete", frozen: "cleaned", timestamp: Date.now() });
1278
+ i.remove(), r.style.zIndex = "", s.cancel(), d?.({ branch: "slide-complete", frozen: "cleaned", timestamp: Date.now() });
1101
1279
  },
1102
1280
  { once: !0 }
1103
1281
  );
1104
1282
  }
1105
- function tt(e) {
1283
+ function et(e) {
1106
1284
  const { mountEl: t, onAssert: r } = e;
1107
1285
  if (t == null) {
1108
- e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => L(e), j), r?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
1286
+ e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => O(e), Q), r?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
1109
1287
  return;
1110
1288
  }
1111
- const n = le("--panel-close-dur", j);
1112
- let c = !1, i = null;
1113
- const d = (a) => {
1114
- a.target !== t || a.propertyName !== "max-height" || c || (c = !0, i != null && clearTimeout(i), t.removeEventListener("transitionend", d), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-complete", timestamp: Date.now() }));
1289
+ const n = oe("--panel-close-dur", Q);
1290
+ let d = !1, i = null;
1291
+ const u = (s) => {
1292
+ s.target !== t || s.propertyName !== "max-height" || d || (d = !0, i != null && clearTimeout(i), t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-complete", timestamp: Date.now() }));
1115
1293
  }, l = () => {
1116
- c || (c = !0, t.removeEventListener("transitionend", d), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-forced", timestamp: Date.now() }));
1294
+ d || (d = !0, t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-forced", timestamp: Date.now() }));
1117
1295
  };
1118
- t.addEventListener("transitionend", d), e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), i = setTimeout(l, n + Je);
1296
+ t.addEventListener("transitionend", u), e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), i = setTimeout(l, n + Xe);
1119
1297
  }
1120
- function nt(e) {
1298
+ function tt(e) {
1121
1299
  const { state: t, onAssert: r } = e;
1122
1300
  if (t.activePanelId && t.isDirty) {
1123
1301
  e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "blocked-dirty", timestamp: Date.now() });
1124
1302
  return;
1125
1303
  }
1126
- const n = Y(t.activeTrigger), c = Y(e.trigger);
1127
- if (!!t.activePanelId && n != null && n === c) {
1128
- et(e);
1304
+ const n = j(t.activeTrigger), d = j(e.trigger);
1305
+ if (!!t.activePanelId && n != null && n === d) {
1306
+ Ze(e);
1129
1307
  return;
1130
1308
  }
1131
1309
  if (t.activePanelId) {
1132
- tt(e);
1310
+ et(e);
1133
1311
  return;
1134
1312
  }
1135
- L(e), r?.({ branch: "fresh-open", timestamp: Date.now() });
1313
+ O(e), r?.({ branch: "fresh-open", timestamp: Date.now() });
1136
1314
  }
1137
- function st() {
1315
+ function nt() {
1138
1316
  if (!(typeof window > "u"))
1139
1317
  return window.__panelsAsserter;
1140
1318
  }
1141
- function Ct() {
1142
- const e = k(), t = Q();
1319
+ function Nt() {
1320
+ const e = k(), t = X();
1143
1321
  return E(
1144
1322
  (r, n) => {
1145
1323
  if (!e)
1146
1324
  return;
1147
- const c = typeof document < "u" ? document.querySelector('[data-mount="panel"]') : null, i = typeof document < "u" ? document.querySelector('[data-chrome="panel"]') : null, d = {
1325
+ const d = typeof document < "u" ? document.querySelector('[data-mount="panel"]') : null, i = typeof document < "u" ? document.querySelector('[data-chrome="panel"]') : null, u = {
1148
1326
  panelId: r,
1149
1327
  trigger: n,
1150
1328
  state: e.state,
1151
1329
  dispatch: e.dispatch,
1152
- mountEl: c,
1330
+ mountEl: d,
1153
1331
  chromeEl: i,
1154
1332
  reducedMotion: t,
1155
1333
  onAssert: (l) => {
1156
- st()?.recordTransition?.(l);
1334
+ nt()?.recordTransition?.(l);
1157
1335
  }
1158
1336
  };
1159
- nt(d);
1337
+ tt(u);
1160
1338
  },
1161
1339
  [e, t]
1162
1340
  );
1163
1341
  }
1164
- let O = !1, D = null;
1165
- function z() {
1342
+ let L = !1, D = null;
1343
+ function H() {
1166
1344
  const e = [];
1167
1345
  let t = "cleaned";
1168
1346
  document.querySelectorAll("#panel-chrome-frozen").length > 0 && (e.push("#panel-chrome-frozen"), t = "lingering");
1169
1347
  const n = document.querySelectorAll(".gloss-panel-mount");
1170
1348
  n.length > 1 && e.push(`mount-count=${n.length}`);
1171
- const c = n[0] ?? null, i = c ? c.querySelectorAll(".gloss-panel-chrome") : [];
1349
+ const d = n[0] ?? null, i = d ? d.querySelectorAll(".gloss-panel-chrome") : [];
1172
1350
  i.length > 1 && e.push(`chrome-count=${i.length}`);
1173
- const d = i[0] ?? null;
1174
- if (d) {
1175
- const u = d.style.zIndex;
1176
- u !== "" && u !== "2" && e.push(`chrome-zindex=${u}`);
1351
+ const u = i[0] ?? null;
1352
+ if (u) {
1353
+ const c = u.style.zIndex;
1354
+ c !== "" && c !== "2" && e.push(`chrome-zindex=${c}`);
1177
1355
  }
1178
- const l = c ? "present" : "absent", a = d ? "present" : "absent";
1356
+ const l = d ? "present" : "absent", s = u ? "present" : "absent";
1179
1357
  return {
1180
1358
  valid: e.length === 0,
1181
1359
  mount: l,
1182
- chrome: a,
1360
+ chrome: s,
1183
1361
  frozen: t,
1184
1362
  orphans: e,
1185
1363
  timestamp: Date.now()
1186
1364
  };
1187
1365
  }
1188
- const M = "8px 8px 0px", R = "64px", $ = "inset(0px 0px 60px 0px)", F = "inset(0px -40px -40px -40px)";
1189
- function f(e, t, r, n, c) {
1190
- return { id: e, constraint: t, expected: r, actual: n, pass: c };
1366
+ const M = "8px 8px 0px", $ = "64px", R = "inset(0px 0px 60px 0px)", F = "inset(0px -40px -40px -40px)";
1367
+ function f(e, t, r, n, d) {
1368
+ return { id: e, constraint: t, expected: r, actual: n, pass: d };
1191
1369
  }
1192
1370
  function P(e) {
1193
1371
  const t = parseInt(e, 10);
1194
1372
  return Number.isFinite(t) ? t : NaN;
1195
1373
  }
1196
- function B() {
1197
- const e = [], t = document.querySelector(".gloss-panel-mount"), r = t?.querySelector(".gloss-panel-chrome") ?? null, n = document.querySelector(".gloss-panel-coordinator") ?? document.querySelector("[data-panel-coordinator]"), c = document.querySelector(".bell-cutout"), i = document.querySelector(".bell-popover"), d = document.querySelector(".gloss-bottom-toolbar");
1374
+ function K() {
1375
+ const e = [], t = document.querySelector(".gloss-panel-mount"), r = t?.querySelector(".gloss-panel-chrome") ?? null, n = document.querySelector(".gloss-panel-coordinator") ?? document.querySelector("[data-panel-coordinator]"), d = document.querySelector(".bell-cutout"), i = document.querySelector(".bell-popover"), u = document.querySelector(".gloss-bottom-toolbar");
1198
1376
  if (!t)
1199
1377
  e.push(f("C1", "mount --reveal-y matches clip-path inset-bottom Npx", "mount present", "absent", !1));
1200
1378
  else {
1201
- const l = getComputedStyle(t), a = l.getPropertyValue("--reveal-y").trim() || t.style.getPropertyValue("--reveal-y").trim(), o = l.clipPath || t.style.clipPath || "", u = o.match(/inset\(\s*0(?:px)?\s+0(?:px)?\s+(\d+)px\s+0(?:px)?\s*\)/), p = u ? parseInt(u[1], 10) : NaN, m = P(a), b = Number.isFinite(p) && Number.isFinite(m) && p === m;
1379
+ const l = getComputedStyle(t), s = l.getPropertyValue("--reveal-y").trim() || t.style.getPropertyValue("--reveal-y").trim(), o = l.clipPath || t.style.clipPath || "", c = o.match(/inset\(\s*0(?:px)?\s+0(?:px)?\s+(\d+)px\s+0(?:px)?\s*\)/), p = c ? parseInt(c[1], 10) : NaN, m = P(s), v = Number.isFinite(p) && Number.isFinite(m) && p === m;
1202
1380
  e.push(
1203
1381
  f(
1204
1382
  "C1",
1205
1383
  "mount --reveal-y matches clip-path inset-bottom Npx",
1206
1384
  `inset(0 0 ${m}px 0) === --reveal-y(${m}px)`,
1207
- `--reveal-y=${a || "n/a"} clip-path=${o || "n/a"}`,
1208
- b
1385
+ `--reveal-y=${s || "n/a"} clip-path=${o || "n/a"}`,
1386
+ v
1209
1387
  )
1210
1388
  );
1211
1389
  }
1212
1390
  if (!t)
1213
1391
  e.push(f("C2", "mount padding constant", M, "absent", !1));
1214
1392
  else {
1215
- const l = t.style.padding, a = getComputedStyle(t), o = l || a.padding || "", u = o === M || o === "8px 8px 0px 8px";
1216
- e.push(f("C2", "mount padding constant", M, o || "n/a", u));
1393
+ const l = t.style.padding, s = getComputedStyle(t), o = l || s.padding || "", c = o === M || o === "8px 8px 0px 8px";
1394
+ e.push(f("C2", "mount padding constant", M, o || "n/a", c));
1217
1395
  }
1218
1396
  if (!t)
1219
- e.push(f("C3", "mount.bottom resolves to var(--tb-h)=64px", R, "absent", !1));
1397
+ e.push(f("C3", "mount.bottom resolves to var(--tb-h)=64px", $, "absent", !1));
1220
1398
  else {
1221
- const a = getComputedStyle(t).bottom || t.style.bottom || "", o = a === R;
1222
- e.push(f("C3", "mount.bottom resolves to var(--tb-h)=64px", R, a || "n/a", o));
1399
+ const s = getComputedStyle(t).bottom || t.style.bottom || "", o = s === $;
1400
+ e.push(f("C3", "mount.bottom resolves to var(--tb-h)=64px", $, s || "n/a", o));
1223
1401
  }
1224
1402
  if (!r)
1225
1403
  e.push(f("C4", "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px", "formula match", "absent", !1));
1226
1404
  else {
1227
- const l = getComputedStyle(r), a = P(
1405
+ const l = getComputedStyle(r), s = P(
1228
1406
  l.getPropertyValue("--row-h").trim() || r.style.getPropertyValue("--row-h").trim() || "0"
1229
1407
  ), o = P(
1230
1408
  l.getPropertyValue("--row-gap").trim() || r.style.getPropertyValue("--row-gap").trim() || "0"
1231
- ), u = a * 3 + o * 3 - 8, p = P(l.height || r.style.height || ""), m = Number.isFinite(a) && Number.isFinite(o) && Number.isFinite(p) && Number.isFinite(u) && p === u;
1409
+ ), c = s * 3 + o * 3 - 8, p = P(l.height || r.style.height || ""), m = Number.isFinite(s) && Number.isFinite(o) && Number.isFinite(p) && Number.isFinite(c) && p === c;
1232
1410
  e.push(
1233
1411
  f(
1234
1412
  "C4",
1235
1413
  "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px",
1236
- `${u}px (rh=${a} rg=${o})`,
1414
+ `${c}px (rh=${s} rg=${o})`,
1237
1415
  `${p}px`,
1238
1416
  m
1239
1417
  )
@@ -1250,99 +1428,99 @@ function B() {
1250
1428
  )
1251
1429
  );
1252
1430
  else {
1253
- const l = getComputedStyle(n), a = getComputedStyle(r), o = l.perspective || n.style.perspective || "", u = (l.perspectiveOrigin || n.style.perspectiveOrigin || "").trim(), p = a.perspectiveStyle || r.style.perspectiveStyle || "", v = o !== "" && o !== "none" && (u === "center bottom" || u === "50% 100%") && p === "flat";
1431
+ const l = getComputedStyle(n), s = getComputedStyle(r), o = l.perspective || n.style.perspective || "", c = (l.perspectiveOrigin || n.style.perspectiveOrigin || "").trim(), p = s.perspectiveStyle || r.style.perspectiveStyle || "", b = o !== "" && o !== "none" && (c === "center bottom" || c === "50% 100%") && p === "flat";
1254
1432
  e.push(
1255
1433
  f(
1256
1434
  "C5",
1257
1435
  'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
1258
1436
  "perspective:not-none, origin:center bottom, chrome-style:flat",
1259
- `perspective=${o} origin=${u} chrome-style=${p}`,
1260
- v
1437
+ `perspective=${o} origin=${c} chrome-style=${p}`,
1438
+ b
1261
1439
  )
1262
1440
  );
1263
1441
  }
1264
1442
  {
1265
- let l = !1, a = "absent";
1443
+ let l = !1, s = "absent";
1266
1444
  try {
1267
1445
  for (const o of Array.from(document.styleSheets)) {
1268
- let u = [];
1446
+ let c = [];
1269
1447
  try {
1270
- u = Array.from(o.cssRules ?? []);
1448
+ c = Array.from(o.cssRules ?? []);
1271
1449
  } catch {
1272
1450
  continue;
1273
1451
  }
1274
- for (const p of u)
1452
+ for (const p of c)
1275
1453
  if (p.name === "stage-spin") {
1276
- const b = Array.from(p.cssRules), y = b.find((S) => S.keyText === "0%" || S.keyText === "from"), v = b.find((S) => S.keyText === "100%" || S.keyText === "to"), N = y?.style.transform ?? "", C = v?.style.transform ?? "", g = /rotateY\(\s*0(?:deg)?\s*\)/;
1277
- l = g.test(N) && g.test(C), a = `0%=${N || "n/a"} 100%=${C || "n/a"}`;
1454
+ const v = Array.from(p.cssRules), y = v.find((S) => S.keyText === "0%" || S.keyText === "from"), b = v.find((S) => S.keyText === "100%" || S.keyText === "to"), _ = y?.style.transform ?? "", N = b?.style.transform ?? "", g = /rotateY\(\s*0(?:deg)?\s*\)/;
1455
+ l = g.test(_) && g.test(N), s = `0%=${_ || "n/a"} 100%=${N || "n/a"}`;
1278
1456
  break;
1279
1457
  }
1280
- if (a !== "absent") break;
1458
+ if (s !== "absent") break;
1281
1459
  }
1282
1460
  } catch {
1283
- a = "inspection-error";
1461
+ s = "inspection-error";
1284
1462
  }
1285
1463
  e.push(
1286
1464
  f(
1287
1465
  "C6",
1288
1466
  "@keyframes stage-spin 0% AND 100% anchor at rotateY(0)",
1289
1467
  "both frames rotateY(0)",
1290
- a,
1468
+ s,
1291
1469
  l
1292
1470
  )
1293
1471
  );
1294
1472
  }
1295
1473
  {
1296
- const l = document.documentElement, a = getComputedStyle(l), o = a.getPropertyValue("--panel-open-dur").trim() || l.style.getPropertyValue("--panel-open-dur").trim(), u = a.getPropertyValue("--panel-close-dur").trim() || l.style.getPropertyValue("--panel-close-dur").trim(), p = P(o) || parseFloat(o) * (o.endsWith("s") && !o.endsWith("ms") ? 1e3 : 1), m = P(u) || parseFloat(u) * (u.endsWith("s") && !u.endsWith("ms") ? 1e3 : 1), b = Number.isFinite(p) && Number.isFinite(m) && p > m;
1474
+ const l = document.documentElement, s = getComputedStyle(l), o = s.getPropertyValue("--panel-open-dur").trim() || l.style.getPropertyValue("--panel-open-dur").trim(), c = s.getPropertyValue("--panel-close-dur").trim() || l.style.getPropertyValue("--panel-close-dur").trim(), p = P(o) || parseFloat(o) * (o.endsWith("s") && !o.endsWith("ms") ? 1e3 : 1), m = P(c) || parseFloat(c) * (c.endsWith("s") && !c.endsWith("ms") ? 1e3 : 1), v = Number.isFinite(p) && Number.isFinite(m) && p > m;
1297
1475
  e.push(
1298
- f("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${o || "n/a"} close=${u || "n/a"}`, b)
1476
+ f("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${o || "n/a"} close=${c || "n/a"}`, v)
1299
1477
  );
1300
1478
  }
1301
- if (!c)
1479
+ if (!d)
1302
1480
  e.push(f("C8", "BellCutout zero computed animation/transition", "no inline timing", "absent", !1));
1303
1481
  else {
1304
- const l = getComputedStyle(c), a = l.animationName || "", o = l.transitionProperty || "", u = (a === "" || a === "none") && (o === "" || o === "none" || o === "all");
1482
+ const l = getComputedStyle(d), s = l.animationName || "", o = l.transitionProperty || "", c = (s === "" || s === "none") && (o === "" || o === "none" || o === "all");
1305
1483
  e.push(
1306
1484
  f(
1307
1485
  "C8",
1308
1486
  "BellCutout zero computed animation/transition",
1309
1487
  "animation:none AND transition:none",
1310
- `animation=${a || "n/a"} transition=${o || "n/a"}`,
1311
- u
1488
+ `animation=${s || "n/a"} transition=${o || "n/a"}`,
1489
+ c
1312
1490
  )
1313
1491
  );
1314
1492
  }
1315
1493
  if (!t)
1316
- e.push(f("C9", "mount closed-state clipPath", $, "absent", !1));
1494
+ e.push(f("C9", "mount closed-state clipPath", R, "absent", !1));
1317
1495
  else {
1318
- const l = t.style.clipPath, a = getComputedStyle(t), o = l || a.clipPath || "", u = o === $;
1319
- e.push(f("C9", "mount closed-state clipPath", $, o || "n/a", u));
1496
+ const l = t.style.clipPath, s = getComputedStyle(t), o = l || s.clipPath || "", c = o === R;
1497
+ e.push(f("C9", "mount closed-state clipPath", R, o || "n/a", c));
1320
1498
  }
1321
1499
  if (!i)
1322
1500
  e.push(f("C10", "bell-popover parentElement === document.body (open)", "body", "absent", !1));
1323
1501
  else {
1324
- const l = i.parentElement, a = l === document.body;
1502
+ const l = i.parentElement, s = l === document.body;
1325
1503
  e.push(
1326
1504
  f(
1327
1505
  "C10",
1328
1506
  "bell-popover parentElement === document.body (open)",
1329
1507
  "body",
1330
1508
  l === document.body ? "body" : l?.tagName ?? "n/a",
1331
- a
1509
+ s
1332
1510
  )
1333
1511
  );
1334
1512
  }
1335
1513
  if (!n)
1336
1514
  e.push(f("C11", "coordinator overflow === visible", "visible", "absent", !1));
1337
1515
  else {
1338
- const a = getComputedStyle(n).overflow || n.style.overflow || "", o = a === "visible";
1339
- e.push(f("C11", "coordinator overflow === visible", "visible", a || "n/a", o));
1516
+ const s = getComputedStyle(n).overflow || n.style.overflow || "", o = s === "visible";
1517
+ e.push(f("C11", "coordinator overflow === visible", "visible", s || "n/a", o));
1340
1518
  }
1341
- if (!d)
1519
+ if (!u)
1342
1520
  e.push(f("C12", "toolbar clipPath = inset(0 -40 -40 -40)", F, "absent", !1));
1343
1521
  else {
1344
- const l = d.style.clipPath, a = getComputedStyle(d), o = l || a.clipPath || "", u = o === F;
1345
- e.push(f("C12", "toolbar clipPath = inset(0 -40 -40 -40)", F, o || "n/a", u));
1522
+ const l = u.style.clipPath, s = getComputedStyle(u), o = l || s.clipPath || "", c = o === F;
1523
+ e.push(f("C12", "toolbar clipPath = inset(0 -40 -40 -40)", F, o || "n/a", c));
1346
1524
  }
1347
1525
  return e.push(
1348
1526
  f(
@@ -1362,11 +1540,11 @@ function B() {
1362
1540
  )
1363
1541
  ), e;
1364
1542
  }
1365
- function at(e) {
1366
- return B().find((t) => t.id === e);
1543
+ function st(e) {
1544
+ return K().find((t) => t.id === e);
1367
1545
  }
1368
- function rt() {
1369
- const e = z();
1546
+ function at() {
1547
+ const e = H();
1370
1548
  return { q12: [
1371
1549
  {
1372
1550
  id: "Q12-12",
@@ -1375,76 +1553,76 @@ function rt() {
1375
1553
  actual: `valid=${e.valid} mount=${e.mount} chrome=${e.chrome} frozen=${e.frozen} orphans=[${e.orphans.join(",")}]`,
1376
1554
  pass: e.valid
1377
1555
  }
1378
- ], cc: B() };
1556
+ ], cc: K() };
1379
1557
  }
1380
- function lt() {
1558
+ function rt() {
1381
1559
  return {
1382
- enable: ot,
1383
- disable: it,
1384
- isEnabled: () => O,
1560
+ enable: lt,
1561
+ disable: ot,
1562
+ isEnabled: () => L,
1385
1563
  getLastReport: () => D,
1386
1564
  recordTransition: (e) => {
1387
- O && (D = { ...e, ...z() });
1565
+ L && (D = { ...e, ...H() });
1388
1566
  },
1389
1567
  assertOnce: () => {
1390
- const e = z();
1568
+ const e = H();
1391
1569
  return D = e, e;
1392
1570
  },
1393
- assertCcOnly: B,
1394
- getCcRowById: at,
1395
- assertPanelTruths: rt
1571
+ assertCcOnly: K,
1572
+ getCcRowById: st,
1573
+ assertPanelTruths: at
1396
1574
  };
1397
1575
  }
1398
- function ot() {
1399
- if (O = !0, typeof window > "u") return;
1400
- window.__panelsAsserter || (window.__panelsAsserter = lt(), console.info(
1576
+ function lt() {
1577
+ if (L = !0, typeof window > "u") return;
1578
+ window.__panelsAsserter || (window.__panelsAsserter = rt(), console.info(
1401
1579
  "[panels] asserter enabled (P3b Q12-12 + P6 W5 cc:C1..C14). Inspect via window.__panelsAsserter."
1402
1580
  ));
1403
1581
  }
1404
- function it() {
1405
- O = !1;
1582
+ function ot() {
1583
+ L = !1;
1406
1584
  }
1407
1585
  export {
1408
1586
  Et as COMMITS,
1409
- bt as CatalogAddShell,
1410
- Ve as CatalogFooter,
1411
- vt as CatalogReplaceShell,
1587
+ vt as CatalogAddShell,
1588
+ ze as CatalogFooter,
1589
+ bt as CatalogReplaceShell,
1412
1590
  V as CatalogStateContext,
1413
- Te as CloneCard,
1414
- Ae as CloneStage,
1415
- te as MOCK_DEFAULT_LENS,
1416
- ee as MOCK_LENSES,
1417
- U as MOCK_LENS_META,
1418
- We as MOCK_PAGES,
1419
- ne as MOCK_TILES_BY_LENS,
1591
+ Oe as CloneCard,
1592
+ Te as CloneStage,
1593
+ ne as MOCK_DEFAULT_LENS,
1594
+ te as MOCK_LENSES,
1595
+ z as MOCK_LENS_META,
1596
+ Be as MOCK_PAGES,
1597
+ se as MOCK_TILES_BY_LENS,
1420
1598
  St as PANEL_IDS,
1421
- Be as PageMgmtFooter,
1599
+ Ve as PageMgmtFooter,
1422
1600
  yt as PageMgmtShell,
1423
- ae as PageMgmtStateContext,
1601
+ re as PageMgmtStateContext,
1424
1602
  T as PanelChrome,
1425
- xt as PanelHost,
1426
- _t as PanelHostShell,
1427
- A as PanelMount,
1428
- At as PanelProvider,
1429
- Nt as PanelSlot,
1603
+ At as PanelHost,
1604
+ Ct as PanelHostShell,
1605
+ x as PanelMount,
1606
+ xt as PanelProvider,
1607
+ _t as PanelSlot,
1430
1608
  gt as SettingsShell,
1431
- B as assertCcOnly,
1432
- z as assertPanelDomShape,
1433
- rt as assertPanelTruths,
1609
+ K as assertCcOnly,
1610
+ H as assertPanelDomShape,
1611
+ at as assertPanelTruths,
1434
1612
  Tt as deriveSurfaceState,
1435
- it as disablePanelAsserter,
1436
- ot as enablePanelAsserter,
1437
- at as getCcRowById,
1438
- Lt as initialState,
1439
- Y as positionKey,
1440
- Ot as reducer,
1441
- nt as transitionToPanel,
1442
- Ue as useCatalogState,
1613
+ ot as disablePanelAsserter,
1614
+ lt as enablePanelAsserter,
1615
+ st as getCcRowById,
1616
+ Ot as initialState,
1617
+ j as positionKey,
1618
+ Lt as reducer,
1619
+ tt as transitionToPanel,
1620
+ He as useCatalogState,
1443
1621
  ft as useEditingCardId,
1444
- re as usePageMgmtState,
1445
- fe as usePanelContext,
1622
+ le as usePageMgmtState,
1623
+ ge as usePanelContext,
1446
1624
  k as usePanelContextOptional,
1447
1625
  kt as usePanelCoordinator,
1448
- Q as useReducedMotionPanel,
1449
- Ct as useTransitionToPanel
1626
+ X as useReducedMotionPanel,
1627
+ Nt as useTransitionToPanel
1450
1628
  };