@alfadocs/ui-kit 1.28.3 → 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.
Files changed (75) hide show
  1. package/dist/_chunks/{anamnesis-summary-rows-DwjqZgR5.js → anamnesis-summary-rows-DMO3MWSt.js} +2 -2
  2. package/dist/_chunks/{booking-BtSOKjQu.js → booking-AabCk7CI.js} +1205 -1148
  3. package/dist/_chunks/{sparkline-BmGcEyZO.js → sparkline-Dx_sxK3J.js} +228 -198
  4. package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js +210 -0
  5. package/dist/agent-catalog.json +5 -2
  6. package/dist/agent-i18n/en.json +1 -1
  7. package/dist/components/booking/booking-types.d.ts +15 -0
  8. package/dist/components/booking/details-form.d.ts +7 -0
  9. package/dist/components/booking/index.js +1 -1
  10. package/dist/components/index.d.ts +2 -2
  11. package/dist/components/sparkline/index.js +1 -1
  12. package/dist/components/sparkline/sparkline.d.ts +6 -0
  13. package/dist/hooks/index.d.ts +1 -0
  14. package/dist/hooks/index.js +56 -54
  15. package/dist/hooks/use-zoom-drilldown.d.ts +23 -0
  16. package/dist/host-compat.css +4 -1
  17. package/dist/i18n/locales/ar.d.ts +4 -0
  18. package/dist/i18n/locales/ar.js +4 -0
  19. package/dist/i18n/locales/de.d.ts +4 -0
  20. package/dist/i18n/locales/de.js +4 -0
  21. package/dist/i18n/locales/el.d.ts +4 -0
  22. package/dist/i18n/locales/el.js +4 -0
  23. package/dist/i18n/locales/en.d.ts +4 -0
  24. package/dist/i18n/locales/en.js +4 -0
  25. package/dist/i18n/locales/es.d.ts +4 -0
  26. package/dist/i18n/locales/es.js +4 -0
  27. package/dist/i18n/locales/fr.d.ts +4 -0
  28. package/dist/i18n/locales/fr.js +4 -0
  29. package/dist/i18n/locales/hi.d.ts +4 -0
  30. package/dist/i18n/locales/hi.js +4 -0
  31. package/dist/i18n/locales/it.d.ts +4 -0
  32. package/dist/i18n/locales/it.js +4 -0
  33. package/dist/i18n/locales/ja.d.ts +4 -0
  34. package/dist/i18n/locales/ja.js +4 -0
  35. package/dist/i18n/locales/nl.d.ts +4 -0
  36. package/dist/i18n/locales/nl.js +4 -0
  37. package/dist/i18n/locales/pl.d.ts +4 -0
  38. package/dist/i18n/locales/pl.js +4 -0
  39. package/dist/i18n/locales/pt.d.ts +4 -0
  40. package/dist/i18n/locales/pt.js +4 -0
  41. package/dist/i18n/locales/ro.d.ts +4 -0
  42. package/dist/i18n/locales/ro.js +4 -0
  43. package/dist/i18n/locales/ru.d.ts +4 -0
  44. package/dist/i18n/locales/ru.js +4 -0
  45. package/dist/i18n/locales/sq.d.ts +4 -0
  46. package/dist/i18n/locales/sq.js +4 -0
  47. package/dist/i18n/locales/sv.d.ts +4 -0
  48. package/dist/i18n/locales/sv.js +4 -0
  49. package/dist/i18n/locales/tr.d.ts +4 -0
  50. package/dist/i18n/locales/tr.js +4 -0
  51. package/dist/i18n/locales/zh.d.ts +4 -0
  52. package/dist/i18n/locales/zh.js +4 -0
  53. package/dist/index.js +1072 -1070
  54. package/dist/locales/ar.json +4 -0
  55. package/dist/locales/de.json +4 -0
  56. package/dist/locales/el.json +4 -0
  57. package/dist/locales/en.json +4 -0
  58. package/dist/locales/es.json +4 -0
  59. package/dist/locales/fr.json +4 -0
  60. package/dist/locales/hi.json +4 -0
  61. package/dist/locales/it.json +4 -0
  62. package/dist/locales/ja.json +4 -0
  63. package/dist/locales/nl.json +4 -0
  64. package/dist/locales/pl.json +4 -0
  65. package/dist/locales/pt.json +4 -0
  66. package/dist/locales/ro.json +4 -0
  67. package/dist/locales/ru.json +4 -0
  68. package/dist/locales/sq.json +4 -0
  69. package/dist/locales/sv.json +4 -0
  70. package/dist/locales/tr.json +4 -0
  71. package/dist/locales/zh.json +4 -0
  72. package/dist/patterns/anamnesis/index.js +1 -1
  73. package/dist/tokens.css +1 -1
  74. package/package.json +1 -1
  75. package/dist/_chunks/use-signing-session-CyOZWinp.js +0 -147
@@ -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.28.3",
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
  }
@@ -31,6 +31,15 @@ export interface BookingService {
31
31
  specialtyId?: string;
32
32
  /** Operators who can perform this service. */
33
33
  operatorIds?: string[];
34
+ /**
35
+ * Practice-authored plain text the patient must read and accept before
36
+ * the booking can be submitted (the platform's
37
+ * `criticalInformationToAccept` on a booking reason). When present, the
38
+ * details step renders it above the consents with a required checkbox;
39
+ * when absent, the step adds nothing. Always rendered as text, never as
40
+ * HTML: a practice cannot inject markup through it.
41
+ */
42
+ criticalInformationToAccept?: string;
34
43
  }
35
44
  export interface BookingOperator {
36
45
  id: string;
@@ -55,6 +64,12 @@ export interface BookingDetails {
55
64
  mobilePhone: string;
56
65
  privacyConsent: boolean;
57
66
  termsConsent: boolean;
67
+ /**
68
+ * `true` once the patient has ticked the acceptance box for the selected
69
+ * service's `criticalInformationToAccept`. Present in the submit payload
70
+ * only when the service carries that text; omitted otherwise.
71
+ */
72
+ criticalInformationAccepted?: boolean;
58
73
  codiceFiscale?: string;
59
74
  dateOfBirth?: string;
60
75
  insuranceNumber?: string;
@@ -13,6 +13,13 @@ export interface BookingDetailsFormProps {
13
13
  showReturningPatientFlag?: boolean;
14
14
  privacyPolicyUrl?: string;
15
15
  termsUrl?: string;
16
+ /**
17
+ * The selected service's `criticalInformationToAccept`. When set (and not
18
+ * blank), a "Before you book" block renders above the consents and the
19
+ * patient must tick its checkbox before submit enables. Rendered as
20
+ * plain text — never parsed as HTML.
21
+ */
22
+ criticalInformationToAccept?: string;
16
23
  validateCodiceFiscale?: BookingValidator;
17
24
  validateInsuranceNumber?: BookingValidator;
18
25
  submitting?: boolean;
@@ -1,4 +1,4 @@
1
- import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-BtSOKjQu.js";
1
+ import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-AabCk7CI.js";
2
2
  export {
3
3
  A as Booking,
4
4
  R as CONFIRMATION_CHANNEL_ORDER,
@@ -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
  }
@@ -1870,6 +1870,10 @@ export declare const arUi: {
1870
1870
  readonly returningPatient: {
1871
1871
  readonly label: "أنا مريض حالي في هذه العيادة";
1872
1872
  };
1873
+ readonly criticalInformation: {
1874
+ readonly heading: "قبل الحجز";
1875
+ readonly accept: "لقد قرأتُ هذه المعلومات وأوافق عليها";
1876
+ };
1873
1877
  readonly consent: {
1874
1878
  readonly privacy: {
1875
1879
  readonly label: "لقد قرأتُ <policyLink>سياسة الخصوصية</policyLink> وأوافق عليها";
@@ -1867,6 +1867,10 @@ const e = {
1867
1867
  returningPatient: {
1868
1868
  label: "أنا مريض حالي في هذه العيادة"
1869
1869
  },
1870
+ criticalInformation: {
1871
+ heading: "قبل الحجز",
1872
+ accept: "لقد قرأتُ هذه المعلومات وأوافق عليها"
1873
+ },
1870
1874
  consent: {
1871
1875
  privacy: {
1872
1876
  label: "لقد قرأتُ <policyLink>سياسة الخصوصية</policyLink> وأوافق عليها"
@@ -1870,6 +1870,10 @@ export declare const deUi: {
1870
1870
  readonly returningPatient: {
1871
1871
  readonly label: "Ich bin bereits Patient:in dieser Praxis";
1872
1872
  };
1873
+ readonly criticalInformation: {
1874
+ readonly heading: "Bevor Sie buchen";
1875
+ readonly accept: "Ich habe diese Informationen gelesen und akzeptiere sie";
1876
+ };
1873
1877
  readonly consent: {
1874
1878
  readonly privacy: {
1875
1879
  readonly label: "Ich habe die <policyLink>Datenschutzerklärung</policyLink> gelesen und akzeptiere sie";
@@ -1867,6 +1867,10 @@ const e = {
1867
1867
  returningPatient: {
1868
1868
  label: "Ich bin bereits Patient:in dieser Praxis"
1869
1869
  },
1870
+ criticalInformation: {
1871
+ heading: "Bevor Sie buchen",
1872
+ accept: "Ich habe diese Informationen gelesen und akzeptiere sie"
1873
+ },
1870
1874
  consent: {
1871
1875
  privacy: {
1872
1876
  label: "Ich habe die <policyLink>Datenschutzerklärung</policyLink> gelesen und akzeptiere sie"
@@ -1867,6 +1867,10 @@ export declare const elUi: {
1867
1867
  readonly returningPatient: {
1868
1868
  readonly label: "Είμαι ήδη ασθενής αυτού του ιατρείου";
1869
1869
  };
1870
+ readonly criticalInformation: {
1871
+ readonly heading: "Πριν κλείσετε ραντεβού";
1872
+ readonly accept: "Έχω διαβάσει και αποδέχομαι αυτές τις πληροφορίες";
1873
+ };
1870
1874
  readonly consent: {
1871
1875
  readonly privacy: {
1872
1876
  readonly label: "Έχω διαβάσει και αποδέχομαι την <policyLink>πολιτική απορρήτου</policyLink>";
@@ -1867,6 +1867,10 @@ const e = {
1867
1867
  returningPatient: {
1868
1868
  label: "Είμαι ήδη ασθενής αυτού του ιατρείου"
1869
1869
  },
1870
+ criticalInformation: {
1871
+ heading: "Πριν κλείσετε ραντεβού",
1872
+ accept: "Έχω διαβάσει και αποδέχομαι αυτές τις πληροφορίες"
1873
+ },
1870
1874
  consent: {
1871
1875
  privacy: {
1872
1876
  label: "Έχω διαβάσει και αποδέχομαι την <policyLink>πολιτική απορρήτου</policyLink>"
@@ -1935,6 +1935,10 @@ export declare const enUi: {
1935
1935
  readonly returningPatient: {
1936
1936
  readonly label: "I'm already a patient at this practice";
1937
1937
  };
1938
+ readonly criticalInformation: {
1939
+ readonly heading: "Before you book";
1940
+ readonly accept: "I have read and accept this information";
1941
+ };
1938
1942
  readonly consent: {
1939
1943
  readonly privacy: {
1940
1944
  readonly label: "I have read and accept the <policyLink>privacy policy</policyLink>";
@@ -1918,6 +1918,10 @@ const e = {
1918
1918
  returningPatient: {
1919
1919
  label: "I'm already a patient at this practice"
1920
1920
  },
1921
+ criticalInformation: {
1922
+ heading: "Before you book",
1923
+ accept: "I have read and accept this information"
1924
+ },
1921
1925
  consent: {
1922
1926
  privacy: {
1923
1927
  label: "I have read and accept the <policyLink>privacy policy</policyLink>"
@@ -1867,6 +1867,10 @@ export declare const esUi: {
1867
1867
  readonly returningPatient: {
1868
1868
  readonly label: "Ya soy paciente de esta clínica";
1869
1869
  };
1870
+ readonly criticalInformation: {
1871
+ readonly heading: "Antes de reservar";
1872
+ readonly accept: "He leído y acepto esta información";
1873
+ };
1870
1874
  readonly consent: {
1871
1875
  readonly privacy: {
1872
1876
  readonly label: "He leído y acepto la <policyLink>política de privacidad</policyLink>";
@@ -1867,6 +1867,10 @@ const e = {
1867
1867
  returningPatient: {
1868
1868
  label: "Ya soy paciente de esta clínica"
1869
1869
  },
1870
+ criticalInformation: {
1871
+ heading: "Antes de reservar",
1872
+ accept: "He leído y acepto esta información"
1873
+ },
1870
1874
  consent: {
1871
1875
  privacy: {
1872
1876
  label: "He leído y acepto la <policyLink>política de privacidad</policyLink>"