@mt-gloss/ui 0.1.122 → 0.1.124
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/{COMMITS-C1VHNgld.js → COMMITS-DlJB1KcF.js} +177 -182
- package/composites-panels.js +510 -703
- package/index.d.ts +2 -4
- package/index.js +969 -1014
- package/lib/composites/panels/index.d.ts +0 -2
- package/lib/composites/panels/shells/internals/catalog-mocks.d.ts +21 -14
- package/package.json +1 -1
- package/ui.css +1 -1
package/composites-panels.js
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { u as
|
|
2
|
-
import { C as
|
|
3
|
-
import { jsx 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 M, g as he, h as Y, f as we, S as Te, b as Pe, j as Ae } from "./COMMITS-DlJB1KcF.js";
|
|
2
|
+
import { C as zt, N as Ht, n as Ut, o as Bt, k as Yt, c as Vt, m as Kt, P as qt, l as Qt, e as Wt, i as Gt, r as jt, d as Zt } from "./COMMITS-DlJB1KcF.js";
|
|
3
|
+
import { jsx as a, 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 L, useLayoutEffect as xe } from "react";
|
|
5
|
+
import { useSensors as ke, useSensor as ie, PointerSensor as De, KeyboardSensor as Le, DndContext as Me, closestCenter as Oe } 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
|
-
const e =
|
|
10
|
+
const e = M();
|
|
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
|
|
16
|
-
const l = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" "),
|
|
17
|
-
return /* @__PURE__ */
|
|
15
|
+
function Ue({ span: e, rotating: t = !0, children: r }) {
|
|
16
|
+
const l = ["clone-card", `span-${e}`, t ? "rotating" : ""].filter(Boolean).join(" "), n = r != null ? "full" : "fallback";
|
|
17
|
+
return /* @__PURE__ */ a("div", { className: l, "data-clone-fidelity": n, children: r });
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function Tt({ primary: e, secondary: t }) {
|
|
20
20
|
return /* @__PURE__ */ f("div", { className: "gloss-panel-chrome-v2__footer-msg", children: [
|
|
21
|
-
/* @__PURE__ */
|
|
22
|
-
t != null && /* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ a("span", { className: "gloss-panel-chrome-v2__footer-msg-primary", children: e }),
|
|
22
|
+
t != null && /* @__PURE__ */ a("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,
|
|
29
29
|
onToggleEnabled: l
|
|
30
30
|
}) {
|
|
31
|
-
const
|
|
31
|
+
const n = "settings-threshold-enabled";
|
|
32
32
|
return /* @__PURE__ */ f("div", { className: "settings-shell__field settings-shell__field--threshold", children: [
|
|
33
33
|
/* @__PURE__ */ f("div", { className: "settings-shell__toggle-row", children: [
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ a("label", { htmlFor: n, className: "settings-shell__toggle-label", children: "Show threshold indicator" }),
|
|
35
|
+
/* @__PURE__ */ a(
|
|
36
36
|
"input",
|
|
37
37
|
{
|
|
38
|
-
id:
|
|
38
|
+
id: n,
|
|
39
39
|
type: "checkbox",
|
|
40
40
|
role: "switch",
|
|
41
41
|
"aria-label": "Enable threshold indicator",
|
|
@@ -46,10 +46,10 @@ function Ve({
|
|
|
46
46
|
}
|
|
47
47
|
)
|
|
48
48
|
] }),
|
|
49
|
-
r ? /* @__PURE__ */ f(
|
|
50
|
-
/* @__PURE__ */
|
|
49
|
+
r ? /* @__PURE__ */ f(V, { children: [
|
|
50
|
+
/* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Alert level (%)" }),
|
|
51
51
|
/* @__PURE__ */ f("div", { className: "settings-shell__slider-row", children: [
|
|
52
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ a(
|
|
53
53
|
"input",
|
|
54
54
|
{
|
|
55
55
|
id: "settings-threshold-input",
|
|
@@ -70,14 +70,14 @@ function Ve({
|
|
|
70
70
|
"%"
|
|
71
71
|
] })
|
|
72
72
|
] })
|
|
73
|
-
] }) : /* @__PURE__ */
|
|
73
|
+
] }) : /* @__PURE__ */ a("p", { className: "settings-shell__help", "aria-live": "polite", children: "Off — the card uses its default styling. Turn on to tint values below the threshold." })
|
|
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
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ a("span", { className: "settings-shell__label", "aria-hidden": "true", children: "Rolling period (days)" }),
|
|
79
79
|
/* @__PURE__ */ f("div", { className: "settings-shell__slider-row", children: [
|
|
80
|
-
/* @__PURE__ */
|
|
80
|
+
/* @__PURE__ */ a(
|
|
81
81
|
"input",
|
|
82
82
|
{
|
|
83
83
|
id: "settings-timeframe-input",
|
|
@@ -100,20 +100,20 @@ function Be({ value: e, onChange: t }) {
|
|
|
100
100
|
] })
|
|
101
101
|
] });
|
|
102
102
|
}
|
|
103
|
-
function
|
|
104
|
-
const { attributes: r, listeners: l, setNodeRef:
|
|
105
|
-
transform:
|
|
103
|
+
function Ve({ id: e, onRemove: t }) {
|
|
104
|
+
const { attributes: r, listeners: l, setNodeRef: n, 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
|
};
|
|
109
109
|
return /* @__PURE__ */ f(
|
|
110
110
|
"li",
|
|
111
111
|
{
|
|
112
|
-
ref:
|
|
112
|
+
ref: n,
|
|
113
113
|
style: s,
|
|
114
114
|
className: `settings-shell__slot-pill${o ? " settings-shell__slot-pill--dragging" : ""}`,
|
|
115
115
|
children: [
|
|
116
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ a(
|
|
117
117
|
"button",
|
|
118
118
|
{
|
|
119
119
|
type: "button",
|
|
@@ -121,11 +121,11 @@ function Ke({ id: e, onRemove: t }) {
|
|
|
121
121
|
"aria-label": `Reorder ${e}`,
|
|
122
122
|
...r,
|
|
123
123
|
...l,
|
|
124
|
-
children: /* @__PURE__ */
|
|
124
|
+
children: /* @__PURE__ */ a("span", { "aria-hidden": "true", className: "settings-shell__slot-pill__grip", children: "⋮⋮" })
|
|
125
125
|
}
|
|
126
126
|
),
|
|
127
|
-
/* @__PURE__ */
|
|
128
|
-
/* @__PURE__ */
|
|
127
|
+
/* @__PURE__ */ a("span", { className: "settings-shell__slot-pill__label", children: e }),
|
|
128
|
+
/* @__PURE__ */ a(
|
|
129
129
|
"button",
|
|
130
130
|
{
|
|
131
131
|
type: "button",
|
|
@@ -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), [n, 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,26 +152,26 @@ 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__ */
|
|
156
|
-
e.length === 0 &&
|
|
157
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ a(Me, { sensors: r, collisionDetection: Oe, onDragEnd: u, children: /* @__PURE__ */ a(Re, { items: [...e], strategy: $e, children: /* @__PURE__ */ a("ul", { className: "settings-shell__slots-list", role: "list", children: e.map((s) => /* @__PURE__ */ a(Ve, { id: s, onRemove: () => o(s) }, s)) }) }) }),
|
|
156
|
+
e.length === 0 && n && /* @__PURE__ */ a("p", { className: "settings-shell__help", children: "All slots removed. Apply to commit, or Reset to restore." }),
|
|
157
|
+
/* @__PURE__ */ a("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,
|
|
165
165
|
onToggleEnabled: l
|
|
166
166
|
}) {
|
|
167
|
-
const
|
|
167
|
+
const n = "settings-accent-enabled";
|
|
168
168
|
return /* @__PURE__ */ f("div", { className: "settings-shell__field settings-shell__field--color", role: "group", "aria-label": "Accent color", children: [
|
|
169
169
|
/* @__PURE__ */ f("div", { className: "settings-shell__toggle-row", children: [
|
|
170
|
-
/* @__PURE__ */
|
|
171
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ a("label", { htmlFor: n, className: "settings-shell__toggle-label", children: "Override default accent" }),
|
|
171
|
+
/* @__PURE__ */ a(
|
|
172
172
|
"input",
|
|
173
173
|
{
|
|
174
|
-
id:
|
|
174
|
+
id: n,
|
|
175
175
|
type: "checkbox",
|
|
176
176
|
role: "switch",
|
|
177
177
|
"aria-label": "Enable accent override",
|
|
@@ -182,11 +182,11 @@ function Ge({
|
|
|
182
182
|
}
|
|
183
183
|
)
|
|
184
184
|
] }),
|
|
185
|
-
r ? /* @__PURE__ */ f(
|
|
186
|
-
/* @__PURE__ */
|
|
187
|
-
/* @__PURE__ */
|
|
185
|
+
r ? /* @__PURE__ */ f(V, { children: [
|
|
186
|
+
/* @__PURE__ */ a("span", { className: "settings-shell__label", children: "Accent color" }),
|
|
187
|
+
/* @__PURE__ */ a("div", { className: "settings-shell__swatch-row", children: qe.map((i) => {
|
|
188
188
|
const u = e === i;
|
|
189
|
-
return /* @__PURE__ */
|
|
189
|
+
return /* @__PURE__ */ a(
|
|
190
190
|
"button",
|
|
191
191
|
{
|
|
192
192
|
type: "button",
|
|
@@ -199,57 +199,57 @@ function Ge({
|
|
|
199
199
|
i
|
|
200
200
|
);
|
|
201
201
|
}) })
|
|
202
|
-
] }) : /* @__PURE__ */
|
|
202
|
+
] }) : /* @__PURE__ */ a("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
|
|
205
|
+
const We = ["Orders", "Quota", "Unassigned"], Ge = ["threshold", "timeframe", "color"];
|
|
206
206
|
function Pt({
|
|
207
207
|
isOpen: e,
|
|
208
208
|
cardSpan: t,
|
|
209
209
|
cardLabel: r = "Metric",
|
|
210
210
|
cardValue: l = "—",
|
|
211
|
-
previewSlot:
|
|
212
|
-
dimensions: i =
|
|
211
|
+
previewSlot: n,
|
|
212
|
+
dimensions: i = Ge,
|
|
213
213
|
initialTab: u,
|
|
214
214
|
initialValues: o
|
|
215
215
|
}) {
|
|
216
|
-
const s =
|
|
217
|
-
|
|
218
|
-
i.includes(_) ||
|
|
216
|
+
const s = M(), 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", [_, T] = H.useState(u ?? p);
|
|
217
|
+
H.useEffect(() => {
|
|
218
|
+
i.includes(_) || T(p);
|
|
219
219
|
}, [i, _, p]);
|
|
220
|
-
const
|
|
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, D = typeof y.accentEnabled == "boolean" ? y.accentEnabled : typeof o?.accentEnabled == "boolean" ? o.accentEnabled : !1, q = (P) => {
|
|
221
221
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "threshold", value: Number(P.target.value) });
|
|
222
|
-
},
|
|
222
|
+
}, Q = (P) => {
|
|
223
223
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "timeframe", value: Number(P.target.value) });
|
|
224
|
-
},
|
|
224
|
+
}, oe = (P) => {
|
|
225
225
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accent", value: P });
|
|
226
|
-
},
|
|
226
|
+
}, W = (P) => {
|
|
227
227
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "slots", value: P });
|
|
228
|
-
},
|
|
228
|
+
}, G = (P) => {
|
|
229
229
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "thresholdEnabled", value: P });
|
|
230
230
|
}, g = (P) => {
|
|
231
231
|
d == null || s == null || s.dispatch({ type: "SET_BUFFER_VALUE", cardId: d, key: "accentEnabled", value: P });
|
|
232
232
|
}, C = s?.state.isDirty ?? !1, w = d;
|
|
233
|
-
return /* @__PURE__ */
|
|
234
|
-
|
|
233
|
+
return /* @__PURE__ */ a(
|
|
234
|
+
Y,
|
|
235
235
|
{
|
|
236
236
|
variant: "with-stage",
|
|
237
237
|
onClose: () => s?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }),
|
|
238
|
-
stage: /* @__PURE__ */
|
|
239
|
-
/* @__PURE__ */
|
|
240
|
-
/* @__PURE__ */
|
|
238
|
+
stage: /* @__PURE__ */ a(Ue, { span: b, rotating: !m, children: n ?? /* @__PURE__ */ f(V, { children: [
|
|
239
|
+
/* @__PURE__ */ a("div", { style: { fontSize: 9, textTransform: "uppercase", letterSpacing: "0.06em", color: "#9ca3af", marginBottom: 6 }, children: r }),
|
|
240
|
+
/* @__PURE__ */ a("div", { style: { fontSize: 22, fontWeight: 700, color: "#111827", lineHeight: 1 }, children: l })
|
|
241
241
|
] }) }),
|
|
242
|
-
navigation: /* @__PURE__ */
|
|
242
|
+
navigation: /* @__PURE__ */ a(
|
|
243
243
|
we,
|
|
244
244
|
{
|
|
245
245
|
dimensions: i,
|
|
246
246
|
activeTab: _,
|
|
247
|
-
onSelect:
|
|
247
|
+
onSelect: T,
|
|
248
248
|
reduced: m
|
|
249
249
|
}
|
|
250
250
|
),
|
|
251
251
|
footer: {
|
|
252
|
-
left: /* @__PURE__ */
|
|
252
|
+
left: /* @__PURE__ */ a(
|
|
253
253
|
"button",
|
|
254
254
|
{
|
|
255
255
|
id: "btn-reset",
|
|
@@ -262,7 +262,7 @@ function Pt({
|
|
|
262
262
|
children: "Reset"
|
|
263
263
|
}
|
|
264
264
|
),
|
|
265
|
-
right: /* @__PURE__ */
|
|
265
|
+
right: /* @__PURE__ */ a(
|
|
266
266
|
"button",
|
|
267
267
|
{
|
|
268
268
|
id: "settings-apply",
|
|
@@ -274,7 +274,7 @@ function Pt({
|
|
|
274
274
|
}
|
|
275
275
|
)
|
|
276
276
|
},
|
|
277
|
-
children: /* @__PURE__ */
|
|
277
|
+
children: /* @__PURE__ */ a("div", { className: "settings-shell", "data-shell": "settings", "aria-hidden": !e, children: /* @__PURE__ */ f(
|
|
278
278
|
"div",
|
|
279
279
|
{
|
|
280
280
|
role: "tabpanel",
|
|
@@ -283,23 +283,23 @@ function Pt({
|
|
|
283
283
|
tabIndex: 0,
|
|
284
284
|
className: "settings-shell__tabpanel",
|
|
285
285
|
children: [
|
|
286
|
-
_ === "threshold" && /* @__PURE__ */
|
|
287
|
-
|
|
286
|
+
_ === "threshold" && /* @__PURE__ */ a(
|
|
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__ */
|
|
296
|
-
_ === "slots" && /* @__PURE__ */
|
|
297
|
-
_ === "color" && /* @__PURE__ */
|
|
298
|
-
|
|
295
|
+
_ === "timeframe" && /* @__PURE__ */ a(Ye, { value: I, onChange: Q }),
|
|
296
|
+
_ === "slots" && /* @__PURE__ */ a(Ke, { value: $, onChange: W }),
|
|
297
|
+
_ === "color" && /* @__PURE__ */ a(
|
|
298
|
+
Qe,
|
|
299
299
|
{
|
|
300
|
-
value:
|
|
301
|
-
onSelect:
|
|
302
|
-
enabled:
|
|
300
|
+
value: R,
|
|
301
|
+
onSelect: oe,
|
|
302
|
+
enabled: D,
|
|
303
303
|
onToggleEnabled: g
|
|
304
304
|
}
|
|
305
305
|
)
|
|
@@ -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."
|
|
324
|
-
},
|
|
325
|
-
"What's selling": {
|
|
326
|
-
headline: "What's selling right now?",
|
|
327
|
-
helper: "Velocity leaders and sleepers across your assortment."
|
|
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."
|
|
328
323
|
},
|
|
329
|
-
"
|
|
330
|
-
headline: "
|
|
331
|
-
helper: "
|
|
324
|
+
"Order flow": {
|
|
325
|
+
headline: "Are orders flowing through?",
|
|
326
|
+
helper: "Daily activity, pipeline, unassigned work, and cancel-rate health."
|
|
332
327
|
},
|
|
333
|
-
"
|
|
334
|
-
headline: "
|
|
335
|
-
helper: "
|
|
328
|
+
"Rep performance": {
|
|
329
|
+
headline: "How are my reps performing?",
|
|
330
|
+
helper: "Quota attainment, leaderboards, and activity flags across the rep team."
|
|
336
331
|
},
|
|
337
|
-
"
|
|
338
|
-
headline: "
|
|
339
|
-
helper: "
|
|
332
|
+
"Brand portfolio": {
|
|
333
|
+
headline: "Which brands matter?",
|
|
334
|
+
helper: "Manufacturer mix, top performers, and emerging line health."
|
|
340
335
|
},
|
|
341
|
-
"
|
|
342
|
-
headline: "
|
|
343
|
-
helper: "
|
|
336
|
+
"Account coverage": {
|
|
337
|
+
headline: "Where are the gaps?",
|
|
338
|
+
helper: "New, active, inactive, and at-risk customer accounts."
|
|
344
339
|
},
|
|
345
|
-
|
|
346
|
-
headline: "
|
|
347
|
-
helper: "
|
|
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: {
|
|
353
|
-
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": {
|
|
344
|
+
}, _e = {
|
|
345
|
+
Revenue: {
|
|
409
346
|
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
|
-
"
|
|
737
|
-
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": {
|
|
563
|
+
"Account coverage": {
|
|
760
564
|
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,10 +631,10 @@ function Ce({
|
|
|
818
631
|
activeLens: t,
|
|
819
632
|
onLensChange: r,
|
|
820
633
|
variant: l = "pills",
|
|
821
|
-
lensMeta:
|
|
634
|
+
lensMeta: n = ve
|
|
822
635
|
}) {
|
|
823
|
-
return l === "pills" ? /* @__PURE__ */
|
|
824
|
-
const u = i === t, o =
|
|
636
|
+
return l === "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) => {
|
|
637
|
+
const u = i === t, o = n[i], s = ["cat-pill"];
|
|
825
638
|
return u && s.push("active"), /* @__PURE__ */ f(
|
|
826
639
|
"button",
|
|
827
640
|
{
|
|
@@ -835,25 +648,25 @@ function Ce({
|
|
|
835
648
|
},
|
|
836
649
|
children: [
|
|
837
650
|
i,
|
|
838
|
-
o?.beta && /* @__PURE__ */
|
|
651
|
+
o?.beta && /* @__PURE__ */ a("span", { className: "cat-pill-beta", "aria-label": "Beta", children: "BETA" })
|
|
839
652
|
]
|
|
840
653
|
},
|
|
841
654
|
i
|
|
842
655
|
);
|
|
843
|
-
}) }) }) : /* @__PURE__ */
|
|
656
|
+
}) }) }) : /* @__PURE__ */ a(je, { lenses: e, activeLens: t, onLensChange: r });
|
|
844
657
|
}
|
|
845
658
|
function je({
|
|
846
659
|
lenses: e,
|
|
847
660
|
activeLens: t,
|
|
848
661
|
onLensChange: r
|
|
849
662
|
}) {
|
|
850
|
-
const [l,
|
|
663
|
+
const [l, n] = A(!1), i = K(null), u = () => {
|
|
851
664
|
i.current != null && (window.clearTimeout(i.current), i.current = null);
|
|
852
665
|
}, o = () => {
|
|
853
|
-
u(), i.current = window.setTimeout(() =>
|
|
666
|
+
u(), i.current = window.setTimeout(() => n(!1), 100);
|
|
854
667
|
}, s = e.filter((c) => c !== t);
|
|
855
|
-
return /* @__PURE__ */
|
|
856
|
-
/* @__PURE__ */
|
|
668
|
+
return /* @__PURE__ */ a("div", { className: "cat-segmented-wrap", children: /* @__PURE__ */ f("div", { className: "cat-segmented", children: [
|
|
669
|
+
/* @__PURE__ */ a(
|
|
857
670
|
"button",
|
|
858
671
|
{
|
|
859
672
|
type: "button",
|
|
@@ -868,26 +681,26 @@ function je({
|
|
|
868
681
|
{
|
|
869
682
|
className: "cat-seg-more",
|
|
870
683
|
onMouseEnter: () => {
|
|
871
|
-
u(),
|
|
684
|
+
u(), n(!0);
|
|
872
685
|
},
|
|
873
686
|
onMouseLeave: o,
|
|
874
687
|
children: [
|
|
875
|
-
/* @__PURE__ */
|
|
876
|
-
l && /* @__PURE__ */
|
|
688
|
+
/* @__PURE__ */ a("button", { type: "button", className: "cat-seg cat-seg-more-btn", "aria-haspopup": "menu", "aria-expanded": l, children: "More ▾" }),
|
|
689
|
+
l && /* @__PURE__ */ a(
|
|
877
690
|
"div",
|
|
878
691
|
{
|
|
879
692
|
className: "cat-seg-overflow",
|
|
880
693
|
role: "menu",
|
|
881
694
|
onMouseEnter: u,
|
|
882
695
|
onMouseLeave: o,
|
|
883
|
-
children: s.map((c) => /* @__PURE__ */
|
|
696
|
+
children: s.map((c) => /* @__PURE__ */ a(
|
|
884
697
|
"button",
|
|
885
698
|
{
|
|
886
699
|
type: "button",
|
|
887
700
|
"data-lens": c,
|
|
888
701
|
role: "menuitem",
|
|
889
702
|
onClick: () => {
|
|
890
|
-
r(c),
|
|
703
|
+
r(c), n(!1);
|
|
891
704
|
},
|
|
892
705
|
children: c
|
|
893
706
|
},
|
|
@@ -901,16 +714,16 @@ function je({
|
|
|
901
714
|
] }) });
|
|
902
715
|
}
|
|
903
716
|
function te({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: l }) {
|
|
904
|
-
return /* @__PURE__ */
|
|
905
|
-
const i =
|
|
717
|
+
return /* @__PURE__ */ a("div", { className: "cat-tiles", children: e.map((n) => {
|
|
718
|
+
const i = n.id === t, u = n.subStats != null && n.subStats.length > 0;
|
|
906
719
|
let o = null;
|
|
907
|
-
u ?
|
|
720
|
+
u ? n.subStats.length === 5 ? o = "span-5" : n.subStats.length === 3 ? o = "span-3" : o = "span-2" : n.stack === !0 && (o = "span-2");
|
|
908
721
|
const s = ["cat-tile"];
|
|
909
|
-
o && s.push(o), i && s.push("selected"),
|
|
722
|
+
o && s.push(o), i && s.push("selected"), n.isNew && s.push("is-new"), n.startHere && s.push("start-here"), n.donut && s.push("has-donut");
|
|
910
723
|
const c = 1;
|
|
911
724
|
let d = 0.7;
|
|
912
|
-
if (
|
|
913
|
-
const m = /([\d.]+)\s*%/.exec(
|
|
725
|
+
if (n.donut) {
|
|
726
|
+
const m = /([\d.]+)\s*%/.exec(n.value);
|
|
914
727
|
if (m) {
|
|
915
728
|
const h = parseFloat(m[1]);
|
|
916
729
|
Number.isFinite(h) && (d = Math.max(0, Math.min(1, h / 100)));
|
|
@@ -921,66 +734,66 @@ function te({ tiles: e, selectedTileId: t, onSelectTile: r, renderTile: l }) {
|
|
|
921
734
|
{
|
|
922
735
|
type: "button",
|
|
923
736
|
className: s.join(" "),
|
|
924
|
-
"data-metric":
|
|
925
|
-
"data-desc":
|
|
737
|
+
"data-metric": n.id,
|
|
738
|
+
"data-desc": n.desc,
|
|
926
739
|
"data-col-span": String(c),
|
|
927
|
-
"data-donut":
|
|
928
|
-
"data-accent":
|
|
740
|
+
"data-donut": n.donut ? "true" : void 0,
|
|
741
|
+
"data-accent": n.accent,
|
|
929
742
|
"aria-pressed": i,
|
|
930
|
-
onClick: () => r(
|
|
931
|
-
style:
|
|
743
|
+
onClick: () => r(n.id, n.desc),
|
|
744
|
+
style: n.accent ? { "--cat-tile-accent": n.accent } : void 0,
|
|
932
745
|
children: [
|
|
933
|
-
|
|
934
|
-
l ? l(
|
|
746
|
+
n.startHere && /* @__PURE__ */ a("span", { className: "cat-tile-start-here", "aria-hidden": "true", children: "START HERE" }),
|
|
747
|
+
l ? l(n) : /* @__PURE__ */ a(
|
|
935
748
|
"div",
|
|
936
749
|
{
|
|
937
750
|
className: "cat-tile-primitive-wrapper gloss-metric-card",
|
|
938
751
|
"data-col-span": "1",
|
|
939
752
|
style: { pointerEvents: "none", width: "100%", height: "100%" },
|
|
940
753
|
"aria-hidden": "true",
|
|
941
|
-
children:
|
|
942
|
-
|
|
754
|
+
children: n.donut ? /* @__PURE__ */ a(
|
|
755
|
+
ce,
|
|
943
756
|
{
|
|
944
757
|
variant: "donut",
|
|
945
|
-
label:
|
|
946
|
-
value:
|
|
758
|
+
label: n.label,
|
|
759
|
+
value: n.value,
|
|
947
760
|
donutValue: d,
|
|
948
761
|
donutMax: 1,
|
|
949
|
-
accentColor:
|
|
762
|
+
accentColor: n.accent,
|
|
950
763
|
colSpan: c
|
|
951
764
|
}
|
|
952
|
-
) : /* @__PURE__ */
|
|
953
|
-
|
|
765
|
+
) : /* @__PURE__ */ a(
|
|
766
|
+
ce,
|
|
954
767
|
{
|
|
955
768
|
variant: "standard",
|
|
956
|
-
label:
|
|
957
|
-
value:
|
|
769
|
+
label: n.label,
|
|
770
|
+
value: n.value,
|
|
958
771
|
colSpan: c
|
|
959
772
|
}
|
|
960
773
|
)
|
|
961
774
|
}
|
|
962
775
|
),
|
|
963
|
-
|
|
964
|
-
|
|
776
|
+
n.variants && n.variants.length > 0 && /* @__PURE__ */ a("span", { className: "cat-tile-variants", "aria-hidden": "true", children: n.variants.map((m) => /* @__PURE__ */ a("span", { children: m }, m)) }),
|
|
777
|
+
n.isNew && /* @__PURE__ */ a("span", { className: "cat-tile-new-dot", "aria-hidden": "true" })
|
|
965
778
|
]
|
|
966
779
|
},
|
|
967
|
-
|
|
780
|
+
n.id
|
|
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
|
-
const l = r?.mode ?? e ?? "add",
|
|
791
|
+
const l = r?.mode ?? e ?? "add", n = r?.selectedTileId ?? null, i = r?.description ?? null, u = n == null;
|
|
979
792
|
return /* @__PURE__ */ f("div", { className: "panel-footer catalog", children: [
|
|
980
|
-
/* @__PURE__ */
|
|
793
|
+
/* @__PURE__ */ a("div", { className: "cat-description", id: "cat-desc", children: i ?? /* @__PURE__ */ a("em", { children: "Tap a metric to see its description" }) }),
|
|
981
794
|
/* @__PURE__ */ f("div", { style: { display: "flex", padding: "10px 14px", gap: 8 }, children: [
|
|
982
|
-
/* @__PURE__ */
|
|
983
|
-
/* @__PURE__ */
|
|
795
|
+
/* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
|
|
796
|
+
/* @__PURE__ */ a(
|
|
984
797
|
"button",
|
|
985
798
|
{
|
|
986
799
|
id: "btn-cat-cancel",
|
|
@@ -990,7 +803,7 @@ function xt({ mode: e, dispatch: t }) {
|
|
|
990
803
|
children: "Cancel"
|
|
991
804
|
}
|
|
992
805
|
),
|
|
993
|
-
l === "add" && /* @__PURE__ */
|
|
806
|
+
l === "add" && /* @__PURE__ */ a(
|
|
994
807
|
"button",
|
|
995
808
|
{
|
|
996
809
|
id: "btn-cat-add",
|
|
@@ -1001,7 +814,7 @@ function xt({ mode: e, dispatch: t }) {
|
|
|
1001
814
|
children: "Add metric"
|
|
1002
815
|
}
|
|
1003
816
|
),
|
|
1004
|
-
l === "replace" && /* @__PURE__ */
|
|
817
|
+
l === "replace" && /* @__PURE__ */ a(
|
|
1005
818
|
"button",
|
|
1006
819
|
{
|
|
1007
820
|
id: "btn-cat-replace",
|
|
@@ -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,53 +839,53 @@ function ue(e, t) {
|
|
|
1026
839
|
return !1;
|
|
1027
840
|
}
|
|
1028
841
|
function Ze() {
|
|
1029
|
-
const t =
|
|
1030
|
-
return t == null ? /* @__PURE__ */
|
|
842
|
+
const t = se()?.description ?? null;
|
|
843
|
+
return t == null ? /* @__PURE__ */ a("span", { style: { fontStyle: "italic" }, children: "Tap a metric to see its description" }) : /* @__PURE__ */ a("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:
|
|
850
|
+
lensMeta: n = ve,
|
|
1038
851
|
renderTile: i,
|
|
1039
852
|
onAdd: u
|
|
1040
853
|
}) {
|
|
1041
|
-
const o =
|
|
1042
|
-
() =>
|
|
1043
|
-
[
|
|
1044
|
-
), N =
|
|
1045
|
-
() => (
|
|
1046
|
-
[
|
|
854
|
+
const o = M(), [s, c] = A(r), [d, m] = A(null), [h, b] = A(null), [p, _] = A(""), T = l[s] ?? { primary: [] }, E = n[s], y = le(
|
|
855
|
+
() => T.primary.filter((S) => de(S, p)),
|
|
856
|
+
[T.primary, p]
|
|
857
|
+
), N = le(
|
|
858
|
+
() => (T.secondary ?? []).filter((S) => de(S, p)),
|
|
859
|
+
[T.secondary, p]
|
|
1047
860
|
), I = () => {
|
|
1048
861
|
d != null && u?.(d), o?.dispatch({ type: "CLOSE_PANEL", reason: "apply-button" });
|
|
1049
|
-
},
|
|
1050
|
-
return /* @__PURE__ */
|
|
1051
|
-
|
|
862
|
+
}, R = () => o?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }), $ = d == null;
|
|
863
|
+
return /* @__PURE__ */ a(
|
|
864
|
+
ae.Provider,
|
|
1052
865
|
{
|
|
1053
866
|
value: { mode: "add", selectedTileId: d, description: h },
|
|
1054
|
-
children: /* @__PURE__ */
|
|
1055
|
-
|
|
867
|
+
children: /* @__PURE__ */ a(
|
|
868
|
+
Y,
|
|
1056
869
|
{
|
|
1057
870
|
variant: "no-stage",
|
|
1058
871
|
title: "Add a metric",
|
|
1059
|
-
onClose:
|
|
872
|
+
onClose: R,
|
|
1060
873
|
footer: {
|
|
1061
|
-
left: /* @__PURE__ */
|
|
1062
|
-
right: /* @__PURE__ */
|
|
874
|
+
left: /* @__PURE__ */ a(Ze, {}),
|
|
875
|
+
right: /* @__PURE__ */ a(
|
|
1063
876
|
"button",
|
|
1064
877
|
{
|
|
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
|
}
|
|
1072
885
|
)
|
|
1073
886
|
},
|
|
1074
887
|
children: /* @__PURE__ */ f("div", { "data-shell": "catalog-add", "aria-hidden": !e, children: [
|
|
1075
|
-
/* @__PURE__ */
|
|
888
|
+
/* @__PURE__ */ a("div", { className: "cat-search", children: /* @__PURE__ */ a(
|
|
1076
889
|
"input",
|
|
1077
890
|
{
|
|
1078
891
|
type: "search",
|
|
@@ -1080,51 +893,51 @@ 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
|
-
/* @__PURE__ */
|
|
899
|
+
/* @__PURE__ */ a(
|
|
1087
900
|
Ce,
|
|
1088
901
|
{
|
|
1089
902
|
lenses: t,
|
|
1090
903
|
activeLens: s,
|
|
1091
|
-
lensMeta:
|
|
904
|
+
lensMeta: n,
|
|
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__ */
|
|
1100
|
-
/* @__PURE__ */
|
|
911
|
+
E && /* @__PURE__ */ f("div", { className: "cat-lens-meta", children: [
|
|
912
|
+
/* @__PURE__ */ a("h3", { className: "cat-lens-headline", children: E.headline }),
|
|
913
|
+
/* @__PURE__ */ a("p", { className: "cat-lens-helper", children: E.helper })
|
|
1101
914
|
] }),
|
|
1102
|
-
/* @__PURE__ */
|
|
915
|
+
/* @__PURE__ */ a(
|
|
1103
916
|
te,
|
|
1104
917
|
{
|
|
1105
|
-
tiles:
|
|
918
|
+
tiles: y,
|
|
1106
919
|
selectedTileId: d,
|
|
1107
|
-
onSelectTile: (
|
|
1108
|
-
m(
|
|
920
|
+
onSelectTile: (S, D) => {
|
|
921
|
+
m(S), b(D);
|
|
1109
922
|
},
|
|
1110
923
|
renderTile: i
|
|
1111
924
|
}
|
|
1112
925
|
),
|
|
1113
926
|
N.length > 0 && /* @__PURE__ */ f("div", { className: "cat-more-in-lens", children: [
|
|
1114
|
-
/* @__PURE__ */
|
|
1115
|
-
/* @__PURE__ */
|
|
927
|
+
/* @__PURE__ */ a("div", { className: "cat-more-in-lens__heading", children: "MORE IN THIS LENS" }),
|
|
928
|
+
/* @__PURE__ */ a(
|
|
1116
929
|
te,
|
|
1117
930
|
{
|
|
1118
931
|
tiles: N,
|
|
1119
932
|
selectedTileId: d,
|
|
1120
|
-
onSelectTile: (
|
|
1121
|
-
m(
|
|
933
|
+
onSelectTile: (S, D) => {
|
|
934
|
+
m(S), b(D);
|
|
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,37 +949,37 @@ function At({
|
|
|
1136
949
|
);
|
|
1137
950
|
}
|
|
1138
951
|
function Xe() {
|
|
1139
|
-
const t =
|
|
1140
|
-
return t == null ? /* @__PURE__ */
|
|
952
|
+
const t = se()?.description ?? null;
|
|
953
|
+
return t == null ? /* @__PURE__ */ a("em", { children: "Tap a metric to see its description" }) : /* @__PURE__ */ a(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
|
-
tilesByLens:
|
|
960
|
+
tilesByLens: n = _e,
|
|
1148
961
|
renderTile: i
|
|
1149
962
|
}) {
|
|
1150
|
-
const u =
|
|
1151
|
-
return /* @__PURE__ */
|
|
1152
|
-
|
|
963
|
+
const u = M(), [o, s] = A(l), [c, d] = A(null), [m, h] = A(null), b = n[o] ?? { primary: [] }, p = [...b.primary, ...b.secondary ?? []], _ = () => u?.dispatch({ type: "CLOSE_PANEL", reason: "apply-button" }), T = () => u?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" }), E = c == null;
|
|
964
|
+
return /* @__PURE__ */ a(
|
|
965
|
+
ae.Provider,
|
|
1153
966
|
{
|
|
1154
967
|
value: { mode: "replace", selectedTileId: c, description: m },
|
|
1155
|
-
children: /* @__PURE__ */
|
|
1156
|
-
|
|
968
|
+
children: /* @__PURE__ */ a(
|
|
969
|
+
Y,
|
|
1157
970
|
{
|
|
1158
971
|
variant: "no-stage",
|
|
1159
972
|
title: "Replace metric",
|
|
1160
|
-
onClose:
|
|
973
|
+
onClose: T,
|
|
1161
974
|
footer: {
|
|
1162
|
-
left: /* @__PURE__ */
|
|
1163
|
-
right: /* @__PURE__ */
|
|
975
|
+
left: /* @__PURE__ */ a(Xe, {}),
|
|
976
|
+
right: /* @__PURE__ */ a(
|
|
1164
977
|
"button",
|
|
1165
978
|
{
|
|
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
|
}
|
|
@@ -1177,23 +990,23 @@ function kt({
|
|
|
1177
990
|
"replacing ",
|
|
1178
991
|
t
|
|
1179
992
|
] }),
|
|
1180
|
-
/* @__PURE__ */
|
|
993
|
+
/* @__PURE__ */ a(
|
|
1181
994
|
Ce,
|
|
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
|
),
|
|
1190
|
-
/* @__PURE__ */
|
|
1003
|
+
/* @__PURE__ */ a(
|
|
1191
1004
|
te,
|
|
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,20 +1017,20 @@ 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
|
{
|
|
1216
1029
|
className: "panel-footer pm",
|
|
1217
1030
|
style: { display: "flex", justifyContent: "flex-end", padding: "10px 14px" },
|
|
1218
1031
|
children: [
|
|
1219
|
-
/* @__PURE__ */
|
|
1220
|
-
/* @__PURE__ */
|
|
1032
|
+
/* @__PURE__ */ a("div", { className: "spacer", style: { flex: 1 } }),
|
|
1033
|
+
/* @__PURE__ */ a(
|
|
1221
1034
|
"button",
|
|
1222
1035
|
{
|
|
1223
1036
|
id: "btn-new-page",
|
|
@@ -1228,8 +1041,8 @@ function Je(e = {}) {
|
|
|
1228
1041
|
r();
|
|
1229
1042
|
return;
|
|
1230
1043
|
}
|
|
1231
|
-
l && l((
|
|
1232
|
-
...
|
|
1044
|
+
l && l((n) => [
|
|
1045
|
+
...n,
|
|
1233
1046
|
{ id: `new-${Date.now()}`, name: "Untitled", active: !1 }
|
|
1234
1047
|
]);
|
|
1235
1048
|
},
|
|
@@ -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: n }) {
|
|
1057
|
+
const i = Se(), [u, o] = A(!1), s = K(null);
|
|
1245
1058
|
F(() => {
|
|
1246
1059
|
if (!u) return;
|
|
1247
1060
|
const p = (_) => {
|
|
@@ -1259,10 +1072,10 @@ function pe({ page: e, onRename: t, onKebab: r, onDragStart: l, onSwitchPage: a
|
|
|
1259
1072
|
}, m = () => {
|
|
1260
1073
|
o(!1), i?.deletePage?.(e.id);
|
|
1261
1074
|
}, h = (p) => {
|
|
1262
|
-
p.stopPropagation(),
|
|
1075
|
+
p.stopPropagation(), n && !e.active && n(e.id);
|
|
1263
1076
|
}, b = ["pm-row"];
|
|
1264
1077
|
return e.active && b.push("active"), /* @__PURE__ */ f("div", { ref: s, className: b.join(" "), "data-page-id": e.id, role: "listitem", children: [
|
|
1265
|
-
/* @__PURE__ */
|
|
1078
|
+
/* @__PURE__ */ a(
|
|
1266
1079
|
"div",
|
|
1267
1080
|
{
|
|
1268
1081
|
className: "pm-handle",
|
|
@@ -1271,21 +1084,21 @@ function pe({ page: e, onRename: t, onKebab: r, onDragStart: l, onSwitchPage: a
|
|
|
1271
1084
|
children: "⋮⋮"
|
|
1272
1085
|
}
|
|
1273
1086
|
),
|
|
1274
|
-
/* @__PURE__ */
|
|
1087
|
+
/* @__PURE__ */ a(
|
|
1275
1088
|
"div",
|
|
1276
1089
|
{
|
|
1277
1090
|
className: "pm-name",
|
|
1278
|
-
role:
|
|
1279
|
-
tabIndex:
|
|
1280
|
-
onClick:
|
|
1091
|
+
role: n && !e.active ? "button" : void 0,
|
|
1092
|
+
tabIndex: n && !e.active ? 0 : void 0,
|
|
1093
|
+
onClick: n ? h : void 0,
|
|
1281
1094
|
onKeyDown: (p) => {
|
|
1282
|
-
!
|
|
1095
|
+
!n || e.active || (p.key === "Enter" || p.key === " ") && (p.preventDefault(), p.stopPropagation(), n(e.id));
|
|
1283
1096
|
},
|
|
1284
|
-
"aria-label":
|
|
1097
|
+
"aria-label": n && !e.active ? `Switch to ${e.name}` : void 0,
|
|
1285
1098
|
children: e.name
|
|
1286
1099
|
}
|
|
1287
1100
|
),
|
|
1288
|
-
/* @__PURE__ */
|
|
1101
|
+
/* @__PURE__ */ a(
|
|
1289
1102
|
"button",
|
|
1290
1103
|
{
|
|
1291
1104
|
type: "button",
|
|
@@ -1311,9 +1124,9 @@ function pe({ page: e, onRename: t, onKebab: r, onDragStart: l, onSwitchPage: a
|
|
|
1311
1124
|
onPointerDown: (p) => p.stopPropagation(),
|
|
1312
1125
|
onMouseDown: (p) => p.stopPropagation(),
|
|
1313
1126
|
children: [
|
|
1314
|
-
/* @__PURE__ */
|
|
1315
|
-
/* @__PURE__ */
|
|
1316
|
-
/* @__PURE__ */
|
|
1127
|
+
/* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: c, children: "Rename" }),
|
|
1128
|
+
/* @__PURE__ */ a("button", { type: "button", role: "menuitem", className: "pm-kebab-menu__item", onClick: d, children: "Duplicate" }),
|
|
1129
|
+
/* @__PURE__ */ a(
|
|
1317
1130
|
"button",
|
|
1318
1131
|
{
|
|
1319
1132
|
type: "button",
|
|
@@ -1339,46 +1152,46 @@ function Dt({
|
|
|
1339
1152
|
pages: t = et,
|
|
1340
1153
|
externalPages: r,
|
|
1341
1154
|
activePageId: l,
|
|
1342
|
-
onRename:
|
|
1155
|
+
onRename: n,
|
|
1343
1156
|
onDuplicate: i,
|
|
1344
1157
|
onDelete: u,
|
|
1345
1158
|
onReorder: o,
|
|
1346
1159
|
onCreatePage: s,
|
|
1347
1160
|
onSwitchPage: c
|
|
1348
1161
|
}) {
|
|
1349
|
-
const d =
|
|
1350
|
-
h((w) => w.map((
|
|
1351
|
-
}, []), p =
|
|
1162
|
+
const d = M(), [m, h] = A(() => [...t]), b = L((g, C) => {
|
|
1163
|
+
h((w) => w.map((x) => x.id === g ? { ...x, name: C } : x));
|
|
1164
|
+
}, []), p = L((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
|
+
}, []), _ = L((g) => {
|
|
1363
1176
|
h((C) => C.filter((w) => w.id !== g));
|
|
1364
|
-
}, []),
|
|
1177
|
+
}, []), T = L((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 = n ?? (E ? void 0 : b), R = i ?? (E ? void 0 : p), $ = u ?? (E ? void 0 : _), S = o ?? (E ? void 0 : T), D = L(
|
|
1370
1183
|
(g) => {
|
|
1371
|
-
|
|
1184
|
+
E || h(g);
|
|
1372
1185
|
},
|
|
1373
|
-
[
|
|
1374
|
-
),
|
|
1186
|
+
[E]
|
|
1187
|
+
), q = L(
|
|
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__ */ a(
|
|
1194
|
+
Te,
|
|
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:
|
|
1390
|
-
renderZone: (g, C, w) => /* @__PURE__ */
|
|
1391
|
-
renderItem: (g) => /* @__PURE__ */
|
|
1392
|
-
|
|
1202
|
+
onZoneChange: q,
|
|
1203
|
+
renderZone: (g, C, w) => /* @__PURE__ */ a("div", { className: "pm-list", role: "list", children: w }),
|
|
1204
|
+
renderItem: (g) => /* @__PURE__ */ a(
|
|
1205
|
+
ue,
|
|
1393
1206
|
{
|
|
1394
1207
|
page: g,
|
|
1395
1208
|
onSwitchPage: c
|
|
@@ -1397,35 +1210,35 @@ function Dt({
|
|
|
1397
1210
|
g.id
|
|
1398
1211
|
)
|
|
1399
1212
|
},
|
|
1400
|
-
|
|
1401
|
-
) : /* @__PURE__ */
|
|
1402
|
-
|
|
1213
|
+
Q
|
|
1214
|
+
) : /* @__PURE__ */ a("div", { className: "pm-list", role: "list", children: N.map((g) => /* @__PURE__ */ a(
|
|
1215
|
+
ue,
|
|
1403
1216
|
{
|
|
1404
1217
|
page: g,
|
|
1405
1218
|
onSwitchPage: c
|
|
1406
1219
|
},
|
|
1407
1220
|
g.id
|
|
1408
|
-
)) }),
|
|
1409
|
-
return /* @__PURE__ */
|
|
1221
|
+
)) }), G = () => d?.dispatch({ type: "CLOSE_PANEL", reason: "header-x" });
|
|
1222
|
+
return /* @__PURE__ */ a(
|
|
1410
1223
|
Ne.Provider,
|
|
1411
1224
|
{
|
|
1412
1225
|
value: {
|
|
1413
1226
|
pages: N,
|
|
1414
|
-
setPages:
|
|
1227
|
+
setPages: D,
|
|
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
|
-
children: /* @__PURE__ */
|
|
1422
|
-
|
|
1234
|
+
children: /* @__PURE__ */ a(
|
|
1235
|
+
Y,
|
|
1423
1236
|
{
|
|
1424
1237
|
variant: "no-stage",
|
|
1425
1238
|
title: "Manage pages",
|
|
1426
|
-
onClose:
|
|
1427
|
-
footer: { right: /* @__PURE__ */
|
|
1428
|
-
children: /* @__PURE__ */
|
|
1239
|
+
onClose: G,
|
|
1240
|
+
footer: { right: /* @__PURE__ */ a(Je, {}) },
|
|
1241
|
+
children: /* @__PURE__ */ a("div", { "data-shell": "page-management", "aria-hidden": !e, children: W })
|
|
1429
1242
|
}
|
|
1430
1243
|
)
|
|
1431
1244
|
}
|
|
@@ -1447,54 +1260,49 @@ const Lt = {
|
|
|
1447
1260
|
inset: 0,
|
|
1448
1261
|
zIndex: 1,
|
|
1449
1262
|
// CR-03 fix: pass-through tint — scrim is visual-only and must not intercept
|
|
1450
|
-
// grid card clicks.
|
|
1263
|
+
// grid card clicks. Dismiss is ESC-only (see PanelHost.tsx CR-03 comment).
|
|
1451
1264
|
pointerEvents: "none",
|
|
1452
1265
|
background: "rgba(0, 0, 0, 0.04)"
|
|
1453
1266
|
};
|
|
1454
|
-
function
|
|
1267
|
+
function Mt() {
|
|
1455
1268
|
const { state: e, dispatch: t, getCloseLog: r } = Pe();
|
|
1456
1269
|
F(() => {
|
|
1457
1270
|
if (e.activePanelId == null) return;
|
|
1458
|
-
function i
|
|
1459
|
-
|
|
1271
|
+
function n(i) {
|
|
1272
|
+
i.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
|
|
1460
1273
|
}
|
|
1461
|
-
return document.addEventListener("keydown",
|
|
1274
|
+
return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
|
|
1462
1275
|
}, [e.activePanelId, t]);
|
|
1463
|
-
const l =
|
|
1464
|
-
|
|
1276
|
+
const l = K(e);
|
|
1277
|
+
return xe(() => {
|
|
1465
1278
|
l.current = e;
|
|
1466
1279
|
}), F(() => {
|
|
1467
1280
|
if (process.env.NODE_ENV === "production") return;
|
|
1468
|
-
const
|
|
1469
|
-
return
|
|
1281
|
+
const n = window;
|
|
1282
|
+
return n.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), n.__panelsHostHandle = {
|
|
1470
1283
|
dispatch: t,
|
|
1471
1284
|
getState: () => l.current,
|
|
1472
1285
|
getCloseLog: r
|
|
1473
1286
|
}, () => {
|
|
1474
|
-
|
|
1287
|
+
n.__panelsHostHandle?.dispatch === t && delete window.__panelsHostHandle;
|
|
1475
1288
|
};
|
|
1476
|
-
}, [t, r])
|
|
1477
|
-
const a = D(() => {
|
|
1478
|
-
t({ type: "CLOSE_PANEL", reason: "nav-escape-hatch" });
|
|
1479
|
-
}, [t]);
|
|
1480
|
-
return /* @__PURE__ */ n("div", { "data-panel-host": "true", style: tt, children: e.activePanelId != null && /* @__PURE__ */ n(
|
|
1289
|
+
}, [t, r]), /* @__PURE__ */ a("div", { "data-panel-host": "true", style: tt, children: e.activePanelId != null && /* @__PURE__ */ a(
|
|
1481
1290
|
"div",
|
|
1482
1291
|
{
|
|
1483
1292
|
"data-panel-scrim": "true",
|
|
1484
|
-
style: nt
|
|
1485
|
-
onClick: a
|
|
1293
|
+
style: nt
|
|
1486
1294
|
}
|
|
1487
1295
|
) });
|
|
1488
1296
|
}
|
|
1489
1297
|
const at = 700;
|
|
1490
1298
|
function st(e) {
|
|
1491
|
-
const [t, r] =
|
|
1299
|
+
const [t, r] = A(null), l = K(null);
|
|
1492
1300
|
return F(() => {
|
|
1493
1301
|
if (e != null) {
|
|
1494
1302
|
l.current != null && (clearTimeout(l.current), l.current = null), r(null);
|
|
1495
1303
|
return;
|
|
1496
1304
|
}
|
|
1497
|
-
return
|
|
1305
|
+
return l.current = setTimeout(() => {
|
|
1498
1306
|
r(null), l.current = null;
|
|
1499
1307
|
}, at), () => {
|
|
1500
1308
|
l.current != null && (clearTimeout(l.current), l.current = null);
|
|
@@ -1503,20 +1311,20 @@ function st(e) {
|
|
|
1503
1311
|
e != null && r(e);
|
|
1504
1312
|
}, [e]), e != null ? { panelId: e, isOpen: !0 } : t != null ? { panelId: t, isOpen: !1 } : { panelId: null, isOpen: !1 };
|
|
1505
1313
|
}
|
|
1506
|
-
function
|
|
1507
|
-
const r =
|
|
1314
|
+
function Ot({ panelComponents: e, children: t }) {
|
|
1315
|
+
const r = M(), l = st(r?.state.activePanelId ?? null);
|
|
1508
1316
|
if (r == null || l.panelId == null) return null;
|
|
1509
|
-
const
|
|
1317
|
+
const n = l.panelId, i = l.isOpen, u = e?.[n];
|
|
1510
1318
|
return u == null && t == null ? (process.env.NODE_ENV !== "production" && console.error(
|
|
1511
1319
|
"[panels] No panel component registered for activePanelId:",
|
|
1512
|
-
|
|
1513
|
-
), null) : /* @__PURE__ */
|
|
1320
|
+
n
|
|
1321
|
+
), null) : /* @__PURE__ */ a(Ae, { isOpen: i, children: u != null ? /* @__PURE__ */ a(u, { isOpen: i }) : t });
|
|
1514
1322
|
}
|
|
1515
|
-
function
|
|
1323
|
+
function pe(e) {
|
|
1516
1324
|
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
1325
|
}
|
|
1518
|
-
const rt = 685,
|
|
1519
|
-
function
|
|
1326
|
+
const rt = 685, me = 627, ot = "cubic-bezier(0.22, 1, 0.36, 1)", lt = 200;
|
|
1327
|
+
function Ee(e, t) {
|
|
1520
1328
|
if (typeof window > "u") return t;
|
|
1521
1329
|
const r = window.getComputedStyle(document.documentElement).getPropertyValue(e).trim();
|
|
1522
1330
|
if (!r) return t;
|
|
@@ -1526,33 +1334,33 @@ function Se(e, t) {
|
|
|
1526
1334
|
function it(e, t) {
|
|
1527
1335
|
return typeof window > "u" ? t : window.getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
|
|
1528
1336
|
}
|
|
1529
|
-
function
|
|
1337
|
+
function U(e) {
|
|
1530
1338
|
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger });
|
|
1531
1339
|
}
|
|
1532
1340
|
function ct(e) {
|
|
1533
|
-
const { mountEl: t, chromeEl: r, reducedMotion: l, onAssert:
|
|
1341
|
+
const { mountEl: t, chromeEl: r, reducedMotion: l, onAssert: n } = e;
|
|
1534
1342
|
if (t == null || r == null) {
|
|
1535
|
-
|
|
1343
|
+
U(e), n?.({ branch: "slide-fallback-no-dom", timestamp: Date.now() });
|
|
1536
1344
|
return;
|
|
1537
1345
|
}
|
|
1538
1346
|
if (l) {
|
|
1539
|
-
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }),
|
|
1347
|
+
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), n?.({ branch: "slide-reduced-motion", timestamp: Date.now() });
|
|
1540
1348
|
return;
|
|
1541
1349
|
}
|
|
1542
1350
|
if (typeof r.animate != "function") {
|
|
1543
|
-
|
|
1351
|
+
U(e), n?.({ branch: "slide-no-waapi", timestamp: Date.now() });
|
|
1544
1352
|
return;
|
|
1545
1353
|
}
|
|
1546
1354
|
const i = r.cloneNode(!0);
|
|
1547
1355
|
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 =
|
|
1356
|
+
const u = Ee("--panel-open-dur", rt), o = it("--panel-easing", ot), s = r.animate(
|
|
1549
1357
|
[{ transform: "translateY(100%)" }, { transform: "translateY(0)" }],
|
|
1550
1358
|
{ duration: u, easing: o, fill: "forwards" }
|
|
1551
1359
|
);
|
|
1552
1360
|
s.addEventListener(
|
|
1553
1361
|
"finish",
|
|
1554
1362
|
() => {
|
|
1555
|
-
i.remove(), r.style.zIndex = "", s.cancel(),
|
|
1363
|
+
i.remove(), r.style.zIndex = "", s.cancel(), n?.({ branch: "slide-complete", frozen: "cleaned", timestamp: Date.now() });
|
|
1556
1364
|
},
|
|
1557
1365
|
{ once: !0 }
|
|
1558
1366
|
);
|
|
@@ -1560,15 +1368,15 @@ function ct(e) {
|
|
|
1560
1368
|
function dt(e) {
|
|
1561
1369
|
const { mountEl: t, onAssert: r } = e;
|
|
1562
1370
|
if (t == null) {
|
|
1563
|
-
e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() =>
|
|
1371
|
+
e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), setTimeout(() => U(e), me), r?.({ branch: "handoff-fallback-no-mount", timestamp: Date.now() });
|
|
1564
1372
|
return;
|
|
1565
1373
|
}
|
|
1566
|
-
const l =
|
|
1567
|
-
let
|
|
1374
|
+
const l = Ee("--panel-close-dur", me);
|
|
1375
|
+
let n = !1, i = null;
|
|
1568
1376
|
const u = (s) => {
|
|
1569
|
-
s.target !== t || s.propertyName !== "max-height" ||
|
|
1377
|
+
s.target !== t || s.propertyName !== "max-height" || n || (n = !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() }));
|
|
1570
1378
|
}, o = () => {
|
|
1571
|
-
|
|
1379
|
+
n || (n = !0, t.removeEventListener("transitionend", u), e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "handoff-forced", timestamp: Date.now() }));
|
|
1572
1380
|
};
|
|
1573
1381
|
t.addEventListener("transitionend", u), e.dispatch({ type: "CLOSE_PANEL", reason: "mutex-handoff" }), i = setTimeout(o, l + lt);
|
|
1574
1382
|
}
|
|
@@ -1578,8 +1386,8 @@ function ut(e) {
|
|
|
1578
1386
|
e.dispatch({ type: "OPEN_PANEL", panelId: e.panelId, trigger: e.trigger }), r?.({ branch: "blocked-dirty", timestamp: Date.now() });
|
|
1579
1387
|
return;
|
|
1580
1388
|
}
|
|
1581
|
-
const l =
|
|
1582
|
-
if (!!t.activePanelId && l != null && l ===
|
|
1389
|
+
const l = pe(t.activeTrigger), n = pe(e.trigger);
|
|
1390
|
+
if (!!t.activePanelId && l != null && l === n) {
|
|
1583
1391
|
ct(e);
|
|
1584
1392
|
return;
|
|
1585
1393
|
}
|
|
@@ -1587,24 +1395,24 @@ function ut(e) {
|
|
|
1587
1395
|
dt(e);
|
|
1588
1396
|
return;
|
|
1589
1397
|
}
|
|
1590
|
-
|
|
1398
|
+
U(e), r?.({ branch: "fresh-open", timestamp: Date.now() });
|
|
1591
1399
|
}
|
|
1592
1400
|
function pt() {
|
|
1593
1401
|
if (!(typeof window > "u"))
|
|
1594
1402
|
return window.__panelsAsserter;
|
|
1595
1403
|
}
|
|
1596
1404
|
function It() {
|
|
1597
|
-
const e =
|
|
1598
|
-
return
|
|
1405
|
+
const e = M(), t = he();
|
|
1406
|
+
return L(
|
|
1599
1407
|
(r, l) => {
|
|
1600
1408
|
if (!e)
|
|
1601
1409
|
return;
|
|
1602
|
-
const
|
|
1410
|
+
const n = typeof document < "u" ? document.querySelector('[data-mount="panel"]') : null, i = typeof document < "u" ? document.querySelector('[data-chrome="panel"]') : null, u = {
|
|
1603
1411
|
panelId: r,
|
|
1604
1412
|
trigger: l,
|
|
1605
1413
|
state: e.state,
|
|
1606
1414
|
dispatch: e.dispatch,
|
|
1607
|
-
mountEl:
|
|
1415
|
+
mountEl: n,
|
|
1608
1416
|
chromeEl: i,
|
|
1609
1417
|
reducedMotion: t,
|
|
1610
1418
|
onAssert: (o) => {
|
|
@@ -1616,24 +1424,24 @@ function It() {
|
|
|
1616
1424
|
[e, t]
|
|
1617
1425
|
);
|
|
1618
1426
|
}
|
|
1619
|
-
function
|
|
1620
|
-
return /* @__PURE__ */
|
|
1427
|
+
function Rt({ children: e }) {
|
|
1428
|
+
return /* @__PURE__ */ a("div", { className: "clone-stage", children: e });
|
|
1621
1429
|
}
|
|
1622
|
-
let
|
|
1430
|
+
let B = !1, j = null;
|
|
1623
1431
|
function ne() {
|
|
1624
1432
|
const e = [];
|
|
1625
1433
|
let t = "cleaned";
|
|
1626
1434
|
document.querySelectorAll("#panel-chrome-frozen").length > 0 && (e.push("#panel-chrome-frozen"), t = "lingering");
|
|
1627
1435
|
const l = document.querySelectorAll(".gloss-panel-mount");
|
|
1628
1436
|
l.length > 1 && e.push(`mount-count=${l.length}`);
|
|
1629
|
-
const
|
|
1437
|
+
const n = l[0] ?? null, i = n ? n.querySelectorAll(".gloss-panel-chrome") : [];
|
|
1630
1438
|
i.length > 1 && e.push(`chrome-count=${i.length}`);
|
|
1631
1439
|
const u = i[0] ?? null;
|
|
1632
1440
|
if (u) {
|
|
1633
1441
|
const d = u.style.zIndex;
|
|
1634
1442
|
d !== "" && d !== "2" && e.push(`chrome-zindex=${d}`);
|
|
1635
1443
|
}
|
|
1636
|
-
const o =
|
|
1444
|
+
const o = n ? "present" : "absent", s = u ? "present" : "absent";
|
|
1637
1445
|
return {
|
|
1638
1446
|
valid: e.length === 0,
|
|
1639
1447
|
mount: o,
|
|
@@ -1644,21 +1452,21 @@ function ne() {
|
|
|
1644
1452
|
};
|
|
1645
1453
|
}
|
|
1646
1454
|
const Z = "8px 8px 0px", X = "64px", J = "inset(0px 0px 60px 0px)", ee = "inset(0px -40px -40px -40px)";
|
|
1647
|
-
function
|
|
1648
|
-
return { id: e, constraint: t, expected: r, actual: l, pass:
|
|
1455
|
+
function v(e, t, r, l, n) {
|
|
1456
|
+
return { id: e, constraint: t, expected: r, actual: l, pass: n };
|
|
1649
1457
|
}
|
|
1650
|
-
function
|
|
1458
|
+
function O(e) {
|
|
1651
1459
|
const t = parseInt(e, 10);
|
|
1652
1460
|
return Number.isFinite(t) ? t : NaN;
|
|
1653
1461
|
}
|
|
1654
|
-
function
|
|
1655
|
-
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]"),
|
|
1462
|
+
function re() {
|
|
1463
|
+
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]"), n = document.querySelector(".bell-cutout"), i = document.querySelector(".bell-popover"), u = document.querySelector(".gloss-bottom-toolbar");
|
|
1656
1464
|
if (!t)
|
|
1657
|
-
e.push(
|
|
1465
|
+
e.push(v("C1", "mount --reveal-y matches clip-path inset-bottom Npx", "mount present", "absent", !1));
|
|
1658
1466
|
else {
|
|
1659
|
-
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 =
|
|
1467
|
+
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 = O(s), b = Number.isFinite(m) && Number.isFinite(h) && m === h;
|
|
1660
1468
|
e.push(
|
|
1661
|
-
|
|
1469
|
+
v(
|
|
1662
1470
|
"C1",
|
|
1663
1471
|
"mount --reveal-y matches clip-path inset-bottom Npx",
|
|
1664
1472
|
`inset(0 0 ${h}px 0) === --reveal-y(${h}px)`,
|
|
@@ -1668,27 +1476,27 @@ function oe() {
|
|
|
1668
1476
|
);
|
|
1669
1477
|
}
|
|
1670
1478
|
if (!t)
|
|
1671
|
-
e.push(
|
|
1479
|
+
e.push(v("C2", "mount padding constant", Z, "absent", !1));
|
|
1672
1480
|
else {
|
|
1673
1481
|
const o = t.style.padding, s = getComputedStyle(t), c = o || s.padding || "", d = c === Z || c === "8px 8px 0px 8px";
|
|
1674
|
-
e.push(
|
|
1482
|
+
e.push(v("C2", "mount padding constant", Z, c || "n/a", d));
|
|
1675
1483
|
}
|
|
1676
1484
|
if (!t)
|
|
1677
|
-
e.push(
|
|
1485
|
+
e.push(v("C3", "mount.bottom resolves to var(--tb-h)=64px", X, "absent", !1));
|
|
1678
1486
|
else {
|
|
1679
1487
|
const s = getComputedStyle(t).bottom || t.style.bottom || "", c = s === X;
|
|
1680
|
-
e.push(
|
|
1488
|
+
e.push(v("C3", "mount.bottom resolves to var(--tb-h)=64px", X, s || "n/a", c));
|
|
1681
1489
|
}
|
|
1682
1490
|
if (!r)
|
|
1683
|
-
e.push(
|
|
1491
|
+
e.push(v("C4", "panel-chrome height formula = (row-h*3)+(row-gap*3)-8px", "formula match", "absent", !1));
|
|
1684
1492
|
else {
|
|
1685
|
-
const o = getComputedStyle(r), s =
|
|
1493
|
+
const o = getComputedStyle(r), s = O(
|
|
1686
1494
|
o.getPropertyValue("--row-h").trim() || r.style.getPropertyValue("--row-h").trim() || "0"
|
|
1687
|
-
), c =
|
|
1495
|
+
), c = O(
|
|
1688
1496
|
o.getPropertyValue("--row-gap").trim() || r.style.getPropertyValue("--row-gap").trim() || "0"
|
|
1689
|
-
), d = s * 3 + c * 3 - 8, m =
|
|
1497
|
+
), d = s * 3 + c * 3 - 8, m = O(o.height || r.style.height || ""), h = Number.isFinite(s) && Number.isFinite(c) && Number.isFinite(m) && Number.isFinite(d) && m === d;
|
|
1690
1498
|
e.push(
|
|
1691
|
-
|
|
1499
|
+
v(
|
|
1692
1500
|
"C4",
|
|
1693
1501
|
"panel-chrome height formula = (row-h*3)+(row-gap*3)-8px",
|
|
1694
1502
|
`${d}px (rh=${s} rg=${c})`,
|
|
@@ -1699,7 +1507,7 @@ function oe() {
|
|
|
1699
1507
|
}
|
|
1700
1508
|
if (!l || !r)
|
|
1701
1509
|
e.push(
|
|
1702
|
-
|
|
1510
|
+
v(
|
|
1703
1511
|
"C5",
|
|
1704
1512
|
'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
|
|
1705
1513
|
"present",
|
|
@@ -1710,7 +1518,7 @@ function oe() {
|
|
|
1710
1518
|
else {
|
|
1711
1519
|
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
1520
|
e.push(
|
|
1713
|
-
|
|
1521
|
+
v(
|
|
1714
1522
|
"C5",
|
|
1715
1523
|
'coordinator perspective + origin "center bottom"; chrome perspective-style flat',
|
|
1716
1524
|
"perspective:not-none, origin:center bottom, chrome-style:flat",
|
|
@@ -1731,8 +1539,8 @@ function oe() {
|
|
|
1731
1539
|
}
|
|
1732
1540
|
for (const m of d)
|
|
1733
1541
|
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 =
|
|
1542
|
+
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"), T = p?.style.transform ?? "", E = _?.style.transform ?? "", y = /rotateY\(\s*0(?:deg)?\s*\)/;
|
|
1543
|
+
o = y.test(T) && y.test(E), s = `0%=${T || "n/a"} 100%=${E || "n/a"}`;
|
|
1736
1544
|
break;
|
|
1737
1545
|
}
|
|
1738
1546
|
if (s !== "absent") break;
|
|
@@ -1741,7 +1549,7 @@ function oe() {
|
|
|
1741
1549
|
s = "inspection-error";
|
|
1742
1550
|
}
|
|
1743
1551
|
e.push(
|
|
1744
|
-
|
|
1552
|
+
v(
|
|
1745
1553
|
"C6",
|
|
1746
1554
|
"@keyframes stage-spin 0% AND 100% anchor at rotateY(0)",
|
|
1747
1555
|
"both frames rotateY(0)",
|
|
@@ -1751,17 +1559,17 @@ function oe() {
|
|
|
1751
1559
|
);
|
|
1752
1560
|
}
|
|
1753
1561
|
{
|
|
1754
|
-
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 =
|
|
1562
|
+
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 = O(c) || parseFloat(c) * (c.endsWith("s") && !c.endsWith("ms") ? 1e3 : 1), h = O(d) || parseFloat(d) * (d.endsWith("s") && !d.endsWith("ms") ? 1e3 : 1), b = Number.isFinite(m) && Number.isFinite(h) && m > h;
|
|
1755
1563
|
e.push(
|
|
1756
|
-
|
|
1564
|
+
v("C7", "--panel-open-dur > --panel-close-dur", "open > close", `open=${c || "n/a"} close=${d || "n/a"}`, b)
|
|
1757
1565
|
);
|
|
1758
1566
|
}
|
|
1759
|
-
if (!
|
|
1760
|
-
e.push(
|
|
1567
|
+
if (!n)
|
|
1568
|
+
e.push(v("C8", "BellCutout zero computed animation/transition", "no inline timing", "absent", !1));
|
|
1761
1569
|
else {
|
|
1762
|
-
const o = getComputedStyle(
|
|
1570
|
+
const o = getComputedStyle(n), s = o.animationName || "", c = o.transitionProperty || "", d = (s === "" || s === "none") && (c === "" || c === "none" || c === "all");
|
|
1763
1571
|
e.push(
|
|
1764
|
-
|
|
1572
|
+
v(
|
|
1765
1573
|
"C8",
|
|
1766
1574
|
"BellCutout zero computed animation/transition",
|
|
1767
1575
|
"animation:none AND transition:none",
|
|
@@ -1771,17 +1579,17 @@ function oe() {
|
|
|
1771
1579
|
);
|
|
1772
1580
|
}
|
|
1773
1581
|
if (!t)
|
|
1774
|
-
e.push(
|
|
1582
|
+
e.push(v("C9", "mount closed-state clipPath", J, "absent", !1));
|
|
1775
1583
|
else {
|
|
1776
1584
|
const o = t.style.clipPath, s = getComputedStyle(t), c = o || s.clipPath || "", d = c === J;
|
|
1777
|
-
e.push(
|
|
1585
|
+
e.push(v("C9", "mount closed-state clipPath", J, c || "n/a", d));
|
|
1778
1586
|
}
|
|
1779
1587
|
if (!i)
|
|
1780
|
-
e.push(
|
|
1588
|
+
e.push(v("C10", "bell-popover parentElement === document.body (open)", "body", "absent", !1));
|
|
1781
1589
|
else {
|
|
1782
1590
|
const o = i.parentElement, s = o === document.body;
|
|
1783
1591
|
e.push(
|
|
1784
|
-
|
|
1592
|
+
v(
|
|
1785
1593
|
"C10",
|
|
1786
1594
|
"bell-popover parentElement === document.body (open)",
|
|
1787
1595
|
"body",
|
|
@@ -1791,19 +1599,19 @@ function oe() {
|
|
|
1791
1599
|
);
|
|
1792
1600
|
}
|
|
1793
1601
|
if (!l)
|
|
1794
|
-
e.push(
|
|
1602
|
+
e.push(v("C11", "coordinator overflow === visible", "visible", "absent", !1));
|
|
1795
1603
|
else {
|
|
1796
1604
|
const s = getComputedStyle(l).overflow || l.style.overflow || "", c = s === "visible";
|
|
1797
|
-
e.push(
|
|
1605
|
+
e.push(v("C11", "coordinator overflow === visible", "visible", s || "n/a", c));
|
|
1798
1606
|
}
|
|
1799
1607
|
if (!u)
|
|
1800
|
-
e.push(
|
|
1608
|
+
e.push(v("C12", "toolbar clipPath = inset(0 -40 -40 -40)", ee, "absent", !1));
|
|
1801
1609
|
else {
|
|
1802
1610
|
const o = u.style.clipPath, s = getComputedStyle(u), c = o || s.clipPath || "", d = c === ee;
|
|
1803
|
-
e.push(
|
|
1611
|
+
e.push(v("C12", "toolbar clipPath = inset(0 -40 -40 -40)", ee, c || "n/a", d));
|
|
1804
1612
|
}
|
|
1805
1613
|
return e.push(
|
|
1806
|
-
|
|
1614
|
+
v(
|
|
1807
1615
|
"C13",
|
|
1808
1616
|
"same-position slide via WAAPI (mid-transition getAnimations().length > 0)",
|
|
1809
1617
|
"WAAPI driver wired in orchestrator (source-proof)",
|
|
@@ -1811,7 +1619,7 @@ function oe() {
|
|
|
1811
1619
|
"wiring_only"
|
|
1812
1620
|
)
|
|
1813
1621
|
), e.push(
|
|
1814
|
-
|
|
1622
|
+
v(
|
|
1815
1623
|
"C14",
|
|
1816
1624
|
'cross-position handoff transitionend filtered by propertyName="max-height"',
|
|
1817
1625
|
"transitionend filter wired in orchestrator (source-proof)",
|
|
@@ -1821,7 +1629,7 @@ function oe() {
|
|
|
1821
1629
|
), e;
|
|
1822
1630
|
}
|
|
1823
1631
|
function mt(e) {
|
|
1824
|
-
return
|
|
1632
|
+
return re().find((t) => t.id === e);
|
|
1825
1633
|
}
|
|
1826
1634
|
function ht() {
|
|
1827
1635
|
const e = ne();
|
|
@@ -1833,84 +1641,83 @@ function ht() {
|
|
|
1833
1641
|
actual: `valid=${e.valid} mount=${e.mount} chrome=${e.chrome} frozen=${e.frozen} orphans=[${e.orphans.join(",")}]`,
|
|
1834
1642
|
pass: e.valid
|
|
1835
1643
|
}
|
|
1836
|
-
], cc:
|
|
1644
|
+
], cc: re() };
|
|
1837
1645
|
}
|
|
1838
1646
|
function ft() {
|
|
1839
1647
|
return {
|
|
1840
1648
|
enable: gt,
|
|
1841
1649
|
disable: bt,
|
|
1842
|
-
isEnabled: () =>
|
|
1650
|
+
isEnabled: () => B,
|
|
1843
1651
|
getLastReport: () => j,
|
|
1844
1652
|
recordTransition: (e) => {
|
|
1845
|
-
|
|
1653
|
+
B && (j = { ...e, ...ne() });
|
|
1846
1654
|
},
|
|
1847
1655
|
assertOnce: () => {
|
|
1848
1656
|
const e = ne();
|
|
1849
1657
|
return j = e, e;
|
|
1850
1658
|
},
|
|
1851
|
-
assertCcOnly:
|
|
1659
|
+
assertCcOnly: re,
|
|
1852
1660
|
getCcRowById: mt,
|
|
1853
1661
|
assertPanelTruths: ht
|
|
1854
1662
|
};
|
|
1855
1663
|
}
|
|
1856
1664
|
function gt() {
|
|
1857
|
-
if (
|
|
1665
|
+
if (B = !0, typeof window > "u") return;
|
|
1858
1666
|
window.__panelsAsserter || (window.__panelsAsserter = ft(), console.info(
|
|
1859
1667
|
"[panels] asserter enabled (P3b Q12-12 + P6 W5 cc:C1..C14). Inspect via window.__panelsAsserter."
|
|
1860
1668
|
));
|
|
1861
1669
|
}
|
|
1862
1670
|
function bt() {
|
|
1863
|
-
|
|
1671
|
+
B = !1;
|
|
1864
1672
|
}
|
|
1865
1673
|
export {
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1674
|
+
zt as COMMITS,
|
|
1675
|
+
xt as CatalogAddShell,
|
|
1676
|
+
At as CatalogFooter,
|
|
1869
1677
|
kt as CatalogReplaceShell,
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1678
|
+
ae as CatalogStateContext,
|
|
1679
|
+
Ue as CloneCard,
|
|
1680
|
+
Rt as CloneStage,
|
|
1873
1681
|
ye as MOCK_DEFAULT_LENS,
|
|
1874
|
-
|
|
1875
|
-
|
|
1682
|
+
be as MOCK_LENSES,
|
|
1683
|
+
ve as MOCK_LENS_META,
|
|
1876
1684
|
et as MOCK_PAGES,
|
|
1877
1685
|
_e as MOCK_TILES_BY_LENS,
|
|
1878
|
-
|
|
1686
|
+
Ht as NotificationCenterShell,
|
|
1879
1687
|
Lt as PANEL_IDS,
|
|
1880
1688
|
Je as PageMgmtFooter,
|
|
1881
1689
|
Dt as PageMgmtShell,
|
|
1882
1690
|
Ne as PageMgmtStateContext,
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
B as PanelChromeV2,
|
|
1691
|
+
Ut as PanelBody,
|
|
1692
|
+
Y as PanelChromeV2,
|
|
1886
1693
|
Bt as PanelFooter,
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1694
|
+
Tt as PanelFooterMessage,
|
|
1695
|
+
Yt as PanelHeader,
|
|
1696
|
+
Vt as PanelHost,
|
|
1697
|
+
Mt as PanelHostShell,
|
|
1698
|
+
Ae as PanelMount,
|
|
1699
|
+
Kt as PanelNavigation,
|
|
1700
|
+
qt as PanelProvider,
|
|
1701
|
+
Ot as PanelSlot,
|
|
1895
1702
|
Qt as PanelStage,
|
|
1896
1703
|
Pt as SettingsShell,
|
|
1897
|
-
|
|
1704
|
+
re as assertCcOnly,
|
|
1898
1705
|
ne as assertPanelDomShape,
|
|
1899
1706
|
ht as assertPanelTruths,
|
|
1900
|
-
|
|
1707
|
+
Wt as deriveSurfaceState,
|
|
1901
1708
|
bt as disablePanelAsserter,
|
|
1902
1709
|
gt as enablePanelAsserter,
|
|
1903
1710
|
mt as getCcRowById,
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1711
|
+
Gt as initialState,
|
|
1712
|
+
pe as positionKey,
|
|
1713
|
+
jt as reducer,
|
|
1907
1714
|
ut as transitionToPanel,
|
|
1908
|
-
|
|
1715
|
+
se as useCatalogState,
|
|
1909
1716
|
wt as useEditingCardId,
|
|
1910
|
-
|
|
1717
|
+
Se as usePageMgmtState,
|
|
1911
1718
|
Pe as usePanelContext,
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1719
|
+
M as usePanelContextOptional,
|
|
1720
|
+
Zt as usePanelCoordinator,
|
|
1721
|
+
he as useReducedMotionPanel,
|
|
1915
1722
|
It as useTransitionToPanel
|
|
1916
1723
|
};
|