@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
|
@@ -2,8 +2,9 @@ import { autoUpdate, FloatingPortal, flip, offset, shift, useClick, useDismiss,
|
|
|
2
2
|
import { useControllableState } from "@sixthshift/design-system/hooks";
|
|
3
3
|
import { cn } from "@sixthshift/design-system/utils";
|
|
4
4
|
import { Clock, X } from "lucide-react";
|
|
5
|
-
import
|
|
6
|
-
import { useCallback, useId, useState } from "react";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { useCallback, useId, useMemo, useState } from "react";
|
|
7
|
+
import { fromISOTime, fromISOTimeOrUndefined, type Temporal, toISOTimeOrUndefined } from "../../date-time";
|
|
7
8
|
import { Button } from "../Button";
|
|
8
9
|
import { Separator } from "../Separator";
|
|
9
10
|
import { PeriodSelector } from "./PeriodSelector";
|
|
@@ -25,7 +26,7 @@ import type { ParsedTime, TimePeriod, TimePickerProps, TimePresetOption } from "
|
|
|
25
26
|
|
|
26
27
|
export type { TimePickerProps };
|
|
27
28
|
|
|
28
|
-
export const TimePicker = (props
|
|
29
|
+
export const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>((props, ref) => {
|
|
29
30
|
const {
|
|
30
31
|
value,
|
|
31
32
|
defaultValue,
|
|
@@ -46,11 +47,27 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
46
47
|
// Open state
|
|
47
48
|
const [open, setOpen] = useState(false);
|
|
48
49
|
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// The ISO boundary.
|
|
52
|
+
//
|
|
53
|
+
// Props arrive as ISO time strings and onChange emits the canonical
|
|
54
|
+
// `HH:MM:SS` form; everything below works in Temporal.PlainTime as before.
|
|
55
|
+
// Each conversion is memoised on its source string, so the Temporal values
|
|
56
|
+
// handed to the hooks below stay referentially stable across renders.
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
const temporalValue = useMemo(() => fromISOTimeOrUndefined(value), [value]);
|
|
60
|
+
const temporalDefaultValue = useMemo(() => fromISOTimeOrUndefined(defaultValue), [defaultValue]);
|
|
61
|
+
const temporalMinTime = useMemo(() => fromISOTimeOrUndefined(minTime), [minTime]);
|
|
62
|
+
const temporalMaxTime = useMemo(() => fromISOTimeOrUndefined(maxTime), [maxTime]);
|
|
63
|
+
|
|
64
|
+
const handleChange = useCallback((next: Temporal.PlainTime | undefined) => onChange?.(toISOTimeOrUndefined(next)), [onChange]);
|
|
65
|
+
|
|
49
66
|
// Controllable value state (external/committed value)
|
|
50
|
-
const [committedValue, setCommittedValue] = useControllableState({
|
|
51
|
-
value,
|
|
52
|
-
defaultValue,
|
|
53
|
-
onChange,
|
|
67
|
+
const [committedValue, setCommittedValue] = useControllableState<Temporal.PlainTime | undefined>({
|
|
68
|
+
value: temporalValue,
|
|
69
|
+
defaultValue: temporalDefaultValue,
|
|
70
|
+
onChange: handleChange,
|
|
54
71
|
});
|
|
55
72
|
|
|
56
73
|
// Parse committed value
|
|
@@ -108,13 +125,13 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
108
125
|
const temporalTime = parsedToTemporal(parsed);
|
|
109
126
|
|
|
110
127
|
// Check if disabled
|
|
111
|
-
if (isTimeDisabled(temporalTime,
|
|
128
|
+
if (isTimeDisabled(temporalTime, temporalMinTime, temporalMaxTime)) {
|
|
112
129
|
return;
|
|
113
130
|
}
|
|
114
131
|
|
|
115
132
|
setCommittedValue(temporalTime);
|
|
116
133
|
setOpen(false);
|
|
117
|
-
}, [getDraftTime,
|
|
134
|
+
}, [getDraftTime, temporalMinTime, temporalMaxTime, setCommittedValue]);
|
|
118
135
|
|
|
119
136
|
// Cancel changes
|
|
120
137
|
const handleCancel = useCallback(() => {
|
|
@@ -144,7 +161,7 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
144
161
|
// Preset selection
|
|
145
162
|
const handlePresetClick = useCallback(
|
|
146
163
|
(preset: TimePresetOption) => {
|
|
147
|
-
const parsed = temporalToParsed(preset.value);
|
|
164
|
+
const parsed = temporalToParsed(fromISOTime(preset.value));
|
|
148
165
|
setDraftHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
|
|
149
166
|
setDraftMinute(parsed.minute);
|
|
150
167
|
setDraftSecond(parsed.second);
|
|
@@ -157,7 +174,7 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
157
174
|
const isPresetActive = useCallback(
|
|
158
175
|
(preset: TimePresetOption): boolean => {
|
|
159
176
|
const draftTime = getDraftTime();
|
|
160
|
-
const presetParsed = temporalToParsed(preset.value);
|
|
177
|
+
const presetParsed = temporalToParsed(fromISOTime(preset.value));
|
|
161
178
|
|
|
162
179
|
return (
|
|
163
180
|
draftTime.hour === presetParsed.hour && draftTime.minute === presetParsed.minute && (format === "HH:mm" || draftTime.second === presetParsed.second)
|
|
@@ -196,7 +213,7 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
196
213
|
return (
|
|
197
214
|
<>
|
|
198
215
|
{/* Trigger Input */}
|
|
199
|
-
<div className="relative flex items-center">
|
|
216
|
+
<div ref={ref} className="relative flex items-center">
|
|
200
217
|
<Clock className="pointer-events-none absolute left-3 h-4 w-4 text-fg-subtle" />
|
|
201
218
|
<input
|
|
202
219
|
ref={refs.setReference as React.Ref<HTMLInputElement>}
|
|
@@ -320,4 +337,5 @@ export const TimePicker = (props: TimePickerProps) => {
|
|
|
320
337
|
)}
|
|
321
338
|
</>
|
|
322
339
|
);
|
|
323
|
-
};
|
|
340
|
+
});
|
|
341
|
+
TimePicker.displayName = "TimePicker";
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TimePicker types
|
|
2
|
+
* TimePicker types.
|
|
3
3
|
*
|
|
4
|
-
* All time values
|
|
5
|
-
*
|
|
4
|
+
* All time values at the public boundary are ISO 8601 time strings. `"09:30"`
|
|
5
|
+
* and `"09:30:00"` are both accepted as input; `onChange` always emits the
|
|
6
|
+
* canonical `HH:MM:SS` form.
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
|
-
import type {
|
|
9
|
+
import type { ISOTime } from "../../date-time";
|
|
9
10
|
|
|
10
11
|
// =============================================================================
|
|
11
12
|
// Value Types
|
|
@@ -31,7 +32,7 @@ export type ClockFormat = "12h" | "24h";
|
|
|
31
32
|
|
|
32
33
|
export type TimePresetOption = {
|
|
33
34
|
label: string;
|
|
34
|
-
value:
|
|
35
|
+
value: ISOTime;
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
// =============================================================================
|
|
@@ -40,13 +41,13 @@ export type TimePresetOption = {
|
|
|
40
41
|
|
|
41
42
|
export type TimePickerProps = {
|
|
42
43
|
/** Controlled value */
|
|
43
|
-
value?:
|
|
44
|
+
value?: ISOTime | undefined;
|
|
44
45
|
|
|
45
46
|
/** Default value for uncontrolled mode */
|
|
46
|
-
defaultValue?:
|
|
47
|
+
defaultValue?: ISOTime | undefined;
|
|
47
48
|
|
|
48
|
-
/** Called when time changes */
|
|
49
|
-
onChange?: (time:
|
|
49
|
+
/** Called when time changes. Always canonical `HH:MM:SS`. */
|
|
50
|
+
onChange?: (time: ISOTime | undefined) => void;
|
|
50
51
|
|
|
51
52
|
/** Time format for the value (affects seconds visibility) */
|
|
52
53
|
format?: TimeFormat;
|
|
@@ -57,11 +58,11 @@ export type TimePickerProps = {
|
|
|
57
58
|
/** Minute step interval (default: 1) */
|
|
58
59
|
minuteStep?: 1 | 5 | 10 | 15 | 30;
|
|
59
60
|
|
|
60
|
-
/**
|
|
61
|
-
minTime?:
|
|
61
|
+
/** Earliest selectable time, inclusive */
|
|
62
|
+
minTime?: ISOTime;
|
|
62
63
|
|
|
63
|
-
/**
|
|
64
|
-
maxTime?:
|
|
64
|
+
/** Latest selectable time, inclusive */
|
|
65
|
+
maxTime?: ISOTime;
|
|
65
66
|
|
|
66
67
|
/** Preset options (shown in sidebar) */
|
|
67
68
|
presets?: TimePresetOption[];
|
package/src/date-time/index.ts
CHANGED
|
@@ -38,6 +38,67 @@
|
|
|
38
38
|
export type { Temporal as TemporalNamespace } from "@js-temporal/polyfill";
|
|
39
39
|
export { Temporal } from "@js-temporal/polyfill";
|
|
40
40
|
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// ISO 8601 strings — the component boundary
|
|
43
|
+
// =============================================================================
|
|
44
|
+
//
|
|
45
|
+
// Every date/time component accepts and emits these types, never Temporal. This
|
|
46
|
+
// section is the only part of the module a consumer needs in order to use the
|
|
47
|
+
// pickers; everything below it is for date arithmetic they choose to opt into.
|
|
48
|
+
|
|
49
|
+
export type {
|
|
50
|
+
DisabledDates,
|
|
51
|
+
ISODate,
|
|
52
|
+
ISODateRange,
|
|
53
|
+
ISODateTime,
|
|
54
|
+
ISOInstant,
|
|
55
|
+
ISOInstantRange,
|
|
56
|
+
ISOTime,
|
|
57
|
+
TemporalDateRange,
|
|
58
|
+
TemporalDisabledMatcher,
|
|
59
|
+
TemporalInstantRange,
|
|
60
|
+
Weekday,
|
|
61
|
+
} from "./iso";
|
|
62
|
+
export {
|
|
63
|
+
adaptDisabledDates,
|
|
64
|
+
// ISO-native arithmetic (no Temporal needed at the call site)
|
|
65
|
+
addDaysISO,
|
|
66
|
+
addHoursISO,
|
|
67
|
+
addMinutesISO,
|
|
68
|
+
addMonthsISO,
|
|
69
|
+
compareISO,
|
|
70
|
+
endOfMonthISO,
|
|
71
|
+
endOfWeekISO,
|
|
72
|
+
endOfYearISO,
|
|
73
|
+
// Widening: ISO string -> Temporal
|
|
74
|
+
fromISODate,
|
|
75
|
+
fromISODateOrUndefined,
|
|
76
|
+
fromISODateRange,
|
|
77
|
+
fromISOInstant,
|
|
78
|
+
fromISOInstantOrUndefined,
|
|
79
|
+
fromISOInstantRange,
|
|
80
|
+
fromISOTime,
|
|
81
|
+
fromISOTimeOrUndefined,
|
|
82
|
+
// Strict boundary guards
|
|
83
|
+
isDateString,
|
|
84
|
+
isInstantString,
|
|
85
|
+
isTimeString,
|
|
86
|
+
isWeekendISO,
|
|
87
|
+
startOfMonthISO,
|
|
88
|
+
startOfWeekISO,
|
|
89
|
+
startOfYearISO,
|
|
90
|
+
// Narrowing: string | Temporal -> canonical ISO
|
|
91
|
+
toISODate,
|
|
92
|
+
toISODateOrUndefined,
|
|
93
|
+
toISODateRange,
|
|
94
|
+
toISOInstant,
|
|
95
|
+
toISOInstantOrUndefined,
|
|
96
|
+
toISOInstantRange,
|
|
97
|
+
toISOTime,
|
|
98
|
+
toISOTimeOrUndefined,
|
|
99
|
+
weekdayISO,
|
|
100
|
+
} from "./iso";
|
|
101
|
+
|
|
41
102
|
// =============================================================================
|
|
42
103
|
// Parsing: ISO 8601 string → Temporal
|
|
43
104
|
// =============================================================================
|