@sixthshift/design-system 0.2.1 → 0.4.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 +242 -33
- package/dist/components/Badge/Badge.d.ts +65 -7
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Badge/Badge.js +56 -46
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/BarChart/BarChart.d.ts +20 -2
- package/dist/components/BarChart/BarChart.d.ts.map +1 -1
- package/dist/components/BarChart/BarChart.js +17 -3
- package/dist/components/BarChart/BarChart.js.map +1 -1
- package/dist/components/Button/Button.d.ts +85 -6
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +97 -106
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/index.d.ts +1 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +31 -1
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +94 -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 +263 -0
- package/dist/components/Calendar/CalendarView.js.map +1 -0
- package/dist/components/Calendar/calendar.types.d.ts +87 -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/Card/Card.d.ts +13 -0
- package/dist/components/Card/Card.d.ts.map +1 -1
- package/dist/components/Card/Card.js +15 -2
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +21 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +22 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +22 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.js +22 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
- package/dist/components/Code/Editor/Editor.js +2 -2
- package/dist/components/Code/Editor/Editor.js.map +1 -1
- package/dist/components/Code/Editor/themes.d.ts +2 -2
- package/dist/components/Code/Editor/themes.d.ts.map +1 -1
- package/dist/components/Code/Editor/themes.js +50 -32
- package/dist/components/Code/Editor/themes.js.map +1 -1
- package/dist/components/Code/ValidationStatus/ValidationStatus.d.ts.map +1 -1
- package/dist/components/Code/ValidationStatus/ValidationStatus.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +45 -2
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.js +228 -11
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DatePicker/DateSegments.d.ts +60 -0
- package/dist/components/DatePicker/DateSegments.d.ts.map +1 -0
- package/dist/components/DatePicker/DateSegments.js +80 -0
- package/dist/components/DatePicker/DateSegments.js.map +1 -0
- package/dist/components/DatePicker/datepicker.types.d.ts +53 -37
- 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 +22 -3
- package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.js +38 -24
- package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/DateRangePicker/daterangepicker.types.d.ts +26 -21
- 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 +32 -4
- package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.js +133 -42
- package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/dist/components/DateTimePicker/DateTimeSegments.d.ts +41 -0
- package/dist/components/DateTimePicker/DateTimeSegments.d.ts.map +1 -0
- package/dist/components/DateTimePicker/DateTimeSegments.js +67 -0
- package/dist/components/DateTimePicker/DateTimeSegments.js.map +1 -0
- package/dist/components/DateTimePicker/datetimepicker.types.d.ts +26 -18
- 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 +30 -4
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +171 -72
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts +28 -19
- 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/Field/Field.d.ts +18 -20
- package/dist/components/Field/Field.d.ts.map +1 -1
- package/dist/components/Field/Field.js +22 -5
- package/dist/components/Field/Field.js.map +1 -1
- package/dist/components/FormField/FormField.d.ts +15 -0
- package/dist/components/FormField/FormField.d.ts.map +1 -1
- package/dist/components/FormField/FormField.js +15 -0
- package/dist/components/FormField/FormField.js.map +1 -1
- package/dist/components/HoverCard/HoverCard.d.ts +6 -0
- package/dist/components/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/components/HoverCard/HoverCard.js +6 -0
- package/dist/components/HoverCard/HoverCard.js.map +1 -1
- package/dist/components/Input/Input.d.ts +15 -0
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/Input.js +18 -3
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/LineChart/LineChart.d.ts +35 -2
- package/dist/components/LineChart/LineChart.d.ts.map +1 -1
- package/dist/components/LineChart/LineChart.js +22 -3
- package/dist/components/LineChart/LineChart.js.map +1 -1
- package/dist/components/Markdown/Markdown.d.ts +19 -4
- package/dist/components/Markdown/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown/Markdown.js +20 -2
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Message/Message.d.ts +49 -4
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +62 -11
- package/dist/components/Message/Message.js.map +1 -1
- package/dist/components/Message/index.d.ts +1 -1
- package/dist/components/Message/index.d.ts.map +1 -1
- package/dist/components/Modal/Modal.d.ts +60 -5
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +52 -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/Popover/Popover.d.ts +29 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +36 -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 +16 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +19 -3
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/RadioButton/RadioButton.d.ts +26 -0
- package/dist/components/RadioButton/RadioButton.d.ts.map +1 -1
- package/dist/components/RadioButton/RadioButton.js +35 -1
- package/dist/components/RadioButton/RadioButton.js.map +1 -1
- package/dist/components/RadioButtonGroup/RadioButtonGroup.d.ts +26 -0
- package/dist/components/RadioButtonGroup/RadioButtonGroup.d.ts.map +1 -1
- package/dist/components/RadioButtonGroup/RadioButtonGroup.js +33 -0
- package/dist/components/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/dist/components/SearchInput/SearchInput.d.ts +10 -0
- package/dist/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/components/SearchInput/SearchInput.js +12 -1
- package/dist/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/Select/Select.d.ts +10 -2
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +63 -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 +20 -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/Separator/Separator.d.ts +10 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -1
- package/dist/components/Separator/Separator.js +10 -0
- package/dist/components/Separator/Separator.js.map +1 -1
- package/dist/components/Sheet/Sheet.d.ts +25 -5
- package/dist/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/components/Sheet/Sheet.js +24 -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/SheetFooter.js +1 -1
- package/dist/components/Sheet/components/SheetFooter.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/Sparkline/Sparkline.d.ts +21 -2
- package/dist/components/Sparkline/Sparkline.d.ts.map +1 -1
- package/dist/components/Sparkline/Sparkline.js +16 -3
- package/dist/components/Sparkline/Sparkline.js.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts +27 -2
- package/dist/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.js +28 -3
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +18 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -1
- package/dist/components/Switch/Switch.js +19 -1
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +8 -2
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +6 -0
- package/dist/components/Tabs/Tabs.js.map +1 -1
- 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/Tabs/components/TabsTrigger.d.ts.map +1 -1
- package/dist/components/Tabs/components/TabsTrigger.js +22 -6
- package/dist/components/Tabs/components/TabsTrigger.js.map +1 -1
- package/dist/components/TagChip/TagChip.d.ts +16 -13
- package/dist/components/TagChip/TagChip.d.ts.map +1 -1
- package/dist/components/TagChip/TagChip.js +18 -3
- package/dist/components/TagChip/TagChip.js.map +1 -1
- package/dist/components/TagInput/TagInput.d.ts +12 -9
- package/dist/components/TagInput/TagInput.d.ts.map +1 -1
- package/dist/components/TagInput/TagInput.js +16 -4
- package/dist/components/TagInput/TagInput.js.map +1 -1
- package/dist/components/Text/Text.d.ts +9 -0
- package/dist/components/Text/Text.d.ts.map +1 -1
- package/dist/components/Text/Text.js +9 -0
- package/dist/components/Text/Text.js.map +1 -1
- package/dist/components/TextInline/TextInline.d.ts +15 -4
- package/dist/components/TextInline/TextInline.d.ts.map +1 -1
- package/dist/components/TextInline/TextInline.js +11 -0
- package/dist/components/TextInline/TextInline.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +12 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea/Textarea.js +13 -1
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/TimePicker/TimeColumn.d.ts +10 -1
- package/dist/components/TimePicker/TimeColumn.d.ts.map +1 -1
- package/dist/components/TimePicker/TimeColumn.js +8 -1
- package/dist/components/TimePicker/TimeColumn.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.d.ts +34 -2
- package/dist/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/components/TimePicker/TimePicker.js +118 -15
- package/dist/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/TimePicker/TimeSegments.d.ts +50 -0
- package/dist/components/TimePicker/TimeSegments.d.ts.map +1 -0
- package/dist/components/TimePicker/TimeSegments.js +93 -0
- package/dist/components/TimePicker/TimeSegments.js.map +1 -0
- package/dist/components/TimePicker/timepicker.hooks.d.ts +0 -4
- package/dist/components/TimePicker/timepicker.hooks.d.ts.map +1 -1
- package/dist/components/TimePicker/timepicker.hooks.js +1 -23
- package/dist/components/TimePicker/timepicker.hooks.js.map +1 -1
- package/dist/components/TimePicker/timepicker.types.d.ts +14 -15
- 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/components/Toast/Toast.d.ts +27 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -1
- package/dist/components/Toast/Toast.js +28 -1
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Toggle/Toggle.d.ts +31 -12
- package/dist/components/Toggle/Toggle.d.ts.map +1 -1
- package/dist/components/Toggle/Toggle.js +19 -31
- package/dist/components/Toggle/Toggle.js.map +1 -1
- package/dist/components/Toggle/index.d.ts +1 -1
- package/dist/components/Toggle/index.d.ts.map +1 -1
- package/dist/components/Toggle/index.js +1 -1
- package/dist/components/Toggle/index.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +17 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.js +17 -0
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupItem.d.ts +1 -1
- package/dist/components/ToggleGroup/ToggleGroupItem.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupItem.js +7 -6
- package/dist/components/ToggleGroup/ToggleGroupItem.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupMultiple.d.ts +4 -3
- package/dist/components/ToggleGroup/ToggleGroupMultiple.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupMultiple.js +2 -2
- package/dist/components/ToggleGroup/ToggleGroupMultiple.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupSingle.d.ts +4 -3
- package/dist/components/ToggleGroup/ToggleGroupSingle.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroupSingle.js +2 -2
- package/dist/components/ToggleGroup/ToggleGroupSingle.js.map +1 -1
- package/dist/components/ToggleGroup/toggleGroup.types.d.ts +12 -3
- package/dist/components/ToggleGroup/toggleGroup.types.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +6 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +6 -0
- package/dist/components/Tooltip/Tooltip.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 -1
- 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/internal/PickerField.d.ts +45 -0
- package/dist/internal/PickerField.d.ts.map +1 -0
- package/dist/internal/PickerField.js +24 -0
- package/dist/internal/PickerField.js.map +1 -0
- package/dist/internal/SegmentedField.d.ts +98 -0
- package/dist/internal/SegmentedField.d.ts.map +1 -0
- package/dist/internal/SegmentedField.js +315 -0
- package/dist/internal/SegmentedField.js.map +1 -0
- package/dist/internal/index.d.ts +2 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +2 -0
- package/dist/internal/index.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 +49 -33
- package/dist/theme/schema.d.ts.map +1 -1
- package/dist/theme/schema.js +30 -21
- package/dist/theme/schema.js.map +1 -1
- package/package.json +11 -59
- package/src/components/Badge/Badge.tsx +87 -49
- package/src/components/Badge/index.ts +10 -1
- package/src/components/BarChart/BarChart.tsx +37 -30
- package/src/components/Button/Button.tsx +129 -106
- package/src/components/Button/index.ts +10 -1
- package/src/components/Calendar/Calendar.tsx +104 -401
- package/src/components/Calendar/CalendarView.tsx +454 -0
- package/src/components/Calendar/calendar.types.ts +104 -29
- package/src/components/Calendar/index.ts +16 -17
- package/src/components/Card/Card.tsx +15 -2
- package/src/components/Checkbox/Checkbox.tsx +22 -2
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -0
- package/src/components/Code/Editor/Editor.tsx +2 -2
- package/src/components/Code/Editor/themes.ts +50 -32
- package/src/components/Code/ValidationStatus/ValidationStatus.tsx +6 -3
- package/src/components/DatePicker/DatePicker.tsx +369 -42
- package/src/components/DatePicker/DateSegments.tsx +125 -0
- package/src/components/DatePicker/datepicker.types.ts +58 -39
- package/src/components/DatePicker/index.ts +11 -3
- package/src/components/DateRangePicker/DateRangePicker.tsx +38 -24
- package/src/components/DateRangePicker/daterangepicker.types.ts +29 -23
- package/src/components/DateRangePicker/index.ts +9 -1
- package/src/components/DateTimePicker/DateTimePicker.tsx +189 -88
- package/src/components/DateTimePicker/DateTimeSegments.tsx +113 -0
- package/src/components/DateTimePicker/datetimepicker.types.ts +29 -19
- package/src/components/DateTimePicker/index.ts +9 -1
- package/src/components/DateTimeRangePicker/DateTimeRangePicker.tsx +251 -126
- package/src/components/DateTimeRangePicker/datetimerangepicker.types.ts +31 -20
- package/src/components/DateTimeRangePicker/index.ts +9 -0
- package/src/components/Field/Field.tsx +25 -26
- package/src/components/FormField/FormField.tsx +15 -0
- package/src/components/HoverCard/HoverCard.tsx +6 -0
- package/src/components/Input/Input.tsx +19 -4
- package/src/components/LineChart/LineChart.tsx +164 -141
- package/src/components/Markdown/Markdown.tsx +21 -3
- package/src/components/Message/Message.tsx +83 -17
- package/src/components/Message/index.ts +1 -1
- package/src/components/Modal/Modal.tsx +157 -86
- package/src/components/Modal/components/ModalContext.tsx +14 -0
- package/src/components/Modal/components/ModalHeader.tsx +15 -3
- package/src/components/Popover/Popover.tsx +36 -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 +46 -28
- package/src/components/RadioButton/RadioButton.tsx +34 -3
- package/src/components/RadioButtonGroup/RadioButtonGroup.tsx +32 -0
- package/src/components/SearchInput/SearchInput.tsx +13 -2
- package/src/components/Select/Select.tsx +75 -19
- package/src/components/Select/SelectDropdown.tsx +45 -12
- package/src/components/Select/SelectTrigger.tsx +31 -8
- package/src/components/Select/useSelectKeyboard.ts +20 -10
- package/src/components/Separator/Separator.tsx +10 -0
- package/src/components/Sheet/Sheet.tsx +114 -83
- package/src/components/Sheet/components/SheetContext.tsx +10 -0
- package/src/components/Sheet/components/SheetFooter.tsx +1 -1
- package/src/components/Sheet/components/SheetHeader.tsx +18 -3
- package/src/components/Sparkline/Sparkline.tsx +40 -36
- package/src/components/Spinner/Spinner.tsx +28 -3
- package/src/components/Switch/Switch.tsx +27 -4
- package/src/components/Tabs/Tabs.tsx +6 -0
- package/src/components/Tabs/components/TabsList.tsx +5 -3
- package/src/components/Tabs/components/TabsPanels.tsx +5 -3
- package/src/components/Tabs/components/TabsTrigger.tsx +22 -5
- package/src/components/TagChip/TagChip.tsx +27 -18
- package/src/components/TagInput/TagInput.tsx +16 -11
- package/src/components/Text/Text.tsx +9 -0
- package/src/components/TextInline/TextInline.tsx +11 -0
- package/src/components/Textarea/Textarea.tsx +13 -1
- package/src/components/TimePicker/TimeColumn.tsx +24 -1
- package/src/components/TimePicker/TimePicker.tsx +157 -51
- package/src/components/TimePicker/TimeSegments.tsx +131 -0
- package/src/components/TimePicker/timepicker.hooks.ts +1 -24
- package/src/components/TimePicker/timepicker.types.ts +14 -16
- package/src/components/Toast/Toast.tsx +28 -1
- package/src/components/Toggle/Toggle.tsx +34 -32
- package/src/components/Toggle/index.ts +1 -1
- package/src/components/ToggleGroup/ToggleGroup.tsx +17 -0
- package/src/components/ToggleGroup/ToggleGroupItem.tsx +13 -8
- package/src/components/ToggleGroup/ToggleGroupMultiple.tsx +3 -1
- package/src/components/ToggleGroup/ToggleGroupSingle.tsx +3 -1
- package/src/components/ToggleGroup/toggleGroup.types.ts +12 -3
- package/src/components/Tooltip/Tooltip.tsx +6 -0
- package/src/date-time/index.ts +61 -1
- package/src/date-time/iso.ts +511 -0
- package/src/date-time/now.ts +10 -9
- package/src/internal/PickerField.tsx +90 -0
- package/src/internal/SegmentedField.tsx +445 -0
- package/src/internal/index.ts +2 -0
- package/src/theme/index.ts +11 -9
- package/src/theme/recipes/badge.css +140 -0
- package/src/theme/recipes/button.css +167 -0
- package/src/theme/recipes/card.css +26 -0
- package/src/theme/recipes/checkbox.css +44 -0
- package/src/theme/recipes/field.css +14 -0
- package/src/theme/recipes/index.css +28 -0
- package/src/theme/recipes/input.css +29 -0
- package/src/theme/recipes/message.css +47 -0
- package/src/theme/recipes/modal.css +31 -0
- package/src/theme/recipes/radio-button.css +42 -0
- package/src/theme/recipes/search-input.css +16 -0
- package/src/theme/recipes/select.css +105 -0
- package/src/theme/recipes/sheet.css +34 -0
- package/src/theme/recipes/spinner.css +17 -0
- package/src/theme/recipes/switch.css +39 -0
- package/src/theme/recipes/tabs.css +41 -0
- package/src/theme/recipes/tag-chip.css +27 -0
- package/src/theme/recipes/textarea.css +20 -0
- package/src/theme/recipes/toggle.css +92 -0
- package/src/theme/schema.ts +59 -58
- package/src/theme/tokens.css +824 -0
- package/dist/components/Avatar/Avatar.d.ts +0 -6
- package/dist/components/Avatar/Avatar.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.js +0 -11
- package/dist/components/Avatar/Avatar.js.map +0 -1
- package/dist/components/Avatar/index.d.ts +0 -2
- package/dist/components/Avatar/index.d.ts.map +0 -1
- package/dist/components/Avatar/index.js +0 -2
- package/dist/components/Avatar/index.js.map +0 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +0 -12
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +0 -1
- package/dist/components/Breadcrumb/Breadcrumb.js +0 -19
- package/dist/components/Breadcrumb/Breadcrumb.js.map +0 -1
- package/dist/components/Breadcrumb/index.d.ts +0 -2
- package/dist/components/Breadcrumb/index.d.ts.map +0 -1
- package/dist/components/Breadcrumb/index.js +0 -2
- package/dist/components/Breadcrumb/index.js.map +0 -1
- package/dist/components/ColorDot/ColorDot.d.ts +0 -13
- package/dist/components/ColorDot/ColorDot.d.ts.map +0 -1
- package/dist/components/ColorDot/ColorDot.js +0 -34
- package/dist/components/ColorDot/ColorDot.js.map +0 -1
- package/dist/components/ColorDot/index.d.ts +0 -2
- package/dist/components/ColorDot/index.d.ts.map +0 -1
- package/dist/components/ColorDot/index.js +0 -2
- package/dist/components/ColorDot/index.js.map +0 -1
- package/dist/components/EmptyState/EmptyState.d.ts +0 -15
- package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
- package/dist/components/EmptyState/EmptyState.js +0 -7
- package/dist/components/EmptyState/EmptyState.js.map +0 -1
- package/dist/components/EmptyState/index.d.ts +0 -2
- package/dist/components/EmptyState/index.d.ts.map +0 -1
- package/dist/components/EmptyState/index.js +0 -2
- package/dist/components/EmptyState/index.js.map +0 -1
- package/dist/components/HeatMap/HeatMapCalendar.d.ts +0 -11
- package/dist/components/HeatMap/HeatMapCalendar.d.ts.map +0 -1
- package/dist/components/HeatMap/HeatMapCalendar.js +0 -68
- package/dist/components/HeatMap/HeatMapCalendar.js.map +0 -1
- package/dist/components/HeatMap/HeatMapMatrix.d.ts +0 -12
- package/dist/components/HeatMap/HeatMapMatrix.d.ts.map +0 -1
- package/dist/components/HeatMap/HeatMapMatrix.js +0 -35
- package/dist/components/HeatMap/HeatMapMatrix.js.map +0 -1
- package/dist/components/HeatMap/heat-map.utils.d.ts +0 -10
- package/dist/components/HeatMap/heat-map.utils.d.ts.map +0 -1
- package/dist/components/HeatMap/heat-map.utils.js +0 -10
- package/dist/components/HeatMap/heat-map.utils.js.map +0 -1
- package/dist/components/HeatMap/index.d.ts +0 -4
- package/dist/components/HeatMap/index.d.ts.map +0 -1
- package/dist/components/HeatMap/index.js +0 -3
- package/dist/components/HeatMap/index.js.map +0 -1
- package/dist/components/MetricList/MetricList.d.ts +0 -9
- package/dist/components/MetricList/MetricList.d.ts.map +0 -1
- package/dist/components/MetricList/MetricList.js +0 -6
- package/dist/components/MetricList/MetricList.js.map +0 -1
- package/dist/components/MetricList/MetricRow.d.ts +0 -13
- package/dist/components/MetricList/MetricRow.d.ts.map +0 -1
- package/dist/components/MetricList/MetricRow.js +0 -13
- package/dist/components/MetricList/MetricRow.js.map +0 -1
- package/dist/components/MetricList/index.d.ts +0 -3
- package/dist/components/MetricList/index.d.ts.map +0 -1
- package/dist/components/MetricList/index.js +0 -3
- package/dist/components/MetricList/index.js.map +0 -1
- package/dist/components/NavBottom/NavBottom.d.ts +0 -15
- package/dist/components/NavBottom/NavBottom.d.ts.map +0 -1
- package/dist/components/NavBottom/NavBottom.js +0 -19
- package/dist/components/NavBottom/NavBottom.js.map +0 -1
- package/dist/components/NavBottom/index.d.ts +0 -3
- package/dist/components/NavBottom/index.d.ts.map +0 -1
- package/dist/components/NavBottom/index.js +0 -2
- package/dist/components/NavBottom/index.js.map +0 -1
- package/dist/components/NavSide/NavItem.d.ts +0 -9
- package/dist/components/NavSide/NavItem.d.ts.map +0 -1
- package/dist/components/NavSide/NavItem.js +0 -13
- package/dist/components/NavSide/NavItem.js.map +0 -1
- package/dist/components/NavSide/NavSide.d.ts +0 -15
- package/dist/components/NavSide/NavSide.d.ts.map +0 -1
- package/dist/components/NavSide/NavSide.js +0 -10
- package/dist/components/NavSide/NavSide.js.map +0 -1
- package/dist/components/NavSide/index.d.ts +0 -3
- package/dist/components/NavSide/index.d.ts.map +0 -1
- package/dist/components/NavSide/index.js +0 -2
- package/dist/components/NavSide/index.js.map +0 -1
- package/dist/components/NavSide/types.d.ts +0 -38
- package/dist/components/NavSide/types.d.ts.map +0 -1
- package/dist/components/NavSide/types.js +0 -2
- package/dist/components/NavSide/types.js.map +0 -1
- package/dist/components/Pagination/Pagination.d.ts +0 -35
- package/dist/components/Pagination/Pagination.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.js +0 -26
- package/dist/components/Pagination/Pagination.js.map +0 -1
- package/dist/components/Pagination/index.d.ts +0 -3
- package/dist/components/Pagination/index.d.ts.map +0 -1
- package/dist/components/Pagination/index.js +0 -2
- package/dist/components/Pagination/index.js.map +0 -1
- package/dist/components/Skeleton/Skeleton.d.ts +0 -3
- package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
- package/dist/components/Skeleton/Skeleton.js +0 -7
- package/dist/components/Skeleton/Skeleton.js.map +0 -1
- package/dist/components/Skeleton/index.d.ts +0 -2
- package/dist/components/Skeleton/index.d.ts.map +0 -1
- package/dist/components/Skeleton/index.js +0 -2
- package/dist/components/Skeleton/index.js.map +0 -1
- package/dist/components/StatsCard/StatsCard.d.ts +0 -17
- package/dist/components/StatsCard/StatsCard.d.ts.map +0 -1
- package/dist/components/StatsCard/StatsCard.js +0 -13
- package/dist/components/StatsCard/StatsCard.js.map +0 -1
- package/dist/components/StatsCard/index.d.ts +0 -2
- package/dist/components/StatsCard/index.d.ts.map +0 -1
- package/dist/components/StatsCard/index.js +0 -2
- package/dist/components/StatsCard/index.js.map +0 -1
- package/dist/styles.css +0 -2
- package/dist/theme.generated.css +0 -438
- package/src/components/Avatar/Avatar.tsx +0 -19
- package/src/components/Avatar/index.ts +0 -1
- package/src/components/Breadcrumb/Breadcrumb.tsx +0 -47
- package/src/components/Breadcrumb/index.ts +0 -5
- package/src/components/ColorDot/ColorDot.tsx +0 -50
- package/src/components/ColorDot/index.ts +0 -1
- package/src/components/EmptyState/EmptyState.tsx +0 -29
- package/src/components/EmptyState/index.ts +0 -1
- package/src/components/HeatMap/HeatMapCalendar.tsx +0 -127
- package/src/components/HeatMap/HeatMapMatrix.tsx +0 -75
- package/src/components/HeatMap/heat-map.utils.ts +0 -15
- package/src/components/HeatMap/index.ts +0 -3
- package/src/components/MetricList/MetricList.tsx +0 -13
- package/src/components/MetricList/MetricRow.tsx +0 -30
- package/src/components/MetricList/index.ts +0 -2
- package/src/components/NavBottom/NavBottom.tsx +0 -53
- package/src/components/NavBottom/index.ts +0 -3
- package/src/components/NavSide/NavItem.tsx +0 -39
- package/src/components/NavSide/NavSide.tsx +0 -40
- package/src/components/NavSide/index.ts +0 -2
- package/src/components/NavSide/types.ts +0 -36
- package/src/components/Pagination/Pagination.tsx +0 -86
- package/src/components/Pagination/index.ts +0 -2
- package/src/components/Skeleton/Skeleton.tsx +0 -7
- package/src/components/Skeleton/index.ts +0 -1
- package/src/components/StatsCard/StatsCard.tsx +0 -40
- package/src/components/StatsCard/index.ts +0 -1
- 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,14 +1,28 @@
|
|
|
1
1
|
import { autoUpdate, FloatingPortal, flip, offset, shift, useClick, useDismiss, useFloating, useInteractions } from "@floating-ui/react";
|
|
2
2
|
import { useControllableState } from "@sixthshift/design-system/hooks";
|
|
3
3
|
import { cn } from "@sixthshift/design-system/utils";
|
|
4
|
-
import { Calendar as CalendarIcon
|
|
5
|
-
import
|
|
6
|
-
import { useCallback, useId, useMemo, useState } from "react";
|
|
7
|
-
import {
|
|
8
|
-
|
|
4
|
+
import { Calendar as CalendarIcon } from "lucide-react";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
7
|
+
import {
|
|
8
|
+
adaptDisabledDates,
|
|
9
|
+
fromISODateOrUndefined,
|
|
10
|
+
fromISOInstantRange,
|
|
11
|
+
fromISOTimeOrUndefined,
|
|
12
|
+
now,
|
|
13
|
+
Temporal,
|
|
14
|
+
type TemporalInstantRange,
|
|
15
|
+
today,
|
|
16
|
+
toISOInstant,
|
|
17
|
+
toISOInstantRange,
|
|
18
|
+
} from "../../date-time";
|
|
19
|
+
|
|
20
|
+
import { PickerField } from "../../internal";
|
|
9
21
|
import { Button } from "../Button";
|
|
10
|
-
import {
|
|
22
|
+
import { CalendarView } from "../Calendar/CalendarView";
|
|
23
|
+
import { isDateDisabled } from "../Calendar/calendar.hooks";
|
|
11
24
|
import type { DateRangeValue } from "../Calendar/calendar.types";
|
|
25
|
+
import { DateTimeSegments } from "../DateTimePicker/DateTimeSegments";
|
|
12
26
|
import { Separator } from "../Separator";
|
|
13
27
|
import { PeriodSelector } from "../TimePicker/PeriodSelector";
|
|
14
28
|
import { TimeColumn } from "../TimePicker/TimeColumn";
|
|
@@ -25,60 +39,10 @@ import {
|
|
|
25
39
|
import type { ParsedTime, TimePeriod } from "../TimePicker/timepicker.types";
|
|
26
40
|
import type { DateTimeRangePickerProps, DateTimeRangePresetOption, DateTimeRangeValue } from "./datetimerangepicker.types";
|
|
27
41
|
|
|
28
|
-
/**
|
|
29
|
-
* Format an Instant for display
|
|
30
|
-
*/
|
|
31
|
-
function formatInstantDisplay(instant: Temporal.Instant, clockFormat: "12h" | "24h", showSeconds: boolean, timeZone?: string): string {
|
|
32
|
-
const tz = timeZone ?? Temporal.Now.timeZoneId();
|
|
33
|
-
const zoned = instant.toZonedDateTimeISO(tz);
|
|
34
|
-
const plainDateTime = zoned.toPlainDateTime();
|
|
35
|
-
|
|
36
|
-
// Format date part
|
|
37
|
-
const datePart = plainDateTime.toLocaleString("en-US", {
|
|
38
|
-
month: "long",
|
|
39
|
-
day: "numeric",
|
|
40
|
-
year: "numeric",
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// Format time part based on props
|
|
44
|
-
const timeOptions: Intl.DateTimeFormatOptions = {
|
|
45
|
-
hour: "numeric",
|
|
46
|
-
minute: "2-digit",
|
|
47
|
-
hour12: clockFormat === "12h",
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
if (showSeconds) {
|
|
51
|
-
timeOptions.second = "2-digit";
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const timePart = plainDateTime.toLocaleString("en-US", timeOptions);
|
|
55
|
-
|
|
56
|
-
return `${datePart}, ${timePart}`;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Format an Instant range for display
|
|
61
|
-
*/
|
|
62
|
-
function formatRangeDisplay(range: DateTimeRangeValue | undefined, clockFormat: "12h" | "24h", showSeconds: boolean): string {
|
|
63
|
-
if (!range?.from && !range?.to) {
|
|
64
|
-
return "";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (range.from && !range.to) {
|
|
68
|
-
return `${formatInstantDisplay(range.from, clockFormat, showSeconds)} – ...`;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (!range.from && range.to) {
|
|
72
|
-
return `... – ${formatInstantDisplay(range.to, clockFormat, showSeconds)}`;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return `${formatInstantDisplay(range.from!, clockFormat, showSeconds)} – ${formatInstantDisplay(range.to!, clockFormat, showSeconds)}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
42
|
/**
|
|
79
43
|
* Default preset ranges for DateTimeRangePicker
|
|
80
44
|
*
|
|
81
|
-
* Uses clean hour boundaries and returns
|
|
45
|
+
* Uses clean hour boundaries and returns canonical UTC instant strings
|
|
82
46
|
*/
|
|
83
47
|
function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
84
48
|
return [
|
|
@@ -87,7 +51,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
87
51
|
value: () => {
|
|
88
52
|
const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
|
|
89
53
|
const start = end.subtract({ hours: 1 });
|
|
90
|
-
return { from: start, to: end };
|
|
54
|
+
return { from: toISOInstant(start), to: toISOInstant(end) };
|
|
91
55
|
},
|
|
92
56
|
},
|
|
93
57
|
{
|
|
@@ -95,7 +59,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
95
59
|
value: () => {
|
|
96
60
|
const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
|
|
97
61
|
const start = end.subtract({ hours: 24 });
|
|
98
|
-
return { from: start, to: end };
|
|
62
|
+
return { from: toISOInstant(start), to: toISOInstant(end) };
|
|
99
63
|
},
|
|
100
64
|
},
|
|
101
65
|
{
|
|
@@ -103,7 +67,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
103
67
|
value: () => {
|
|
104
68
|
const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
|
|
105
69
|
const start = end.subtract({ hours: 7 * 24 });
|
|
106
|
-
return { from: start, to: end };
|
|
70
|
+
return { from: toISOInstant(start), to: toISOInstant(end) };
|
|
107
71
|
},
|
|
108
72
|
},
|
|
109
73
|
{
|
|
@@ -111,7 +75,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
111
75
|
value: () => {
|
|
112
76
|
const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
|
|
113
77
|
const start = end.subtract({ hours: 30 * 24 });
|
|
114
|
-
return { from: start, to: end };
|
|
78
|
+
return { from: toISOInstant(start), to: toISOInstant(end) };
|
|
115
79
|
},
|
|
116
80
|
},
|
|
117
81
|
{
|
|
@@ -121,7 +85,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
121
85
|
const tz = Temporal.Now.timeZoneId();
|
|
122
86
|
const zonedNow = end.toZonedDateTimeISO(tz);
|
|
123
87
|
const startOfMonth = zonedNow.toPlainDate().with({ day: 1 }).toPlainDateTime(Temporal.PlainTime.from("00:00:00")).toZonedDateTime(tz).toInstant();
|
|
124
|
-
return { from: startOfMonth, to: end };
|
|
88
|
+
return { from: toISOInstant(startOfMonth), to: toISOInstant(end) };
|
|
125
89
|
},
|
|
126
90
|
},
|
|
127
91
|
];
|
|
@@ -130,10 +94,36 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
|
|
|
130
94
|
/**
|
|
131
95
|
* DateTimeRangePicker - A component for selecting a datetime range
|
|
132
96
|
*
|
|
133
|
-
* Combines
|
|
134
|
-
*
|
|
97
|
+
* Combines a single range calendar with two sets of time columns — Start Time
|
|
98
|
+
* and End Time — shown side by side below it. Like `DateTimePicker`, it is
|
|
99
|
+
* not a composition of other picker components: it builds directly on the
|
|
100
|
+
* same internal calendar grid and time-column primitives `TimePicker` and
|
|
101
|
+
* `DateTimePicker` use.
|
|
102
|
+
*
|
|
103
|
+
* The trigger is two typeable fields, one per end — each a full date-and-time
|
|
104
|
+
* (`1520260900a` is January 5th 2026 at 9am), each with its own clear button,
|
|
105
|
+
* sharing one popover that anchors to whichever half is being edited. A typed
|
|
106
|
+
* end that falls outside `minDate`/`maxDate`/`minTime`/`maxTime` is flagged
|
|
107
|
+
* rather than clamped. See `SegmentedField` for the keyboard model.
|
|
108
|
+
*
|
|
109
|
+
* The value is an `ISOInstantRange` (`{ from?: ISOInstant, to?: ISOInstant }`,
|
|
110
|
+
* exported as `DateTimeRangeValue` for historical reasons) — both ends
|
|
111
|
+
* absolute instants, always UTC and ending in `Z`. Each end is edited in the
|
|
112
|
+
* viewer's local timezone and converted to/from UTC at the boundary. Supports
|
|
113
|
+
* controlled (`value`/`onChange`) and uncontrolled (`defaultValue`) use.
|
|
114
|
+
*
|
|
115
|
+
* Opening the popover seeds date-range and time drafts from the committed
|
|
116
|
+
* value; the footer's Apply combines them into an instant range and commits,
|
|
117
|
+
* Cancel discards the draft. `minDate`/`maxDate` and `disabledDates` bound the
|
|
118
|
+
* date grid. `minTime`/`maxTime` are wall-clock bounds that apply to **both**
|
|
119
|
+
* the start and end time columns identically — they do not mean "start no
|
|
120
|
+
* earlier than X, end no later than Y" relative to each other, and they say
|
|
121
|
+
* nothing about the resulting instants (a `maxTime` of `17:00` still allows an
|
|
122
|
+
* end date after the start date). `presets` (a zero-arg-function value, like
|
|
123
|
+
* `DateRangePicker`) replaces the built-in preset list; `showPresets={false}`
|
|
124
|
+
* hides the sidebar.
|
|
135
125
|
*/
|
|
136
|
-
export const DateTimeRangePicker = (props
|
|
126
|
+
export const DateTimeRangePicker = React.forwardRef<HTMLDivElement, DateTimeRangePickerProps>((props, ref) => {
|
|
137
127
|
const {
|
|
138
128
|
value,
|
|
139
129
|
defaultValue,
|
|
@@ -147,8 +137,8 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
147
137
|
maxTime,
|
|
148
138
|
minuteStep = 1,
|
|
149
139
|
clockFormat = "12h",
|
|
140
|
+
segmentOrder = "mdy",
|
|
150
141
|
showSeconds = false,
|
|
151
|
-
placeholder = "Select datetime range...",
|
|
152
142
|
weekStartsOn = 0,
|
|
153
143
|
name,
|
|
154
144
|
isDisabled = false,
|
|
@@ -160,12 +150,33 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
160
150
|
|
|
161
151
|
// Open state
|
|
162
152
|
const [open, setOpen] = useState(false);
|
|
153
|
+
// The day grid takes focus only when the popover was opened from the keyboard.
|
|
154
|
+
const [autoFocusDay, setAutoFocusDay] = useState(false);
|
|
155
|
+
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
// The ISO boundary.
|
|
158
|
+
//
|
|
159
|
+
// Both ends of the range cross as canonical UTC instant strings; constraints
|
|
160
|
+
// cross as ISO dates and times. Below this block everything is Temporal, as
|
|
161
|
+
// before. Each conversion is memoised on its source value so the Temporal
|
|
162
|
+
// objects handed downstream stay referentially stable.
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
|
|
165
|
+
const temporalValue = useMemo(() => fromISOInstantRange(value), [value]);
|
|
166
|
+
const temporalDefaultValue = useMemo(() => fromISOInstantRange(defaultValue), [defaultValue]);
|
|
167
|
+
const temporalMinDate = useMemo(() => fromISODateOrUndefined(minDate), [minDate]);
|
|
168
|
+
const temporalMaxDate = useMemo(() => fromISODateOrUndefined(maxDate), [maxDate]);
|
|
169
|
+
const temporalMinTime = useMemo(() => fromISOTimeOrUndefined(minTime), [minTime]);
|
|
170
|
+
const temporalMaxTime = useMemo(() => fromISOTimeOrUndefined(maxTime), [maxTime]);
|
|
171
|
+
const temporalDisabledDates = useMemo(() => adaptDisabledDates(disabledDates), [disabledDates]);
|
|
172
|
+
|
|
173
|
+
const handleChange = useCallback((next: TemporalInstantRange | undefined) => onChange?.(toISOInstantRange(next)), [onChange]);
|
|
163
174
|
|
|
164
175
|
// Controllable value state (external/committed value)
|
|
165
|
-
const [committedValue, setCommittedValue] = useControllableState({
|
|
166
|
-
value,
|
|
167
|
-
defaultValue,
|
|
168
|
-
onChange,
|
|
176
|
+
const [committedValue, setCommittedValue] = useControllableState<TemporalInstantRange | undefined>({
|
|
177
|
+
value: temporalValue,
|
|
178
|
+
defaultValue: temporalDefaultValue,
|
|
179
|
+
onChange: handleChange,
|
|
169
180
|
});
|
|
170
181
|
|
|
171
182
|
// Draft state (date range + time parts for both start and end)
|
|
@@ -303,8 +314,8 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
303
314
|
};
|
|
304
315
|
}, [clockFormat, draftEndHour, draftEndMinute, draftEndSecond, draftEndPeriod]);
|
|
305
316
|
|
|
306
|
-
// Combine draft dates and times into
|
|
307
|
-
const getDraftRange = useCallback(():
|
|
317
|
+
// Combine draft dates and times into the internal Temporal range
|
|
318
|
+
const getDraftRange = useCallback((): TemporalInstantRange => {
|
|
308
319
|
const tz = Temporal.Now.timeZoneId();
|
|
309
320
|
|
|
310
321
|
const from = draftDateRange?.from
|
|
@@ -380,19 +391,11 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
380
391
|
}, [committedValue, clockFormat]);
|
|
381
392
|
|
|
382
393
|
// Clear value
|
|
383
|
-
const handleClear = useCallback(
|
|
384
|
-
(e: React.MouseEvent) => {
|
|
385
|
-
e.stopPropagation();
|
|
386
|
-
e.preventDefault();
|
|
387
|
-
setCommittedValue(undefined);
|
|
388
|
-
},
|
|
389
|
-
[setCommittedValue]
|
|
390
|
-
);
|
|
391
394
|
|
|
392
395
|
// Apply preset
|
|
393
396
|
const _handlePresetClick = useCallback(
|
|
394
397
|
(preset: { label: string; value: DateTimeRangeValue }) => {
|
|
395
|
-
setCommittedValue(preset.value);
|
|
398
|
+
setCommittedValue(fromISOInstantRange(preset.value));
|
|
396
399
|
setOpen(false);
|
|
397
400
|
},
|
|
398
401
|
[setCommittedValue]
|
|
@@ -414,11 +417,149 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
414
417
|
// IDs for accessibility
|
|
415
418
|
const id = useId();
|
|
416
419
|
const contentId = `datetimerangepicker-content-${id}`;
|
|
417
|
-
const inputId = `datetimerangepicker-input-${id}`;
|
|
418
420
|
|
|
419
421
|
// Display value (from committed value)
|
|
420
|
-
|
|
421
|
-
|
|
422
|
+
|
|
423
|
+
// ---------------------------------------------------------------------------
|
|
424
|
+
// Two typeable fields, one per end.
|
|
425
|
+
//
|
|
426
|
+
// A range is two instants, and typing one should not require knowing where the
|
|
427
|
+
// other ends. Each half is its own segmented field with its own clear button;
|
|
428
|
+
// they share the one popover, which anchors to whichever half is being edited.
|
|
429
|
+
// While it is open the fields show the draft, so picking in the grid or the
|
|
430
|
+
// columns shows up in the segments and vice versa.
|
|
431
|
+
// ---------------------------------------------------------------------------
|
|
432
|
+
|
|
433
|
+
const draftRange = getDraftRange();
|
|
434
|
+
const shownFor = (end: "from" | "to") => (open ? draftRange[end] : committedValue?.[end]);
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* A typed end can fall outside what the grid and columns allow. The field
|
|
438
|
+
* flags it rather than clamping; see `DatePicker` for why.
|
|
439
|
+
*/
|
|
440
|
+
const outOfBounds = (instant: Temporal.Instant | undefined) => {
|
|
441
|
+
if (!instant) return false;
|
|
442
|
+
const zoned = instant.toZonedDateTimeISO(userTimeZone);
|
|
443
|
+
return (
|
|
444
|
+
isDateDisabled(zoned.toPlainDate(), temporalDisabledDates, temporalMinDate, temporalMaxDate) ||
|
|
445
|
+
isTimeDisabled(zoned.toPlainTime(), temporalMinTime, temporalMaxTime)
|
|
446
|
+
);
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
const setRangeEnd = useCallback(
|
|
450
|
+
(end: "from" | "to", instant: Temporal.Instant | undefined) => {
|
|
451
|
+
if (!open) {
|
|
452
|
+
const next = { from: end === "from" ? instant : committedValue?.from, to: end === "to" ? instant : committedValue?.to };
|
|
453
|
+
setCommittedValue(next.from || next.to ? next : undefined);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (!instant) {
|
|
458
|
+
setDraftDateRange((current) => ({ from: end === "from" ? undefined : current?.from, to: end === "to" ? undefined : current?.to }));
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
const zoned = instant.toZonedDateTimeISO(userTimeZone);
|
|
463
|
+
const parsed = temporalToParsed(zoned.toPlainTime());
|
|
464
|
+
setDraftDateRange((current) => ({
|
|
465
|
+
from: end === "from" ? zoned.toPlainDate() : current?.from,
|
|
466
|
+
to: end === "to" ? zoned.toPlainDate() : current?.to,
|
|
467
|
+
}));
|
|
468
|
+
if (end === "from") {
|
|
469
|
+
setDraftStartHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
|
|
470
|
+
setDraftStartMinute(parsed.minute);
|
|
471
|
+
setDraftStartSecond(parsed.second);
|
|
472
|
+
setDraftStartPeriod(to12Hour(parsed.hour).period);
|
|
473
|
+
} else {
|
|
474
|
+
setDraftEndHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
|
|
475
|
+
setDraftEndMinute(parsed.minute);
|
|
476
|
+
setDraftEndSecond(parsed.second);
|
|
477
|
+
setDraftEndPeriod(to12Hour(parsed.hour).period);
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
[clockFormat, committedValue, open, setCommittedValue, userTimeZone]
|
|
481
|
+
);
|
|
482
|
+
|
|
483
|
+
const clearRangeEnd = useCallback(
|
|
484
|
+
(end: "from" | "to") => (event: React.MouseEvent) => {
|
|
485
|
+
event.stopPropagation();
|
|
486
|
+
event.preventDefault();
|
|
487
|
+
const next = { from: end === "from" ? undefined : committedValue?.from, to: end === "to" ? undefined : committedValue?.to };
|
|
488
|
+
// Clearing the last remaining end clears the range itself.
|
|
489
|
+
setCommittedValue(next.from || next.to ? next : undefined);
|
|
490
|
+
},
|
|
491
|
+
[committedValue, setCommittedValue]
|
|
492
|
+
);
|
|
493
|
+
|
|
494
|
+
const rangeHalves = useRef<Record<"from" | "to", HTMLDivElement | null>>({ from: null, to: null });
|
|
495
|
+
const anchorToHalf = useCallback(
|
|
496
|
+
(end: "from" | "to") => {
|
|
497
|
+
const node = rangeHalves.current[end];
|
|
498
|
+
if (node) refs.setPositionReference(node);
|
|
499
|
+
},
|
|
500
|
+
[refs]
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
/** `Alt+ArrowDown` from a segment: open the popover *and* go to the grid. */
|
|
504
|
+
const openWithGridFocus = useCallback(
|
|
505
|
+
(end: "from" | "to") => () => {
|
|
506
|
+
anchorToHalf(end);
|
|
507
|
+
setAutoFocusDay(true);
|
|
508
|
+
handleOpenChange(true);
|
|
509
|
+
},
|
|
510
|
+
[anchorToHalf, handleOpenChange]
|
|
511
|
+
);
|
|
512
|
+
|
|
513
|
+
/** `Enter` in a segment commits the draft, matching the popover's Apply. */
|
|
514
|
+
const handleFieldSubmit = useCallback(() => {
|
|
515
|
+
if (open) handleApply();
|
|
516
|
+
}, [handleApply, open]);
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* One end of the range. A render function rather than a component so the
|
|
520
|
+
* fields are not remounted — and focus is not dropped — on every keystroke.
|
|
521
|
+
*/
|
|
522
|
+
const renderRangeHalf = (end: "from" | "to", label: string) => {
|
|
523
|
+
const settled = committedValue?.[end];
|
|
524
|
+
|
|
525
|
+
return (
|
|
526
|
+
<PickerField
|
|
527
|
+
ref={(node) => {
|
|
528
|
+
rangeHalves.current[end] = node;
|
|
529
|
+
}}
|
|
530
|
+
onFocusCapture={() => anchorToHalf(end)}
|
|
531
|
+
className="min-w-70 flex-1"
|
|
532
|
+
icon={<CalendarIcon className="h-4 w-4" />}
|
|
533
|
+
toggleLabel={`Open picker for ${label.toLowerCase()}`}
|
|
534
|
+
// Both handlers have to run: Floating UI's opens the popover, and ours
|
|
535
|
+
// points it at this half. Spreading after `onClick` would drop ours on
|
|
536
|
+
// the floor, which is how the popover ended up anchored to the whole
|
|
537
|
+
// trigger.
|
|
538
|
+
toggleProps={getReferenceProps({ onClick: () => anchorToHalf(end) })}
|
|
539
|
+
isOpen={open}
|
|
540
|
+
contentId={contentId}
|
|
541
|
+
isDisabled={isDisabled}
|
|
542
|
+
isInvalid={isInvalid || outOfBounds(shownFor(end))}
|
|
543
|
+
onClear={clearable && settled && !isDisabled ? clearRangeEnd(end) : undefined}
|
|
544
|
+
clearLabel={`Clear ${label.toLowerCase()}`}
|
|
545
|
+
>
|
|
546
|
+
<DateTimeSegments
|
|
547
|
+
className="h-full flex-1"
|
|
548
|
+
label={label}
|
|
549
|
+
value={shownFor(end)}
|
|
550
|
+
onChange={(instant) => setRangeEnd(end, instant)}
|
|
551
|
+
timeZone={userTimeZone}
|
|
552
|
+
order={segmentOrder}
|
|
553
|
+
clockFormat={clockFormat}
|
|
554
|
+
showSeconds={showSeconds}
|
|
555
|
+
isDisabled={isDisabled}
|
|
556
|
+
isInvalid={isInvalid || outOfBounds(shownFor(end))}
|
|
557
|
+
onOpenRequest={openWithGridFocus(end)}
|
|
558
|
+
onSubmit={handleFieldSubmit}
|
|
559
|
+
/>
|
|
560
|
+
</PickerField>
|
|
561
|
+
);
|
|
562
|
+
};
|
|
422
563
|
|
|
423
564
|
// Time selection handlers - Start time
|
|
424
565
|
const handleStartHourChange = (hour: number) => setDraftStartHour(hour);
|
|
@@ -445,47 +586,29 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
445
586
|
const checkTimeDisabled = useCallback(
|
|
446
587
|
(hour: number, minute: number, second: number): boolean => {
|
|
447
588
|
const temporal = Temporal.PlainTime.from({ hour, minute, second });
|
|
448
|
-
return isTimeDisabled(temporal,
|
|
589
|
+
return isTimeDisabled(temporal, temporalMinTime, temporalMaxTime);
|
|
449
590
|
},
|
|
450
|
-
[
|
|
591
|
+
[temporalMinTime, temporalMaxTime]
|
|
451
592
|
);
|
|
452
593
|
|
|
453
594
|
return (
|
|
454
595
|
<>
|
|
455
596
|
{/* Trigger Input */}
|
|
456
|
-
<div
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
className={cn(
|
|
472
|
-
`flex h-9 w-full min-w-125 cursor-pointer rounded-md border border-border-normal bg-transparent py-1 pl-9 text-sm shadow-xs transition-colors placeholder:text-fg-subtle focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50`,
|
|
473
|
-
clearable && hasValue ? "pr-9" : "pr-3",
|
|
474
|
-
isInvalid && "border-border-danger",
|
|
475
|
-
className
|
|
476
|
-
)}
|
|
477
|
-
{...getReferenceProps()}
|
|
478
|
-
/>
|
|
479
|
-
{clearable && hasValue && !isDisabled && (
|
|
480
|
-
<button
|
|
481
|
-
type="button"
|
|
482
|
-
onClick={handleClear}
|
|
483
|
-
className="absolute right-3 rounded-sm p-0.5 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
|
|
484
|
-
aria-label="Clear datetime range"
|
|
485
|
-
>
|
|
486
|
-
<X className="h-3.5 w-3.5" />
|
|
487
|
-
</button>
|
|
488
|
-
)}
|
|
597
|
+
<div
|
|
598
|
+
ref={(node) => {
|
|
599
|
+
// The container is the interaction reference, so a click in either half
|
|
600
|
+
// counts as inside; the *position* reference follows the active half.
|
|
601
|
+
refs.setReference(node);
|
|
602
|
+
if (typeof ref === "function") ref(node);
|
|
603
|
+
else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;
|
|
604
|
+
}}
|
|
605
|
+
className={cn("relative flex min-w-125 items-center gap-2", className)}
|
|
606
|
+
>
|
|
607
|
+
{renderRangeHalf("from", "Start date and time")}
|
|
608
|
+
<span aria-hidden="true" className="text-fg-subtle">
|
|
609
|
+
–
|
|
610
|
+
</span>
|
|
611
|
+
{renderRangeHalf("to", "End date and time")}
|
|
489
612
|
|
|
490
613
|
{/* Hidden inputs for form submission */}
|
|
491
614
|
{name && committedValue?.from && <input type="hidden" name={`${name}.from`} value={committedValue.from.toString()} />}
|
|
@@ -499,7 +622,7 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
499
622
|
ref={refs.setFloating}
|
|
500
623
|
id={contentId}
|
|
501
624
|
role="dialog"
|
|
502
|
-
aria-
|
|
625
|
+
aria-label="Choose date and time range"
|
|
503
626
|
style={floatingStyles}
|
|
504
627
|
className="z-popover rounded-xl border border-border-normal bg-bg-normal p-4 shadow-lg"
|
|
505
628
|
{...getFloatingProps()}
|
|
@@ -531,17 +654,18 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
531
654
|
)}
|
|
532
655
|
|
|
533
656
|
{/* Date Calendar */}
|
|
534
|
-
<
|
|
657
|
+
<CalendarView
|
|
535
658
|
mode="range"
|
|
536
659
|
value={draftDateRange}
|
|
537
660
|
onSelect={setDraftDateRange as (range: DateRangeValue | undefined) => void}
|
|
538
661
|
month={month}
|
|
539
662
|
onMonthChange={setMonth}
|
|
540
|
-
minDate={
|
|
541
|
-
maxDate={
|
|
542
|
-
disabled={
|
|
663
|
+
minDate={temporalMinDate}
|
|
664
|
+
maxDate={temporalMaxDate}
|
|
665
|
+
disabled={temporalDisabledDates}
|
|
543
666
|
weekStartsOn={weekStartsOn}
|
|
544
667
|
showFooter={false}
|
|
668
|
+
autoFocusDay={autoFocusDay}
|
|
545
669
|
/>
|
|
546
670
|
</div>
|
|
547
671
|
|
|
@@ -667,7 +791,7 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
667
791
|
<Button type="button" variant="ghost" size="sm" onClick={handleCancel}>
|
|
668
792
|
Cancel
|
|
669
793
|
</Button>
|
|
670
|
-
<Button type="button" variant="solid" size="sm" onClick={handleApply}>
|
|
794
|
+
<Button type="button" variant="solid" intent="brand" size="sm" onClick={handleApply}>
|
|
671
795
|
Apply
|
|
672
796
|
</Button>
|
|
673
797
|
</div>
|
|
@@ -676,4 +800,5 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
|
|
|
676
800
|
)}
|
|
677
801
|
</>
|
|
678
802
|
);
|
|
679
|
-
};
|
|
803
|
+
});
|
|
804
|
+
DateTimeRangePicker.displayName = "DateTimeRangePicker";
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
/**
|
|
2
|
+
* DateTimeRangePicker types.
|
|
3
|
+
*
|
|
4
|
+
* Both ends of the range are absolute instants, exchanged as canonical UTC ISO
|
|
5
|
+
* strings (`"2026-08-26T00:30:00Z"`). Date and time constraints are plain dates
|
|
6
|
+
* and wall-clock times, since they describe the picker's grid rather than an
|
|
7
|
+
* absolute moment.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { DisabledDates, ISODate, ISOInstantRange, ISOTime, WeekStartsOn } from "../../date-time";
|
|
11
|
+
import type { DateSegmentOrder } from "../DatePicker/datepicker.types";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A datetime range.
|
|
15
|
+
*
|
|
16
|
+
* Alias of `ISOInstantRange`, kept under this name because it is the historical
|
|
17
|
+
* public type for this component.
|
|
18
|
+
*/
|
|
19
|
+
export type DateTimeRangeValue = ISOInstantRange;
|
|
15
20
|
|
|
16
21
|
export type DateTimeRangePresetOption = {
|
|
17
22
|
label: string;
|
|
23
|
+
/** Called when the picker renders, so relative ranges stay current. */
|
|
18
24
|
value: () => DateTimeRangeValue;
|
|
19
25
|
};
|
|
20
26
|
|
|
@@ -29,21 +35,26 @@ export type DateTimeRangePickerProps = {
|
|
|
29
35
|
showPresets?: boolean; // Default: true
|
|
30
36
|
|
|
31
37
|
// Date constraints
|
|
32
|
-
minDate?:
|
|
33
|
-
maxDate?:
|
|
34
|
-
disabledDates?:
|
|
38
|
+
minDate?: ISODate;
|
|
39
|
+
maxDate?: ISODate;
|
|
40
|
+
disabledDates?: DisabledDates | DisabledDates[];
|
|
35
41
|
|
|
36
42
|
// Time constraints (apply to both start and end times)
|
|
37
|
-
minTime?:
|
|
38
|
-
maxTime?:
|
|
43
|
+
minTime?: ISOTime;
|
|
44
|
+
maxTime?: ISOTime;
|
|
39
45
|
minuteStep?: 1 | 5 | 10 | 15 | 30;
|
|
40
46
|
|
|
41
47
|
// Time format
|
|
42
48
|
clockFormat?: "12h" | "24h"; // Default: "12h"
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Segment order for the date half of each typeable field (default `mdy`).
|
|
52
|
+
* Never inferred from the locale — `08/09` is a different date under each.
|
|
53
|
+
*/
|
|
54
|
+
segmentOrder?: DateSegmentOrder;
|
|
43
55
|
showSeconds?: boolean; // Default: false
|
|
44
56
|
|
|
45
57
|
// Display
|
|
46
|
-
placeholder?: string;
|
|
47
58
|
weekStartsOn?: WeekStartsOn;
|
|
48
59
|
|
|
49
60
|
// Form
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface of `@sixthshift/design-system/datetime-range-picker`.
|
|
3
|
+
*
|
|
4
|
+
* `DisabledDateMatcher` was a Temporal-shaped type and is gone; the ISO
|
|
5
|
+
* equivalent `DisabledDates` is re-exported here. `DateTimeRangeValue` survives
|
|
6
|
+
* as an alias of `ISOInstantRange`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export type { DisabledDates, ISODate, ISOInstant, ISOInstantRange, ISOTime } from "../../date-time";
|
|
1
10
|
export { DateTimeRangePicker } from "./DateTimeRangePicker";
|
|
2
11
|
export type { DateTimeRangePickerProps, DateTimeRangePresetOption, DateTimeRangeValue } from "./datetimerangepicker.types";
|