@alfadocs/ui-kit 1.29.0 → 1.30.0

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.
@@ -0,0 +1,210 @@
1
+ import { useRef as I, useEffect as M, useState as F, useMemo as E, useCallback as s } from "react";
2
+ import { flushSync as R } from "react-dom";
3
+ function x(e) {
4
+ return e != null && e.current ? e.current : typeof document > "u" ? null : document;
5
+ }
6
+ function O(e, l) {
7
+ const c = typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : (
8
+ // SSR / jsdom fallback — drop every character that's
9
+ // significant in a CSS attribute selector. Conservative but
10
+ // robust enough for the test environment.
11
+ e.replace(/["'\\[\]]/g, "")
12
+ ), d = `[data-error-anchor="${c}"], [name="${c}"], [name$="[${c}]"]`, u = Array.from(l.querySelectorAll(d));
13
+ return u.length === 0 ? null : u.find((p) => p.offsetParent !== null) ?? u[0];
14
+ }
15
+ function $(e, l, c = {}) {
16
+ const {
17
+ scope: d,
18
+ scrollOptions: u = { behavior: "smooth", block: "center" },
19
+ focus: a = !0,
20
+ skipInitialMount: p = !0
21
+ } = c, o = I(!1), f = I(null), i = l.find((h) => !!e[h]) ?? null;
22
+ M(() => {
23
+ if (p && !o.current) {
24
+ o.current = !0, f.current = i;
25
+ return;
26
+ }
27
+ if (!i) {
28
+ f.current = null;
29
+ return;
30
+ }
31
+ if (i === f.current || typeof window > "u") return;
32
+ const h = window.requestAnimationFrame(() => {
33
+ const g = x(d);
34
+ if (!g) return;
35
+ const t = O(i, g);
36
+ t && (t.scrollIntoView(u), a && t.focus({ preventScroll: !0 }), f.current = i);
37
+ });
38
+ return () => window.cancelAnimationFrame(h);
39
+ }, [i]);
40
+ }
41
+ function k(e, l = !1) {
42
+ const c = {};
43
+ for (const d of e)
44
+ c[d.id] = { signed: l ? !1 : !!d.signed };
45
+ return c;
46
+ }
47
+ function D(e) {
48
+ const [l, c] = F(
49
+ () => k(e)
50
+ ), [d, u] = F(null), [a, p] = F(
51
+ () => {
52
+ var n;
53
+ return ((n = e[0]) == null ? void 0 : n.id) ?? null;
54
+ }
55
+ ), o = E(
56
+ () => e.map((n) => {
57
+ const r = l[n.id];
58
+ return {
59
+ ...n,
60
+ signed: r ? r.signed : !!n.signed,
61
+ payload: r == null ? void 0 : r.payload
62
+ };
63
+ }),
64
+ [e, l]
65
+ ), f = E(
66
+ () => o.reduce((n, r) => r.signed ? n + 1 : n, 0),
67
+ [o]
68
+ ), i = o.length, h = i > 0 && f === i, g = s((n) => {
69
+ u(n);
70
+ }, []), t = s(() => {
71
+ u(null);
72
+ }, []), w = s((n, r) => {
73
+ c((m) => ({ ...m, [n]: { signed: !0, payload: r } })), u((m) => m === n ? null : m);
74
+ }, []), T = s(
75
+ (n) => {
76
+ var r;
77
+ return !!((r = l[n]) != null && r.signed);
78
+ },
79
+ [l]
80
+ ), S = s(() => {
81
+ var n;
82
+ c(k(e, !0)), u(null), p(((n = e[0]) == null ? void 0 : n.id) ?? null);
83
+ }, [e]), C = s(() => {
84
+ p((n) => {
85
+ const r = o.length;
86
+ if (r === 0) return null;
87
+ const m = n ? o.findIndex((y) => y.id === n) : -1;
88
+ return o[(m + 1 + r) % r].id;
89
+ });
90
+ }, [o]), v = s(() => {
91
+ p((n) => {
92
+ const r = o.length;
93
+ if (r === 0) return null;
94
+ const m = n ? o.findIndex((y) => y.id === n) : 0;
95
+ return o[(m - 1 + r) % r].id;
96
+ });
97
+ }, [o]), A = s(() => {
98
+ p((n) => {
99
+ const r = o.length;
100
+ if (r === 0) return n;
101
+ const m = n ? o.findIndex((y) => y.id === n) : -1;
102
+ for (let y = 1; y <= r; y += 1) {
103
+ const b = o[(m + y) % r];
104
+ if (!b.signed) return b.id;
105
+ }
106
+ return n;
107
+ });
108
+ }, [o]);
109
+ return E(
110
+ () => ({
111
+ fields: o,
112
+ signedCount: f,
113
+ total: i,
114
+ isComplete: h,
115
+ activeFieldId: d,
116
+ openField: g,
117
+ closeField: t,
118
+ markSigned: w,
119
+ isFieldSigned: T,
120
+ reset: S,
121
+ cursorFieldId: a,
122
+ goToNextField: C,
123
+ goToPreviousField: v,
124
+ goToNextUnsigned: A
125
+ }),
126
+ [
127
+ o,
128
+ f,
129
+ i,
130
+ h,
131
+ d,
132
+ g,
133
+ t,
134
+ w,
135
+ T,
136
+ S,
137
+ a,
138
+ C,
139
+ v,
140
+ A
141
+ ]
142
+ );
143
+ }
144
+ const q = "ds-zoom-drilldown", L = () => {
145
+ if (typeof document > "u") return null;
146
+ const e = document.querySelector("main");
147
+ return e ? e.querySelector("[data-radix-scroll-area-viewport]") ?? e.closest("[data-radix-scroll-area-viewport]") ?? e : null;
148
+ }, N = (e) => typeof e.startViewTransition == "function" && typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("view-transition-class", q);
149
+ function P(e = {}) {
150
+ const [l, c] = F(null), d = I(
151
+ null
152
+ ), u = I(e.getScrollContainer);
153
+ u.current = e.getScrollContainer;
154
+ const a = s(
155
+ () => (u.current ?? L)(),
156
+ []
157
+ ), p = s(() => {
158
+ const t = a();
159
+ return {
160
+ window: typeof window < "u" ? window.scrollY : 0,
161
+ container: t ? t.scrollTop : 0
162
+ };
163
+ }, [a]), o = s(() => {
164
+ const t = d.current;
165
+ if (!t) return;
166
+ d.current = null;
167
+ let w = 0;
168
+ const T = () => {
169
+ const S = a();
170
+ typeof window < "u" && window.scrollTo({ top: t.window }), S && (S.scrollTop = t.container), !((typeof window > "u" || Math.abs(window.scrollY - t.window) < 2) && (!S || Math.abs(S.scrollTop - t.container) < 2)) && w < 20 && (w += 1, requestAnimationFrame(T));
171
+ };
172
+ T();
173
+ }, [a]), f = s(() => {
174
+ const t = a();
175
+ typeof window < "u" && window.scrollTo({ top: 0 }), t && (t.scrollTop = 0);
176
+ }, [a]), i = s(
177
+ (t) => {
178
+ var v;
179
+ const w = document, T = typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches, S = t === null;
180
+ if (T || !N(w) || !w.startViewTransition) {
181
+ R(() => c(t)), S ? o() : f();
182
+ return;
183
+ }
184
+ const C = w.startViewTransition(() => {
185
+ R(() => c(t)), S || f();
186
+ });
187
+ S && ((v = C == null ? void 0 : C.finished) == null || v.then(o, o));
188
+ },
189
+ [o, f]
190
+ ), h = s(
191
+ (t) => {
192
+ d.current = p(), i(t);
193
+ },
194
+ [p, i]
195
+ ), g = s(() => i(null), [i]);
196
+ return M(() => {
197
+ if (l === null) return;
198
+ const t = (w) => {
199
+ w.key === "Escape" && !w.defaultPrevented && g();
200
+ };
201
+ return window.addEventListener("keydown", t), () => window.removeEventListener("keydown", t);
202
+ }, [l, g]), { selected: l, open: h, close: g };
203
+ }
204
+ export {
205
+ q as Z,
206
+ D as a,
207
+ P as b,
208
+ $ as u
209
+ };
210
+ //# sourceMappingURL=use-zoom-drilldown-qCX34w9I.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.29.0",
3
+ "packageVersion": "1.30.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -12858,7 +12858,10 @@
12858
12858
  ]
12859
12859
  },
12860
12860
  "idempotent": true,
12861
- "description": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it.",
12861
+ "errors": [
12862
+ "Per-point tooltip titles are hidden after this call — the host point labels describe the previous series, not the one written."
12863
+ ],
12864
+ "description": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it. Host-supplied point labels are not updated, so the tooltip title is hidden after this call.",
12862
12865
  "descriptionKey": "ui.agent.sparkline.actions.updateSeries"
12863
12866
  },
12864
12867
  {
@@ -1322,7 +1322,7 @@
1322
1322
  "pointCount": "Number of positions in the currently rendered series, unmeasured gaps included — reflecting whichever applied last, the `data` prop or an `update_series` call. A count only; the plotted values are never exposed."
1323
1323
  },
1324
1324
  "actions": {
1325
- "updateSeries": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it.",
1325
+ "updateSeries": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it. Host-supplied point labels are not updated, so the tooltip title is hidden after this call.",
1326
1326
  "exportPng": "Return a PNG data URI of the sparkline.",
1327
1327
  "selectAnnotation": "Select a drawn annotation, as pressing its band would. No-op unless the host wired onAnnotationSelect and the id names an annotation that is currently drawn — check the `selectable` and `annotationIds` slots first, since neither failure produces a signal."
1328
1328
  }
@@ -1,5 +1,5 @@
1
- export { usePrefersReducedMotion, useMediaQuery, useScrollToFirstError, useLocale, useTheme, resolveTheme, themeClassList, THEME_CLASS, THEME_STORAGE_KEY, ACCESSIBILITY_STORAGE_KEY, useSigningSession, } from '../hooks';
2
- export type { LocaleDir, UseLocaleReturn, UseScrollToFirstErrorOptions, ThemePreference, AccessibilityPreference, ResolvedTheme, UseThemeReturn, SigningField, SigningFieldBase, UseSigningSessionReturn, } from '../hooks';
1
+ export { usePrefersReducedMotion, useMediaQuery, useScrollToFirstError, useLocale, useTheme, resolveTheme, themeClassList, THEME_CLASS, THEME_STORAGE_KEY, ACCESSIBILITY_STORAGE_KEY, useSigningSession, useZoomDrilldown, ZOOM_DRILLDOWN_TRANSITION_CLASS, } from '../hooks';
2
+ export type { LocaleDir, UseLocaleReturn, UseScrollToFirstErrorOptions, ThemePreference, AccessibilityPreference, ResolvedTheme, UseThemeReturn, SigningField, SigningFieldBase, UseSigningSessionReturn, UseZoomDrilldownOptions, UseZoomDrilldownReturn, } from '../hooks';
3
3
  export * from './button';
4
4
  export * from './button-group';
5
5
  export * from './floating-action-button';
@@ -1,4 +1,4 @@
1
- import { S as r, s, u as n } from "../../_chunks/sparkline-BmGcEyZO.js";
1
+ import { S as r, s, u as n } from "../../_chunks/sparkline-Dx_sxK3J.js";
2
2
  export {
3
3
  r as Sparkline,
4
4
  s as sparklineAgent,
@@ -73,6 +73,12 @@ export interface SparklineProps extends Omit<HTMLAttributes<HTMLDivElement>, 'ro
73
73
  * dashboard widgets) and the user benefits from per-point readout.
74
74
  */
75
75
  showTooltip?: boolean;
76
+ /** Series name shown in the tooltip, already localised. Defaults to
77
+ * `label`, so the tooltip never falls back to Apex's "series-1". */
78
+ seriesName?: string;
79
+ /** Tooltip title per point, same order and length as `data` (gaps
80
+ * included). Omitted = no tooltip title. Never drawn on an axis. */
81
+ pointLabels?: readonly string[];
76
82
  /** Width override — defaults to 100% of container */
77
83
  width?: string | number;
78
84
  /** Height override — defaults to the size variant height */
@@ -22,5 +22,6 @@ export { useWebOtp, type UseWebOtpOptions } from './use-web-otp';
22
22
  export { useVisualViewportPin, type VisualViewportPinOptions, } from './use-visual-viewport-pin';
23
23
  export { useEdgeResize, type UseEdgeResizeOptions, type UseEdgeResizeReturn, type EdgeResizeSeparatorProps, } from './use-edge-resize';
24
24
  export { useSigningSession, type SigningField, type SigningFieldBase, type UseSigningSessionReturn, } from './use-signing-session';
25
+ export { useZoomDrilldown, ZOOM_DRILLDOWN_TRANSITION_CLASS, type UseZoomDrilldownOptions, type UseZoomDrilldownReturn, } from './use-zoom-drilldown';
25
26
  export { useCountdown, type UseCountdownOptions, type UseCountdownReturn, } from './use-countdown';
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1,33 +1,33 @@
1
1
  import { u as A } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
2
  import { u as D } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { u as F, a as g } from "../_chunks/use-signing-session-CyOZWinp.js";
4
- import { u as _ } from "../_chunks/use-count-up-BLLetaZ8.js";
5
- import { u as P } from "../_chunks/use-locale-BkCIHujH.js";
6
- import { A as k, T as K, a as V, r as H, t as M, u as Y } from "../_chunks/use-theme-CAuo6EYT.js";
3
+ import { Z as w, u as _, a as F, b as I } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
4
+ import { u as R } from "../_chunks/use-count-up-BLLetaZ8.js";
5
+ import { u as k } from "../_chunks/use-locale-BkCIHujH.js";
6
+ import { A as M, T as V, a as H, r as N, t as Y, u as Z } from "../_chunks/use-theme-CAuo6EYT.js";
7
7
  import { u as B } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
8
  import { u as U } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
9
- import { u as z } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
9
+ import { u as j } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
10
10
  import { useState as E, useRef as b, useEffect as x } from "react";
11
- import { u as W, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
- import { u as X } from "../_chunks/use-persistent-state-nZwZAnE9.js";
13
- import { u as $ } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
- import { u as te } from "../_chunks/use-overflow-collapse-BIOzKbni.js";
15
- import { c as oe, u as ue } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
- import { u as se } from "../_chunks/use-web-otp-D_utzp6S.js";
17
- import { u as ie } from "../_chunks/use-visual-viewport-pin-ChurOsHM.js";
18
- import { u as fe } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
19
- import { u as me } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
- function y(e, o) {
11
+ import { u as Q, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
+ import { u as $ } from "../_chunks/use-persistent-state-nZwZAnE9.js";
13
+ import { u as te } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
+ import { u as oe } from "../_chunks/use-overflow-collapse-BIOzKbni.js";
15
+ import { c as se, u as ne } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
+ import { u as ie } from "../_chunks/use-web-otp-D_utzp6S.js";
17
+ import { u as le } from "../_chunks/use-visual-viewport-pin-ChurOsHM.js";
18
+ import { u as me } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
19
+ import { u as pe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
+ function C(e, o) {
21
21
  const [t, i] = E(e), u = b(null);
22
22
  return x(() => {
23
23
  if (o <= 0) {
24
24
  u.current !== null && (clearTimeout(u.current), u.current = null), i(e);
25
25
  return;
26
26
  }
27
- const s = setTimeout(() => {
27
+ const n = setTimeout(() => {
28
28
  i(e), u.current = null;
29
29
  }, o);
30
- return u.current = s, () => clearTimeout(s);
30
+ return u.current = n, () => clearTimeout(n);
31
31
  }, [e, o]), t;
32
32
  }
33
33
  const T = [
@@ -54,31 +54,31 @@ function p(e) {
54
54
  return !0;
55
55
  });
56
56
  }
57
- function C(e, o = {}) {
58
- const { enabled: t = !0, autoFocus: i = !0, restoreFocus: u = !0 } = o, s = b(null);
57
+ function y(e, o = {}) {
58
+ const { enabled: t = !0, autoFocus: i = !0, restoreFocus: u = !0 } = o, n = b(null);
59
59
  x(() => {
60
60
  if (!t) return;
61
61
  const a = e.current;
62
62
  if (!a) return;
63
- if (s.current = typeof document < "u" && document.activeElement instanceof HTMLElement ? document.activeElement : null, i) {
64
- const n = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
65
- n == null || n.focus();
63
+ if (n.current = typeof document < "u" && document.activeElement instanceof HTMLElement ? document.activeElement : null, i) {
64
+ const s = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
65
+ s == null || s.focus();
66
66
  }
67
- function l(r) {
67
+ function f(r) {
68
68
  if (r.key !== "Tab") return;
69
- const n = e.current;
70
- if (!n) return;
71
- const c = p(n);
69
+ const s = e.current;
70
+ if (!s) return;
71
+ const c = p(s);
72
72
  if (c.length === 0) {
73
73
  r.preventDefault();
74
74
  return;
75
75
  }
76
- const m = c[0], d = c[c.length - 1], f = document.activeElement;
77
- r.shiftKey ? (f === m || !n.contains(f)) && (r.preventDefault(), d.focus()) : (f === d || !n.contains(f)) && (r.preventDefault(), m.focus());
76
+ const m = c[0], d = c[c.length - 1], l = document.activeElement;
77
+ r.shiftKey ? (l === m || !s.contains(l)) && (r.preventDefault(), d.focus()) : (l === d || !s.contains(l)) && (r.preventDefault(), m.focus());
78
78
  }
79
- return a.addEventListener("keydown", l), () => {
80
- if (a.removeEventListener("keydown", l), u && s.current) {
81
- const r = s.current;
79
+ return a.addEventListener("keydown", f), () => {
80
+ if (a.removeEventListener("keydown", f), u && n.current) {
81
+ const r = n.current;
82
82
  requestAnimationFrame(() => {
83
83
  r.isConnected && r.focus();
84
84
  });
@@ -87,33 +87,35 @@ function C(e, o = {}) {
87
87
  }, [t, i, u, e]);
88
88
  }
89
89
  export {
90
- k as ACCESSIBILITY_STORAGE_KEY,
91
- K as THEME_CLASS,
92
- V as THEME_STORAGE_KEY,
93
- oe as computePriorityLayout,
94
- H as resolveTheme,
95
- M as themeClassList,
90
+ M as ACCESSIBILITY_STORAGE_KEY,
91
+ V as THEME_CLASS,
92
+ H as THEME_STORAGE_KEY,
93
+ w as ZOOM_DRILLDOWN_TRANSITION_CLASS,
94
+ se as computePriorityLayout,
95
+ N as resolveTheme,
96
+ Y as themeClassList,
96
97
  B as useControllableState,
97
98
  U as useCopyToClipboard,
98
- _ as useCountUp,
99
- me as useCountdown,
100
- z as useDebouncedCallback,
101
- y as useDebouncedValue,
102
- W as useDirection,
99
+ R as useCountUp,
100
+ pe as useCountdown,
101
+ j as useDebouncedCallback,
102
+ C as useDebouncedValue,
103
+ Q as useDirection,
103
104
  J as useDocumentDirection,
104
- fe as useEdgeResize,
105
- C as useFocusTrap,
106
- $ as useIsomorphicLayoutEffect,
107
- P as useLocale,
105
+ me as useEdgeResize,
106
+ y as useFocusTrap,
107
+ te as useIsomorphicLayoutEffect,
108
+ k as useLocale,
108
109
  D as useMediaQuery,
109
- te as useOverflowCollapse,
110
- X as usePersistentState,
110
+ oe as useOverflowCollapse,
111
+ $ as usePersistentState,
111
112
  A as usePrefersReducedMotion,
112
- ue as usePriorityOverflow,
113
- F as useScrollToFirstError,
114
- g as useSigningSession,
115
- Y as useTheme,
116
- ie as useVisualViewportPin,
117
- se as useWebOtp
113
+ ne as usePriorityOverflow,
114
+ _ as useScrollToFirstError,
115
+ F as useSigningSession,
116
+ Z as useTheme,
117
+ le as useVisualViewportPin,
118
+ ie as useWebOtp,
119
+ I as useZoomDrilldown
118
120
  };
119
121
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The `view-transition-class` the shipped CSS targets. Add it as a class name
3
+ * to the source element and the detail, next to their shared
4
+ * `view-transition-name`. The kit sheet maps the class to the property.
5
+ */
6
+ export declare const ZOOM_DRILLDOWN_TRANSITION_CLASS: "ds-zoom-drilldown";
7
+ export interface UseZoomDrilldownOptions {
8
+ /** Resolver for the scroll container whose scrollTop should be preserved
9
+ * across the transition. Defaults to the nearest `<main>` element in
10
+ * the document (or the Radix ScrollArea viewport around it). The window
11
+ * scroll position is always tracked alongside. */
12
+ getScrollContainer?: () => HTMLElement | null;
13
+ }
14
+ export interface UseZoomDrilldownReturn<Id extends string> {
15
+ /** The open drill-down target, or `null` while the source view shows. */
16
+ readonly selected: Id | null;
17
+ /** Zoom into `id`: saves the scroll position and enters at the top. */
18
+ readonly open: (id: Id) => void;
19
+ /** Zoom back out and restore the saved scroll position. */
20
+ readonly close: () => void;
21
+ }
22
+ export declare function useZoomDrilldown<Id extends string>(options?: UseZoomDrilldownOptions): UseZoomDrilldownReturn<Id>;
23
+ //# sourceMappingURL=use-zoom-drilldown.d.ts.map
@@ -202,7 +202,7 @@
202
202
 
203
203
  /* ───────────────────────────────────────────────────────────────────────
204
204
  SECTION B — non-token declarations. ORIGINAL LAYER PRESERVED.
205
- 129 declarations across 125 rules.
205
+ 130 declarations across 126 rules.
206
206
 
207
207
  Kit-authored arbitrary-value utilities (`ds:w-[20rem]`) and the
208
208
  vendored AG Grid rules. These set real properties on real elements,
@@ -469,6 +469,9 @@
469
469
  .ds\:auto-rows-\[19rem\] {
470
470
  grid-auto-rows:304px;
471
471
  }
472
+ .ds\:auto-rows-\[22rem\] {
473
+ grid-auto-rows:352px;
474
+ }
472
475
  .ds\:auto-rows-\[minmax\(12rem\,auto\)\] {
473
476
  grid-auto-rows:minmax(192px,auto);
474
477
  }