@flamingo-stack/openframe-frontend-core 0.0.514 → 0.0.515-1648.4251.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 (102) hide show
  1. package/dist/{chunk-MFRG4Q2T.js → chunk-5RHFQ4JG.js} +36 -9
  2. package/dist/{chunk-MFRG4Q2T.js.map → chunk-5RHFQ4JG.js.map} +1 -1
  3. package/dist/{chunk-4ZUZKMTK.js → chunk-5WKVLIP3.js} +2 -2
  4. package/dist/{chunk-IXMIDBH7.cjs → chunk-5YX7F5G6.cjs} +37 -37
  5. package/dist/{chunk-IXMIDBH7.cjs.map → chunk-5YX7F5G6.cjs.map} +1 -1
  6. package/dist/{chunk-JFNRNKHA.cjs → chunk-7PGYALRK.cjs} +31 -31
  7. package/dist/{chunk-JFNRNKHA.cjs.map → chunk-7PGYALRK.cjs.map} +1 -1
  8. package/dist/{chunk-JX3Z3FL7.cjs → chunk-7QYBXWYI.cjs} +4 -4
  9. package/dist/{chunk-JX3Z3FL7.cjs.map → chunk-7QYBXWYI.cjs.map} +1 -1
  10. package/dist/{chunk-NRS7WK5A.cjs → chunk-AW66QABG.cjs} +3 -3
  11. package/dist/{chunk-NRS7WK5A.cjs.map → chunk-AW66QABG.cjs.map} +1 -1
  12. package/dist/{chunk-3ZD4SMZU.cjs → chunk-B6YOWMZF.cjs} +87 -87
  13. package/dist/{chunk-3ZD4SMZU.cjs.map → chunk-B6YOWMZF.cjs.map} +1 -1
  14. package/dist/{chunk-KSUKPZZ7.cjs → chunk-C646ZLOV.cjs} +26 -26
  15. package/dist/{chunk-KSUKPZZ7.cjs.map → chunk-C646ZLOV.cjs.map} +1 -1
  16. package/dist/{chunk-4RNPMT4R.cjs → chunk-E4IB3CTA.cjs} +14 -14
  17. package/dist/{chunk-4RNPMT4R.cjs.map → chunk-E4IB3CTA.cjs.map} +1 -1
  18. package/dist/{chunk-SFDUS3OE.js → chunk-IA4USSHI.js} +5 -5
  19. package/dist/{chunk-7AQSXQEL.js → chunk-IVTENGMF.js} +5 -2
  20. package/dist/{chunk-7AQSXQEL.js.map → chunk-IVTENGMF.js.map} +1 -1
  21. package/dist/{chunk-4J6RPYDD.js → chunk-J4AL3YOT.js} +2 -2
  22. package/dist/{chunk-AWYGNKF3.cjs → chunk-JT7FFD3R.cjs} +5 -5
  23. package/dist/{chunk-AWYGNKF3.cjs.map → chunk-JT7FFD3R.cjs.map} +1 -1
  24. package/dist/{chunk-5BAGE7AI.cjs → chunk-K26W23C2.cjs} +5 -2
  25. package/dist/chunk-K26W23C2.cjs.map +1 -0
  26. package/dist/{chunk-LF544M72.cjs → chunk-LBIWRR75.cjs} +61 -61
  27. package/dist/{chunk-LF544M72.cjs.map → chunk-LBIWRR75.cjs.map} +1 -1
  28. package/dist/{chunk-OWTY6TBV.js → chunk-MHW4WBMB.js} +4 -4
  29. package/dist/{chunk-PHKKQ3MC.js → chunk-MTII5NXM.js} +6 -6
  30. package/dist/{chunk-V4LFZGGX.js → chunk-NVMRBO7R.js} +2 -2
  31. package/dist/{chunk-MTC6GZIG.cjs → chunk-OUPSNYRI.cjs} +26 -26
  32. package/dist/{chunk-MTC6GZIG.cjs.map → chunk-OUPSNYRI.cjs.map} +1 -1
  33. package/dist/{chunk-IOKEKWPA.js → chunk-P57FCOI6.js} +2 -2
  34. package/dist/{chunk-QRL3GOQD.cjs → chunk-QHTFPOEL.cjs} +7 -7
  35. package/dist/{chunk-QRL3GOQD.cjs.map → chunk-QHTFPOEL.cjs.map} +1 -1
  36. package/dist/{chunk-PGW5MI4I.cjs → chunk-RK6YSRIC.cjs} +11 -11
  37. package/dist/{chunk-PGW5MI4I.cjs.map → chunk-RK6YSRIC.cjs.map} +1 -1
  38. package/dist/{chunk-P7T2VPUP.js → chunk-S7YXEFDC.js} +2 -2
  39. package/dist/{chunk-3KWXCPJ4.js → chunk-U7RF7YXN.js} +2 -2
  40. package/dist/{chunk-GRRLIALM.cjs → chunk-UEIW2ISS.cjs} +36 -9
  41. package/dist/chunk-UEIW2ISS.cjs.map +1 -0
  42. package/dist/{chunk-DWCGF6DS.js → chunk-WQ4QJWEE.js} +2 -2
  43. package/dist/{chunk-T2J3BDYT.js → chunk-XAAF6UPI.js} +2 -2
  44. package/dist/{chunk-EEJ5RVUJ.js → chunk-XM5DPWKV.js} +4 -4
  45. package/dist/{chunk-DENHGZNV.js → chunk-Y4LJ52RB.js} +2 -2
  46. package/dist/{chunk-2R4HUBA5.cjs → chunk-YY4FGIRU.cjs} +9 -9
  47. package/dist/{chunk-2R4HUBA5.cjs.map → chunk-YY4FGIRU.cjs.map} +1 -1
  48. package/dist/components/calendar.cjs +2 -2
  49. package/dist/components/calendar.d.ts.map +1 -1
  50. package/dist/components/calendar.js +1 -1
  51. package/dist/components/case-studies/index.cjs +8 -8
  52. package/dist/components/case-studies/index.js +2 -2
  53. package/dist/components/chat/index.cjs +2 -2
  54. package/dist/components/chat/index.js +1 -1
  55. package/dist/components/contact/index.cjs +3 -3
  56. package/dist/components/contact/index.js +2 -2
  57. package/dist/components/docs/index.cjs +5 -5
  58. package/dist/components/docs/index.js +4 -4
  59. package/dist/components/embeds/index.cjs +3 -3
  60. package/dist/components/embeds/index.js +2 -2
  61. package/dist/components/faq/index.cjs +3 -3
  62. package/dist/components/faq/index.js +2 -2
  63. package/dist/components/features/index.cjs +2 -2
  64. package/dist/components/features/index.js +1 -1
  65. package/dist/components/help-center-pages/index.cjs +22 -22
  66. package/dist/components/help-center-pages/index.js +13 -13
  67. package/dist/components/index.cjs +132 -132
  68. package/dist/components/index.js +11 -11
  69. package/dist/components/meeting-scheduler/index.cjs +36 -36
  70. package/dist/components/meeting-scheduler/index.js +4 -4
  71. package/dist/components/navigation/index.cjs +2 -2
  72. package/dist/components/navigation/index.js +1 -1
  73. package/dist/components/onboarding-guides/index.cjs +5 -5
  74. package/dist/components/onboarding-guides/index.js +4 -4
  75. package/dist/components/related-content/index.cjs +3 -3
  76. package/dist/components/related-content/index.js +2 -2
  77. package/dist/components/tickets/index.cjs +6 -6
  78. package/dist/components/tickets/index.js +5 -5
  79. package/dist/components/ui/date-picker.d.ts.map +1 -1
  80. package/dist/components/ui/index.cjs +2 -2
  81. package/dist/components/ui/index.js +1 -1
  82. package/dist/index.cjs +2 -2
  83. package/dist/index.js +1 -1
  84. package/package.json +1 -1
  85. package/src/components/calendar.tsx +5 -1
  86. package/src/components/ui/__tests__/date-picker-bounds.test.tsx +120 -0
  87. package/src/components/ui/date-picker.tsx +64 -8
  88. package/dist/chunk-5BAGE7AI.cjs.map +0 -1
  89. package/dist/chunk-GRRLIALM.cjs.map +0 -1
  90. /package/dist/{chunk-4ZUZKMTK.js.map → chunk-5WKVLIP3.js.map} +0 -0
  91. /package/dist/{chunk-SFDUS3OE.js.map → chunk-IA4USSHI.js.map} +0 -0
  92. /package/dist/{chunk-4J6RPYDD.js.map → chunk-J4AL3YOT.js.map} +0 -0
  93. /package/dist/{chunk-OWTY6TBV.js.map → chunk-MHW4WBMB.js.map} +0 -0
  94. /package/dist/{chunk-PHKKQ3MC.js.map → chunk-MTII5NXM.js.map} +0 -0
  95. /package/dist/{chunk-V4LFZGGX.js.map → chunk-NVMRBO7R.js.map} +0 -0
  96. /package/dist/{chunk-IOKEKWPA.js.map → chunk-P57FCOI6.js.map} +0 -0
  97. /package/dist/{chunk-P7T2VPUP.js.map → chunk-S7YXEFDC.js.map} +0 -0
  98. /package/dist/{chunk-3KWXCPJ4.js.map → chunk-U7RF7YXN.js.map} +0 -0
  99. /package/dist/{chunk-DWCGF6DS.js.map → chunk-WQ4QJWEE.js.map} +0 -0
  100. /package/dist/{chunk-T2J3BDYT.js.map → chunk-XAAF6UPI.js.map} +0 -0
  101. /package/dist/{chunk-EEJ5RVUJ.js.map → chunk-XM5DPWKV.js.map} +0 -0
  102. /package/dist/{chunk-DENHGZNV.js.map → chunk-Y4LJ52RB.js.map} +0 -0
@@ -7,6 +7,7 @@ import {
7
7
  DayPicker,
8
8
  type DateRange,
9
9
  type DayPickerProps,
10
+ type Matcher,
10
11
  } from "react-day-picker";
11
12
  import { useMdUp } from "../../hooks";
12
13
  import { cn } from "../../utils/cn";
@@ -94,16 +95,19 @@ const formatDateRange = (
94
95
  interface CalendarNavButtonProps {
95
96
  direction: "left" | "right";
96
97
  onClick?: () => void;
98
+ /** Set at a `fromDate` / `toDate` bound — there is nothing selectable past it. */
99
+ disabled?: boolean;
97
100
  "aria-label"?: string;
98
101
  }
99
102
 
100
- function CalendarNavButton({ direction, onClick, "aria-label": ariaLabel }: CalendarNavButtonProps) {
103
+ function CalendarNavButton({ direction, onClick, disabled, "aria-label": ariaLabel }: CalendarNavButtonProps) {
101
104
  return (
102
105
  <Button
103
106
  type="button"
104
107
  variant="outline"
105
108
  size="icon"
106
109
  onClick={onClick}
110
+ disabled={disabled}
107
111
  aria-label={ariaLabel}
108
112
  leftIcon={direction === "left" ? <ChevronLeft className="size-6" /> : <ChevronRight className="size-6" />}
109
113
  />
@@ -233,7 +237,21 @@ function DatePickerCalendar({
233
237
  mode === "range" && "range-selected"
234
238
  ),
235
239
  outside: "text-ods-border opacity-50 hover:!bg-transparent",
236
- disabled: "text-ods-border cursor-not-allowed hover:!bg-transparent",
240
+ // Out of bounds: greyed, un-hoverable, and not-allowed under the cursor.
241
+ //
242
+ // Every rule here is `!`, and the inner button is targeted explicitly —
243
+ // neither is decoration. react-day-picker CONCATENATES the modifier's classes
244
+ // onto the base `day` ones (no tailwind-merge), so `text-ods-text-disabled`
245
+ // and `text-ods-text-primary` both land on the cell and the winner comes down
246
+ // to their order in the generated stylesheet, not in the attribute; without
247
+ // `!` the disabled day rendered in full white, indistinguishable from a
248
+ // selectable one. The cursor needs the child selector on top of that: it is
249
+ // the `day_button` INSIDE the cell that carries `cursor-pointer`, and a
250
+ // `disabled` <button> does not inherit the cell's cursor on its own.
251
+ disabled: cn(
252
+ "!text-ods-text-disabled !cursor-not-allowed hover:!bg-transparent",
253
+ "[&>button]:!cursor-not-allowed [&>button]:!text-ods-text-disabled"
254
+ ),
237
255
  hidden: "invisible",
238
256
  // Range styles matching Figma design:
239
257
  // - range_start: bright yellow #ffc008, bold, left radius (full radius if single selection)
@@ -257,6 +275,42 @@ function DatePickerCalendar({
257
275
  : (selected as DateRange)?.from || today
258
276
  );
259
277
 
278
+ /**
279
+ * `fromDate` / `toDate` → what react-day-picker **v9** actually understands.
280
+ *
281
+ * v8 took the bounds as props of those names and both disabled the days
282
+ * outside them and stopped the navigation there. v9 removed them: they are
283
+ * typed `@deprecated … has been removed` and the runtime never reads them —
284
+ * so forwarding them, as this calendar did after the v8 → v9 upgrade, silently
285
+ * dropped every bound. A "next 30 days" picker happily accepted last year, and
286
+ * the `disabled` class already defined in `classNames` below never applied to
287
+ * anything. Same shape of miss as the v8 `classNames` keys called out in
288
+ * `calendar.tsx` — the other half of that migration.
289
+ *
290
+ * The public API is unchanged: consumers keep passing `fromDate`/`toDate`, and
291
+ * this is the single place either is translated.
292
+ */
293
+ const disabledDays = React.useMemo<Matcher[]>(() => {
294
+ const matchers: Matcher[] = [];
295
+ if (fromDate) matchers.push({ before: fromDate });
296
+ if (toDate) matchers.push({ after: toDate });
297
+ return matchers;
298
+ }, [fromDate, toDate]);
299
+
300
+ // Out-of-bounds days are disabled, not hidden — a month keeps its shape, and
301
+ // the greyed-out day is what tells the user the bound exists. Navigation stops
302
+ // at the bound too (v8 did the same): past it there is nothing selectable, so
303
+ // paging further only walks through dead months. The nav is this component's
304
+ // own — `hideNavigation` turns off DayPicker's — so the limit is applied here
305
+ // rather than through `startMonth`/`endMonth`.
306
+ // Compared as a month ORDINAL, not as dates: the bound falls on some day of
307
+ // its month, and that month must stay reachable — a `fromDate` of the 20th
308
+ // still has to let the user page back to that month to pick the 25th.
309
+ const monthIndex = (date: Date): number => date.getFullYear() * 12 + date.getMonth();
310
+ const lastVisibleMonth = monthIndex(month) + (monthsToShow === 2 ? 1 : 0);
311
+ const canGoPrevious = !fromDate || monthIndex(month) > monthIndex(fromDate);
312
+ const canGoNext = !toDate || lastVisibleMonth < monthIndex(toDate);
313
+
260
314
  const handlePreviousMonth = () => {
261
315
  setMonth((prev) => {
262
316
  const newMonth = new Date(prev);
@@ -323,6 +377,7 @@ function DatePickerCalendar({
323
377
  <CalendarNavButton
324
378
  direction="left"
325
379
  onClick={handlePreviousMonth}
380
+ disabled={!canGoPrevious}
326
381
  aria-label="Previous month"
327
382
  />
328
383
  <span className="text-h4 text-ods-text-primary">
@@ -331,6 +386,7 @@ function DatePickerCalendar({
331
386
  <CalendarNavButton
332
387
  direction="right"
333
388
  onClick={handleNextMonth}
389
+ disabled={!canGoNext}
334
390
  aria-label="Next month"
335
391
  />
336
392
  </div>
@@ -343,8 +399,7 @@ function DatePickerCalendar({
343
399
  classNames={classNames}
344
400
  showOutsideDays
345
401
  fixedWeeks
346
- fromDate={fromDate}
347
- toDate={toDate}
402
+ disabled={disabledDays}
348
403
  locale={locale}
349
404
  hideNavigation
350
405
  />
@@ -366,6 +421,7 @@ function DatePickerCalendar({
366
421
  <CalendarNavButton
367
422
  direction="left"
368
423
  onClick={handlePreviousMonth}
424
+ disabled={!canGoPrevious}
369
425
  aria-label="Previous month"
370
426
  />
371
427
  <span className="text-h4 text-ods-text-primary">
@@ -375,6 +431,7 @@ function DatePickerCalendar({
375
431
  <CalendarNavButton
376
432
  direction="right"
377
433
  onClick={handleNextMonth}
434
+ disabled={!canGoNext}
378
435
  aria-label="Next month"
379
436
  />
380
437
  )}
@@ -392,8 +449,7 @@ function DatePickerCalendar({
392
449
  classNames={classNames}
393
450
  showOutsideDays
394
451
  fixedWeeks
395
- fromDate={fromDate}
396
- toDate={toDate}
452
+ disabled={disabledDays}
397
453
  locale={locale}
398
454
  hideNavigation
399
455
  />
@@ -410,6 +466,7 @@ function DatePickerCalendar({
410
466
  <CalendarNavButton
411
467
  direction="right"
412
468
  onClick={handleNextMonth}
469
+ disabled={!canGoNext}
413
470
  aria-label="Next month"
414
471
  />
415
472
  </div>
@@ -424,8 +481,7 @@ function DatePickerCalendar({
424
481
  classNames={classNames}
425
482
  showOutsideDays
426
483
  fixedWeeks
427
- fromDate={fromDate}
428
- toDate={toDate}
484
+ disabled={disabledDays}
429
485
  locale={locale}
430
486
  hideNavigation
431
487
  />
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-5BAGE7AI.cjs","../src/components/calendar.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACJA,uCAAA,CAAA;AACA,4CAAA,CAAA;AAJA,2CAAkE;AAClE,kDAA0B;AAyEoB,+CAAA;AArD9C,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA,EAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACE,6BAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,kCAAA,KAAG,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,mEAAA;AAAA,QACR,KAAA,EAAO,6CAAA;AAAA,QACP,GAAA,EAAK,qEAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOL,eAAA,EAAiB,kCAAA;AAAA,UACf,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa,kCAAA;AAAA,UACX,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,aAAA,EAAe,sCAAA;AAAA,QACf,aAAA,EAAe,+BAAA;AAAA,QACf,UAAA,EAAY,oCAAA;AAAA,QACZ,QAAA,EAAU,EAAA;AAAA,QACV,OAAA,EAAS,kFAAA;AAAA,QACT,IAAA,EAAM,EAAA;AAAA,QACN,GAAA,EAAK,sCAAA;AAAA;AAAA;AAAA,QAGL,UAAA,EAAY,kCAAA;AAAA,UACV,8CAAA,EAAiB,OAAA,EAAS,aAAA,EAAe,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UAC1D;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EACE,4FAAA;AAAA,QACF,KAAA,EAAO,8EAAA;AAAA,QACP,OAAA,EAAS,sDAAA;AAAA,QACT,QAAA,EAAU,sFAAA;AAAA,QACV,MAAA,EAAQ,WAAA;AAAA,QACR,GAAG;AAAA,MACL,CAAA;AAAA,MACA,UAAA,EAAY;AAAA;AAAA,QAEV,OAAA,EAAS,CAAC,EAAE,WAAA,EAAa,SAAA,EAAW,iBAAiB,CAAA,EAAA,GAAM;AACzD,UAAA,MAAM,IAAA,EAAM,kCAAA,SAAG,EAAW,gBAAgB,CAAA;AAC1C,UAAA,GAAA,CAAI,YAAA,IAAgB,OAAA,EAAS,uBAAO,6BAAA,yBAAC,EAAA,EAAa,SAAA,EAAW,IAAA,CAAK,CAAA;AAClE,UAAA,GAAA,CAAI,YAAA,IAAgB,IAAA,EAAM,uBAAO,6BAAA,sBAAC,EAAA,EAAU,SAAA,EAAW,IAAA,CAAK,CAAA;AAC5D,UAAA,GAAA,CAAI,YAAA,IAAgB,MAAA,EAAQ,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAChE,UAAA,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAAA,QACtC;AAAA,MACF,CAAA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ;AACA,QAAA,CAAS,YAAA,EAAc,UAAA;ADPvB;AACA;AACE;AACF,4BAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-5BAGE7AI.cjs","sourcesContent":[null,"\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../utils/cn\"\nimport { buttonVariants } from \"./ui/button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\n/**\n * ODS-styled DayPicker wrapper.\n *\n * IMPORTANT: the installed react-day-picker is **v9** — the classNames keys\n * below are the v9 vocabulary (`weekdays`/`weekday`/`week`/`day`/`day_button`/\n * `selected`/`disabled`/…). The previous v8 shadcn map (`head_row`, `cell`,\n * `day_selected`, …) was silently IGNORED by v9, which shipped default\n * browser-table chrome: misaligned weekday headers, no disabled styling,\n * wrapping rows on mobile. Do not reintroduce v8 keys.\n *\n * Day-cell display stays `table-cell` (only the inner `day_button` is\n * flex) — converting `<td>`s to inline-flex is what made rows wrap.\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"relative flex flex-col md:flex-row gap-[var(--spacing-system-mf)]\",\n month: \"flex flex-col gap-[var(--spacing-system-s)]\",\n nav: \"absolute inset-x-0 top-0 z-10 flex h-8 items-center justify-between\",\n // size 'icon-sm' = the lib's fixed 32px icon button (no md: growth —\n // the DEFAULT size carries `md:h-12`, which tailwind-merge does NOT\n // drop for a plain `h-8` override and the nav ballooned on desktop).\n // Boundary-month nav state arrives as BOTH native `disabled` and\n // `aria-disabled` depending on the react-day-picker code path — style\n // both (the same pairing buttonSurfaceClasses uses).\n button_previous: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n month_caption: \"flex h-8 items-center justify-center\",\n caption_label: \"text-h6 text-ods-text-primary\",\n month_grid: \"border-separate border-spacing-y-1\",\n weekdays: \"\",\n weekday: \"h-9 w-9 p-0 text-center align-middle text-h6 font-normal text-ods-text-secondary\",\n week: \"\",\n day: \"h-9 w-9 p-0 text-center align-middle\",\n // 'icon-sm' again: a size MUST be passed or the default's `md:h-12` +\n // `text-h3` leak through and inflate day cells on desktop.\n day_button: cn(\n buttonVariants({ variant: \"transparent\", size: \"icon-sm\" }),\n \"h-9 w-9 rounded-md p-0 text-h6 font-normal text-ods-text-primary\"\n ),\n selected:\n \"[&>button]:bg-ods-accent [&>button]:text-ods-text-on-accent [&>button]:hover:bg-ods-accent\",\n today: \"[&>button]:text-ods-accent [&[aria-selected]>button]:text-ods-text-on-accent\",\n outside: \"[&>button]:text-ods-text-muted [&>button]:opacity-50\",\n disabled: \"[&>button]:text-ods-text-muted [&>button]:opacity-40 [&>button]:hover:bg-transparent\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n // v9 passes 'up'/'down' for dropdown captions too — branch all four.\n Chevron: ({ orientation, className: chevronClassName }) => {\n const cls = cn(\"h-4 w-4\", chevronClassName)\n if (orientation === \"right\") return <ChevronRight className={cls} />\n if (orientation === \"up\") return <ChevronUp className={cls} />\n if (orientation === \"down\") return <ChevronDown className={cls} />\n return <ChevronLeft className={cls} />\n },\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n"]}