@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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCallback } from "react";
|
|
2
2
|
import type { SelectOption } from "./Select";
|
|
3
3
|
|
|
4
4
|
interface UseSelectKeyboardOptions<T extends string> {
|
|
@@ -14,6 +14,20 @@ interface UseSelectKeyboardOptions<T extends string> {
|
|
|
14
14
|
focusTrigger: () => void;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Returns the keydown handler for an open Select. It is attached to the element
|
|
19
|
+
* that actually holds focus — the listbox, or the search input in searchable
|
|
20
|
+
* mode — rather than to `document`.
|
|
21
|
+
*
|
|
22
|
+
* A document-level listener fired for every keystroke on the page while any
|
|
23
|
+
* Select was open, which meant a Select could swallow Escape or an arrow key
|
|
24
|
+
* from an overlay stacked above it, and two open Selects raced each other. It
|
|
25
|
+
* also decoupled key handling from focus, so nothing guaranteed the element the
|
|
26
|
+
* user was typing into was the one being navigated. Scoping the handler to the
|
|
27
|
+
* focused element makes both problems structurally impossible and is what lets
|
|
28
|
+
* `aria-activedescendant` mean something: the focused element owns the active
|
|
29
|
+
* option.
|
|
30
|
+
*/
|
|
17
31
|
export function useSelectKeyboard<T extends string>({
|
|
18
32
|
open,
|
|
19
33
|
searchable,
|
|
@@ -26,8 +40,8 @@ export function useSelectKeyboard<T extends string>({
|
|
|
26
40
|
handleSelect,
|
|
27
41
|
focusTrigger,
|
|
28
42
|
}: UseSelectKeyboardOptions<T>) {
|
|
29
|
-
|
|
30
|
-
|
|
43
|
+
return useCallback(
|
|
44
|
+
(event: React.KeyboardEvent<HTMLElement>) => {
|
|
31
45
|
if (!open) return;
|
|
32
46
|
|
|
33
47
|
const isTyping = searchable && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;
|
|
@@ -101,11 +115,7 @@ export function useSelectKeyboard<T extends string>({
|
|
|
101
115
|
}
|
|
102
116
|
}
|
|
103
117
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
document.addEventListener("keydown", handleKeyDown);
|
|
108
|
-
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
109
|
-
}
|
|
110
|
-
}, [open, searchable, searchValue, highlightedIndex, displayOptions, setOpen, setHighlightedIndex, setSearchValue, handleSelect, focusTrigger]);
|
|
118
|
+
},
|
|
119
|
+
[open, searchable, searchValue, highlightedIndex, displayOptions, setOpen, setHighlightedIndex, setSearchValue, handleSelect, focusTrigger]
|
|
120
|
+
);
|
|
111
121
|
}
|
|
@@ -6,6 +6,16 @@ export type SeparatorProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
6
6
|
decorative?: boolean;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Thin dividing line, horizontal or vertical (`orientation`, default
|
|
11
|
+
* `"horizontal"`). Renders a `<div>`, not `<hr>`.
|
|
12
|
+
*
|
|
13
|
+
* `decorative` (default `true`) controls whether it is exposed to assistive
|
|
14
|
+
* tech: decorative renders `role="none"` and no `aria-orientation`, so it is
|
|
15
|
+
* invisible to a screen reader; set `decorative={false}` for a divider that
|
|
16
|
+
* is actually part of the content's structure (e.g. between menu sections),
|
|
17
|
+
* which renders `role="separator"` and `aria-orientation` instead.
|
|
18
|
+
*/
|
|
9
19
|
const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (
|
|
10
20
|
<div
|
|
11
21
|
ref={ref}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { FloatingFocusManager, useDismiss, useFloating, useInteractions, useRole } from "@floating-ui/react";
|
|
2
2
|
import { useMergedFloatingRef, usePresence } from "@sixthshift/design-system/hooks";
|
|
3
3
|
import { cn } from "@sixthshift/design-system/utils";
|
|
4
|
-
import { type HTMLAttributes, type ReactNode, useCallback, useEffect, useMemo } from "react";
|
|
4
|
+
import { forwardRef, type HTMLAttributes, type ReactNode, useCallback, useEffect, useId, useMemo, useState } from "react";
|
|
5
5
|
import { SheetBody, SheetContext, SheetFooter, SheetHeader } from "./components";
|
|
6
6
|
|
|
7
7
|
// =============================================================================
|
|
8
8
|
// Types
|
|
9
9
|
// =============================================================================
|
|
10
10
|
|
|
11
|
-
export type SheetProps = Pick<HTMLAttributes<HTMLDivElement>, "className" | "style"> & {
|
|
11
|
+
export type SheetProps = Pick<HTMLAttributes<HTMLDivElement>, "className" | "style" | "aria-label" | "aria-labelledby" | "aria-describedby"> & {
|
|
12
12
|
/** Whether the sheet is open. Sheet owns its own mount lifecycle so exit animations can play. */
|
|
13
13
|
open: boolean;
|
|
14
14
|
/** Called when the sheet requests a state change (Esc, outside press, X button). */
|
|
@@ -41,94 +41,125 @@ const sizeClasses = {
|
|
|
41
41
|
// Sheet
|
|
42
42
|
// =============================================================================
|
|
43
43
|
|
|
44
|
-
const SheetRoot = (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
if (open) {
|
|
62
|
-
show();
|
|
63
|
-
} else if (isMounted) {
|
|
64
|
-
hide();
|
|
65
|
-
}
|
|
66
|
-
}, [open, isMounted, show, hide]);
|
|
67
|
-
|
|
68
|
-
const requestClose = useCallback(() => {
|
|
69
|
-
onOpenChange(false);
|
|
70
|
-
}, [onOpenChange]);
|
|
71
|
-
|
|
72
|
-
const { refs, context } = useFloating({
|
|
73
|
-
open,
|
|
74
|
-
onOpenChange: (nextOpen) => {
|
|
75
|
-
if (!nextOpen) requestClose();
|
|
44
|
+
const SheetRoot = forwardRef<HTMLDivElement, SheetProps>(
|
|
45
|
+
(
|
|
46
|
+
{
|
|
47
|
+
open,
|
|
48
|
+
onOpenChange,
|
|
49
|
+
side = "right",
|
|
50
|
+
size = "md",
|
|
51
|
+
dismissable = true,
|
|
52
|
+
dismissOnOutsidePress = false,
|
|
53
|
+
closable,
|
|
54
|
+
className,
|
|
55
|
+
style,
|
|
56
|
+
children,
|
|
57
|
+
"aria-label": ariaLabel,
|
|
58
|
+
"aria-labelledby": ariaLabelledBy,
|
|
59
|
+
"aria-describedby": ariaDescribedBy,
|
|
76
60
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
};
|
|
61
|
+
ref
|
|
62
|
+
) => {
|
|
63
|
+
const { ref: presenceRef, state, isMounted, show, hide } = usePresence();
|
|
64
|
+
|
|
65
|
+
// Drive presence from the controlled `open` prop.
|
|
66
|
+
// When `open` flips to false, we play the exit animation, then unmount.
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (open) {
|
|
69
|
+
show();
|
|
70
|
+
} else if (isMounted) {
|
|
71
|
+
hide();
|
|
72
|
+
}
|
|
73
|
+
}, [open, isMounted, show, hide]);
|
|
74
|
+
|
|
75
|
+
const requestClose = useCallback(() => {
|
|
76
|
+
onOpenChange(false);
|
|
77
|
+
}, [onOpenChange]);
|
|
78
|
+
|
|
79
|
+
const { refs, context } = useFloating({
|
|
80
|
+
open,
|
|
81
|
+
onOpenChange: (nextOpen) => {
|
|
82
|
+
if (!nextOpen) requestClose();
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const mergedRef = useMergedFloatingRef<HTMLDivElement>(refs, presenceRef, ref);
|
|
87
|
+
|
|
88
|
+
const dismiss = useDismiss(context, {
|
|
89
|
+
enabled: dismissable,
|
|
90
|
+
escapeKey: true,
|
|
91
|
+
outsidePress: dismissOnOutsidePress,
|
|
92
|
+
outsidePressEvent: "mousedown",
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const role = useRole(context, { role: "dialog" });
|
|
96
|
+
|
|
97
|
+
const { getFloatingProps } = useInteractions([dismiss, role]);
|
|
98
|
+
|
|
99
|
+
// Named from its header, same contract as Modal — see SheetContext.
|
|
100
|
+
const titleId = useId();
|
|
101
|
+
const [hasTitle, setHasTitle] = useState(false);
|
|
102
|
+
const registerTitle = useCallback((present: boolean) => setHasTitle(present), []);
|
|
103
|
+
|
|
104
|
+
// `aria-labelledby` beats `aria-label` in the name computation, so a caller
|
|
105
|
+
// who passes a label must not also be pointed at the header — they would
|
|
106
|
+
// never see their own string win.
|
|
107
|
+
const labelledBy = ariaLabelledBy ?? (ariaLabel || !hasTitle ? undefined : titleId);
|
|
108
|
+
|
|
109
|
+
const sheetContextValue = useMemo(() => ({ onClose: requestClose, closable, titleId, registerTitle }), [requestClose, closable, titleId, registerTitle]);
|
|
110
|
+
|
|
111
|
+
if (!isMounted) return null;
|
|
112
|
+
|
|
113
|
+
const isEntering = state === "entering";
|
|
114
|
+
const isExiting = state === "exiting";
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<FloatingFocusManager context={context} modal={false}>
|
|
118
|
+
<div
|
|
119
|
+
ref={mergedRef}
|
|
120
|
+
// Explicit, though `getFloatingProps` also supplies it from `useRole`:
|
|
121
|
+
// the ARIA attributes below are only valid on a dialog, and static
|
|
122
|
+
// analysis cannot see a role that arrives through a spread. Matches Modal.
|
|
123
|
+
role="dialog"
|
|
124
|
+
aria-label={ariaLabel}
|
|
125
|
+
aria-labelledby={labelledBy}
|
|
126
|
+
aria-describedby={ariaDescribedBy}
|
|
127
|
+
tabIndex={-1}
|
|
128
|
+
data-state={state}
|
|
129
|
+
data-side={side}
|
|
130
|
+
className={cn(
|
|
131
|
+
"sheet fixed top-0 bottom-0 z-sheet flex flex-col overflow-hidden bg-(--sheet-bg) outline-hidden",
|
|
132
|
+
"border-(color:--sheet-border) shadow-lg",
|
|
133
|
+
side === "right" ? "right-0 border-l" : "left-0 border-r",
|
|
134
|
+
sizeClasses[size],
|
|
135
|
+
"max-sm:inset-x-0",
|
|
136
|
+
isEntering && side === "right" && "animate-slide-right-in",
|
|
137
|
+
isExiting && side === "right" && "animate-slide-right-out",
|
|
138
|
+
isEntering && side === "left" && "animate-slide-left-in",
|
|
139
|
+
isExiting && side === "left" && "animate-slide-left-out",
|
|
140
|
+
className
|
|
141
|
+
)}
|
|
142
|
+
style={style}
|
|
143
|
+
{...getFloatingProps({})}
|
|
144
|
+
>
|
|
145
|
+
<SheetContext.Provider value={sheetContextValue}>{children}</SheetContext.Provider>
|
|
146
|
+
</div>
|
|
147
|
+
</FloatingFocusManager>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
);
|
|
126
151
|
SheetRoot.displayName = "Sheet";
|
|
127
152
|
|
|
128
153
|
// =============================================================================
|
|
129
154
|
// Compound Component Export
|
|
130
155
|
// =============================================================================
|
|
131
156
|
|
|
157
|
+
/**
|
|
158
|
+
* NOTE: Storybook shows the copy in Sheet.stories.tsx
|
|
159
|
+
* (`parameters.docs.description.component`), not this comment. react-docgen
|
|
160
|
+
* cannot extract a description from this declaration shape, so keeping a
|
|
161
|
+
* second copy here would only drift. Edit the stories file.
|
|
162
|
+
*/
|
|
132
163
|
export const Sheet = Object.assign(SheetRoot, {
|
|
133
164
|
Header: SheetHeader,
|
|
134
165
|
Body: SheetBody,
|
|
@@ -5,6 +5,16 @@ export type OnClose = (event?: MouseEvent<Element> | KeyboardEvent<Element>) =>
|
|
|
5
5
|
interface SheetContextValue {
|
|
6
6
|
onClose: OnClose;
|
|
7
7
|
closable?: boolean | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The id `Sheet.Header` stamps on itself so the dialog can name itself from
|
|
10
|
+
* its own title instead of being announced as a bare "dialog".
|
|
11
|
+
*/
|
|
12
|
+
titleId?: string;
|
|
13
|
+
/**
|
|
14
|
+
* The header reports its presence — a headerless sheet must not point
|
|
15
|
+
* `aria-labelledby` at an element that never rendered.
|
|
16
|
+
*/
|
|
17
|
+
registerTitle?: (present: boolean) => void;
|
|
8
18
|
}
|
|
9
19
|
|
|
10
20
|
export const SheetContext = createContext<SheetContextValue | null>(null);
|
|
@@ -4,6 +4,6 @@ import * as React from "react";
|
|
|
4
4
|
export type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;
|
|
5
5
|
|
|
6
6
|
export const SheetFooter = React.forwardRef<HTMLDivElement, SheetFooterProps>(({ className, ...props }, ref) => (
|
|
7
|
-
<div ref={ref} className={cn("
|
|
7
|
+
<div ref={ref} className={cn("sheet-footer border-(color:--sheet-footer-border) flex items-center border-t p-4", className)} {...props} />
|
|
8
8
|
));
|
|
9
9
|
SheetFooter.displayName = "SheetFooter";
|
|
@@ -5,20 +5,35 @@ import { SheetContext } from "./SheetContext";
|
|
|
5
5
|
|
|
6
6
|
export type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;
|
|
7
7
|
|
|
8
|
-
export const SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(({ className, children, ...props }, ref) => {
|
|
8
|
+
export const SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(({ className, children, id, ...props }, ref) => {
|
|
9
9
|
const context = React.useContext(SheetContext);
|
|
10
10
|
const closable = context?.closable;
|
|
11
11
|
const onClose = context?.onClose;
|
|
12
|
+
const registerTitle = context?.registerTitle;
|
|
13
|
+
|
|
14
|
+
// Report the title to the sheet so it can name itself, and withdraw it on
|
|
15
|
+
// unmount. A caller-supplied `id` wins over the generated one — which the
|
|
16
|
+
// sheet can no longer resolve, so it is told there is no title to point at.
|
|
17
|
+
const ownsTitleId = id === undefined;
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
registerTitle?.(ownsTitleId);
|
|
20
|
+
return () => registerTitle?.(false);
|
|
21
|
+
}, [registerTitle, ownsTitleId]);
|
|
12
22
|
|
|
13
23
|
return (
|
|
14
|
-
<div
|
|
24
|
+
<div
|
|
25
|
+
ref={ref}
|
|
26
|
+
id={id ?? context?.titleId}
|
|
27
|
+
className={cn("sheet-header border-(color:--sheet-header-border) flex flex-col space-y-1.5 border-b p-6", closable && "pr-12", className)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
15
30
|
{children}
|
|
16
31
|
{closable && (
|
|
17
32
|
<button
|
|
18
33
|
type="button"
|
|
19
34
|
onClick={onClose}
|
|
20
35
|
aria-label="Close"
|
|
21
|
-
className="absolute top-4 right-4 cursor-pointer rounded-md p-1 text-fg
|
|
36
|
+
className="sheet-close absolute top-4 right-4 cursor-pointer rounded-md p-1 text-(--sheet-close-fg) transition-colors hover:bg-(--sheet-close-bg-hovered) hover:text-(--sheet-close-fg-hovered)"
|
|
22
37
|
>
|
|
23
38
|
<X size={16} />
|
|
24
39
|
</button>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Interpolation } from "@sixthshift/design-system/line-chart";
|
|
2
2
|
import { cn } from "@sixthshift/design-system/utils";
|
|
3
|
-
import
|
|
3
|
+
import * as React from "react";
|
|
4
4
|
|
|
5
5
|
export type SparklineProps = React.HTMLAttributes<HTMLSpanElement> & {
|
|
6
6
|
data: number[];
|
|
@@ -51,43 +51,47 @@ function buildPath(points: { x: number; y: number }[], interpolation: Interpolat
|
|
|
51
51
|
return parts.join(" ");
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
/**
|
|
55
|
+
* A minimal inline trend line for embedding in a table cell or card — an
|
|
56
|
+
* `<svg>` inside an `inline-block` `<span>`, sized to `width`/`height` rather
|
|
57
|
+
* than a chart that lays out its own labels or axes.
|
|
58
|
+
*
|
|
59
|
+
* Requires at least 2 data points; with fewer it renders nothing (`null`).
|
|
60
|
+
* `color` is a single CSS color string (default `var(--fg-brand)`), and
|
|
61
|
+
* `interpolation` reuses the same `Interpolation` type as `LineChart`. The
|
|
62
|
+
* accessible name is a static `aria-label="Trend line"` — it does not
|
|
63
|
+
* describe the actual values.
|
|
64
|
+
*/
|
|
65
|
+
export const Sparkline = React.forwardRef<HTMLSpanElement, SparklineProps>(
|
|
66
|
+
({ data, width = 80, height = 24, color = "var(--fg-brand)", fillArea = false, interpolation = "monotone", strokeWidth = 1.5, className, ...rest }, ref) => {
|
|
67
|
+
if (data.length < 2) return null;
|
|
66
68
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
const min = Math.min(...data);
|
|
70
|
+
const max = Math.max(...data);
|
|
71
|
+
const range = max - min || 1;
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
const padY = 2;
|
|
74
|
+
const padX = 1;
|
|
75
|
+
const innerW = width - padX * 2;
|
|
76
|
+
const innerH = height - padY * 2;
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
const points = data.map((v, i) => ({
|
|
79
|
+
x: padX + (i / (data.length - 1)) * innerW,
|
|
80
|
+
y: padY + innerH - ((v - min) / range) * innerH,
|
|
81
|
+
}));
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
const path = buildPath(points, interpolation);
|
|
82
84
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
85
|
+
return (
|
|
86
|
+
<span ref={ref} {...rest} className={cn("inline-block align-middle", className)}>
|
|
87
|
+
<svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} role="img" aria-label="Trend line">
|
|
88
|
+
{fillArea && path && (
|
|
89
|
+
<path d={`${path} L ${points[points.length - 1]!.x} ${height - padY} L ${points[0]!.x} ${height - padY} Z`} fill={color} opacity={0.12} />
|
|
90
|
+
)}
|
|
91
|
+
<path d={path} fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" />
|
|
92
|
+
</svg>
|
|
93
|
+
</span>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
Sparkline.displayName = "Sparkline";
|
|
@@ -2,22 +2,47 @@ import { cn } from "@sixthshift/design-system/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Geometry (size) plus the one `--spinner-fg` component token.
|
|
7
|
+
*
|
|
8
|
+
* The colour used to be `text-fg-subtle`, a semantic token named directly in
|
|
9
|
+
* the class string — the one thing a consumer could not do was recolour a
|
|
10
|
+
* spinner without fighting `className` against it. `--spinner-fg` in
|
|
11
|
+
* src/theme/recipes/spinner.css is now that seam: a consumer overrides the
|
|
12
|
+
* variable, scoped to whatever subtree they like, instead of overriding a
|
|
13
|
+
* class.
|
|
14
|
+
*/
|
|
15
|
+
const spinnerVariants = cva("spinner animate-spin text-(--spinner-fg)", {
|
|
6
16
|
variants: {
|
|
7
17
|
size: {
|
|
8
18
|
sm: "h-4 w-4",
|
|
9
|
-
|
|
19
|
+
md: "h-6 w-6",
|
|
10
20
|
lg: "h-8 w-8",
|
|
11
21
|
xl: "h-12 w-12",
|
|
12
22
|
},
|
|
13
23
|
},
|
|
14
24
|
defaultVariants: {
|
|
15
|
-
size: "
|
|
25
|
+
size: "md",
|
|
16
26
|
},
|
|
17
27
|
});
|
|
18
28
|
|
|
19
29
|
export type SpinnerProps = React.SVGAttributes<SVGElement> & VariantProps<typeof spinnerVariants>;
|
|
20
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Animated loading indicator — an inline `<svg>`, `size` scales it (`sm` |
|
|
33
|
+
* `md` | `lg` | `xl`). Use it for a fetching-more state at the bottom
|
|
34
|
+
* of an already-rendered list, and for an initial load inside a container that
|
|
35
|
+
* already reserves its final height, so resolving the load does not jump the
|
|
36
|
+
* layout (see docs/states.md).
|
|
37
|
+
*
|
|
38
|
+
* It is `aria-hidden="true"` unconditionally — it announces nothing to
|
|
39
|
+
* assistive tech on its own, so pair it with visible or `sr-only` text (or a
|
|
40
|
+
* live region) if the loading state needs to be announced.
|
|
41
|
+
*
|
|
42
|
+
* Colour reads the `--spinner-fg` component token
|
|
43
|
+
* (src/theme/recipes/spinner.css) rather than a class name, so a consumer
|
|
44
|
+
* can recolour a spinner scoped to a subtree without fighting `className`.
|
|
45
|
+
*/
|
|
21
46
|
const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(({ className, size, ...props }, ref) => (
|
|
22
47
|
<svg
|
|
23
48
|
ref={ref}
|
|
@@ -22,6 +22,24 @@ export type SwitchProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "o
|
|
|
22
22
|
labelClassName?: string;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* A boolean on/off control rendered as a track with a sliding thumb.
|
|
27
|
+
*
|
|
28
|
+
* Controlled via `checked`/`defaultChecked`/`onCheckedChange`
|
|
29
|
+
* (`useControllableState`). Renders `role="switch"` with `aria-checked`, plus
|
|
30
|
+
* a `data-state="checked" | "unchecked"` attribute the theme recipe
|
|
31
|
+
* (`switch.css`) styles off of.
|
|
32
|
+
*
|
|
33
|
+
* `pending` shows a spinner in the thumb and blocks clicks without disabling
|
|
34
|
+
* the control — it sets `aria-busy` rather than `disabled`, so the switch
|
|
35
|
+
* stays perceivable and focusable while the change is in flight.
|
|
36
|
+
*
|
|
37
|
+
* Pass `label` to wrap the switch in a `<Label>` linked to it by `id`;
|
|
38
|
+
* without one, the caller is responsible for its own accessible name (e.g.
|
|
39
|
+
* `aria-label`). Pass `name` to also render a hidden, read-only checkbox
|
|
40
|
+
* input so the value participates in native form submission (`value`
|
|
41
|
+
* defaults to `"on"`).
|
|
42
|
+
*/
|
|
25
43
|
const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
|
|
26
44
|
(
|
|
27
45
|
{
|
|
@@ -63,8 +81,7 @@ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
|
|
|
63
81
|
ref={ref}
|
|
64
82
|
onClick={() => !pending && setChecked(!checked)}
|
|
65
83
|
className={cn(
|
|
66
|
-
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-
|
|
67
|
-
checked ? "bg-bg-brand" : "bg-bg-subtle",
|
|
84
|
+
"switch peer focus-visible:ring-(color:--switch-ring) inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-(--switch-bg) shadow-xs transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-normal disabled:cursor-not-allowed disabled:opacity-50",
|
|
68
85
|
pending && "cursor-default",
|
|
69
86
|
className
|
|
70
87
|
)}
|
|
@@ -72,12 +89,18 @@ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
|
|
|
72
89
|
>
|
|
73
90
|
<span
|
|
74
91
|
className={cn(
|
|
75
|
-
"pointer-events-none flex h-4 w-4 items-center justify-center rounded-full bg-bg
|
|
92
|
+
"switch-thumb pointer-events-none flex h-4 w-4 items-center justify-center rounded-full bg-(--switch-thumb-bg) shadow-lg ring-0 transition-transform",
|
|
76
93
|
checked ? "translate-x-4" : "translate-x-0"
|
|
77
94
|
)}
|
|
78
95
|
>
|
|
79
96
|
{pending && (
|
|
80
|
-
<svg
|
|
97
|
+
<svg
|
|
98
|
+
className="h-2.5 w-2.5 animate-spin text-(--switch-thumb-fg)"
|
|
99
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
100
|
+
fill="none"
|
|
101
|
+
viewBox="0 0 24 24"
|
|
102
|
+
aria-hidden="true"
|
|
103
|
+
>
|
|
81
104
|
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
|
|
82
105
|
<path
|
|
83
106
|
className="opacity-75"
|
|
@@ -41,6 +41,12 @@ const TabsRoot = ({ items, value: controlledValue, defaultValue, onValueChange,
|
|
|
41
41
|
return <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* NOTE: Storybook shows the copy in Tabs.stories.tsx
|
|
46
|
+
* (`parameters.docs.description.component`), not this comment. react-docgen
|
|
47
|
+
* cannot extract a description from an `Object.assign` / cast export, so a
|
|
48
|
+
* second copy here would only drift. Edit the stories file.
|
|
49
|
+
*/
|
|
44
50
|
export const Tabs = Object.assign(TabsRoot, {
|
|
45
51
|
List: TabsList,
|
|
46
52
|
Panels: TabsPanels,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cn } from "@sixthshift/design-system/utils";
|
|
2
2
|
import type * as React from "react";
|
|
3
|
-
import { useCallback, useRef } from "react";
|
|
3
|
+
import { forwardRef, useCallback, useRef } from "react";
|
|
4
4
|
import { useTabsContext } from "./TabsContext";
|
|
5
5
|
import { TabsTrigger } from "./TabsTrigger";
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ export type TabsListProps = {
|
|
|
11
11
|
className?: string;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
export const TabsList = ({ orientation = "horizontal", className }
|
|
14
|
+
export const TabsList = forwardRef<HTMLDivElement, TabsListProps>(({ orientation = "horizontal", className }, ref) => {
|
|
15
15
|
const { items, value, onValueChange } = useTabsContext();
|
|
16
16
|
const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);
|
|
17
17
|
|
|
@@ -78,6 +78,7 @@ export const TabsList = ({ orientation = "horizontal", className }: TabsListProp
|
|
|
78
78
|
|
|
79
79
|
return (
|
|
80
80
|
<div
|
|
81
|
+
ref={ref}
|
|
81
82
|
role="tablist"
|
|
82
83
|
aria-orientation={orientation}
|
|
83
84
|
className={cn("inline-flex gap-1", orientation === "vertical" ? "flex-col" : "flex-row items-center", className)}
|
|
@@ -95,4 +96,5 @@ export const TabsList = ({ orientation = "horizontal", className }: TabsListProp
|
|
|
95
96
|
))}
|
|
96
97
|
</div>
|
|
97
98
|
);
|
|
98
|
-
};
|
|
99
|
+
});
|
|
100
|
+
TabsList.displayName = "TabsList";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from "@sixthshift/design-system/utils";
|
|
2
|
+
import { forwardRef } from "react";
|
|
2
3
|
import { useTabsContext } from "./TabsContext";
|
|
3
4
|
|
|
4
5
|
export type TabsPanelsProps = {
|
|
@@ -6,7 +7,7 @@ export type TabsPanelsProps = {
|
|
|
6
7
|
className?: string;
|
|
7
8
|
};
|
|
8
9
|
|
|
9
|
-
export const TabsPanels = ({ className }
|
|
10
|
+
export const TabsPanels = forwardRef<HTMLDivElement, TabsPanelsProps>(({ className }, ref) => {
|
|
10
11
|
const { items, value, baseId } = useTabsContext();
|
|
11
12
|
|
|
12
13
|
const activeItem = items.find((item) => item.value === value);
|
|
@@ -19,8 +20,9 @@ export const TabsPanels = ({ className }: TabsPanelsProps) => {
|
|
|
19
20
|
const content = typeof activeItem.content === "function" ? activeItem.content() : activeItem.content;
|
|
20
21
|
|
|
21
22
|
return (
|
|
22
|
-
<div id={panelId} role="tabpanel" aria-labelledby={triggerId} className={cn("focus-visible:outline-hidden", className)}>
|
|
23
|
+
<div ref={ref} id={panelId} role="tabpanel" aria-labelledby={triggerId} className={cn("focus-visible:outline-hidden", className)}>
|
|
23
24
|
{content}
|
|
24
25
|
</div>
|
|
25
26
|
);
|
|
26
|
-
};
|
|
27
|
+
});
|
|
28
|
+
TabsPanels.displayName = "TabsPanels";
|