@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.
- package/dist/{chunk-MFRG4Q2T.js → chunk-5RHFQ4JG.js} +36 -9
- package/dist/{chunk-MFRG4Q2T.js.map → chunk-5RHFQ4JG.js.map} +1 -1
- package/dist/{chunk-4ZUZKMTK.js → chunk-5WKVLIP3.js} +2 -2
- package/dist/{chunk-IXMIDBH7.cjs → chunk-5YX7F5G6.cjs} +37 -37
- package/dist/{chunk-IXMIDBH7.cjs.map → chunk-5YX7F5G6.cjs.map} +1 -1
- package/dist/{chunk-JFNRNKHA.cjs → chunk-7PGYALRK.cjs} +31 -31
- package/dist/{chunk-JFNRNKHA.cjs.map → chunk-7PGYALRK.cjs.map} +1 -1
- package/dist/{chunk-JX3Z3FL7.cjs → chunk-7QYBXWYI.cjs} +4 -4
- package/dist/{chunk-JX3Z3FL7.cjs.map → chunk-7QYBXWYI.cjs.map} +1 -1
- package/dist/{chunk-NRS7WK5A.cjs → chunk-AW66QABG.cjs} +3 -3
- package/dist/{chunk-NRS7WK5A.cjs.map → chunk-AW66QABG.cjs.map} +1 -1
- package/dist/{chunk-3ZD4SMZU.cjs → chunk-B6YOWMZF.cjs} +87 -87
- package/dist/{chunk-3ZD4SMZU.cjs.map → chunk-B6YOWMZF.cjs.map} +1 -1
- package/dist/{chunk-KSUKPZZ7.cjs → chunk-C646ZLOV.cjs} +26 -26
- package/dist/{chunk-KSUKPZZ7.cjs.map → chunk-C646ZLOV.cjs.map} +1 -1
- package/dist/{chunk-4RNPMT4R.cjs → chunk-E4IB3CTA.cjs} +14 -14
- package/dist/{chunk-4RNPMT4R.cjs.map → chunk-E4IB3CTA.cjs.map} +1 -1
- package/dist/{chunk-SFDUS3OE.js → chunk-IA4USSHI.js} +5 -5
- package/dist/{chunk-7AQSXQEL.js → chunk-IVTENGMF.js} +5 -2
- package/dist/{chunk-7AQSXQEL.js.map → chunk-IVTENGMF.js.map} +1 -1
- package/dist/{chunk-4J6RPYDD.js → chunk-J4AL3YOT.js} +2 -2
- package/dist/{chunk-AWYGNKF3.cjs → chunk-JT7FFD3R.cjs} +5 -5
- package/dist/{chunk-AWYGNKF3.cjs.map → chunk-JT7FFD3R.cjs.map} +1 -1
- package/dist/{chunk-5BAGE7AI.cjs → chunk-K26W23C2.cjs} +5 -2
- package/dist/chunk-K26W23C2.cjs.map +1 -0
- package/dist/{chunk-LF544M72.cjs → chunk-LBIWRR75.cjs} +61 -61
- package/dist/{chunk-LF544M72.cjs.map → chunk-LBIWRR75.cjs.map} +1 -1
- package/dist/{chunk-OWTY6TBV.js → chunk-MHW4WBMB.js} +4 -4
- package/dist/{chunk-PHKKQ3MC.js → chunk-MTII5NXM.js} +6 -6
- package/dist/{chunk-V4LFZGGX.js → chunk-NVMRBO7R.js} +2 -2
- package/dist/{chunk-MTC6GZIG.cjs → chunk-OUPSNYRI.cjs} +26 -26
- package/dist/{chunk-MTC6GZIG.cjs.map → chunk-OUPSNYRI.cjs.map} +1 -1
- package/dist/{chunk-IOKEKWPA.js → chunk-P57FCOI6.js} +2 -2
- package/dist/{chunk-QRL3GOQD.cjs → chunk-QHTFPOEL.cjs} +7 -7
- package/dist/{chunk-QRL3GOQD.cjs.map → chunk-QHTFPOEL.cjs.map} +1 -1
- package/dist/{chunk-PGW5MI4I.cjs → chunk-RK6YSRIC.cjs} +11 -11
- package/dist/{chunk-PGW5MI4I.cjs.map → chunk-RK6YSRIC.cjs.map} +1 -1
- package/dist/{chunk-P7T2VPUP.js → chunk-S7YXEFDC.js} +2 -2
- package/dist/{chunk-3KWXCPJ4.js → chunk-U7RF7YXN.js} +2 -2
- package/dist/{chunk-GRRLIALM.cjs → chunk-UEIW2ISS.cjs} +36 -9
- package/dist/chunk-UEIW2ISS.cjs.map +1 -0
- package/dist/{chunk-DWCGF6DS.js → chunk-WQ4QJWEE.js} +2 -2
- package/dist/{chunk-T2J3BDYT.js → chunk-XAAF6UPI.js} +2 -2
- package/dist/{chunk-EEJ5RVUJ.js → chunk-XM5DPWKV.js} +4 -4
- package/dist/{chunk-DENHGZNV.js → chunk-Y4LJ52RB.js} +2 -2
- package/dist/{chunk-2R4HUBA5.cjs → chunk-YY4FGIRU.cjs} +9 -9
- package/dist/{chunk-2R4HUBA5.cjs.map → chunk-YY4FGIRU.cjs.map} +1 -1
- package/dist/components/calendar.cjs +2 -2
- package/dist/components/calendar.d.ts.map +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +22 -22
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +132 -132
- package/dist/components/index.js +11 -11
- package/dist/components/meeting-scheduler/index.cjs +36 -36
- package/dist/components/meeting-scheduler/index.js +4 -4
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/components/calendar.tsx +5 -1
- package/src/components/ui/__tests__/date-picker-bounds.test.tsx +120 -0
- package/src/components/ui/date-picker.tsx +64 -8
- package/dist/chunk-5BAGE7AI.cjs.map +0 -1
- package/dist/chunk-GRRLIALM.cjs.map +0 -1
- /package/dist/{chunk-4ZUZKMTK.js.map → chunk-5WKVLIP3.js.map} +0 -0
- /package/dist/{chunk-SFDUS3OE.js.map → chunk-IA4USSHI.js.map} +0 -0
- /package/dist/{chunk-4J6RPYDD.js.map → chunk-J4AL3YOT.js.map} +0 -0
- /package/dist/{chunk-OWTY6TBV.js.map → chunk-MHW4WBMB.js.map} +0 -0
- /package/dist/{chunk-PHKKQ3MC.js.map → chunk-MTII5NXM.js.map} +0 -0
- /package/dist/{chunk-V4LFZGGX.js.map → chunk-NVMRBO7R.js.map} +0 -0
- /package/dist/{chunk-IOKEKWPA.js.map → chunk-P57FCOI6.js.map} +0 -0
- /package/dist/{chunk-P7T2VPUP.js.map → chunk-S7YXEFDC.js.map} +0 -0
- /package/dist/{chunk-3KWXCPJ4.js.map → chunk-U7RF7YXN.js.map} +0 -0
- /package/dist/{chunk-DWCGF6DS.js.map → chunk-WQ4QJWEE.js.map} +0 -0
- /package/dist/{chunk-T2J3BDYT.js.map → chunk-XAAF6UPI.js.map} +0 -0
- /package/dist/{chunk-EEJ5RVUJ.js.map → chunk-XM5DPWKV.js.map} +0 -0
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"]}
|