@mt-gloss/ui 0.1.122 → 0.1.123
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.
package/composites-panels.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { u as O, h as
|
|
2
|
-
import { C as
|
|
3
|
-
import { jsx as n, jsxs as f, Fragment as
|
|
4
|
-
import
|
|
5
|
-
import { useSensors as ke, useSensor as
|
|
6
|
-
import { sortableKeyboardCoordinates as Ie, SortableContext as
|
|
7
|
-
import { CSS as
|
|
8
|
-
import { M as
|
|
1
|
+
import { u as O, h as he, j as Y, g as we, S as Pe, b as Te, k as Ae } from "./COMMITS-C1VHNgld.js";
|
|
2
|
+
import { C as zt, N as Ht, o as Ut, d as Bt, p as Yt, l as Vt, c as Kt, n as qt, P as Qt, m as Wt, f as Gt, i as jt, r as Zt, e as Xt } from "./COMMITS-C1VHNgld.js";
|
|
3
|
+
import { jsx as n, jsxs as f, Fragment as V } from "react/jsx-runtime";
|
|
4
|
+
import H, { useState as A, useRef as K, createContext as fe, useContext as ge, useMemo as le, useEffect as F, useCallback as D, useLayoutEffect as xe } from "react";
|
|
5
|
+
import { useSensors as ke, useSensor as ie, PointerSensor as De, KeyboardSensor as Le, DndContext as Oe, closestCenter as Me } from "@dnd-kit/core";
|
|
6
|
+
import { sortableKeyboardCoordinates as Ie, SortableContext as Re, horizontalListSortingStrategy as $e, arrayMove as Fe, useSortable as ze } from "@dnd-kit/sortable";
|
|
7
|
+
import { CSS as He } from "@dnd-kit/utilities";
|
|
8
|
+
import { M as ce } from "./MetricCard-Cyoxhb_S.js";
|
|
9
9
|
function wt() {
|
|
10
10
|
const e = O();
|
|
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
|
|
15
|
+
function Ue({ span: e, rotating: t = !0, children: r }) {
|
|
16
16
|
const l = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" "), a = r != null ? "full" : "fallback";
|
|
17
17
|
return /* @__PURE__ */ n("div", { className: l, "data-clone-fidelity": a, children: r });
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function Pt({ primary: e, secondary: t }) {
|
|
20
20
|
return /* @__PURE__ */ f("div", { className: "gloss-panel-chrome-v2__footer-msg", children: [
|
|
21
21
|
/* @__PURE__ */ n("span", { className: "gloss-panel-chrome-v2__footer-msg-primary", children: e }),
|
|
22
22
|
t != null && /* @__PURE__ */ n("span", { className: "gloss-panel-chrome-v2__footer-msg-secondary", children: t })
|
|
23
23
|
] });
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function Be({
|
|
26
26
|
value: e,
|
|
27
27
|
onChange: t,
|
|
28
28
|
enabled: r = !1,
|
|
@@ -46,7 +46,7 @@ function Ve({
|
|
|
46
46
|
}
|
|
47
47
|
)
|
|
48
48
|
] }),
|
|
49
|
-
r ? /* @__PURE__ */ f(
|
|
49
|
+
r ? /* @__PURE__ */ f(V, { children: [
|
|
50
50
|
/* @__PURE__ */ n("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
|
|
51
51
|
/* @__PURE__ */ f("div", { className: "settings-shell__slider-row", children: [
|
|
52
52
|
/* @__PURE__ */ n(
|
|
@@ -73,7 +73,7 @@ function Ve({
|
|
|
73
73
|
] }) : /* @__PURE__ */ n("p", { className: "settings-shell__help", "aria-live": "polite", children: "Off — the card uses its default styling. Turn on to tint values below the threshold." })
|
|
74
74
|
] });
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function Ye({ value: e, onChange: t }) {
|
|
77
77
|
return /* @__PURE__ */ f("div", { className: "settings-shell__field settings-shell__field--timeframe", children: [
|
|
78
78
|
/* @__PURE__ */ n("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
|
|
79
79
|
/* @__PURE__ */ f("div", { className: "settings-shell__slider-row", children: [
|
|
@@ -100,9 +100,9 @@ function Be({ value: e, onChange: t }) {
|
|
|
100
100
|
] })
|
|
101
101
|
] });
|
|
102
102
|
}
|
|
103
|
-
function
|
|
104
|
-
const { attributes: r, listeners: l, setNodeRef: a, transform: i, transition: u, isDragging: o } =
|
|
105
|
-
transform:
|
|
103
|
+
function Ve({ id: e, onRemove: t }) {
|
|
104
|
+
const { attributes: r, listeners: l, setNodeRef: a, transform: i, transition: u, isDragging: o } = ze({ id: e }), s = {
|
|
105
|
+
transform: He.Transform.toString(i),
|
|
106
106
|
transition: u,
|
|
107
107
|
opacity: o ? 0.6 : 1
|
|
108
108
|
};
|
|
@@ -139,11 +139,11 @@ function Ke({ id: e, onRemove: t }) {
|
|
|
139
139
|
}
|
|
140
140
|
);
|
|
141
141
|
}
|
|
142
|
-
function
|
|
142
|
+
function Ke({ value: e, onChange: t }) {
|
|
143
143
|
const r = ke(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
), l =
|
|
144
|
+
ie(De, { activationConstraint: { distance: 4 } }),
|
|
145
|
+
ie(Le, { coordinateGetter: Ie })
|
|
146
|
+
), l = H.useRef(!1), [a, i] = H.useState(!1), u = (s) => {
|
|
147
147
|
const { active: c, over: d } = s;
|
|
148
148
|
if (!d || c.id === d.id) return;
|
|
149
149
|
const m = e.findIndex((b) => b === c.id), h = e.findIndex((b) => b === d.id);
|
|
@@ -152,13 +152,13 @@ function Ye({ value: e, onChange: t }) {
|
|
|
152
152
|
l.current || (l.current = !0, i(!0)), t(e.filter((c) => c !== s));
|
|
153
153
|
};
|
|
154
154
|
return /* @__PURE__ */ f("div", { className: "settings-shell__field settings-shell__field--slots", "aria-label": "Stack slots", children: [
|
|
155
|
-
/* @__PURE__ */ n(Oe, { sensors: r, collisionDetection: Me, onDragEnd: u, children: /* @__PURE__ */ n(
|
|
155
|
+
/* @__PURE__ */ n(Oe, { sensors: r, collisionDetection: Me, onDragEnd: u, children: /* @__PURE__ */ n(Re, { items: [...e], strategy: $e, children: /* @__PURE__ */ n("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((s) => /* @__PURE__ */ n(Ve, { id: s, onRemove: () => o(s) }, s)) }) }) }),
|
|
156
156
|
e.length === 0 && a && /* @__PURE__ */ n("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
|
|
157
157
|
/* @__PURE__ */ n("p", { className: "settings-shell__help settings-shell__help--small", children: "Drag to reorder · click × to remove" })
|
|
158
158
|
] });
|
|
159
159
|
}
|
|
160
|
-
const
|
|
161
|
-
function
|
|
160
|
+
const qe = ["#1d6fd8", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"];
|
|
161
|
+
function Qe({
|
|
162
162
|
value: e,
|
|
163
163
|
onSelect: t,
|
|
164
164
|
enabled: r = !1,
|
|
@@ -182,9 +182,9 @@ function Ge({
|
|
|
182
182
|
}
|
|
183
183
|
)
|
|
184
184
|
] }),
|
|
185
|
-
r ? /* @__PURE__ */ f(
|
|
185
|
+
r ? /* @__PURE__ */ f(V, { children: [
|
|
186
186
|
/* @__PURE__ */ n("span", { className: "settings-shell__label", children: "Accent color" }),
|
|
187
|
-
/* @__PURE__ */ n("div", { className: "settings-shell__swatch-row", children:
|
|
187
|
+
/* @__PURE__ */ n("div", { className: "settings-shell__swatch-row", children: qe.map((i) => {
|
|
188
188
|
const u = e === i;
|
|
189
189
|
return /* @__PURE__ */ n(
|
|
190
190
|
"button",
|
|
@@ -202,40 +202,40 @@ function Ge({
|
|
|
202
202
|
] }) : /* @__PURE__ */ n("p", { className: "settings-shell__help", "aria-live": "polite", children: "Off — the card uses its default accent. Turn on to override." })
|
|
203
203
|
] });
|
|
204
204
|
}
|
|
205
|
-
const
|
|
206
|
-
function
|
|
205
|
+
const We = ["Orders", "Quota", "Unassigned"], Ge = ["threshold", "timeframe", "color"];
|
|
206
|
+
function Tt({
|
|
207
207
|
isOpen: e,
|
|
208
208
|
cardSpan: t,
|
|
209
209
|
cardLabel: r = "Metric",
|
|
210
210
|
cardValue: l = "—",
|
|
211
211
|
previewSlot: a,
|
|
212
|
-
dimensions: i =
|
|
212
|
+
dimensions: i = Ge,
|
|
213
213
|
initialTab: u,
|
|
214
214
|
initialValues: o
|
|
215
215
|
}) {
|
|
216
|
-
const s = O(), c = s?.state.activeTrigger, d = c?.kind === "card-overflow" ? c.cardId : null, m =
|
|
217
|
-
|
|
218
|
-
i.includes(_) ||
|
|
216
|
+
const s = O(), c = s?.state.activeTrigger, d = c?.kind === "card-overflow" ? c.cardId : null, m = he(), h = c?.span, b = t ?? h ?? 1, p = i[0] ?? "threshold", [_, P] = H.useState(u ?? p);
|
|
217
|
+
H.useEffect(() => {
|
|
218
|
+
i.includes(_) || P(p);
|
|
219
219
|
}, [i, _, p]);
|
|
220
|
-
const
|
|
221
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "threshold", value: Number(
|
|
222
|
-
},
|
|
223
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "timeframe", value: Number(
|
|
224
|
-
},
|
|
225
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accent", value:
|
|
226
|
-
},
|
|
227
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "slots", value:
|
|
228
|
-
},
|
|
229
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "thresholdEnabled", value:
|
|
230
|
-
}, g = (
|
|
231
|
-
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accentEnabled", value:
|
|
220
|
+
const y = d != null ? s?.state?.bufferByCard?.[d]?.changes ?? {} : {}, N = typeof y.threshold == "number" ? y.threshold : typeof o?.threshold == "number" ? o.threshold : 80, I = typeof y.timeframe == "number" ? y.timeframe : typeof o?.timeframe == "number" ? o.timeframe : 30, R = typeof y.accent == "string" ? y.accent : typeof o?.accent == "string" ? o.accent : null, $ = Array.isArray(y.slots) ? y.slots : Array.isArray(o?.slots) ? o.slots : We, S = typeof y.thresholdEnabled == "boolean" ? y.thresholdEnabled : typeof o?.thresholdEnabled == "boolean" ? o.thresholdEnabled : !1, L = typeof y.accentEnabled == "boolean" ? y.accentEnabled : typeof o?.accentEnabled == "boolean" ? o.accentEnabled : !1, q = (T) => {
|
|
221
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "threshold", value: Number(T.target.value) });
|
|
222
|
+
}, Q = (T) => {
|
|
223
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "timeframe", value: Number(T.target.value) });
|
|
224
|
+
}, oe = (T) => {
|
|
225
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accent", value: T });
|
|
226
|
+
}, W = (T) => {
|
|
227
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "slots", value: T });
|
|
228
|
+
}, G = (T) => {
|
|
229
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "thresholdEnabled", value: T });
|
|
230
|
+
}, g = (T) => {
|
|
231
|
+
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accentEnabled", value: T });
|
|
232
232
|
}, C = s?.state.isDirty ?? !1, w = d;
|
|
233
233
|
return /* @__PURE__ */ n(
|
|
234
|
-
|
|
234
|
+
Y,
|
|
235
235
|
{
|
|
236
236
|
variant: "with-stage",
|
|
237
237
|
onClose: () => s?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }),
|
|
238
|
-
stage: /* @__PURE__ */ n(
|
|
238
|
+
stage: /* @__PURE__ */ n(Ue, { span: b, rotating: !m, children: a ?? /* @__PURE__ */ f(V, { children: [
|
|
239
239
|
/* @__PURE__ */ n("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: r }),
|
|
240
240
|
/* @__PURE__ */ n("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: l })
|
|
241
241
|
] }) }),
|
|
@@ -244,7 +244,7 @@ function Pt({
|
|
|
244
244
|
{
|
|
245
245
|
dimensions: i,
|
|
246
246
|
activeTab: _,
|
|
247
|
-
onSelect:
|
|
247
|
+
onSelect: P,
|
|
248
248
|
reduced: m
|
|
249
249
|
}
|
|
250
250
|
),
|
|
@@ -284,21 +284,21 @@ function Pt({
|
|
|
284
284
|
className: "settings-shell__tabpanel",
|
|
285
285
|
children: [
|
|
286
286
|
_ === "threshold" && /* @__PURE__ */ n(
|
|
287
|
-
|
|
287
|
+
Be,
|
|
288
288
|
{
|
|
289
289
|
value: N,
|
|
290
|
-
onChange:
|
|
291
|
-
enabled:
|
|
292
|
-
onToggleEnabled:
|
|
290
|
+
onChange: q,
|
|
291
|
+
enabled: S,
|
|
292
|
+
onToggleEnabled: G
|
|
293
293
|
}
|
|
294
294
|
),
|
|
295
|
-
_ === "timeframe" && /* @__PURE__ */ n(
|
|
296
|
-
_ === "slots" && /* @__PURE__ */ n(
|
|
295
|
+
_ === "timeframe" && /* @__PURE__ */ n(Ye, { value: I, onChange: Q }),
|
|
296
|
+
_ === "slots" && /* @__PURE__ */ n(Ke, { value: $, onChange: W }),
|
|
297
297
|
_ === "color" && /* @__PURE__ */ n(
|
|
298
|
-
|
|
298
|
+
Qe,
|
|
299
299
|
{
|
|
300
|
-
value:
|
|
301
|
-
onSelect:
|
|
300
|
+
value: R,
|
|
301
|
+
onSelect: oe,
|
|
302
302
|
enabled: L,
|
|
303
303
|
onToggleEnabled: g
|
|
304
304
|
}
|
|
@@ -309,190 +309,41 @@ function Pt({
|
|
|
309
309
|
}
|
|
310
310
|
);
|
|
311
311
|
}
|
|
312
|
-
const
|
|
313
|
-
"
|
|
314
|
-
"
|
|
315
|
-
"
|
|
316
|
-
"
|
|
317
|
-
"
|
|
318
|
-
"
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
helper: "Find slow-moving inventory before discount cycles eat margin."
|
|
312
|
+
const be = [
|
|
313
|
+
"Revenue",
|
|
314
|
+
"Order flow",
|
|
315
|
+
"Rep performance",
|
|
316
|
+
"Brand portfolio",
|
|
317
|
+
"Account coverage",
|
|
318
|
+
"Commission"
|
|
319
|
+
], ye = "Revenue", ve = {
|
|
320
|
+
Revenue: {
|
|
321
|
+
headline: "Are we hitting our number?",
|
|
322
|
+
helper: "Top-line sales, growth, average order value, and pace-to-plan signals."
|
|
324
323
|
},
|
|
325
|
-
"
|
|
326
|
-
headline: "
|
|
327
|
-
helper: "
|
|
324
|
+
"Order flow": {
|
|
325
|
+
headline: "Are orders flowing through?",
|
|
326
|
+
helper: "Daily activity, pipeline, unassigned work, and cancel-rate health."
|
|
328
327
|
},
|
|
329
|
-
"
|
|
330
|
-
headline: "
|
|
331
|
-
helper: "
|
|
328
|
+
"Rep performance": {
|
|
329
|
+
headline: "How are my reps performing?",
|
|
330
|
+
helper: "Quota attainment, leaderboards, and activity flags across the rep team."
|
|
332
331
|
},
|
|
333
|
-
"
|
|
334
|
-
headline: "
|
|
335
|
-
helper: "
|
|
332
|
+
"Brand portfolio": {
|
|
333
|
+
headline: "Which brands matter?",
|
|
334
|
+
helper: "Manufacturer mix, top performers, and emerging line health."
|
|
336
335
|
},
|
|
337
|
-
"
|
|
338
|
-
headline: "
|
|
339
|
-
helper: "
|
|
336
|
+
"Account coverage": {
|
|
337
|
+
headline: "Where are the gaps?",
|
|
338
|
+
helper: "New, active, inactive, and at-risk customer accounts."
|
|
340
339
|
},
|
|
341
|
-
|
|
342
|
-
headline: "
|
|
343
|
-
helper: "
|
|
344
|
-
},
|
|
345
|
-
"Customer retention": {
|
|
346
|
-
headline: "Are my best customers coming back?",
|
|
347
|
-
helper: "Repeat-rate and lapsed-account signals from the buyer file."
|
|
340
|
+
Commission: {
|
|
341
|
+
headline: "What's our commission rate?",
|
|
342
|
+
helper: "Outstanding balances, aging buckets, and effective commission yield."
|
|
348
343
|
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const _e = {
|
|
352
|
-
Overbought: {
|
|
344
|
+
}, _e = {
|
|
345
|
+
Revenue: {
|
|
353
346
|
primary: [
|
|
354
|
-
{
|
|
355
|
-
id: "ob-units-at-risk",
|
|
356
|
-
label: "Units at risk",
|
|
357
|
-
value: "12,840",
|
|
358
|
-
desc: "Inventory units flagged as overbought relative to forward demand.",
|
|
359
|
-
variants: ["1×1"],
|
|
360
|
-
startHere: !0,
|
|
361
|
-
isNew: !0,
|
|
362
|
-
cardType: "standard"
|
|
363
|
-
},
|
|
364
|
-
{
|
|
365
|
-
id: "ob-weeks-of-supply",
|
|
366
|
-
label: "Weeks of supply",
|
|
367
|
-
value: "18.4",
|
|
368
|
-
desc: "Weighted average weeks of forward cover across the assortment.",
|
|
369
|
-
variants: ["1×1"],
|
|
370
|
-
cardType: "standard"
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
id: "ob-discount-exposure",
|
|
374
|
-
label: "Discount exposure",
|
|
375
|
-
value: "$184K",
|
|
376
|
-
desc: "Estimated markdown dollars to clear excess at current sell-through.",
|
|
377
|
-
variants: ["1×3"],
|
|
378
|
-
subStats: [
|
|
379
|
-
{ label: "MTD", value: "$48K" },
|
|
380
|
-
{ label: "QTD", value: "$112K" },
|
|
381
|
-
{ label: "YTD", value: "$184K" }
|
|
382
|
-
],
|
|
383
|
-
cardType: "stacked-group",
|
|
384
|
-
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
385
|
-
}
|
|
386
|
-
],
|
|
387
|
-
secondary: [
|
|
388
|
-
{
|
|
389
|
-
id: "ob-sku-coverage",
|
|
390
|
-
label: "SKUs over plan",
|
|
391
|
-
value: "342",
|
|
392
|
-
desc: "SKUs exceeding planned forward cover.",
|
|
393
|
-
cardType: "standard"
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
id: "ob-vendor-share",
|
|
397
|
-
label: "Top vendor share",
|
|
398
|
-
value: "38%",
|
|
399
|
-
desc: "Share of overbought inventory concentrated in the top vendor.",
|
|
400
|
-
donut: !0,
|
|
401
|
-
accent: "#7c3aed",
|
|
402
|
-
cardType: "donut",
|
|
403
|
-
donutValue: 0.38,
|
|
404
|
-
accentColor: "#7c3aed"
|
|
405
|
-
}
|
|
406
|
-
]
|
|
407
|
-
},
|
|
408
|
-
"What's selling": {
|
|
409
|
-
primary: [
|
|
410
|
-
{
|
|
411
|
-
id: "ws-top-sku",
|
|
412
|
-
label: "Top SKU",
|
|
413
|
-
value: "SKU-9241",
|
|
414
|
-
desc: "Highest-velocity SKU over the trailing 7 days.",
|
|
415
|
-
startHere: !0,
|
|
416
|
-
cardType: "name"
|
|
417
|
-
},
|
|
418
|
-
{
|
|
419
|
-
id: "ws-velocity",
|
|
420
|
-
label: "Velocity Δ",
|
|
421
|
-
value: "+12.4%",
|
|
422
|
-
desc: "Rolling 7-day velocity change versus the prior comparable period.",
|
|
423
|
-
variants: ["1×1"],
|
|
424
|
-
cardType: "sparkline",
|
|
425
|
-
sparklineData: [10, 12, 15, 14, 18, 21, 19, 23, 25, 28]
|
|
426
|
-
},
|
|
427
|
-
{
|
|
428
|
-
id: "ws-sellthrough",
|
|
429
|
-
label: "Sell-through",
|
|
430
|
-
value: "see breakdown",
|
|
431
|
-
variants: ["1×5"],
|
|
432
|
-
subStats: [
|
|
433
|
-
{ label: "MTD", value: "64%" },
|
|
434
|
-
{ label: "QTD", value: "71%" },
|
|
435
|
-
{ label: "YTD", value: "68%" },
|
|
436
|
-
{ label: "LYTD", value: "62%" },
|
|
437
|
-
{ label: "7D", value: "74%" }
|
|
438
|
-
],
|
|
439
|
-
desc: "Sell-through across multiple windows.",
|
|
440
|
-
cardType: "stacked-group",
|
|
441
|
-
stackedTimeframes: ["MTD", "QTD", "YTD", "LYTD", "7D"]
|
|
442
|
-
}
|
|
443
|
-
],
|
|
444
|
-
secondary: [
|
|
445
|
-
{
|
|
446
|
-
id: "ws-new-arrivals",
|
|
447
|
-
label: "New arrival lift",
|
|
448
|
-
value: "+8.1%",
|
|
449
|
-
desc: "Velocity boost from new-arrival SKUs versus the assortment mean.",
|
|
450
|
-
isNew: !0,
|
|
451
|
-
cardType: "sparkline",
|
|
452
|
-
sparklineData: [3, 4, 5, 6, 6, 7, 8, 8]
|
|
453
|
-
}
|
|
454
|
-
]
|
|
455
|
-
},
|
|
456
|
-
"On track vs plan": {
|
|
457
|
-
primary: [
|
|
458
|
-
{
|
|
459
|
-
id: "pl-revenue-pace",
|
|
460
|
-
label: "Revenue pace",
|
|
461
|
-
value: "102%",
|
|
462
|
-
desc: "Revenue pace versus plan, period-to-date.",
|
|
463
|
-
donut: !0,
|
|
464
|
-
accent: "#16a34a",
|
|
465
|
-
startHere: !0,
|
|
466
|
-
cardType: "donut",
|
|
467
|
-
donutValue: 1.02,
|
|
468
|
-
accentColor: "#16a34a"
|
|
469
|
-
},
|
|
470
|
-
{
|
|
471
|
-
id: "pl-units-pace",
|
|
472
|
-
label: "Units pace",
|
|
473
|
-
value: "94%",
|
|
474
|
-
desc: "Units pace versus plan, period-to-date.",
|
|
475
|
-
donut: !0,
|
|
476
|
-
accent: "#f59e0b",
|
|
477
|
-
cardType: "donut",
|
|
478
|
-
donutValue: 0.94,
|
|
479
|
-
accentColor: "#f59e0b"
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
id: "pl-margin-pace",
|
|
483
|
-
label: "Margin pace",
|
|
484
|
-
value: "see breakdown",
|
|
485
|
-
variants: ["1×3"],
|
|
486
|
-
subStats: [
|
|
487
|
-
{ label: "MTD", value: "38.4%" },
|
|
488
|
-
{ label: "QTD", value: "37.9%" },
|
|
489
|
-
{ label: "YTD", value: "38.1%" }
|
|
490
|
-
],
|
|
491
|
-
desc: "Gross margin pace across multiple windows.",
|
|
492
|
-
cardType: "stacked-group",
|
|
493
|
-
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
494
|
-
},
|
|
495
|
-
// PHASE 17 D1 — agency-revenue port (J1) + commission-economics port (J6)
|
|
496
347
|
{
|
|
497
348
|
id: "agency-sales",
|
|
498
349
|
label: "Sales",
|
|
@@ -500,15 +351,22 @@ const _e = {
|
|
|
500
351
|
desc: "Agency total sales with trend sparkline",
|
|
501
352
|
cardType: "sparkline",
|
|
502
353
|
sparklineData: [620, 640, 680, 700, 740, 760, 790, 820, 850, 892],
|
|
503
|
-
prefix: "$"
|
|
354
|
+
prefix: "$",
|
|
355
|
+
startHere: !0
|
|
504
356
|
},
|
|
505
357
|
{
|
|
506
|
-
id: "agency-
|
|
507
|
-
label: "
|
|
508
|
-
value: "$
|
|
509
|
-
desc: "
|
|
510
|
-
|
|
511
|
-
|
|
358
|
+
id: "agency-sales-stacked",
|
|
359
|
+
label: "Sales",
|
|
360
|
+
value: "$892,450",
|
|
361
|
+
desc: "Agency sales across three timeframes at a glance (MTD shown)",
|
|
362
|
+
variants: ["1×3"],
|
|
363
|
+
subStats: [
|
|
364
|
+
{ label: "MTD", value: "$892K" },
|
|
365
|
+
{ label: "QTD", value: "$2.4M" },
|
|
366
|
+
{ label: "YTD", value: "$8.6M" }
|
|
367
|
+
],
|
|
368
|
+
cardType: "stacked-group",
|
|
369
|
+
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
512
370
|
},
|
|
513
371
|
{
|
|
514
372
|
id: "agency-growth",
|
|
@@ -528,6 +386,20 @@ const _e = {
|
|
|
528
386
|
sparklineData: [2100, 2150, 2200, 2180, 2250, 2280, 2300, 2320, 2335, 2340],
|
|
529
387
|
prefix: "$"
|
|
530
388
|
},
|
|
389
|
+
{
|
|
390
|
+
id: "agency-aov-stacked",
|
|
391
|
+
label: "Avg Order",
|
|
392
|
+
value: "$2,340",
|
|
393
|
+
desc: "Average order value across three timeframes",
|
|
394
|
+
variants: ["1×3"],
|
|
395
|
+
subStats: [
|
|
396
|
+
{ label: "MTD", value: "$2,340" },
|
|
397
|
+
{ label: "QTD", value: "$2,280" },
|
|
398
|
+
{ label: "YTD", value: "$2,210" }
|
|
399
|
+
],
|
|
400
|
+
cardType: "stacked-group",
|
|
401
|
+
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
402
|
+
},
|
|
531
403
|
{
|
|
532
404
|
id: "agency-conversion",
|
|
533
405
|
label: "Conversion",
|
|
@@ -537,7 +409,9 @@ const _e = {
|
|
|
537
409
|
donutValue: 0.68,
|
|
538
410
|
accentColor: "#10b981",
|
|
539
411
|
suffix: "%"
|
|
540
|
-
}
|
|
412
|
+
}
|
|
413
|
+
],
|
|
414
|
+
secondary: [
|
|
541
415
|
{
|
|
542
416
|
id: "agency-revenue-compact",
|
|
543
417
|
label: "Total Revenue",
|
|
@@ -547,23 +421,6 @@ const _e = {
|
|
|
547
421
|
sparklineData: [620, 660, 700, 740, 780, 820, 860, 892],
|
|
548
422
|
prefix: "$"
|
|
549
423
|
},
|
|
550
|
-
// degrade-to-standard: stacked-group with MTD segment shown at span-1
|
|
551
|
-
{
|
|
552
|
-
id: "agency-sales-stacked",
|
|
553
|
-
label: "Sales",
|
|
554
|
-
value: "$892,450",
|
|
555
|
-
desc: "Agency sales across three timeframes at a glance (MTD shown)",
|
|
556
|
-
cardType: "stacked-group",
|
|
557
|
-
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
558
|
-
},
|
|
559
|
-
{
|
|
560
|
-
id: "agency-aov-stacked",
|
|
561
|
-
label: "Avg Order",
|
|
562
|
-
value: "$2,340",
|
|
563
|
-
desc: "Average order value across three timeframes (MTD shown)",
|
|
564
|
-
cardType: "stacked-group",
|
|
565
|
-
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
566
|
-
},
|
|
567
424
|
{
|
|
568
425
|
id: "agency-yoy-versus",
|
|
569
426
|
label: "YoY Comparison",
|
|
@@ -587,70 +444,19 @@ const _e = {
|
|
|
587
444
|
{ label: "C", value: 22, color: "#10b981" },
|
|
588
445
|
{ label: "D", value: 15, color: "#f59e0b" }
|
|
589
446
|
]
|
|
590
|
-
},
|
|
591
|
-
{
|
|
592
|
-
id: "agency-outstanding",
|
|
593
|
-
label: "Outstanding",
|
|
594
|
-
value: "$24,500",
|
|
595
|
-
desc: "Unpaid order balance across all accounts",
|
|
596
|
-
cardType: "standard",
|
|
597
|
-
prefix: "$"
|
|
598
|
-
},
|
|
599
|
-
{
|
|
600
|
-
id: "agency-commission-rate",
|
|
601
|
-
label: "Commission",
|
|
602
|
-
value: "8.4%",
|
|
603
|
-
desc: "Effective commission rate %",
|
|
604
|
-
cardType: "standard",
|
|
605
|
-
suffix: "%"
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
id: "agency-commission-aging",
|
|
609
|
-
label: "Commission Aging",
|
|
610
|
-
value: "$24K",
|
|
611
|
-
desc: "Unpaid commission aging by buckets",
|
|
612
|
-
cardType: "bars",
|
|
613
|
-
barData: [4, 8, 7, 5]
|
|
614
447
|
}
|
|
615
448
|
]
|
|
616
449
|
},
|
|
617
|
-
"
|
|
450
|
+
"Order flow": {
|
|
618
451
|
primary: [
|
|
619
|
-
{
|
|
620
|
-
id: "ot-on-time-rate",
|
|
621
|
-
label: "On-time rate",
|
|
622
|
-
value: "94.2%",
|
|
623
|
-
desc: "Share of orders shipped within SLA.",
|
|
624
|
-
startHere: !0,
|
|
625
|
-
cardType: "donut",
|
|
626
|
-
donutValue: 0.942,
|
|
627
|
-
accentColor: "#16a34a",
|
|
628
|
-
suffix: "%"
|
|
629
|
-
},
|
|
630
|
-
{
|
|
631
|
-
id: "ot-at-risk",
|
|
632
|
-
label: "At-risk shipments",
|
|
633
|
-
value: "18",
|
|
634
|
-
desc: "Open shipments projected to miss SLA.",
|
|
635
|
-
isNew: !0,
|
|
636
|
-
cardType: "highlight",
|
|
637
|
-
highlightColor: "#f59e0b"
|
|
638
|
-
},
|
|
639
|
-
// PHASE 17 D1 — agency-order-flow port (J5)
|
|
640
452
|
{
|
|
641
453
|
id: "agency-activity",
|
|
642
454
|
label: "Orders",
|
|
643
455
|
value: "47 Orders",
|
|
644
456
|
desc: "Daily team order count with bar chart",
|
|
645
457
|
cardType: "bars",
|
|
646
|
-
barData: [12, 18, 15, 22, 19, 25, 28]
|
|
647
|
-
|
|
648
|
-
{
|
|
649
|
-
id: "agency-unassigned-orders",
|
|
650
|
-
label: "Unassigned",
|
|
651
|
-
value: "0",
|
|
652
|
-
desc: "Orders awaiting salesperson assignment",
|
|
653
|
-
cardType: "standard"
|
|
458
|
+
barData: [12, 18, 15, 22, 19, 25, 28],
|
|
459
|
+
startHere: !0
|
|
654
460
|
},
|
|
655
461
|
{
|
|
656
462
|
id: "agency-orders-compact",
|
|
@@ -660,12 +466,17 @@ const _e = {
|
|
|
660
466
|
cardType: "bars",
|
|
661
467
|
barData: [18, 22, 19, 24, 26, 23, 28]
|
|
662
468
|
},
|
|
663
|
-
// degrade-to-standard: stacked-group with MTD segment shown at span-1
|
|
664
469
|
{
|
|
665
470
|
id: "agency-orders-stacked",
|
|
666
471
|
label: "Orders",
|
|
667
472
|
value: "156",
|
|
668
|
-
desc: "Order count across three timeframes
|
|
473
|
+
desc: "Order count across three timeframes",
|
|
474
|
+
variants: ["1×3"],
|
|
475
|
+
subStats: [
|
|
476
|
+
{ label: "MTD", value: "156" },
|
|
477
|
+
{ label: "QTD", value: "482" },
|
|
478
|
+
{ label: "YTD", value: "1,847" }
|
|
479
|
+
],
|
|
669
480
|
cardType: "stacked-group",
|
|
670
481
|
stackedTimeframes: ["MTD", "QTD", "YTD"]
|
|
671
482
|
},
|
|
@@ -677,6 +488,13 @@ const _e = {
|
|
|
677
488
|
cardType: "standard",
|
|
678
489
|
prefix: "$"
|
|
679
490
|
},
|
|
491
|
+
{
|
|
492
|
+
id: "agency-unassigned-orders",
|
|
493
|
+
label: "Unassigned",
|
|
494
|
+
value: "0",
|
|
495
|
+
desc: "Orders awaiting salesperson assignment",
|
|
496
|
+
cardType: "standard"
|
|
497
|
+
},
|
|
680
498
|
{
|
|
681
499
|
id: "agency-cancel-rate",
|
|
682
500
|
label: "Cancel Rate",
|
|
@@ -688,29 +506,37 @@ const _e = {
|
|
|
688
506
|
}
|
|
689
507
|
]
|
|
690
508
|
},
|
|
691
|
-
"
|
|
509
|
+
"Rep performance": {
|
|
692
510
|
primary: [
|
|
693
511
|
{
|
|
694
|
-
id: "
|
|
695
|
-
label: "
|
|
696
|
-
value: "
|
|
697
|
-
desc: "
|
|
698
|
-
|
|
699
|
-
|
|
512
|
+
id: "agency-top-rep",
|
|
513
|
+
label: "#1 Rep",
|
|
514
|
+
value: "Sarah Mitchell",
|
|
515
|
+
desc: "Top-performing rep on the team this period",
|
|
516
|
+
cardType: "name",
|
|
517
|
+
startHere: !0
|
|
700
518
|
},
|
|
701
519
|
{
|
|
702
|
-
id: "
|
|
703
|
-
label: "
|
|
704
|
-
value: "
|
|
705
|
-
desc: "
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
donutValue: 0.971,
|
|
710
|
-
accentColor: "#2563eb",
|
|
711
|
-
suffix: "%"
|
|
520
|
+
id: "agency-quota",
|
|
521
|
+
label: "Below Quota",
|
|
522
|
+
value: "3 of 12",
|
|
523
|
+
desc: "Reps currently tracking under their quota",
|
|
524
|
+
cardType: "ratio",
|
|
525
|
+
numerator: 3,
|
|
526
|
+
denominator: 12
|
|
712
527
|
},
|
|
713
|
-
|
|
528
|
+
{
|
|
529
|
+
id: "agency-rep-leaderboard-sales",
|
|
530
|
+
label: "Rep Sales",
|
|
531
|
+
value: "Top 5",
|
|
532
|
+
desc: "Sales leaderboard across the rep team",
|
|
533
|
+
cardType: "leaderboard",
|
|
534
|
+
catalogValue: "Top 5"
|
|
535
|
+
}
|
|
536
|
+
]
|
|
537
|
+
},
|
|
538
|
+
"Brand portfolio": {
|
|
539
|
+
primary: [
|
|
714
540
|
{
|
|
715
541
|
id: "agency-mfr-mix",
|
|
716
542
|
label: "Mfr Mix",
|
|
@@ -722,7 +548,8 @@ const _e = {
|
|
|
722
548
|
{ label: "B", value: 28, color: "#1d6fd8" },
|
|
723
549
|
{ label: "C", value: 22, color: "#10b981" },
|
|
724
550
|
{ label: "D", value: 15, color: "#f59e0b" }
|
|
725
|
-
]
|
|
551
|
+
],
|
|
552
|
+
startHere: !0
|
|
726
553
|
},
|
|
727
554
|
{
|
|
728
555
|
id: "agency-mfr-new-line",
|
|
@@ -733,58 +560,15 @@ const _e = {
|
|
|
733
560
|
}
|
|
734
561
|
]
|
|
735
562
|
},
|
|
736
|
-
"
|
|
563
|
+
"Account coverage": {
|
|
737
564
|
primary: [
|
|
738
|
-
{
|
|
739
|
-
id: "am-brand-mix",
|
|
740
|
-
label: "Brand mix",
|
|
741
|
-
value: "see breakdown",
|
|
742
|
-
variants: ["1×3"],
|
|
743
|
-
subStats: [
|
|
744
|
-
{ label: "Core", value: "58%" },
|
|
745
|
-
{ label: "Growth", value: "27%" },
|
|
746
|
-
{ label: "Test", value: "15%" }
|
|
747
|
-
],
|
|
748
|
-
desc: "Assortment mix across brand tiers.",
|
|
749
|
-
startHere: !0,
|
|
750
|
-
cardType: "segmented",
|
|
751
|
-
segments: [
|
|
752
|
-
{ label: "Core", value: 58, color: "#7c3aed" },
|
|
753
|
-
{ label: "Growth", value: 27, color: "#10b981" },
|
|
754
|
-
{ label: "Test", value: 15, color: "#f59e0b" }
|
|
755
|
-
]
|
|
756
|
-
}
|
|
757
|
-
]
|
|
758
|
-
},
|
|
759
|
-
"Customer retention": {
|
|
760
|
-
primary: [
|
|
761
|
-
{
|
|
762
|
-
id: "cr-repeat-rate",
|
|
763
|
-
label: "Repeat rate",
|
|
764
|
-
value: "62.4%",
|
|
765
|
-
desc: "Share of buyers placing two or more orders in the period.",
|
|
766
|
-
startHere: !0,
|
|
767
|
-
isNew: !0,
|
|
768
|
-
cardType: "donut",
|
|
769
|
-
donutValue: 0.624,
|
|
770
|
-
accentColor: "#1d6fd8",
|
|
771
|
-
suffix: "%"
|
|
772
|
-
},
|
|
773
|
-
{
|
|
774
|
-
id: "cr-lapsed",
|
|
775
|
-
label: "Lapsed accounts",
|
|
776
|
-
value: "47",
|
|
777
|
-
desc: "Accounts with zero orders in the last 90 days.",
|
|
778
|
-
cardType: "highlight",
|
|
779
|
-
highlightColor: "#f59e0b"
|
|
780
|
-
},
|
|
781
|
-
// PHASE 17 D1 — agency-account-coverage port (J4)
|
|
782
565
|
{
|
|
783
566
|
id: "agency-new-accounts",
|
|
784
567
|
label: "New Accounts",
|
|
785
568
|
value: "12",
|
|
786
569
|
desc: "New customer accounts opened this period",
|
|
787
|
-
cardType: "standard"
|
|
570
|
+
cardType: "standard",
|
|
571
|
+
startHere: !0
|
|
788
572
|
},
|
|
789
573
|
{
|
|
790
574
|
id: "agency-customers-compact",
|
|
@@ -811,6 +595,35 @@ const _e = {
|
|
|
811
595
|
suffix: "%"
|
|
812
596
|
}
|
|
813
597
|
]
|
|
598
|
+
},
|
|
599
|
+
Commission: {
|
|
600
|
+
primary: [
|
|
601
|
+
{
|
|
602
|
+
id: "agency-outstanding",
|
|
603
|
+
label: "Outstanding",
|
|
604
|
+
value: "$24,500",
|
|
605
|
+
desc: "Unpaid order balance across all accounts",
|
|
606
|
+
cardType: "standard",
|
|
607
|
+
prefix: "$",
|
|
608
|
+
startHere: !0
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
id: "agency-commission-rate",
|
|
612
|
+
label: "Commission",
|
|
613
|
+
value: "8.4%",
|
|
614
|
+
desc: "Effective commission rate %",
|
|
615
|
+
cardType: "standard",
|
|
616
|
+
suffix: "%"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
id: "agency-commission-aging",
|
|
620
|
+
label: "Commission Aging",
|
|
621
|
+
value: "$24K",
|
|
622
|
+
desc: "Unpaid commission aging by buckets",
|
|
623
|
+
cardType: "bars",
|
|
624
|
+
barData: [4, 8, 7, 5]
|
|
625
|
+
}
|
|
626
|
+
]
|
|
814
627
|
}
|
|
815
628
|
};
|
|
816
629
|
function Ce({
|
|
@@ -818,7 +631,7 @@ function Ce({
|
|
|
818
631
|
activeLens: t,
|
|
819
632
|
onLensChange: r,
|
|
820
633
|
variant: l = "pills",
|
|
821
|
-
lensMeta: a =
|
|
634
|
+
lensMeta: a = ve
|
|
822
635
|
}) {
|
|
823
636
|
return l === "pills" ? /* @__PURE__ */ n("div", { className: "cat-pills-wrap", children: /* @__PURE__ */ n("div", { className: "cat-pills", role: "tablist", "aria-label": "Metric lenses", children: e.map((i) => {
|
|
824
637
|
const u = i === t, o = a[i], s = ["cat-pill"];
|
|
@@ -847,7 +660,7 @@ function je({
|
|
|
847
660
|
activeLens: t,
|
|
848
661
|
onLensChange: r
|
|
849
662
|
}) {
|
|
850
|
-
const [l, a] =
|
|
663
|
+
const [l, a] = A(!1), i = K(null), u = () => {
|
|
851
664
|
i.current != null && (window.clearTimeout(i.current), i.current = null);
|
|
852
665
|
}, o = () => {
|
|
853
666
|
u(), i.current = window.setTimeout(() => a(!1), 100);
|
|
@@ -939,7 +752,7 @@ function te({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: l }) {
|
|
|
939
752
|
style: { pointerEvents: "none", width: "100%", height: "100%" },
|
|
940
753
|
"aria-hidden": "true",
|
|
941
754
|
children: a.donut ? /* @__PURE__ */ n(
|
|
942
|
-
|
|
755
|
+
ce,
|
|
943
756
|
{
|
|
944
757
|
variant: "donut",
|
|
945
758
|
label: a.label,
|
|
@@ -950,7 +763,7 @@ function te({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: l }) {
|
|
|
950
763
|
colSpan: c
|
|
951
764
|
}
|
|
952
765
|
) : /* @__PURE__ */ n(
|
|
953
|
-
|
|
766
|
+
ce,
|
|
954
767
|
{
|
|
955
768
|
variant: "standard",
|
|
956
769
|
label: a.label,
|
|
@@ -968,12 +781,12 @@ function te({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: l }) {
|
|
|
968
781
|
);
|
|
969
782
|
}) });
|
|
970
783
|
}
|
|
971
|
-
const
|
|
972
|
-
function
|
|
973
|
-
return
|
|
784
|
+
const ae = fe(null);
|
|
785
|
+
function se() {
|
|
786
|
+
return ge(ae);
|
|
974
787
|
}
|
|
975
|
-
function
|
|
976
|
-
const r =
|
|
788
|
+
function At({ mode: e, dispatch: t }) {
|
|
789
|
+
const r = se();
|
|
977
790
|
if (r == null && e == null) return null;
|
|
978
791
|
const l = r?.mode ?? e ?? "add", a = r?.selectedTileId ?? null, i = r?.description ?? null, u = a == null;
|
|
979
792
|
return /* @__PURE__ */ f("div", { className: "panel-footer catalog", children: [
|
|
@@ -1015,7 +828,7 @@ function xt({ mode: e, dispatch: t }) {
|
|
|
1015
828
|
] })
|
|
1016
829
|
] });
|
|
1017
830
|
}
|
|
1018
|
-
function
|
|
831
|
+
function de(e, t) {
|
|
1019
832
|
if (t.length === 0) return !0;
|
|
1020
833
|
const r = t.toLowerCase();
|
|
1021
834
|
if (e.label.toLowerCase().includes(r) || e.value.toLowerCase().includes(r)) return !0;
|
|
@@ -1026,37 +839,37 @@ function ue(e, t) {
|
|
|
1026
839
|
return !1;
|
|
1027
840
|
}
|
|
1028
841
|
function Ze() {
|
|
1029
|
-
const t =
|
|
842
|
+
const t = se()?.description ?? null;
|
|
1030
843
|
return t == null ? /* @__PURE__ */ n("span", { style: { fontStyle: "italic" }, children: "Tap a metric to see its description" }) : /* @__PURE__ */ n("span", { children: t });
|
|
1031
844
|
}
|
|
1032
|
-
function
|
|
845
|
+
function xt({
|
|
1033
846
|
isOpen: e,
|
|
1034
|
-
lenses: t =
|
|
847
|
+
lenses: t = be,
|
|
1035
848
|
defaultLens: r = ye,
|
|
1036
849
|
tilesByLens: l = _e,
|
|
1037
|
-
lensMeta: a =
|
|
850
|
+
lensMeta: a = ve,
|
|
1038
851
|
renderTile: i,
|
|
1039
852
|
onAdd: u
|
|
1040
853
|
}) {
|
|
1041
|
-
const o = O(), [s, c] =
|
|
1042
|
-
() =>
|
|
1043
|
-
[
|
|
1044
|
-
), N =
|
|
1045
|
-
() => (
|
|
1046
|
-
[
|
|
854
|
+
const o = O(), [s, c] = A(r), [d, m] = A(null), [h, b] = A(null), [p, _] = A(""), P = l[s] ?? { primary: [] }, E = a[s], y = le(
|
|
855
|
+
() => P.primary.filter((S) => de(S, p)),
|
|
856
|
+
[P.primary, p]
|
|
857
|
+
), N = le(
|
|
858
|
+
() => (P.secondary ?? []).filter((S) => de(S, p)),
|
|
859
|
+
[P.secondary, p]
|
|
1047
860
|
), I = () => {
|
|
1048
861
|
d != null && u?.(d), o?.dispatch({ type: "CLOSE_PANEL", reason: "apply-button" });
|
|
1049
|
-
},
|
|
862
|
+
}, R = () => o?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }), $ = d == null;
|
|
1050
863
|
return /* @__PURE__ */ n(
|
|
1051
|
-
|
|
864
|
+
ae.Provider,
|
|
1052
865
|
{
|
|
1053
866
|
value: { mode: "add", selectedTileId: d, description: h },
|
|
1054
867
|
children: /* @__PURE__ */ n(
|
|
1055
|
-
|
|
868
|
+
Y,
|
|
1056
869
|
{
|
|
1057
870
|
variant: "no-stage",
|
|
1058
871
|
title: "Add a metric",
|
|
1059
|
-
onClose:
|
|
872
|
+
onClose: R,
|
|
1060
873
|
footer: {
|
|
1061
874
|
left: /* @__PURE__ */ n(Ze, {}),
|
|
1062
875
|
right: /* @__PURE__ */ n(
|
|
@@ -1065,7 +878,7 @@ function At({
|
|
|
1065
878
|
id: "btn-cat-add",
|
|
1066
879
|
type: "button",
|
|
1067
880
|
className: "gloss-panel-chrome-v2__footer-btn gloss-panel-chrome-v2__footer-btn--primary",
|
|
1068
|
-
disabled:
|
|
881
|
+
disabled: $,
|
|
1069
882
|
onClick: I,
|
|
1070
883
|
children: "Add metric"
|
|
1071
884
|
}
|
|
@@ -1080,7 +893,7 @@ function At({
|
|
|
1080
893
|
placeholder: "Search metrics",
|
|
1081
894
|
"aria-label": "Search metrics",
|
|
1082
895
|
value: p,
|
|
1083
|
-
onChange: (
|
|
896
|
+
onChange: (S) => _(S.target.value)
|
|
1084
897
|
}
|
|
1085
898
|
) }),
|
|
1086
899
|
/* @__PURE__ */ n(
|
|
@@ -1090,22 +903,22 @@ function At({
|
|
|
1090
903
|
activeLens: s,
|
|
1091
904
|
lensMeta: a,
|
|
1092
905
|
variant: "pills",
|
|
1093
|
-
onLensChange: (
|
|
1094
|
-
c(
|
|
906
|
+
onLensChange: (S) => {
|
|
907
|
+
c(S), m(null), b(null), _("");
|
|
1095
908
|
}
|
|
1096
909
|
}
|
|
1097
910
|
),
|
|
1098
|
-
|
|
1099
|
-
/* @__PURE__ */ n("h3", { className: "cat-lens-headline", children:
|
|
1100
|
-
/* @__PURE__ */ n("p", { className: "cat-lens-helper", children:
|
|
911
|
+
E && /* @__PURE__ */ f("div", { className: "cat-lens-meta", children: [
|
|
912
|
+
/* @__PURE__ */ n("h3", { className: "cat-lens-headline", children: E.headline }),
|
|
913
|
+
/* @__PURE__ */ n("p", { className: "cat-lens-helper", children: E.helper })
|
|
1101
914
|
] }),
|
|
1102
915
|
/* @__PURE__ */ n(
|
|
1103
916
|
te,
|
|
1104
917
|
{
|
|
1105
|
-
tiles:
|
|
918
|
+
tiles: y,
|
|
1106
919
|
selectedTileId: d,
|
|
1107
|
-
onSelectTile: (
|
|
1108
|
-
m(
|
|
920
|
+
onSelectTile: (S, L) => {
|
|
921
|
+
m(S), b(L);
|
|
1109
922
|
},
|
|
1110
923
|
renderTile: i
|
|
1111
924
|
}
|
|
@@ -1117,14 +930,14 @@ function At({
|
|
|
1117
930
|
{
|
|
1118
931
|
tiles: N,
|
|
1119
932
|
selectedTileId: d,
|
|
1120
|
-
onSelectTile: (
|
|
1121
|
-
m(
|
|
933
|
+
onSelectTile: (S, L) => {
|
|
934
|
+
m(S), b(L);
|
|
1122
935
|
},
|
|
1123
936
|
renderTile: i
|
|
1124
937
|
}
|
|
1125
938
|
)
|
|
1126
939
|
] }),
|
|
1127
|
-
|
|
940
|
+
y.length === 0 && N.length === 0 && p.length > 0 && /* @__PURE__ */ f("div", { className: "cat-empty", children: [
|
|
1128
941
|
'No metrics match "',
|
|
1129
942
|
p,
|
|
1130
943
|
'".'
|
|
@@ -1136,28 +949,28 @@ function At({
|
|
|
1136
949
|
);
|
|
1137
950
|
}
|
|
1138
951
|
function Xe() {
|
|
1139
|
-
const t =
|
|
1140
|
-
return t == null ? /* @__PURE__ */ n("em", { children: "Tap a metric to see its description" }) : /* @__PURE__ */ n(
|
|
952
|
+
const t = se()?.description ?? null;
|
|
953
|
+
return t == null ? /* @__PURE__ */ n("em", { children: "Tap a metric to see its description" }) : /* @__PURE__ */ n(V, { children: t });
|
|
1141
954
|
}
|
|
1142
955
|
function kt({
|
|
1143
956
|
isOpen: e,
|
|
1144
957
|
replacingLabel: t,
|
|
1145
|
-
lenses: r =
|
|
958
|
+
lenses: r = be,
|
|
1146
959
|
defaultLens: l = ye,
|
|
1147
960
|
tilesByLens: a = _e,
|
|
1148
961
|
renderTile: i
|
|
1149
962
|
}) {
|
|
1150
|
-
const u = O(), [o, s] =
|
|
963
|
+
const u = O(), [o, s] = A(l), [c, d] = A(null), [m, h] = A(null), b = a[o] ?? { primary: [] }, p = [...b.primary, ...b.secondary ?? []], _ = () => u?.dispatch({ type: "CLOSE_PANEL", reason: "apply-button" }), P = () => u?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }), E = c == null;
|
|
1151
964
|
return /* @__PURE__ */ n(
|
|
1152
|
-
|
|
965
|
+
ae.Provider,
|
|
1153
966
|
{
|
|
1154
967
|
value: { mode: "replace", selectedTileId: c, description: m },
|
|
1155
968
|
children: /* @__PURE__ */ n(
|
|
1156
|
-
|
|
969
|
+
Y,
|
|
1157
970
|
{
|
|
1158
971
|
variant: "no-stage",
|
|
1159
972
|
title: "Replace metric",
|
|
1160
|
-
onClose:
|
|
973
|
+
onClose: P,
|
|
1161
974
|
footer: {
|
|
1162
975
|
left: /* @__PURE__ */ n(Xe, {}),
|
|
1163
976
|
right: /* @__PURE__ */ n(
|
|
@@ -1166,7 +979,7 @@ function kt({
|
|
|
1166
979
|
id: "btn-cat-replace",
|
|
1167
980
|
type: "button",
|
|
1168
981
|
className: "gloss-panel-chrome-v2__footer-btn gloss-panel-chrome-v2__footer-btn--primary",
|
|
1169
|
-
disabled:
|
|
982
|
+
disabled: E,
|
|
1170
983
|
onClick: _,
|
|
1171
984
|
children: "Replace metric"
|
|
1172
985
|
}
|
|
@@ -1182,8 +995,8 @@ function kt({
|
|
|
1182
995
|
{
|
|
1183
996
|
lenses: r,
|
|
1184
997
|
activeLens: o,
|
|
1185
|
-
onLensChange: (
|
|
1186
|
-
s(
|
|
998
|
+
onLensChange: (y) => {
|
|
999
|
+
s(y), d(null), h(null);
|
|
1187
1000
|
}
|
|
1188
1001
|
}
|
|
1189
1002
|
),
|
|
@@ -1192,8 +1005,8 @@ function kt({
|
|
|
1192
1005
|
{
|
|
1193
1006
|
tiles: p,
|
|
1194
1007
|
selectedTileId: c,
|
|
1195
|
-
onSelectTile: (
|
|
1196
|
-
d(
|
|
1008
|
+
onSelectTile: (y, N) => {
|
|
1009
|
+
d(y), h(N);
|
|
1197
1010
|
},
|
|
1198
1011
|
renderTile: i
|
|
1199
1012
|
}
|
|
@@ -1204,12 +1017,12 @@ function kt({
|
|
|
1204
1017
|
}
|
|
1205
1018
|
);
|
|
1206
1019
|
}
|
|
1207
|
-
const Ne =
|
|
1208
|
-
function
|
|
1209
|
-
return
|
|
1020
|
+
const Ne = fe(null);
|
|
1021
|
+
function Se() {
|
|
1022
|
+
return ge(Ne);
|
|
1210
1023
|
}
|
|
1211
1024
|
function Je(e = {}) {
|
|
1212
|
-
const t =
|
|
1025
|
+
const t = Se(), r = t?.createPage, l = t?.setPages;
|
|
1213
1026
|
return /* @__PURE__ */ f(
|
|
1214
1027
|
"div",
|
|
1215
1028
|
{
|
|
@@ -1240,8 +1053,8 @@ function Je(e = {}) {
|
|
|
1240
1053
|
}
|
|
1241
1054
|
);
|
|
1242
1055
|
}
|
|
1243
|
-
function
|
|
1244
|
-
const i =
|
|
1056
|
+
function ue({ page: e, onRename: t, onKebab: r, onDragStart: l, onSwitchPage: a }) {
|
|
1057
|
+
const i = Se(), [u, o] = A(!1), s = K(null);
|
|
1245
1058
|
F(() => {
|
|
1246
1059
|
if (!u) return;
|
|
1247
1060
|
const p = (_) => {
|
|
@@ -1346,39 +1159,39 @@ function Dt({
|
|
|
1346
1159
|
onCreatePage: s,
|
|
1347
1160
|
onSwitchPage: c
|
|
1348
1161
|
}) {
|
|
1349
|
-
const d = O(), [m, h] =
|
|
1350
|
-
h((w) => w.map((
|
|
1162
|
+
const d = O(), [m, h] = A(() => [...t]), b = D((g, C) => {
|
|
1163
|
+
h((w) => w.map((x) => x.id === g ? { ...x, name: C } : x));
|
|
1351
1164
|
}, []), p = D((g) => {
|
|
1352
1165
|
h((C) => {
|
|
1353
|
-
const w = C.find((
|
|
1166
|
+
const w = C.find((z) => z.id === g);
|
|
1354
1167
|
if (!w) return C;
|
|
1355
|
-
const
|
|
1168
|
+
const x = {
|
|
1356
1169
|
id: `${w.id}-copy-${Date.now()}`,
|
|
1357
1170
|
name: `${w.name} copy`,
|
|
1358
1171
|
active: !1
|
|
1359
|
-
}, k = C.findIndex((
|
|
1360
|
-
return [...C.slice(0, k + 1),
|
|
1172
|
+
}, k = C.findIndex((z) => z.id === g);
|
|
1173
|
+
return [...C.slice(0, k + 1), x, ...C.slice(k + 1)];
|
|
1361
1174
|
});
|
|
1362
1175
|
}, []), _ = D((g) => {
|
|
1363
1176
|
h((C) => C.filter((w) => w.id !== g));
|
|
1364
|
-
}, []),
|
|
1177
|
+
}, []), P = D((g) => {
|
|
1365
1178
|
h((C) => {
|
|
1366
|
-
const w = new Map(C.map((k) => [k.id, k])),
|
|
1367
|
-
return
|
|
1179
|
+
const w = new Map(C.map((k) => [k.id, k])), x = g.map((k) => w.get(k)).filter(Boolean);
|
|
1180
|
+
return x.length === C.length ? x : C;
|
|
1368
1181
|
});
|
|
1369
|
-
}, []),
|
|
1182
|
+
}, []), E = r != null, y = E ? r : m, N = l != null ? y.map((g) => ({ ...g, active: g.id === l })) : [...y], I = a ?? (E ? void 0 : b), R = i ?? (E ? void 0 : p), $ = u ?? (E ? void 0 : _), S = o ?? (E ? void 0 : P), L = D(
|
|
1370
1183
|
(g) => {
|
|
1371
|
-
|
|
1184
|
+
E || h(g);
|
|
1372
1185
|
},
|
|
1373
|
-
[
|
|
1374
|
-
),
|
|
1186
|
+
[E]
|
|
1187
|
+
), q = D(
|
|
1375
1188
|
(g) => {
|
|
1376
1189
|
const C = g[0]?.items.map((w) => w.id) ?? [];
|
|
1377
|
-
C.length > 0 &&
|
|
1190
|
+
C.length > 0 && S && S(C);
|
|
1378
1191
|
},
|
|
1379
|
-
[
|
|
1380
|
-
),
|
|
1381
|
-
|
|
1192
|
+
[S]
|
|
1193
|
+
), Q = N.map((g) => `${g.id}:${g.name}`).join("|"), W = S != null && N.length > 1 ? /* @__PURE__ */ n(
|
|
1194
|
+
Pe,
|
|
1382
1195
|
{
|
|
1383
1196
|
zones: [
|
|
1384
1197
|
{
|
|
@@ -1386,10 +1199,10 @@ function Dt({
|
|
|
1386
1199
|
items: N.map((g) => ({ ...g, id: g.id }))
|
|
1387
1200
|
}
|
|
1388
1201
|
],
|
|
1389
|
-
onZoneChange:
|
|
1202
|
+
onZoneChange: q,
|
|
1390
1203
|
renderZone: (g, C, w) => /* @__PURE__ */ n("div", { className: "pm-list", role: "list", children: w }),
|
|
1391
1204
|
renderItem: (g) => /* @__PURE__ */ n(
|
|
1392
|
-
|
|
1205
|
+
ue,
|
|
1393
1206
|
{
|
|
1394
1207
|
page: g,
|
|
1395
1208
|
onSwitchPage: c
|
|
@@ -1397,15 +1210,15 @@ function Dt({
|
|
|
1397
1210
|
g.id
|
|
1398
1211
|
)
|
|
1399
1212
|
},
|
|
1400
|
-
|
|
1213
|
+
Q
|
|
1401
1214
|
) : /* @__PURE__ */ n("div", { className: "pm-list", role: "list", children: N.map((g) => /* @__PURE__ */ n(
|
|
1402
|
-
|
|
1215
|
+
ue,
|
|
1403
1216
|
{
|
|
1404
1217
|
page: g,
|
|
1405
1218
|
onSwitchPage: c
|
|
1406
1219
|
},
|
|
1407
1220
|
g.id
|
|
1408
|
-
)) }),
|
|
1221
|
+
)) }), G = () => d?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" });
|
|
1409
1222
|
return /* @__PURE__ */ n(
|
|
1410
1223
|
Ne.Provider,
|
|
1411
1224
|
{
|
|
@@ -1413,19 +1226,19 @@ function Dt({
|
|
|
1413
1226
|
pages: N,
|
|
1414
1227
|
setPages: L,
|
|
1415
1228
|
renamePage: I,
|
|
1416
|
-
duplicatePage:
|
|
1417
|
-
deletePage:
|
|
1229
|
+
duplicatePage: R,
|
|
1230
|
+
deletePage: $,
|
|
1418
1231
|
// Sprint 2026-05-20 — propagate live create binding for footer.
|
|
1419
1232
|
createPage: s
|
|
1420
1233
|
},
|
|
1421
1234
|
children: /* @__PURE__ */ n(
|
|
1422
|
-
|
|
1235
|
+
Y,
|
|
1423
1236
|
{
|
|
1424
1237
|
variant: "no-stage",
|
|
1425
1238
|
title: "Manage pages",
|
|
1426
|
-
onClose:
|
|
1239
|
+
onClose: G,
|
|
1427
1240
|
footer: { right: /* @__PURE__ */ n(Je, {}) },
|
|
1428
|
-
children: /* @__PURE__ */ n("div", { "data-shell": "page-management", "aria-hidden": !e, children:
|
|
1241
|
+
children: /* @__PURE__ */ n("div", { "data-shell": "page-management", "aria-hidden": !e, children: W })
|
|
1429
1242
|
}
|
|
1430
1243
|
)
|
|
1431
1244
|
}
|
|
@@ -1452,7 +1265,7 @@ const Lt = {
|
|
|
1452
1265
|
background: "rgba(0, 0, 0, 0.04)"
|
|
1453
1266
|
};
|
|
1454
1267
|
function Ot() {
|
|
1455
|
-
const { state: e, dispatch: t, getCloseLog: r } =
|
|
1268
|
+
const { state: e, dispatch: t, getCloseLog: r } = Te();
|
|
1456
1269
|
F(() => {
|
|
1457
1270
|
if (e.activePanelId == null) return;
|
|
1458
1271
|
function i(u) {
|
|
@@ -1460,8 +1273,8 @@ function Ot() {
|
|
|
1460
1273
|
}
|
|
1461
1274
|
return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
|
|
1462
1275
|
}, [e.activePanelId, t]);
|
|
1463
|
-
const l =
|
|
1464
|
-
|
|
1276
|
+
const l = K(e);
|
|
1277
|
+
xe(() => {
|
|
1465
1278
|
l.current = e;
|
|
1466
1279
|
}), F(() => {
|
|
1467
1280
|
if (process.env.NODE_ENV === "production") return;
|
|
@@ -1488,7 +1301,7 @@ function Ot() {
|
|
|
1488
1301
|
}
|
|
1489
1302
|
const at = 700;
|
|
1490
1303
|
function st(e) {
|
|
1491
|
-
const [t, r] =
|
|
1304
|
+
const [t, r] = A(null), l = K(null);
|
|
1492
1305
|
return F(() => {
|
|
1493
1306
|
if (e != null) {
|
|
1494
1307
|
l.current != null && (clearTimeout(l.current), l.current = null), r(null);
|
|
@@ -1510,13 +1323,13 @@ function Mt({ panelComponents: e, children: t }) {
|
|
|
1510
1323
|
return u == null && t == null ? (process.env.NODE_ENV !== "production" && console.error(
|
|
1511
1324
|
"[panels] No panel component registered for activePanelId:",
|
|
1512
1325
|
a
|
|
1513
|
-
), null) : /* @__PURE__ */ n(
|
|
1326
|
+
), null) : /* @__PURE__ */ n(Ae, { isOpen: i, children: u != null ? /* @__PURE__ */ n(u, { isOpen: i }) : t });
|
|
1514
1327
|
}
|
|
1515
|
-
function
|
|
1328
|
+
function pe(e) {
|
|
1516
1329
|
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;
|
|
1517
1330
|
}
|
|
1518
|
-
const rt = 685,
|
|
1519
|
-
function
|
|
1331
|
+
const rt = 685, me = 627, ot = "cubic-bezier(0.22, 1, 0.36, 1)", lt = 200;
|
|
1332
|
+
function Ee(e, t) {
|
|
1520
1333
|
if (typeof window > "u") return t;
|
|
1521
1334
|
const r = window.getComputedStyle(document.documentElement).getPropertyValue(e).trim();
|
|
1522
1335
|
if (!r) return t;
|
|
@@ -1526,13 +1339,13 @@ function Se(e, t) {
|
|
|
1526
1339
|
function it(e, t) {
|
|
1527
1340
|
return typeof window > "u" ? t : window.getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
|
|
1528
1341
|
}
|
|
1529
|
-
function
|
|
1342
|
+
function U(e) {
|
|
1530
1343
|
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
|
|
1531
1344
|
}
|
|
1532
1345
|
function ct(e) {
|
|
1533
1346
|
const { mountEl: t, chromeEl: r, reducedMotion: l, onAssert: a } = e;
|
|
1534
1347
|
if (t == null || r == null) {
|
|
1535
|
-
|
|
1348
|
+
U(e), a?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
|
|
1536
1349
|
return;
|
|
1537
1350
|
}
|
|
1538
1351
|
if (l) {
|
|
@@ -1540,12 +1353,12 @@ function ct(e) {
|
|
|
1540
1353
|
return;
|
|
1541
1354
|
}
|
|
1542
1355
|
if (typeof r.animate != "function") {
|
|
1543
|
-
|
|
1356
|
+
U(e), a?.({ branch: "slide-no-waapi", timestamp: Date.now() });
|
|
1544
1357
|
return;
|
|
1545
1358
|
}
|
|
1546
1359
|
const i = r.cloneNode(!0);
|
|
1547
1360
|
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 });
|
|
1548
|
-
const u =
|
|
1361
|
+
const u = Ee("--panel-open-dur", rt), o = it("--panel-easing", ot), s = r.animate(
|
|
1549
1362
|
[{ transform: "translateY(100%)" }, { transform: "translateY(0)" }],
|
|
1550
1363
|
{ duration: u, easing: o, fill: "forwards" }
|
|
1551
1364
|
);
|
|
@@ -1560,10 +1373,10 @@ function ct(e) {
|
|
|
1560
1373
|
function dt(e) {
|
|
1561
1374
|
const { mountEl: t, onAssert: r } = e;
|
|
1562
1375
|
if (t == null) {
|
|
1563
|
-
e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() =>
|
|
1376
|
+
e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => U(e), me), r?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
|
|
1564
1377
|
return;
|
|
1565
1378
|
}
|
|
1566
|
-
const l =
|
|
1379
|
+
const l = Ee("--panel-close-dur", me);
|
|
1567
1380
|
let a = !1, i = null;
|
|
1568
1381
|
const u = (s) => {
|
|
1569
1382
|
s.target !== t || s.propertyName !== "max-height" || a || (a = !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() }));
|
|
@@ -1578,7 +1391,7 @@ function ut(e) {
|
|
|
1578
1391
|
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "blocked-dirty", timestamp: Date.now() });
|
|
1579
1392
|
return;
|
|
1580
1393
|
}
|
|
1581
|
-
const l =
|
|
1394
|
+
const l = pe(t.activeTrigger), a = pe(e.trigger);
|
|
1582
1395
|
if (!!t.activePanelId && l != null && l === a) {
|
|
1583
1396
|
ct(e);
|
|
1584
1397
|
return;
|
|
@@ -1587,14 +1400,14 @@ function ut(e) {
|
|
|
1587
1400
|
dt(e);
|
|
1588
1401
|
return;
|
|
1589
1402
|
}
|
|
1590
|
-
|
|
1403
|
+
U(e), r?.({ branch: "fresh-open", timestamp: Date.now() });
|
|
1591
1404
|
}
|
|
1592
1405
|
function pt() {
|
|
1593
1406
|
if (!(typeof window > "u"))
|
|
1594
1407
|
return window.__panelsAsserter;
|
|
1595
1408
|
}
|
|
1596
1409
|
function It() {
|
|
1597
|
-
const e = O(), t =
|
|
1410
|
+
const e = O(), t = he();
|
|
1598
1411
|
return D(
|
|
1599
1412
|
(r, l) => {
|
|
1600
1413
|
if (!e)
|
|
@@ -1616,10 +1429,10 @@ function It() {
|
|
|
1616
1429
|
[e, t]
|
|
1617
1430
|
);
|
|
1618
1431
|
}
|
|
1619
|
-
function
|
|
1432
|
+
function Rt({ children: e }) {
|
|
1620
1433
|
return /* @__PURE__ */ n("div", { className: "clone-stage", children: e });
|
|
1621
1434
|
}
|
|
1622
|
-
let
|
|
1435
|
+
let B = !1, j = null;
|
|
1623
1436
|
function ne() {
|
|
1624
1437
|
const e = [];
|
|
1625
1438
|
let t = "cleaned";
|
|
@@ -1644,21 +1457,21 @@ function ne() {
|
|
|
1644
1457
|
};
|
|
1645
1458
|
}
|
|
1646
1459
|
const Z = "8px 8px 0px", X = "64px", J = "inset(0px 0px 60px 0px)", ee = "inset(0px -40px -40px -40px)";
|
|
1647
|
-
function
|
|
1460
|
+
function v(e, t, r, l, a) {
|
|
1648
1461
|
return { id: e, constraint: t, expected: r, actual: l, pass: a };
|
|
1649
1462
|
}
|
|
1650
1463
|
function M(e) {
|
|
1651
1464
|
const t = parseInt(e, 10);
|
|
1652
1465
|
return Number.isFinite(t) ? t : NaN;
|
|
1653
1466
|
}
|
|
1654
|
-
function
|
|
1467
|
+
function re() {
|
|
1655
1468
|
const e = [], t = document.querySelector(".gloss-panel-mount"), r = t?.querySelector(".gloss-panel-chrome") ?? null, l = document.querySelector(".gloss-panel-coordinator") ?? document.querySelector("[data-panel-coordinator]"), a = document.querySelector(".bell-cutout"), i = document.querySelector(".bell-popover"), u = document.querySelector(".gloss-bottom-toolbar");
|
|
1656
1469
|
if (!t)
|
|
1657
|
-
e.push(
|
|
1470
|
+
e.push(v("C1", "mount --reveal-y matches clip-path inset-bottom Npx", "mount present", "absent", !1));
|
|
1658
1471
|
else {
|
|
1659
1472
|
const o = getComputedStyle(t), s = o.getPropertyValue("--reveal-y").trim() || t.style.getPropertyValue("--reveal-y").trim(), c = o.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, h = M(s), b = Number.isFinite(m) && Number.isFinite(h) && m === h;
|
|
1660
1473
|
e.push(
|
|
1661
|
-
|
|
1474
|
+
v(
|
|
1662
1475
|
"C1",
|
|
1663
1476
|
"mount --reveal-y matches clip-path inset-bottom Npx",
|
|
1664
1477
|
`inset(0 0 ${h}px 0) === --reveal-y(${h}px)`,
|
|
@@ -1668,19 +1481,19 @@ function oe() {
|
|
|
1668
1481
|
);
|
|
1669
1482
|
}
|
|
1670
1483
|
if (!t)
|
|
1671
|
-
e.push(
|
|
1484
|
+
e.push(v("C2", "mount padding constant", Z, "absent", !1));
|
|
1672
1485
|
else {
|
|
1673
1486
|
const o = t.style.padding, s = getComputedStyle(t), c = o || s.padding || "", d = c === Z || c === "8px 8px 0px 8px";
|
|
1674
|
-
e.push(
|
|
1487
|
+
e.push(v("C2", "mount padding constant", Z, c || "n/a", d));
|
|
1675
1488
|
}
|
|
1676
1489
|
if (!t)
|
|
1677
|
-
e.push(
|
|
1490
|
+
e.push(v("C3", "mount.bottom resolves to var(--tb-h)=64px", X, "absent", !1));
|
|
1678
1491
|
else {
|
|
1679
1492
|
const s = getComputedStyle(t).bottom || t.style.bottom || "", c = s === X;
|
|
1680
|
-
e.push(
|
|
1493
|
+
e.push(v("C3", "mount.bottom resolves to var(--tb-h)=64px", X, s || "n/a", c));
|
|
1681
1494
|
}
|
|
1682
1495
|
if (!r)
|
|
1683
|
-
e.push(
|
|
1496
|
+
e.push(v("C4", "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px", "formula match", "absent", !1));
|
|
1684
1497
|
else {
|
|
1685
1498
|
const o = getComputedStyle(r), s = M(
|
|
1686
1499
|
o.getPropertyValue("--row-h").trim() || r.style.getPropertyValue("--row-h").trim() || "0"
|
|
@@ -1688,7 +1501,7 @@ function oe() {
|
|
|
1688
1501
|
o.getPropertyValue("--row-gap").trim() || r.style.getPropertyValue("--row-gap").trim() || "0"
|
|
1689
1502
|
), d = s * 3 + c * 3 - 8, m = M(o.height || r.style.height || ""), h = Number.isFinite(s) && Number.isFinite(c) && Number.isFinite(m) && Number.isFinite(d) && m === d;
|
|
1690
1503
|
e.push(
|
|
1691
|
-
|
|
1504
|
+
v(
|
|
1692
1505
|
"C4",
|
|
1693
1506
|
"panel-chrome height formula = (row-h*3)+(row-gap*3)-8px",
|
|
1694
1507
|
`${d}px (rh=${s} rg=${c})`,
|
|
@@ -1699,7 +1512,7 @@ function oe() {
|
|
|
1699
1512
|
}
|
|
1700
1513
|
if (!l || !r)
|
|
1701
1514
|
e.push(
|
|
1702
|
-
|
|
1515
|
+
v(
|
|
1703
1516
|
"C5",
|
|
1704
1517
|
'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
|
|
1705
1518
|
"present",
|
|
@@ -1710,7 +1523,7 @@ function oe() {
|
|
|
1710
1523
|
else {
|
|
1711
1524
|
const o = getComputedStyle(l), s = getComputedStyle(r), c = o.perspective || l.style.perspective || "", d = (o.perspectiveOrigin || l.style.perspectiveOrigin || "").trim(), m = s.perspectiveStyle || r.style.perspectiveStyle || "", _ = c !== "" && c !== "none" && (d === "center bottom" || d === "50% 100%") && m === "flat";
|
|
1712
1525
|
e.push(
|
|
1713
|
-
|
|
1526
|
+
v(
|
|
1714
1527
|
"C5",
|
|
1715
1528
|
'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
|
|
1716
1529
|
"perspective:not-none, origin:center bottom, chrome-style:flat",
|
|
@@ -1731,8 +1544,8 @@ function oe() {
|
|
|
1731
1544
|
}
|
|
1732
1545
|
for (const m of d)
|
|
1733
1546
|
if (m.name === "stage-spin") {
|
|
1734
|
-
const b = Array.from(m.cssRules), p = b.find((N) => N.keyText === "0%" || N.keyText === "from"), _ = b.find((N) => N.keyText === "100%" || N.keyText === "to"),
|
|
1735
|
-
o =
|
|
1547
|
+
const b = Array.from(m.cssRules), p = b.find((N) => N.keyText === "0%" || N.keyText === "from"), _ = b.find((N) => N.keyText === "100%" || N.keyText === "to"), P = p?.style.transform ?? "", E = _?.style.transform ?? "", y = /rotateY\(\s*0(?:deg)?\s*\)/;
|
|
1548
|
+
o = y.test(P) && y.test(E), s = `0%=${P || "n/a"} 100%=${E || "n/a"}`;
|
|
1736
1549
|
break;
|
|
1737
1550
|
}
|
|
1738
1551
|
if (s !== "absent") break;
|
|
@@ -1741,7 +1554,7 @@ function oe() {
|
|
|
1741
1554
|
s = "inspection-error";
|
|
1742
1555
|
}
|
|
1743
1556
|
e.push(
|
|
1744
|
-
|
|
1557
|
+
v(
|
|
1745
1558
|
"C6",
|
|
1746
1559
|
"@keyframes stage-spin 0% AND 100% anchor at rotateY(0)",
|
|
1747
1560
|
"both frames rotateY(0)",
|
|
@@ -1753,15 +1566,15 @@ function oe() {
|
|
|
1753
1566
|
{
|
|
1754
1567
|
const o = document.documentElement, s = getComputedStyle(o), c = s.getPropertyValue("--panel-open-dur").trim() || o.style.getPropertyValue("--panel-open-dur").trim(), d = s.getPropertyValue("--panel-close-dur").trim() || o.style.getPropertyValue("--panel-close-dur").trim(), m = M(c) || parseFloat(c) * (c.endsWith("s") && !c.endsWith("ms") ? 1e3 : 1), h = M(d) || parseFloat(d) * (d.endsWith("s") && !d.endsWith("ms") ? 1e3 : 1), b = Number.isFinite(m) && Number.isFinite(h) && m > h;
|
|
1755
1568
|
e.push(
|
|
1756
|
-
|
|
1569
|
+
v("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${c || "n/a"} close=${d || "n/a"}`, b)
|
|
1757
1570
|
);
|
|
1758
1571
|
}
|
|
1759
1572
|
if (!a)
|
|
1760
|
-
e.push(
|
|
1573
|
+
e.push(v("C8", "BellCutout zero computed animation/transition", "no inline timing", "absent", !1));
|
|
1761
1574
|
else {
|
|
1762
1575
|
const o = getComputedStyle(a), s = o.animationName || "", c = o.transitionProperty || "", d = (s === "" || s === "none") && (c === "" || c === "none" || c === "all");
|
|
1763
1576
|
e.push(
|
|
1764
|
-
|
|
1577
|
+
v(
|
|
1765
1578
|
"C8",
|
|
1766
1579
|
"BellCutout zero computed animation/transition",
|
|
1767
1580
|
"animation:none AND transition:none",
|
|
@@ -1771,17 +1584,17 @@ function oe() {
|
|
|
1771
1584
|
);
|
|
1772
1585
|
}
|
|
1773
1586
|
if (!t)
|
|
1774
|
-
e.push(
|
|
1587
|
+
e.push(v("C9", "mount closed-state clipPath", J, "absent", !1));
|
|
1775
1588
|
else {
|
|
1776
1589
|
const o = t.style.clipPath, s = getComputedStyle(t), c = o || s.clipPath || "", d = c === J;
|
|
1777
|
-
e.push(
|
|
1590
|
+
e.push(v("C9", "mount closed-state clipPath", J, c || "n/a", d));
|
|
1778
1591
|
}
|
|
1779
1592
|
if (!i)
|
|
1780
|
-
e.push(
|
|
1593
|
+
e.push(v("C10", "bell-popover parentElement === document.body (open)", "body", "absent", !1));
|
|
1781
1594
|
else {
|
|
1782
1595
|
const o = i.parentElement, s = o === document.body;
|
|
1783
1596
|
e.push(
|
|
1784
|
-
|
|
1597
|
+
v(
|
|
1785
1598
|
"C10",
|
|
1786
1599
|
"bell-popover parentElement === document.body (open)",
|
|
1787
1600
|
"body",
|
|
@@ -1791,19 +1604,19 @@ function oe() {
|
|
|
1791
1604
|
);
|
|
1792
1605
|
}
|
|
1793
1606
|
if (!l)
|
|
1794
|
-
e.push(
|
|
1607
|
+
e.push(v("C11", "coordinator overflow === visible", "visible", "absent", !1));
|
|
1795
1608
|
else {
|
|
1796
1609
|
const s = getComputedStyle(l).overflow || l.style.overflow || "", c = s === "visible";
|
|
1797
|
-
e.push(
|
|
1610
|
+
e.push(v("C11", "coordinator overflow === visible", "visible", s || "n/a", c));
|
|
1798
1611
|
}
|
|
1799
1612
|
if (!u)
|
|
1800
|
-
e.push(
|
|
1613
|
+
e.push(v("C12", "toolbar clipPath = inset(0 -40 -40 -40)", ee, "absent", !1));
|
|
1801
1614
|
else {
|
|
1802
1615
|
const o = u.style.clipPath, s = getComputedStyle(u), c = o || s.clipPath || "", d = c === ee;
|
|
1803
|
-
e.push(
|
|
1616
|
+
e.push(v("C12", "toolbar clipPath = inset(0 -40 -40 -40)", ee, c || "n/a", d));
|
|
1804
1617
|
}
|
|
1805
1618
|
return e.push(
|
|
1806
|
-
|
|
1619
|
+
v(
|
|
1807
1620
|
"C13",
|
|
1808
1621
|
"same-position slide via WAAPI (mid-transition getAnimations().length > 0)",
|
|
1809
1622
|
"WAAPI driver wired in orchestrator (source-proof)",
|
|
@@ -1811,7 +1624,7 @@ function oe() {
|
|
|
1811
1624
|
"wiring_only"
|
|
1812
1625
|
)
|
|
1813
1626
|
), e.push(
|
|
1814
|
-
|
|
1627
|
+
v(
|
|
1815
1628
|
"C14",
|
|
1816
1629
|
'cross-position handoff transitionend filtered by propertyName="max-height"',
|
|
1817
1630
|
"transitionend filter wired in orchestrator (source-proof)",
|
|
@@ -1821,7 +1634,7 @@ function oe() {
|
|
|
1821
1634
|
), e;
|
|
1822
1635
|
}
|
|
1823
1636
|
function mt(e) {
|
|
1824
|
-
return
|
|
1637
|
+
return re().find((t) => t.id === e);
|
|
1825
1638
|
}
|
|
1826
1639
|
function ht() {
|
|
1827
1640
|
const e = ne();
|
|
@@ -1833,84 +1646,84 @@ function ht() {
|
|
|
1833
1646
|
actual: `valid=${e.valid} mount=${e.mount} chrome=${e.chrome} frozen=${e.frozen} orphans=[${e.orphans.join(",")}]`,
|
|
1834
1647
|
pass: e.valid
|
|
1835
1648
|
}
|
|
1836
|
-
], cc:
|
|
1649
|
+
], cc: re() };
|
|
1837
1650
|
}
|
|
1838
1651
|
function ft() {
|
|
1839
1652
|
return {
|
|
1840
1653
|
enable: gt,
|
|
1841
1654
|
disable: bt,
|
|
1842
|
-
isEnabled: () =>
|
|
1655
|
+
isEnabled: () => B,
|
|
1843
1656
|
getLastReport: () => j,
|
|
1844
1657
|
recordTransition: (e) => {
|
|
1845
|
-
|
|
1658
|
+
B && (j = { ...e, ...ne() });
|
|
1846
1659
|
},
|
|
1847
1660
|
assertOnce: () => {
|
|
1848
1661
|
const e = ne();
|
|
1849
1662
|
return j = e, e;
|
|
1850
1663
|
},
|
|
1851
|
-
assertCcOnly:
|
|
1664
|
+
assertCcOnly: re,
|
|
1852
1665
|
getCcRowById: mt,
|
|
1853
1666
|
assertPanelTruths: ht
|
|
1854
1667
|
};
|
|
1855
1668
|
}
|
|
1856
1669
|
function gt() {
|
|
1857
|
-
if (
|
|
1670
|
+
if (B = !0, typeof window > "u") return;
|
|
1858
1671
|
window.__panelsAsserter || (window.__panelsAsserter = ft(), console.info(
|
|
1859
1672
|
"[panels] asserter enabled (P3b Q12-12 + P6 W5 cc:C1..C14). Inspect via window.__panelsAsserter."
|
|
1860
1673
|
));
|
|
1861
1674
|
}
|
|
1862
1675
|
function bt() {
|
|
1863
|
-
|
|
1676
|
+
B = !1;
|
|
1864
1677
|
}
|
|
1865
1678
|
export {
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1679
|
+
zt as COMMITS,
|
|
1680
|
+
xt as CatalogAddShell,
|
|
1681
|
+
At as CatalogFooter,
|
|
1869
1682
|
kt as CatalogReplaceShell,
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1683
|
+
ae as CatalogStateContext,
|
|
1684
|
+
Ue as CloneCard,
|
|
1685
|
+
Rt as CloneStage,
|
|
1873
1686
|
ye as MOCK_DEFAULT_LENS,
|
|
1874
|
-
|
|
1875
|
-
|
|
1687
|
+
be as MOCK_LENSES,
|
|
1688
|
+
ve as MOCK_LENS_META,
|
|
1876
1689
|
et as MOCK_PAGES,
|
|
1877
1690
|
_e as MOCK_TILES_BY_LENS,
|
|
1878
|
-
|
|
1691
|
+
Ht as NotificationCenterShell,
|
|
1879
1692
|
Lt as PANEL_IDS,
|
|
1880
1693
|
Je as PageMgmtFooter,
|
|
1881
1694
|
Dt as PageMgmtShell,
|
|
1882
1695
|
Ne as PageMgmtStateContext,
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1696
|
+
Ut as PanelBody,
|
|
1697
|
+
Bt as PanelChrome,
|
|
1698
|
+
Y as PanelChromeV2,
|
|
1699
|
+
Yt as PanelFooter,
|
|
1700
|
+
Pt as PanelFooterMessage,
|
|
1701
|
+
Vt as PanelHeader,
|
|
1702
|
+
Kt as PanelHost,
|
|
1890
1703
|
Ot as PanelHostShell,
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1704
|
+
Ae as PanelMount,
|
|
1705
|
+
qt as PanelNavigation,
|
|
1706
|
+
Qt as PanelProvider,
|
|
1894
1707
|
Mt as PanelSlot,
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1708
|
+
Wt as PanelStage,
|
|
1709
|
+
Tt as SettingsShell,
|
|
1710
|
+
re as assertCcOnly,
|
|
1898
1711
|
ne as assertPanelDomShape,
|
|
1899
1712
|
ht as assertPanelTruths,
|
|
1900
|
-
|
|
1713
|
+
Gt as deriveSurfaceState,
|
|
1901
1714
|
bt as disablePanelAsserter,
|
|
1902
1715
|
gt as enablePanelAsserter,
|
|
1903
1716
|
mt as getCcRowById,
|
|
1904
1717
|
jt as initialState,
|
|
1905
|
-
|
|
1718
|
+
pe as positionKey,
|
|
1906
1719
|
Zt as reducer,
|
|
1907
1720
|
ut as transitionToPanel,
|
|
1908
|
-
|
|
1721
|
+
se as useCatalogState,
|
|
1909
1722
|
wt as useEditingCardId,
|
|
1910
|
-
|
|
1911
|
-
|
|
1723
|
+
Se as usePageMgmtState,
|
|
1724
|
+
Te as usePanelContext,
|
|
1912
1725
|
O as usePanelContextOptional,
|
|
1913
1726
|
Xt as usePanelCoordinator,
|
|
1914
|
-
|
|
1727
|
+
he as useReducedMotionPanel,
|
|
1915
1728
|
It as useTransitionToPanel
|
|
1916
1729
|
};
|