@alfadocs/ui-kit 0.33.9 → 0.33.11

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,502 @@
1
+ import { jsx as i, jsxs as C } from "react/jsx-runtime";
2
+ import { forwardRef as pe, useId as he, useState as ve, useCallback as S } from "react";
3
+ import { c as b } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as be } from "react-i18next";
5
+ import { B as Y } from "./button-DD_0Xdmr.js";
6
+ import { I as A } from "./icon-button-CKEOrN37.js";
7
+ import { E as xe } from "./empty-state-BLy7tigq.js";
8
+ import { S as B } from "./skeleton-CZbwyJAA.js";
9
+ import { t as W, c as De, m as K, a as Z, i as ye } from "./isSameDay-DUEiAT0G.js";
10
+ function Ne(t, e) {
11
+ const s = () => De(e == null ? void 0 : e.in, NaN), n = Te(t);
12
+ let d;
13
+ if (n.date) {
14
+ const o = Ie(n.date, 2);
15
+ d = ze(o.restDateString, o.year);
16
+ }
17
+ if (!d || isNaN(+d)) return s();
18
+ const l = +d;
19
+ let u = 0, f;
20
+ if (n.time && (u = Le(n.time), isNaN(u)))
21
+ return s();
22
+ if (n.timezone) {
23
+ if (f = Se(n.timezone), isNaN(f)) return s();
24
+ } else {
25
+ const o = new Date(l + u), x = W(0, e == null ? void 0 : e.in);
26
+ return x.setFullYear(
27
+ o.getUTCFullYear(),
28
+ o.getUTCMonth(),
29
+ o.getUTCDate()
30
+ ), x.setHours(
31
+ o.getUTCHours(),
32
+ o.getUTCMinutes(),
33
+ o.getUTCSeconds(),
34
+ o.getUTCMilliseconds()
35
+ ), x;
36
+ }
37
+ return W(l + u + f, e == null ? void 0 : e.in);
38
+ }
39
+ const k = {
40
+ dateTimeDelimiter: /[T ]/,
41
+ timeZoneDelimiter: /[Z ]/i,
42
+ timezone: /([Z+-].*)$/
43
+ }, we = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/, Ce = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/, ke = /^([+-])(\d{2})(?::?(\d{2}))?$/;
44
+ function Te(t) {
45
+ const e = {}, s = t.split(k.dateTimeDelimiter);
46
+ let a;
47
+ if (s.length > 2)
48
+ return e;
49
+ if (/:/.test(s[0]) ? a = s[0] : (e.date = s[0], a = s[1], k.timeZoneDelimiter.test(e.date) && (e.date = t.split(k.timeZoneDelimiter)[0], a = t.substr(
50
+ e.date.length,
51
+ t.length
52
+ ))), a) {
53
+ const n = k.timezone.exec(a);
54
+ n ? (e.time = a.replace(n[1], ""), e.timezone = n[1]) : e.time = a;
55
+ }
56
+ return e;
57
+ }
58
+ function Ie(t, e) {
59
+ const s = new RegExp(
60
+ "^(?:(\\d{4}|[+-]\\d{" + (4 + e) + "})|(\\d{2}|[+-]\\d{" + (2 + e) + "})$)"
61
+ ), a = t.match(s);
62
+ if (!a) return { year: NaN, restDateString: "" };
63
+ const n = a[1] ? parseInt(a[1]) : null, d = a[2] ? parseInt(a[2]) : null;
64
+ return {
65
+ year: d === null ? n : d * 100,
66
+ restDateString: t.slice((a[1] || a[2]).length)
67
+ };
68
+ }
69
+ function ze(t, e) {
70
+ if (e === null) return /* @__PURE__ */ new Date(NaN);
71
+ const s = t.match(we);
72
+ if (!s) return /* @__PURE__ */ new Date(NaN);
73
+ const a = !!s[4], n = D(s[1]), d = D(s[2]) - 1, l = D(s[3]), u = D(s[4]), f = D(s[5]) - 1;
74
+ if (a)
75
+ return je(e, u, f) ? $e(e, u, f) : /* @__PURE__ */ new Date(NaN);
76
+ {
77
+ const o = /* @__PURE__ */ new Date(0);
78
+ return !Ge(e, d, l) || !Ve(e, n) ? /* @__PURE__ */ new Date(NaN) : (o.setUTCFullYear(e, d, Math.max(n, l)), o);
79
+ }
80
+ }
81
+ function D(t) {
82
+ return t ? parseInt(t) : 1;
83
+ }
84
+ function Le(t) {
85
+ const e = t.match(Ce);
86
+ if (!e) return NaN;
87
+ const s = $(e[1]), a = $(e[2]), n = $(e[3]);
88
+ return Ee(s, a, n) ? s * K + a * Z + n * 1e3 : NaN;
89
+ }
90
+ function $(t) {
91
+ return t && parseFloat(t.replace(",", ".")) || 0;
92
+ }
93
+ function Se(t) {
94
+ if (t === "Z") return 0;
95
+ const e = t.match(ke);
96
+ if (!e) return 0;
97
+ const s = e[1] === "+" ? -1 : 1, a = parseInt(e[2]), n = e[3] && parseInt(e[3]) || 0;
98
+ return Fe(a, n) ? s * (a * K + n * Z) : NaN;
99
+ }
100
+ function $e(t, e, s) {
101
+ const a = /* @__PURE__ */ new Date(0);
102
+ a.setUTCFullYear(t, 0, 4);
103
+ const n = a.getUTCDay() || 7, d = (e - 1) * 7 + s + 1 - n;
104
+ return a.setUTCDate(a.getUTCDate() + d), a;
105
+ }
106
+ const Ue = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
107
+ function J(t) {
108
+ return t % 400 === 0 || t % 4 === 0 && t % 100 !== 0;
109
+ }
110
+ function Ge(t, e, s) {
111
+ return e >= 0 && e <= 11 && s >= 1 && s <= (Ue[e] || (J(t) ? 29 : 28));
112
+ }
113
+ function Ve(t, e) {
114
+ return e >= 1 && e <= (J(t) ? 366 : 365);
115
+ }
116
+ function je(t, e, s) {
117
+ return e >= 1 && e <= 53 && s >= 0 && s <= 6;
118
+ }
119
+ function Ee(t, e, s) {
120
+ return t === 24 ? e === 0 && s === 0 : s >= 0 && s < 60 && e >= 0 && e < 60 && t >= 0 && t < 25;
121
+ }
122
+ function Fe(t, e) {
123
+ return e >= 0 && e <= 59;
124
+ }
125
+ const Re = b(
126
+ [
127
+ "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
128
+ "ds:text-[var(--foreground)]",
129
+ "ds:w-full"
130
+ ].join(" "),
131
+ {
132
+ variants: {
133
+ size: {
134
+ sm: "ds:text-[length:var(--font-size-sm)]",
135
+ md: "ds:text-[length:var(--font-size-base)]",
136
+ lg: "ds:text-[length:var(--font-size-lg)]"
137
+ }
138
+ },
139
+ defaultVariants: { size: "md" }
140
+ }
141
+ ), Me = b(
142
+ "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:w-full"
143
+ ), Oe = 12, Ye = b(
144
+ "ds:grid ds:gap-[var(--spacing-sm)] ds:w-full ds:auto-rows-min ds:items-start",
145
+ {
146
+ variants: {
147
+ cols: {
148
+ 1: "ds:grid-cols-1",
149
+ 2: "ds:grid-cols-2",
150
+ 3: "ds:grid-cols-3",
151
+ 4: "ds:grid-cols-4",
152
+ 5: "ds:grid-cols-5",
153
+ 6: "ds:grid-cols-6",
154
+ 7: "ds:grid-cols-7",
155
+ 8: "ds:grid-cols-8",
156
+ 9: "ds:grid-cols-9",
157
+ 10: "ds:grid-cols-10",
158
+ 11: "ds:grid-cols-11",
159
+ 12: "ds:grid-cols-12"
160
+ }
161
+ },
162
+ defaultVariants: { cols: 1 }
163
+ }
164
+ );
165
+ function Ae(t) {
166
+ return Math.max(1, Math.min(t, Oe));
167
+ }
168
+ const H = b(
169
+ [
170
+ "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]",
171
+ "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]",
172
+ "ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]",
173
+ "ds:rounded-[var(--radius-md)]",
174
+ "ds:bg-[var(--card)]",
175
+ "ds:min-w-0"
176
+ ].join(" ")
177
+ ), Be = b(
178
+ [
179
+ "ds:font-[var(--font-weight-semibold)]",
180
+ "ds:text-[var(--foreground)]",
181
+ "ds:text-start",
182
+ "ds:truncate"
183
+ ].join(" "),
184
+ {
185
+ variants: {
186
+ size: {
187
+ sm: "ds:text-[length:var(--font-size-xs)]",
188
+ md: "ds:text-[length:var(--font-size-sm)]",
189
+ lg: "ds:text-[length:var(--font-size-base)]"
190
+ }
191
+ },
192
+ defaultVariants: { size: "md" }
193
+ }
194
+ ), _ = b(
195
+ "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full ds:m-0 ds:p-0 ds:list-none"
196
+ ), We = b(
197
+ [
198
+ "ds:inline-flex ds:items-center ds:justify-center",
199
+ "ds:w-full",
200
+ "ds:rounded-[var(--radius-sm)]",
201
+ "ds:font-[var(--font-weight-medium)]",
202
+ "ds:bg-[var(--secondary)]",
203
+ "ds:shadow-[var(--shadow-sm)]",
204
+ "ds:text-[var(--foreground)]",
205
+ "ds:transition-[background-color,color,box-shadow]",
206
+ "ds:duration-[var(--animation-duration)]",
207
+ "ds:motion-reduce:transition-none",
208
+ "ds:focus-visible:outline-[var(--focus-ring-width)]",
209
+ "ds:focus-visible:outline-solid",
210
+ "ds:focus-visible:outline-[var(--ring)]",
211
+ "ds:focus-visible:outline-offset-[var(--focus-ring-offset)]",
212
+ "ds:min-h-[var(--min-target-size)]",
213
+ "ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:shadow-none",
214
+ "ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed ds:aria-disabled:shadow-none",
215
+ "ds:hover:enabled:shadow-[var(--shadow-md)]",
216
+ "ds:aria-pressed:bg-[var(--primary)] ds:aria-pressed:text-[var(--primary-foreground)]"
217
+ ].join(" "),
218
+ {
219
+ variants: {
220
+ size: {
221
+ sm: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:text-[length:var(--font-size-xs)] ds:h-8",
222
+ md: "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-sm)] ds:h-10",
223
+ lg: "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-base)] ds:h-12"
224
+ }
225
+ },
226
+ defaultVariants: { size: "md" }
227
+ }
228
+ );
229
+ function v(t) {
230
+ return t instanceof Date ? t : Ne(t);
231
+ }
232
+ function rt(t, e) {
233
+ return ye(v(t), v(e));
234
+ }
235
+ function it(t) {
236
+ for (const e of t) {
237
+ const s = e.slots.find((a) => a.available !== !1);
238
+ if (s) return { day: e, slot: s };
239
+ }
240
+ }
241
+ function X(t, e, s) {
242
+ try {
243
+ return new Intl.DateTimeFormat(e, {
244
+ weekday: "short",
245
+ month: "short",
246
+ day: "numeric",
247
+ timeZone: s
248
+ }).format(t);
249
+ } catch {
250
+ return new Intl.DateTimeFormat("en", {
251
+ weekday: "short",
252
+ month: "short",
253
+ day: "numeric"
254
+ }).format(t);
255
+ }
256
+ }
257
+ function q(t, e, s) {
258
+ if (t.label !== void 0) return t.label;
259
+ const a = v(t.start);
260
+ try {
261
+ const n = new Intl.DateTimeFormat(e, {
262
+ hour: "numeric",
263
+ minute: "2-digit",
264
+ timeZone: s
265
+ });
266
+ if (t.end) {
267
+ const d = v(t.end);
268
+ if (typeof n.formatRange == "function")
269
+ try {
270
+ return n.formatRange(a, d);
271
+ } catch {
272
+ }
273
+ return `${n.format(a)} – ${n.format(d)}`;
274
+ }
275
+ return n.format(a);
276
+ } catch {
277
+ return a.toISOString();
278
+ }
279
+ }
280
+ function He(t, e, s, a, n) {
281
+ if (t.ariaLabel !== void 0) return t.ariaLabel;
282
+ const d = q(t, s, a), l = e.label !== void 0 ? e.label : X(v(e.date), s, a);
283
+ return n({ time: d, day: l });
284
+ }
285
+ function _e() {
286
+ return /* @__PURE__ */ i(
287
+ "svg",
288
+ {
289
+ "aria-hidden": "true",
290
+ viewBox: "0 0 24 24",
291
+ fill: "none",
292
+ stroke: "currentColor",
293
+ strokeWidth: "2",
294
+ strokeLinecap: "round",
295
+ strokeLinejoin: "round",
296
+ className: "ds:size-4",
297
+ children: /* @__PURE__ */ i("path", { d: "M15 18l-6-6 6-6" })
298
+ }
299
+ );
300
+ }
301
+ function Ke() {
302
+ return /* @__PURE__ */ i(
303
+ "svg",
304
+ {
305
+ "aria-hidden": "true",
306
+ viewBox: "0 0 24 24",
307
+ fill: "none",
308
+ stroke: "currentColor",
309
+ strokeWidth: "2",
310
+ strokeLinecap: "round",
311
+ strokeLinejoin: "round",
312
+ className: "ds:size-4",
313
+ children: /* @__PURE__ */ i("path", { d: "M9 6l6 6-6 6" })
314
+ }
315
+ );
316
+ }
317
+ const Ze = pe(
318
+ ({
319
+ days: t,
320
+ state: e = "default",
321
+ size: s = "md",
322
+ selectedSlotId: a,
323
+ maxInitialSlotsPerDay: n = 6,
324
+ locale: d,
325
+ timeZone: l,
326
+ hasPrevious: u = !1,
327
+ hasNext: f = !1,
328
+ showNextAvailable: o = !1,
329
+ ariaLabel: x,
330
+ onSlotSelect: y,
331
+ onPreviousDays: Q,
332
+ onNextDays: P,
333
+ onShowMore: N,
334
+ onJumpToNextAvailable: ee,
335
+ className: te,
336
+ ...se
337
+ }, ae) => {
338
+ const { t: m, i18n: ne } = be(), T = d ?? ne.language ?? "en", re = he(), [ie, de] = ve({}), U = e === "loading", G = e === "disabled", h = U || G, oe = e === "empty" || t.length === 0 || t.every((r) => r.slots.length === 0), le = x ?? m("slotGrid.ariaLabel"), I = S(
339
+ (r, c) => {
340
+ h || r.available !== !1 && (y == null || y(r, c));
341
+ },
342
+ [h, y]
343
+ ), ce = S(
344
+ (r, c) => {
345
+ de((g) => ({ ...g, [c]: !0 })), N == null || N(r);
346
+ },
347
+ [N]
348
+ ), ue = S(
349
+ (r, c, g) => {
350
+ (r.key === "Enter" || r.key === " ") && (r.preventDefault(), I(c, g));
351
+ },
352
+ [I]
353
+ ), V = Ae(t.length || 1), j = Ye({ cols: V });
354
+ let w;
355
+ return U ? w = /* @__PURE__ */ i(
356
+ "div",
357
+ {
358
+ className: j,
359
+ "data-state": "loading",
360
+ role: "status",
361
+ "aria-live": "polite",
362
+ "aria-label": m("common.loading"),
363
+ children: Array.from({ length: V }, (r, c) => /* @__PURE__ */ C("div", { className: H(), children: [
364
+ /* @__PURE__ */ i(B, { variant: "text", size: s, width: "60%" }),
365
+ /* @__PURE__ */ i("div", { className: _(), children: Array.from(
366
+ { length: Math.min(n, 4) },
367
+ (g, z) => /* @__PURE__ */ i(
368
+ B,
369
+ {
370
+ variant: "rounded",
371
+ size: s,
372
+ height: "40px"
373
+ },
374
+ `loading-slot-${c}-${z}`
375
+ )
376
+ ) })
377
+ ] }, `loading-col-${c}`))
378
+ }
379
+ ) : oe ? w = /* @__PURE__ */ i("div", { "data-state": "empty", children: /* @__PURE__ */ i(xe, { variant: "no-results", title: m("slotGrid.noSlots") }) }) : w = /* @__PURE__ */ i(
380
+ "div",
381
+ {
382
+ className: j,
383
+ "data-state": G ? "disabled" : "default",
384
+ children: t.map((r, c) => {
385
+ const g = `${v(r.date).toISOString()}-${c}`, z = r.label ?? X(v(r.date), T, l), E = `${re}-day-${c}-header`, F = ie[g] ?? !1 ? r.slots : r.slots.slice(0, n), R = r.slots.length - F.length, M = r.slots.length === 0;
386
+ return (
387
+ // Use a plain <div role="group"> rather than <section> — a
388
+ // <section> with aria-labelledby is a landmark, and nesting many
389
+ // landmarks inside the outer slot-grid landmark fails axe's
390
+ // landmark-unique rule.
391
+ /* @__PURE__ */ C(
392
+ "div",
393
+ {
394
+ role: "group",
395
+ className: H(),
396
+ "aria-labelledby": E,
397
+ "data-empty": M || void 0,
398
+ children: [
399
+ /* @__PURE__ */ i("h3", { id: E, className: Be({ size: s }), children: z }),
400
+ M ? /* @__PURE__ */ i("p", { className: "type-body-sm ds:text-[var(--muted-foreground)] ds:m-0", children: m("slotGrid.noSlots") }) : null,
401
+ /* @__PURE__ */ i("ul", { className: _(), children: F.map((p) => {
402
+ const me = He(
403
+ p,
404
+ r,
405
+ T,
406
+ l,
407
+ ({ time: L, day: ge }) => m("slotGrid.slotLabel", { time: L, day: ge })
408
+ ), fe = a === p.id, O = p.available === !1 || h;
409
+ return /* @__PURE__ */ i("li", { children: /* @__PURE__ */ i(
410
+ "button",
411
+ {
412
+ type: "button",
413
+ className: We({ size: s }),
414
+ "aria-label": me,
415
+ "aria-pressed": fe,
416
+ disabled: O,
417
+ "aria-disabled": O || void 0,
418
+ "data-slot-id": p.id,
419
+ onClick: () => I(p, r),
420
+ onKeyDown: (L) => ue(L, p, r),
421
+ children: q(p, T, l)
422
+ }
423
+ ) }, p.id);
424
+ }) }),
425
+ R > 0 ? /* @__PURE__ */ i(
426
+ Y,
427
+ {
428
+ intent: "ghost",
429
+ size: s === "lg" ? "md" : "sm",
430
+ onClick: () => ce(r, g),
431
+ disabled: h,
432
+ children: m("slotGrid.showMore", { count: R })
433
+ }
434
+ ) : null
435
+ ]
436
+ },
437
+ g
438
+ )
439
+ );
440
+ })
441
+ }
442
+ ), /* @__PURE__ */ C(
443
+ "div",
444
+ {
445
+ ref: ae,
446
+ role: "region",
447
+ "aria-label": le,
448
+ className: Re({ size: s, className: te }),
449
+ "data-component": "slot-grid",
450
+ "data-state": e,
451
+ ...se,
452
+ children: [
453
+ /* @__PURE__ */ C("div", { className: Me(), children: [
454
+ /* @__PURE__ */ i(
455
+ A,
456
+ {
457
+ icon: /* @__PURE__ */ i(_e, {}),
458
+ "aria-label": m("slotGrid.previousDays"),
459
+ size: s === "lg" ? "md" : "sm",
460
+ intent: "ghost",
461
+ flipIconInRtl: !0,
462
+ disabled: !u || h,
463
+ onClick: Q
464
+ }
465
+ ),
466
+ o ? /* @__PURE__ */ i(
467
+ Y,
468
+ {
469
+ intent: "secondary",
470
+ size: s === "lg" ? "md" : "sm",
471
+ disabled: h,
472
+ onClick: ee,
473
+ children: m("slotGrid.nextAvailable")
474
+ }
475
+ ) : /* @__PURE__ */ i("span", { "aria-hidden": "true" }),
476
+ /* @__PURE__ */ i(
477
+ A,
478
+ {
479
+ icon: /* @__PURE__ */ i(Ke, {}),
480
+ "aria-label": m("slotGrid.nextDays"),
481
+ size: s === "lg" ? "md" : "sm",
482
+ intent: "ghost",
483
+ flipIconInRtl: !0,
484
+ disabled: !f || h,
485
+ onClick: P
486
+ }
487
+ )
488
+ ] }),
489
+ w
490
+ ]
491
+ }
492
+ );
493
+ }
494
+ );
495
+ Ze.displayName = "SlotGrid";
496
+ export {
497
+ Ze as S,
498
+ it as f,
499
+ rt as i,
500
+ Ne as p
501
+ };
502
+ //# sourceMappingURL=slot-grid-BlHHP9Qy.js.map
@@ -0,0 +1,8 @@
1
+ import { a as o } from "./react-day-picker-DsjfS7uI.js";
2
+ function n(a, s, r) {
3
+ return o(a, -s, r);
4
+ }
5
+ export {
6
+ n as s
7
+ };
8
+ //# sourceMappingURL=subDays-CANHP9hz.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.33.9",
3
+ "packageVersion": "0.33.11",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -179,6 +179,43 @@ export interface BookingProps extends Omit<ComponentPropsWithoutRef<'div'>, 'ari
179
179
  * reflect the new ISO when this fires.
180
180
  */
181
181
  onDateSelect?: (iso: string) => void;
182
+ /**
183
+ * Fires when the visible 4-day window starts or shifts. Used by
184
+ * two-query consumers to lazy-fetch `dailySlots/{date}` for the
185
+ * newly-visible days. Receives the inclusive ISO date strings of
186
+ * the first and last visible day in the window. Fires on mount
187
+ * (with the resolved initial window) and on every prev/next
188
+ * arrow click, internal jump-to-next-available action, and
189
+ * automatic re-sync triggered by `availableDates` arriving.
190
+ *
191
+ * Only fires when `datePickerStyle='four-day-grid'` — the
192
+ * month-calendar picker has no "window" concept; consumers using
193
+ * that style fetch availability per visible month and don't need
194
+ * this signal.
195
+ */
196
+ onWindowChange?: (startIso: string, endIso: string) => void;
197
+ /**
198
+ * @default 'month-calendar'
199
+ * Selects the date + slot picker rendered inside the cascade's date
200
+ * and slot steps. Independent of the layout `variant`:
201
+ *
202
+ * - `'month-calendar'` (default): the 6×7 `<MonthGrid>` followed by
203
+ * the morning/afternoon/evening `<GroupedTimeSlots>`. Two-step flow
204
+ * — patient picks a date, slots reveal underneath.
205
+ *
206
+ * - `'four-day-grid'`: a 4-column day-strip (`<SlotGrid>`) with ±4-day
207
+ * arrow nav and per-day vertical slot tiles. One-step flow —
208
+ * patient picks a slot directly; clicking a slot atomically sets
209
+ * both `value.date` and `value.slotKey`. The cascade's separate
210
+ * "slot" step is suppressed because the slots are inline with the
211
+ * date strip.
212
+ *
213
+ * The data contract is unchanged — `availableDates`, `availableSlots`,
214
+ * `loadingDates`, `loadingSlots`, `onDateSelect` all behave the same
215
+ * way for both styles. Defaults to `'month-calendar'` so existing
216
+ * consumers see no behavioural change.
217
+ */
218
+ datePickerStyle?: 'month-calendar' | 'four-day-grid';
182
219
  /**
183
220
  * Surface a submit-failure message inside the form (Alert variant=destructive
184
221
  * above the submit button). The consumer owns the state — set it after an
@@ -1,4 +1,4 @@
1
- import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-CbdbYvWp.js";
1
+ import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-Db4BQ9eH.js";
2
2
  export {
3
3
  A as Booking,
4
4
  R as CONFIRMATION_CHANNEL_ORDER,
@@ -1,4 +1,4 @@
1
- import { A as l, B as r, C as t, a as s, D as n, b as d, c as i, d as o, E as C, e as R, I as F, L as g, N as T, f as b, S as u, g as c, h as D, T as m, i as p, j as x, k as f, l as y, m as E, n as S, o as h, U as A, p as L, q as N, u as k } from "../../_chunks/editable-currency-cell-renderer-B9VRSV_S.js";
1
+ import { A as l, B as r, C as t, a as s, D as n, b as d, c as i, d as o, E as C, e as R, I as F, L as g, N as T, f as b, S as u, g as c, h as D, T as m, i as p, j as x, k as f, l as y, m as E, n as S, o as h, U as A, p as L, q as N, u as k } from "../../_chunks/editable-currency-cell-renderer-CZcVWBPo.js";
2
2
  export {
3
3
  l as ActionsCellRenderer,
4
4
  r as BalanceCellRenderer,
@@ -1,4 +1,4 @@
1
- import { D as r, d as t } from "../../_chunks/date-range-picker-D4dgDlLU.js";
1
+ import { D as r, d as t } from "../../_chunks/date-range-picker-D8CHNYQT.js";
2
2
  export {
3
3
  r as DateRangePicker,
4
4
  t as dateRangePickerAgent
@@ -1,4 +1,4 @@
1
- import { S as s, f as e, i as r } from "../../_chunks/slot-grid-Dz13dH82.js";
1
+ import { S as s, f as e, i as r } from "../../_chunks/slot-grid-BlHHP9Qy.js";
2
2
  export {
3
3
  s as SlotGrid,
4
4
  e as findFirstAvailable,
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import { A as j, B as z, C as q } from "./_chunks/color-picker-9tL7pz5y.js";
19
19
  import { C as J, c as X, a as Z, b as $, d as aa, e as ea } from "./_chunks/combobox-BC-DFx8G.js";
20
20
  import { C as oa, c as ta } from "./_chunks/copy-field-CCq7j6Zc.js";
21
21
  import { D as ia, d as na } from "./_chunks/date-picker-B94HAV4A.js";
22
- import { D as ma, d as la } from "./_chunks/date-range-picker-D4dgDlLU.js";
22
+ import { D as ma, d as la } from "./_chunks/date-range-picker-D8CHNYQT.js";
23
23
  import { D as da, d as ga } from "./_chunks/date-time-picker-D1GEzf8p.js";
24
24
  import { E as xa, e as Aa } from "./_chunks/email-input-lQivsFrw.js";
25
25
  import { F as Sa, f as Ca } from "./_chunks/file-upload-CdozCPct.js";
@@ -48,7 +48,7 @@ import { B as Me } from "./_chunks/benefit-card-Xnxj4Gmo.js";
48
48
  import { C as we } from "./_chunks/card-DPmk26CL.js";
49
49
  import { C as ve, c as He } from "./_chunks/carousel.agent-DrX96W-1.js";
50
50
  import { C as Ge } from "./_chunks/contact-card-Cf8Ktyt3.js";
51
- import { A as Ke, B as Ye, C as je, a as ze, D as qe, b as Qe, c as Je, d as Xe, E as Ze, e as $e, I as ar, L as er, N as rr, f as or, S as tr, g as sr, h as ir, T as nr, i as pr, j as mr, k as lr, l as fr, m as dr, n as gr, o as cr, U as xr, p as Ar, q as ur, u as Sr } from "./_chunks/editable-currency-cell-renderer-B9VRSV_S.js";
51
+ import { A as Ke, B as Ye, C as je, a as ze, D as qe, b as Qe, c as Je, d as Xe, E as Ze, e as $e, I as ar, L as er, N as rr, f as or, S as tr, g as sr, h as ir, T as nr, i as pr, j as mr, k as lr, l as fr, m as dr, n as gr, o as cr, U as xr, p as Ar, q as ur, u as Sr } from "./_chunks/editable-currency-cell-renderer-CZcVWBPo.js";
52
52
  import { D as Tr } from "./_chunks/description-list-BEbK2g93.js";
53
53
  import { E as Pr } from "./_chunks/empty-state-BLy7tigq.js";
54
54
  import { F as Ir, a as hr, h as Fr } from "./_chunks/flag-DZ6V7-hU.js";
@@ -126,7 +126,7 @@ import { S as Tn, a as bn } from "./_chunks/suggestion-chip-C4kxWUIs.js";
126
126
  import { s as Rn } from "./_chunks/suggestion-chip.agent-6sNWFj7m.js";
127
127
  import { T as hn, t as Fn } from "./_chunks/transcript-panel-DyhTpAP7.js";
128
128
  import { T as Ln } from "./_chunks/typing-indicator-DHeVN4ob.js";
129
- import { B as kn, C as On, O as _n, b as yn } from "./_chunks/booking-CbdbYvWp.js";
129
+ import { B as kn, C as On, O as _n, b as yn } from "./_chunks/booking-Db4BQ9eH.js";
130
130
  import { C as Mn, c as Dn, r as wn } from "./_chunks/calendar-YHFknAGv.js";
131
131
  import { O as vn, o as Hn } from "./_chunks/operator-hero-7LiiP7zi.js";
132
132
  import { P as Gn, p as Un } from "./_chunks/patient-search-CBq62kmL.js";
@@ -137,7 +137,7 @@ import { P as np, p as pp } from "./_chunks/pdf-viewer-DvtEHcEP.js";
137
137
  import { R as lp, r as fp } from "./_chunks/reviews-panel-Dow8Dzoa.js";
138
138
  import { R as gp, e as cp, r as xp, t as Ap, a as up, w as Sp } from "./_chunks/rich-text-editor-CHmr9Bz8.js";
139
139
  import { S as Tp, s as bp } from "./_chunks/signature-capture-C-fF71xI.js";
140
- import { S as Rp, f as Ip, i as hp } from "./_chunks/slot-grid-Dz13dH82.js";
140
+ import { S as Rp, f as Ip, i as hp } from "./_chunks/slot-grid-BlHHP9Qy.js";
141
141
  import { C as Ep, a as Lp, b as Np, F as kp, c as Op, d as _p, P as yp, e as Bp, T as Mp, f as Dp, g as wp, h as Vp, l as vp, i as Hp, t as Wp, r as Gp } from "./_chunks/tooth-scheme-CxlsLjfN.js";
142
142
  import { T as Kp } from "./_chunks/transaction-chip-B8ujzowA.js";
143
143
  import { W as jp } from "./_chunks/whatsapp-button-DUjlWGKf.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit",
3
- "version": "0.33.9",
3
+ "version": "0.33.11",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe.",
6
6
  "license": "BUSL-1.1",