@alfadocs/ui-kit-debug 0.25.2 → 0.30.1
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-Bw9eOU4k.js +2292 -0
- package/dist/_chunks/booking-Bw9eOU4k.js.map +1 -0
- package/dist/_chunks/{calendar-9eOXumpH.js → calendar-WWNx448i.js} +10 -9
- package/dist/_chunks/{calendar-9eOXumpH.js.map → calendar-WWNx448i.js.map} +1 -1
- package/dist/_chunks/checkbox-mwbrPZDY.js.map +1 -1
- package/dist/_chunks/{contact-card-CeEfEAxh.js → contact-card-DYbp--s-.js} +2 -2
- package/dist/_chunks/{contact-card-CeEfEAxh.js.map → contact-card-DYbp--s-.js.map} +1 -1
- package/dist/_chunks/{header-B8V_sNPy.js → header-CkMb1TZS.js} +23 -23
- package/dist/_chunks/header-CkMb1TZS.js.map +1 -0
- package/dist/_chunks/heart-pulse-CvuyFKHB.js +21 -0
- package/dist/_chunks/heart-pulse-CvuyFKHB.js.map +1 -0
- package/dist/_chunks/{link-DmM5IevO.js → link-DrD_cRUg.js} +50 -45
- package/dist/_chunks/link-DrD_cRUg.js.map +1 -0
- package/dist/_chunks/parseISO-Dk4xa7q6.js +120 -0
- package/dist/_chunks/parseISO-Dk4xa7q6.js.map +1 -0
- package/dist/_chunks/patient-search-DuSoGG2t.js +1113 -0
- package/dist/_chunks/patient-search-DuSoGG2t.js.map +1 -0
- package/dist/_chunks/{patient-shell-Bq8CjRYF.js → patient-shell-CAXYzbRw.js} +2 -2
- package/dist/_chunks/{patient-shell-Bq8CjRYF.js.map → patient-shell-CAXYzbRw.js.map} +1 -1
- package/dist/_chunks/public-footer.agent-DivkKdG4.js +537 -0
- package/dist/_chunks/public-footer.agent-DivkKdG4.js.map +1 -0
- package/dist/_chunks/reviews-panel-CFttsfuC.js +513 -0
- package/dist/_chunks/reviews-panel-CFttsfuC.js.map +1 -0
- package/dist/_chunks/slot-grid-B2zprPcv.js +387 -0
- package/dist/_chunks/slot-grid-B2zprPcv.js.map +1 -0
- package/dist/_chunks/stethoscope-DT5qCW8Y.js +18 -0
- package/dist/_chunks/stethoscope-DT5qCW8Y.js.map +1 -0
- package/dist/agent-catalog.json +117 -22
- package/dist/components/booking/booking-types.d.ts +167 -0
- package/dist/components/booking/booking-types.d.ts.map +1 -0
- package/dist/components/booking/booking.agent.d.ts +1 -1
- package/dist/components/booking/booking.agent.d.ts.map +1 -1
- package/dist/components/booking/booking.d.ts +4 -89
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/cascade.d.ts +96 -0
- package/dist/components/booking/cascade.d.ts.map +1 -0
- package/dist/components/booking/details-form.d.ts +39 -0
- package/dist/components/booking/details-form.d.ts.map +1 -0
- package/dist/components/booking/index.d.ts +2 -1
- package/dist/components/booking/index.d.ts.map +1 -1
- package/dist/components/booking/index.js +5 -3
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/checkbox/checkbox.d.ts +6 -2
- package/dist/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/link/link.d.ts +7 -0
- package/dist/components/link/link.d.ts.map +1 -1
- package/dist/components/patient-search/index.d.ts +4 -0
- package/dist/components/patient-search/index.d.ts.map +1 -0
- package/dist/components/patient-search/index.js +6 -0
- package/dist/components/patient-search/index.js.map +1 -0
- package/dist/components/patient-search/patient-search.agent.d.ts +4 -0
- package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -0
- package/dist/components/patient-search/patient-search.d.ts +112 -0
- package/dist/components/patient-search/patient-search.d.ts.map +1 -0
- package/dist/components/public-footer/index.d.ts +6 -0
- package/dist/components/public-footer/index.d.ts.map +1 -0
- package/dist/components/public-footer/index.js +10 -0
- package/dist/components/public-footer/index.js.map +1 -0
- package/dist/components/public-footer/legal-urls.d.ts +18 -0
- package/dist/components/public-footer/legal-urls.d.ts.map +1 -0
- package/dist/components/public-footer/public-footer.agent.d.ts +4 -0
- package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -0
- package/dist/components/public-footer/public-footer.d.ts +58 -0
- package/dist/components/public-footer/public-footer.d.ts.map +1 -0
- package/dist/components/public-footer/socials.d.ts +9 -0
- package/dist/components/public-footer/socials.d.ts.map +1 -0
- package/dist/components/reviews-panel/index.d.ts +4 -0
- package/dist/components/reviews-panel/index.d.ts.map +1 -0
- package/dist/components/reviews-panel/index.js +6 -0
- package/dist/components/reviews-panel/index.js.map +1 -0
- package/dist/components/reviews-panel/reviews-panel.agent.d.ts +4 -0
- package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -0
- package/dist/components/reviews-panel/reviews-panel.d.ts +76 -0
- package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -0
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/i18n/config.js +3994 -38
- package/dist/i18n/config.js.map +1 -1
- package/dist/i18n/locales/ar.d.ts +221 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/de.d.ts +221 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/el.d.ts +221 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/es.d.ts +221 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/fr.d.ts +221 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/hi.d.ts +221 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/ja.d.ts +221 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/nl.d.ts +221 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.d.ts +221 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pt.d.ts +221 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/ro.d.ts +221 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ru.d.ts +221 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/sq.d.ts +221 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sv.d.ts +221 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/tr.d.ts +221 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/zh.d.ts +221 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/resources.d.ts +442 -0
- package/dist/i18n/resources.d.ts.map +1 -1
- package/dist/index.js +351 -336
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +222 -1
- package/dist/locales/de.json +222 -1
- package/dist/locales/el.json +222 -1
- package/dist/locales/en.json +222 -1
- package/dist/locales/es.json +222 -1
- package/dist/locales/fr.json +222 -1
- package/dist/locales/hi.json +222 -1
- package/dist/locales/it.json +222 -1
- package/dist/locales/ja.json +222 -1
- package/dist/locales/nl.json +222 -1
- package/dist/locales/pl.json +222 -1
- package/dist/locales/pt.json +222 -1
- package/dist/locales/ro.json +222 -1
- package/dist/locales/ru.json +222 -1
- package/dist/locales/sq.json +222 -1
- package/dist/locales/sv.json +222 -1
- package/dist/locales/tr.json +222 -1
- package/dist/locales/zh.json +222 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +17 -1
- package/dist/_chunks/booking-CXngC-1u.js +0 -1743
- package/dist/_chunks/booking-CXngC-1u.js.map +0 -1
- package/dist/_chunks/header-B8V_sNPy.js.map +0 -1
- package/dist/_chunks/link-DmM5IevO.js.map +0 -1
- package/dist/_chunks/slot-grid-DoodeQGZ.js +0 -502
- package/dist/_chunks/slot-grid-DoodeQGZ.js.map +0 -1
- package/dist/_chunks/stethoscope-B8kpbtjh.js +0 -35
- package/dist/_chunks/stethoscope-B8kpbtjh.js.map +0 -1
|
@@ -1,502 +0,0 @@
|
|
|
1
|
-
import { jsx as i, jsxs as C } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as pe, useId as ve, useState as he, 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-BRHSSFmZ.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-DHG8Xade.js";
|
|
10
|
-
function Ne(t, e) {
|
|
11
|
-
const s = () => De(e == null ? void 0 : e.in, NaN), r = Te(t);
|
|
12
|
-
let d;
|
|
13
|
-
if (r.date) {
|
|
14
|
-
const o = Ie(r.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 (r.time && (u = Le(r.time), isNaN(u)))
|
|
21
|
-
return s();
|
|
22
|
-
if (r.timezone) {
|
|
23
|
-
if (f = Se(r.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 r = k.timezone.exec(a);
|
|
54
|
-
r ? (e.time = a.replace(r[1], ""), e.timezone = r[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 r = a[1] ? parseInt(a[1]) : null, d = a[2] ? parseInt(a[2]) : null;
|
|
64
|
-
return {
|
|
65
|
-
year: d === null ? r : 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], r = 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, r) ? /* @__PURE__ */ new Date(NaN) : (o.setUTCFullYear(e, d, Math.max(r, 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]), r = $(e[3]);
|
|
88
|
-
return Ee(s, a, r) ? s * K + a * Z + r * 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]), r = e[3] && parseInt(e[3]) || 0;
|
|
98
|
-
return Fe(a, r) ? s * (a * K + r * Z) : NaN;
|
|
99
|
-
}
|
|
100
|
-
function $e(t, e, s) {
|
|
101
|
-
const a = /* @__PURE__ */ new Date(0);
|
|
102
|
-
a.setUTCFullYear(t, 0, 4);
|
|
103
|
-
const r = a.getUTCDay() || 7, d = (e - 1) * 7 + s + 1 - r;
|
|
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:border ds:border-[var(--border)]",
|
|
176
|
-
"ds:min-w-0"
|
|
177
|
-
].join(" ")
|
|
178
|
-
), Be = b(
|
|
179
|
-
[
|
|
180
|
-
"ds:font-[var(--font-weight-semibold)]",
|
|
181
|
-
"ds:text-[var(--foreground)]",
|
|
182
|
-
"ds:text-start",
|
|
183
|
-
"ds:truncate"
|
|
184
|
-
].join(" "),
|
|
185
|
-
{
|
|
186
|
-
variants: {
|
|
187
|
-
size: {
|
|
188
|
-
sm: "ds:text-[length:var(--font-size-xs)]",
|
|
189
|
-
md: "ds:text-[length:var(--font-size-sm)]",
|
|
190
|
-
lg: "ds:text-[length:var(--font-size-base)]"
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
defaultVariants: { size: "md" }
|
|
194
|
-
}
|
|
195
|
-
), _ = b(
|
|
196
|
-
"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full ds:m-0 ds:p-0 ds:list-none"
|
|
197
|
-
), We = b(
|
|
198
|
-
[
|
|
199
|
-
"ds:inline-flex ds:items-center ds:justify-center",
|
|
200
|
-
"ds:w-full",
|
|
201
|
-
"ds:rounded-[var(--radius-sm)]",
|
|
202
|
-
"ds:font-[var(--font-weight-medium)]",
|
|
203
|
-
"ds:border ds:border-[var(--border)]",
|
|
204
|
-
"ds:bg-[var(--background)]",
|
|
205
|
-
"ds:text-[var(--foreground)]",
|
|
206
|
-
"ds:transition-colors",
|
|
207
|
-
"ds:focus-visible:outline-[var(--focus-ring-width)]",
|
|
208
|
-
"ds:focus-visible:outline-solid",
|
|
209
|
-
"ds:focus-visible:outline-[var(--ring)]",
|
|
210
|
-
"ds:focus-visible:outline-offset-[var(--focus-ring-offset)]",
|
|
211
|
-
"ds:min-h-[var(--min-target-size)]",
|
|
212
|
-
"ds:disabled:opacity-50 ds:disabled:cursor-not-allowed",
|
|
213
|
-
"ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed",
|
|
214
|
-
"ds:hover:bg-[var(--muted)] ds:hover:text-[var(--foreground)]",
|
|
215
|
-
"ds:aria-pressed:bg-[var(--primary)] ds:aria-pressed:text-[var(--primary-foreground)]",
|
|
216
|
-
"ds:aria-pressed:border-[var(--primary)]"
|
|
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 h(t) {
|
|
230
|
-
return t instanceof Date ? t : Ne(t);
|
|
231
|
-
}
|
|
232
|
-
function nt(t, e) {
|
|
233
|
-
return ye(h(t), h(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 = h(t.start);
|
|
260
|
-
try {
|
|
261
|
-
const r = new Intl.DateTimeFormat(e, {
|
|
262
|
-
hour: "numeric",
|
|
263
|
-
minute: "2-digit",
|
|
264
|
-
timeZone: s
|
|
265
|
-
});
|
|
266
|
-
if (t.end) {
|
|
267
|
-
const d = h(t.end);
|
|
268
|
-
if (typeof r.formatRange == "function")
|
|
269
|
-
try {
|
|
270
|
-
return r.formatRange(a, d);
|
|
271
|
-
} catch {
|
|
272
|
-
}
|
|
273
|
-
return `${r.format(a)} – ${r.format(d)}`;
|
|
274
|
-
}
|
|
275
|
-
return r.format(a);
|
|
276
|
-
} catch {
|
|
277
|
-
return a.toISOString();
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
function He(t, e, s, a, r) {
|
|
281
|
-
if (t.ariaLabel !== void 0) return t.ariaLabel;
|
|
282
|
-
const d = q(t, s, a), l = e.label !== void 0 ? e.label : X(h(e.date), s, a);
|
|
283
|
-
return r({ 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: r = 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: re } = be(), T = d ?? re.language ?? "en", ne = ve(), [ie, de] = he({}), U = e === "loading", G = e === "disabled", v = U || G, oe = e === "empty" || t.length === 0 || t.every((n) => n.slots.length === 0), le = x ?? m("slotGrid.ariaLabel"), I = S(
|
|
339
|
-
(n, c) => {
|
|
340
|
-
v || n.available !== !1 && (y == null || y(n, c));
|
|
341
|
-
},
|
|
342
|
-
[v, y]
|
|
343
|
-
), ce = S(
|
|
344
|
-
(n, c) => {
|
|
345
|
-
de((g) => ({ ...g, [c]: !0 })), N == null || N(n);
|
|
346
|
-
},
|
|
347
|
-
[N]
|
|
348
|
-
), ue = S(
|
|
349
|
-
(n, c, g) => {
|
|
350
|
-
(n.key === "Enter" || n.key === " ") && (n.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 }, (n, 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(r, 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((n, c) => {
|
|
385
|
-
const g = `${h(n.date).toISOString()}-${c}`, z = n.label ?? X(h(n.date), T, l), E = `${ne}-day-${c}-header`, F = ie[g] ?? !1 ? n.slots : n.slots.slice(0, r), R = n.slots.length - F.length, M = n.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
|
-
n,
|
|
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 || v;
|
|
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, n),
|
|
420
|
-
onKeyDown: (L) => ue(L, p, n),
|
|
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(n, g),
|
|
431
|
-
disabled: v,
|
|
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 || v,
|
|
463
|
-
onClick: Q
|
|
464
|
-
}
|
|
465
|
-
),
|
|
466
|
-
o ? /* @__PURE__ */ i(
|
|
467
|
-
Y,
|
|
468
|
-
{
|
|
469
|
-
intent: "secondary",
|
|
470
|
-
size: s === "lg" ? "md" : "sm",
|
|
471
|
-
disabled: v,
|
|
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 || v,
|
|
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
|
-
nt as i,
|
|
500
|
-
Ne as p
|
|
501
|
-
};
|
|
502
|
-
//# sourceMappingURL=slot-grid-DoodeQGZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"slot-grid-DoodeQGZ.js","sources":["../../node_modules/date-fns/parseISO.js","../../src/components/slot-grid/slot-grid.tsx"],"sourcesContent":["import {\n millisecondsInHour,\n millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const invalidDate = () => constructFrom(options?.in, NaN);\n\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(+date)) return invalidDate();\n\n const timestamp = +date;\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) return invalidDate();\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) return invalidDate();\n } else {\n const tmpDate = new Date(timestamp + time);\n const result = toDate(0, options?.in);\n result.setFullYear(\n tmpDate.getUTCFullYear(),\n tmpDate.getUTCMonth(),\n tmpDate.getUTCDate(),\n );\n result.setHours(\n tmpDate.getUTCHours(),\n tmpDate.getUTCMinutes(),\n tmpDate.getUTCSeconds(),\n tmpDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","/* ------------------------------------------------------------------ */\n/* SlotGrid — multi-day time-slot picker for patient booking. */\n/* */\n/* Renders N day columns side-by-side. Each column shows a day header */\n/* (formatted via `Intl.DateTimeFormat(locale)`) plus a vertical list */\n/* of slot buttons. Long days collapse to `maxInitialSlotsPerDay` and */\n/* reveal the rest via a \"Show more\" button (progressive disclosure). */\n/* */\n/* Navigation arrows (`onPreviousDays` / `onNextDays`) let the consumer */\n/* page the window of days; the optional \"Next available\" CTA jumps to */\n/* the first day with an open slot. */\n/* */\n/* Purely presentational — no business logic, no data fetching. Date */\n/* comparisons use `date-fns` (never moment.js) and the rendered labels */\n/* come exclusively from `Intl.DateTimeFormat` or the `ui.slotGrid` */\n/* namespace via `useTranslation()`. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useId,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { isSameDay, parseISO } from 'date-fns';\nimport { Button } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { Skeleton } from '../skeleton/skeleton';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type SlotGridState = 'default' | 'loading' | 'disabled' | 'empty';\n\nexport type SlotGridSize = 'sm' | 'md' | 'lg';\n\nexport interface SlotGridSlot {\n /** Stable identity — used by consumers to resolve selection. */\n id: string;\n /** Slot start — ISO string or `Date`. Rendered via `Intl.DateTimeFormat`. */\n start: string | Date;\n /** Optional slot end — if omitted only the start time is announced. */\n end?: string | Date;\n /** Defaults to `true`. Unavailable slots render disabled and are not focusable. */\n available?: boolean;\n /** Override the default `Intl`-formatted time label. */\n label?: string;\n /** Override the accessible name of the slot button. */\n ariaLabel?: string;\n}\n\nexport interface SlotGridDay {\n /** The calendar day the column represents. */\n date: string | Date;\n /** Slots for this day, in chronological order. Empty array ⇒ empty day. */\n slots: SlotGridSlot[];\n /** Override the default `Intl`-formatted day header. */\n label?: string;\n}\n\nexport interface SlotGridProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'aria-label' | 'onSelect'>,\n VariantProps<typeof slotGridVariants> {\n /** Days to render, one column per entry. */\n days: SlotGridDay[];\n /** Visual / interactive state. Defaults to `'default'`. */\n state?: SlotGridState;\n /** Density of the slot buttons and day headers. Defaults to `'md'`. */\n size?: SlotGridSize;\n /** Id of the currently selected slot (controlled). */\n selectedSlotId?: string;\n /**\n * Initial number of slots to render per day before the \"Show more\"\n * progressive-disclosure control collapses the rest. Defaults to `6`.\n */\n maxInitialSlotsPerDay?: number;\n /**\n * BCP-47 locale tag for `Intl.DateTimeFormat`. Defaults to the active\n * i18next language.\n */\n locale?: string;\n /** IANA time zone for `Intl.DateTimeFormat`. Optional. */\n timeZone?: string;\n /** Whether the \"previous days\" navigation arrow should be enabled. */\n hasPrevious?: boolean;\n /** Whether the \"next days\" navigation arrow should be enabled. */\n hasNext?: boolean;\n /**\n * When `true`, renders the \"Next available\" CTA at the end of the\n * toolbar. Only emits a callback — the consumer owns the navigation.\n */\n showNextAvailable?: boolean;\n /** Accessible label for the outer grid region. */\n ariaLabel?: string;\n /** Fires when the user selects an available slot. */\n onSlotSelect?: (slot: SlotGridSlot, day: SlotGridDay) => void;\n /** Fires when the user clicks the \"previous days\" arrow. */\n onPreviousDays?: () => void;\n /** Fires when the user clicks the \"next days\" arrow. */\n onNextDays?: () => void;\n /** Fires when the user clicks a day's \"Show more\" button. */\n onShowMore?: (day: SlotGridDay) => void;\n /** Fires when the user clicks the \"Next available\" CTA. */\n onJumpToNextAvailable?: () => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst slotGridVariants = cva(\n [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n 'ds:text-[var(--foreground)]',\n 'ds:w-full',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst toolbarVariants = cva(\n 'ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:w-full',\n);\n\n/**\n * Column-count is dynamic (1–12), so it is declared as a full CVA variant —\n * this keeps every `grid-cols-N` string statically visible to Tailwind's\n * JIT and keeps the variant table inside CVA rather than hand-rolled.\n */\nconst COLS_MAX = 12;\n\nconst columnsVariants = cva(\n 'ds:grid ds:gap-[var(--spacing-sm)] ds:w-full ds:auto-rows-min ds:items-start',\n {\n variants: {\n cols: {\n 1: 'ds:grid-cols-1',\n 2: 'ds:grid-cols-2',\n 3: 'ds:grid-cols-3',\n 4: 'ds:grid-cols-4',\n 5: 'ds:grid-cols-5',\n 6: 'ds:grid-cols-6',\n 7: 'ds:grid-cols-7',\n 8: 'ds:grid-cols-8',\n 9: 'ds:grid-cols-9',\n 10: 'ds:grid-cols-10',\n 11: 'ds:grid-cols-11',\n 12: 'ds:grid-cols-12',\n },\n },\n defaultVariants: { cols: 1 },\n },\n);\n\ntype ColumnsCount = NonNullable<VariantProps<typeof columnsVariants>['cols']>;\n\nfunction clampCols(count: number): ColumnsCount {\n return Math.max(1, Math.min(count, COLS_MAX)) as ColumnsCount;\n}\n\nconst columnVariants = cva(\n [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:bg-[var(--card)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:min-w-0',\n ].join(' '),\n);\n\nconst dayHeaderVariants = cva(\n [\n 'ds:font-[var(--font-weight-semibold)]',\n 'ds:text-[var(--foreground)]',\n 'ds:text-start',\n 'ds:truncate',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-xs)]',\n md: 'ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst slotListVariants = cva(\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full ds:m-0 ds:p-0 ds:list-none',\n);\n\nconst slotButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:w-full',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:font-[var(--font-weight-medium)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:text-[var(--foreground)]',\n 'ds:transition-colors',\n 'ds:focus-visible:outline-[var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[var(--focus-ring-offset)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n 'ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed',\n 'ds:hover:bg-[var(--muted)] ds:hover:text-[var(--foreground)]',\n 'ds:aria-pressed:bg-[var(--primary)] ds:aria-pressed:text-[var(--primary-foreground)]',\n 'ds:aria-pressed:border-[var(--primary)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:text-[length:var(--font-size-xs)] ds:h-8',\n md: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-sm)] ds:h-10',\n lg: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-base)] ds:h-12',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction toDate(value: string | Date): Date {\n return value instanceof Date ? value : parseISO(value);\n}\n\n/** Is `a` the same calendar day as `b`? Uses `date-fns`, locale-agnostic. */\nexport function isSameDate(a: string | Date, b: string | Date): boolean {\n return isSameDay(toDate(a), toDate(b));\n}\n\n/** Find the first day in a list that has at least one available slot. */\nexport function findFirstAvailable(\n days: SlotGridDay[],\n): { day: SlotGridDay; slot: SlotGridSlot } | undefined {\n for (const day of days) {\n const slot = day.slots.find((s) => s.available !== false);\n if (slot) return { day, slot };\n }\n return undefined;\n}\n\nfunction formatDayHeader(\n date: Date,\n locale: string,\n timeZone?: string,\n): string {\n try {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n timeZone,\n }).format(date);\n } catch {\n return new Intl.DateTimeFormat('en', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n }).format(date);\n }\n}\n\nfunction formatSlotTime(\n slot: SlotGridSlot,\n locale: string,\n timeZone?: string,\n): string {\n if (slot.label !== undefined) return slot.label;\n const start = toDate(slot.start);\n try {\n const fmt = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n timeZone,\n });\n if (slot.end) {\n const end = toDate(slot.end);\n if (typeof fmt.formatRange === 'function') {\n try {\n return fmt.formatRange(start, end);\n } catch {\n /* fall through */\n }\n }\n return `${fmt.format(start)} – ${fmt.format(end)}`;\n }\n return fmt.format(start);\n } catch {\n return start.toISOString();\n }\n}\n\nfunction formatSlotAriaLabel(\n slot: SlotGridSlot,\n day: SlotGridDay,\n locale: string,\n timeZone: string | undefined,\n template: (opts: { time: string; day: string }) => string,\n): string {\n if (slot.ariaLabel !== undefined) return slot.ariaLabel;\n const time = formatSlotTime(slot, locale, timeZone);\n const dayLabel =\n day.label !== undefined\n ? day.label\n : formatDayHeader(toDate(day.date), locale, timeZone);\n return template({ time, day: dayLabel });\n}\n\n/* ------------------------------------------------------------------ */\n/* Glyphs — logical-direction arrows */\n/* ------------------------------------------------------------------ */\n\nfunction ChevronStartIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ds:size-4\"\n >\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronEndIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ds:size-4\"\n >\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const SlotGrid = forwardRef<HTMLDivElement, SlotGridProps>(\n (\n {\n days,\n state = 'default',\n size = 'md',\n selectedSlotId,\n maxInitialSlotsPerDay = 6,\n locale: localeProp,\n timeZone,\n hasPrevious = false,\n hasNext = false,\n showNextAvailable = false,\n ariaLabel,\n onSlotSelect,\n onPreviousDays,\n onNextDays,\n onShowMore,\n onJumpToNextAvailable,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const locale = localeProp ?? i18n.language ?? 'en';\n const idBase = useId();\n\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n\n const isLoading = state === 'loading';\n const isDisabled = state === 'disabled';\n const isInteractionSuppressed = isLoading || isDisabled;\n const isEmpty =\n state === 'empty' ||\n days.length === 0 ||\n days.every((day) => day.slots.length === 0);\n\n const resolvedAriaLabel = ariaLabel ?? t('slotGrid.ariaLabel');\n\n const handleSlotClick = useCallback(\n (slot: SlotGridSlot, day: SlotGridDay) => {\n if (isInteractionSuppressed) return;\n if (slot.available === false) return;\n onSlotSelect?.(slot, day);\n },\n [isInteractionSuppressed, onSlotSelect],\n );\n\n const handleShowMore = useCallback(\n (day: SlotGridDay, key: string) => {\n setExpanded((prev) => ({ ...prev, [key]: true }));\n onShowMore?.(day);\n },\n [onShowMore],\n );\n\n const handleSlotKeyDown = useCallback(\n (\n event: KeyboardEvent<HTMLButtonElement>,\n slot: SlotGridSlot,\n day: SlotGridDay,\n ) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleSlotClick(slot, day);\n }\n },\n [handleSlotClick],\n );\n\n const columnCount = clampCols(days.length || 1);\n const columnsClass = columnsVariants({ cols: columnCount });\n\n /* ---- Rendered content ------------------------------------------ */\n\n let body: ReactNode;\n if (isLoading) {\n body = (\n <div\n className={columnsClass}\n data-state=\"loading\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label={t('common.loading')}\n >\n {Array.from({ length: columnCount }, (_, colIdx) => (\n <div key={`loading-col-${colIdx}`} className={columnVariants()}>\n <Skeleton variant=\"text\" size={size} width=\"60%\" />\n <div className={slotListVariants()}>\n {Array.from(\n { length: Math.min(maxInitialSlotsPerDay, 4) },\n (_, rowIdx) => (\n <Skeleton\n key={`loading-slot-${colIdx}-${rowIdx}`}\n variant=\"rounded\"\n size={size}\n height=\"40px\"\n />\n ),\n )}\n </div>\n </div>\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div data-state=\"empty\">\n <EmptyState variant=\"no-results\" title={t('slotGrid.noSlots')} />\n </div>\n );\n } else {\n body = (\n <div\n className={columnsClass}\n data-state={isDisabled ? 'disabled' : 'default'}\n >\n {days.map((day, dayIdx) => {\n const dayKey = `${toDate(day.date).toISOString()}-${dayIdx}`;\n const headerLabel =\n day.label ?? formatDayHeader(toDate(day.date), locale, timeZone);\n const headerId = `${idBase}-day-${dayIdx}-header`;\n const isExpanded = expanded[dayKey] ?? false;\n const visibleSlots = isExpanded\n ? day.slots\n : day.slots.slice(0, maxInitialSlotsPerDay);\n const hiddenCount = day.slots.length - visibleSlots.length;\n\n const isDayEmpty = day.slots.length === 0;\n\n return (\n // Use a plain <div role=\"group\"> rather than <section> — a\n // <section> with aria-labelledby is a landmark, and nesting many\n // landmarks inside the outer slot-grid landmark fails axe's\n // landmark-unique rule.\n <div\n key={dayKey}\n role=\"group\"\n className={columnVariants()}\n aria-labelledby={headerId}\n data-empty={isDayEmpty || undefined}\n >\n <h3 id={headerId} className={dayHeaderVariants({ size })}>\n {headerLabel}\n </h3>\n {isDayEmpty ? (\n <p className=\"type-body-sm ds:text-[var(--muted-foreground)] ds:m-0\">\n {t('slotGrid.noSlots')}\n </p>\n ) : null}\n <ul className={slotListVariants()}>\n {visibleSlots.map((slot) => {\n const ariaLabelSlot = formatSlotAriaLabel(\n slot,\n day,\n locale,\n timeZone,\n ({ time, day: dayLabel }) =>\n t('slotGrid.slotLabel', { time, day: dayLabel }),\n );\n const isSelected = selectedSlotId === slot.id;\n const isSlotDisabled =\n slot.available === false || isInteractionSuppressed;\n return (\n <li key={slot.id}>\n <button\n type=\"button\"\n className={slotButtonVariants({ size })}\n aria-label={ariaLabelSlot}\n aria-pressed={isSelected}\n disabled={isSlotDisabled}\n aria-disabled={isSlotDisabled || undefined}\n data-slot-id={slot.id}\n onClick={() => handleSlotClick(slot, day)}\n onKeyDown={(event) =>\n handleSlotKeyDown(event, slot, day)\n }\n >\n {formatSlotTime(slot, locale, timeZone)}\n </button>\n </li>\n );\n })}\n </ul>\n {hiddenCount > 0 ? (\n <Button\n intent=\"ghost\"\n size={size === 'lg' ? 'md' : 'sm'}\n onClick={() => handleShowMore(day, dayKey)}\n disabled={isInteractionSuppressed}\n >\n {t('slotGrid.showMore', { count: hiddenCount })}\n </Button>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={resolvedAriaLabel}\n className={slotGridVariants({ size, className })}\n data-component=\"slot-grid\"\n data-state={state}\n {...rest}\n >\n <div className={toolbarVariants()}>\n <IconButton\n icon={<ChevronStartIcon />}\n aria-label={t('slotGrid.previousDays')}\n size={size === 'lg' ? 'md' : 'sm'}\n intent=\"ghost\"\n flipIconInRtl\n disabled={!hasPrevious || isInteractionSuppressed}\n onClick={onPreviousDays}\n />\n {showNextAvailable ? (\n <Button\n intent=\"secondary\"\n size={size === 'lg' ? 'md' : 'sm'}\n disabled={isInteractionSuppressed}\n onClick={onJumpToNextAvailable}\n >\n {t('slotGrid.nextAvailable')}\n </Button>\n ) : (\n <span aria-hidden=\"true\" />\n )}\n <IconButton\n icon={<ChevronEndIcon />}\n aria-label={t('slotGrid.nextDays')}\n size={size === 'lg' ? 'md' : 'sm'}\n intent=\"ghost\"\n flipIconInRtl\n disabled={!hasNext || isInteractionSuppressed}\n onClick={onNextDays}\n />\n </div>\n\n {body}\n </div>\n );\n },\n);\n\nSlotGrid.displayName = 'SlotGrid';\n"],"names":["parseISO","argument","options","invalidDate","constructFrom","dateStrings","splitDateString","date","parseYearResult","parseYear","parseDate","timestamp","time","offset","parseTime","parseTimezone","tmpDate","result","toDate","patterns","dateRegex","timeRegex","timezoneRegex","dateString","array","timeString","token","additionalDigits","regex","captures","year","century","isWeekDate","dayOfYear","parseDateUnit","month","day","week","dayOfWeek","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","value","hours","parseTimeUnit","minutes","seconds","validateTime","millisecondsInHour","millisecondsInMinute","timezoneString","sign","validateTimezone","isoWeekYear","fourthOfJanuaryDay","diff","daysInMonths","isLeapYearIndex","_year","_hours","slotGridVariants","cva","toolbarVariants","COLS_MAX","columnsVariants","clampCols","count","columnVariants","dayHeaderVariants","slotListVariants","slotButtonVariants","isSameDate","a","b","isSameDay","findFirstAvailable","days","slot","s","formatDayHeader","locale","timeZone","formatSlotTime","start","fmt","end","formatSlotAriaLabel","template","dayLabel","ChevronStartIcon","jsx","ChevronEndIcon","SlotGrid","forwardRef","state","size","selectedSlotId","maxInitialSlotsPerDay","localeProp","hasPrevious","hasNext","showNextAvailable","ariaLabel","onSlotSelect","onPreviousDays","onNextDays","onShowMore","onJumpToNextAvailable","className","rest","ref","t","i18n","useTranslation","idBase","useId","expanded","setExpanded","useState","isLoading","isDisabled","isInteractionSuppressed","isEmpty","resolvedAriaLabel","handleSlotClick","useCallback","handleShowMore","key","prev","handleSlotKeyDown","event","columnCount","columnsClass","body","_","colIdx","jsxs","Skeleton","rowIdx","EmptyState","dayIdx","dayKey","headerLabel","headerId","visibleSlots","hiddenCount","isDayEmpty","ariaLabelSlot","isSelected","isSlotDisabled","Button","IconButton"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { c as e } from "./createLucideIcon-CrFbzy84.js";
|
|
2
|
-
/**
|
|
3
|
-
* @license lucide-react v1.8.0 - ISC
|
|
4
|
-
*
|
|
5
|
-
* This source code is licensed under the ISC license.
|
|
6
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
8
|
-
const t = [
|
|
9
|
-
[
|
|
10
|
-
"path",
|
|
11
|
-
{
|
|
12
|
-
d: "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",
|
|
13
|
-
key: "mvr1a0"
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
["path", { d: "M3.22 13H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27", key: "auskq0" }]
|
|
17
|
-
], o = e("heart-pulse", t);
|
|
18
|
-
/**
|
|
19
|
-
* @license lucide-react v1.8.0 - ISC
|
|
20
|
-
*
|
|
21
|
-
* This source code is licensed under the ISC license.
|
|
22
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
23
|
-
*/
|
|
24
|
-
const a = [
|
|
25
|
-
["path", { d: "M11 2v2", key: "1539x4" }],
|
|
26
|
-
["path", { d: "M5 2v2", key: "1yf1q8" }],
|
|
27
|
-
["path", { d: "M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1", key: "rb5t3r" }],
|
|
28
|
-
["path", { d: "M8 15a6 6 0 0 0 12 0v-3", key: "x18d4x" }],
|
|
29
|
-
["circle", { cx: "20", cy: "10", r: "2", key: "ts1r5v" }]
|
|
30
|
-
], s = e("stethoscope", a);
|
|
31
|
-
export {
|
|
32
|
-
o as H,
|
|
33
|
-
s as S
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=stethoscope-B8kpbtjh.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stethoscope-B8kpbtjh.js","sources":["../../node_modules/lucide-react/dist/esm/icons/heart-pulse.js","../../node_modules/lucide-react/dist/esm/icons/stethoscope.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\",\n key: \"mvr1a0\"\n }\n ],\n [\"path\", { d: \"M3.22 13H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27\", key: \"auskq0\" }]\n];\nconst HeartPulse = createLucideIcon(\"heart-pulse\", __iconNode);\n\nexport { __iconNode, HeartPulse as default };\n//# sourceMappingURL=heart-pulse.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M11 2v2\", key: \"1539x4\" }],\n [\"path\", { d: \"M5 2v2\", key: \"1yf1q8\" }],\n [\"path\", { d: \"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1\", key: \"rb5t3r\" }],\n [\"path\", { d: \"M8 15a6 6 0 0 0 12 0v-3\", key: \"x18d4x\" }],\n [\"circle\", { cx: \"20\", cy: \"10\", r: \"2\", key: \"ts1r5v\" }]\n];\nconst Stethoscope = createLucideIcon(\"stethoscope\", __iconNode);\n\nexport { __iconNode, Stethoscope as default };\n//# sourceMappingURL=stethoscope.js.map\n"],"names":["__iconNode","HeartPulse","createLucideIcon","Stethoscope"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,4CAA4C,KAAK,SAAQ,CAAE;AAC3E,GACMC,IAAaC,EAAiB,eAAeF,CAAU;ACnB7D;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,UAAU,KAAK,SAAQ,CAAE;AAAA,EACvC,CAAC,QAAQ,EAAE,GAAG,4DAA4D,KAAK,SAAQ,CAAE;AAAA,EACzF,CAAC,QAAQ,EAAE,GAAG,2BAA2B,KAAK,SAAQ,CAAE;AAAA,EACxD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,GACMG,IAAcD,EAAiB,eAAeF,CAAU;","x_google_ignoreList":[0,1]}
|