@alfadocs/ui-kit 1.10.1 → 1.12.4

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 (118) hide show
  1. package/dist/_chunks/{actions-cell-renderer-xfSYiTXQ.js → actions-cell-renderer-BCEjn3-f.js} +2 -2
  2. package/dist/_chunks/{anamnesis-summary-rows-d44s_whc.js → anamnesis-summary-rows-BfhxWPO3.js} +1421 -1418
  3. package/dist/_chunks/appointment-timeline-DCn0Jx55.js +403 -0
  4. package/dist/_chunks/{balance-badge-cell-C_Qz76x7.js → balance-badge-cell-BrlikHfT.js} +317 -290
  5. package/dist/_chunks/booking-CBHKdsZl.js +2906 -0
  6. package/dist/_chunks/{chart-Bkr1Sh4o.js → chart-C6eHTxkO.js} +2 -2
  7. package/dist/_chunks/{contact-profile-card-CE9OJKcl.js → contact-profile-card-BMIBr5s9.js} +104 -125
  8. package/dist/_chunks/{control-room-rail-Cj2iX9h_.js → control-room-rail-iO_BCaq1.js} +2 -2
  9. package/dist/_chunks/{editable-currency-cell-renderer-zLf_bXvL.js → editable-currency-cell-renderer-B7TVZ5ZJ.js} +2 -2
  10. package/dist/_chunks/{face-scheme-BfDi4YkW.js → face-scheme-CZaKm6fG.js} +2 -2
  11. package/dist/_chunks/{file-manager-Df6hyUYg.js → file-manager-Moc7sUFj.js} +3 -3
  12. package/dist/_chunks/format-price-DNqXPa_q.js +61 -0
  13. package/dist/_chunks/{header-settings-CVC_davE.js → header-settings-J-ZCAfir.js} +2 -2
  14. package/dist/_chunks/{icon-button-group-D6SVMteH.js → icon-button-group-VCCod3Hz.js} +154 -145
  15. package/dist/_chunks/{link-cell-renderer-Cp2MSlJl.js → link-cell-renderer-CenJx-_7.js} +197 -181
  16. package/dist/_chunks/{marketplace-app-shell-Chfdia7m.js → marketplace-app-shell-DDQXQ8hX.js} +2 -2
  17. package/dist/_chunks/{notes-panel-e9cJWVRg.js → notes-panel-CymneXtl.js} +93 -91
  18. package/dist/_chunks/{practice-results-BEsAdW-B.js → practice-results-D7ygCj_W.js} +333 -291
  19. package/dist/_chunks/{signature-request-CW30B77U.js → signature-request-DVDTKLjM.js} +2 -2
  20. package/dist/_chunks/{stepper-accordion-BeVMZPuG.js → stepper-accordion-DmVykr5F.js} +91 -88
  21. package/dist/_chunks/{theme-toggle-DuMhQNFS.js → theme-toggle-uEwoKjl3.js} +2 -2
  22. package/dist/_chunks/{tool-rail-CHyUmulN.js → tool-rail-8Scslq3X.js} +2 -2
  23. package/dist/_chunks/{whatsapp-button-Ca9towA4.js → whatsapp-button-CuFIHJzG.js} +27 -19
  24. package/dist/agent-catalog.json +12 -5
  25. package/dist/agent-i18n/en.json +4 -3
  26. package/dist/components/_shared/format-price.d.ts +21 -0
  27. package/dist/components/_shared/index.d.ts +1 -0
  28. package/dist/components/_shared/stepper.d.ts +28 -2
  29. package/dist/components/appointment-card/appointment-card.d.ts +1 -1
  30. package/dist/components/appointment-timeline/appointment-timeline.d.ts +8 -0
  31. package/dist/components/appointment-timeline/index.js +1 -1
  32. package/dist/components/booking/booking-types.d.ts +15 -2
  33. package/dist/components/booking/index.js +1 -1
  34. package/dist/components/chart/index.js +1 -1
  35. package/dist/components/contact-profile-card/index.js +1 -1
  36. package/dist/components/control-room-rail/index.js +1 -1
  37. package/dist/components/data-table/filters/date-range-filter.d.ts +22 -0
  38. package/dist/components/data-table/index.js +3 -3
  39. package/dist/components/face-scheme/index.js +1 -1
  40. package/dist/components/file-manager/index.js +1 -1
  41. package/dist/components/header-settings/index.js +1 -1
  42. package/dist/components/icon-button-group/index.js +1 -1
  43. package/dist/components/notes-panel/index.js +1 -1
  44. package/dist/components/notes-panel/notes-panel.d.ts +6 -0
  45. package/dist/components/patient-table/index.js +1 -1
  46. package/dist/components/practice-results/index.js +1 -1
  47. package/dist/components/practice-results/practice-results.d.ts +18 -0
  48. package/dist/components/stepper-accordion/index.js +1 -1
  49. package/dist/components/theme-toggle/index.js +1 -1
  50. package/dist/components/tool-rail/index.js +1 -1
  51. package/dist/components/tool-rail/tool-rail.d.ts +1 -1
  52. package/dist/components/whatsapp-button/index.js +1 -1
  53. package/dist/host-compat.css +7 -1
  54. package/dist/i18n/locales/ar.d.ts +4 -0
  55. package/dist/i18n/locales/ar.js +5 -1
  56. package/dist/i18n/locales/de.d.ts +5 -1
  57. package/dist/i18n/locales/de.js +6 -2
  58. package/dist/i18n/locales/el.d.ts +4 -0
  59. package/dist/i18n/locales/el.js +5 -1
  60. package/dist/i18n/locales/en.d.ts +4 -0
  61. package/dist/i18n/locales/en.js +5 -1
  62. package/dist/i18n/locales/es.d.ts +5 -1
  63. package/dist/i18n/locales/es.js +6 -2
  64. package/dist/i18n/locales/fr.d.ts +5 -1
  65. package/dist/i18n/locales/fr.js +6 -2
  66. package/dist/i18n/locales/hi.d.ts +4 -0
  67. package/dist/i18n/locales/hi.js +5 -1
  68. package/dist/i18n/locales/it.d.ts +4 -0
  69. package/dist/i18n/locales/it.js +5 -1
  70. package/dist/i18n/locales/ja.d.ts +4 -0
  71. package/dist/i18n/locales/ja.js +5 -1
  72. package/dist/i18n/locales/nl.d.ts +5 -1
  73. package/dist/i18n/locales/nl.js +6 -2
  74. package/dist/i18n/locales/pl.d.ts +4 -0
  75. package/dist/i18n/locales/pl.js +5 -1
  76. package/dist/i18n/locales/pt.d.ts +5 -1
  77. package/dist/i18n/locales/pt.js +6 -2
  78. package/dist/i18n/locales/ro.d.ts +4 -0
  79. package/dist/i18n/locales/ro.js +5 -1
  80. package/dist/i18n/locales/ru.d.ts +4 -0
  81. package/dist/i18n/locales/ru.js +5 -1
  82. package/dist/i18n/locales/sq.d.ts +4 -0
  83. package/dist/i18n/locales/sq.js +5 -1
  84. package/dist/i18n/locales/sv.d.ts +4 -0
  85. package/dist/i18n/locales/sv.js +5 -1
  86. package/dist/i18n/locales/tr.d.ts +4 -0
  87. package/dist/i18n/locales/tr.js +5 -1
  88. package/dist/i18n/locales/zh.d.ts +4 -0
  89. package/dist/i18n/locales/zh.js +5 -1
  90. package/dist/index.js +20 -20
  91. package/dist/locales/ar.json +5 -1
  92. package/dist/locales/de.json +6 -2
  93. package/dist/locales/el.json +5 -1
  94. package/dist/locales/en.json +5 -1
  95. package/dist/locales/es.json +6 -2
  96. package/dist/locales/fr.json +6 -2
  97. package/dist/locales/hi.json +5 -1
  98. package/dist/locales/it.json +5 -1
  99. package/dist/locales/ja.json +5 -1
  100. package/dist/locales/nl.json +6 -2
  101. package/dist/locales/pl.json +5 -1
  102. package/dist/locales/pt.json +6 -2
  103. package/dist/locales/ro.json +5 -1
  104. package/dist/locales/ru.json +5 -1
  105. package/dist/locales/sq.json +5 -1
  106. package/dist/locales/sv.json +5 -1
  107. package/dist/locales/tr.json +5 -1
  108. package/dist/locales/zh.json +5 -1
  109. package/dist/patterns/anamnesis/anamnesis-config.d.ts +18 -7
  110. package/dist/patterns/anamnesis/anamnesis-types.d.ts +8 -0
  111. package/dist/patterns/anamnesis/index.js +1 -1
  112. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  113. package/dist/patterns/signature-request/index.js +1 -1
  114. package/dist/tokens.css +1 -1
  115. package/package.json +1 -1
  116. package/dist/_chunks/appointment-timeline-0mwtpErq.js +0 -388
  117. package/dist/_chunks/booking-DHkKcUIl.js +0 -2713
  118. package/dist/_chunks/languages-CGLX6Qpe.js +0 -19
@@ -5,7 +5,7 @@ import { D as m } from "./dialog-UbKJCi1X.js";
5
5
  import { B as z } from "./button-nJaPh_HC.js";
6
6
  import { I as xe } from "./icon-button-DA2CAGHZ.js";
7
7
  import { C as Y } from "./checkbox-BuZ1u__2.js";
8
- import { a as Re } from "./whatsapp-button-Ca9towA4.js";
8
+ import { a as Re } from "./whatsapp-button-CuFIHJzG.js";
9
9
  import { S as Z } from "./select-BW5ecXlX.js";
10
10
  import { S as be } from "./switch-OILsBLWo.js";
11
11
  import { A as _ } from "./alert-CiJT540z.js";
@@ -414,4 +414,4 @@ Me.displayName = "SignatureRequestModal";
414
414
  export {
415
415
  Me as S
416
416
  };
417
- //# sourceMappingURL=signature-request-CW30B77U.js.map
417
+ //# sourceMappingURL=signature-request-DVDTKLjM.js.map
@@ -1,19 +1,22 @@
1
- import { jsx as e, jsxs as i, Fragment as x } from "react/jsx-runtime";
2
- import { forwardRef as E, useMemo as P, useImperativeHandle as R } from "react";
1
+ import { jsx as e, jsxs as c, Fragment as j } from "react/jsx-runtime";
2
+ import { forwardRef as P, useMemo as B, useImperativeHandle as D } from "react";
3
3
  import * as m from "@radix-ui/react-accordion";
4
- import { c as v } from "./index-D2ZczOXr.js";
5
- import { useTranslation as B } from "react-i18next";
6
- import { C as D } from "./chevron-down-DWE7GSq9.js";
7
- import { L as G } from "./lock-ClAFG1gy.js";
8
- function H(a, c, r) {
9
- return r === "error" ? "error" : a === c ? "current" : r === "completed" || a < c ? "completed" : "upcoming";
4
+ import { c as b } from "./index-D2ZczOXr.js";
5
+ import { useTranslation as G } from "react-i18next";
6
+ import { C as H } from "./chevron-down-DWE7GSq9.js";
7
+ import { L as U } from "./lock-ClAFG1gy.js";
8
+ function W(s, i, r) {
9
+ return r === "error" ? "error" : s === i ? "current" : r === "completed" || s < i ? "completed" : "upcoming";
10
10
  }
11
- const k = "step-", y = (a) => `${k}${a}`, U = (a) => Number(a.slice(k.length)), p = [
11
+ function O(s, i, r) {
12
+ return r !== void 0 ? !0 : s <= i;
13
+ }
14
+ const C = "step-", w = (s) => `${C}${s}`, X = (s) => Number(s.slice(C.length)), h = [
12
15
  "ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]",
13
16
  "ds:animate-[stepper-icon-draw_var(--animation-duration)_var(--ease-out)_forwards]",
14
17
  "ds:motion-reduce:animate-none ds:motion-reduce:[stroke-dashoffset:0]"
15
18
  ].join(" ");
16
- function W() {
19
+ function q() {
17
20
  return /* @__PURE__ */ e(
18
21
  "svg",
19
22
  {
@@ -25,12 +28,12 @@ function W() {
25
28
  strokeLinejoin: "round",
26
29
  "aria-hidden": "true",
27
30
  className: "ds:size-4",
28
- children: /* @__PURE__ */ e("path", { pathLength: "1", d: "M5 12l5 5L20 7", className: p })
31
+ children: /* @__PURE__ */ e("path", { pathLength: "1", d: "M5 12l5 5L20 7", className: h })
29
32
  }
30
33
  );
31
34
  }
32
- function O() {
33
- return /* @__PURE__ */ i(
35
+ function J() {
36
+ return /* @__PURE__ */ c(
34
37
  "svg",
35
38
  {
36
39
  viewBox: "0 0 24 24",
@@ -42,13 +45,13 @@ function O() {
42
45
  "aria-hidden": "true",
43
46
  className: "ds:size-4",
44
47
  children: [
45
- /* @__PURE__ */ e("path", { pathLength: "1", d: "M6 6l12 12", className: p }),
46
- /* @__PURE__ */ e("path", { pathLength: "1", d: "M18 6l-12 12", className: p })
48
+ /* @__PURE__ */ e("path", { pathLength: "1", d: "M6 6l12 12", className: h }),
49
+ /* @__PURE__ */ e("path", { pathLength: "1", d: "M18 6l-12 12", className: h })
47
50
  ]
48
51
  }
49
52
  );
50
53
  }
51
- const X = [
54
+ const K = [
52
55
  "ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center",
53
56
  "ds:min-w-[var(--min-target-size)] ds:min-h-[var(--min-target-size)]",
54
57
  "ds:size-[var(--min-target-size)]",
@@ -58,7 +61,7 @@ const X = [
58
61
  "ds:transition-[background-color,border-color,color]",
59
62
  "ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]",
60
63
  "ds:motion-reduce:transition-none"
61
- ].join(" "), q = v(X, {
64
+ ].join(" "), Q = b(K, {
62
65
  variants: {
63
66
  state: {
64
67
  upcoming: "ds:bg-[var(--background)] ds:text-[var(--muted-foreground)]",
@@ -75,7 +78,7 @@ const X = [
75
78
  ].join(" ")
76
79
  }
77
80
  }
78
- }), J = v(
81
+ }), Y = b(
79
82
  [
80
83
  "ds:group/item ds:overflow-hidden ds:rounded-[var(--radius-md)]",
81
84
  "ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2 ds:bg-[var(--card)]",
@@ -92,7 +95,7 @@ const X = [
92
95
  },
93
96
  defaultVariants: { tone: "neutral" }
94
97
  }
95
- ), K = [
98
+ ), Z = [
96
99
  "ds:flex ds:w-full ds:items-center ds:gap-[var(--spacing-sm)]",
97
100
  "ds:min-h-[var(--min-target-size)]",
98
101
  "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]",
@@ -104,144 +107,144 @@ const X = [
104
107
  "ds:transition-[background-color] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]",
105
108
  "ds:motion-reduce:transition-none",
106
109
  "ds:hover:enabled:bg-[var(--muted)]/40"
107
- ].join(" "), Q = (a) => [
110
+ ].join(" "), S = (s) => [
108
111
  "type-body-sm",
109
- a === "current" || a === "error" ? "ds:font-[var(--font-weight-semibold)] ds:text-[var(--foreground)]" : a === "completed" ? "ds:text-[var(--foreground)]" : "ds:text-[var(--muted-foreground)]"
110
- ].join(" "), Y = [
112
+ s === "current" || s === "error" ? "ds:font-[var(--font-weight-semibold)] ds:text-[var(--foreground)]" : s === "completed" ? "ds:text-[var(--foreground)]" : "ds:text-[var(--muted-foreground)]"
113
+ ].join(" "), ee = [
111
114
  "type-meta ds:text-[var(--muted-foreground)]",
112
115
  "ds:mt-[var(--spacing-xs)]"
113
- ].join(" "), N = [
116
+ ].join(" "), g = [
114
117
  "type-meta",
115
118
  "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]",
116
119
  "ds:text-[var(--muted-foreground)]"
117
- ].join(" "), Z = [
120
+ ].join(" "), re = [
118
121
  "ds:size-4 ds:shrink-0 ds:text-[var(--muted-foreground)]",
119
122
  "ds:transition-transform ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]",
120
123
  "ds:motion-reduce:transition-none",
121
124
  "ds:group-data-[state=open]/item:rotate-180"
122
- ].join(" "), S = [
125
+ ].join(" "), se = [
123
126
  "type-meta ds:text-[var(--muted-foreground)]",
124
127
  "ds:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]",
125
128
  "ds:pe-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]",
126
129
  "ds:group-data-[state=open]/item:hidden"
127
- ].join(" "), ee = [
130
+ ].join(" "), ae = [
128
131
  "ds:overflow-hidden",
129
132
  "ds:data-[state=open]:animate-[accordion-down_var(--animation-duration)_var(--ease-out)]",
130
133
  "ds:data-[state=closed]:animate-[accordion-up_var(--animation-duration)_var(--ease-in)]"
131
- ].join(" "), re = [
134
+ ].join(" "), te = [
132
135
  "ds:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]",
133
136
  "ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-md)]"
134
- ].join(" "), se = v("ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", {
137
+ ].join(" "), ne = b("ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", {
135
138
  variants: {}
136
- }), ae = E(
139
+ }), oe = P(
137
140
  ({
138
- activeStep: a,
139
- steps: c,
141
+ activeStep: s,
142
+ steps: i,
140
143
  onStepChange: r,
141
- "aria-label": j,
142
- id: f,
143
- className: w,
144
- ..._
145
- }, C) => {
146
- const { t: d } = B(), l = c.length, o = Math.max(0, Math.min(a, l - 1)), z = j ?? d("navigation.stepper.label"), g = d("navigation.stepper.edit"), L = d("navigation.stepper.locked"), M = d("navigation.stepper.completed"), V = d("navigation.stepper.error"), A = (t) => {
144
+ "aria-label": _,
145
+ id: x,
146
+ className: z,
147
+ ...L
148
+ }, M) => {
149
+ const { t: d } = G(), l = i.length, n = Math.max(0, Math.min(s, l - 1)), V = _ ?? d("navigation.stepper.label"), y = d("navigation.stepper.edit"), N = d("navigation.stepper.open"), $ = d("navigation.stepper.locked"), A = d("navigation.stepper.completed"), F = d("navigation.stepper.error"), I = (t) => {
147
150
  if (!t) return;
148
- const s = U(t);
149
- Number.isFinite(s) && s !== o && (r == null || r(s));
150
- }, h = P(
151
+ const a = X(t);
152
+ Number.isFinite(a) && a !== n && (r == null || r(a));
153
+ }, k = B(
151
154
  () => ({
152
- getCurrentStep: () => o,
155
+ getCurrentStep: () => n,
153
156
  getTotalSteps: () => l,
154
- getOpenSteps: () => [o],
157
+ getOpenSteps: () => [n],
155
158
  gotoStep: (t) => {
156
159
  if (!r) return;
157
- const s = Math.max(0, Math.min(t, Math.max(l - 1, 0)));
158
- s !== o && r(s);
160
+ const a = Math.max(0, Math.min(t, Math.max(l - 1, 0)));
161
+ a !== n && r(a);
159
162
  },
160
163
  next: () => {
161
- r && o < l - 1 && r(o + 1);
164
+ r && n < l - 1 && r(n + 1);
162
165
  },
163
166
  previous: () => {
164
- r && o > 0 && r(o - 1);
167
+ r && n > 0 && r(n - 1);
165
168
  }
166
169
  }),
167
- [o, l, r]
170
+ [n, l, r]
168
171
  );
169
- return R(C, () => h, [h]), /* @__PURE__ */ e(
172
+ return D(M, () => k, [k]), /* @__PURE__ */ e(
170
173
  m.Root,
171
174
  {
172
175
  type: "single",
173
- value: y(o),
174
- onValueChange: A,
176
+ value: w(n),
177
+ onValueChange: I,
175
178
  collapsible: !1,
176
- "aria-label": z,
177
- id: f,
179
+ "aria-label": V,
180
+ id: x,
178
181
  "data-component": "stepper-accordion",
179
- "data-component-id": f,
180
- className: se({ className: w }),
181
- ..._,
182
- children: c.map((t, s) => {
183
- const n = H(s, o, t.status), u = n === "current" || n === "error", F = n === "upcoming", T = n === "error" ? "error" : "neutral", b = d("navigation.stepper.stepN", { n: s + 1 }), I = n === "completed" ? /* @__PURE__ */ i(x, { children: [
184
- /* @__PURE__ */ e(W, {}),
185
- /* @__PURE__ */ e("span", { className: "ds:sr-only", children: M })
186
- ] }) : n === "error" ? /* @__PURE__ */ i(x, { children: [
187
- /* @__PURE__ */ e(O, {}),
188
- /* @__PURE__ */ e("span", { className: "ds:sr-only", children: V })
189
- ] }) : /* @__PURE__ */ e("span", { children: s + 1 }), $ = n === "completed" ? /* @__PURE__ */ e("span", { className: N, children: g }) : n === "upcoming" ? /* @__PURE__ */ i("span", { className: N, children: [
190
- /* @__PURE__ */ e(G, { "aria-hidden": "true", className: "ds:size-3" }),
191
- L
192
- ] }) : null;
193
- return /* @__PURE__ */ i(
182
+ "data-component-id": x,
183
+ className: ne({ className: z }),
184
+ ...L,
185
+ children: i.map((t, a) => {
186
+ const o = W(a, n, t.status), u = o === "current" || o === "error", p = o === "upcoming", v = p && !O(a, n, t.status), T = o === "error" ? "error" : "neutral", f = d("navigation.stepper.stepN", { n: a + 1 }), R = o === "completed" ? /* @__PURE__ */ c(j, { children: [
187
+ /* @__PURE__ */ e(q, {}),
188
+ /* @__PURE__ */ e("span", { className: "ds:sr-only", children: A })
189
+ ] }) : o === "error" ? /* @__PURE__ */ c(j, { children: [
190
+ /* @__PURE__ */ e(J, {}),
191
+ /* @__PURE__ */ e("span", { className: "ds:sr-only", children: F })
192
+ ] }) : /* @__PURE__ */ e("span", { children: a + 1 }), E = o === "completed" ? /* @__PURE__ */ e("span", { className: g, children: y }) : v ? /* @__PURE__ */ c("span", { className: g, children: [
193
+ /* @__PURE__ */ e(U, { "aria-hidden": "true", className: "ds:size-3" }),
194
+ $
195
+ ] }) : p ? /* @__PURE__ */ e("span", { className: g, children: N }) : null;
196
+ return /* @__PURE__ */ c(
194
197
  m.Item,
195
198
  {
196
- value: y(s),
197
- "data-step-id": String(s),
198
- className: J({ tone: T }),
199
+ value: w(a),
200
+ "data-step-id": String(a),
201
+ className: Y({ tone: T }),
199
202
  children: [
200
- /* @__PURE__ */ e(m.Header, { className: "ds:flex", children: /* @__PURE__ */ i(
203
+ /* @__PURE__ */ e(m.Header, { className: "ds:flex", children: /* @__PURE__ */ c(
201
204
  m.Trigger,
202
205
  {
203
- disabled: F,
206
+ disabled: v,
204
207
  "aria-disabled": u || void 0,
205
- "aria-label": n === "completed" ? `${b}, ${g}` : b,
208
+ "aria-label": o === "completed" ? `${f}, ${y}` : p && !v ? `${f}, ${N}` : f,
206
209
  "aria-current": u ? "step" : void 0,
207
- className: K,
210
+ className: Z,
208
211
  children: [
209
212
  /* @__PURE__ */ e(
210
213
  "span",
211
214
  {
212
215
  "aria-hidden": "true",
213
- className: q({ state: n }),
214
- children: I
216
+ className: Q({ state: o }),
217
+ children: R
215
218
  }
216
219
  ),
217
- /* @__PURE__ */ i("span", { className: "ds:flex ds:min-w-0 ds:flex-1 ds:flex-col", children: [
218
- /* @__PURE__ */ e("span", { className: Q(n), children: t.label }),
219
- t.description ? /* @__PURE__ */ e("span", { className: Y, children: t.description }) : null
220
+ /* @__PURE__ */ c("span", { className: "ds:flex ds:min-w-0 ds:flex-1 ds:flex-col", children: [
221
+ /* @__PURE__ */ e("span", { className: S(o), children: t.label }),
222
+ t.description ? /* @__PURE__ */ e("span", { className: ee, children: t.description }) : null
220
223
  ] }),
221
- $,
224
+ E,
222
225
  u ? null : /* @__PURE__ */ e(
223
- D,
226
+ H,
224
227
  {
225
228
  "aria-hidden": "true",
226
- className: Z
229
+ className: re
227
230
  }
228
231
  )
229
232
  ]
230
233
  }
231
234
  ) }),
232
- t.summary && n === "completed" ? /* @__PURE__ */ e("div", { className: S, children: t.summary }) : null,
233
- /* @__PURE__ */ e(m.Content, { className: ee, children: /* @__PURE__ */ e("div", { className: re, children: t.content }) })
235
+ t.summary && o === "completed" ? /* @__PURE__ */ e("div", { className: se, children: t.summary }) : null,
236
+ /* @__PURE__ */ e(m.Content, { className: ae, children: /* @__PURE__ */ e("div", { className: te, children: t.content }) })
234
237
  ]
235
238
  },
236
- s
239
+ a
237
240
  );
238
241
  })
239
242
  }
240
243
  );
241
244
  }
242
245
  );
243
- ae.displayName = "StepperAccordion";
246
+ oe.displayName = "StepperAccordion";
244
247
  export {
245
- ae as S
248
+ oe as S
246
249
  };
247
- //# sourceMappingURL=stepper-accordion-BeVMZPuG.js.map
250
+ //# sourceMappingURL=stepper-accordion-DmVykr5F.js.map
@@ -3,7 +3,7 @@ import { forwardRef as M, useRef as k, useImperativeHandle as N, useMemo as _, u
3
3
  import { c as P } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as g } from "react-i18next";
5
5
  import { I as y } from "./icon-button-DA2CAGHZ.js";
6
- import { I as j } from "./icon-button-group-D6SVMteH.js";
6
+ import { I as j } from "./icon-button-group-VCCod3Hz.js";
7
7
  import { S as K } from "./switch-OILsBLWo.js";
8
8
  import { D as o } from "./dropdown-menu-DU-Hrf33.js";
9
9
  import { u as x } from "./use-theme-CAuo6EYT.js";
@@ -364,4 +364,4 @@ export {
364
364
  F as T,
365
365
  D as t
366
366
  };
367
- //# sourceMappingURL=theme-toggle-DuMhQNFS.js.map
367
+ //# sourceMappingURL=theme-toggle-uEwoKjl3.js.map
@@ -81,7 +81,7 @@ const Le = {
81
81
  description: "Stable tool id emitted on each strip IconButton. The active icon also carries data-active set to its id."
82
82
  }
83
83
  }
84
- }, Ke = "ds:[inline-size:3rem]", je = "ds:[inline-size:var(--tool-rail-panel-inline-size,var(--ai-tools-rail-panel-inline-size,22rem))]", ae = "--tool-rail-panel-inline-size", Pe = 288, Me = 640, qe = 352, Be = w(
84
+ }, Ke = "ds:[inline-size:3rem]", je = "ds:[inline-size:var(--tool-rail-panel-inline-size,var(--ai-tools-rail-panel-inline-size,22rem))]", ae = "--tool-rail-panel-inline-size", Pe = 288, Me = 880, qe = 352, Be = w(
85
85
  ["ds:flex ds:shrink-0 ds:h-full", "ds:bg-[var(--background)]"].join(" "),
86
86
  {
87
87
  variants: {
@@ -521,4 +521,4 @@ export {
521
521
  Ze as T,
522
522
  Le as t
523
523
  };
524
- //# sourceMappingURL=tool-rail-CHyUmulN.js.map
524
+ //# sourceMappingURL=tool-rail-8Scslq3X.js.map
@@ -1,11 +1,11 @@
1
- import { jsxs as c, jsx as o } from "react/jsx-runtime";
1
+ import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
2
  import { forwardRef as _, useMemo as A } from "react";
3
3
  import { c as m } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as j } from "react-i18next";
5
5
  function u({
6
6
  className: a
7
7
  }) {
8
- return /* @__PURE__ */ o(
8
+ return /* @__PURE__ */ r(
9
9
  "svg",
10
10
  {
11
11
  "aria-hidden": "true",
@@ -13,11 +13,11 @@ function u({
13
13
  fill: "currentColor",
14
14
  xmlns: "http://www.w3.org/2000/svg",
15
15
  className: a,
16
- children: /* @__PURE__ */ o("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.149-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.71.306 1.263.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" })
16
+ children: /* @__PURE__ */ r("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.149-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.71.306 1.263.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" })
17
17
  }
18
18
  );
19
19
  }
20
- const C = m(
20
+ const k = m(
21
21
  [
22
22
  // `position` is provided by `positionVariants` below — `static`
23
23
  // sets `ds:relative` (so the pseudo-element touch-target anchors),
@@ -119,7 +119,7 @@ const C = m(
119
119
  size: "md"
120
120
  }
121
121
  }
122
- ), k = m("", {
122
+ ), C = m("", {
123
123
  variants: {
124
124
  position: {
125
125
  // `relative` so the `::before` pseudo touch-target (defined in
@@ -142,15 +142,15 @@ function B(a, n) {
142
142
  const s = a.replace(/\D/g, "");
143
143
  if (s.length === 0)
144
144
  return null;
145
- const r = `https://wa.me/${s}`;
146
- return n ? `${r}?text=${encodeURIComponent(n)}` : r;
145
+ const d = `https://wa.me/${s}`;
146
+ return n ? `${d}?text=${encodeURIComponent(n)}` : d;
147
147
  }
148
148
  const L = _(
149
149
  ({
150
150
  phoneNumber: a,
151
151
  message: n,
152
152
  variant: s = "pill",
153
- size: r = "md",
153
+ size: d = "md",
154
154
  position: h,
155
155
  label: g,
156
156
  tone: w = "standard",
@@ -161,29 +161,37 @@ const L = _(
161
161
  () => B(a, n),
162
162
  [a, n]
163
163
  ), e = g ?? p(s === "fab" ? "whatsApp.fabLabel" : w === "question" ? "whatsApp.questionPrompt" : "whatsApp.label"), y = [
164
- C({ variant: s, size: r }),
165
- k({ position: h }),
164
+ k({ variant: s, size: d }),
165
+ C({ position: h }),
166
166
  x
167
- ].filter(Boolean).join(" "), d = f === null, v = {
167
+ ].filter(Boolean).join(" "), o = f === null, v = {
168
168
  ref: z,
169
- ...d ? {} : {
169
+ ...o ? {} : {
170
170
  href: f,
171
171
  target: "_blank",
172
172
  rel: "noopener noreferrer"
173
173
  },
174
- "aria-disabled": d ? !0 : void 0,
174
+ /* An <a> without href has NO implicit role, and `aria-disabled` is
175
+ prohibited on a roleless element (axe aria-prohibited-attr). Give
176
+ the disabled anchor an explicit link role so the state is legal
177
+ and assistive tech still announces it. */
178
+ /* `tabIndex` too: an <a> without href is not focusable, and
179
+ `aria-disabled` presupposes something focus CAN reach — otherwise
180
+ the reason the control is disabled never reaches a keyboard. */
181
+ ...o ? { role: "link", tabIndex: 0 } : {},
182
+ "aria-disabled": o ? !0 : void 0,
175
183
  "data-component": "whatsapp-button",
176
184
  "data-variant": s,
177
185
  onClick: (l) => {
178
186
  var b;
179
- d && l.preventDefault(), (b = i.onClick) == null || b.call(i, l);
187
+ o && l.preventDefault(), (b = i.onClick) == null || b.call(i, l);
180
188
  },
181
189
  className: y
182
- }, t = d ? null : p("link.opensInNewTab", "Opens in a new tab");
190
+ }, t = o ? null : p("link.opensInNewTab", "Opens in a new tab");
183
191
  if (s === "fab") {
184
192
  const l = typeof e == "string" ? t ? `${e} — ${t}` : e : void 0;
185
193
  return /* @__PURE__ */ c("a", { ...i, ...v, "aria-label": l, children: [
186
- /* @__PURE__ */ o(u, {}),
194
+ /* @__PURE__ */ r(u, {}),
187
195
  typeof e != "string" ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
188
196
  e,
189
197
  t ? ` — ${t}` : null
@@ -191,8 +199,8 @@ const L = _(
191
199
  ] });
192
200
  }
193
201
  return /* @__PURE__ */ c("a", { ...i, ...v, children: [
194
- /* @__PURE__ */ o(u, {}),
195
- /* @__PURE__ */ o("span", { children: e }),
202
+ /* @__PURE__ */ r(u, {}),
203
+ /* @__PURE__ */ r("span", { children: e }),
196
204
  t ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
197
205
  " — ",
198
206
  t
@@ -205,4 +213,4 @@ export {
205
213
  L as W,
206
214
  u as a
207
215
  };
208
- //# sourceMappingURL=whatsapp-button-Ca9towA4.js.map
216
+ //# sourceMappingURL=whatsapp-button-CuFIHJzG.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.10.1",
3
+ "packageVersion": "1.12.4",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -1253,6 +1253,12 @@
1253
1253
  "type": "string",
1254
1254
  "description": "Active variant — one of `inline-list`, `accordion`, `calendar`, `flexible`, `progress`.",
1255
1255
  "descriptionKey": "ui.agent.booking.state.variant"
1256
+ },
1257
+ {
1258
+ "name": "currentStep",
1259
+ "type": "number",
1260
+ "description": "The step the flow is on — 1 insurance, 2 specialty, 3 service, 4 provider, 5 date, 6 time, 7 patient details, 8 confirmation (after a successful submit). Read this back after `goto_step` to see where the clamp landed.",
1261
+ "descriptionKey": "ui.agent.booking.state.currentStep"
1256
1262
  }
1257
1263
  ],
1258
1264
  "actions": [
@@ -1293,7 +1299,8 @@
1293
1299
  },
1294
1300
  "idempotent": true,
1295
1301
  "errors": [
1296
- "Requested step is not yet reachable — clamped to the first incomplete step."
1302
+ "Requested step is not yet reachable — clamped to the first incomplete step.",
1303
+ "Requested step is hidden for this practice (e.g. insurance outside Germany, or provider choice turned off) — clamped to the first incomplete step."
1297
1304
  ],
1298
1305
  "examples": [
1299
1306
  {
@@ -1303,7 +1310,7 @@
1303
1310
  "note": "Return to the first step."
1304
1311
  }
1305
1312
  ],
1306
- "description": "Jump to the given step. Implementations may clamp to the first incomplete step if the requested one is not reachable yet.",
1313
+ "description": "Jump to the given step. A step that is hidden for this practice, or that sits ahead of the first incomplete step, clamps to that first incomplete step read `currentStep` back to see where it landed.",
1307
1314
  "descriptionKey": "ui.agent.booking.actions.gotoStep"
1308
1315
  }
1309
1316
  ],
@@ -10199,7 +10206,7 @@
10199
10206
  },
10200
10207
  "item": {
10201
10208
  "attr": "data-result-id",
10202
- "description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. Each card also carries two anchors: data-component=\"practice-result-open-cta\" (practice page) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot)."
10209
+ "description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. Each card also carries two anchors: data-component=\"practice-result-open-cta\" (practice page) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost — present only when the practice set one)."
10203
10210
  }
10204
10211
  }
10205
10212
  },
@@ -15725,7 +15732,7 @@
15725
15732
  {
15726
15733
  "name": "set_target",
15727
15734
  "safety": "phi",
15728
- "description": "Set or clear the patient's target for one parameter. The four the nutrition plan is written in — target weight, target BMI, daily energy, protein are set from the summary strip at the top of the Diagnosis surface; waist is set from its capture block, through the same editor. Each tile's edit button opens a small form: nothing is committed until Save, a value outside the parameter's sane range is refused rather than silently clamped, and Clear removes the goal rather than setting it to zero. A target belongs to the record, not to a visit — setting one records no measurement. Writes patient clinical data.",
15735
+ "description": "Set or clear the patient's target for one parameter. Every parameter the practice tracks as a goal is set from the summary strip at the top of the Diagnosis surface the kit seeds target weight, target BMI, daily energy and protein, and a practice can track any numeric parameter it flags as a goal; a targetable parameter that is not tracked (waist, by default) is set from its capture block, through the same editor. Each tile's edit button opens a small form: nothing is committed until Save, a value outside the parameter's sane range is refused rather than silently clamped, and Clear removes the goal rather than setting it to zero. A target belongs to the record, not to a visit — setting one records no measurement. Writes patient clinical data.",
15729
15736
  "descriptionKey": "ui.agent.anamnesis.workflows.setTarget",
15730
15737
  "uiActions": [
15731
15738
  "popover.open",
@@ -135,11 +135,12 @@
135
135
  },
136
136
  "booking": {
137
137
  "state": {
138
- "variant": "Active variant — one of `inline-list`, `accordion`, `calendar`, `flexible`, `progress`."
138
+ "variant": "Active variant — one of `inline-list`, `accordion`, `calendar`, `flexible`, `progress`.",
139
+ "currentStep": "The step the flow is on — 1 insurance, 2 specialty, 3 service, 4 provider, 5 date, 6 time, 7 patient details, 8 confirmation (after a successful submit). Read this back after `goto_step` to see where the clamp landed."
139
140
  },
140
141
  "actions": {
141
142
  "reset": "Clear the booking value back to an empty state. Use to abandon an in-progress flow.",
142
- "gotoStep": "Jump to the given step. Implementations may clamp to the first incomplete step if the requested one is not reachable yet."
143
+ "gotoStep": "Jump to the given step. A step that is hidden for this practice, or that sits ahead of the first incomplete step, clamps to that first incomplete step read `currentStep` back to see where it landed."
143
144
  }
144
145
  },
145
146
  "breadcrumb": {
@@ -1538,7 +1539,7 @@
1538
1539
  "saveIntake": "Persist the patient's questionnaire answers. Writes patient-identifiable clinical history.",
1539
1540
  "selectView": "Switch the diagnostic workspace between the read-only summary of the patient's questionnaire, the current-visit compile view and the across-visits evolution view. The summary is selected on arrival.",
1540
1541
  "recordMeasurement": "Record or correct an anthropometric, dietary-intake (daily energy, protein) or blood-test value for the current visit. BMI is computed from weight and height and cannot be recorded. Writes patient clinical data.",
1541
- "setTarget": "Set or clear the patient's target for one parameter. The four the nutrition plan is written in — target weight, target BMI, daily energy, protein are set from the summary strip at the top of the Diagnosis surface; waist is set from its capture block, through the same editor. Each tile's edit button opens a small form: nothing is committed until Save, a value outside the parameter's sane range is refused rather than silently clamped, and Clear removes the goal rather than setting it to zero. A target belongs to the record, not to a visit — setting one records no measurement. Writes patient clinical data.",
1542
+ "setTarget": "Set or clear the patient's target for one parameter. Every parameter the practice tracks as a goal is set from the summary strip at the top of the Diagnosis surface the kit seeds target weight, target BMI, daily energy and protein, and a practice can track any numeric parameter it flags as a goal; a targetable parameter that is not tracked (waist, by default) is set from its capture block, through the same editor. Each tile's edit button opens a small form: nothing is committed until Save, a value outside the parameter's sane range is refused rather than silently clamped, and Clear removes the goal rather than setting it to zero. A target belongs to the record, not to a visit — setting one records no measurement. Writes patient clinical data.",
1542
1543
  "assignPathologies": "Assign or remove coded pathologies for the current visit via the multi-select, reading the current assignments.",
1543
1544
  "readIntakeDigest": "Read the Summary tab: the at-a-glance digest of the patient's questionnaire — why they came, the conditions and medication they carry, the symptoms they report and their daily habits — and, one disclosure below it, the full answer list with its from-patient origin markers. Read-only; clinician-only; no mutation.",
1544
1545
  "resolveMissingAnswers": "Read how many required questionnaire answers are still missing, jump to the first of them — which crosses from the read-only Summary to the Compile tab and opens the unanswered-questions block that holds it — and record the answer there. Writes patient clinical history.",
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared money formatter for the kit's "price in minor units" convention.
3
+ *
4
+ * Every component that renders a price takes the amount as an integer in
5
+ * the smallest currency unit (cents / centesimi) plus an ISO-4217
6
+ * `currencyCode`, and the KIT does the formatting — the consumer never
7
+ * hands the kit a pre-rendered string. Lifted from the file-local
8
+ * duplicate in `contact-profile-card.tsx` when PracticeResults adopted
9
+ * the same convention, so both surfaces render an identical price for
10
+ * identical input.
11
+ *
12
+ * Not to be confused with `formatPaymentAmount` (payment-form): that one
13
+ * is the checkout formatter and falls back to an `en` currency string so
14
+ * a raw integer can never leak into a payment UI. This is the lightweight
15
+ * leaf helper for read-only price captions — it lives in `_shared` so a
16
+ * SERP card can use it without pulling the payment-form module graph in.
17
+ * Both apply the same zero-decimal divisor rule; only the failure
18
+ * behaviour differs.
19
+ */
20
+ export declare function formatPrice(minorUnits: number, currency: string, locale: string): string;
21
+ //# sourceMappingURL=format-price.d.ts.map
@@ -8,6 +8,7 @@ export { computeDueDate, trimesterForWeeks, gestationalMilestones, trimesterHigh
8
8
  export { computeAntenatalSchedule, type AntenatalEvent, type ResolvedAntenatalEvent, type AntenatalScheduleOptions, type AntenatalCategory, type AntenatalStatus, type AntenatalCondition, type ScheduleLocale, type GdmRisk, } from './antenatal-schedule';
9
9
  export { AntenatalScheduleTimeline, type AntenatalScheduleTimelineProps, } from './antenatal-schedule-timeline';
10
10
  export { InsertButton, buildResultText, buildResultHtml, buildResultCardSvg, svgCardToPngDataUri, svgCardToPng, type InsertButtonProps, type InsertVariant, type InsertPayload, type InsertPngResult, type InsertMode, type InsertCardData, type InsertCardField, type InsertCardGauge, type SvgCardToPngOptions, } from './insert-result';
11
+ export { formatPrice } from './format-price';
11
12
  export { normalizeDiacritics } from './normalize-diacritics';
12
13
  export { useDebouncedCallback } from './use-debounced-callback';
13
14
  export { useFocusTrap, type UseFocusTrapOptions } from './use-focus-trap';