@alfadocs/ui-kit 1.81.0 → 1.83.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 (85) hide show
  1. package/dist/_chunks/{anamnesis-summary-rows-BYtpwCyn.js → anamnesis-summary-rows-6gMuu0ZK.js} +2 -2
  2. package/dist/_chunks/{balance-badge-cell-NoEPeFdj.js → balance-badge-cell-BHXJS8Ga.js} +2 -2
  3. package/dist/_chunks/booking-dsgiuhKg.js +4304 -0
  4. package/dist/_chunks/{link-cell-renderer-Dwp_DCYT.js → link-cell-renderer-C0ynDik7.js} +2 -2
  5. package/dist/_chunks/login-dev-card-DYwbL5sD.js +385 -0
  6. package/dist/_chunks/{multi-select-IOVnOGlP.js → multi-select-i5MFRpXg.js} +153 -146
  7. package/dist/_chunks/{otp-input-BgEZi0py.js → otp-input-gV1446Dw.js} +70 -70
  8. package/dist/_chunks/{registration-form-e9oYscB7.js → registration-form-DmP3YUfp.js} +2 -2
  9. package/dist/agent-catalog.json +5 -5
  10. package/dist/agent-i18n/en.json +2 -2
  11. package/dist/components/booking/booking-types.d.ts +35 -2
  12. package/dist/components/booking/code-step.d.ts +4 -2
  13. package/dist/components/booking/details-form.d.ts +2 -0
  14. package/dist/components/booking/handover.d.ts +12 -0
  15. package/dist/components/booking/index.js +1 -1
  16. package/dist/components/booking/reserved.d.ts +24 -0
  17. package/dist/components/booking/use-booking-payment.d.ts +3 -1
  18. package/dist/components/data-table/index.js +1 -1
  19. package/dist/components/multi-select/index.js +1 -1
  20. package/dist/components/otp-input/index.js +1 -1
  21. package/dist/components/otp-input/otp-input.d.ts +1 -1
  22. package/dist/components/patient-table/index.js +1 -1
  23. package/dist/i18n/locales/ar.d.ts +8 -0
  24. package/dist/i18n/locales/ar.js +8 -0
  25. package/dist/i18n/locales/de.d.ts +8 -0
  26. package/dist/i18n/locales/de.js +8 -0
  27. package/dist/i18n/locales/el.d.ts +8 -0
  28. package/dist/i18n/locales/el.js +8 -0
  29. package/dist/i18n/locales/en.d.ts +8 -0
  30. package/dist/i18n/locales/en.js +8 -0
  31. package/dist/i18n/locales/es.d.ts +8 -0
  32. package/dist/i18n/locales/es.js +8 -0
  33. package/dist/i18n/locales/fr.d.ts +8 -0
  34. package/dist/i18n/locales/fr.js +8 -0
  35. package/dist/i18n/locales/hi.d.ts +8 -0
  36. package/dist/i18n/locales/hi.js +8 -0
  37. package/dist/i18n/locales/it.d.ts +8 -0
  38. package/dist/i18n/locales/it.js +8 -0
  39. package/dist/i18n/locales/ja.d.ts +8 -0
  40. package/dist/i18n/locales/ja.js +8 -0
  41. package/dist/i18n/locales/nl.d.ts +8 -0
  42. package/dist/i18n/locales/nl.js +8 -0
  43. package/dist/i18n/locales/pl.d.ts +8 -0
  44. package/dist/i18n/locales/pl.js +8 -0
  45. package/dist/i18n/locales/pt.d.ts +8 -0
  46. package/dist/i18n/locales/pt.js +8 -0
  47. package/dist/i18n/locales/ro.d.ts +8 -0
  48. package/dist/i18n/locales/ro.js +8 -0
  49. package/dist/i18n/locales/ru.d.ts +8 -0
  50. package/dist/i18n/locales/ru.js +8 -0
  51. package/dist/i18n/locales/sq.d.ts +8 -0
  52. package/dist/i18n/locales/sq.js +8 -0
  53. package/dist/i18n/locales/sv.d.ts +8 -0
  54. package/dist/i18n/locales/sv.js +8 -0
  55. package/dist/i18n/locales/tr.d.ts +8 -0
  56. package/dist/i18n/locales/tr.js +8 -0
  57. package/dist/i18n/locales/zh.d.ts +8 -0
  58. package/dist/i18n/locales/zh.js +8 -0
  59. package/dist/index.js +8 -8
  60. package/dist/locales/ar.json +8 -0
  61. package/dist/locales/de.json +8 -0
  62. package/dist/locales/el.json +8 -0
  63. package/dist/locales/en.json +8 -0
  64. package/dist/locales/es.json +8 -0
  65. package/dist/locales/fr.json +8 -0
  66. package/dist/locales/hi.json +8 -0
  67. package/dist/locales/it.json +8 -0
  68. package/dist/locales/ja.json +8 -0
  69. package/dist/locales/nl.json +8 -0
  70. package/dist/locales/pl.json +8 -0
  71. package/dist/locales/pt.json +8 -0
  72. package/dist/locales/ro.json +8 -0
  73. package/dist/locales/ru.json +8 -0
  74. package/dist/locales/sq.json +8 -0
  75. package/dist/locales/sv.json +8 -0
  76. package/dist/locales/tr.json +8 -0
  77. package/dist/locales/zh.json +8 -0
  78. package/dist/patterns/anamnesis/index.js +1 -1
  79. package/dist/patterns/login-form/index.js +1 -1
  80. package/dist/patterns/login-form/login-form.d.ts +7 -0
  81. package/dist/patterns/registration-form/index.js +1 -1
  82. package/dist/tokens.css +1 -1
  83. package/package.json +1 -1
  84. package/dist/_chunks/booking-CxrB0e6d.js +0 -4079
  85. package/dist/_chunks/login-dev-card-CvLHj-_N.js +0 -353
@@ -5,7 +5,7 @@ import { D as te } from "./date-range-picker-B_j4VQlV.js";
5
5
  import { useTranslation as M } from "react-i18next";
6
6
  import { C as le } from "./checkbox-BjDv-r3o.js";
7
7
  import { B as j } from "./button-DohK_Ak_.js";
8
- import { M as se } from "./multi-select-IOVnOGlP.js";
8
+ import { M as se } from "./multi-select-i5MFRpXg.js";
9
9
  import { S as ie } from "./scroll-area-CY5SLYNw.js";
10
10
  import { A as ne } from "./autocomplete-CnB1mHGc.js";
11
11
  import { N as D } from "./number-input-CVwI1ltI.js";
@@ -864,4 +864,4 @@ export {
864
864
  Ke as g,
865
865
  k as h
866
866
  };
867
- //# sourceMappingURL=link-cell-renderer-Dwp_DCYT.js.map
867
+ //# sourceMappingURL=link-cell-renderer-C0ynDik7.js.map
@@ -0,0 +1,385 @@
1
+ import { jsxs as f, jsx as s } from "react/jsx-runtime";
2
+ import { forwardRef as ge, useId as k, useState as l, useEffect as me, useRef as ce } from "react";
3
+ import { useTranslation as ze } from "react-i18next";
4
+ import { c as B } from "./index-D2ZczOXr.js";
5
+ import { E as Pe, i as Te } from "./email-input-C7THAwh2.js";
6
+ import { B as he } from "./button-DohK_Ak_.js";
7
+ import { C as je } from "./checkbox-BjDv-r3o.js";
8
+ import { C as b } from "./card-BA4Ig_kn.js";
9
+ import { T as De } from "./text-input-CaG9ApoE.js";
10
+ import { E as He } from "./error-summary-mGxIyDAY.js";
11
+ import { F as ue } from "./form-field-CyHfOVKF.js";
12
+ import { P as Oe } from "./password-input-BokZ_rnT.js";
13
+ import { i as $e } from "./is-development-CLUAnsU7.js";
14
+ import { i as ve } from "./safe-href-5dbsfbQn.js";
15
+ import { u as _e, w as Ge } from "./use-state-backed-input-DhRQo6gM.js";
16
+ import { u as We, a as Je, A as Ke, b as Qe, d as _, E as Ue, c as Xe } from "./auth-form-parts-B3GWChvG.js";
17
+ import { u as Ye, b as Ze, a as Ve } from "./use-registration-submit-CLGHxwoT.js";
18
+ import { M as es } from "./matrix-rain-sDOUUwZp.js";
19
+ import { a as ss } from "./error-page-illustration-BdJLuMdV.js";
20
+ const W = ["email", "password"], rs = B(
21
+ "ds:flex ds:w-full ds:flex-col ds:items-center ds:justify-center ds:gap-[var(--spacing-lg)] ds:text-start ds:text-[var(--foreground)] ds:lg:flex-row ds:lg:items-stretch"
22
+ ), fe = B("ds:w-full ds:max-w-[400px]"), as = B(
23
+ "ds:flex ds:flex-wrap ds:justify-center ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-lg)]"
24
+ ), G = (a) => a && ve(a) ? a : void 0, ts = (a) => Object.values(a).some(Boolean), os = (a) => W.some((m) => !!a[m]), pe = (a) => W.find((m) => a[m]) ?? (a.form ? "password" : void 0), ns = ge(
25
+ ({
26
+ title: a,
27
+ description: m,
28
+ headingLevel: w = 1,
29
+ showLogo: L = !0,
30
+ logoMotion: R = "assemble",
31
+ children: x,
32
+ initialValues: t,
33
+ allowUsername: F = !1,
34
+ errors: u,
35
+ forgotPasswordHref: d,
36
+ showRememberMe: A = !1,
37
+ registerDoctorHref: be,
38
+ registerPatientHref: we,
39
+ submitLabel: xe,
40
+ submitting: Fe = !1,
41
+ onSubmit: N,
42
+ fieldNames: o,
43
+ action: ye,
44
+ hiddenFields: Me,
45
+ devCard: J,
46
+ className: Ee,
47
+ ...Ce
48
+ }, Ie) => {
49
+ const { t: n } = ze("ui"), K = k(), S = k(), ke = k(), q = (e) => `${ke}-${e}`, i = o !== void 0, [p, g] = l(() => (t == null ? void 0 : t.email) ?? ""), [y, M] = l(""), [Q, Be] = l(
50
+ () => (t == null ? void 0 : t.rememberMe) === !0
51
+ ), z = A || !!(o != null && o.rememberMe), U = i && z && !(o != null && o.rememberMe);
52
+ me(() => {
53
+ U && $e() && console.warn(
54
+ "LoginForm: the remember-me box is shown but `fieldNames.rememberMe` is not set, so the server will not read it."
55
+ );
56
+ }, [U]);
57
+ const [Le, X] = l(() => ({ email: !!(t != null && t.email) })), [Re, Y] = l(!1), [Z, V] = l(
58
+ () => u ?? {}
59
+ ), P = (e) => X(
60
+ (r) => r[e] ? r : { ...r, [e]: !0 }
61
+ ), T = (e) => V(
62
+ (r) => r[e] ? { ...r, [e]: void 0 } : r
63
+ ), E = ce(null), j = ce(null), C = _e(p, E), ee = () => {
64
+ M(""), X((e) => ({ ...e, password: !1 }));
65
+ }, se = () => {
66
+ var v, le;
67
+ const e = ((v = E.current) == null ? void 0 : v.value) ?? p;
68
+ e.trim() !== e && Ge(E.current, e.trim());
69
+ const r = {
70
+ email: e.trim(),
71
+ password: ((le = j.current) == null ? void 0 : le.value) ?? y,
72
+ rememberMe: z && Q
73
+ };
74
+ return r.email !== p && g(r.email), r.password !== y && M(r.password), r;
75
+ }, re = (e) => {
76
+ const r = e.trim();
77
+ return r === "" || (!F || /[@\uFF20\uFE6B]/.test(r)) && !Te(r);
78
+ }, ae = {
79
+ email: re(p),
80
+ password: y === ""
81
+ }, te = (e) => Re || Le[e] === !0, Ae = {
82
+ email: te("email") && ae.email ? p.trim() === "" ? n("loginForm.emailRequired") : n("inputs.email.invalid") : void 0,
83
+ password: te("password") && ae.password ? n("loginForm.passwordRequired") : void 0
84
+ }, I = (e) => Z[e] ?? Ae[e], [oe] = l(
85
+ () => os(u ?? {})
86
+ ), c = Ye(
87
+ W,
88
+ I,
89
+ oe
90
+ ), [D, ne] = l(() => {
91
+ const e = oe ? void 0 : pe(u ?? {});
92
+ return e ? { target: e } : null;
93
+ });
94
+ me(() => {
95
+ var e;
96
+ D && ((e = (D.target === "email" ? E : j).current) == null || e.focus());
97
+ }, [D]);
98
+ const de = Ze({
99
+ errors: u,
100
+ submitting: Fe,
101
+ native: i,
102
+ captcha: !1,
103
+ firstProblem: () => {
104
+ const e = se();
105
+ return re(e.email) ? "email" : e.password === "" ? "password" : void 0;
106
+ },
107
+ onRefused: (e) => {
108
+ Y(!0), c.open(() => ne({ target: e }));
109
+ },
110
+ // Only a React host gets here: a native post is the browser's own.
111
+ deliver: () => N == null ? void 0 : N(se()),
112
+ onAnswer: (e) => {
113
+ const r = e;
114
+ V(r), ts(r) && (ee(), Y(!1), c.open(() => {
115
+ const v = pe(r);
116
+ v && ne({ target: v });
117
+ }));
118
+ },
119
+ // The page came back from the browser's cache as it was left: the
120
+ // password must not come back with it.
121
+ onRestore: ee
122
+ }), { busy: H } = de, Ne = We("LoginForm", i, ye), ie = G(d), O = G(be), $ = G(we), Se = Je(
123
+ "LoginForm",
124
+ i,
125
+ o,
126
+ Me
127
+ ), h = Z.form, qe = Ve(
128
+ h,
129
+ c.listed.length > 0
130
+ );
131
+ return /* @__PURE__ */ f(
132
+ "div",
133
+ {
134
+ ref: Ie,
135
+ ...Ce,
136
+ "data-component": "login-form",
137
+ className: rs({ className: Ee }),
138
+ children: [
139
+ /* @__PURE__ */ s("div", { className: fe(), children: /* @__PURE__ */ s(b, { variant: "elevated", className: "ds:h-full", children: /* @__PURE__ */ f(b.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", children: [
140
+ /* @__PURE__ */ s(
141
+ Ke,
142
+ {
143
+ id: K,
144
+ title: a ?? n("loginForm.title"),
145
+ description: m,
146
+ level: w,
147
+ showLogo: L,
148
+ logoMotion: R
149
+ }
150
+ ),
151
+ x ? /* @__PURE__ */ s(
152
+ "div",
153
+ {
154
+ "data-slot": "host-content",
155
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]",
156
+ children: x
157
+ }
158
+ ) : null,
159
+ /* @__PURE__ */ f(
160
+ "form",
161
+ {
162
+ noValidate: !0,
163
+ method: "post",
164
+ action: Ne,
165
+ "aria-labelledby": K,
166
+ "aria-busy": H || void 0,
167
+ onSubmit: de.handleSubmit,
168
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]",
169
+ children: [
170
+ /* @__PURE__ */ s(
171
+ He,
172
+ {
173
+ ref: c.ref,
174
+ headingLevel: w + 1,
175
+ "aria-describedby": h ? S : void 0,
176
+ errors: c.listed.map((e) => ({
177
+ field: e,
178
+ message: I(e) ?? "",
179
+ targetId: q(e)
180
+ }))
181
+ }
182
+ ),
183
+ h && /* @__PURE__ */ s(
184
+ Qe,
185
+ {
186
+ id: S,
187
+ announce: qe,
188
+ children: h
189
+ }
190
+ ),
191
+ /* @__PURE__ */ s(
192
+ ue,
193
+ {
194
+ id: q("email"),
195
+ label: n("loginForm.email"),
196
+ required: !0,
197
+ error: I("email"),
198
+ announceError: !c.lists("email"),
199
+ "data-field": "email",
200
+ children: F ? (
201
+ // A plain text field: a type="email" field holding a
202
+ // username is "invalid" to a screen reader, whatever
203
+ // `noValidate` says.
204
+ /* @__PURE__ */ s(
205
+ De,
206
+ {
207
+ ref: C.ref,
208
+ name: i ? o.email : "email",
209
+ type: "text",
210
+ inputMode: "email",
211
+ autoComplete: "username",
212
+ autoCapitalize: "none",
213
+ autoCorrect: "off",
214
+ spellCheck: !1,
215
+ onChange: C.quiet((e) => {
216
+ g(e.target.value), T("email");
217
+ }),
218
+ onBlur: (e) => {
219
+ const r = e.target.value.trim();
220
+ g(r), r !== "" && P("email");
221
+ }
222
+ }
223
+ )
224
+ ) : /* @__PURE__ */ s(
225
+ Pe,
226
+ {
227
+ ref: C.ref,
228
+ name: i ? o.email : "email",
229
+ autoComplete: "username",
230
+ disableBuiltInValidation: !0,
231
+ onChange: C.quiet((e) => {
232
+ g(e.target.value), T("email");
233
+ }),
234
+ onBlur: (e) => {
235
+ const r = e.target.value.trim();
236
+ g(r), r !== "" && P("email");
237
+ }
238
+ }
239
+ )
240
+ }
241
+ ),
242
+ /* @__PURE__ */ s(
243
+ ue,
244
+ {
245
+ id: q("password"),
246
+ label: n("loginForm.password"),
247
+ required: !0,
248
+ error: I("password"),
249
+ announceError: !c.lists("password"),
250
+ "data-field": "password",
251
+ children: /* @__PURE__ */ s(
252
+ Oe,
253
+ {
254
+ ref: j,
255
+ name: i ? o.password : "password",
256
+ autoComplete: "current-password",
257
+ "aria-describedby": h ? S : void 0,
258
+ value: y,
259
+ onChange: (e) => {
260
+ M(e.target.value), T("password");
261
+ },
262
+ onBlur: (e) => {
263
+ M(e.target.value), e.target.value !== "" && P("password");
264
+ }
265
+ }
266
+ )
267
+ }
268
+ ),
269
+ ie && /* @__PURE__ */ s(
270
+ _,
271
+ {
272
+ href: ie,
273
+ action: "forgot-password",
274
+ align: "end",
275
+ children: n("loginForm.forgot")
276
+ }
277
+ ),
278
+ z && /* @__PURE__ */ s("div", { "data-field": "remember-me", children: /* @__PURE__ */ s(
279
+ je,
280
+ {
281
+ name: i && o.rememberMe || "rememberMe",
282
+ checked: Q,
283
+ onCheckedChange: (e) => Be(e === !0),
284
+ label: n("loginForm.rememberMe")
285
+ }
286
+ ) }),
287
+ /* @__PURE__ */ s(Ue, { fields: Se }),
288
+ /* @__PURE__ */ s(
289
+ he,
290
+ {
291
+ type: "submit",
292
+ intent: "primary",
293
+ size: "lg",
294
+ loading: H,
295
+ className: "ds:w-full",
296
+ "data-action": "submit",
297
+ children: xe ?? n("loginForm.submit")
298
+ }
299
+ )
300
+ ]
301
+ }
302
+ ),
303
+ (O || $) && /* @__PURE__ */ f(
304
+ "div",
305
+ {
306
+ "data-slot": "register-links",
307
+ className: as(),
308
+ children: [
309
+ O && /* @__PURE__ */ s(_, { href: O, action: "register-doctor", children: n("signedOutHeader.registerDoctor") }),
310
+ $ && /* @__PURE__ */ s(_, { href: $, action: "register-patient", children: n("signedOutHeader.registerPatient") })
311
+ ]
312
+ }
313
+ ),
314
+ /* @__PURE__ */ s(Xe, { busy: H })
315
+ ] }) }) }),
316
+ J ? /* @__PURE__ */ s("div", { className: fe(), children: J }) : null
317
+ ]
318
+ }
319
+ );
320
+ }
321
+ );
322
+ ns.displayName = "LoginForm";
323
+ const ds = B("ds:h-full ds:w-full"), is = ge(
324
+ ({ title: a, options: m, headingLevel: w = 2, className: L, ...R }, x) => {
325
+ const t = k(), F = `h${w}`, u = m.filter((d) => ve(d.href));
326
+ return /* @__PURE__ */ s(
327
+ "div",
328
+ {
329
+ ref: x,
330
+ ...R,
331
+ "data-component": "login-dev-card",
332
+ className: ds({ className: L }),
333
+ children: /* @__PURE__ */ f(
334
+ b,
335
+ {
336
+ variant: "elevated",
337
+ "aria-labelledby": t,
338
+ className: "ds:relative ds:isolate ds:flex ds:h-full ds:flex-col ds:overflow-hidden",
339
+ children: [
340
+ /* @__PURE__ */ s("div", { className: "ds:absolute ds:inset-0 ds:z-0 ds:[display:var(--accessible-off,block)]", children: /* @__PURE__ */ s(
341
+ es,
342
+ {
343
+ glyphs: "hex",
344
+ decay: "fast",
345
+ mask: "center",
346
+ maskRadius: "xl",
347
+ className: "ds:size-full"
348
+ }
349
+ ) }),
350
+ /* @__PURE__ */ s(b.Header, { className: "ds:relative ds:z-[1]", children: /* @__PURE__ */ f("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-sm)] ds:text-center", children: [
351
+ /* @__PURE__ */ s("div", { className: "ds:[&>div]:w-24", children: /* @__PURE__ */ s(ss, { mood: "melt" }) }),
352
+ /* @__PURE__ */ s(
353
+ F,
354
+ {
355
+ id: t,
356
+ className: "type-title-card ds:text-[var(--foreground)]",
357
+ children: a
358
+ }
359
+ )
360
+ ] }) }),
361
+ /* @__PURE__ */ s(b.Body, { className: "ds:relative ds:z-[1] ds:flex ds:flex-1 ds:flex-col ds:justify-center", children: /* @__PURE__ */ s("div", { className: "ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: u.map((d, A) => /* @__PURE__ */ s(
362
+ he,
363
+ {
364
+ asChild: !0,
365
+ intent: "primary",
366
+ startIcon: d.icon,
367
+ className: "ds:min-h-[var(--min-target-size)] ds:w-full",
368
+ children: /* @__PURE__ */ s("a", { href: d.href, "data-action": "dev-login", children: d.label })
369
+ },
370
+ `${A}:${d.href}`
371
+ )) }) })
372
+ ]
373
+ }
374
+ )
375
+ }
376
+ );
377
+ }
378
+ );
379
+ is.displayName = "LoginDevCard";
380
+ export {
381
+ W as L,
382
+ is as a,
383
+ ns as b
384
+ };
385
+ //# sourceMappingURL=login-dev-card-DYwbL5sD.js.map