@flamingo-stack/openframe-frontend-core 0.0.560 → 0.0.561-1846.5000.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.
Files changed (146) hide show
  1. package/dist/{chunk-F3F3PVJ3.js → chunk-44U25GD5.js} +2 -2
  2. package/dist/{chunk-DCB4EBA5.cjs → chunk-4LHEQMOV.cjs} +3 -3
  3. package/dist/chunk-4LHEQMOV.cjs.map +1 -0
  4. package/dist/{chunk-IGO6GNG7.js → chunk-5AEHCGQV.js} +6 -6
  5. package/dist/{chunk-QUYIRF6U.cjs → chunk-AGQ4VTUX.cjs} +29 -29
  6. package/dist/{chunk-QUYIRF6U.cjs.map → chunk-AGQ4VTUX.cjs.map} +1 -1
  7. package/dist/{chunk-GMDPQ5FQ.js → chunk-B6TM3QAL.js} +4 -4
  8. package/dist/{chunk-GZSUDIJB.cjs → chunk-CR2CMLTQ.cjs} +4 -4
  9. package/dist/{chunk-GZSUDIJB.cjs.map → chunk-CR2CMLTQ.cjs.map} +1 -1
  10. package/dist/{chunk-MAX76H7U.cjs → chunk-D3OY4CJU.cjs} +3 -3
  11. package/dist/{chunk-MAX76H7U.cjs.map → chunk-D3OY4CJU.cjs.map} +1 -1
  12. package/dist/{chunk-WXJZULAB.cjs → chunk-DAVVVBNL.cjs} +26 -26
  13. package/dist/{chunk-WXJZULAB.cjs.map → chunk-DAVVVBNL.cjs.map} +1 -1
  14. package/dist/{chunk-XRP6VHOS.cjs → chunk-DHRJFUBR.cjs} +11 -11
  15. package/dist/{chunk-XRP6VHOS.cjs.map → chunk-DHRJFUBR.cjs.map} +1 -1
  16. package/dist/{chunk-N66ANBF6.cjs → chunk-EK346HD7.cjs} +39 -39
  17. package/dist/{chunk-N66ANBF6.cjs.map → chunk-EK346HD7.cjs.map} +1 -1
  18. package/dist/{chunk-UR2JKFIO.cjs → chunk-FSWJCGRJ.cjs} +7 -7
  19. package/dist/{chunk-UR2JKFIO.cjs.map → chunk-FSWJCGRJ.cjs.map} +1 -1
  20. package/dist/{chunk-RDFMBOSI.js → chunk-GKGQ4DWE.js} +120 -48
  21. package/dist/chunk-GKGQ4DWE.js.map +1 -0
  22. package/dist/{chunk-FEI4KQYW.cjs → chunk-GWRQ5EEI.cjs} +953 -881
  23. package/dist/chunk-GWRQ5EEI.cjs.map +1 -0
  24. package/dist/{chunk-NCU45OV4.cjs → chunk-GYC3OTBI.cjs} +9 -9
  25. package/dist/{chunk-NCU45OV4.cjs.map → chunk-GYC3OTBI.cjs.map} +1 -1
  26. package/dist/{chunk-WIPZ65KU.js → chunk-JCQUWIPT.js} +3 -3
  27. package/dist/{chunk-2IL7SPBP.js → chunk-KRYLVEXU.js} +2 -2
  28. package/dist/{chunk-YNRK3N2D.js → chunk-KWNVQZ5Y.js} +4 -4
  29. package/dist/{chunk-QXDEXQDI.js → chunk-MLSDBNKT.js} +2 -2
  30. package/dist/{chunk-65ZXR4YJ.js → chunk-NGY4KET4.js} +2 -2
  31. package/dist/{chunk-QKGNSXF2.js → chunk-OCJG3X4U.js} +2 -2
  32. package/dist/{chunk-VAAQZZHT.js → chunk-ONDI64M3.js} +2 -2
  33. package/dist/{chunk-BKQWCJP5.js → chunk-QGQ26NEE.js} +2 -2
  34. package/dist/{chunk-RSZXB6J2.js → chunk-RDKJCZHY.js} +3 -3
  35. package/dist/chunk-RDKJCZHY.js.map +1 -0
  36. package/dist/{chunk-CSXEOFJ4.cjs → chunk-SUPBFRUK.cjs} +5 -5
  37. package/dist/{chunk-CSXEOFJ4.cjs.map → chunk-SUPBFRUK.cjs.map} +1 -1
  38. package/dist/{chunk-I7RGBCG6.cjs → chunk-UJ7MSY6F.cjs} +31 -31
  39. package/dist/{chunk-I7RGBCG6.cjs.map → chunk-UJ7MSY6F.cjs.map} +1 -1
  40. package/dist/{chunk-UW42K54L.cjs → chunk-UV53Z64O.cjs} +14 -14
  41. package/dist/{chunk-UW42K54L.cjs.map → chunk-UV53Z64O.cjs.map} +1 -1
  42. package/dist/{chunk-NFMYNXFH.cjs → chunk-WCM4BGHO.cjs} +97 -97
  43. package/dist/{chunk-NFMYNXFH.cjs.map → chunk-WCM4BGHO.cjs.map} +1 -1
  44. package/dist/{chunk-57G6CG2E.js → chunk-YUAKZNK5.js} +6 -6
  45. package/dist/{chunk-XQJPFAA7.cjs → chunk-ZENRHE55.cjs} +62 -62
  46. package/dist/{chunk-XQJPFAA7.cjs.map → chunk-ZENRHE55.cjs.map} +1 -1
  47. package/dist/{chunk-PHIRRCPY.js → chunk-ZJ7RI62F.js} +2 -2
  48. package/dist/components/calendar.cjs +81 -4
  49. package/dist/components/calendar.cjs.map +1 -1
  50. package/dist/components/calendar.js +81 -4
  51. package/dist/components/calendar.js.map +1 -1
  52. package/dist/components/case-studies/index.cjs +9 -9
  53. package/dist/components/case-studies/index.js +3 -3
  54. package/dist/components/chat/index.cjs +3 -3
  55. package/dist/components/chat/index.js +2 -2
  56. package/dist/components/contact/index.cjs +4 -4
  57. package/dist/components/contact/index.js +3 -3
  58. package/dist/components/docs/index.cjs +6 -6
  59. package/dist/components/docs/index.js +5 -5
  60. package/dist/components/embeds/index.cjs +4 -4
  61. package/dist/components/embeds/index.js +3 -3
  62. package/dist/components/faq/index.cjs +4 -4
  63. package/dist/components/faq/index.js +3 -3
  64. package/dist/components/features/index.cjs +5 -3
  65. package/dist/components/features/index.cjs.map +1 -1
  66. package/dist/components/features/index.d.ts +1 -1
  67. package/dist/components/features/index.d.ts.map +1 -1
  68. package/dist/components/features/index.js +4 -2
  69. package/dist/components/features/use-walkthrough-video.d.ts +1 -1
  70. package/dist/components/features/use-walkthrough-video.d.ts.map +1 -1
  71. package/dist/components/features/{floating-walkthrough-video.d.ts → walkthrough-video.d.ts} +61 -7
  72. package/dist/components/features/walkthrough-video.d.ts.map +1 -0
  73. package/dist/components/help-center-pages/index.cjs +23 -23
  74. package/dist/components/help-center-pages/index.js +14 -14
  75. package/dist/components/index.cjs +144 -140
  76. package/dist/components/index.cjs.map +1 -1
  77. package/dist/components/index.js +16 -12
  78. package/dist/components/index.js.map +1 -1
  79. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  80. package/dist/components/meeting-scheduler/context-panel.d.ts +24 -6
  81. package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
  82. package/dist/components/meeting-scheduler/index.cjs +529 -425
  83. package/dist/components/meeting-scheduler/index.cjs.map +1 -1
  84. package/dist/components/meeting-scheduler/index.d.ts +54 -1
  85. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  86. package/dist/components/meeting-scheduler/index.js +507 -403
  87. package/dist/components/meeting-scheduler/index.js.map +1 -1
  88. package/dist/components/meeting-scheduler/slot-picker.d.ts +35 -31
  89. package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
  90. package/dist/components/navigation/index.cjs +3 -3
  91. package/dist/components/navigation/index.js +2 -2
  92. package/dist/components/onboarding-guides/index.cjs +6 -6
  93. package/dist/components/onboarding-guides/index.js +5 -5
  94. package/dist/components/related-content/index.cjs +4 -4
  95. package/dist/components/related-content/index.js +3 -3
  96. package/dist/components/tickets/index.cjs +7 -7
  97. package/dist/components/tickets/index.js +6 -6
  98. package/dist/components/ui/date-picker.d.ts +62 -1
  99. package/dist/components/ui/date-picker.d.ts.map +1 -1
  100. package/dist/components/ui/field-wrapper.d.ts +7 -0
  101. package/dist/components/ui/field-wrapper.d.ts.map +1 -1
  102. package/dist/components/ui/file-manager/index.cjs +36 -36
  103. package/dist/components/ui/file-manager/index.js +1 -1
  104. package/dist/components/ui/index.cjs +5 -3
  105. package/dist/components/ui/index.cjs.map +1 -1
  106. package/dist/components/ui/index.js +4 -2
  107. package/dist/hooks/use-meeting-booking.d.ts +31 -8
  108. package/dist/hooks/use-meeting-booking.d.ts.map +1 -1
  109. package/dist/index.cjs +7 -3
  110. package/dist/index.cjs.map +1 -1
  111. package/dist/index.js +6 -2
  112. package/package.json +1 -1
  113. package/src/components/features/{.floating-walkthrough-video.md → .walkthrough-video.md} +8 -5
  114. package/src/components/features/index.ts +1 -1
  115. package/src/components/features/use-walkthrough-video.ts +1 -1
  116. package/src/components/features/{floating-walkthrough-video.tsx → walkthrough-video.tsx} +108 -22
  117. package/src/components/meeting-scheduler/booking-form.tsx +60 -51
  118. package/src/components/meeting-scheduler/confirmation.tsx +1 -1
  119. package/src/components/meeting-scheduler/context-panel.tsx +166 -68
  120. package/src/components/meeting-scheduler/index.tsx +227 -81
  121. package/src/components/meeting-scheduler/slot-picker.tsx +275 -127
  122. package/src/components/ui/date-picker.tsx +200 -47
  123. package/src/components/ui/field-wrapper.tsx +9 -2
  124. package/src/hooks/use-meeting-booking.ts +97 -73
  125. package/dist/chunk-7J4DGFHZ.js +0 -88
  126. package/dist/chunk-7J4DGFHZ.js.map +0 -1
  127. package/dist/chunk-DCB4EBA5.cjs.map +0 -1
  128. package/dist/chunk-FEI4KQYW.cjs.map +0 -1
  129. package/dist/chunk-MKPJYEOR.cjs +0 -88
  130. package/dist/chunk-MKPJYEOR.cjs.map +0 -1
  131. package/dist/chunk-RDFMBOSI.js.map +0 -1
  132. package/dist/chunk-RSZXB6J2.js.map +0 -1
  133. package/dist/components/features/floating-walkthrough-video.d.ts.map +0 -1
  134. /package/dist/{chunk-F3F3PVJ3.js.map → chunk-44U25GD5.js.map} +0 -0
  135. /package/dist/{chunk-IGO6GNG7.js.map → chunk-5AEHCGQV.js.map} +0 -0
  136. /package/dist/{chunk-GMDPQ5FQ.js.map → chunk-B6TM3QAL.js.map} +0 -0
  137. /package/dist/{chunk-WIPZ65KU.js.map → chunk-JCQUWIPT.js.map} +0 -0
  138. /package/dist/{chunk-2IL7SPBP.js.map → chunk-KRYLVEXU.js.map} +0 -0
  139. /package/dist/{chunk-YNRK3N2D.js.map → chunk-KWNVQZ5Y.js.map} +0 -0
  140. /package/dist/{chunk-QXDEXQDI.js.map → chunk-MLSDBNKT.js.map} +0 -0
  141. /package/dist/{chunk-65ZXR4YJ.js.map → chunk-NGY4KET4.js.map} +0 -0
  142. /package/dist/{chunk-QKGNSXF2.js.map → chunk-OCJG3X4U.js.map} +0 -0
  143. /package/dist/{chunk-VAAQZZHT.js.map → chunk-ONDI64M3.js.map} +0 -0
  144. /package/dist/{chunk-BKQWCJP5.js.map → chunk-QGQ26NEE.js.map} +0 -0
  145. /package/dist/{chunk-57G6CG2E.js.map → chunk-YUAKZNK5.js.map} +0 -0
  146. /package/dist/{chunk-PHIRRCPY.js.map → chunk-ZJ7RI62F.js.map} +0 -0
@@ -257,7 +257,7 @@ import {
257
257
  Skeleton,
258
258
  useCollisionBoundary,
259
259
  usePortalContainer
260
- } from "./chunk-RSZXB6J2.js";
260
+ } from "./chunk-RDKJCZHY.js";
261
261
  import {
262
262
  CheckboxCheckmarkIcon,
263
263
  SearchIcon
@@ -18402,6 +18402,7 @@ function CalendarNavButton({ direction, onClick, disabled, "aria-label": ariaLab
18402
18402
  type: "button",
18403
18403
  variant: "outline",
18404
18404
  size: "icon",
18405
+ className: "shrink-0",
18405
18406
  onClick,
18406
18407
  disabled,
18407
18408
  "aria-label": ariaLabel,
@@ -18417,7 +18418,11 @@ function DatePickerCalendar({
18417
18418
  fromDate,
18418
18419
  toDate: toDate3,
18419
18420
  locale,
18420
- fluid = false
18421
+ fluid = false,
18422
+ bare = false,
18423
+ disabledDays: extraDisabledDays,
18424
+ month: monthProp,
18425
+ onMonthChange
18421
18426
  }) {
18422
18427
  const today = /* @__PURE__ */ new Date();
18423
18428
  const isMdUp = useMdUp() ?? true;
@@ -18453,18 +18458,43 @@ function DatePickerCalendar({
18453
18458
  setHoveredDate(void 0);
18454
18459
  onSelect(completed);
18455
18460
  };
18456
- const cellOuter = fluid ? "flex-1 aspect-square min-w-0" : "size-10";
18457
- const cellInner = fluid ? "size-full" : "size-10";
18461
+ const isFluid = fluid || bare;
18462
+ const cellOuter = bare ? "flex-1 min-w-0 h-[32px]" : isFluid ? "flex-1 aspect-square min-w-0" : "size-10";
18463
+ const cellInner = bare ? "h-full w-auto aspect-square rounded-[6px]" : isFluid ? "size-full" : "size-10";
18464
+ const weekdayOuter = bare ? "flex-1 min-w-0 h-6" : cellOuter;
18465
+ const hoverClass = bare ? "[&>button]:hover:bg-ods-bg-surface" : "hover:bg-ods-bg-surface hover:rounded-[6px]";
18466
+ const todayClass = bare ? "[&>button]:bg-ods-bg-surface [&>button]:hover:!bg-ods-bg-surface" : "bg-ods-bg-surface rounded-[6px] hover:!bg-ods-bg-surface";
18467
+ const dayNumber = (date) => date.getFullYear() * 1e4 + date.getMonth() * 100 + date.getDate();
18468
+ const isSelectedDay = (date) => {
18469
+ const n = dayNumber(date);
18470
+ if (mode === "single") {
18471
+ const picked = selected;
18472
+ return !!picked && dayNumber(picked) === n;
18473
+ }
18474
+ const range = rangeSelected;
18475
+ if (!range?.from) return false;
18476
+ if (!range.to) return dayNumber(range.from) === n;
18477
+ return n >= dayNumber(range.from) && n <= dayNumber(range.to);
18478
+ };
18479
+ const isUnclaimedToday = (date) => dayNumber(date) === dayNumber(today) && !isSelectedDay(date);
18480
+ const selectedClass = bare ? "[&>button]:!bg-ods-accent [&>button]:!text-ods-card [&>button]:!font-bold [&>button]:hover:!bg-ods-accent" : "!bg-ods-accent !text-ods-card !font-bold !rounded-[6px] hover:!bg-ods-accent";
18481
+ const surfaceClass = bare ? "flex w-full flex-col" : cn("bg-ods-card border border-ods-border rounded-[6px] overflow-hidden", isFluid && "w-full");
18482
+ const captionRowClass = cn("flex items-center justify-between gap-1", bare ? "shrink-0" : "px-4 pt-4");
18483
+ const captionClass = "min-w-0 flex-1 truncate text-center text-h4 text-ods-text-primary";
18458
18484
  const classNames = {
18459
- root: cn("p-4 date-picker-calendar", fluid && "w-full"),
18460
- months: "flex gap-8",
18461
- month: cn("flex flex-col gap-2", fluid && "w-full"),
18485
+ root: cn(
18486
+ "date-picker-calendar",
18487
+ bare ? "flex w-full flex-col pt-[var(--spacing-system-xsf)]" : cn("p-4", isFluid && "w-full")
18488
+ ),
18489
+ months: cn("flex gap-8", bare && "w-full"),
18490
+ month: cn("flex flex-col", bare ? "w-full" : cn("gap-2", isFluid && "w-full")),
18462
18491
  month_caption: "hidden",
18463
18492
  nav: "hidden",
18464
- month_grid: cn("border-collapse", fluid && "w-full"),
18493
+ month_grid: cn("border-collapse", bare ? "flex w-full flex-col" : isFluid && "w-full"),
18465
18494
  weekdays: "flex",
18495
+ ...bare ? { weeks: "flex flex-col" } : {},
18466
18496
  weekday: cn(
18467
- cellOuter,
18497
+ weekdayOuter,
18468
18498
  "flex items-center justify-center",
18469
18499
  "text-h6 text-ods-text-secondary"
18470
18500
  ),
@@ -18475,7 +18505,7 @@ function DatePickerCalendar({
18475
18505
  "text-h4 text-ods-text-primary",
18476
18506
  "cursor-pointer",
18477
18507
  "transition-colors duration-150",
18478
- "hover:bg-ods-bg-surface hover:rounded-[6px]"
18508
+ hoverClass
18479
18509
  ),
18480
18510
  day_button: cn(
18481
18511
  cellInner,
@@ -18483,9 +18513,10 @@ function DatePickerCalendar({
18483
18513
  "cursor-pointer bg-transparent border-none outline-none",
18484
18514
  "text-inherit font-inherit"
18485
18515
  ),
18486
- today: "bg-ods-bg-surface rounded-[6px] hover:!bg-ods-bg-surface",
18516
+ // Painted through the `todayTint` modifier instead — see `isUnclaimedToday`.
18517
+ today: "",
18487
18518
  selected: cn(
18488
- "!bg-ods-accent !text-ods-card !font-bold !rounded-[6px] hover:!bg-ods-accent",
18519
+ selectedClass,
18489
18520
  // In range mode, selected class should not override range_start/range_end/range_middle
18490
18521
  mode === "range" && "range-selected"
18491
18522
  ),
@@ -18503,7 +18534,19 @@ function DatePickerCalendar({
18503
18534
  // `disabled` <button> does not inherit the cell's cursor on its own.
18504
18535
  disabled: cn(
18505
18536
  "!text-ods-text-disabled !cursor-not-allowed hover:!bg-transparent",
18506
- "[&>button]:!cursor-not-allowed [&>button]:!text-ods-text-disabled"
18537
+ "[&>button]:!cursor-not-allowed [&>button]:!text-ods-text-disabled",
18538
+ // Also drop the `today` tint, or an unselectable today renders BLANK:
18539
+ // `--color-text-disabled` and `--color-bg-surface` are the SAME token
18540
+ // (`--ods-system-greys-soft-grey`), so the number disappears into the
18541
+ // highlight — grey on identical grey. Reachable by any picker whose
18542
+ // `fromDate` is in the future, and permanently by the meeting scheduler,
18543
+ // where today usually has no bookable slots left.
18544
+ //
18545
+ // Dropping the tint rather than repainting the text: a disabled day is
18546
+ // not actionable, so a highlight claiming otherwise is the wrong signal.
18547
+ // The day still reads as today's position in the month by being the one
18548
+ // dimmed cell between yesterday and tomorrow.
18549
+ "!bg-transparent [&>button]:!bg-transparent"
18507
18550
  ),
18508
18551
  hidden: "invisible",
18509
18552
  // Range styles matching Figma design:
@@ -18521,33 +18564,34 @@ function DatePickerCalendar({
18521
18564
  ),
18522
18565
  range_middle: "range-middle !bg-ods-open-yellow-light !text-ods-card !font-medium !rounded-none hover:!bg-ods-open-yellow-light"
18523
18566
  };
18524
- const [month, setMonth] = React48.useState(
18567
+ const [uncontrolledMonth, setUncontrolledMonth] = React48.useState(
18525
18568
  mode === "single" ? selected || today : selected?.from || today
18526
18569
  );
18570
+ const month = monthProp ?? uncontrolledMonth;
18571
+ const changeMonth = (next) => {
18572
+ setUncontrolledMonth(next);
18573
+ onMonthChange?.(next);
18574
+ };
18527
18575
  const disabledDays = React48.useMemo(() => {
18528
18576
  const matchers = [];
18529
18577
  if (fromDate) matchers.push({ before: fromDate });
18530
18578
  if (toDate3) matchers.push({ after: toDate3 });
18579
+ if (extraDisabledDays) {
18580
+ matchers.push(...Array.isArray(extraDisabledDays) ? extraDisabledDays : [extraDisabledDays]);
18581
+ }
18531
18582
  return matchers;
18532
- }, [fromDate, toDate3]);
18583
+ }, [fromDate, toDate3, extraDisabledDays]);
18533
18584
  const monthIndex = (date) => date.getFullYear() * 12 + date.getMonth();
18534
18585
  const lastVisibleMonth = monthIndex(month) + (monthsToShow === 2 ? 1 : 0);
18535
18586
  const canGoPrevious = !fromDate || monthIndex(month) > monthIndex(fromDate);
18536
18587
  const canGoNext = !toDate3 || lastVisibleMonth < monthIndex(toDate3);
18537
- const handlePreviousMonth = () => {
18538
- setMonth((prev) => {
18539
- const newMonth = new Date(prev);
18540
- newMonth.setMonth(newMonth.getMonth() - 1);
18541
- return newMonth;
18542
- });
18543
- };
18544
- const handleNextMonth = () => {
18545
- setMonth((prev) => {
18546
- const newMonth = new Date(prev);
18547
- newMonth.setMonth(newMonth.getMonth() + 1);
18548
- return newMonth;
18549
- });
18588
+ const shiftMonth = (by) => {
18589
+ const next = new Date(month);
18590
+ next.setMonth(next.getMonth() + by);
18591
+ changeMonth(next);
18550
18592
  };
18593
+ const handlePreviousMonth = () => shiftMonth(-1);
18594
+ const handleNextMonth = () => shiftMonth(1);
18551
18595
  const formatMonthYear = (date) => {
18552
18596
  return date.toLocaleDateString("en-US", {
18553
18597
  month: "long",
@@ -18586,8 +18630,8 @@ function DatePickerCalendar({
18586
18630
  }
18587
18631
  `;
18588
18632
  if (mode === "single") {
18589
- return /* @__PURE__ */ jsxs88("div", { className: cn("bg-ods-card border border-ods-border rounded-[6px] overflow-hidden", fluid && "w-full"), children: [
18590
- /* @__PURE__ */ jsxs88("div", { className: "flex items-center justify-between px-4 pt-4", children: [
18633
+ return /* @__PURE__ */ jsxs88("div", { className: surfaceClass, children: [
18634
+ /* @__PURE__ */ jsxs88("div", { className: captionRowClass, children: [
18591
18635
  /* @__PURE__ */ jsx117(
18592
18636
  CalendarNavButton,
18593
18637
  {
@@ -18597,7 +18641,7 @@ function DatePickerCalendar({
18597
18641
  "aria-label": "Previous month"
18598
18642
  }
18599
18643
  ),
18600
- /* @__PURE__ */ jsx117("span", { className: "text-h4 text-ods-text-primary", children: formatMonthYear(month) }),
18644
+ /* @__PURE__ */ jsx117("span", { className: captionClass, children: formatMonthYear(month) }),
18601
18645
  /* @__PURE__ */ jsx117(
18602
18646
  CalendarNavButton,
18603
18647
  {
@@ -18615,8 +18659,10 @@ function DatePickerCalendar({
18615
18659
  selected,
18616
18660
  onSelect: (date) => onSelect(date),
18617
18661
  month,
18618
- onMonthChange: setMonth,
18662
+ onMonthChange: changeMonth,
18619
18663
  classNames,
18664
+ modifiers: { todayTint: isUnclaimedToday },
18665
+ modifiersClassNames: { todayTint: todayClass },
18620
18666
  showOutsideDays: true,
18621
18667
  fixedWeeks: true,
18622
18668
  disabled: disabledDays,
@@ -18629,7 +18675,7 @@ function DatePickerCalendar({
18629
18675
  return /* @__PURE__ */ jsxs88(
18630
18676
  "div",
18631
18677
  {
18632
- className: cn("bg-ods-card border border-ods-border rounded-md overflow-hidden", fluid && "w-full"),
18678
+ className: cn("bg-ods-card border border-ods-border rounded-md overflow-hidden", isFluid && "w-full"),
18633
18679
  onMouseLeave: () => setHoveredDate(void 0),
18634
18680
  children: [
18635
18681
  /* @__PURE__ */ jsx117("style", { children: rangeStyles }),
@@ -18645,7 +18691,7 @@ function DatePickerCalendar({
18645
18691
  "aria-label": "Previous month"
18646
18692
  }
18647
18693
  ),
18648
- /* @__PURE__ */ jsx117("span", { className: "text-h4 text-ods-text-primary", children: formatMonthYear(month) }),
18694
+ /* @__PURE__ */ jsx117("span", { className: captionClass, children: formatMonthYear(month) }),
18649
18695
  monthsToShow === 1 && /* @__PURE__ */ jsx117(
18650
18696
  CalendarNavButton,
18651
18697
  {
@@ -18664,10 +18710,10 @@ function DatePickerCalendar({
18664
18710
  selected: draftRange,
18665
18711
  onSelect: (_range, triggerDate) => handleRangeSelect(triggerDate),
18666
18712
  onDayMouseEnter: (day) => setHoveredDate(day),
18667
- modifiers: { preview: isPreviewDate },
18668
- modifiersClassNames: { preview: "bg-ods-bg-surface" },
18713
+ modifiers: { preview: isPreviewDate, todayTint: isUnclaimedToday },
18714
+ modifiersClassNames: { preview: "bg-ods-bg-surface", todayTint: todayClass },
18669
18715
  month,
18670
- onMonthChange: setMonth,
18716
+ onMonthChange: changeMonth,
18671
18717
  classNames,
18672
18718
  showOutsideDays: true,
18673
18719
  fixedWeeks: true,
@@ -18680,7 +18726,7 @@ function DatePickerCalendar({
18680
18726
  monthsToShow === 2 && /* @__PURE__ */ jsxs88("div", { className: "flex-1 border-l border-ods-border", children: [
18681
18727
  /* @__PURE__ */ jsxs88("div", { className: "flex items-center justify-between px-4 pt-4", children: [
18682
18728
  /* @__PURE__ */ jsx117("div", { className: "size-10 md:size-12" }),
18683
- /* @__PURE__ */ jsx117("span", { className: "text-h4 text-ods-text-primary", children: formatMonthYear(getSecondMonth(month)) }),
18729
+ /* @__PURE__ */ jsx117("span", { className: captionClass, children: formatMonthYear(getSecondMonth(month)) }),
18684
18730
  /* @__PURE__ */ jsx117(
18685
18731
  CalendarNavButton,
18686
18732
  {
@@ -18698,8 +18744,8 @@ function DatePickerCalendar({
18698
18744
  selected: draftRange,
18699
18745
  onSelect: (_range, triggerDate) => handleRangeSelect(triggerDate),
18700
18746
  onDayMouseEnter: (day) => setHoveredDate(day),
18701
- modifiers: { preview: isPreviewDate },
18702
- modifiersClassNames: { preview: "bg-ods-bg-surface" },
18747
+ modifiers: { preview: isPreviewDate, todayTint: isUnclaimedToday },
18748
+ modifiersClassNames: { preview: "bg-ods-bg-surface", todayTint: todayClass },
18703
18749
  month: getSecondMonth(month),
18704
18750
  classNames,
18705
18751
  showOutsideDays: true,
@@ -34918,7 +34964,7 @@ function VideoBitesDisplay({
34918
34964
  );
34919
34965
  }
34920
34966
 
34921
- // src/components/features/floating-walkthrough-video.tsx
34967
+ // src/components/features/walkthrough-video.tsx
34922
34968
  init_cn();
34923
34969
  init_button2();
34924
34970
  import { useCallback as useCallback28, useEffect as useEffect57, useMemo as useMemo35, useRef as useRef42, useState as useState75 } from "react";
@@ -34926,7 +34972,7 @@ import * as DialogPrimitive3 from "@radix-ui/react-dialog";
34926
34972
  import { Fragment as Fragment48, jsx as jsx261, jsxs as jsxs200 } from "react/jsx-runtime";
34927
34973
  var isAtEnd = (duration, time) => duration > 0 && duration - time < 1;
34928
34974
  var WALKTHROUGH_Z = "z-[9980]";
34929
- function FloatingWalkthroughVideo({
34975
+ function WalkthroughVideo({
34930
34976
  video,
34931
34977
  open: openProp,
34932
34978
  onOpenChange,
@@ -34934,12 +34980,17 @@ function FloatingWalkthroughVideo({
34934
34980
  defaultOpenPaused,
34935
34981
  deepLinkParam = WALKTHROUGH_OPEN_QUERY_PARAM,
34936
34982
  label = "Play Demo Video",
34983
+ placement,
34984
+ // Keeps the FLOATING card off the critical path. The inline preset passes 0:
34985
+ // an in-page block is part of a page the visitor is already looking at, so
34986
+ // staggering it in would only jump the layout.
34937
34987
  appearDelayMs = 3e3,
34938
34988
  dismissal = {},
34939
34989
  hideNearSelector = "footer",
34940
34990
  pathname,
34941
34991
  className
34942
34992
  }) {
34993
+ const inline = placement === "inline";
34943
34994
  const dismissEnabled = dismissal !== false;
34944
34995
  const storageKey = dismissEnabled && dismissal.storageKey || WALKTHROUGH_VIDEO_DISMISS_KEY;
34945
34996
  const dismissalId = video?.id != null ? String(video.id) : "dismissed";
@@ -35011,6 +35062,10 @@ function FloatingWalkthroughVideo({
35011
35062
  const previewAllowed = !previewSuppressed && !isYouTube;
35012
35063
  useEffect57(() => {
35013
35064
  if (!mounted) return;
35065
+ if (inline) {
35066
+ setFooterHidden(false);
35067
+ return;
35068
+ }
35014
35069
  const el = typeof document !== "undefined" ? document.querySelector(hideNearSelector) : null;
35015
35070
  if (!el || typeof IntersectionObserver === "undefined") {
35016
35071
  setFooterHidden(false);
@@ -35022,7 +35077,7 @@ function FloatingWalkthroughVideo({
35022
35077
  );
35023
35078
  io.observe(el);
35024
35079
  return () => io.disconnect();
35025
- }, [mounted, hideNearSelector, pathname]);
35080
+ }, [mounted, inline, hideNearSelector, pathname]);
35026
35081
  useEffect57(() => {
35027
35082
  if (!resumeMode) return;
35028
35083
  const onVis = () => {
@@ -35272,7 +35327,10 @@ function FloatingWalkthroughVideo({
35272
35327
  // badge accents off it. It must live on an element that actually
35273
35328
  // receives pointer events — the media layer is pointer-events-none, so
35274
35329
  // a group inside it can never match :hover.
35275
- "group/card pointer-events-auto relative overflow-hidden rounded-lg border border-ods-border bg-ods-card shadow-2xl",
35330
+ "group/card pointer-events-auto relative overflow-hidden rounded-md border border-ods-border bg-ods-card",
35331
+ // The lift is what separates a FLOATING card from the page beneath it;
35332
+ // an in-flow block sitting inside a host card needs no shadow at all.
35333
+ !inline && "shadow-2xl",
35276
35334
  // MOBILE = PiP dimensions, not a shrunken desktop card. This is an
35277
35335
  // UNINVITED overlay on the smallest screens, so it is sized against
35278
35336
  // the corner-PiP conventions, NOT against system PiP (which is
@@ -35288,7 +35346,9 @@ function FloatingWalkthroughVideo({
35288
35346
  // Do NOT go below ~150px: the corner chrome (32px transport pair +
35289
35347
  // 32px dismiss + the title pill) stops fitting, and the card's own
35290
35348
  // controls — not the poster — are what set the real floor here.
35291
- "aspect-video w-[min(52vw,192px)] sm:w-80 transition-opacity duration-200",
35349
+ "aspect-video transition-opacity duration-200",
35350
+ // Inline: the HOST owns the width — the card only keeps 16:9 within it.
35351
+ inline ? "w-full" : "w-[min(52vw,192px)] sm:w-80",
35292
35352
  footerHidden ? "opacity-0 pointer-events-none" : "opacity-100",
35293
35353
  className
35294
35354
  ),
@@ -35415,7 +35475,11 @@ function FloatingWalkthroughVideo({
35415
35475
  }
35416
35476
  );
35417
35477
  return /* @__PURE__ */ jsxs200(Fragment48, { children: [
35418
- showCard && /* @__PURE__ */ jsx261(
35478
+ showCard && (inline ? (
35479
+ // No wrapper: a positioning / z-index / safe-area shell around an
35480
+ // in-flow block is exactly what stops it sizing to its container.
35481
+ collapsed
35482
+ ) : /* @__PURE__ */ jsx261(
35419
35483
  "div",
35420
35484
  {
35421
35485
  className: cn(
@@ -35426,7 +35490,7 @@ function FloatingWalkthroughVideo({
35426
35490
  style: { paddingBottom: "max(var(--spacing-system-mf), env(safe-area-inset-bottom))" },
35427
35491
  children: collapsed
35428
35492
  }
35429
- ),
35493
+ )),
35430
35494
  /* @__PURE__ */ jsx261(DialogPrimitive3.Root, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs200(DialogPortal, { children: [
35431
35495
  /* @__PURE__ */ jsx261(DialogOverlay, {}),
35432
35496
  /* @__PURE__ */ jsxs200(
@@ -35498,6 +35562,12 @@ function FloatingWalkthroughVideo({
35498
35562
  ] }) })
35499
35563
  ] });
35500
35564
  }
35565
+ function FloatingWalkthroughVideo(props) {
35566
+ return /* @__PURE__ */ jsx261(WalkthroughVideo, { ...props, placement: "floating" });
35567
+ }
35568
+ function InlineWalkthroughVideo(props) {
35569
+ return /* @__PURE__ */ jsx261(WalkthroughVideo, { ...props, placement: "inline", appearDelayMs: 0, dismissal: false });
35570
+ }
35501
35571
 
35502
35572
  // src/components/features/use-walkthrough-video.ts
35503
35573
  import { useQuery } from "@tanstack/react-query";
@@ -62522,6 +62592,7 @@ export {
62522
62592
  SelectLabel,
62523
62593
  SelectItem,
62524
62594
  SelectSeparator,
62595
+ DatePickerCalendar,
62525
62596
  DatePicker,
62526
62597
  DatePickerInput,
62527
62598
  DatePickerInputSimple,
@@ -63429,6 +63500,7 @@ export {
63429
63500
  WarningBlock,
63430
63501
  VideoBitesDisplay,
63431
63502
  FloatingWalkthroughVideo,
63503
+ InlineWalkthroughVideo,
63432
63504
  useWalkthroughVideo,
63433
63505
  VideoSourceSelector,
63434
63506
  ConfidenceBadge,
@@ -63615,4 +63687,4 @@ export {
63615
63687
  LogsList,
63616
63688
  assets
63617
63689
  };
63618
- //# sourceMappingURL=chunk-RDFMBOSI.js.map
63690
+ //# sourceMappingURL=chunk-GKGQ4DWE.js.map