@sixthshift/design-system 0.2.1 → 0.3.0
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/README.md +135 -28
- package/dist/components/Badge/Badge.d.ts +5 -2
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Badge/Badge.js +5 -3
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/BarChart/BarChart.d.ts +8 -2
- package/dist/components/BarChart/BarChart.d.ts.map +1 -1
- package/dist/components/BarChart/BarChart.js +5 -3
- package/dist/components/BarChart/BarChart.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +17 -1
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +80 -225
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/Calendar/CalendarView.d.ts +15 -0
- package/dist/components/Calendar/CalendarView.d.ts.map +1 -0
- package/dist/components/Calendar/CalendarView.js +255 -0
- package/dist/components/Calendar/CalendarView.js.map +1 -0
- package/dist/components/Calendar/calendar.types.d.ts +78 -27
- package/dist/components/Calendar/calendar.types.d.ts.map +1 -1
- package/dist/components/Calendar/calendar.types.js +10 -3
- package/dist/components/Calendar/calendar.types.js.map +1 -1
- package/dist/components/Calendar/index.d.ts +16 -2
- package/dist/components/Calendar/index.d.ts.map +1 -1
- package/dist/components/Calendar/index.js +15 -1
- package/dist/components/Calendar/index.js.map +1 -1
- package/dist/components/ColorDot/ColorDot.d.ts +9 -3
- package/dist/components/ColorDot/ColorDot.d.ts.map +1 -1
- package/dist/components/ColorDot/ColorDot.js +5 -3
- package/dist/components/ColorDot/ColorDot.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +2 -2
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.js +65 -10
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DatePicker/datepicker.types.d.ts +34 -36
- package/dist/components/DatePicker/datepicker.types.d.ts.map +1 -1
- package/dist/components/DatePicker/datepicker.types.js +5 -3
- package/dist/components/DatePicker/datepicker.types.js.map +1 -1
- package/dist/components/DatePicker/index.d.ts +10 -1
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/DatePicker/index.js +8 -0
- package/dist/components/DatePicker/index.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +3 -2
- package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.js +17 -21
- package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/DateRangePicker/daterangepicker.types.d.ts +20 -20
- package/dist/components/DateRangePicker/daterangepicker.types.d.ts.map +1 -1
- package/dist/components/DateRangePicker/daterangepicker.types.js +6 -0
- package/dist/components/DateRangePicker/daterangepicker.types.js.map +1 -1
- package/dist/components/DateRangePicker/index.d.ts +8 -1
- package/dist/components/DateRangePicker/index.d.ts.map +1 -1
- package/dist/components/DateRangePicker/index.js +6 -0
- package/dist/components/DateRangePicker/index.js.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +3 -3
- package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.js +30 -12
- package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/dist/components/DateTimePicker/datetimepicker.types.d.ts +20 -17
- package/dist/components/DateTimePicker/datetimepicker.types.d.ts.map +1 -1
- package/dist/components/DateTimePicker/datetimepicker.types.js +10 -0
- package/dist/components/DateTimePicker/datetimepicker.types.js.map +1 -1
- package/dist/components/DateTimePicker/index.d.ts +8 -1
- package/dist/components/DateTimePicker/index.d.ts.map +1 -1
- package/dist/components/DateTimePicker/index.js +6 -0
- package/dist/components/DateTimePicker/index.js.map +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts +3 -3
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +41 -20
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts +22 -18
- package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js +8 -0
- package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js.map +1 -1
- package/dist/components/DateTimeRangePicker/index.d.ts +8 -0
- package/dist/components/DateTimeRangePicker/index.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/index.js +7 -0
- package/dist/components/DateTimeRangePicker/index.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.d.ts +16 -5
- package/dist/components/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.js +5 -3
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/Field/Field.d.ts +3 -3
- package/dist/components/Field/Field.d.ts.map +1 -1
- package/dist/components/Field/Field.js +6 -4
- package/dist/components/Field/Field.js.map +1 -1
- package/dist/components/LineChart/LineChart.d.ts +18 -2
- package/dist/components/LineChart/LineChart.d.ts.map +1 -1
- package/dist/components/LineChart/LineChart.js +5 -3
- package/dist/components/LineChart/LineChart.js.map +1 -1
- package/dist/components/Markdown/Markdown.d.ts +2 -4
- package/dist/components/Markdown/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown/Markdown.js +3 -2
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +16 -1
- package/dist/components/Message/Message.js.map +1 -1
- package/dist/components/MetricList/MetricList.d.ts +3 -3
- package/dist/components/MetricList/MetricList.d.ts.map +1 -1
- package/dist/components/MetricList/MetricList.js +5 -3
- package/dist/components/MetricList/MetricList.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts +24 -5
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +16 -6
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/components/ModalContext.d.ts +14 -0
- package/dist/components/Modal/components/ModalContext.d.ts.map +1 -1
- package/dist/components/Modal/components/ModalContext.js.map +1 -1
- package/dist/components/Modal/components/ModalHeader.d.ts.map +1 -1
- package/dist/components/Modal/components/ModalHeader.js +13 -2
- package/dist/components/Modal/components/ModalHeader.js.map +1 -1
- package/dist/components/NavBottom/NavBottom.d.ts +2 -1
- package/dist/components/NavBottom/NavBottom.d.ts.map +1 -1
- package/dist/components/NavBottom/NavBottom.js +6 -4
- package/dist/components/NavBottom/NavBottom.js.map +1 -1
- package/dist/components/NavSide/NavItem.js +1 -1
- package/dist/components/NavSide/NavItem.js.map +1 -1
- package/dist/components/NavSide/NavSide.d.ts +2 -1
- package/dist/components/NavSide/NavSide.d.ts.map +1 -1
- package/dist/components/NavSide/NavSide.js +5 -3
- package/dist/components/NavSide/NavSide.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +7 -0
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/components/PopoverBody.d.ts.map +1 -1
- package/dist/components/Popover/components/PopoverBody.js +5 -2
- package/dist/components/Popover/components/PopoverBody.js.map +1 -1
- package/dist/components/Popover/components/PopoverContext.d.ts +1 -0
- package/dist/components/Popover/components/PopoverContext.d.ts.map +1 -1
- package/dist/components/Popover/components/PopoverContext.js.map +1 -1
- package/dist/components/Popover/components/PopoverTrigger.d.ts.map +1 -1
- package/dist/components/Popover/components/PopoverTrigger.js +2 -2
- package/dist/components/Popover/components/PopoverTrigger.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +2 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +5 -3
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/Select/Select.d.ts +11 -2
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +64 -18
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/SelectDropdown.d.ts +14 -2
- package/dist/components/Select/SelectDropdown.d.ts.map +1 -1
- package/dist/components/Select/SelectDropdown.js +19 -4
- package/dist/components/Select/SelectDropdown.js.map +1 -1
- package/dist/components/Select/SelectTrigger.d.ts +10 -3
- package/dist/components/Select/SelectTrigger.d.ts.map +1 -1
- package/dist/components/Select/SelectTrigger.js +12 -3
- package/dist/components/Select/SelectTrigger.js.map +1 -1
- package/dist/components/Select/useSelectKeyboard.d.ts +15 -1
- package/dist/components/Select/useSelectKeyboard.d.ts.map +1 -1
- package/dist/components/Select/useSelectKeyboard.js +73 -65
- package/dist/components/Select/useSelectKeyboard.js.map +1 -1
- package/dist/components/Sheet/Sheet.d.ts +19 -5
- package/dist/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/components/Sheet/Sheet.js +18 -6
- package/dist/components/Sheet/Sheet.js.map +1 -1
- package/dist/components/Sheet/components/SheetContext.d.ts +10 -0
- package/dist/components/Sheet/components/SheetContext.d.ts.map +1 -1
- package/dist/components/Sheet/components/SheetContext.js.map +1 -1
- package/dist/components/Sheet/components/SheetHeader.d.ts.map +1 -1
- package/dist/components/Sheet/components/SheetHeader.js +11 -2
- package/dist/components/Sheet/components/SheetHeader.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +2 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +5 -3
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Sparkline/Sparkline.d.ts +10 -2
- package/dist/components/Sparkline/Sparkline.d.ts.map +1 -1
- package/dist/components/Sparkline/Sparkline.js +5 -3
- package/dist/components/Sparkline/Sparkline.js.map +1 -1
- package/dist/components/StatsCard/StatsCard.d.ts +4 -4
- package/dist/components/StatsCard/StatsCard.d.ts.map +1 -1
- package/dist/components/StatsCard/StatsCard.js +5 -3
- package/dist/components/StatsCard/StatsCard.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +2 -2
- package/dist/components/Tabs/components/TabsList.d.ts +1 -1
- package/dist/components/Tabs/components/TabsList.d.ts.map +1 -1
- package/dist/components/Tabs/components/TabsList.js +5 -4
- package/dist/components/Tabs/components/TabsList.js.map +1 -1
- package/dist/components/Tabs/components/TabsPanels.d.ts +1 -1
- package/dist/components/Tabs/components/TabsPanels.d.ts.map +1 -1
- package/dist/components/Tabs/components/TabsPanels.js +5 -3
- package/dist/components/Tabs/components/TabsPanels.js.map +1 -1
- package/dist/components/TagChip/TagChip.d.ts +2 -1
- package/dist/components/TagChip/TagChip.d.ts.map +1 -1
- package/dist/components/TagChip/TagChip.js +5 -3
- package/dist/components/TagChip/TagChip.js.map +1 -1
- package/dist/components/TagInput/TagInput.d.ts +1 -1
- package/dist/components/TagInput/TagInput.d.ts.map +1 -1
- package/dist/components/TagInput/TagInput.js +5 -4
- package/dist/components/TagInput/TagInput.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.d.ts +2 -2
- package/dist/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/components/TimePicker/TimePicker.js +27 -11
- package/dist/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/TimePicker/timepicker.types.d.ts +14 -13
- package/dist/components/TimePicker/timepicker.types.d.ts.map +1 -1
- package/dist/components/TimePicker/timepicker.types.js +4 -3
- package/dist/components/TimePicker/timepicker.types.js.map +1 -1
- package/dist/date-time/index.d.ts +2 -0
- package/dist/date-time/index.d.ts.map +1 -1
- package/dist/date-time/index.js +9 -0
- package/dist/date-time/index.js.map +1 -1
- package/dist/date-time/iso.d.ts +261 -0
- package/dist/date-time/iso.d.ts.map +1 -0
- package/dist/date-time/iso.js +358 -0
- package/dist/date-time/iso.js.map +1 -0
- package/dist/date-time/now.d.ts +7 -6
- package/dist/date-time/now.d.ts.map +1 -1
- package/dist/date-time/now.js +3 -3
- package/dist/date-time/now.js.map +1 -1
- package/dist/theme/index.d.ts +4 -3
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -2
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/schema.d.ts +70 -32
- package/dist/theme/schema.d.ts.map +1 -1
- package/dist/theme/schema.js +36 -18
- package/dist/theme/schema.js.map +1 -1
- package/package.json +9 -15
- package/src/components/Badge/Badge.tsx +5 -4
- package/src/components/BarChart/BarChart.tsx +25 -30
- package/src/components/Calendar/Calendar.tsx +91 -401
- package/src/components/Calendar/CalendarView.tsx +445 -0
- package/src/components/Calendar/calendar.types.ts +94 -29
- package/src/components/Calendar/index.ts +16 -17
- package/src/components/ColorDot/ColorDot.tsx +6 -4
- package/src/components/DatePicker/DatePicker.tsx +92 -16
- package/src/components/DatePicker/datepicker.types.ts +38 -39
- package/src/components/DatePicker/index.ts +11 -10
- package/src/components/DateRangePicker/DateRangePicker.tsx +17 -21
- package/src/components/DateRangePicker/daterangepicker.types.ts +22 -22
- package/src/components/DateRangePicker/index.ts +9 -1
- package/src/components/DateTimePicker/DateTimePicker.tsx +46 -18
- package/src/components/DateTimePicker/datetimepicker.types.ts +22 -18
- package/src/components/DateTimePicker/index.ts +9 -1
- package/src/components/DateTimeRangePicker/DateTimeRangePicker.tsx +62 -28
- package/src/components/DateTimeRangePicker/datetimerangepicker.types.ts +24 -19
- package/src/components/DateTimeRangePicker/index.ts +9 -0
- package/src/components/EmptyState/EmptyState.tsx +8 -7
- package/src/components/Field/Field.tsx +7 -6
- package/src/components/LineChart/LineChart.tsx +147 -141
- package/src/components/Markdown/Markdown.tsx +4 -3
- package/src/components/Message/Message.tsx +17 -1
- package/src/components/MetricList/MetricList.tsx +10 -5
- package/src/components/Modal/Modal.tsx +119 -87
- package/src/components/Modal/components/ModalContext.tsx +14 -0
- package/src/components/Modal/components/ModalHeader.tsx +14 -2
- package/src/components/NavBottom/NavBottom.tsx +6 -4
- package/src/components/NavSide/NavItem.tsx +1 -1
- package/src/components/NavSide/NavSide.tsx +5 -3
- package/src/components/Popover/Popover.tsx +7 -0
- package/src/components/Popover/components/PopoverBody.tsx +6 -1
- package/src/components/Popover/components/PopoverContext.tsx +1 -0
- package/src/components/Popover/components/PopoverTrigger.tsx +2 -1
- package/src/components/ProgressBar/ProgressBar.tsx +32 -28
- package/src/components/Select/Select.tsx +76 -19
- package/src/components/Select/SelectDropdown.tsx +32 -3
- package/src/components/Select/SelectTrigger.tsx +26 -3
- package/src/components/Select/useSelectKeyboard.ts +20 -10
- package/src/components/Sheet/Sheet.tsx +108 -83
- package/src/components/Sheet/components/SheetContext.tsx +10 -0
- package/src/components/Sheet/components/SheetHeader.tsx +17 -2
- package/src/components/Skeleton/Skeleton.tsx +5 -3
- package/src/components/Sparkline/Sparkline.tsx +29 -36
- package/src/components/StatsCard/StatsCard.tsx +7 -6
- package/src/components/Tabs/components/TabsList.tsx +5 -3
- package/src/components/Tabs/components/TabsPanels.tsx +5 -3
- package/src/components/TagChip/TagChip.tsx +10 -3
- package/src/components/TagInput/TagInput.tsx +5 -3
- package/src/components/TimePicker/TimePicker.tsx +31 -13
- package/src/components/TimePicker/timepicker.types.ts +14 -13
- package/src/date-time/index.ts +61 -0
- package/src/date-time/iso.ts +511 -0
- package/src/date-time/now.ts +10 -9
- package/src/theme/index.ts +11 -3
- package/src/theme/schema.ts +82 -54
- package/src/theme/tokens.css +807 -0
- package/dist/styles.css +0 -2
- package/dist/theme.generated.css +0 -438
- package/src/styles/base.css +0 -41
- package/src/theme/palette.json +0 -100
- package/src/theme/palette.schema.json +0 -40
- package/src/theme/theme.json +0 -349
- package/src/theme/theme.schema.json +0 -876
- package/src/theme/typography.json +0 -7
- package/src/theme/typography.schema.json +0 -36
- package/tailwind.config.ts +0 -261
|
@@ -1,242 +1,97 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
case "single":
|
|
24
|
-
return "bg-bg-brand text-fg-on-brand";
|
|
25
|
-
default:
|
|
26
|
-
return "";
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export const Calendar = (props) => {
|
|
30
|
-
const { mode, month, onMonthChange, minDate, maxDate, disabled, weekStartsOn = 0, showFooter = false, showToday = true, onApply, onCancel, className, } = props;
|
|
31
|
-
// Get mode-specific props
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Calendar — the public, ISO-string-typed calendar.
|
|
4
|
+
*
|
|
5
|
+
* A thin adapter over {@link CalendarView}: it parses incoming ISO strings and
|
|
6
|
+
* serialises outgoing selections. All the behaviour lives in CalendarView.
|
|
7
|
+
*
|
|
8
|
+
* Every conversion is memoised on the string it came from, and every handler is
|
|
9
|
+
* stable. Temporal objects have no value identity — `PlainDate.from("2026-08-26")`
|
|
10
|
+
* is never `===` another PlainDate for the same day — and CalendarView keys
|
|
11
|
+
* `useMemo`/`useCallback` on these values directly, so converting unmemoised
|
|
12
|
+
* would invalidate the whole grid on every render.
|
|
13
|
+
*
|
|
14
|
+
* Props are read with `"key" in props` rather than destructured per mode,
|
|
15
|
+
* because every hook here has to run unconditionally.
|
|
16
|
+
*/
|
|
17
|
+
import * as React from "react";
|
|
18
|
+
import { useCallback, useMemo } from "react";
|
|
19
|
+
import { adaptDisabledDates, fromISODate, fromISODateOrUndefined, fromISODateRange, toISODate, toISODateOrUndefined, toISODateRange, } from "../../date-time/index.js";
|
|
20
|
+
import { CalendarView } from "./CalendarView.js";
|
|
21
|
+
export const Calendar = React.forwardRef((props, ref) => {
|
|
22
|
+
const { mode, month, onMonthChange, minDate, maxDate, disabled, weekStartsOn, showFooter, showToday, onApply, onCancel, className } = props;
|
|
32
23
|
const value = "value" in props ? props.value : undefined;
|
|
33
24
|
const onSelect = "onSelect" in props ? props.onSelect : undefined;
|
|
34
25
|
const presets = "presets" in props ? props.presets : undefined;
|
|
35
26
|
const max = mode === "multiple" && "max" in props ? props.max : undefined;
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Inbound: ISO strings -> Temporal, each keyed on the string it derives from.
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const temporalMonth = useMemo(() => fromISODate(month), [month]);
|
|
31
|
+
const temporalMinDate = useMemo(() => fromISODateOrUndefined(minDate), [minDate]);
|
|
32
|
+
const temporalMaxDate = useMemo(() => fromISODateOrUndefined(maxDate), [maxDate]);
|
|
33
|
+
const temporalDisabled = useMemo(() => adaptDisabledDates(disabled), [disabled]);
|
|
34
|
+
const temporalValue = useMemo(() => {
|
|
35
|
+
if (mode === "single")
|
|
36
|
+
return fromISODateOrUndefined(value);
|
|
37
|
+
if (mode === "multiple")
|
|
38
|
+
return (value ?? []).map(fromISODate);
|
|
39
|
+
return fromISODateRange(value);
|
|
40
|
+
}, [mode, value]);
|
|
41
|
+
const temporalPresets = useMemo(() => {
|
|
42
|
+
if (!presets)
|
|
43
|
+
return undefined;
|
|
40
44
|
if (mode === "single") {
|
|
41
|
-
|
|
42
|
-
if (currentValue && isSameDateTemporal(temporalDate, currentValue)) {
|
|
43
|
-
onSelect(undefined);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
onSelect(temporalDate);
|
|
47
|
-
}
|
|
48
|
-
return;
|
|
45
|
+
return presets.map((preset) => ({ label: preset.label, value: fromISODate(preset.value) }));
|
|
49
46
|
}
|
|
50
47
|
if (mode === "multiple") {
|
|
51
|
-
|
|
52
|
-
const existingIndex = currentValue.findIndex((d) => isSameDateTemporal(temporalDate, d));
|
|
53
|
-
if (existingIndex >= 0) {
|
|
54
|
-
onSelect(currentValue.filter((_, i) => i !== existingIndex));
|
|
55
|
-
}
|
|
56
|
-
else if (!max || currentValue.length < max) {
|
|
57
|
-
onSelect([...currentValue, temporalDate]);
|
|
58
|
-
}
|
|
59
|
-
return;
|
|
48
|
+
return presets.map((preset) => ({ label: preset.label, value: preset.value.map(fromISODate) }));
|
|
60
49
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
from: undefined,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (isBeforeTemporal(temporalDate, currentRange.from)) {
|
|
72
|
-
onSelect({ from: temporalDate, to: currentRange.from });
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
onSelect({ from: currentRange.from, to: temporalDate });
|
|
76
|
-
}
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
onSelect({ from: temporalDate, to: undefined });
|
|
80
|
-
}, [mode, value, onSelect, max]);
|
|
81
|
-
// Today button
|
|
82
|
-
const handleToday = useCallback(() => {
|
|
50
|
+
return presets.map((preset) => ({
|
|
51
|
+
label: preset.label,
|
|
52
|
+
value: fromISODateRange(preset.value) ?? { from: undefined, to: undefined },
|
|
53
|
+
}));
|
|
54
|
+
}, [mode, presets]);
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Outbound: Temporal -> ISO strings.
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
const handleMonthChange = useCallback((next) => onMonthChange(toISODate(next)), [onMonthChange]);
|
|
59
|
+
const handleSelect = useCallback((next) => {
|
|
83
60
|
if (!onSelect)
|
|
84
61
|
return;
|
|
85
|
-
const todayDate = today();
|
|
86
62
|
if (mode === "single") {
|
|
87
|
-
onSelect(
|
|
88
|
-
}
|
|
89
|
-
else if (mode === "multiple") {
|
|
90
|
-
const current = value || [];
|
|
91
|
-
if (!current.some((d) => isSameDateTemporal(d, todayDate))) {
|
|
92
|
-
if (!max || current.length < max) {
|
|
93
|
-
onSelect([...current, todayDate]);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
onMonthChange(todayDate);
|
|
98
|
-
}, [mode, value, onSelect, max, onMonthChange]);
|
|
99
|
-
// Preset selection
|
|
100
|
-
const handlePresetClick = useCallback((preset) => {
|
|
101
|
-
if (!onSelect)
|
|
63
|
+
onSelect(toISODateOrUndefined(next));
|
|
102
64
|
return;
|
|
103
|
-
if (mode === "single" && isPlainDate(preset.value)) {
|
|
104
|
-
onSelect(preset.value);
|
|
105
|
-
}
|
|
106
|
-
else if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
|
|
107
|
-
onSelect(preset.value);
|
|
108
65
|
}
|
|
109
|
-
|
|
110
|
-
onSelect(
|
|
66
|
+
if (mode === "multiple") {
|
|
67
|
+
onSelect((next ?? []).map(toISODate));
|
|
68
|
+
return;
|
|
111
69
|
}
|
|
70
|
+
onSelect(toISODateRange(next));
|
|
112
71
|
}, [mode, onSelect]);
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
72
|
+
// One cast, at the single point where the two discriminated unions meet: the
|
|
73
|
+
// mode discriminant and its matching value/onSelect/presets have all been
|
|
74
|
+
// converted in step above, but TypeScript cannot follow that across the
|
|
75
|
+
// separate useMemo calls.
|
|
76
|
+
const viewProps = {
|
|
77
|
+
mode,
|
|
78
|
+
month: temporalMonth,
|
|
79
|
+
onMonthChange: handleMonthChange,
|
|
80
|
+
minDate: temporalMinDate,
|
|
81
|
+
maxDate: temporalMaxDate,
|
|
82
|
+
disabled: temporalDisabled,
|
|
83
|
+
weekStartsOn,
|
|
84
|
+
showFooter,
|
|
85
|
+
showToday,
|
|
86
|
+
onApply,
|
|
87
|
+
onCancel,
|
|
88
|
+
className,
|
|
89
|
+
max,
|
|
90
|
+
value: temporalValue,
|
|
91
|
+
onSelect: handleSelect,
|
|
92
|
+
presets: temporalPresets,
|
|
122
93
|
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// A grid is a single tab stop: exactly one cell carries tabIndex={0} and the
|
|
127
|
-
// arrow keys move between cells. `focusedDate` is null until the user actually
|
|
128
|
-
// navigates, so we never steal focus on mount.
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
const [focusedDate, setFocusedDate] = useState(null);
|
|
131
|
-
const gridRef = useRef(null);
|
|
132
|
-
const firstSelected = useMemo(() => {
|
|
133
|
-
if (mode === "single")
|
|
134
|
-
return isPlainDate(value) ? value : undefined;
|
|
135
|
-
if (mode === "multiple")
|
|
136
|
-
return value?.[0];
|
|
137
|
-
return value?.from;
|
|
138
|
-
}, [mode, value]);
|
|
139
|
-
const activeDate = useMemo(() => {
|
|
140
|
-
const isUsable = (date) => isSameMonth(date, month) && !isDateDisabled(date, disabled, minDate, maxDate);
|
|
141
|
-
// Prefer where the user last was, then their selection, then today.
|
|
142
|
-
for (const candidate of [focusedDate, firstSelected, today()]) {
|
|
143
|
-
if (candidate && isUsable(candidate))
|
|
144
|
-
return candidate;
|
|
145
|
-
}
|
|
146
|
-
// Otherwise the first day of the month that can actually take focus, so the
|
|
147
|
-
// grid never ends up with zero tab stops.
|
|
148
|
-
const first = startOfMonth(month);
|
|
149
|
-
for (let i = 0; i < first.daysInMonth; i++) {
|
|
150
|
-
const candidate = addDays(first, i);
|
|
151
|
-
if (isUsable(candidate))
|
|
152
|
-
return candidate;
|
|
153
|
-
}
|
|
154
|
-
return first;
|
|
155
|
-
}, [focusedDate, firstSelected, month, disabled, minDate, maxDate]);
|
|
156
|
-
const moveFocus = useCallback((next) => {
|
|
157
|
-
setFocusedDate(next);
|
|
158
|
-
if (!isSameMonth(next, month))
|
|
159
|
-
onMonthChange(next);
|
|
160
|
-
}, [month, onMonthChange]);
|
|
161
|
-
const handleGridKeyDown = useCallback((event) => {
|
|
162
|
-
// Navigate from the cell that actually has focus, not from the derived
|
|
163
|
-
// tab stop — otherwise focusing a day without selecting it would make the
|
|
164
|
-
// arrow keys jump back to today.
|
|
165
|
-
const focusedIso = event.target?.closest?.("[data-date]")?.getAttribute("data-date");
|
|
166
|
-
const origin = focusedIso ? parseDate(focusedIso) : activeDate;
|
|
167
|
-
const dayStep = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };
|
|
168
|
-
const step = dayStep[event.key];
|
|
169
|
-
if (step !== undefined) {
|
|
170
|
-
event.preventDefault();
|
|
171
|
-
moveFocus(addDays(origin, step));
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
switch (event.key) {
|
|
175
|
-
case "Home":
|
|
176
|
-
event.preventDefault();
|
|
177
|
-
moveFocus(startOfWeek(origin, weekStartsOn));
|
|
178
|
-
break;
|
|
179
|
-
case "End":
|
|
180
|
-
event.preventDefault();
|
|
181
|
-
moveFocus(endOfWeek(origin, weekStartsOn));
|
|
182
|
-
break;
|
|
183
|
-
case "PageUp":
|
|
184
|
-
event.preventDefault();
|
|
185
|
-
moveFocus(addMonths(origin, -1));
|
|
186
|
-
break;
|
|
187
|
-
case "PageDown":
|
|
188
|
-
event.preventDefault();
|
|
189
|
-
moveFocus(addMonths(origin, 1));
|
|
190
|
-
break;
|
|
191
|
-
default:
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
|
-
}, [activeDate, moveFocus, weekStartsOn]);
|
|
195
|
-
// Follow the roving tabIndex with real DOM focus, but only once the user has
|
|
196
|
-
// started navigating.
|
|
197
|
-
useEffect(() => {
|
|
198
|
-
if (!focusedDate)
|
|
199
|
-
return;
|
|
200
|
-
gridRef.current?.querySelector(`[data-date="${temporalToISO(focusedDate)}"]`)?.focus();
|
|
201
|
-
}, [focusedDate]);
|
|
202
|
-
// useCalendarDays always returns 42 days, so this is always 6 rows of 7.
|
|
203
|
-
const weeks = useMemo(() => {
|
|
204
|
-
const chunked = [];
|
|
205
|
-
for (let i = 0; i < days.length; i += 7)
|
|
206
|
-
chunked.push(days.slice(i, i + 7));
|
|
207
|
-
return chunked;
|
|
208
|
-
}, [days]);
|
|
209
|
-
// Check if a preset is currently active
|
|
210
|
-
const isPresetActive = useCallback((preset) => {
|
|
211
|
-
if (mode === "single" && isPlainDate(preset.value)) {
|
|
212
|
-
return isPlainDate(value) && isSameDateTemporal(value, preset.value);
|
|
213
|
-
}
|
|
214
|
-
if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
|
|
215
|
-
const draft = value;
|
|
216
|
-
const presetVal = preset.value;
|
|
217
|
-
const fromMatch = (!draft?.from && !presetVal.from) || (draft?.from && presetVal.from && isSameDateTemporal(draft.from, presetVal.from));
|
|
218
|
-
const toMatch = (!draft?.to && !presetVal.to) || (draft?.to && presetVal.to && isSameDateTemporal(draft.to, presetVal.to));
|
|
219
|
-
return Boolean(fromMatch && toMatch);
|
|
220
|
-
}
|
|
221
|
-
if (mode === "multiple" && Array.isArray(preset.value)) {
|
|
222
|
-
const draft = value || [];
|
|
223
|
-
const presetVal = preset.value;
|
|
224
|
-
return draft.length === presetVal.length && draft.every((d) => presetVal.some((p) => isSameDateTemporal(d, p)));
|
|
225
|
-
}
|
|
226
|
-
return false;
|
|
227
|
-
}, [mode, value]);
|
|
228
|
-
return (_jsxs("div", { className: cn("flex", className), children: [presets && presets.length > 0 && (_jsx("div", { className: "mr-3 flex flex-col gap-1 border-border-normal border-r pr-3", children: presets.map((preset) => (_jsx("button", { type: "button", onClick: () => handlePresetClick(preset), className: cn(`rounded-md px-3 py-1.5 text-left text-sm transition-colors`, `hover:bg-bg-subtle focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`, isPresetActive(preset) && "bg-bg-brand-subtle text-fg-brand"), children: preset.label }, preset.label))) })), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("button", { type: "button", onClick: handlePrevMonth, className: "rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring", "aria-label": "Previous month", children: _jsx(ChevronLeft, { className: "h-5 w-5" }) }), _jsx("span", { className: "font-semibold text-sm", children: formatMonthYear(month) }), _jsx("button", { type: "button", onClick: handleNextMonth, className: "rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring", "aria-label": "Next month", children: _jsx(ChevronRight, { className: "h-5 w-5" }) })] }), _jsxs("table", { ref: gridRef, role: "grid", "aria-label": formatMonthYear(month), className: "border-separate border-spacing-1", onKeyDown: handleGridKeyDown, children: [_jsx("thead", { children: _jsx("tr", { children: dayLabels.map((label) => (_jsx("th", { scope: "col", className: "h-10 w-10 font-medium text-fg-subtle text-sm", children: label }, label))) }) }), _jsx("tbody", { children: weeks.map((week) => (_jsx("tr", { children: week.map((day) => {
|
|
229
|
-
const isDisabledDay = isDateDisabled(day.date, disabled, minDate, maxDate);
|
|
230
|
-
const selectionState = getDateSelectionState(day.date, mode, value);
|
|
231
|
-
if (!day.isCurrentMonth) {
|
|
232
|
-
return _jsx("td", { className: "h-10 w-10" }, temporalToISO(day.date));
|
|
233
|
-
}
|
|
234
|
-
return (
|
|
235
|
-
// Biome resolves <td> to role "cell" because it does not track the
|
|
236
|
-
// ancestor role="grid", under which a <td> is a gridcell and
|
|
237
|
-
// aria-selected is valid. axe, which does track it, passes.
|
|
238
|
-
// biome-ignore lint/a11y/useAriaPropsSupportedByRole: <td> in a grid is a gridcell
|
|
239
|
-
_jsx("td", { "aria-selected": selectionState.isSelected, className: "p-0", children: _jsx("button", { type: "button", "data-date": temporalToISO(day.date), onClick: () => handleDayClick(day.date), disabled: isDisabledDay, tabIndex: isSameDateTemporal(day.date, activeDate) ? 0 : -1, className: cn(`flex h-10 w-10 cursor-pointer items-center justify-center rounded-full text-sm transition-colors`, `hover:bg-bg-brand-strong hover:text-fg-on-brand-strong focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`, day.isToday && !selectionState.isSelected && "font-medium ring-1 ring-border-normal ring-inset", isDisabledDay && "cursor-not-allowed opacity-50", getRangePositionClasses(selectionState.rangePosition, selectionState.isSelected)), "aria-label": defaultFormatDisplay(day.date), children: day.date.day }) }, temporalToISO(day.date)));
|
|
240
|
-
}) }, temporalToISO(week[0].date)))) })] }), showFooter && (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { children: showToday && mode !== "range" && (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: handleToday, children: "Today" })) }), _jsxs("div", { className: "flex gap-2", children: [onCancel && (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onCancel, children: "Cancel" })), onApply && (_jsx(Button, { type: "button", variant: "solid", size: "sm", onClick: onApply, children: "Apply" }))] })] })] }))] })] }));
|
|
241
|
-
};
|
|
94
|
+
return _jsx(CalendarView, { ref: ref, ...viewProps });
|
|
95
|
+
});
|
|
96
|
+
Calendar.displayName = "Calendar";
|
|
242
97
|
//# sourceMappingURL=Calendar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CalendarView — the Temporal-typed calendar grid.
|
|
3
|
+
*
|
|
4
|
+
* Internal. Not reachable through the package's `exports` map: `./calendar`
|
|
5
|
+
* resolves to this directory's `index.ts`, which deliberately does not re-export
|
|
6
|
+
* it. Every picker composes this directly so that values cross the ISO boundary
|
|
7
|
+
* exactly once, at the picker's own edge, rather than being serialised and
|
|
8
|
+
* re-parsed on the way down to the grid.
|
|
9
|
+
*
|
|
10
|
+
* The public, ISO-typed `Calendar` is a thin wrapper in ./Calendar.tsx.
|
|
11
|
+
*/
|
|
12
|
+
import * as React from "react";
|
|
13
|
+
import type { CalendarViewProps } from "./calendar.types.js";
|
|
14
|
+
export declare const CalendarView: React.ForwardRefExoticComponent<CalendarViewProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
//# sourceMappingURL=CalendarView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalendarView.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/CalendarView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0B/B,OAAO,KAAK,EAAE,iBAAiB,EAAoE,MAAM,kBAAkB,CAAC;AAyB5H,eAAO,MAAM,YAAY,0FA0XvB,CAAC"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* CalendarView — the Temporal-typed calendar grid.
|
|
4
|
+
*
|
|
5
|
+
* Internal. Not reachable through the package's `exports` map: `./calendar`
|
|
6
|
+
* resolves to this directory's `index.ts`, which deliberately does not re-export
|
|
7
|
+
* it. Every picker composes this directly so that values cross the ISO boundary
|
|
8
|
+
* exactly once, at the picker's own edge, rather than being serialised and
|
|
9
|
+
* re-parsed on the way down to the grid.
|
|
10
|
+
*
|
|
11
|
+
* The public, ISO-typed `Calendar` is a thin wrapper in ./Calendar.tsx.
|
|
12
|
+
*/
|
|
13
|
+
import { cn } from "@sixthshift/design-system/utils";
|
|
14
|
+
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
15
|
+
import * as React from "react";
|
|
16
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
|
+
import { addDays, addMonths, endOfWeek, formatMonthYear, isPlainDate, isSameMonth, parseDate, startOfMonth, startOfWeek, today, } from "../../date-time/index.js";
|
|
18
|
+
import { Button } from "../Button/index.js";
|
|
19
|
+
import { Separator } from "../Separator/index.js";
|
|
20
|
+
import { defaultFormatDisplay, getDateSelectionState, isBeforeTemporal, isDateDisabled, isSameDateTemporal, temporalToISO, useCalendarDays, } from "./calendar.hooks.js";
|
|
21
|
+
const DAY_LABELS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
|
|
22
|
+
function getDayLabels(weekStartsOn) {
|
|
23
|
+
return [...DAY_LABELS.slice(weekStartsOn), ...DAY_LABELS.slice(0, weekStartsOn)];
|
|
24
|
+
}
|
|
25
|
+
function getRangePositionClasses(rangePosition, isSelected) {
|
|
26
|
+
if (!isSelected)
|
|
27
|
+
return "";
|
|
28
|
+
switch (rangePosition) {
|
|
29
|
+
case "start":
|
|
30
|
+
return "rounded-l-full rounded-r-none bg-bg-brand text-fg-on-brand";
|
|
31
|
+
case "end":
|
|
32
|
+
return "rounded-r-full rounded-l-none bg-bg-brand text-fg-on-brand";
|
|
33
|
+
case "middle":
|
|
34
|
+
return "rounded-none bg-bg-brand-subtle text-fg-normal";
|
|
35
|
+
case "single":
|
|
36
|
+
return "bg-bg-brand text-fg-on-brand";
|
|
37
|
+
default:
|
|
38
|
+
return "";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export const CalendarView = React.forwardRef((props, ref) => {
|
|
42
|
+
const { mode, month, onMonthChange, minDate, maxDate, disabled, weekStartsOn = 0, showFooter = false, showToday = true, onApply, onCancel, className, } = props;
|
|
43
|
+
// Get mode-specific props
|
|
44
|
+
const value = "value" in props ? props.value : undefined;
|
|
45
|
+
const onSelect = "onSelect" in props ? props.onSelect : undefined;
|
|
46
|
+
const presets = "presets" in props ? props.presets : undefined;
|
|
47
|
+
const max = mode === "multiple" && "max" in props ? props.max : undefined;
|
|
48
|
+
// Selection handler
|
|
49
|
+
const handleSelect = useCallback((temporalDate) => {
|
|
50
|
+
if (!onSelect)
|
|
51
|
+
return;
|
|
52
|
+
if (mode === "single") {
|
|
53
|
+
const currentValue = value;
|
|
54
|
+
if (currentValue && isSameDateTemporal(temporalDate, currentValue)) {
|
|
55
|
+
onSelect(undefined);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
onSelect(temporalDate);
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (mode === "multiple") {
|
|
63
|
+
const currentValue = value || [];
|
|
64
|
+
const existingIndex = currentValue.findIndex((d) => isSameDateTemporal(temporalDate, d));
|
|
65
|
+
if (existingIndex >= 0) {
|
|
66
|
+
onSelect(currentValue.filter((_, i) => i !== existingIndex));
|
|
67
|
+
}
|
|
68
|
+
else if (!max || currentValue.length < max) {
|
|
69
|
+
onSelect([...currentValue, temporalDate]);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Range mode
|
|
74
|
+
const currentRange = value || {
|
|
75
|
+
from: undefined,
|
|
76
|
+
to: undefined,
|
|
77
|
+
};
|
|
78
|
+
if (!currentRange.from) {
|
|
79
|
+
onSelect({ from: temporalDate, to: undefined });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (!currentRange.to) {
|
|
83
|
+
if (isBeforeTemporal(temporalDate, currentRange.from)) {
|
|
84
|
+
onSelect({ from: temporalDate, to: currentRange.from });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
onSelect({ from: currentRange.from, to: temporalDate });
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
onSelect({ from: temporalDate, to: undefined });
|
|
92
|
+
}, [mode, value, onSelect, max]);
|
|
93
|
+
// Today button
|
|
94
|
+
const handleToday = useCallback(() => {
|
|
95
|
+
if (!onSelect)
|
|
96
|
+
return;
|
|
97
|
+
const todayDate = today();
|
|
98
|
+
if (mode === "single") {
|
|
99
|
+
onSelect(todayDate);
|
|
100
|
+
}
|
|
101
|
+
else if (mode === "multiple") {
|
|
102
|
+
const current = value || [];
|
|
103
|
+
if (!current.some((d) => isSameDateTemporal(d, todayDate))) {
|
|
104
|
+
if (!max || current.length < max) {
|
|
105
|
+
onSelect([...current, todayDate]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
onMonthChange(todayDate);
|
|
110
|
+
}, [mode, value, onSelect, max, onMonthChange]);
|
|
111
|
+
// Preset selection
|
|
112
|
+
const handlePresetClick = useCallback((preset) => {
|
|
113
|
+
if (!onSelect)
|
|
114
|
+
return;
|
|
115
|
+
if (mode === "single" && isPlainDate(preset.value)) {
|
|
116
|
+
onSelect(preset.value);
|
|
117
|
+
}
|
|
118
|
+
else if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
|
|
119
|
+
onSelect(preset.value);
|
|
120
|
+
}
|
|
121
|
+
else if (mode === "multiple" && Array.isArray(preset.value)) {
|
|
122
|
+
onSelect(preset.value);
|
|
123
|
+
}
|
|
124
|
+
}, [mode, onSelect]);
|
|
125
|
+
// Calendar navigation
|
|
126
|
+
const handlePrevMonth = () => onMonthChange(addMonths(month, -1));
|
|
127
|
+
const handleNextMonth = () => onMonthChange(addMonths(month, 1));
|
|
128
|
+
const days = useCalendarDays(month, weekStartsOn);
|
|
129
|
+
const dayLabels = getDayLabels(weekStartsOn);
|
|
130
|
+
const handleDayClick = (date) => {
|
|
131
|
+
if (!isDateDisabled(date, disabled, minDate, maxDate)) {
|
|
132
|
+
handleSelect(date);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Roving focus
|
|
137
|
+
//
|
|
138
|
+
// A grid is a single tab stop: exactly one cell carries tabIndex={0} and the
|
|
139
|
+
// arrow keys move between cells. `focusedDate` is null until the user actually
|
|
140
|
+
// navigates, so we never steal focus on mount.
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
const [focusedDate, setFocusedDate] = useState(null);
|
|
143
|
+
const gridRef = useRef(null);
|
|
144
|
+
const firstSelected = useMemo(() => {
|
|
145
|
+
if (mode === "single")
|
|
146
|
+
return isPlainDate(value) ? value : undefined;
|
|
147
|
+
if (mode === "multiple")
|
|
148
|
+
return value?.[0];
|
|
149
|
+
return value?.from;
|
|
150
|
+
}, [mode, value]);
|
|
151
|
+
const activeDate = useMemo(() => {
|
|
152
|
+
const isUsable = (date) => isSameMonth(date, month) && !isDateDisabled(date, disabled, minDate, maxDate);
|
|
153
|
+
// Prefer where the user last was, then their selection, then today.
|
|
154
|
+
for (const candidate of [focusedDate, firstSelected, today()]) {
|
|
155
|
+
if (candidate && isUsable(candidate))
|
|
156
|
+
return candidate;
|
|
157
|
+
}
|
|
158
|
+
// Otherwise the first day of the month that can actually take focus, so the
|
|
159
|
+
// grid never ends up with zero tab stops.
|
|
160
|
+
const first = startOfMonth(month);
|
|
161
|
+
for (let i = 0; i < first.daysInMonth; i++) {
|
|
162
|
+
const candidate = addDays(first, i);
|
|
163
|
+
if (isUsable(candidate))
|
|
164
|
+
return candidate;
|
|
165
|
+
}
|
|
166
|
+
return first;
|
|
167
|
+
}, [focusedDate, firstSelected, month, disabled, minDate, maxDate]);
|
|
168
|
+
const moveFocus = useCallback((next) => {
|
|
169
|
+
setFocusedDate(next);
|
|
170
|
+
if (!isSameMonth(next, month))
|
|
171
|
+
onMonthChange(next);
|
|
172
|
+
}, [month, onMonthChange]);
|
|
173
|
+
const handleGridKeyDown = useCallback((event) => {
|
|
174
|
+
// Navigate from the cell that actually has focus, not from the derived
|
|
175
|
+
// tab stop — otherwise focusing a day without selecting it would make the
|
|
176
|
+
// arrow keys jump back to today.
|
|
177
|
+
const focusedIso = event.target?.closest?.("[data-date]")?.getAttribute("data-date");
|
|
178
|
+
const origin = focusedIso ? parseDate(focusedIso) : activeDate;
|
|
179
|
+
const dayStep = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };
|
|
180
|
+
const step = dayStep[event.key];
|
|
181
|
+
if (step !== undefined) {
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
moveFocus(addDays(origin, step));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
switch (event.key) {
|
|
187
|
+
case "Home":
|
|
188
|
+
event.preventDefault();
|
|
189
|
+
moveFocus(startOfWeek(origin, weekStartsOn));
|
|
190
|
+
break;
|
|
191
|
+
case "End":
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
moveFocus(endOfWeek(origin, weekStartsOn));
|
|
194
|
+
break;
|
|
195
|
+
case "PageUp":
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
moveFocus(addMonths(origin, -1));
|
|
198
|
+
break;
|
|
199
|
+
case "PageDown":
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
moveFocus(addMonths(origin, 1));
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}, [activeDate, moveFocus, weekStartsOn]);
|
|
207
|
+
// Follow the roving tabIndex with real DOM focus, but only once the user has
|
|
208
|
+
// started navigating.
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
if (!focusedDate)
|
|
211
|
+
return;
|
|
212
|
+
gridRef.current?.querySelector(`[data-date="${temporalToISO(focusedDate)}"]`)?.focus();
|
|
213
|
+
}, [focusedDate]);
|
|
214
|
+
// useCalendarDays always returns 42 days, so this is always 6 rows of 7.
|
|
215
|
+
const weeks = useMemo(() => {
|
|
216
|
+
const chunked = [];
|
|
217
|
+
for (let i = 0; i < days.length; i += 7)
|
|
218
|
+
chunked.push(days.slice(i, i + 7));
|
|
219
|
+
return chunked;
|
|
220
|
+
}, [days]);
|
|
221
|
+
// Check if a preset is currently active
|
|
222
|
+
const isPresetActive = useCallback((preset) => {
|
|
223
|
+
if (mode === "single" && isPlainDate(preset.value)) {
|
|
224
|
+
return isPlainDate(value) && isSameDateTemporal(value, preset.value);
|
|
225
|
+
}
|
|
226
|
+
if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
|
|
227
|
+
const draft = value;
|
|
228
|
+
const presetVal = preset.value;
|
|
229
|
+
const fromMatch = (!draft?.from && !presetVal.from) || (draft?.from && presetVal.from && isSameDateTemporal(draft.from, presetVal.from));
|
|
230
|
+
const toMatch = (!draft?.to && !presetVal.to) || (draft?.to && presetVal.to && isSameDateTemporal(draft.to, presetVal.to));
|
|
231
|
+
return Boolean(fromMatch && toMatch);
|
|
232
|
+
}
|
|
233
|
+
if (mode === "multiple" && Array.isArray(preset.value)) {
|
|
234
|
+
const draft = value || [];
|
|
235
|
+
const presetVal = preset.value;
|
|
236
|
+
return draft.length === presetVal.length && draft.every((d) => presetVal.some((p) => isSameDateTemporal(d, p)));
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}, [mode, value]);
|
|
240
|
+
return (_jsxs("div", { ref: ref, className: cn("flex", className), children: [presets && presets.length > 0 && (_jsx("div", { className: "mr-3 flex flex-col gap-1 border-border-normal border-r pr-3", children: presets.map((preset) => (_jsx("button", { type: "button", onClick: () => handlePresetClick(preset), className: cn(`rounded-md px-3 py-1.5 text-left text-sm transition-colors`, `hover:bg-bg-subtle focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`, isPresetActive(preset) && "bg-bg-brand-subtle text-fg-brand"), children: preset.label }, preset.label))) })), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("button", { type: "button", onClick: handlePrevMonth, className: "rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring", "aria-label": "Previous month", children: _jsx(ChevronLeft, { className: "h-5 w-5" }) }), _jsx("span", { className: "font-semibold text-sm", children: formatMonthYear(month) }), _jsx("button", { type: "button", onClick: handleNextMonth, className: "rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring", "aria-label": "Next month", children: _jsx(ChevronRight, { className: "h-5 w-5" }) })] }), _jsxs("table", { ref: gridRef, role: "grid", "aria-label": formatMonthYear(month), className: "border-separate border-spacing-1", onKeyDown: handleGridKeyDown, children: [_jsx("thead", { children: _jsx("tr", { children: dayLabels.map((label) => (_jsx("th", { scope: "col", className: "h-10 w-10 font-medium text-fg-subtle text-sm", children: label }, label))) }) }), _jsx("tbody", { children: weeks.map((week) => (_jsx("tr", { children: week.map((day) => {
|
|
241
|
+
const isDisabledDay = isDateDisabled(day.date, disabled, minDate, maxDate);
|
|
242
|
+
const selectionState = getDateSelectionState(day.date, mode, value);
|
|
243
|
+
if (!day.isCurrentMonth) {
|
|
244
|
+
return _jsx("td", { className: "h-10 w-10" }, temporalToISO(day.date));
|
|
245
|
+
}
|
|
246
|
+
return (
|
|
247
|
+
// Biome resolves <td> to role "cell" because it does not track the
|
|
248
|
+
// ancestor role="grid", under which a <td> is a gridcell and
|
|
249
|
+
// aria-selected is valid. axe, which does track it, passes.
|
|
250
|
+
// biome-ignore lint/a11y/useAriaPropsSupportedByRole: <td> in a grid is a gridcell
|
|
251
|
+
_jsx("td", { "aria-selected": selectionState.isSelected, className: "p-0", children: _jsx("button", { type: "button", "data-date": temporalToISO(day.date), onClick: () => handleDayClick(day.date), disabled: isDisabledDay, tabIndex: isSameDateTemporal(day.date, activeDate) ? 0 : -1, className: cn(`flex h-10 w-10 cursor-pointer items-center justify-center rounded-full text-sm transition-colors`, `hover:bg-bg-brand-strong hover:text-fg-on-brand-strong focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`, day.isToday && !selectionState.isSelected && "font-medium ring-1 ring-border-normal ring-inset", isDisabledDay && "cursor-not-allowed opacity-50", getRangePositionClasses(selectionState.rangePosition, selectionState.isSelected)), "aria-label": defaultFormatDisplay(day.date), children: day.date.day }) }, temporalToISO(day.date)));
|
|
252
|
+
}) }, temporalToISO(week[0].date)))) })] }), showFooter && (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { children: showToday && mode !== "range" && (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: handleToday, children: "Today" })) }), _jsxs("div", { className: "flex gap-2", children: [onCancel && (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onCancel, children: "Cancel" })), onApply && (_jsx(Button, { type: "button", variant: "solid", size: "sm", onClick: onApply, children: "Apply" }))] })] })] }))] })] }));
|
|
253
|
+
});
|
|
254
|
+
CalendarView.displayName = "CalendarView";
|
|
255
|
+
//# sourceMappingURL=CalendarView.js.map
|