@teja-app/ui 0.0.14 → 0.0.16

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.
@@ -777,6 +777,61 @@ function Badge({
777
777
  children
778
778
  ] });
779
779
  }
780
+ const TONE_COLORS = {
781
+ waiting: { bg: "var(--ai-soft)", fg: "var(--ai)", dot: "var(--ai)" },
782
+ soon: { bg: "var(--warning-soft)", fg: "var(--warning)", dot: "var(--warning)" },
783
+ ready: { bg: "var(--success-soft)", fg: "var(--success)", dot: "var(--success)" }
784
+ };
785
+ function CountdownPill({
786
+ tone,
787
+ label,
788
+ icon = "clock",
789
+ dot,
790
+ testId,
791
+ "data-testid": dataTestId
792
+ }) {
793
+ const showDot = dot ?? tone !== "ready";
794
+ return /* @__PURE__ */ jsxs(
795
+ Badge,
796
+ {
797
+ tone: "neutral",
798
+ colors: TONE_COLORS[tone],
799
+ dot: showDot,
800
+ testId,
801
+ "data-testid": dataTestId,
802
+ children: [
803
+ /* @__PURE__ */ jsx(Icon, { name: icon, size: 12 }),
804
+ /* @__PURE__ */ jsx("span", { style: { fontFamily: "var(--font-mono)", fontWeight: 600 }, children: label })
805
+ ]
806
+ }
807
+ );
808
+ }
809
+ const DAY_S = 86400;
810
+ const HOUR_S = 3600;
811
+ const MIN_S = 60;
812
+ function countdownParts(startMs, nowMs, soonThresholdSeconds = 120) {
813
+ const deltaMs = startMs - nowMs;
814
+ if (deltaMs <= 0) {
815
+ return {
816
+ tone: "ready",
817
+ days: 0,
818
+ hours: 0,
819
+ minutes: 0,
820
+ seconds: 0,
821
+ unit: "now",
822
+ clock: "00:00"
823
+ };
824
+ }
825
+ const total = Math.floor(deltaMs / 1e3);
826
+ const days = Math.floor(total / DAY_S);
827
+ const hours = Math.floor(total % DAY_S / HOUR_S);
828
+ const minutes = Math.floor(total % HOUR_S / MIN_S);
829
+ const seconds = total % MIN_S;
830
+ const unit = days > 0 ? "days" : hours > 0 ? "hours" : "minutes";
831
+ const clock = `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
832
+ const tone = total <= soonThresholdSeconds ? "soon" : "waiting";
833
+ return { tone, days, hours, minutes, seconds, unit, clock };
834
+ }
780
835
  const Card = forwardRef(function Card2({
781
836
  padding = 20,
782
837
  children,
@@ -12383,7 +12438,7 @@ const MONTHS_SHORT = [
12383
12438
  "Nov",
12384
12439
  "Dec"
12385
12440
  ];
12386
- const pad2 = (n2) => String(n2).padStart(2, "0");
12441
+ const pad2$1 = (n2) => String(n2).padStart(2, "0");
12387
12442
  function parseDate(value) {
12388
12443
  if (!value) return void 0;
12389
12444
  const [y3, m2, d2] = value.split("-").map(Number);
@@ -12395,13 +12450,13 @@ function parseDate(value) {
12395
12450
  return date;
12396
12451
  }
12397
12452
  function formatDate(date) {
12398
- return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
12453
+ return `${date.getFullYear()}-${pad2$1(date.getMonth() + 1)}-${pad2$1(date.getDate())}`;
12399
12454
  }
12400
12455
  function isValidDateString(value) {
12401
12456
  return /^\d{4}-\d{2}-\d{2}$/.test(value) && parseDate(value) !== void 0;
12402
12457
  }
12403
12458
  function displayDate(date) {
12404
- return `${MONTHS_SHORT[date.getMonth()]} ${pad2(date.getDate())}, ${date.getFullYear()}`;
12459
+ return `${MONTHS_SHORT[date.getMonth()]} ${pad2$1(date.getDate())}, ${date.getFullYear()}`;
12405
12460
  }
12406
12461
  function startOfDay(date) {
12407
12462
  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
@@ -19067,6 +19122,464 @@ const AccordionItem = forwardRef(
19067
19122
  ] });
19068
19123
  }
19069
19124
  );
19125
+ const DOW = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
19126
+ const MONTHS = [
19127
+ "January",
19128
+ "February",
19129
+ "March",
19130
+ "April",
19131
+ "May",
19132
+ "June",
19133
+ "July",
19134
+ "August",
19135
+ "September",
19136
+ "October",
19137
+ "November",
19138
+ "December"
19139
+ ];
19140
+ const pad2 = (n2) => String(n2).padStart(2, "0");
19141
+ function dateKeyOf(year, month0, day) {
19142
+ return `${year}-${pad2(month0 + 1)}-${pad2(day)}`;
19143
+ }
19144
+ function realTodayKey() {
19145
+ const d2 = /* @__PURE__ */ new Date();
19146
+ return dateKeyOf(d2.getFullYear(), d2.getMonth(), d2.getDate());
19147
+ }
19148
+ function prettyDate(dateKey) {
19149
+ if (!dateKey) return null;
19150
+ const [y3, m2, d2] = dateKey.split("-").map(Number);
19151
+ if (!y3 || !m2 || !d2) return null;
19152
+ const dow = DOW[(new Date(y3, m2 - 1, d2).getDay() + 6) % 7];
19153
+ return `${dow}, ${MONTHS[m2 - 1]} ${d2}`;
19154
+ }
19155
+ function monthGrid(year, month0, todayKey) {
19156
+ const first = new Date(year, month0, 1);
19157
+ const lead = (first.getDay() + 6) % 7;
19158
+ const daysInMonth = new Date(year, month0 + 1, 0).getDate();
19159
+ const cells = [];
19160
+ for (let i2 = 0; i2 < lead; i2++) cells.push(null);
19161
+ for (let d2 = 1; d2 <= daysInMonth; d2++) {
19162
+ const key = dateKeyOf(year, month0, d2);
19163
+ cells.push({ day: d2, key, past: key < todayKey, today: key === todayKey });
19164
+ }
19165
+ while (cells.length % 7 !== 0) cells.push(null);
19166
+ return cells;
19167
+ }
19168
+ const PERIODS = [
19169
+ { id: "morning", label: "Morning", sub: "Before noon" },
19170
+ { id: "afternoon", label: "Afternoon", sub: "12:00 – 5:00 PM" },
19171
+ { id: "evening", label: "Evening", sub: "After 5:00 PM" }
19172
+ ];
19173
+ function NavButton({
19174
+ icon,
19175
+ disabled,
19176
+ onClick,
19177
+ ariaLabel
19178
+ }) {
19179
+ return /* @__PURE__ */ jsx(
19180
+ "button",
19181
+ {
19182
+ "aria-label": ariaLabel,
19183
+ disabled,
19184
+ type: "button",
19185
+ onClick,
19186
+ style: {
19187
+ width: 26,
19188
+ height: 26,
19189
+ borderRadius: "var(--r-sm)",
19190
+ border: "1px solid var(--border)",
19191
+ background: "var(--surface-0)",
19192
+ color: "var(--ink-2)",
19193
+ boxShadow: "var(--shadow-xs)",
19194
+ display: "inline-flex",
19195
+ alignItems: "center",
19196
+ justifyContent: "center",
19197
+ cursor: disabled ? "not-allowed" : "pointer",
19198
+ opacity: disabled ? 0.4 : 1,
19199
+ flexShrink: 0
19200
+ },
19201
+ children: /* @__PURE__ */ jsx(Icon, { color: "var(--ink-2)", name: icon, size: 13 })
19202
+ }
19203
+ );
19204
+ }
19205
+ function CalendarPane({
19206
+ value,
19207
+ todayKey,
19208
+ isDateDisabled,
19209
+ onPick,
19210
+ note
19211
+ }) {
19212
+ const initial = (value ?? todayKey).split("-").map(Number);
19213
+ const [view, setView] = useState({
19214
+ year: initial[0],
19215
+ month0: (initial[1] ?? 1) - 1
19216
+ });
19217
+ const grid = useMemo(
19218
+ () => monthGrid(view.year, view.month0, todayKey),
19219
+ [view.year, view.month0, todayKey]
19220
+ );
19221
+ const [ty, tm] = todayKey.split("-").map(Number);
19222
+ const canGoPrev = view.year > (ty ?? 0) || view.month0 > (tm ?? 1) - 1;
19223
+ return /* @__PURE__ */ jsxs("div", { style: { width: "100%" }, children: [
19224
+ /* @__PURE__ */ jsxs(
19225
+ "div",
19226
+ {
19227
+ style: {
19228
+ display: "flex",
19229
+ alignItems: "center",
19230
+ justifyContent: "space-between",
19231
+ marginBottom: 12,
19232
+ padding: "2px 2px 0"
19233
+ },
19234
+ children: [
19235
+ /* @__PURE__ */ jsx(
19236
+ NavButton,
19237
+ {
19238
+ ariaLabel: "Previous month",
19239
+ disabled: !canGoPrev,
19240
+ icon: "chevronLeft",
19241
+ onClick: () => {
19242
+ if (!canGoPrev) return;
19243
+ setView((v2) => v2.month0 === 0 ? { year: v2.year - 1, month0: 11 } : { ...v2, month0: v2.month0 - 1 });
19244
+ }
19245
+ }
19246
+ ),
19247
+ /* @__PURE__ */ jsxs("span", { style: { fontSize: 13, fontWeight: 600, color: "var(--ink-1)" }, children: [
19248
+ MONTHS[view.month0],
19249
+ " ",
19250
+ view.year
19251
+ ] }),
19252
+ /* @__PURE__ */ jsx(
19253
+ NavButton,
19254
+ {
19255
+ ariaLabel: "Next month",
19256
+ icon: "chevronRight",
19257
+ onClick: () => {
19258
+ setView((v2) => v2.month0 === 11 ? { year: v2.year + 1, month0: 0 } : { ...v2, month0: v2.month0 + 1 });
19259
+ }
19260
+ }
19261
+ )
19262
+ ]
19263
+ }
19264
+ ),
19265
+ /* @__PURE__ */ jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, 1fr)", gap: 2, marginBottom: 4 }, children: DOW.map((d2, i2) => /* @__PURE__ */ jsx(
19266
+ "span",
19267
+ {
19268
+ style: {
19269
+ textAlign: "center",
19270
+ fontSize: 10,
19271
+ fontWeight: 600,
19272
+ color: "var(--ink-3)",
19273
+ textTransform: "uppercase",
19274
+ letterSpacing: "0.04em"
19275
+ },
19276
+ children: d2[0]
19277
+ },
19278
+ i2
19279
+ )) }),
19280
+ /* @__PURE__ */ jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, 1fr)", gap: 2, justifyItems: "center" }, children: grid.map((c2, i2) => {
19281
+ if (!c2) return /* @__PURE__ */ jsx("span", { style: { width: 34, height: 34 } }, `e${i2}`);
19282
+ const disabled = c2.past || isDateDisabled(c2.key);
19283
+ const selected = c2.key === value;
19284
+ return /* @__PURE__ */ jsx(
19285
+ "button",
19286
+ {
19287
+ "data-testid": `dtp-day-${c2.key}`,
19288
+ disabled,
19289
+ type: "button",
19290
+ onClick: () => onPick(c2.key),
19291
+ style: {
19292
+ width: 34,
19293
+ height: 34,
19294
+ borderRadius: 999,
19295
+ border: 0,
19296
+ fontSize: 12.5,
19297
+ fontWeight: selected ? 700 : c2.today ? 600 : 500,
19298
+ cursor: disabled ? "not-allowed" : "pointer",
19299
+ background: selected ? "var(--primary)" : "transparent",
19300
+ color: disabled ? "var(--ink-4)" : selected ? "white" : c2.today ? "var(--primary)" : "var(--ink-1)",
19301
+ opacity: disabled ? 0.45 : 1,
19302
+ textDecoration: disabled ? "line-through" : "none",
19303
+ outline: c2.today && !selected ? "1px solid var(--primary-soft)" : "none",
19304
+ display: "inline-flex",
19305
+ alignItems: "center",
19306
+ justifyContent: "center"
19307
+ },
19308
+ children: c2.day
19309
+ },
19310
+ c2.key
19311
+ );
19312
+ }) }),
19313
+ note ? /* @__PURE__ */ jsxs(
19314
+ "div",
19315
+ {
19316
+ style: {
19317
+ marginTop: 10,
19318
+ fontSize: 10.5,
19319
+ color: "var(--ink-3)",
19320
+ display: "flex",
19321
+ alignItems: "center",
19322
+ gap: 5
19323
+ },
19324
+ children: [
19325
+ /* @__PURE__ */ jsx(Icon, { color: "var(--ink-4)", name: "calendar", size: 11 }),
19326
+ note
19327
+ ]
19328
+ }
19329
+ ) : null
19330
+ ] });
19331
+ }
19332
+ function SlotsPane({
19333
+ state,
19334
+ value,
19335
+ hint,
19336
+ onPick,
19337
+ onRetry
19338
+ }) {
19339
+ if (state.status === "loading") {
19340
+ return /* @__PURE__ */ jsx(
19341
+ "div",
19342
+ {
19343
+ "data-testid": "dtp-slots-loading",
19344
+ style: { minHeight: 120, display: "flex", alignItems: "center", justifyContent: "center", color: "var(--ink-3)", fontSize: 12.5 },
19345
+ children: "Loading times…"
19346
+ }
19347
+ );
19348
+ }
19349
+ if (state.status === "error") {
19350
+ return /* @__PURE__ */ jsxs(
19351
+ "div",
19352
+ {
19353
+ "data-testid": "dtp-slots-error",
19354
+ style: { minHeight: 120, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 8, color: "var(--ink-3)", textAlign: "center", padding: 16 },
19355
+ children: [
19356
+ /* @__PURE__ */ jsx(Icon, { color: "var(--danger)", name: "alert-circle", size: 18 }),
19357
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12.5 }, children: "Couldn't load times." }),
19358
+ /* @__PURE__ */ jsx(Button$1, { size: "sm", variant: "secondary", onClick: onRetry, children: "Try again" })
19359
+ ]
19360
+ }
19361
+ );
19362
+ }
19363
+ const { slots } = state;
19364
+ const anyAvailable = slots.some((s2) => s2.available !== false);
19365
+ if (slots.length === 0 || !anyAvailable) {
19366
+ return /* @__PURE__ */ jsxs(
19367
+ "div",
19368
+ {
19369
+ "data-testid": "dtp-slots-empty",
19370
+ style: { minHeight: 120, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 8, color: "var(--ink-3)", textAlign: "center", padding: 16 },
19371
+ children: [
19372
+ /* @__PURE__ */ jsx(Icon, { color: "var(--ink-4)", name: "clock", size: 18 }),
19373
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12.5, fontWeight: 500 }, children: "No times available" }),
19374
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, maxWidth: 200 }, children: "Try another day, or adjust the session length." })
19375
+ ]
19376
+ }
19377
+ );
19378
+ }
19379
+ return /* @__PURE__ */ jsxs("div", { "data-testid": "dtp-slots", style: { display: "flex", flexDirection: "column", gap: 14 }, children: [
19380
+ hint ? /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "var(--ink-2)" }, children: hint }) : null,
19381
+ PERIODS.map((p2) => {
19382
+ const inPeriod = slots.filter((s2) => s2.period === p2.id);
19383
+ if (inPeriod.length === 0) return null;
19384
+ return /* @__PURE__ */ jsxs("div", { children: [
19385
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "baseline", gap: 8, marginBottom: 8 }, children: [
19386
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 11.5, fontWeight: 700, color: "var(--ink-1)" }, children: p2.label }),
19387
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 10.5, color: "var(--ink-3)" }, children: p2.sub })
19388
+ ] }),
19389
+ /* @__PURE__ */ jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(84px, 1fr))", gap: 8 }, children: inPeriod.map((s2) => {
19390
+ const blocked = s2.available === false;
19391
+ const on = s2.id === value;
19392
+ return /* @__PURE__ */ jsx(
19393
+ "button",
19394
+ {
19395
+ "data-testid": `dtp-slot-${s2.id}`,
19396
+ disabled: blocked,
19397
+ title: blocked ? s2.reason : void 0,
19398
+ type: "button",
19399
+ onClick: () => onPick(s2.id),
19400
+ style: {
19401
+ height: 38,
19402
+ borderRadius: "var(--r-md)",
19403
+ border: `1px solid ${on ? "var(--primary)" : "var(--border-strong)"}`,
19404
+ background: on ? "var(--primary)" : "var(--surface-0)",
19405
+ color: blocked ? "var(--ink-4)" : on ? "white" : "var(--ink-1)",
19406
+ fontSize: 12.5,
19407
+ fontWeight: on ? 600 : 500,
19408
+ cursor: blocked ? "not-allowed" : "pointer",
19409
+ opacity: blocked ? 0.5 : 1,
19410
+ textDecoration: blocked ? "line-through" : "none"
19411
+ },
19412
+ children: s2.label
19413
+ },
19414
+ s2.id
19415
+ );
19416
+ }) })
19417
+ ] }, p2.id);
19418
+ })
19419
+ ] });
19420
+ }
19421
+ function DateTimePicker({
19422
+ value,
19423
+ onChange,
19424
+ loadSlots,
19425
+ isDateDisabled,
19426
+ reloadKey,
19427
+ slotsHint,
19428
+ calendarNote,
19429
+ initialStep = "date",
19430
+ todayKey,
19431
+ testId = "date-time-picker"
19432
+ }) {
19433
+ const today = todayKey ?? realTodayKey();
19434
+ const dateDisabled = useCallback(
19435
+ (k2) => isDateDisabled ? isDateDisabled(k2) : k2 < today,
19436
+ [isDateDisabled, today]
19437
+ );
19438
+ const [step, setStep] = useState(initialStep);
19439
+ const [slotsState, setSlotsState] = useState(
19440
+ value.dateKey ? { status: "loading" } : { status: "ready", slots: [] }
19441
+ );
19442
+ const reqIdRef = useRef(0);
19443
+ const runLoad = useCallback(
19444
+ (dateKey) => {
19445
+ const id = ++reqIdRef.current;
19446
+ setSlotsState({ status: "loading" });
19447
+ loadSlots(dateKey).then(
19448
+ (slots) => {
19449
+ if (reqIdRef.current === id) setSlotsState({ status: "ready", slots });
19450
+ },
19451
+ () => {
19452
+ if (reqIdRef.current === id) setSlotsState({ status: "error" });
19453
+ }
19454
+ );
19455
+ },
19456
+ [loadSlots]
19457
+ );
19458
+ const dateKeyRef = useRef(value.dateKey);
19459
+ useEffect(() => {
19460
+ dateKeyRef.current = value.dateKey;
19461
+ }, [value.dateKey]);
19462
+ useEffect(() => {
19463
+ const dateKey = dateKeyRef.current;
19464
+ if (dateKey) runLoad(dateKey);
19465
+ }, [reloadKey, runLoad]);
19466
+ const handlePickDate = (dateKey) => {
19467
+ onChange({ dateKey, slotId: null });
19468
+ setStep("time");
19469
+ runLoad(dateKey);
19470
+ };
19471
+ const handlePickSlot = (slotId) => {
19472
+ onChange({ ...value, slotId });
19473
+ };
19474
+ const pretty = prettyDate(value.dateKey);
19475
+ const selectedLabel = slotsState.status === "ready" ? slotsState.slots.find((s2) => s2.id === value.slotId)?.label : void 0;
19476
+ const note = calendarNote === void 0 ? "Past dates are off — sessions can't be created in the past." : calendarNote;
19477
+ return /* @__PURE__ */ jsxs(
19478
+ "div",
19479
+ {
19480
+ "data-testid": testId,
19481
+ style: {
19482
+ width: 340,
19483
+ maxWidth: "calc(100vw - 32px)",
19484
+ background: "var(--surface-0)",
19485
+ borderRadius: "var(--r-lg)",
19486
+ border: "1px solid var(--border-strong)",
19487
+ boxShadow: "var(--shadow-lg)",
19488
+ overflow: "hidden",
19489
+ display: "flex",
19490
+ flexDirection: "column",
19491
+ maxHeight: "min(440px, 80vh)"
19492
+ },
19493
+ children: [
19494
+ step === "date" ? /* @__PURE__ */ jsx("div", { style: { padding: 16 }, children: /* @__PURE__ */ jsx(
19495
+ CalendarPane,
19496
+ {
19497
+ isDateDisabled: dateDisabled,
19498
+ note,
19499
+ todayKey: today,
19500
+ value: value.dateKey,
19501
+ onPick: handlePickDate
19502
+ }
19503
+ ) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
19504
+ /* @__PURE__ */ jsxs(
19505
+ "button",
19506
+ {
19507
+ "data-testid": "dtp-back-to-date",
19508
+ type: "button",
19509
+ onClick: () => setStep("date"),
19510
+ style: {
19511
+ display: "flex",
19512
+ alignItems: "center",
19513
+ gap: 8,
19514
+ width: "100%",
19515
+ padding: "12px 16px",
19516
+ border: 0,
19517
+ borderBottom: "1px solid var(--divider)",
19518
+ background: "var(--surface-1)",
19519
+ cursor: "pointer",
19520
+ textAlign: "left"
19521
+ },
19522
+ children: [
19523
+ /* @__PURE__ */ jsx(Icon, { color: "var(--ink-3)", name: "chevronLeft", size: 13 }),
19524
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 12, color: "var(--ink-3)" }, children: "Date" }),
19525
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 13, fontWeight: 600, color: "var(--ink-1)", marginLeft: "auto" }, children: pretty })
19526
+ ]
19527
+ }
19528
+ ),
19529
+ /* @__PURE__ */ jsx("div", { style: { padding: 16, overflowY: "auto", flex: 1 }, children: /* @__PURE__ */ jsx(
19530
+ SlotsPane,
19531
+ {
19532
+ hint: slotsHint,
19533
+ state: slotsState,
19534
+ value: value.slotId,
19535
+ onPick: handlePickSlot,
19536
+ onRetry: () => {
19537
+ if (value.dateKey) runLoad(value.dateKey);
19538
+ }
19539
+ }
19540
+ ) })
19541
+ ] }),
19542
+ /* @__PURE__ */ jsx(
19543
+ "div",
19544
+ {
19545
+ style: {
19546
+ padding: "10px 16px",
19547
+ borderTop: "1px solid var(--divider)",
19548
+ background: "var(--surface-1)",
19549
+ display: "flex",
19550
+ alignItems: "center",
19551
+ justifyContent: "space-between",
19552
+ gap: 8,
19553
+ flexShrink: 0
19554
+ },
19555
+ children: /* @__PURE__ */ jsx(
19556
+ "span",
19557
+ {
19558
+ style: {
19559
+ fontSize: 12,
19560
+ color: "var(--ink-2)",
19561
+ minWidth: 0,
19562
+ overflow: "hidden",
19563
+ textOverflow: "ellipsis",
19564
+ whiteSpace: "nowrap"
19565
+ },
19566
+ children: value.slotId && selectedLabel ? /* @__PURE__ */ jsxs("span", { children: [
19567
+ /* @__PURE__ */ jsx("span", { style: { color: "var(--ink-3)" }, children: "Selected:" }),
19568
+ " ",
19569
+ /* @__PURE__ */ jsxs("b", { children: [
19570
+ pretty,
19571
+ " · ",
19572
+ selectedLabel
19573
+ ] })
19574
+ ] }) : step === "date" ? "Pick a date" : "Pick a time"
19575
+ }
19576
+ )
19577
+ }
19578
+ )
19579
+ ]
19580
+ }
19581
+ );
19582
+ }
19070
19583
  export {
19071
19584
  AIBadge,
19072
19585
  AICard,
@@ -19093,12 +19606,14 @@ export {
19093
19606
  Chip,
19094
19607
  Combobox,
19095
19608
  ConfirmDialog,
19609
+ CountdownPill,
19096
19610
  CountryPicker,
19097
19611
  DEFAULT_LANG_OPTIONS,
19098
19612
  DENSITY_OPTIONS,
19099
19613
  DISPLAY_OPTIONS,
19100
19614
  DarkScope,
19101
19615
  DateInput,
19616
+ DateTimePicker,
19102
19617
  Divider,
19103
19618
  Drawer,
19104
19619
  DrawerFooter,
@@ -19185,6 +19700,7 @@ export {
19185
19700
  ViewToggle,
19186
19701
  applyTheme,
19187
19702
  controlBoxStyle,
19703
+ countdownParts,
19188
19704
  ensureAIStyles,
19189
19705
  ensureSidebarNavStyles,
19190
19706
  ensureSkeletonStyles,