@teja-app/ui 0.0.15 → 0.0.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/theme/components/DateInput.tsx"],"names":[],"mappings":"AAGA,OAAO,4BAA4B,CAAC;AAEpC,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AASD,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAShE;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE7C;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAA2B,EAC3B,GAAG,EACH,GAAG,EACH,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAW,EACX,QAAQ,EACR,MAAM,GACP,EAAE,cAAc,2CA4IhB"}
1
+ {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/theme/components/DateInput.tsx"],"names":[],"mappings":"AAGA,OAAO,4BAA4B,CAAC;AAEpC,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AASD,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAShE;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE7C;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAA2B,EAC3B,GAAG,EACH,GAAG,EACH,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAW,EACX,QAAQ,EACR,MAAM,GACP,EAAE,cAAc,2CAuJhB"}
@@ -0,0 +1,68 @@
1
+ import type { ReactElement } from 'react';
2
+ /**
3
+ * DateTimePicker — a generic, presentation-only date + time picker.
4
+ *
5
+ * Two-step so the panel stays short (never clips mid-page / in a drawer):
6
+ * step 'date' → month calendar (past / blackout dates disabled)
7
+ * step 'time' → half-hour slots grouped Morning / Afternoon / Evening,
8
+ * with a "‹ back to date" header.
9
+ *
10
+ * The component is DUMB about availability. It does not know how slots are
11
+ * computed or fetched — the host supplies `loadSlots(dateKey)` (which may hit a
12
+ * backend) and `isDateDisabled(dateKey)`. The component owns the calendar, the
13
+ * two-step flow, calling loadSlots on date-select, and rendering the
14
+ * loading / slots+blocked / empty / error states. This keeps it reusable
15
+ * across the therapist app, the client portal, and the embed.
16
+ *
17
+ * Times are rendered exactly as the host provides them in each Slot's `label`
18
+ * (so the host controls timezone formatting — e.g. office/practice time).
19
+ */
20
+ export interface DateTimePickerSlot {
21
+ /** Stable id for selection (host-defined, e.g. the ISO start instant). */
22
+ id: string;
23
+ /** Display label, e.g. "10:00 AM". Host formats it (incl. timezone). */
24
+ label: string;
25
+ /** Part of day the slot belongs to. */
26
+ period: 'morning' | 'afternoon' | 'evening';
27
+ /** False → rendered greyed/struck and non-selectable. Default true. */
28
+ available?: boolean;
29
+ /** Optional reason shown on hover when blocked (e.g. "Booked"). */
30
+ reason?: string;
31
+ }
32
+ export interface DateTimePickerValue {
33
+ /** Selected date as `YYYY-MM-DD`, or null. */
34
+ dateKey: string | null;
35
+ /** Selected slot id, or null. */
36
+ slotId: string | null;
37
+ }
38
+ export interface DateTimePickerProps {
39
+ value: DateTimePickerValue;
40
+ onChange: (value: DateTimePickerValue) => void;
41
+ /**
42
+ * Fetch (or compute) the slots for a calendar date. May be async — the
43
+ * component shows a loading state while the promise resolves, and an error
44
+ * state if it rejects. Called whenever the date changes (and on `reloadKey`).
45
+ */
46
+ loadSlots: (dateKey: string) => Promise<DateTimePickerSlot[]>;
47
+ /**
48
+ * Returns true for dates that cannot be selected (past, out-of-office,
49
+ * blackout). Defaults to disabling dates before `today`.
50
+ */
51
+ isDateDisabled?: (dateKey: string) => boolean;
52
+ /**
53
+ * Bumping this re-runs loadSlots for the current date (e.g. when the chosen
54
+ * duration changes, which changes which slots fit).
55
+ */
56
+ reloadKey?: string | number;
57
+ /** Short note under the slots (e.g. "Times shown in practice time · 50m"). */
58
+ slotsHint?: string;
59
+ /** Footnote under the calendar. Pass null to hide. Defaults to the past-off note. */
60
+ calendarNote?: string | null;
61
+ /** Which step to start on. Default 'date'. */
62
+ initialStep?: 'date' | 'time';
63
+ /** `YYYY-MM-DD` the calendar treats as "today" (ring + default past cutoff). Defaults to the real today. */
64
+ todayKey?: string;
65
+ testId?: string;
66
+ }
67
+ export declare function DateTimePicker({ value, onChange, loadSlots, isDateDisabled, reloadKey, slotsHint, calendarNote, initialStep, todayKey, testId, }: DateTimePickerProps): ReactElement;
68
+ //# sourceMappingURL=DateTimePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker.d.ts","sourceRoot":"","sources":["../../../src/theme/components/DateTimePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAK1C;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5C,uEAAuE;IACvE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iCAAiC;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9D;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8VD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAoB,EACpB,QAAQ,EACR,MAA2B,GAC5B,EAAE,mBAAmB,GAAG,YAAY,CAmKpC"}
@@ -80,4 +80,5 @@ export { Tooltip, type TooltipProps, type TooltipPlacement, } from './Tooltip';
80
80
  export { DarkScope, type DarkScopeProps } from './DarkScope';
81
81
  export { Toast, ToastHost, useToast, type ToastProps, type ToastHostProps, type ToastOptions, type ToastTone, } from './Toast';
82
82
  export { Accordion, AccordionItem, type AccordionProps, type AccordionItemProps, } from './Accordion';
83
+ export { DateTimePicker, type DateTimePickerProps, type DateTimePickerValue, type DateTimePickerSlot, } from './DateTimePicker';
83
84
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/components/index.ts"],"names":[],"mappings":"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"}
@@ -12456,7 +12456,7 @@ const MONTHS_SHORT = [
12456
12456
  "Nov",
12457
12457
  "Dec"
12458
12458
  ];
12459
- const pad2 = (n2) => String(n2).padStart(2, "0");
12459
+ const pad2$1 = (n2) => String(n2).padStart(2, "0");
12460
12460
  function parseDate(value) {
12461
12461
  if (!value) return void 0;
12462
12462
  const [y3, m2, d2] = value.split("-").map(Number);
@@ -12468,13 +12468,13 @@ function parseDate(value) {
12468
12468
  return date;
12469
12469
  }
12470
12470
  function formatDate(date) {
12471
- return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
12471
+ return `${date.getFullYear()}-${pad2$1(date.getMonth() + 1)}-${pad2$1(date.getDate())}`;
12472
12472
  }
12473
12473
  function isValidDateString(value) {
12474
12474
  return /^\d{4}-\d{2}-\d{2}$/.test(value) && parseDate(value) !== void 0;
12475
12475
  }
12476
12476
  function displayDate(date) {
12477
- return `${MONTHS_SHORT[date.getMonth()]} ${pad2(date.getDate())}, ${date.getFullYear()}`;
12477
+ return `${MONTHS_SHORT[date.getMonth()]} ${pad2$1(date.getDate())}, ${date.getFullYear()}`;
12478
12478
  }
12479
12479
  function startOfDay(date) {
12480
12480
  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
@@ -12531,6 +12531,8 @@ function DateInput({
12531
12531
  const selected = parseDate(value);
12532
12532
  const minDate = parseDate(min2 ?? null);
12533
12533
  const maxDate = parseDate(max2 ?? null);
12534
+ const captionEnd = maxDate ?? /* @__PURE__ */ new Date();
12535
+ const captionStart = minDate ?? new Date(captionEnd.getFullYear() - 120, 0, 1);
12534
12536
  const [month, setMonth2] = React.useState(() => parseDate(value) ?? /* @__PURE__ */ new Date());
12535
12537
  const [lastValue, setLastValue] = React.useState(value);
12536
12538
  if (value !== lastValue) {
@@ -12632,6 +12634,9 @@ function DateInput({
12632
12634
  onSelect: handleSelect,
12633
12635
  disabled: disabledMatcher,
12634
12636
  showOutsideDays: true,
12637
+ captionLayout: "dropdown",
12638
+ startMonth: captionStart,
12639
+ endMonth: captionEnd,
12635
12640
  style: RDP_STYLE,
12636
12641
  components: {
12637
12642
  Chevron: ({ orientation }) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -19140,6 +19145,464 @@ const AccordionItem = React.forwardRef(
19140
19145
  ] });
19141
19146
  }
19142
19147
  );
19148
+ const DOW = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
19149
+ const MONTHS = [
19150
+ "January",
19151
+ "February",
19152
+ "March",
19153
+ "April",
19154
+ "May",
19155
+ "June",
19156
+ "July",
19157
+ "August",
19158
+ "September",
19159
+ "October",
19160
+ "November",
19161
+ "December"
19162
+ ];
19163
+ const pad2 = (n2) => String(n2).padStart(2, "0");
19164
+ function dateKeyOf(year, month0, day) {
19165
+ return `${year}-${pad2(month0 + 1)}-${pad2(day)}`;
19166
+ }
19167
+ function realTodayKey() {
19168
+ const d2 = /* @__PURE__ */ new Date();
19169
+ return dateKeyOf(d2.getFullYear(), d2.getMonth(), d2.getDate());
19170
+ }
19171
+ function prettyDate(dateKey) {
19172
+ if (!dateKey) return null;
19173
+ const [y3, m2, d2] = dateKey.split("-").map(Number);
19174
+ if (!y3 || !m2 || !d2) return null;
19175
+ const dow = DOW[(new Date(y3, m2 - 1, d2).getDay() + 6) % 7];
19176
+ return `${dow}, ${MONTHS[m2 - 1]} ${d2}`;
19177
+ }
19178
+ function monthGrid(year, month0, todayKey) {
19179
+ const first = new Date(year, month0, 1);
19180
+ const lead = (first.getDay() + 6) % 7;
19181
+ const daysInMonth = new Date(year, month0 + 1, 0).getDate();
19182
+ const cells = [];
19183
+ for (let i2 = 0; i2 < lead; i2++) cells.push(null);
19184
+ for (let d2 = 1; d2 <= daysInMonth; d2++) {
19185
+ const key = dateKeyOf(year, month0, d2);
19186
+ cells.push({ day: d2, key, past: key < todayKey, today: key === todayKey });
19187
+ }
19188
+ while (cells.length % 7 !== 0) cells.push(null);
19189
+ return cells;
19190
+ }
19191
+ const PERIODS = [
19192
+ { id: "morning", label: "Morning", sub: "Before noon" },
19193
+ { id: "afternoon", label: "Afternoon", sub: "12:00 – 5:00 PM" },
19194
+ { id: "evening", label: "Evening", sub: "After 5:00 PM" }
19195
+ ];
19196
+ function NavButton({
19197
+ icon,
19198
+ disabled,
19199
+ onClick,
19200
+ ariaLabel
19201
+ }) {
19202
+ return /* @__PURE__ */ jsxRuntime.jsx(
19203
+ "button",
19204
+ {
19205
+ "aria-label": ariaLabel,
19206
+ disabled,
19207
+ type: "button",
19208
+ onClick,
19209
+ style: {
19210
+ width: 26,
19211
+ height: 26,
19212
+ borderRadius: "var(--r-sm)",
19213
+ border: "1px solid var(--border)",
19214
+ background: "var(--surface-0)",
19215
+ color: "var(--ink-2)",
19216
+ boxShadow: "var(--shadow-xs)",
19217
+ display: "inline-flex",
19218
+ alignItems: "center",
19219
+ justifyContent: "center",
19220
+ cursor: disabled ? "not-allowed" : "pointer",
19221
+ opacity: disabled ? 0.4 : 1,
19222
+ flexShrink: 0
19223
+ },
19224
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { color: "var(--ink-2)", name: icon, size: 13 })
19225
+ }
19226
+ );
19227
+ }
19228
+ function CalendarPane({
19229
+ value,
19230
+ todayKey,
19231
+ isDateDisabled,
19232
+ onPick,
19233
+ note
19234
+ }) {
19235
+ const initial = (value ?? todayKey).split("-").map(Number);
19236
+ const [view, setView] = React.useState({
19237
+ year: initial[0],
19238
+ month0: (initial[1] ?? 1) - 1
19239
+ });
19240
+ const grid = React.useMemo(
19241
+ () => monthGrid(view.year, view.month0, todayKey),
19242
+ [view.year, view.month0, todayKey]
19243
+ );
19244
+ const [ty, tm] = todayKey.split("-").map(Number);
19245
+ const canGoPrev = view.year > (ty ?? 0) || view.month0 > (tm ?? 1) - 1;
19246
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%" }, children: [
19247
+ /* @__PURE__ */ jsxRuntime.jsxs(
19248
+ "div",
19249
+ {
19250
+ style: {
19251
+ display: "flex",
19252
+ alignItems: "center",
19253
+ justifyContent: "space-between",
19254
+ marginBottom: 12,
19255
+ padding: "2px 2px 0"
19256
+ },
19257
+ children: [
19258
+ /* @__PURE__ */ jsxRuntime.jsx(
19259
+ NavButton,
19260
+ {
19261
+ ariaLabel: "Previous month",
19262
+ disabled: !canGoPrev,
19263
+ icon: "chevronLeft",
19264
+ onClick: () => {
19265
+ if (!canGoPrev) return;
19266
+ setView((v2) => v2.month0 === 0 ? { year: v2.year - 1, month0: 11 } : { ...v2, month0: v2.month0 - 1 });
19267
+ }
19268
+ }
19269
+ ),
19270
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 13, fontWeight: 600, color: "var(--ink-1)" }, children: [
19271
+ MONTHS[view.month0],
19272
+ " ",
19273
+ view.year
19274
+ ] }),
19275
+ /* @__PURE__ */ jsxRuntime.jsx(
19276
+ NavButton,
19277
+ {
19278
+ ariaLabel: "Next month",
19279
+ icon: "chevronRight",
19280
+ onClick: () => {
19281
+ setView((v2) => v2.month0 === 11 ? { year: v2.year + 1, month0: 0 } : { ...v2, month0: v2.month0 + 1 });
19282
+ }
19283
+ }
19284
+ )
19285
+ ]
19286
+ }
19287
+ ),
19288
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, 1fr)", gap: 2, marginBottom: 4 }, children: DOW.map((d2, i2) => /* @__PURE__ */ jsxRuntime.jsx(
19289
+ "span",
19290
+ {
19291
+ style: {
19292
+ textAlign: "center",
19293
+ fontSize: 10,
19294
+ fontWeight: 600,
19295
+ color: "var(--ink-3)",
19296
+ textTransform: "uppercase",
19297
+ letterSpacing: "0.04em"
19298
+ },
19299
+ children: d2[0]
19300
+ },
19301
+ i2
19302
+ )) }),
19303
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, 1fr)", gap: 2, justifyItems: "center" }, children: grid.map((c2, i2) => {
19304
+ if (!c2) return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { width: 34, height: 34 } }, `e${i2}`);
19305
+ const disabled = c2.past || isDateDisabled(c2.key);
19306
+ const selected = c2.key === value;
19307
+ return /* @__PURE__ */ jsxRuntime.jsx(
19308
+ "button",
19309
+ {
19310
+ "data-testid": `dtp-day-${c2.key}`,
19311
+ disabled,
19312
+ type: "button",
19313
+ onClick: () => onPick(c2.key),
19314
+ style: {
19315
+ width: 34,
19316
+ height: 34,
19317
+ borderRadius: 999,
19318
+ border: 0,
19319
+ fontSize: 12.5,
19320
+ fontWeight: selected ? 700 : c2.today ? 600 : 500,
19321
+ cursor: disabled ? "not-allowed" : "pointer",
19322
+ background: selected ? "var(--primary)" : "transparent",
19323
+ color: disabled ? "var(--ink-4)" : selected ? "white" : c2.today ? "var(--primary)" : "var(--ink-1)",
19324
+ opacity: disabled ? 0.45 : 1,
19325
+ textDecoration: disabled ? "line-through" : "none",
19326
+ outline: c2.today && !selected ? "1px solid var(--primary-soft)" : "none",
19327
+ display: "inline-flex",
19328
+ alignItems: "center",
19329
+ justifyContent: "center"
19330
+ },
19331
+ children: c2.day
19332
+ },
19333
+ c2.key
19334
+ );
19335
+ }) }),
19336
+ note ? /* @__PURE__ */ jsxRuntime.jsxs(
19337
+ "div",
19338
+ {
19339
+ style: {
19340
+ marginTop: 10,
19341
+ fontSize: 10.5,
19342
+ color: "var(--ink-3)",
19343
+ display: "flex",
19344
+ alignItems: "center",
19345
+ gap: 5
19346
+ },
19347
+ children: [
19348
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { color: "var(--ink-4)", name: "calendar", size: 11 }),
19349
+ note
19350
+ ]
19351
+ }
19352
+ ) : null
19353
+ ] });
19354
+ }
19355
+ function SlotsPane({
19356
+ state,
19357
+ value,
19358
+ hint,
19359
+ onPick,
19360
+ onRetry
19361
+ }) {
19362
+ if (state.status === "loading") {
19363
+ return /* @__PURE__ */ jsxRuntime.jsx(
19364
+ "div",
19365
+ {
19366
+ "data-testid": "dtp-slots-loading",
19367
+ style: { minHeight: 120, display: "flex", alignItems: "center", justifyContent: "center", color: "var(--ink-3)", fontSize: 12.5 },
19368
+ children: "Loading times…"
19369
+ }
19370
+ );
19371
+ }
19372
+ if (state.status === "error") {
19373
+ return /* @__PURE__ */ jsxRuntime.jsxs(
19374
+ "div",
19375
+ {
19376
+ "data-testid": "dtp-slots-error",
19377
+ style: { minHeight: 120, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 8, color: "var(--ink-3)", textAlign: "center", padding: 16 },
19378
+ children: [
19379
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { color: "var(--danger)", name: "alert-circle", size: 18 }),
19380
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12.5 }, children: "Couldn't load times." }),
19381
+ /* @__PURE__ */ jsxRuntime.jsx(Button$1, { size: "sm", variant: "secondary", onClick: onRetry, children: "Try again" })
19382
+ ]
19383
+ }
19384
+ );
19385
+ }
19386
+ const { slots } = state;
19387
+ const anyAvailable = slots.some((s2) => s2.available !== false);
19388
+ if (slots.length === 0 || !anyAvailable) {
19389
+ return /* @__PURE__ */ jsxRuntime.jsxs(
19390
+ "div",
19391
+ {
19392
+ "data-testid": "dtp-slots-empty",
19393
+ style: { minHeight: 120, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 8, color: "var(--ink-3)", textAlign: "center", padding: 16 },
19394
+ children: [
19395
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { color: "var(--ink-4)", name: "clock", size: 18 }),
19396
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12.5, fontWeight: 500 }, children: "No times available" }),
19397
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, maxWidth: 200 }, children: "Try another day, or adjust the session length." })
19398
+ ]
19399
+ }
19400
+ );
19401
+ }
19402
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "dtp-slots", style: { display: "flex", flexDirection: "column", gap: 14 }, children: [
19403
+ hint ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "var(--ink-2)" }, children: hint }) : null,
19404
+ PERIODS.map((p2) => {
19405
+ const inPeriod = slots.filter((s2) => s2.period === p2.id);
19406
+ if (inPeriod.length === 0) return null;
19407
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
19408
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "baseline", gap: 8, marginBottom: 8 }, children: [
19409
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11.5, fontWeight: 700, color: "var(--ink-1)" }, children: p2.label }),
19410
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 10.5, color: "var(--ink-3)" }, children: p2.sub })
19411
+ ] }),
19412
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(84px, 1fr))", gap: 8 }, children: inPeriod.map((s2) => {
19413
+ const blocked = s2.available === false;
19414
+ const on = s2.id === value;
19415
+ return /* @__PURE__ */ jsxRuntime.jsx(
19416
+ "button",
19417
+ {
19418
+ "data-testid": `dtp-slot-${s2.id}`,
19419
+ disabled: blocked,
19420
+ title: blocked ? s2.reason : void 0,
19421
+ type: "button",
19422
+ onClick: () => onPick(s2.id),
19423
+ style: {
19424
+ height: 38,
19425
+ borderRadius: "var(--r-md)",
19426
+ border: `1px solid ${on ? "var(--primary)" : "var(--border-strong)"}`,
19427
+ background: on ? "var(--primary)" : "var(--surface-0)",
19428
+ color: blocked ? "var(--ink-4)" : on ? "white" : "var(--ink-1)",
19429
+ fontSize: 12.5,
19430
+ fontWeight: on ? 600 : 500,
19431
+ cursor: blocked ? "not-allowed" : "pointer",
19432
+ opacity: blocked ? 0.5 : 1,
19433
+ textDecoration: blocked ? "line-through" : "none"
19434
+ },
19435
+ children: s2.label
19436
+ },
19437
+ s2.id
19438
+ );
19439
+ }) })
19440
+ ] }, p2.id);
19441
+ })
19442
+ ] });
19443
+ }
19444
+ function DateTimePicker({
19445
+ value,
19446
+ onChange,
19447
+ loadSlots,
19448
+ isDateDisabled,
19449
+ reloadKey,
19450
+ slotsHint,
19451
+ calendarNote,
19452
+ initialStep = "date",
19453
+ todayKey,
19454
+ testId = "date-time-picker"
19455
+ }) {
19456
+ const today = todayKey ?? realTodayKey();
19457
+ const dateDisabled = React.useCallback(
19458
+ (k2) => isDateDisabled ? isDateDisabled(k2) : k2 < today,
19459
+ [isDateDisabled, today]
19460
+ );
19461
+ const [step, setStep] = React.useState(initialStep);
19462
+ const [slotsState, setSlotsState] = React.useState(
19463
+ value.dateKey ? { status: "loading" } : { status: "ready", slots: [] }
19464
+ );
19465
+ const reqIdRef = React.useRef(0);
19466
+ const runLoad = React.useCallback(
19467
+ (dateKey) => {
19468
+ const id = ++reqIdRef.current;
19469
+ setSlotsState({ status: "loading" });
19470
+ loadSlots(dateKey).then(
19471
+ (slots) => {
19472
+ if (reqIdRef.current === id) setSlotsState({ status: "ready", slots });
19473
+ },
19474
+ () => {
19475
+ if (reqIdRef.current === id) setSlotsState({ status: "error" });
19476
+ }
19477
+ );
19478
+ },
19479
+ [loadSlots]
19480
+ );
19481
+ const dateKeyRef = React.useRef(value.dateKey);
19482
+ React.useEffect(() => {
19483
+ dateKeyRef.current = value.dateKey;
19484
+ }, [value.dateKey]);
19485
+ React.useEffect(() => {
19486
+ const dateKey = dateKeyRef.current;
19487
+ if (dateKey) runLoad(dateKey);
19488
+ }, [reloadKey, runLoad]);
19489
+ const handlePickDate = (dateKey) => {
19490
+ onChange({ dateKey, slotId: null });
19491
+ setStep("time");
19492
+ runLoad(dateKey);
19493
+ };
19494
+ const handlePickSlot = (slotId) => {
19495
+ onChange({ ...value, slotId });
19496
+ };
19497
+ const pretty = prettyDate(value.dateKey);
19498
+ const selectedLabel = slotsState.status === "ready" ? slotsState.slots.find((s2) => s2.id === value.slotId)?.label : void 0;
19499
+ const note = calendarNote === void 0 ? "Past dates are off — sessions can't be created in the past." : calendarNote;
19500
+ return /* @__PURE__ */ jsxRuntime.jsxs(
19501
+ "div",
19502
+ {
19503
+ "data-testid": testId,
19504
+ style: {
19505
+ width: 340,
19506
+ maxWidth: "calc(100vw - 32px)",
19507
+ background: "var(--surface-0)",
19508
+ borderRadius: "var(--r-lg)",
19509
+ border: "1px solid var(--border-strong)",
19510
+ boxShadow: "var(--shadow-lg)",
19511
+ overflow: "hidden",
19512
+ display: "flex",
19513
+ flexDirection: "column",
19514
+ maxHeight: "min(440px, 80vh)"
19515
+ },
19516
+ children: [
19517
+ step === "date" ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: 16 }, children: /* @__PURE__ */ jsxRuntime.jsx(
19518
+ CalendarPane,
19519
+ {
19520
+ isDateDisabled: dateDisabled,
19521
+ note,
19522
+ todayKey: today,
19523
+ value: value.dateKey,
19524
+ onPick: handlePickDate
19525
+ }
19526
+ ) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19527
+ /* @__PURE__ */ jsxRuntime.jsxs(
19528
+ "button",
19529
+ {
19530
+ "data-testid": "dtp-back-to-date",
19531
+ type: "button",
19532
+ onClick: () => setStep("date"),
19533
+ style: {
19534
+ display: "flex",
19535
+ alignItems: "center",
19536
+ gap: 8,
19537
+ width: "100%",
19538
+ padding: "12px 16px",
19539
+ border: 0,
19540
+ borderBottom: "1px solid var(--divider)",
19541
+ background: "var(--surface-1)",
19542
+ cursor: "pointer",
19543
+ textAlign: "left"
19544
+ },
19545
+ children: [
19546
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { color: "var(--ink-3)", name: "chevronLeft", size: 13 }),
19547
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, color: "var(--ink-3)" }, children: "Date" }),
19548
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 13, fontWeight: 600, color: "var(--ink-1)", marginLeft: "auto" }, children: pretty })
19549
+ ]
19550
+ }
19551
+ ),
19552
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: 16, overflowY: "auto", flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(
19553
+ SlotsPane,
19554
+ {
19555
+ hint: slotsHint,
19556
+ state: slotsState,
19557
+ value: value.slotId,
19558
+ onPick: handlePickSlot,
19559
+ onRetry: () => {
19560
+ if (value.dateKey) runLoad(value.dateKey);
19561
+ }
19562
+ }
19563
+ ) })
19564
+ ] }),
19565
+ /* @__PURE__ */ jsxRuntime.jsx(
19566
+ "div",
19567
+ {
19568
+ style: {
19569
+ padding: "10px 16px",
19570
+ borderTop: "1px solid var(--divider)",
19571
+ background: "var(--surface-1)",
19572
+ display: "flex",
19573
+ alignItems: "center",
19574
+ justifyContent: "space-between",
19575
+ gap: 8,
19576
+ flexShrink: 0
19577
+ },
19578
+ children: /* @__PURE__ */ jsxRuntime.jsx(
19579
+ "span",
19580
+ {
19581
+ style: {
19582
+ fontSize: 12,
19583
+ color: "var(--ink-2)",
19584
+ minWidth: 0,
19585
+ overflow: "hidden",
19586
+ textOverflow: "ellipsis",
19587
+ whiteSpace: "nowrap"
19588
+ },
19589
+ children: value.slotId && selectedLabel ? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
19590
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--ink-3)" }, children: "Selected:" }),
19591
+ " ",
19592
+ /* @__PURE__ */ jsxRuntime.jsxs("b", { children: [
19593
+ pretty,
19594
+ " · ",
19595
+ selectedLabel
19596
+ ] })
19597
+ ] }) : step === "date" ? "Pick a date" : "Pick a time"
19598
+ }
19599
+ )
19600
+ }
19601
+ )
19602
+ ]
19603
+ }
19604
+ );
19605
+ }
19143
19606
  exports.AIBadge = AIBadge;
19144
19607
  exports.AICard = AICard;
19145
19608
  exports.AIChip = AIChip;
@@ -19172,6 +19635,7 @@ exports.DENSITY_OPTIONS = DENSITY_OPTIONS;
19172
19635
  exports.DISPLAY_OPTIONS = DISPLAY_OPTIONS;
19173
19636
  exports.DarkScope = DarkScope;
19174
19637
  exports.DateInput = DateInput;
19638
+ exports.DateTimePicker = DateTimePicker;
19175
19639
  exports.Divider = Divider;
19176
19640
  exports.Drawer = Drawer;
19177
19641
  exports.DrawerFooter = DrawerFooter;