@alfadocs/ui-kit 0.33.8 → 0.33.10
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.
- package/dist/_chunks/{booking-h_kBZM6M.js → booking-x4GlW5cb.js} +1106 -965
- package/dist/_chunks/{date-range-picker-D4dgDlLU.js → date-range-picker-D8CHNYQT.js} +72 -74
- package/dist/_chunks/{editable-currency-cell-renderer-B9VRSV_S.js → editable-currency-cell-renderer-CZcVWBPo.js} +2 -2
- package/dist/_chunks/slot-grid-BlHHP9Qy.js +502 -0
- package/dist/_chunks/subDays-CANHP9hz.js +8 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/booking/booking-types.d.ts +48 -0
- package/dist/components/booking/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/dist/_chunks/parseISO-DEpUNwxZ.js +0 -120
- package/dist/_chunks/slot-grid-Dz13dH82.js +0 -387
|
@@ -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
|
package/dist/agent-catalog.json
CHANGED
|
@@ -135,6 +135,22 @@ export interface BookingProps extends Omit<ComponentPropsWithoutRef<'div'>, 'ari
|
|
|
135
135
|
value: BookingValue;
|
|
136
136
|
onChange: (next: BookingValue) => void;
|
|
137
137
|
onSubmit: (payload: BookingSubmitPayload) => void | Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Calendar/date-strip shimmer — set true while `availableDates` is being
|
|
140
|
+
* fetched. When omitted, the kit falls back to `loadingSlots` for the
|
|
141
|
+
* calendar shimmer (the long-standing behaviour). Split from
|
|
142
|
+
* `loadingSlots` in 0.33.9 so consumers using a two-query pattern
|
|
143
|
+
* ("which days have availability" + per-day slot fetch) can shimmer
|
|
144
|
+
* the calendar independently of the slot list — without this split a
|
|
145
|
+
* per-day slot fetch re-shimmers the whole calendar on every date click.
|
|
146
|
+
*/
|
|
147
|
+
loadingDates?: boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Slot-list shimmer — set true while `availableSlots[value.date]` is
|
|
150
|
+
* being fetched. Drives the `<GroupedTimeSlots>` and the calendar-
|
|
151
|
+
* variant time-slot list. When `loadingDates` is omitted, this flag
|
|
152
|
+
* also drives the calendar shimmer (backward-compat fallback).
|
|
153
|
+
*/
|
|
138
154
|
loadingSlots?: boolean;
|
|
139
155
|
submitting?: boolean;
|
|
140
156
|
/**
|
|
@@ -153,6 +169,38 @@ export interface BookingProps extends Omit<ComponentPropsWithoutRef<'div'>, 'ari
|
|
|
153
169
|
* don't need to do that themselves.
|
|
154
170
|
*/
|
|
155
171
|
onStepChange?: (step: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) => void;
|
|
172
|
+
/**
|
|
173
|
+
* Fires when the patient picks a date in the calendar — sugar for
|
|
174
|
+
* consumers using a two-query pattern who need to kick off the
|
|
175
|
+
* per-day slot fetch on date click. Consumers can already detect
|
|
176
|
+
* a date change by diffing `value.date` inside `onChange`; this
|
|
177
|
+
* callback just spares them that diff. Fires AFTER the kit has
|
|
178
|
+
* applied the date change through `onChange` — `value.date` will
|
|
179
|
+
* reflect the new ISO when this fires.
|
|
180
|
+
*/
|
|
181
|
+
onDateSelect?: (iso: string) => void;
|
|
182
|
+
/**
|
|
183
|
+
* @default 'month-calendar'
|
|
184
|
+
* Selects the date + slot picker rendered inside the cascade's date
|
|
185
|
+
* and slot steps. Independent of the layout `variant`:
|
|
186
|
+
*
|
|
187
|
+
* - `'month-calendar'` (default): the 6×7 `<MonthGrid>` followed by
|
|
188
|
+
* the morning/afternoon/evening `<GroupedTimeSlots>`. Two-step flow
|
|
189
|
+
* — patient picks a date, slots reveal underneath.
|
|
190
|
+
*
|
|
191
|
+
* - `'four-day-grid'`: a 4-column day-strip (`<SlotGrid>`) with ±4-day
|
|
192
|
+
* arrow nav and per-day vertical slot tiles. One-step flow —
|
|
193
|
+
* patient picks a slot directly; clicking a slot atomically sets
|
|
194
|
+
* both `value.date` and `value.slotKey`. The cascade's separate
|
|
195
|
+
* "slot" step is suppressed because the slots are inline with the
|
|
196
|
+
* date strip.
|
|
197
|
+
*
|
|
198
|
+
* The data contract is unchanged — `availableDates`, `availableSlots`,
|
|
199
|
+
* `loadingDates`, `loadingSlots`, `onDateSelect` all behave the same
|
|
200
|
+
* way for both styles. Defaults to `'month-calendar'` so existing
|
|
201
|
+
* consumers see no behavioural change.
|
|
202
|
+
*/
|
|
203
|
+
datePickerStyle?: 'month-calendar' | 'four-day-grid';
|
|
156
204
|
/**
|
|
157
205
|
* Surface a submit-failure message inside the form (Alert variant=destructive
|
|
158
206
|
* above the submit button). The consumer owns the state — set it after an
|
|
@@ -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-
|
|
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,
|
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-
|
|
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-
|
|
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-
|
|
129
|
+
import { B as kn, C as On, O as _n, b as yn } from "./_chunks/booking-x4GlW5cb.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-
|
|
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