@mt-gloss/ui 0.1.87 → 0.1.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
1
  import { jsx as i, jsxs as f, Fragment as v } from "react/jsx-runtime";
2
- import { createContext as I, useContext as p, useReducer as S, useRef as s, useEffect as c, useMemo as E, useCallback as C, useLayoutEffect as _ } from "react";
3
- const u = I(null);
4
- function h() {
5
- const e = p(u);
2
+ import { createContext as _, useContext as p, useReducer as h, useRef as u, useEffect as s, useMemo as E, useCallback as g, useState as P, useLayoutEffect as C } from "react";
3
+ const d = _(null);
4
+ function S() {
5
+ const e = p(d);
6
6
  if (!e)
7
7
  throw new Error(
8
8
  "[panels] usePanelContext must be used inside <PanelProvider>. See @mt-gloss/ui/composites/panels."
9
9
  );
10
10
  return e;
11
11
  }
12
- function w() {
13
- return p(u);
12
+ function F() {
13
+ return p(d);
14
14
  }
15
- const y = {
15
+ const m = {
16
16
  activePanelId: null,
17
17
  activeTrigger: null,
18
18
  bellCutoutOpen: !1,
@@ -20,11 +20,21 @@ const y = {
20
20
  lockHint: null,
21
21
  lastClose: null,
22
22
  pendingSideEffects: []
23
- }, P = /* @__PURE__ */ new Set(["settings"]);
23
+ }, y = /* @__PURE__ */ new Set(["settings"]);
24
24
  function O(e, n) {
25
- return e == null ? !1 : JSON.stringify(e) === JSON.stringify(n);
25
+ if (e == null || e.kind !== n.kind) return !1;
26
+ switch (e.kind) {
27
+ case "bell":
28
+ return !0;
29
+ case "card-overflow":
30
+ return e.cardId === n.cardId && e.sectionIndex === n.sectionIndex && e.action === n.action;
31
+ case "empty-cell":
32
+ return e.sectionIndex === n.sectionIndex && e.cellPosition.row === n.cellPosition.row && e.cellPosition.col === n.cellPosition.col;
33
+ case "manage-pages-action":
34
+ return e.global === n.global && e.align === n.align;
35
+ }
26
36
  }
27
- function m(e, n) {
37
+ function L(e, n) {
28
38
  switch (n.type) {
29
39
  case "OPEN_PANEL": {
30
40
  if (e.activePanelId && e.isDirty)
@@ -91,7 +101,7 @@ function m(e, n) {
91
101
  case "CLOSE_BELL_CUTOUT":
92
102
  return e.bellCutoutOpen ? { ...e, bellCutoutOpen: !1 } : e;
93
103
  case "BUFFER_BECOMES_DIRTY":
94
- return e.activePanelId == null || !P.has(e.activePanelId) ? {
104
+ return e.activePanelId == null || !y.has(e.activePanelId) ? {
95
105
  ...e,
96
106
  pendingSideEffects: [
97
107
  ...e.pendingSideEffects,
@@ -124,12 +134,14 @@ function m(e, n) {
124
134
  return e;
125
135
  }
126
136
  }
127
- function L(e) {
137
+ function T(e) {
128
138
  return e.activePanelId === "notification-center" ? "notif-center" : e.activePanelId != null && e.bellCutoutOpen ? e.isDirty ? "panel-dirty+cutout" : "panel-clean+cutout" : e.activePanelId != null ? e.isDirty ? "panel-dirty" : "panel-clean" : e.bellCutoutOpen ? "bell-cutout-only" : "idle";
129
139
  }
130
- function N() {
131
- const [e, n] = S(m, y), t = s([]), l = s(null);
132
- c(() => {
140
+ function D() {
141
+ const [e, n] = h(L, m), t = u([]), l = u(null);
142
+ s(() => () => {
143
+ l.current != null && (window.clearTimeout(l.current), l.current = null);
144
+ }, []), s(() => {
133
145
  if (e.pendingSideEffects.length !== 0) {
134
146
  for (const r of e.pendingSideEffects)
135
147
  r.type === "SCHEDULE_TIMER" ? (l.current != null && window.clearTimeout(l.current), l.current = window.setTimeout(() => {
@@ -145,7 +157,7 @@ function N() {
145
157
  ] : r.type === "INVALID_DISPATCH" && process.env.NODE_ENV !== "production" && console.warn("[panels] INVALID_DISPATCH:", r.reason);
146
158
  n({ type: "DRAIN_SIDE_EFFECTS" });
147
159
  }
148
- }, [e.pendingSideEffects]), c(() => {
160
+ }, [e.pendingSideEffects, n]), s(() => {
149
161
  if (!e.lastClose) return;
150
162
  const r = {
151
163
  panelId: e.lastClose.panelId,
@@ -159,35 +171,39 @@ function N() {
159
171
  ];
160
172
  }, [e.lastClose]);
161
173
  const o = E(
162
- () => L(e),
174
+ () => T(e),
163
175
  // eslint-disable-next-line react-hooks/exhaustive-deps
164
176
  [e.activePanelId, e.bellCutoutOpen, e.isDirty]
165
- ), a = C(() => t.current.slice(), []);
177
+ ), a = g(() => t.current.slice(), []);
166
178
  return { state: e, surfaceState: o, dispatch: n, getCloseLog: a };
167
179
  }
168
- function F({ children: e }) {
169
- const n = N(), t = E(
180
+ function k({ children: e }) {
181
+ const n = D(), t = E(
170
182
  () => n,
171
183
  // Re-publish only when one of the four coordinator fields changes identity.
172
184
  // dispatch + getCloseLog are stable. state + surfaceState change on dispatch.
173
185
  [n.state, n.surfaceState, n.dispatch, n.getCloseLog]
174
186
  );
175
- return /* @__PURE__ */ i(u.Provider, { value: t, children: e });
187
+ return /* @__PURE__ */ i(d.Provider, { value: t, children: e });
176
188
  }
177
- const T = {
189
+ const N = {
178
190
  position: "relative",
179
191
  pointerEvents: "auto"
180
192
  };
181
- function D({ children: e, onClose: n, isOpen: t = !0, footer: l }) {
182
- return /* @__PURE__ */ f(
193
+ function x({ children: e, onClose: n, isOpen: t = !0, footer: l }) {
194
+ const [o, a] = P(!1);
195
+ return C(() => {
196
+ const r = requestAnimationFrame(() => a(t));
197
+ return () => cancelAnimationFrame(r);
198
+ }, [t]), /* @__PURE__ */ f(
183
199
  "div",
184
200
  {
185
201
  "data-chrome": "panel",
186
- "data-open": t ? "true" : "false",
202
+ "data-open": o ? "true" : "false",
187
203
  role: "dialog",
188
204
  "aria-modal": "true",
189
205
  className: "gloss-panel-chrome",
190
- style: T,
206
+ style: N,
191
207
  children: [
192
208
  /* @__PURE__ */ i("div", { className: "gloss-panel-chrome__header", children: /* @__PURE__ */ i(
193
209
  "button",
@@ -206,7 +222,7 @@ function D({ children: e, onClose: n, isOpen: t = !0, footer: l }) {
206
222
  }
207
223
  );
208
224
  }
209
- const b = {
225
+ const H = {
210
226
  position: "fixed",
211
227
  top: 0,
212
228
  left: 0,
@@ -217,57 +233,64 @@ const b = {
217
233
  overflow: "visible",
218
234
  pointerEvents: "none",
219
235
  zIndex: 55
220
- }, x = {
236
+ }, b = {
221
237
  position: "fixed",
222
238
  top: "var(--tb-h, 60px)",
223
239
  left: 0,
224
240
  right: 0,
225
241
  bottom: 0,
226
242
  zIndex: 1,
227
- pointerEvents: "auto",
243
+ // CR-03 fix: pass-through tint — scrim is visual-only and must not intercept
244
+ // grid card clicks. Click-outside / scrim-dismiss is handled via the onClick
245
+ // on the div below, which still fires because pointer events on the element
246
+ // itself are honoured when explicitly set; using 'none' prevents the invisible
247
+ // overlay from swallowing clicks on underlying controls (same class as the
248
+ // panel-wrapper-covers-grid-cards bug fixed at V2FeedbackSurface).
249
+ pointerEvents: "none",
228
250
  background: "rgba(0, 0, 0, 0.04)"
229
251
  };
230
252
  function R({ panelComponents: e }) {
231
- const { state: n, dispatch: t, getCloseLog: l } = h(), o = n.activePanelId ? e[n.activePanelId] : null;
253
+ const { state: n, dispatch: t, getCloseLog: l } = S(), o = n.activePanelId ? e[n.activePanelId] : null;
232
254
  n.activePanelId && !o && process.env.NODE_ENV !== "production" && console.error(
233
255
  "[panels] No panel component registered for activePanelId:",
234
256
  n.activePanelId
235
- ), c(() => {
257
+ ), s(() => {
236
258
  if (n.activePanelId == null) return;
237
- function d(g) {
238
- g.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
259
+ function c(I) {
260
+ I.key === "Escape" && t({ type: "CLOSE_PANEL", reason: "escape-key" });
239
261
  }
240
- return document.addEventListener("keydown", d), () => {
241
- document.removeEventListener("keydown", d);
262
+ return document.addEventListener("keydown", c), () => {
263
+ document.removeEventListener("keydown", c);
242
264
  };
243
265
  }, [n.activePanelId, t]);
244
- const a = s(n);
245
- _(() => {
266
+ const a = u(n);
267
+ C(() => {
246
268
  a.current = n;
247
- }), c(() => {
248
- if (process.env.NODE_ENV !== "production")
249
- return window.__panelsHostHandle = {
250
- dispatch: t,
251
- getState: () => a.current,
252
- getCloseLog: l
253
- }, () => {
254
- delete window.__panelsHostHandle;
255
- };
269
+ }), s(() => {
270
+ if (process.env.NODE_ENV === "production") return;
271
+ const c = window;
272
+ return c.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), c.__panelsHostHandle = {
273
+ dispatch: t,
274
+ getState: () => a.current,
275
+ getCloseLog: l
276
+ }, () => {
277
+ c.__panelsHostHandle?.dispatch === t && delete c.__panelsHostHandle;
278
+ };
256
279
  }, [t, l]);
257
- const r = C(() => {
280
+ const r = g(() => {
258
281
  t({ type: "CLOSE_PANEL", reason: "nav-escape-hatch" });
259
282
  }, [t]);
260
- return /* @__PURE__ */ i("div", { "data-panel-host": "true", style: b, children: n.activePanelId != null && o != null && /* @__PURE__ */ f(v, { children: [
283
+ return /* @__PURE__ */ i("div", { "data-panel-host": "true", style: H, children: n.activePanelId != null && o != null && /* @__PURE__ */ f(v, { children: [
261
284
  /* @__PURE__ */ i(
262
285
  "div",
263
286
  {
264
287
  "data-panel-scrim": "true",
265
- style: x,
288
+ style: b,
266
289
  onClick: r
267
290
  }
268
291
  ),
269
292
  /* @__PURE__ */ i(
270
- D,
293
+ x,
271
294
  {
272
295
  isOpen: !0,
273
296
  onClose: () => t({ type: "CLOSE_PANEL", reason: "header-x" }),
@@ -276,7 +299,7 @@ function R({ panelComponents: e }) {
276
299
  )
277
300
  ] }) });
278
301
  }
279
- const k = {
302
+ const U = {
280
303
  "apply-button": !0,
281
304
  // the ONLY commit reason
282
305
  "cancel-button": !1,
@@ -290,14 +313,14 @@ const k = {
290
313
  "nav-escape-hatch": !1
291
314
  };
292
315
  export {
293
- k as C,
294
- F as P,
295
- w as a,
316
+ U as C,
317
+ k as P,
318
+ F as a,
296
319
  R as b,
297
- D as c,
298
- N as d,
299
- L as e,
300
- y as i,
301
- m as r,
302
- h as u
320
+ x as c,
321
+ D as d,
322
+ T as e,
323
+ m as i,
324
+ L as r,
325
+ S as u
303
326
  };
@@ -1,7 +1,7 @@
1
1
  import { jsxs as d, jsx as e, Fragment as We } from "react/jsx-runtime";
2
2
  import * as mr from "react";
3
3
  import Z, { useId as Le, useState as H, useCallback as N, createContext as Xt, useContext as qt, useRef as ce, useEffect as se, useMemo as ee, useSyncExternalStore as is, useReducer as ls, forwardRef as cs, useImperativeHandle as ds } from "react";
4
- import { S as J, E as Ze, C as B, i as us, R as Se, l as ms, m as ps, n as fs, aj as gs, Q as hs, t as bs, ad as ys, ak as ve, V as vs, W as Ja, X as Qa, Y as _s, _ as xs, $ as Ns, a0 as Ss, a1 as Cs, a2 as ws, a5 as ks, a6 as Ds, a7 as Is, ac as Ts, a8 as Es, a9 as Ms, P as Ps, O as Rs, j as Bs, k as As, a3 as zs, a4 as $s, o as Fs, v as Os, z as Ls, w as Hs, U as _t, A as Ws, D as Gs, x as Vs, F as js, y as Ks, ah as Ys, ai as Us, G as Xs, H as qs, I as Zs, J as Js, K as Qs, L as eo, M as to, N as ro, a as ge, b as Gt, f as en, e as Dt, h as Je, Z as tn, B as ao, af as no, d as rn, T as Ae, ae as so, ag as Na } from "./UIContext-DP6JGCto.js";
4
+ import { S as J, E as Ze, C as B, i as us, R as Se, l as ms, m as ps, n as fs, aj as gs, Q as hs, t as bs, ad as ys, ak as ve, V as vs, W as Ja, X as Qa, Y as _s, _ as xs, $ as Ns, a0 as Ss, a1 as Cs, a2 as ws, a5 as ks, a6 as Ds, a7 as Is, ac as Ts, a8 as Es, a9 as Ms, P as Ps, O as Rs, j as Bs, k as As, a3 as zs, a4 as $s, o as Fs, v as Os, z as Ls, w as Hs, U as _t, A as Ws, D as Gs, x as Vs, F as js, y as Ks, ah as Ys, ai as Us, G as Xs, H as qs, I as Zs, J as Js, K as Qs, L as eo, M as to, N as ro, a as fe, b as Gt, f as en, e as Dt, h as Je, Z as tn, B as ao, af as no, d as rn, T as Ae, ae as so, ag as Na } from "./UIContext-DP6JGCto.js";
5
5
  import { formatTrend as oo, isStatusModeEnabled as io, pickMetricTier as lo, getValueFontSize as Sa, formatValue as $r, getDateRangeForPreset as Ye, formatDateRangeSmart as ft, isInRange as co, isSameDay as rr, formatMarketDates as uo, DEFAULT_MARKET_PRESETS as ar, isMarketActive as St, detectPreset as nr, getDateRangeDisplayInfo as Ot, toUppercasePresetId as sr, generateMarketId as mo, ROLLING_OPTIONS as kr, PERIOD_OPTIONS as Dr } from "@mt-gloss/utils";
6
6
  import { useGridApiRef as po, DataGridPro as fo } from "@mui/x-data-grid-pro";
7
7
  import { Chip as Vt, Tooltip as ht, MenuItem as jt, Menu as go, Box as ne, Popper as ho, Paper as bo, MenuList as yo, ListItemText as vo, IconButton as qe, Select as Ca, Typography as Te, Divider as _o, Button as nt, Collapse as xo, Popover as No, Dialog as So, DialogTitle as Co, DialogContent as wo, TextField as or, DialogActions as ko, Tabs as Do, Tab as Io } from "@mui/material";
@@ -1186,7 +1186,7 @@ const hl = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], bl = ["January", "
1186
1186
  de === "right" && /* @__PURE__ */ e("button", { type: "button", className: "gloss-preset-daterangepicker__nav-btn", onClick: () => U(1), "aria-label": "Next month", children: /* @__PURE__ */ e(ve, { name: "chevron-right", size: "sm" }) })
1187
1187
  ] }),
1188
1188
  /* @__PURE__ */ e("div", { className: "gloss-preset-daterangepicker__day-headers", children: G.map((ie) => /* @__PURE__ */ e("span", { className: "gloss-preset-daterangepicker__day-header", children: ie }, ie)) }),
1189
- /* @__PURE__ */ e(Qa, { children: be.map((ie, fe) => /* @__PURE__ */ e(ws, { selected: ie.isSelected, today: ie.isToday, outsideMonth: !ie.isCurrentMonth, disabled: ie.isDisabled, rangeStart: ie.isRangeStart, rangeEnd: ie.isRangeEnd, inRange: ie.inRange, onClick: () => !ie.isDisabled && F(ie.date), children: ie.date.getDate() }, fe)) })
1189
+ /* @__PURE__ */ e(Qa, { children: be.map((ie, ge) => /* @__PURE__ */ e(ws, { selected: ie.isSelected, today: ie.isToday, outsideMonth: !ie.isCurrentMonth, disabled: ie.isDisabled, rangeStart: ie.isRangeStart, rangeEnd: ie.isRangeEnd, inRange: ie.inRange, onClick: () => !ie.isDisabled && F(ie.date), children: ie.date.getDate() }, ge)) })
1190
1190
  ] });
1191
1191
  return /* @__PURE__ */ d("div", { className: te, ref: g, children: [
1192
1192
  _ && /* @__PURE__ */ e("label", { className: "gloss-preset-daterangepicker__label", htmlFor: I, children: _ }),
@@ -2894,7 +2894,7 @@ const Pc = (r) => {
2894
2894
  gap: n = 8
2895
2895
  } = r, s = Math.max(1, t);
2896
2896
  return /* @__PURE__ */ e(
2897
- ge,
2897
+ fe,
2898
2898
  {
2899
2899
  className: "gloss-skeleton",
2900
2900
  "aria-hidden": "true",
@@ -2942,7 +2942,7 @@ const Aa = [60, 80, 45, 90, 65, 75, 55, 85, 70, 50], Rc = ({
2942
2942
  }) => {
2943
2943
  const a = Math.max(1, Math.min(r, Aa.length)), n = Aa.slice(0, a);
2944
2944
  return /* @__PURE__ */ e(
2945
- ge,
2945
+ fe,
2946
2946
  {
2947
2947
  className: "gloss-skeleton-chart",
2948
2948
  "aria-hidden": "true",
@@ -2976,7 +2976,7 @@ const Bc = ({
2976
2976
  rowHeight: n = 44
2977
2977
  }) => {
2978
2978
  const s = Math.max(1, r), i = Math.max(1, t);
2979
- return /* @__PURE__ */ d(ge, { className: "gloss-skeleton-table", "aria-hidden": "true", style: { width: "100%" }, children: [
2979
+ return /* @__PURE__ */ d(fe, { className: "gloss-skeleton-table", "aria-hidden": "true", style: { width: "100%" }, children: [
2980
2980
  /* @__PURE__ */ e(
2981
2981
  "div",
2982
2982
  {
@@ -3035,7 +3035,7 @@ const Ac = ({
3035
3035
  }) => {
3036
3036
  const a = t >= 2 ? "40%" : "55%";
3037
3037
  return /* @__PURE__ */ d(
3038
- ge,
3038
+ fe,
3039
3039
  {
3040
3040
  className: "gloss-skeleton-card",
3041
3041
  "aria-hidden": "true",
@@ -3427,7 +3427,7 @@ function Tn(r) {
3427
3427
  if (!n) {
3428
3428
  const l = r.statuses[0];
3429
3429
  return /* @__PURE__ */ d(
3430
- ge,
3430
+ fe,
3431
3431
  {
3432
3432
  definition: { display: "flex", direction: "column" },
3433
3433
  className: "gloss-status-card gloss-status-card--flag-off",
@@ -3752,7 +3752,7 @@ const Pr = {
3752
3752
  a === "sparkline" && /* @__PURE__ */ e(yr, { data: b, color: f, isStale: p }),
3753
3753
  a === "bars" && /* @__PURE__ */ e(wn, { data: _, color: f, isStale: p }),
3754
3754
  /* @__PURE__ */ d(
3755
- ge,
3755
+ fe,
3756
3756
  {
3757
3757
  className: "gloss-metric-card__zone-a",
3758
3758
  "data-tier": C,
@@ -3764,7 +3764,7 @@ const Pr = {
3764
3764
  }
3765
3765
  ),
3766
3766
  /* @__PURE__ */ d(
3767
- ge,
3767
+ fe,
3768
3768
  {
3769
3769
  definition: { display: "flex", align: "center" },
3770
3770
  className: `gloss-metric-card__zone-b ${O}`,
@@ -3790,7 +3790,7 @@ const Pr = {
3790
3790
  }
3791
3791
  ),
3792
3792
  /* @__PURE__ */ d(
3793
- ge,
3793
+ fe,
3794
3794
  {
3795
3795
  definition: { display: "flex", justify: "between", align: "center" },
3796
3796
  className: `gloss-metric-card__zone-c ${O}`,
@@ -4088,7 +4088,7 @@ const En = (r) => {
4088
4088
  se(() => () => {
4089
4089
  ie.current !== null && (clearTimeout(ie.current), ie.current = null);
4090
4090
  }, []);
4091
- const fe = N(
4091
+ const ge = N(
4092
4092
  (ae) => {
4093
4093
  if (!O) return;
4094
4094
  const xe = ae.nativeEvent?.relatedTarget, je = ae.relatedTarget, $e = xe ?? je;
@@ -4150,9 +4150,9 @@ const En = (r) => {
4150
4150
  "data-visible": n ? "true" : "false",
4151
4151
  "data-has-shown": h ? "true" : "false",
4152
4152
  style: de,
4153
- onPointerLeave: fe,
4153
+ onPointerLeave: ge,
4154
4154
  onPointerEnter: Ce,
4155
- onMouseLeave: fe,
4155
+ onMouseLeave: ge,
4156
4156
  onMouseEnter: Ce,
4157
4157
  ...K(),
4158
4158
  children: /* @__PURE__ */ d(
@@ -4427,7 +4427,7 @@ const id = [
4427
4427
  });
4428
4428
  }, _ = s === "stacked";
4429
4429
  return s === "dimension-chooser" ? /* @__PURE__ */ d(
4430
- ge,
4430
+ fe,
4431
4431
  {
4432
4432
  definition: { display: "flex", direction: "column", padding: "10px 12px 8px", gap: "6px" },
4433
4433
  style: { width: "100%", height: "100%" },
@@ -4479,13 +4479,13 @@ const id = [
4479
4479
  ]
4480
4480
  }
4481
4481
  ) : /* @__PURE__ */ d(
4482
- ge,
4482
+ fe,
4483
4483
  {
4484
4484
  definition: { display: "flex", direction: "column", padding: "10px 12px 8px", gap: "6px" },
4485
4485
  style: { width: "100%", height: "100%" },
4486
4486
  children: [
4487
4487
  /* @__PURE__ */ d(
4488
- ge,
4488
+ fe,
4489
4489
  {
4490
4490
  definition: { display: "flex", align: "center", justify: "between" },
4491
4491
  className: "gloss-metric-card__back-title",
@@ -4512,7 +4512,7 @@ const id = [
4512
4512
  }
4513
4513
  ),
4514
4514
  /* @__PURE__ */ e(
4515
- ge,
4515
+ fe,
4516
4516
  {
4517
4517
  definition: { display: "grid", gap: "6px" },
4518
4518
  style: { gridTemplateColumns: "repeat(3, 1fr)", flex: 1, alignContent: "center" },
@@ -4618,7 +4618,7 @@ const ot = function({
4618
4618
  onFlipChange: K,
4619
4619
  clickShadowSlot: q
4620
4620
  }) {
4621
- const [te, he] = H(!1), [oe, be] = H(!1), [de, ie] = H(!1), fe = U ?? de, Ce = ce(!1), ke = ce(null), Ne = V !== void 0 ? V : te, Xe = W ?? ke, we = ce(null), me = ce(null), _e = t ?? a, Ge = N(() => {
4621
+ const [te, he] = H(!1), [oe, be] = H(!1), [de, ie] = H(!1), ge = U ?? de, Ce = ce(!1), ke = ce(null), Ne = V !== void 0 ? V : te, Xe = W ?? ke, we = ce(null), me = ce(null), _e = t ?? a, Ge = N(() => {
4622
4622
  we.current = null, me.current = null, U !== void 0 ? K?.(!0) : ie(!0);
4623
4623
  }, [U, K]), Ve = N(() => {
4624
4624
  if (C) {
@@ -4675,7 +4675,18 @@ const ot = function({
4675
4675
  boxShadow: u ? "var(--shadow-card), 0 0 0 2px var(--color-accent, #4f46e5)" : Ne && !c ? "var(--shadow-card-hover)" : "var(--shadow-card)",
4676
4676
  transition: "border-color 180ms, box-shadow 180ms",
4677
4677
  perspective: 600,
4678
- transformStyle: "preserve-3d",
4678
+ // transformStyle 'preserve-3d' MOVED to the inner flipper div below
4679
+ // (Path 1 — Quick 260511-6xk T3 second follow-up). When preserve-3d
4680
+ // lived on the root, every sibling (FRONT/BACK BaseBox, click-shadow,
4681
+ // hover bridge, ActionStrip) participated in a single 3D context
4682
+ // where Chromium hit-testing uses composited-layer DOM order with
4683
+ // z-index as a weak tiebreaker — FRONT BaseBox's backface-hidden
4684
+ // composited layer intercepted clicks on the ActionStrip pill's
4685
+ // inside-card 14px overlap. Path 2 (pointer-events:none on FRONT)
4686
+ // alone didn't restore clicks because the click then fell through to
4687
+ // the root which has no handler. Scoping preserve-3d to the flipper
4688
+ // subtree means the strip, click-shadow, and hover bridge live in
4689
+ // normal 2D stacking where z-index is authoritative.
4679
4690
  zIndex: (Ne || oe) && !c ? 10 : "auto",
4680
4691
  ...l
4681
4692
  },
@@ -4700,51 +4711,65 @@ const ot = function({
4700
4711
  }
4701
4712
  ),
4702
4713
  /* @__PURE__ */ d(
4703
- ge,
4714
+ "div",
4704
4715
  {
4705
- definition: { display: "flex", direction: "column", padding: "10px 12px 8px", bg: "var(--color-surface-primary)", radius: "var(--gloss-metric-card-radius, 12px)" },
4706
4716
  style: {
4707
4717
  position: "absolute",
4708
4718
  inset: 0,
4709
4719
  zIndex: 2,
4710
- backfaceVisibility: "hidden",
4711
- WebkitBackfaceVisibility: "hidden",
4712
- transform: fe ? "rotateY(180deg)" : "rotateY(0deg)",
4713
- transition: "transform 500ms cubic-bezier(0.22, 1, 0.36, 1)"
4720
+ transformStyle: "preserve-3d",
4721
+ WebkitTransformStyle: "preserve-3d",
4722
+ transform: ge ? "rotateY(180deg)" : "rotateY(0deg)",
4723
+ transition: "transform 500ms cubic-bezier(0.22, 1, 0.36, 1)",
4724
+ pointerEvents: "none"
4714
4725
  },
4715
- "data-resize-phase": F,
4716
4726
  children: [
4717
- _e,
4718
- /* @__PURE__ */ e("div", { className: "gloss-card-shell__resize-outgoing", "aria-hidden": "true", children: X })
4719
- ]
4720
- }
4721
- ),
4722
- /* @__PURE__ */ e(
4723
- ge,
4724
- {
4725
- definition: { bg: "var(--color-surface-primary)", radius: "var(--gloss-metric-card-radius, 12px)" },
4726
- style: {
4727
- position: "absolute",
4728
- inset: 0,
4729
- zIndex: 2,
4730
- backfaceVisibility: "hidden",
4731
- WebkitBackfaceVisibility: "hidden",
4732
- transform: fe ? "rotateY(0deg)" : "rotateY(-180deg)",
4733
- transition: "transform 500ms cubic-bezier(0.22, 1, 0.36, 1)"
4734
- },
4735
- children: D ?? /* @__PURE__ */ e(
4736
- Mn,
4737
- {
4738
- mode: C ? "stacked" : "single",
4739
- currentTimeframe: P,
4740
- onSelectTimeframe: ae,
4741
- title: x,
4742
- currentStackedTimeframes: T,
4743
- onSelectStackedTimeframes: (Pe) => {
4744
- me.current = Pe;
4727
+ /* @__PURE__ */ d(
4728
+ fe,
4729
+ {
4730
+ definition: { display: "flex", direction: "column", padding: "10px 12px 8px", bg: "var(--color-surface-primary)", radius: "var(--gloss-metric-card-radius, 12px)" },
4731
+ style: {
4732
+ position: "absolute",
4733
+ inset: 0,
4734
+ backfaceVisibility: "hidden",
4735
+ WebkitBackfaceVisibility: "hidden",
4736
+ pointerEvents: "none"
4737
+ },
4738
+ "data-resize-phase": F,
4739
+ children: [
4740
+ /* @__PURE__ */ e("div", { style: { pointerEvents: "auto", display: "flex", flexDirection: "column", flex: "1 1 auto", minHeight: 0 }, children: _e }),
4741
+ /* @__PURE__ */ e("div", { className: "gloss-card-shell__resize-outgoing", "aria-hidden": "true", children: X })
4742
+ ]
4745
4743
  }
4746
- }
4747
- )
4744
+ ),
4745
+ /* @__PURE__ */ e(
4746
+ fe,
4747
+ {
4748
+ definition: { bg: "var(--color-surface-primary)", radius: "var(--gloss-metric-card-radius, 12px)" },
4749
+ style: {
4750
+ position: "absolute",
4751
+ inset: 0,
4752
+ backfaceVisibility: "hidden",
4753
+ WebkitBackfaceVisibility: "hidden",
4754
+ transform: "rotateY(180deg)",
4755
+ pointerEvents: "auto"
4756
+ },
4757
+ children: D ?? /* @__PURE__ */ e(
4758
+ Mn,
4759
+ {
4760
+ mode: C ? "stacked" : "single",
4761
+ currentTimeframe: P,
4762
+ onSelectTimeframe: ae,
4763
+ title: x,
4764
+ currentStackedTimeframes: T,
4765
+ onSelectStackedTimeframes: (Pe) => {
4766
+ me.current = Pe;
4767
+ }
4768
+ }
4769
+ )
4770
+ }
4771
+ )
4772
+ ]
4748
4773
  }
4749
4774
  ),
4750
4775
  q,
@@ -4817,7 +4842,7 @@ const ot = function({
4817
4842
  visible: De,
4818
4843
  expanded: oe,
4819
4844
  onExpandedChange: be,
4820
- isFlipped: fe,
4845
+ isFlipped: ge,
4821
4846
  onFlipBack: Ve,
4822
4847
  anchorX: j,
4823
4848
  context: {
@@ -4919,7 +4944,7 @@ const pd = function(t) {
4919
4944
  "data-stacked-capacity": M,
4920
4945
  style: { position: "relative", width: "100%", height: "100%" },
4921
4946
  children: /* @__PURE__ */ d(
4922
- ge,
4947
+ fe,
4923
4948
  {
4924
4949
  definition: { display: "flex", direction: "column" },
4925
4950
  style: { position: "relative", width: "100%", height: "100%", overflow: "hidden" },
@@ -4947,7 +4972,7 @@ const pd = function(t) {
4947
4972
  children: Y.map((R, W) => {
4948
4973
  const V = R.timeframe === k;
4949
4974
  return /* @__PURE__ */ d(
4950
- ge,
4975
+ fe,
4951
4976
  {
4952
4977
  definition: { display: "flex", direction: "column", align: "center", justify: "center" },
4953
4978
  "data-slot-idx": W,
@@ -5450,7 +5475,7 @@ function Dd(r) {
5450
5475
  paginationMode: "server"
5451
5476
  } : { autoPageSize: !0 }, [l]), x = ee(() => Nd, []);
5452
5477
  return s ? /* @__PURE__ */ e(
5453
- ge,
5478
+ fe,
5454
5479
  {
5455
5480
  className: "gloss-unified-breakdown-table gloss-unified-breakdown-table--error",
5456
5481
  style: {
@@ -5465,7 +5490,7 @@ function Dd(r) {
5465
5490
  children: "Failed to load data. Please try again."
5466
5491
  }
5467
5492
  ) : i && !n ? /* @__PURE__ */ e(
5468
- ge,
5493
+ fe,
5469
5494
  {
5470
5495
  className: "gloss-unified-breakdown-table gloss-unified-breakdown-table--empty",
5471
5496
  style: {
@@ -5479,8 +5504,8 @@ function Dd(r) {
5479
5504
  },
5480
5505
  children: "No data available."
5481
5506
  }
5482
- ) : /* @__PURE__ */ d(ge, { className: "gloss-unified-breakdown-table", style: { width: "100%", height: "100%", display: "flex", flexDirection: "column" }, children: [
5483
- u && u.length > 0 && /* @__PURE__ */ e(ge, { style: { padding: "0 8px 8px", display: "flex", gap: "4px", flexWrap: "wrap" }, children: u.map((D) => /* @__PURE__ */ e(
5507
+ ) : /* @__PURE__ */ d(fe, { className: "gloss-unified-breakdown-table", style: { width: "100%", height: "100%", display: "flex", flexDirection: "column" }, children: [
5508
+ u && u.length > 0 && /* @__PURE__ */ e(fe, { style: { padding: "0 8px 8px", display: "flex", gap: "4px", flexWrap: "wrap" }, children: u.map((D) => /* @__PURE__ */ e(
5484
5509
  Cn,
5485
5510
  {
5486
5511
  id: D.id,
@@ -5492,7 +5517,7 @@ function Dd(r) {
5492
5517
  },
5493
5518
  D.id
5494
5519
  )) }),
5495
- /* @__PURE__ */ e(ge, { style: { flex: 1, minHeight: 0, width: "100%", overflow: "hidden" }, children: /* @__PURE__ */ e(
5520
+ /* @__PURE__ */ e(fe, { style: { flex: 1, minHeight: 0, width: "100%", overflow: "hidden" }, children: /* @__PURE__ */ e(
5496
5521
  fo,
5497
5522
  {
5498
5523
  rows: w,
@@ -5535,7 +5560,7 @@ const Rn = Z.memo(({
5535
5560
  showDimensionGroup: b = !0,
5536
5561
  datePickerSlot: _
5537
5562
  }) => /* @__PURE__ */ d(Dt, { definition: { direction: "horizontal", align: "center" }, className: "gloss-chart-control-bar__row-1", children: [
5538
- /* @__PURE__ */ e(ge, { style: { marginRight: 10 }, children: /* @__PURE__ */ e(
5563
+ /* @__PURE__ */ e(fe, { style: { marginRight: 10 }, children: /* @__PURE__ */ e(
5539
5564
  ur,
5540
5565
  {
5541
5566
  group: t,
@@ -5544,7 +5569,7 @@ const Rn = Z.memo(({
5544
5569
  groupRef: c
5545
5570
  }
5546
5571
  ) }),
5547
- /* @__PURE__ */ e(ge, { style: { marginRight: 6 }, children: /* @__PURE__ */ e(
5572
+ /* @__PURE__ */ e(fe, { style: { marginRight: 6 }, children: /* @__PURE__ */ e(
5548
5573
  ur,
5549
5574
  {
5550
5575
  group: a,
@@ -5556,7 +5581,7 @@ const Rn = Z.memo(({
5556
5581
  connectorActive: f
5557
5582
  }
5558
5583
  ) }),
5559
- b && /* @__PURE__ */ e(ge, { children: /* @__PURE__ */ e(
5584
+ b && /* @__PURE__ */ e(fe, { children: /* @__PURE__ */ e(
5560
5585
  ur,
5561
5586
  {
5562
5587
  group: n,
@@ -5568,7 +5593,7 @@ const Rn = Z.memo(({
5568
5593
  connectorActive: y
5569
5594
  }
5570
5595
  ) }),
5571
- _ && /* @__PURE__ */ e(ge, { className: "gloss-chart-control-bar__datepicker", children: _ })
5596
+ _ && /* @__PURE__ */ e(fe, { className: "gloss-chart-control-bar__datepicker", children: _ })
5572
5597
  ] }));
5573
5598
  Rn.displayName = "Row1Controls";
5574
5599
  const La = () => /* @__PURE__ */ d(
@@ -6054,7 +6079,7 @@ const $d = Z.memo(({
6054
6079
  _.entity === "items" && w((me) => !me);
6055
6080
  }, [_.entity]), ie = N(() => {
6056
6081
  I((me) => !me);
6057
- }, []), fe = N((me) => {
6082
+ }, []), ge = N((me) => {
6058
6083
  P(me), z(""), i(me, me);
6059
6084
  }, [i]), Ce = N(() => {
6060
6085
  P(null), i(null, null);
@@ -6108,7 +6133,7 @@ const $d = Z.memo(({
6108
6133
  }
6109
6134
  )
6110
6135
  ] }),
6111
- /* @__PURE__ */ e(ge, { className: "gloss-chart-control-bar__interactive", children: /* @__PURE__ */ e(
6136
+ /* @__PURE__ */ e(fe, { className: "gloss-chart-control-bar__interactive", children: /* @__PURE__ */ e(
6112
6137
  Rn,
6113
6138
  {
6114
6139
  selections: _,
@@ -6139,7 +6164,7 @@ const $d = Z.memo(({
6139
6164
  entityFilterLayout: { left: K.entityFilter.left, width: K.entityFilter.width },
6140
6165
  itemSearch: C,
6141
6166
  setItemSearch: z,
6142
- onItemSubmit: fe,
6167
+ onItemSubmit: ge,
6143
6168
  onItemSelect: Xe,
6144
6169
  onItemClear: Ce,
6145
6170
  itemFilterValue: g,
@@ -7047,15 +7072,15 @@ const Vd = ["S", "M", "T", "W", "T", "F", "S"], Ga = {
7047
7072
  );
7048
7073
  const X = /* @__PURE__ */ new Date();
7049
7074
  for (let U = 1; U <= S; U++) {
7050
- const K = new Date(E, w, U), q = A(K), te = M(K), he = O(K), oe = Y(K), be = j(K), de = z(K), ie = rr(K, X), fe = ["mini-calendar__day"];
7051
- be ? (fe.push("mini-calendar__day--disabled"), he ? fe.push("mini-calendar__day--disabled-end") : q && fe.push("mini-calendar__day--disabled-in-range"), de && fe.push("mini-calendar__day--market")) : (oe ? fe.push("mini-calendar__day--single") : te ? fe.push("mini-calendar__day--start") : he ? fe.push("mini-calendar__day--end") : q && fe.push("mini-calendar__day--in-range"), (oe || te || he || q) && (u === "secondary" ? fe.push("mini-calendar__day--secondary") : u === "tertiary" && fe.push("mini-calendar__day--tertiary")), ie && !te && !he && !oe && fe.push("mini-calendar__day--today"), de && fe.push("mini-calendar__day--market"));
7075
+ const K = new Date(E, w, U), q = A(K), te = M(K), he = O(K), oe = Y(K), be = j(K), de = z(K), ie = rr(K, X), ge = ["mini-calendar__day"];
7076
+ be ? (ge.push("mini-calendar__day--disabled"), he ? ge.push("mini-calendar__day--disabled-end") : q && ge.push("mini-calendar__day--disabled-in-range"), de && ge.push("mini-calendar__day--market")) : (oe ? ge.push("mini-calendar__day--single") : te ? ge.push("mini-calendar__day--start") : he ? ge.push("mini-calendar__day--end") : q && ge.push("mini-calendar__day--in-range"), (oe || te || he || q) && (u === "secondary" ? ge.push("mini-calendar__day--secondary") : u === "tertiary" && ge.push("mini-calendar__day--tertiary")), ie && !te && !he && !oe && ge.push("mini-calendar__day--today"), de && ge.push("mini-calendar__day--market"));
7052
7077
  const Ce = /* @__PURE__ */ e(
7053
7078
  ne,
7054
7079
  {
7055
7080
  component: "button",
7056
7081
  onClick: be ? void 0 : () => R(U),
7057
7082
  onMouseEnter: be ? void 0 : () => W(U),
7058
- className: fe.join(" "),
7083
+ className: ge.join(" "),
7059
7084
  sx: {
7060
7085
  border: "none",
7061
7086
  fontFamily: "inherit"
@@ -7329,7 +7354,7 @@ const Yd = {
7329
7354
  ...u
7330
7355
  }), [u]), k = ce(null), [E, w] = H(null), [S, I] = H("calendar"), [g, P] = H(null), [x, D] = H(null), C = ce(null), [z, T] = H(() => h.lastPreset || "mtd"), [A, M] = H(null), [O, Y] = H(null), [j, R] = H(null), [W, V] = H(null), [G, F] = H(null), [X, U] = H(() => a ? _ ?? h.compareEnabled ?? !1 : !1), K = _ ?? X, q = N(($) => {
7331
7356
  U($), v?.($);
7332
- }, [v]), [te, he] = H("A"), [oe, be] = H(() => h.lastPresetB ?? null), [de, ie] = H(null), [fe, Ce] = H(null), [ke, Ne] = H(null), [Xe, we] = H(null), [me, _e] = H(null), [Ge, Ve] = H(null), [ae, xe] = H(null), [je, $e] = H(null), [De, Re] = H(null), [Pe, Ke] = H(null), [xt, Fe] = H(null), [Ee, it] = H(1), [Jt, tt] = H(!1), [lt, Et] = H(void 0), Be = j !== null ? j : z, Mt = j !== null ? W : A, mt = j !== null ? G : O, ct = ke !== null ? ke : oe, Pt = ke !== null ? Xe : de, Rt = ke !== null ? me : fe, dt = De !== null ? De : Ge, Bt = De !== null ? Pe : ae, At = De !== null ? xt : je, oa = j !== null && (j !== z || W !== A || G !== O), [pe, _r] = H(() => {
7357
+ }, [v]), [te, he] = H("A"), [oe, be] = H(() => h.lastPresetB ?? null), [de, ie] = H(null), [ge, Ce] = H(null), [ke, Ne] = H(null), [Xe, we] = H(null), [me, _e] = H(null), [Ge, Ve] = H(null), [ae, xe] = H(null), [je, $e] = H(null), [De, Re] = H(null), [Pe, Ke] = H(null), [xt, Fe] = H(null), [Ee, it] = H(1), [Jt, tt] = H(!1), [lt, Et] = H(void 0), Be = j !== null ? j : z, Mt = j !== null ? W : A, mt = j !== null ? G : O, ct = ke !== null ? ke : oe, Pt = ke !== null ? Xe : de, Rt = ke !== null ? me : ge, dt = De !== null ? De : Ge, Bt = De !== null ? Pe : ae, At = De !== null ? xt : je, oa = j !== null && (j !== z || W !== A || G !== O), [pe, _r] = H(() => {
7333
7358
  const $ = m || ar, L = f || [], Q = new Set(L.map((ue) => ue.id)), re = $.filter((ue) => !Q.has(ue.id)).map((ue) => ({ ...ue, active: St(ue) })), le = L.map((ue) => ({
7334
7359
  ...ue,
7335
7360
  active: St(ue)
@@ -7417,8 +7442,8 @@ const Yd = {
7417
7442
  }, [z, A, O, pe]), Xn = ee(() => {
7418
7443
  if (!K || !oe) return null;
7419
7444
  let $, L;
7420
- if (oe === "custom" && de && fe)
7421
- $ = de, L = fe;
7445
+ if (oe === "custom" && de && ge)
7446
+ $ = de, L = ge;
7422
7447
  else {
7423
7448
  const re = pe.find((le) => le.id === oe);
7424
7449
  if (re)
@@ -7429,7 +7454,7 @@ const Yd = {
7429
7454
  }
7430
7455
  }
7431
7456
  return Ot($, L, /* @__PURE__ */ new Date(), pe).display;
7432
- }, [K, oe, de, fe, pe]), da = ee(() => {
7457
+ }, [K, oe, de, ge, pe]), da = ee(() => {
7433
7458
  const $ = ["7d", "30d", "60d", "90d", "mtd", "qtd", "ytd", "lytd"], L = pe.find((Q) => Q.id === z);
7434
7459
  if (L)
7435
7460
  return ft(L.startDate, L.endDate, /* @__PURE__ */ new Date());
@@ -7488,8 +7513,8 @@ const Yd = {
7488
7513
  return Q.preset ? `${Q.preset.label} (${re})` : re;
7489
7514
  }, [K, Ee, dt, Bt, At, pe]);
7490
7515
  const qn = N(($) => {
7491
- R(z), V(A), F(O), K && (Ne(oe), we(de), _e(fe), Ee >= 3 && (Re(Ge), Ke(ae), Fe(je))), w($.currentTarget);
7492
- }, [z, A, O, K, Ee, oe, de, fe, Ge, ae, je]), ma = N(($, L, Q) => {
7516
+ R(z), V(A), F(O), K && (Ne(oe), we(de), _e(ge), Ee >= 3 && (Re(Ge), Ke(ae), Fe(je))), w($.currentTarget);
7517
+ }, [z, A, O, K, Ee, oe, de, ge, Ge, ae, je]), ma = N(($, L, Q) => {
7493
7518
  const re = [$, L];
7494
7519
  Q && (re.shortcutId = sr(Q)), t(re);
7495
7520
  }, [t]), er = N(($, L, Q) => {
@@ -8577,10 +8602,10 @@ const Ar = [
8577
8602
  onPinChange: u
8578
8603
  }) => {
8579
8604
  const [p, m] = H(null);
8580
- return /* @__PURE__ */ d(ge, { definition: { display: "flex", direction: "column", gap: "8px" }, children: [
8605
+ return /* @__PURE__ */ d(fe, { definition: { display: "flex", direction: "column", gap: "8px" }, children: [
8581
8606
  r.map(({ label: f, getValue: y, id: b, disabled: _ }) => {
8582
8607
  const v = y(), h = !_ && (n ? n === b : a?.[0] && v?.[0] && Da(a[0], v[0]) && a?.[1] && v?.[1] && Da(a[1], v[1])), k = l === b, S = /* @__PURE__ */ d(
8583
- ge,
8608
+ fe,
8584
8609
  {
8585
8610
  definition: { display: "flex", align: "center", gap: "4px" },
8586
8611
  style: { width: "100%" },
@@ -8588,7 +8613,7 @@ const Ar = [
8588
8613
  onMouseLeave: () => m(null),
8589
8614
  children: [
8590
8615
  /* @__PURE__ */ e(
8591
- ge,
8616
+ fe,
8592
8617
  {
8593
8618
  as: "button",
8594
8619
  className: `gloss-timeframe__chip${h ? " gloss-timeframe__chip--active" : ""}${_ ? " gloss-timeframe__chip--disabled" : ""}`,
@@ -8618,7 +8643,7 @@ const Ar = [
8618
8643
  return _ ? /* @__PURE__ */ e(ht, { title: "Market configuration coming soon", arrow: !0, placement: "right", children: /* @__PURE__ */ e("div", { children: S }) }, f) : /* @__PURE__ */ e("div", { children: S }, f);
8619
8644
  }),
8620
8645
  i && /* @__PURE__ */ e(
8621
- ge,
8646
+ fe,
8622
8647
  {
8623
8648
  as: "button",
8624
8649
  className: `gloss-timeframe__chip${o ? " gloss-timeframe__chip--active" : ""}`,
@@ -8632,7 +8657,7 @@ const Ar = [
8632
8657
  const { content: t, shortcuts: a, actionBar: n } = Zo(r), { slotProps: s, ...i } = r;
8633
8658
  return /* @__PURE__ */ e(Jo, { ...i, children: /* @__PURE__ */ d(Dt, { definition: { direction: "horizontal" }, children: [
8634
8659
  /* @__PURE__ */ e(
8635
- ge,
8660
+ fe,
8636
8661
  {
8637
8662
  definition: { display: "flex", direction: "column" },
8638
8663
  style: {
@@ -8645,7 +8670,7 @@ const Ar = [
8645
8670
  children: a
8646
8671
  }
8647
8672
  ),
8648
- /* @__PURE__ */ d(ge, { definition: { display: "flex", direction: "column" }, children: [
8673
+ /* @__PURE__ */ d(fe, { definition: { display: "flex", direction: "column" }, children: [
8649
8674
  /* @__PURE__ */ e(Qo, { className: ei.contentWrapper, ownerState: r, children: t }),
8650
8675
  n
8651
8676
  ] })
@@ -9065,7 +9090,7 @@ const eu = 30, tu = { distance: 5 }, ru = {
9065
9090
  gridAutoRows: `${n.rowHeight}px`,
9066
9091
  gap: `${n.gap}px`
9067
9092
  }), [n.columns, n.rowHeight, n.gap]), z = !!(_ && D && l.length > 0);
9068
- return /* @__PURE__ */ d(ge, { className: `gloss-grid${m ? " gloss-grid--armed" : ""}`, children: [
9093
+ return /* @__PURE__ */ d(fe, { className: `gloss-grid${m ? " gloss-grid--armed" : ""}`, children: [
9069
9094
  /* @__PURE__ */ d(
9070
9095
  ni,
9071
9096
  {
@@ -9191,7 +9216,7 @@ const cu = Z.memo(function({
9191
9216
  );
9192
9217
  return /* @__PURE__ */ d(Dt, { definition: { direction: "vertical" }, className: "gloss-tabbed-data-view", style: { width: "100%", height: "100%" }, children: [
9193
9218
  /* @__PURE__ */ d(
9194
- ge,
9219
+ fe,
9195
9220
  {
9196
9221
  className: "gloss-tabbed-data-view__header",
9197
9222
  style: {
@@ -9284,12 +9309,12 @@ const cu = Z.memo(function({
9284
9309
  }
9285
9310
  )
9286
9311
  ] }),
9287
- c && /* @__PURE__ */ e(ge, { style: { display: "flex", alignItems: "center", gap: "8px", flexShrink: 0 }, children: c })
9312
+ c && /* @__PURE__ */ e(fe, { style: { display: "flex", alignItems: "center", gap: "8px", flexShrink: 0 }, children: c })
9288
9313
  ]
9289
9314
  }
9290
9315
  ),
9291
9316
  /* @__PURE__ */ e(
9292
- ge,
9317
+ fe,
9293
9318
  {
9294
9319
  className: "gloss-tabbed-data-view__content",
9295
9320
  style: { flexGrow: 1, minHeight: 0, overflow: "hidden", position: "relative", width: "100%" },
@@ -10036,9 +10061,9 @@ const Cu = Z.forwardRef(
10036
10061
  return;
10037
10062
  }
10038
10063
  if (c) {
10039
- const fe = c(ie);
10040
- if (fe !== !0) {
10041
- C(typeof fe == "string" ? fe : "Invalid tag");
10064
+ const ge = c(ie);
10065
+ if (ge !== !0) {
10066
+ C(typeof ge == "string" ? ge : "Invalid tag");
10042
10067
  return;
10043
10068
  }
10044
10069
  }
@@ -10048,14 +10073,14 @@ const Cu = Z.forwardRef(
10048
10073
  [Y, W, s, o, i, c, V]
10049
10074
  ), F = N(
10050
10075
  (de) => {
10051
- const ie = Y.filter((fe, Ce) => Ce !== de);
10076
+ const ie = Y.filter((ge, Ce) => Ce !== de);
10052
10077
  V(ie), C(null);
10053
10078
  },
10054
10079
  [Y, V]
10055
10080
  ), X = N(
10056
10081
  (de) => {
10057
- const ie = de.target.value, fe = n.filter((Ce) => Ce !== "Enter");
10058
- for (const Ce of fe)
10082
+ const ie = de.target.value, ge = n.filter((Ce) => Ce !== "Enter");
10083
+ for (const Ce of ge)
10059
10084
  if (ie.includes(Ce)) {
10060
10085
  ie.split(Ce).forEach((Ne) => {
10061
10086
  Ne.trim() && G(Ne);
@@ -10118,8 +10143,8 @@ const Cu = Z.forwardRef(
10118
10143
  {
10119
10144
  type: "button",
10120
10145
  className: "gloss-tag-input__tag-remove",
10121
- onClick: (fe) => {
10122
- fe.stopPropagation(), F(ie);
10146
+ onClick: (ge) => {
10147
+ ge.stopPropagation(), F(ie);
10123
10148
  },
10124
10149
  "aria-label": `Remove ${de}`,
10125
10150
  tabIndex: -1,
@@ -11307,7 +11332,7 @@ function ju({
11307
11332
  portal: !0
11308
11333
  },
11309
11334
  children: /* @__PURE__ */ e("div", { className: "gloss-merge-prompt", style: { pointerEvents: "none" }, children: /* @__PURE__ */ d(
11310
- ge,
11335
+ fe,
11311
11336
  {
11312
11337
  className: "gloss-merge-prompt__content",
11313
11338
  style: { pointerEvents: "auto" },
@@ -11323,7 +11348,7 @@ function ju({
11323
11348
  "?"
11324
11349
  ] }),
11325
11350
  /* @__PURE__ */ d(
11326
- ge,
11351
+ fe,
11327
11352
  {
11328
11353
  className: "gloss-merge-prompt__summary-row",
11329
11354
  definition: {
@@ -11339,7 +11364,7 @@ function ju({
11339
11364
  }
11340
11365
  ),
11341
11366
  /* @__PURE__ */ d(
11342
- ge,
11367
+ fe,
11343
11368
  {
11344
11369
  className: "gloss-merge-prompt__summary-row",
11345
11370
  definition: {
@@ -11355,7 +11380,7 @@ function ju({
11355
11380
  }
11356
11381
  ),
11357
11382
  /* @__PURE__ */ d(
11358
- ge,
11383
+ fe,
11359
11384
  {
11360
11385
  className: "gloss-merge-prompt__actions",
11361
11386
  definition: {
package/catalog.js CHANGED
@@ -1,5 +1,5 @@
1
- import { A as I, Q as N, E as B, J as x, L as D, D as F, F as A, H as M, K as v, T as R, U as W, V as H, b1 as _, W as k, b2 as L, b3 as z, b4 as E, X as G, Y as $, Z as O } from "./Expandable-D00kXkfM.js";
2
- import { a5 as Ne, b8 as Be, aB as xe, aj as De, $ as Fe, ap as Ae, bV as Me, N as ve, aa as Re, bo as We, P as He, B as _e, bj as ke, C as Le, by as ze, b as Ee, c as Ge, O as $e, q as Oe, af as Ve, aP as we, aE as Xe, as as je, m as Ue, o as Ze, aH as qe, ad as Je, ba as Ke, ab as Qe, bp as Ye, _ as ea, ar as aa, aS as sa, bc as ta, p as ra, ao as oa, a2 as ia, at as na, a4 as la, ac as da, bK as ca, aV as ga, t as ma, I as pa, i as ua, ay as ba, M as fa, y as ha, au as ya, bi as Ta, bQ as Sa, aq as Pa, w as Ca, bq as Ia, aU as Na, b5 as Ba, al as xa, aM as Da, ai as Fa, an as Aa, aw as Ma, bX as va, aT as Ra, bW as Wa, ae as Ha, e as _a, R as ka, l as La, r as za, aJ as Ea, ak as Ga, ag as $a, j as Oa, z as Va, b9 as wa, ah as Xa, be as ja, bh as Ua, bf as Za, bg as qa, k as Ja, bb as Ka, bn as Qa, S as Ya, bl as es, ax as as, bd as ss, bR as ts, am as rs, bU as os, v as is, bL as ns, n as ls, h as ds, s as cs, a0 as gs, a9 as ms, bk as ps, bx as us, bE as bs, aD as fs, a8 as hs, aR as ys, aG as Ts, aA as Ss, aO as Ps, aL as Cs, a3 as Is } from "./Expandable-D00kXkfM.js";
1
+ import { A as I, Q as N, E as B, J as x, L as D, D as F, F as A, H as M, K as v, T as R, U as W, V as H, b1 as _, W as k, b2 as L, b3 as z, b4 as E, X as G, Y as $, Z as O } from "./Expandable-BcmIxWR8.js";
2
+ import { a5 as Ne, b8 as Be, aB as xe, aj as De, $ as Fe, ap as Ae, bV as Me, N as ve, aa as Re, bo as We, P as He, B as _e, bj as ke, C as Le, by as ze, b as Ee, c as Ge, O as $e, q as Oe, af as Ve, aP as we, aE as Xe, as as je, m as Ue, o as Ze, aH as qe, ad as Je, ba as Ke, ab as Qe, bp as Ye, _ as ea, ar as aa, aS as sa, bc as ta, p as ra, ao as oa, a2 as ia, at as na, a4 as la, ac as da, bK as ca, aV as ga, t as ma, I as pa, i as ua, ay as ba, M as fa, y as ha, au as ya, bi as Ta, bQ as Sa, aq as Pa, w as Ca, bq as Ia, aU as Na, b5 as Ba, al as xa, aM as Da, ai as Fa, an as Aa, aw as Ma, bX as va, aT as Ra, bW as Wa, ae as Ha, e as _a, R as ka, l as La, r as za, aJ as Ea, ak as Ga, ag as $a, j as Oa, z as Va, b9 as wa, ah as Xa, be as ja, bh as Ua, bf as Za, bg as qa, k as Ja, bb as Ka, bn as Qa, S as Ya, bl as es, ax as as, bd as ss, bR as ts, am as rs, bU as os, v as is, bL as ns, n as ls, h as ds, s as cs, a0 as gs, a9 as ms, bk as ps, bx as us, bE as bs, aD as fs, a8 as hs, aR as ys, aG as Ts, aA as Ss, aO as Ps, aL as Cs, a3 as Is } from "./Expandable-BcmIxWR8.js";
3
3
  import { jsx as c, jsxs as S } from "react/jsx-runtime";
4
4
  import { C as e, T as a, ae as V, S as s, E as u, R as m, f as w, Z as X } from "./UIContext-DP6JGCto.js";
5
5
  import { B as j, a as U, e as Z, c as q, d as J, b as K } from "./BaseAsyncButton-Cq_l7clO.js";
@@ -1,73 +1,76 @@
1
- import { a as i, u, c as p } from "./COMMITS-6U31xb_s.js";
2
- import { C as I, b as N, P as k, e as O, i as w, r as A, d as H } from "./COMMITS-6U31xb_s.js";
3
- import { jsxs as c, jsx as r, Fragment as f } from "react/jsx-runtime";
4
- import { useEffect as l, useRef as m, useLayoutEffect as g, useCallback as P } from "react";
5
- function S({ isOpen: n }) {
6
- const t = i()?.state.activeTrigger, o = t?.kind === "card-overflow" ? t.cardId : null;
7
- return n ? /* @__PURE__ */ c("div", { "data-shell": "settings", children: [
8
- /* @__PURE__ */ r("p", { style: { margin: 0, fontSize: 14, color: "#495057" }, children: o ? `Settings for card: ${o}` : "Settings" }),
9
- /* @__PURE__ */ r("p", { style: { margin: "8px 0 0", fontSize: 12, color: "#adb5bd" }, children: "Configuration options coming soon." })
10
- ] }) : null;
1
+ import { a as i, u, c as p } from "./COMMITS-CoGFzpf4.js";
2
+ import { C as I, b as H, P as N, e as k, i as O, r as w, d as A } from "./COMMITS-CoGFzpf4.js";
3
+ import { jsxs as c, jsx as s, Fragment as f } from "react/jsx-runtime";
4
+ import { useEffect as r, useRef as m, useLayoutEffect as h, useCallback as P } from "react";
5
+ function E({ isOpen: t }) {
6
+ const n = i()?.state.activeTrigger, o = n?.kind === "card-overflow" ? n.cardId : null;
7
+ return /* @__PURE__ */ c("div", { "data-shell": "settings", "aria-hidden": !t, children: [
8
+ /* @__PURE__ */ s("p", { style: { margin: 0, fontSize: 14, color: "#495057" }, children: o ? `Settings for card: ${o}` : "Settings" }),
9
+ /* @__PURE__ */ s("p", { style: { margin: "8px 0 0", fontSize: 12, color: "#adb5bd" }, children: "Configuration options coming soon." })
10
+ ] });
11
11
  }
12
- const v = {
12
+ const g = {
13
13
  position: "fixed",
14
14
  inset: 0,
15
15
  pointerEvents: "none",
16
16
  zIndex: 55
17
- }, y = {
17
+ }, v = {
18
18
  position: "absolute",
19
19
  inset: 0,
20
20
  zIndex: 1,
21
- pointerEvents: "auto",
21
+ // CR-03 fix: pass-through tint — scrim is visual-only and must not intercept
22
+ // grid card clicks. See PanelHost.tsx CR-03 comment for full rationale.
23
+ pointerEvents: "none",
22
24
  background: "rgba(0, 0, 0, 0.04)"
23
25
  };
24
26
  function _() {
25
- const { state: n, dispatch: e, getCloseLog: t } = u();
26
- l(() => {
27
- if (n.activePanelId == null) return;
28
- function s(d) {
27
+ const { state: t, dispatch: e, getCloseLog: n } = u();
28
+ r(() => {
29
+ if (t.activePanelId == null) return;
30
+ function a(d) {
29
31
  d.key === "Escape" && e({ type: "CLOSE_PANEL", reason: "escape-key" });
30
32
  }
31
- return document.addEventListener("keydown", s), () => document.removeEventListener("keydown", s);
32
- }, [n.activePanelId, e]);
33
- const o = m(n);
34
- g(() => {
35
- o.current = n;
36
- }), l(() => {
37
- if (process.env.NODE_ENV !== "production")
38
- return window.__panelsHostHandle = {
39
- dispatch: e,
40
- getState: () => o.current,
41
- getCloseLog: t
42
- }, () => {
43
- delete window.__panelsHostHandle;
44
- };
45
- }, [e, t]);
46
- const a = P(() => {
33
+ return document.addEventListener("keydown", a), () => document.removeEventListener("keydown", a);
34
+ }, [t.activePanelId, e]);
35
+ const o = m(t);
36
+ h(() => {
37
+ o.current = t;
38
+ }), r(() => {
39
+ if (process.env.NODE_ENV === "production") return;
40
+ const a = window;
41
+ return a.__panelsHostHandle && console.warn("[panels] multiple PanelHost/PanelHostShell instances mounted; dev handle is unreliable"), a.__panelsHostHandle = {
42
+ dispatch: e,
43
+ getState: () => o.current,
44
+ getCloseLog: n
45
+ }, () => {
46
+ a.__panelsHostHandle?.dispatch === e && delete window.__panelsHostHandle;
47
+ };
48
+ }, [e, n]);
49
+ const l = P(() => {
47
50
  e({ type: "CLOSE_PANEL", reason: "nav-escape-hatch" });
48
51
  }, [e]);
49
- return /* @__PURE__ */ r("div", { "data-panel-host": "true", style: v, children: n.activePanelId != null && /* @__PURE__ */ r(
52
+ return /* @__PURE__ */ s("div", { "data-panel-host": "true", style: g, children: t.activePanelId != null && /* @__PURE__ */ s(
50
53
  "div",
51
54
  {
52
55
  "data-panel-scrim": "true",
53
- style: y,
54
- onClick: a
56
+ style: v,
57
+ onClick: l
55
58
  }
56
59
  ) });
57
60
  }
58
- function b({ panelComponents: n }) {
61
+ function b({ panelComponents: t }) {
59
62
  const e = i();
60
63
  if (e == null) return null;
61
- const { state: t, dispatch: o } = e;
62
- if (t.activePanelId == null) return null;
63
- const a = n[t.activePanelId];
64
- if (a == null)
64
+ const { state: n, dispatch: o } = e;
65
+ if (n.activePanelId == null) return null;
66
+ const l = t[n.activePanelId];
67
+ if (l == null)
65
68
  return process.env.NODE_ENV !== "production" && console.error(
66
69
  "[panels] No panel component registered for activePanelId:",
67
- t.activePanelId
70
+ n.activePanelId
68
71
  ), null;
69
- const s = t.activePanelId === "settings" ? /* @__PURE__ */ c(f, { children: [
70
- /* @__PURE__ */ r(
72
+ const a = n.activePanelId === "settings" ? /* @__PURE__ */ c(f, { children: [
73
+ /* @__PURE__ */ s(
71
74
  "button",
72
75
  {
73
76
  id: "settings-cancel",
@@ -77,7 +80,7 @@ function b({ panelComponents: n }) {
77
80
  children: "Cancel"
78
81
  }
79
82
  ),
80
- /* @__PURE__ */ r(
83
+ /* @__PURE__ */ s(
81
84
  "button",
82
85
  {
83
86
  id: "settings-apply",
@@ -88,28 +91,28 @@ function b({ panelComponents: n }) {
88
91
  }
89
92
  )
90
93
  ] }) : null;
91
- return /* @__PURE__ */ r(
94
+ return /* @__PURE__ */ s(
92
95
  p,
93
96
  {
94
97
  isOpen: !0,
95
98
  onClose: () => o({ type: "CLOSE_PANEL", reason: "header-x" }),
96
- footer: s,
97
- children: /* @__PURE__ */ r(a, { isOpen: !0 })
99
+ footer: a,
100
+ children: /* @__PURE__ */ s(l, { isOpen: !0 })
98
101
  }
99
102
  );
100
103
  }
101
104
  export {
102
105
  I as COMMITS,
103
106
  p as PanelChrome,
104
- N as PanelHost,
107
+ H as PanelHost,
105
108
  _ as PanelHostShell,
106
- k as PanelProvider,
109
+ N as PanelProvider,
107
110
  b as PanelSlot,
108
- S as SettingsShell,
109
- O as deriveSurfaceState,
110
- w as initialState,
111
- A as reducer,
111
+ E as SettingsShell,
112
+ k as deriveSurfaceState,
113
+ O as initialState,
114
+ w as reducer,
112
115
  u as usePanelContext,
113
116
  i as usePanelContextOptional,
114
- H as usePanelCoordinator
117
+ A as usePanelCoordinator
115
118
  };
package/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import { u as Ze, C as qe } from "./Expandable-D00kXkfM.js";
2
- import { Q as Sr, V as kr, T as Dr, U as xr, a5 as Tr, b8 as Rr, aB as Mr, aj as Pr, $ as Ir, ap as Er, N as Ar, aa as Fr, bo as Or, P as Lr, B as $r, a as zr, A as Br, K as Kr, bj as Gr, J as Hr, L as Wr, E as Vr, D as jr, H as Ur, F as Yr, by as Zr, b as qr, c as Qr, O as Xr, q as Jr, af as es, aP as ts, A as as, K as ns, J as rs, L as ss, E as is, D as os, H as ls, F as cs, b1 as ds, b4 as us, b3 as ms, b2 as gs, b5 as ps, aE as hs, a7 as fs, a6 as bs, as as vs, m as ys, o as ws, aH as _s, ad as Cs, ba as Ns, ab as Ss, bp as ks, _ as Ds, bI as xs, bH as Ts, bJ as Rs, ar as Ms, aS as Ps, bc as Is, bN as Es, bw as As, p as Fs, ao as Os, bC as Ls, bt as $s, a2 as zs, at as Bs, a4 as Ks, bB as Gs, bS as Hs, G as Ws, f as Vs, ac as js, bK as Us, aV as Ys, t as Zs, x as qs, I as Qs, i as Xs, ay as Js, bO as ei, M as ti, y as ai, W as ni, Z as ri, X as si, Y as ii, au as oi, bi as li, bQ as ci, bM as di, aq as ui, w as mi, bq as gi, aU as pi, al as hi, aM as fi, ai as bi, an as vi, aw as yi, aT as wi, ae as _i, av as Ci, e as Ni, R as Si, l as ki, r as Di, aJ as xi, bz as Ti, bA as Ri, ak as Mi, ag as Pi, j as Ii, z as Ei, b9 as Ai, ah as Fi, bP as Oi, be as Li, bh as $i, bf as zi, bg as Bi, k as Ki, bb as Gi, bn as Hi, S as Wi, bl as Vi, bm as ji, ax as Ui, bd as Yi, bR as Zi, am as qi, v as Qi, bL as Xi, n as Ji, h as eo, s as to, a0 as ao, a1 as no, a9 as ro, bk as so, bx as io, bE as oo, aC as lo, aD as co, a8 as uo, aQ as mo, aR as go, aF as po, aG as ho, aI as fo, aX as bo, aY as vo, br as yo, bG as wo, bF as _o, a_ as Co, a$ as No, az as So, aA as ko, b7 as Do, b6 as xo, b0 as To, aN as Ro, aO as Mo, aZ as Po, aK as Io, aL as Eo, d as Ao, bD as Fo, bs as Oo, bu as Lo, bv as $o, aW as zo, a3 as Bo, bT as Ko, g as Go } from "./Expandable-D00kXkfM.js";
1
+ import { u as Ze, C as qe } from "./Expandable-BcmIxWR8.js";
2
+ import { Q as Sr, V as kr, T as Dr, U as xr, a5 as Tr, b8 as Rr, aB as Mr, aj as Pr, $ as Ir, ap as Er, N as Ar, aa as Fr, bo as Or, P as Lr, B as $r, a as zr, A as Br, K as Kr, bj as Gr, J as Hr, L as Wr, E as Vr, D as jr, H as Ur, F as Yr, by as Zr, b as qr, c as Qr, O as Xr, q as Jr, af as es, aP as ts, A as as, K as ns, J as rs, L as ss, E as is, D as os, H as ls, F as cs, b1 as ds, b4 as us, b3 as ms, b2 as gs, b5 as ps, aE as hs, a7 as fs, a6 as bs, as as vs, m as ys, o as ws, aH as _s, ad as Cs, ba as Ns, ab as Ss, bp as ks, _ as Ds, bI as xs, bH as Ts, bJ as Rs, ar as Ms, aS as Ps, bc as Is, bN as Es, bw as As, p as Fs, ao as Os, bC as Ls, bt as $s, a2 as zs, at as Bs, a4 as Ks, bB as Gs, bS as Hs, G as Ws, f as Vs, ac as js, bK as Us, aV as Ys, t as Zs, x as qs, I as Qs, i as Xs, ay as Js, bO as ei, M as ti, y as ai, W as ni, Z as ri, X as si, Y as ii, au as oi, bi as li, bQ as ci, bM as di, aq as ui, w as mi, bq as gi, aU as pi, al as hi, aM as fi, ai as bi, an as vi, aw as yi, aT as wi, ae as _i, av as Ci, e as Ni, R as Si, l as ki, r as Di, aJ as xi, bz as Ti, bA as Ri, ak as Mi, ag as Pi, j as Ii, z as Ei, b9 as Ai, ah as Fi, bP as Oi, be as Li, bh as $i, bf as zi, bg as Bi, k as Ki, bb as Gi, bn as Hi, S as Wi, bl as Vi, bm as ji, ax as Ui, bd as Yi, bR as Zi, am as qi, v as Qi, bL as Xi, n as Ji, h as eo, s as to, a0 as ao, a1 as no, a9 as ro, bk as so, bx as io, bE as oo, aC as lo, aD as co, a8 as uo, aQ as mo, aR as go, aF as po, aG as ho, aI as fo, aX as bo, aY as vo, br as yo, bG as wo, bF as _o, a_ as Co, a$ as No, az as So, aA as ko, b7 as Do, b6 as xo, b0 as To, aN as Ro, aO as Mo, aZ as Po, aK as Io, aL as Eo, d as Ao, bD as Fo, bs as Oo, bu as Lo, bv as $o, aW as zo, a3 as Bo, bT as Ko, g as Go } from "./Expandable-BcmIxWR8.js";
3
3
  import { jsxs as w, jsx as r, Fragment as $ } from "react/jsx-runtime";
4
4
  import * as B from "react";
5
5
  import F, { useRef as P, useEffect as A, useState as E, useCallback as C, useId as Qe, forwardRef as Xe, useMemo as re, createContext as Je, useContext as et } from "react";
6
6
  import { motion as G, useMotionValue as tt, AnimatePresence as at, useDragControls as nt } from "framer-motion";
7
7
  import { B as rt, a as X, b as ce, U as fe } from "./UIContext-DP6JGCto.js";
8
8
  import { c as Wo, u as Vo } from "./UIContext-DP6JGCto.js";
9
- import { C as Uo, c as Yo, b as Zo, P as qo, e as Qo, i as Xo, r as Jo, u as el, a as tl, d as al } from "./COMMITS-6U31xb_s.js";
9
+ import { C as Uo, c as Yo, b as Zo, P as qo, e as Qo, i as Xo, r as Jo, u as el, a as tl, d as al } from "./COMMITS-CoGFzpf4.js";
10
10
  import { createPortal as st } from "react-dom";
11
11
  import { DEFAULT_MARKET_PRESETS as rl, DEFAULT_PINNED as sl, PERIOD_OPTIONS as il, ROLLING_OPTIONS as ol, TODAY_PRESET as ll, findPreset as cl, formatDateRange as dl, formatMarketDates as ul, formatTrend as ml, formatValue as gl, generateMarketId as pl, getAllPresets as hl, getDateRangeForPreset as fl, getPresetLabel as bl, isInRange as vl, isMarketActive as yl, isSameDay as wl, normalizePresetId as _l, toUppercasePresetId as Cl } from "@mt-gloss/utils";
12
12
  import it from "@mui/icons-material/AccessTime";
@@ -1,2 +1,2 @@
1
1
  import { PanelShellProps } from '../PanelHost';
2
- export declare function SettingsShell({ isOpen }: PanelShellProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function SettingsShell({ isOpen }: PanelShellProps): import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mt-gloss/ui",
3
- "version": "0.1.87",
3
+ "version": "0.1.89",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "restricted"