reka-ui 2.8.2 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Autocomplete/AutocompleteInput.cjs +128 -0
- package/dist/Autocomplete/AutocompleteInput.cjs.map +1 -0
- package/dist/Autocomplete/AutocompleteInput.js +122 -0
- package/dist/Autocomplete/AutocompleteInput.js.map +1 -0
- package/dist/Autocomplete/AutocompleteRoot.cjs +258 -0
- package/dist/Autocomplete/AutocompleteRoot.cjs.map +1 -0
- package/dist/Autocomplete/AutocompleteRoot.js +246 -0
- package/dist/Autocomplete/AutocompleteRoot.js.map +1 -0
- package/dist/Calendar/CalendarCellTrigger.cjs +8 -5
- package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
- package/dist/Calendar/CalendarCellTrigger.js +9 -6
- package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
- package/dist/Calendar/CalendarGrid.cjs +3 -3
- package/dist/Calendar/CalendarGrid.cjs.map +1 -1
- package/dist/Calendar/CalendarGrid.js +4 -4
- package/dist/Calendar/CalendarGrid.js.map +1 -1
- package/dist/Calendar/CalendarNext.cjs +7 -3
- package/dist/Calendar/CalendarNext.cjs.map +1 -1
- package/dist/Calendar/CalendarNext.js +7 -3
- package/dist/Calendar/CalendarNext.js.map +1 -1
- package/dist/Calendar/CalendarPrev.cjs +7 -3
- package/dist/Calendar/CalendarPrev.cjs.map +1 -1
- package/dist/Calendar/CalendarPrev.js +7 -3
- package/dist/Calendar/CalendarPrev.js.map +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.cjs +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.js +1 -1
- package/dist/Checkbox/CheckboxRoot.cjs +21 -10
- package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
- package/dist/Checkbox/CheckboxRoot.js +21 -10
- package/dist/Checkbox/CheckboxRoot.js.map +1 -1
- package/dist/ColorArea/ColorAreaArea.cjs +143 -0
- package/dist/ColorArea/ColorAreaArea.cjs.map +1 -0
- package/dist/ColorArea/ColorAreaArea.js +137 -0
- package/dist/ColorArea/ColorAreaArea.js.map +1 -0
- package/dist/ColorArea/ColorAreaRoot.cjs +240 -0
- package/dist/ColorArea/ColorAreaRoot.cjs.map +1 -0
- package/dist/ColorArea/ColorAreaRoot.js +228 -0
- package/dist/ColorArea/ColorAreaRoot.js.map +1 -0
- package/dist/ColorArea/ColorAreaThumb.cjs +91 -0
- package/dist/ColorArea/ColorAreaThumb.cjs.map +1 -0
- package/dist/ColorArea/ColorAreaThumb.js +85 -0
- package/dist/ColorArea/ColorAreaThumb.js.map +1 -0
- package/dist/ColorArea/utils.cjs +32 -0
- package/dist/ColorArea/utils.cjs.map +1 -0
- package/dist/ColorArea/utils.js +21 -0
- package/dist/ColorArea/utils.js.map +1 -0
- package/dist/ColorField/ColorFieldInput.cjs +140 -0
- package/dist/ColorField/ColorFieldInput.cjs.map +1 -0
- package/dist/ColorField/ColorFieldInput.js +134 -0
- package/dist/ColorField/ColorFieldInput.js.map +1 -0
- package/dist/ColorField/ColorFieldRoot.cjs +281 -0
- package/dist/ColorField/ColorFieldRoot.cjs.map +1 -0
- package/dist/ColorField/ColorFieldRoot.js +269 -0
- package/dist/ColorField/ColorFieldRoot.js.map +1 -0
- package/dist/ColorSlider/ColorSliderRoot.cjs +230 -0
- package/dist/ColorSlider/ColorSliderRoot.cjs.map +1 -0
- package/dist/ColorSlider/ColorSliderRoot.js +218 -0
- package/dist/ColorSlider/ColorSliderRoot.js.map +1 -0
- package/dist/ColorSlider/ColorSliderThumb.cjs +66 -0
- package/dist/ColorSlider/ColorSliderThumb.cjs.map +1 -0
- package/dist/ColorSlider/ColorSliderThumb.js +60 -0
- package/dist/ColorSlider/ColorSliderThumb.js.map +1 -0
- package/dist/ColorSlider/ColorSliderTrack.cjs +55 -0
- package/dist/ColorSlider/ColorSliderTrack.cjs.map +1 -0
- package/dist/ColorSlider/ColorSliderTrack.js +49 -0
- package/dist/ColorSlider/ColorSliderTrack.js.map +1 -0
- package/dist/ColorSwatch/ColorSwatch.cjs +106 -0
- package/dist/ColorSwatch/ColorSwatch.cjs.map +1 -0
- package/dist/ColorSwatch/ColorSwatch.js +100 -0
- package/dist/ColorSwatch/ColorSwatch.js.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs +78 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js +66 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs +40 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js +34 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs +43 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js +37 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs +110 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs.map +1 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js +104 -0
- package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js.map +1 -0
- package/dist/Combobox/ComboboxContent.cjs +4 -0
- package/dist/Combobox/ComboboxContent.cjs.map +1 -1
- package/dist/Combobox/ComboboxContent.js +4 -0
- package/dist/Combobox/ComboboxContent.js.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs +9 -2
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +9 -2
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/Combobox/ComboboxInput.cjs +10 -1
- package/dist/Combobox/ComboboxInput.cjs.map +1 -1
- package/dist/Combobox/ComboboxInput.js +10 -1
- package/dist/Combobox/ComboboxInput.js.map +1 -1
- package/dist/Combobox/ComboboxRoot.cjs +7 -1
- package/dist/Combobox/ComboboxRoot.js +2 -2
- package/dist/DateField/DateFieldRoot.cjs +1 -1
- package/dist/DateField/DateFieldRoot.js +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.cjs +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
- package/dist/DismissableLayer/utils.cjs +1 -0
- package/dist/DismissableLayer/utils.cjs.map +1 -1
- package/dist/DismissableLayer/utils.js +1 -0
- package/dist/DismissableLayer/utils.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuFilter.cjs +134 -0
- package/dist/DropdownMenu/DropdownMenuFilter.cjs.map +1 -0
- package/dist/DropdownMenu/DropdownMenuFilter.js +128 -0
- package/dist/DropdownMenu/DropdownMenuFilter.js.map +1 -0
- package/dist/Listbox/ListboxRoot.cjs +1 -1
- package/dist/Listbox/ListboxRoot.js +1 -1
- package/dist/Listbox/ListboxVirtualizer.cjs +1 -1
- package/dist/Listbox/ListboxVirtualizer.js +1 -1
- package/dist/Menu/MenuContentImpl.cjs +44 -4
- package/dist/Menu/MenuContentImpl.cjs.map +1 -1
- package/dist/Menu/MenuContentImpl.js +44 -4
- package/dist/Menu/MenuContentImpl.js.map +1 -1
- package/dist/Menu/MenuGroup.cjs +13 -2
- package/dist/Menu/MenuGroup.cjs.map +1 -1
- package/dist/Menu/MenuGroup.js +8 -3
- package/dist/Menu/MenuGroup.js.map +1 -1
- package/dist/Menu/MenuItemImpl.cjs +11 -5
- package/dist/Menu/MenuItemImpl.cjs.map +1 -1
- package/dist/Menu/MenuItemImpl.js +12 -6
- package/dist/Menu/MenuItemImpl.js.map +1 -1
- package/dist/Menu/MenuLabel.cjs +4 -2
- package/dist/Menu/MenuLabel.cjs.map +1 -1
- package/dist/Menu/MenuLabel.js +5 -3
- package/dist/Menu/MenuLabel.js.map +1 -1
- package/dist/Menu/MenuSubContent.cjs +8 -2
- package/dist/Menu/MenuSubContent.cjs.map +1 -1
- package/dist/Menu/MenuSubContent.js +9 -3
- package/dist/Menu/MenuSubContent.js.map +1 -1
- package/dist/Menu/MenuSubTrigger.cjs +7 -0
- package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
- package/dist/Menu/MenuSubTrigger.js +8 -1
- package/dist/Menu/MenuSubTrigger.js.map +1 -1
- package/dist/MonthPicker/MonthPickerCell.cjs +59 -0
- package/dist/MonthPicker/MonthPickerCell.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerCell.js +53 -0
- package/dist/MonthPicker/MonthPickerCell.js.map +1 -0
- package/dist/MonthPicker/MonthPickerCellTrigger.cjs +197 -0
- package/dist/MonthPicker/MonthPickerCellTrigger.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerCellTrigger.js +191 -0
- package/dist/MonthPicker/MonthPickerCellTrigger.js.map +1 -0
- package/dist/MonthPicker/MonthPickerGrid.cjs +59 -0
- package/dist/MonthPicker/MonthPickerGrid.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerGrid.js +53 -0
- package/dist/MonthPicker/MonthPickerGrid.js.map +1 -0
- package/dist/MonthPicker/MonthPickerGridBody.cjs +41 -0
- package/dist/MonthPicker/MonthPickerGridBody.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerGridBody.js +35 -0
- package/dist/MonthPicker/MonthPickerGridBody.js.map +1 -0
- package/dist/MonthPicker/MonthPickerGridRow.cjs +41 -0
- package/dist/MonthPicker/MonthPickerGridRow.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerGridRow.js +35 -0
- package/dist/MonthPicker/MonthPickerGridRow.js.map +1 -0
- package/dist/MonthPicker/MonthPickerHeader.cjs +41 -0
- package/dist/MonthPicker/MonthPickerHeader.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerHeader.js +35 -0
- package/dist/MonthPicker/MonthPickerHeader.js.map +1 -0
- package/dist/MonthPicker/MonthPickerHeading.cjs +48 -0
- package/dist/MonthPicker/MonthPickerHeading.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerHeading.js +42 -0
- package/dist/MonthPicker/MonthPickerHeading.js.map +1 -0
- package/dist/MonthPicker/MonthPickerNext.cjs +68 -0
- package/dist/MonthPicker/MonthPickerNext.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerNext.js +62 -0
- package/dist/MonthPicker/MonthPickerNext.js.map +1 -0
- package/dist/MonthPicker/MonthPickerPrev.cjs +68 -0
- package/dist/MonthPicker/MonthPickerPrev.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerPrev.js +62 -0
- package/dist/MonthPicker/MonthPickerPrev.js.map +1 -0
- package/dist/MonthPicker/MonthPickerRoot.cjs +281 -0
- package/dist/MonthPicker/MonthPickerRoot.cjs.map +1 -0
- package/dist/MonthPicker/MonthPickerRoot.js +269 -0
- package/dist/MonthPicker/MonthPickerRoot.js.map +1 -0
- package/dist/MonthPicker/useMonthPicker.cjs +148 -0
- package/dist/MonthPicker/useMonthPicker.cjs.map +1 -0
- package/dist/MonthPicker/useMonthPicker.js +136 -0
- package/dist/MonthPicker/useMonthPicker.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerCell.cjs +59 -0
- package/dist/MonthRangePicker/MonthRangePickerCell.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerCell.js +53 -0
- package/dist/MonthRangePicker/MonthRangePickerCell.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs +258 -0
- package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js +252 -0
- package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGrid.cjs +59 -0
- package/dist/MonthRangePicker/MonthRangePickerGrid.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGrid.js +53 -0
- package/dist/MonthRangePicker/MonthRangePickerGrid.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs +41 -0
- package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGridBody.js +35 -0
- package/dist/MonthRangePicker/MonthRangePickerGridBody.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs +41 -0
- package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerGridRow.js +35 -0
- package/dist/MonthRangePicker/MonthRangePickerGridRow.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerHeader.cjs +41 -0
- package/dist/MonthRangePicker/MonthRangePickerHeader.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerHeader.js +35 -0
- package/dist/MonthRangePicker/MonthRangePickerHeader.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerHeading.cjs +48 -0
- package/dist/MonthRangePicker/MonthRangePickerHeading.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerHeading.js +42 -0
- package/dist/MonthRangePicker/MonthRangePickerHeading.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerNext.cjs +68 -0
- package/dist/MonthRangePicker/MonthRangePickerNext.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerNext.js +62 -0
- package/dist/MonthRangePicker/MonthRangePickerNext.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerPrev.cjs +68 -0
- package/dist/MonthRangePicker/MonthRangePickerPrev.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerPrev.js +62 -0
- package/dist/MonthRangePicker/MonthRangePickerPrev.js.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerRoot.cjs +347 -0
- package/dist/MonthRangePicker/MonthRangePickerRoot.cjs.map +1 -0
- package/dist/MonthRangePicker/MonthRangePickerRoot.js +335 -0
- package/dist/MonthRangePicker/MonthRangePickerRoot.js.map +1 -0
- package/dist/MonthRangePicker/useRangeMonthPicker.cjs +128 -0
- package/dist/MonthRangePicker/useRangeMonthPicker.cjs.map +1 -0
- package/dist/MonthRangePicker/useRangeMonthPicker.js +122 -0
- package/dist/MonthRangePicker/useRangeMonthPicker.js.map +1 -0
- package/dist/NavigationMenu/NavigationMenuItem.js +3 -3
- package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
- package/dist/NumberField/NumberFieldRoot.cjs +3 -2
- package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
- package/dist/NumberField/NumberFieldRoot.js +3 -2
- package/dist/NumberField/NumberFieldRoot.js.map +1 -1
- package/dist/Progress/ProgressRoot.cjs.map +1 -1
- package/dist/Progress/ProgressRoot.js.map +1 -1
- package/dist/RadioGroup/RadioGroupRoot.cjs +1 -1
- package/dist/RadioGroup/RadioGroupRoot.js +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.cjs +3 -3
- package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.js +4 -4
- package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarNext.cjs +9 -5
- package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarNext.js +9 -5
- package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarPrev.cjs +9 -5
- package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarPrev.js +9 -5
- package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.cjs +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs +9 -13
- package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js +9 -13
- package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
- package/dist/Splitter/SplitterGroup.cjs +156 -36
- package/dist/Splitter/SplitterGroup.cjs.map +1 -1
- package/dist/Splitter/SplitterGroup.js +156 -36
- package/dist/Splitter/SplitterGroup.js.map +1 -1
- package/dist/Splitter/SplitterPanel.cjs +7 -2
- package/dist/Splitter/SplitterPanel.cjs.map +1 -1
- package/dist/Splitter/SplitterPanel.js +7 -2
- package/dist/Splitter/SplitterPanel.js.map +1 -1
- package/dist/Switch/SwitchRoot.cjs +23 -9
- package/dist/Switch/SwitchRoot.cjs.map +1 -1
- package/dist/Switch/SwitchRoot.js +23 -9
- package/dist/Switch/SwitchRoot.js.map +1 -1
- package/dist/Switch/SwitchThumb.cjs +1 -1
- package/dist/Switch/SwitchThumb.cjs.map +1 -1
- package/dist/Switch/SwitchThumb.js +1 -1
- package/dist/Switch/SwitchThumb.js.map +1 -1
- package/dist/TimeField/TimeFieldRoot.cjs +1 -1
- package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
- package/dist/TimeField/TimeFieldRoot.js +1 -1
- package/dist/TimeField/TimeFieldRoot.js.map +1 -1
- package/dist/TimeRangeField/TimeRangeFieldInput.cjs +102 -0
- package/dist/TimeRangeField/TimeRangeFieldInput.cjs.map +1 -0
- package/dist/TimeRangeField/TimeRangeFieldInput.js +96 -0
- package/dist/TimeRangeField/TimeRangeFieldInput.js.map +1 -0
- package/dist/TimeRangeField/TimeRangeFieldRoot.cjs +402 -0
- package/dist/TimeRangeField/TimeRangeFieldRoot.cjs.map +1 -0
- package/dist/TimeRangeField/TimeRangeFieldRoot.js +390 -0
- package/dist/TimeRangeField/TimeRangeFieldRoot.js.map +1 -0
- package/dist/Toast/FocusProxy.cjs +0 -1
- package/dist/Toast/FocusProxy.cjs.map +1 -1
- package/dist/Toast/FocusProxy.js +0 -1
- package/dist/Toast/FocusProxy.js.map +1 -1
- package/dist/Toast/ToastAnnounce.cjs +4 -1
- package/dist/Toast/ToastAnnounce.cjs.map +1 -1
- package/dist/Toast/ToastAnnounce.js +4 -1
- package/dist/Toast/ToastAnnounce.js.map +1 -1
- package/dist/Toast/ToastRootImpl.cjs +1 -5
- package/dist/Toast/ToastRootImpl.cjs.map +1 -1
- package/dist/Toast/ToastRootImpl.js +1 -5
- package/dist/Toast/ToastRootImpl.js.map +1 -1
- package/dist/ToggleGroup/ToggleGroupRoot.cjs +1 -1
- package/dist/ToggleGroup/ToggleGroupRoot.js +1 -1
- package/dist/Tooltip/TooltipContent.cjs +1 -2
- package/dist/Tooltip/TooltipContent.cjs.map +1 -1
- package/dist/Tooltip/TooltipContent.js +1 -2
- package/dist/Tooltip/TooltipContent.js.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs +25 -18
- package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.js +25 -18
- package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
- package/dist/Tooltip/TooltipProvider.cjs +7 -2
- package/dist/Tooltip/TooltipProvider.cjs.map +1 -1
- package/dist/Tooltip/TooltipProvider.js +7 -2
- package/dist/Tooltip/TooltipProvider.js.map +1 -1
- package/dist/YearPicker/YearPickerCell.cjs +59 -0
- package/dist/YearPicker/YearPickerCell.cjs.map +1 -0
- package/dist/YearPicker/YearPickerCell.js +53 -0
- package/dist/YearPicker/YearPickerCell.js.map +1 -0
- package/dist/YearPicker/YearPickerCellTrigger.cjs +197 -0
- package/dist/YearPicker/YearPickerCellTrigger.cjs.map +1 -0
- package/dist/YearPicker/YearPickerCellTrigger.js +191 -0
- package/dist/YearPicker/YearPickerCellTrigger.js.map +1 -0
- package/dist/YearPicker/YearPickerGrid.cjs +59 -0
- package/dist/YearPicker/YearPickerGrid.cjs.map +1 -0
- package/dist/YearPicker/YearPickerGrid.js +53 -0
- package/dist/YearPicker/YearPickerGrid.js.map +1 -0
- package/dist/YearPicker/YearPickerGridBody.cjs +41 -0
- package/dist/YearPicker/YearPickerGridBody.cjs.map +1 -0
- package/dist/YearPicker/YearPickerGridBody.js +35 -0
- package/dist/YearPicker/YearPickerGridBody.js.map +1 -0
- package/dist/YearPicker/YearPickerGridRow.cjs +41 -0
- package/dist/YearPicker/YearPickerGridRow.cjs.map +1 -0
- package/dist/YearPicker/YearPickerGridRow.js +35 -0
- package/dist/YearPicker/YearPickerGridRow.js.map +1 -0
- package/dist/YearPicker/YearPickerHeader.cjs +41 -0
- package/dist/YearPicker/YearPickerHeader.cjs.map +1 -0
- package/dist/YearPicker/YearPickerHeader.js +35 -0
- package/dist/YearPicker/YearPickerHeader.js.map +1 -0
- package/dist/YearPicker/YearPickerHeading.cjs +48 -0
- package/dist/YearPicker/YearPickerHeading.cjs.map +1 -0
- package/dist/YearPicker/YearPickerHeading.js +42 -0
- package/dist/YearPicker/YearPickerHeading.js.map +1 -0
- package/dist/YearPicker/YearPickerNext.cjs +68 -0
- package/dist/YearPicker/YearPickerNext.cjs.map +1 -0
- package/dist/YearPicker/YearPickerNext.js +62 -0
- package/dist/YearPicker/YearPickerNext.js.map +1 -0
- package/dist/YearPicker/YearPickerPrev.cjs +68 -0
- package/dist/YearPicker/YearPickerPrev.cjs.map +1 -0
- package/dist/YearPicker/YearPickerPrev.js +62 -0
- package/dist/YearPicker/YearPickerPrev.js.map +1 -0
- package/dist/YearPicker/YearPickerRoot.cjs +287 -0
- package/dist/YearPicker/YearPickerRoot.cjs.map +1 -0
- package/dist/YearPicker/YearPickerRoot.js +275 -0
- package/dist/YearPicker/YearPickerRoot.js.map +1 -0
- package/dist/YearPicker/useYearPicker.cjs +180 -0
- package/dist/YearPicker/useYearPicker.cjs.map +1 -0
- package/dist/YearPicker/useYearPicker.js +168 -0
- package/dist/YearPicker/useYearPicker.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerCell.cjs +59 -0
- package/dist/YearRangePicker/YearRangePickerCell.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerCell.js +53 -0
- package/dist/YearRangePicker/YearRangePickerCell.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs +256 -0
- package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerCellTrigger.js +250 -0
- package/dist/YearRangePicker/YearRangePickerCellTrigger.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGrid.cjs +59 -0
- package/dist/YearRangePicker/YearRangePickerGrid.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGrid.js +53 -0
- package/dist/YearRangePicker/YearRangePickerGrid.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGridBody.cjs +41 -0
- package/dist/YearRangePicker/YearRangePickerGridBody.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGridBody.js +35 -0
- package/dist/YearRangePicker/YearRangePickerGridBody.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGridRow.cjs +41 -0
- package/dist/YearRangePicker/YearRangePickerGridRow.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerGridRow.js +35 -0
- package/dist/YearRangePicker/YearRangePickerGridRow.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerHeader.cjs +41 -0
- package/dist/YearRangePicker/YearRangePickerHeader.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerHeader.js +35 -0
- package/dist/YearRangePicker/YearRangePickerHeader.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerHeading.cjs +48 -0
- package/dist/YearRangePicker/YearRangePickerHeading.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerHeading.js +42 -0
- package/dist/YearRangePicker/YearRangePickerHeading.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerNext.cjs +68 -0
- package/dist/YearRangePicker/YearRangePickerNext.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerNext.js +62 -0
- package/dist/YearRangePicker/YearRangePickerNext.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerPrev.cjs +68 -0
- package/dist/YearRangePicker/YearRangePickerPrev.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerPrev.js +62 -0
- package/dist/YearRangePicker/YearRangePickerPrev.js.map +1 -0
- package/dist/YearRangePicker/YearRangePickerRoot.cjs +350 -0
- package/dist/YearRangePicker/YearRangePickerRoot.cjs.map +1 -0
- package/dist/YearRangePicker/YearRangePickerRoot.js +338 -0
- package/dist/YearRangePicker/YearRangePickerRoot.js.map +1 -0
- package/dist/YearRangePicker/useRangeYearPicker.cjs +128 -0
- package/dist/YearRangePicker/useRangeYearPicker.cjs.map +1 -0
- package/dist/YearRangePicker/useRangeYearPicker.js +122 -0
- package/dist/YearRangePicker/useRangeYearPicker.js.map +1 -0
- package/dist/color/channel.cjs +378 -0
- package/dist/color/channel.cjs.map +1 -0
- package/dist/color/channel.js +349 -0
- package/dist/color/channel.js.map +1 -0
- package/dist/color/convert.cjs +285 -0
- package/dist/color/convert.cjs.map +1 -0
- package/dist/color/convert.js +237 -0
- package/dist/color/convert.js.map +1 -0
- package/dist/color/gradient.cjs +377 -0
- package/dist/color/gradient.cjs.map +1 -0
- package/dist/color/gradient.js +354 -0
- package/dist/color/gradient.js.map +1 -0
- package/dist/color/parse.cjs +113 -0
- package/dist/color/parse.cjs.map +1 -0
- package/dist/color/parse.js +95 -0
- package/dist/color/parse.js.map +1 -0
- package/dist/color/utils.cjs +112 -0
- package/dist/color/utils.cjs.map +1 -0
- package/dist/color/utils.js +100 -0
- package/dist/color/utils.js.map +1 -0
- package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs +11 -7
- package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs.map +1 -1
- package/dist/composables/useWindowSplitterPanelGroupBehavior.js +11 -7
- package/dist/composables/useWindowSplitterPanelGroupBehavior.js.map +1 -1
- package/dist/constant/components.cjs +87 -1
- package/dist/constant/components.cjs.map +1 -1
- package/dist/constant/components.js +87 -1
- package/dist/constant/components.js.map +1 -1
- package/dist/constant.d.cts +12 -1
- package/dist/constant.d.cts.map +1 -1
- package/dist/constant.d.ts +12 -1
- package/dist/constant.d.ts.map +1 -1
- package/dist/date/calendar.cjs +41 -0
- package/dist/date/calendar.cjs.map +1 -1
- package/dist/date/calendar.js +30 -1
- package/dist/date/calendar.js.map +1 -1
- package/dist/date/comparators.cjs +129 -0
- package/dist/date/comparators.cjs.map +1 -1
- package/dist/date/comparators.js +76 -1
- package/dist/date/comparators.js.map +1 -1
- package/dist/date/useDateField.cjs +1 -1
- package/dist/date/useDateField.cjs.map +1 -1
- package/dist/date/useDateField.js +1 -1
- package/dist/date/useDateField.js.map +1 -1
- package/dist/date.cjs +11 -0
- package/dist/date.d.cts +2 -2
- package/dist/date.d.ts +2 -2
- package/dist/date.js +3 -3
- package/dist/index.cjs +217 -47
- package/dist/index.d.cts +3 -8834
- package/dist/index.d.ts +3 -8834
- package/dist/index.js +117 -48
- package/dist/index2.d.cts +58 -2
- package/dist/index2.d.cts.map +1 -1
- package/dist/index2.d.ts +58 -2
- package/dist/index2.d.ts.map +1 -1
- package/dist/index3.d.cts +11062 -0
- package/dist/index3.d.cts.map +1 -0
- package/dist/index3.d.ts +11062 -0
- package/dist/index3.d.ts.map +1 -0
- package/dist/internal.cjs +81 -0
- package/dist/internal.d.cts +20 -0
- package/dist/internal.d.cts.map +1 -0
- package/dist/internal.d.ts +20 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +64 -0
- package/dist/internal2.cjs +0 -0
- package/dist/internal2.js +0 -0
- package/dist/namespaced/index.cjs +33 -1
- package/dist/namespaced/index.d.cts +32 -4
- package/dist/namespaced/index.d.mts +32 -4
- package/dist/namespaced/index.mjs +32 -4
- package/dist/shared/useArrowNavigation.cjs +4 -2
- package/dist/shared/useArrowNavigation.cjs.map +1 -1
- package/dist/shared/useArrowNavigation.js +4 -2
- package/dist/shared/useArrowNavigation.js.map +1 -1
- package/dist/shared/useBodyScrollLock.cjs +1 -0
- package/dist/shared/useBodyScrollLock.cjs.map +1 -1
- package/dist/shared/useBodyScrollLock.js +1 -0
- package/dist/shared/useBodyScrollLock.js.map +1 -1
- package/dist/shared/useForwardExpose.cjs +6 -2
- package/dist/shared/useForwardExpose.cjs.map +1 -1
- package/dist/shared/useForwardExpose.js +7 -3
- package/dist/shared/useForwardExpose.js.map +1 -1
- package/dist/shared/useHideOthers.cjs +1 -1
- package/dist/shared/useHideOthers.cjs.map +1 -1
- package/dist/shared/useHideOthers.js +1 -1
- package/dist/shared/useHideOthers.js.map +1 -1
- package/dist/shared/useId.cjs +7 -4
- package/dist/shared/useId.cjs.map +1 -1
- package/dist/shared/useId.js +7 -4
- package/dist/shared/useId.js.map +1 -1
- package/dist/utils/callPanelCallbacks.cjs +10 -7
- package/dist/utils/callPanelCallbacks.cjs.map +1 -1
- package/dist/utils/callPanelCallbacks.js +10 -7
- package/dist/utils/callPanelCallbacks.js.map +1 -1
- package/dist/utils/storage.cjs +7 -1
- package/dist/utils/storage.cjs.map +1 -1
- package/dist/utils/storage.js +7 -1
- package/dist/utils/storage.js.map +1 -1
- package/dist/utils/units.cjs +101 -0
- package/dist/utils/units.cjs.map +1 -0
- package/dist/utils/units.js +83 -0
- package/dist/utils/units.js.map +1 -0
- package/package.json +7 -3
- package/src/Autocomplete/AutocompleteInput.vue +112 -0
- package/src/Autocomplete/AutocompleteRoot.vue +272 -0
- package/src/Autocomplete/index.ts +72 -0
- package/src/Calendar/CalendarCellTrigger.vue +2 -1
- package/src/Calendar/CalendarGrid.vue +6 -1
- package/src/Calendar/CalendarNext.vue +8 -2
- package/src/Calendar/CalendarPrev.vue +8 -2
- package/src/Calendar/CalendarRoot.vue +1 -1
- package/src/Checkbox/CheckboxRoot.vue +32 -13
- package/src/ColorArea/ColorAreaArea.vue +145 -0
- package/src/ColorArea/ColorAreaRoot.vue +255 -0
- package/src/ColorArea/ColorAreaThumb.vue +75 -0
- package/src/ColorArea/index.ts +14 -0
- package/src/ColorArea/utils.ts +24 -0
- package/src/ColorField/ColorFieldInput.vue +133 -0
- package/src/ColorField/ColorFieldRoot.vue +326 -0
- package/src/ColorField/index.ts +10 -0
- package/src/ColorSlider/ColorSliderRoot.vue +224 -0
- package/src/ColorSlider/ColorSliderThumb.vue +54 -0
- package/src/ColorSlider/ColorSliderTrack.vue +36 -0
- package/src/ColorSlider/index.ts +14 -0
- package/src/ColorSlider/utils.ts +39 -0
- package/src/ColorSwatch/ColorSwatch.vue +97 -0
- package/src/ColorSwatch/index.ts +4 -0
- package/src/ColorSwatchPicker/ColorSwatchPickerItem.vue +60 -0
- package/src/ColorSwatchPicker/ColorSwatchPickerItemIndicator.vue +17 -0
- package/src/ColorSwatchPicker/ColorSwatchPickerItemSwatch.vue +21 -0
- package/src/ColorSwatchPicker/ColorSwatchPickerRoot.vue +50 -0
- package/src/ColorSwatchPicker/index.ts +17 -0
- package/src/Combobox/ComboboxContentImpl.vue +13 -1
- package/src/Combobox/ComboboxInput.vue +19 -0
- package/src/DateField/DateFieldRoot.vue +1 -1
- package/src/DateRangeField/DateRangeFieldRoot.vue +11 -4
- package/src/DismissableLayer/utils.ts +5 -3
- package/src/DropdownMenu/DropdownMenuFilter.vue +119 -0
- package/src/DropdownMenu/index.ts +5 -0
- package/src/Menu/MenuContentImpl.vue +68 -2
- package/src/Menu/MenuGroup.vue +12 -0
- package/src/Menu/MenuItemImpl.vue +15 -10
- package/src/Menu/MenuLabel.vue +7 -1
- package/src/Menu/MenuSubContent.vue +14 -3
- package/src/Menu/MenuSubTrigger.vue +13 -1
- package/src/MonthPicker/MonthPickerCell.vue +30 -0
- package/src/MonthPicker/MonthPickerCellTrigger.vue +214 -0
- package/src/MonthPicker/MonthPickerGrid.vue +37 -0
- package/src/MonthPicker/MonthPickerGridBody.vue +17 -0
- package/src/MonthPicker/MonthPickerGridRow.vue +20 -0
- package/src/MonthPicker/MonthPickerHeader.vue +17 -0
- package/src/MonthPicker/MonthPickerHeading.vue +35 -0
- package/src/MonthPicker/MonthPickerNext.vue +52 -0
- package/src/MonthPicker/MonthPickerPrev.vue +52 -0
- package/src/MonthPicker/MonthPickerRoot.vue +311 -0
- package/src/MonthPicker/index.ts +42 -0
- package/src/MonthPicker/useMonthPicker.ts +193 -0
- package/src/MonthRangePicker/MonthRangePickerCell.vue +30 -0
- package/src/MonthRangePicker/MonthRangePickerCellTrigger.vue +309 -0
- package/src/MonthRangePicker/MonthRangePickerGrid.vue +37 -0
- package/src/MonthRangePicker/MonthRangePickerGridBody.vue +17 -0
- package/src/MonthRangePicker/MonthRangePickerGridRow.vue +20 -0
- package/src/MonthRangePicker/MonthRangePickerHeader.vue +17 -0
- package/src/MonthRangePicker/MonthRangePickerHeading.vue +35 -0
- package/src/MonthRangePicker/MonthRangePickerNext.vue +52 -0
- package/src/MonthRangePicker/MonthRangePickerPrev.vue +52 -0
- package/src/MonthRangePicker/MonthRangePickerRoot.vue +391 -0
- package/src/MonthRangePicker/index.ts +42 -0
- package/src/MonthRangePicker/useRangeMonthPicker.ts +165 -0
- package/src/NumberField/NumberFieldRoot.vue +2 -1
- package/src/Progress/ProgressRoot.vue +3 -1
- package/src/RangeCalendar/RangeCalendarGrid.vue +6 -1
- package/src/RangeCalendar/RangeCalendarNext.vue +10 -4
- package/src/RangeCalendar/RangeCalendarPrev.vue +10 -4
- package/src/RangeCalendar/RangeCalendarRoot.vue +2 -2
- package/src/RangeCalendar/useRangeCalendar.ts +5 -8
- package/src/Splitter/SplitterGroup.vue +243 -54
- package/src/Splitter/SplitterPanel.vue +11 -6
- package/src/Splitter/utils/callPanelCallbacks.ts +16 -8
- package/src/Splitter/utils/composables/useWindowSplitterPanelGroupBehavior.ts +16 -6
- package/src/Splitter/utils/storage.ts +14 -0
- package/src/Splitter/utils/units.ts +161 -0
- package/src/Splitter/utils/validation.ts +3 -2
- package/src/Switch/SwitchRoot.vue +36 -19
- package/src/Switch/SwitchThumb.vue +1 -1
- package/src/TimeField/TimeFieldRoot.vue +0 -3
- package/src/TimeRangeField/TimeRangeFieldInput.vue +74 -0
- package/src/TimeRangeField/TimeRangeFieldRoot.vue +473 -0
- package/src/TimeRangeField/index.ts +2 -0
- package/src/Toast/FocusProxy.vue +0 -1
- package/src/Toast/ToastAnnounce.vue +4 -1
- package/src/Toast/ToastRootImpl.vue +0 -4
- package/src/Tooltip/TooltipContent.vue +1 -3
- package/src/Tooltip/TooltipContentImpl.vue +18 -10
- package/src/Tooltip/TooltipProvider.vue +8 -1
- package/src/YearPicker/YearPickerCell.vue +30 -0
- package/src/YearPicker/YearPickerCellTrigger.vue +218 -0
- package/src/YearPicker/YearPickerGrid.vue +37 -0
- package/src/YearPicker/YearPickerGridBody.vue +17 -0
- package/src/YearPicker/YearPickerGridRow.vue +20 -0
- package/src/YearPicker/YearPickerHeader.vue +17 -0
- package/src/YearPicker/YearPickerHeading.vue +35 -0
- package/src/YearPicker/YearPickerNext.vue +52 -0
- package/src/YearPicker/YearPickerPrev.vue +52 -0
- package/src/YearPicker/YearPickerRoot.vue +314 -0
- package/src/YearPicker/index.ts +42 -0
- package/src/YearPicker/useYearPicker.ts +202 -0
- package/src/YearRangePicker/YearRangePickerCell.vue +30 -0
- package/src/YearRangePicker/YearRangePickerCellTrigger.vue +311 -0
- package/src/YearRangePicker/YearRangePickerGrid.vue +37 -0
- package/src/YearRangePicker/YearRangePickerGridBody.vue +17 -0
- package/src/YearRangePicker/YearRangePickerGridRow.vue +20 -0
- package/src/YearRangePicker/YearRangePickerHeader.vue +17 -0
- package/src/YearRangePicker/YearRangePickerHeading.vue +35 -0
- package/src/YearRangePicker/YearRangePickerNext.vue +52 -0
- package/src/YearRangePicker/YearRangePickerPrev.vue +52 -0
- package/src/YearRangePicker/YearRangePickerRoot.vue +391 -0
- package/src/YearRangePicker/index.ts +42 -0
- package/src/YearRangePicker/useRangeYearPicker.ts +165 -0
- package/src/date/calendar.ts +29 -0
- package/src/date/comparators.ts +97 -0
- package/src/index.ts +41 -0
- package/src/internal.ts +7 -0
- package/src/shared/color/channel.ts +424 -0
- package/src/shared/color/convert.ts +293 -0
- package/src/shared/color/gradient.ts +347 -0
- package/src/shared/color/index.ts +35 -0
- package/src/shared/color/parse.ts +140 -0
- package/src/shared/color/types.ts +40 -0
- package/src/shared/color/utils.ts +143 -0
- package/src/shared/date/types.ts +6 -0
- package/src/shared/date/useDateField.ts +39 -40
- package/src/shared/macro.ts +11 -0
- package/src/shared/useArrowNavigation.ts +8 -2
- package/src/shared/useBodyScrollLock.ts +2 -0
- package/src/shared/useForwardExpose.ts +20 -5
- package/src/shared/useHideOthers.ts +2 -1
- package/src/shared/useId.ts +6 -7
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
+
import type { Color } from '@/shared/color'
|
|
4
|
+
|
|
5
|
+
export interface ColorSwatchProps extends PrimitiveProps {
|
|
6
|
+
/**
|
|
7
|
+
* The color to display in the swatch as a hex string or Color object.
|
|
8
|
+
* Example: `#16a372`, `#ff5733`, or `{ space: 'hsl', h: 120, s: 100, l: 50, alpha: 1 }`.
|
|
9
|
+
*/
|
|
10
|
+
color?: string | Color
|
|
11
|
+
/**
|
|
12
|
+
* Optional accessible label for the color. If omitted, the color name will be derived from the color value.
|
|
13
|
+
*/
|
|
14
|
+
label?: string
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<script setup lang="ts">
|
|
19
|
+
import { computed } from 'vue'
|
|
20
|
+
import { Primitive } from '@/Primitive'
|
|
21
|
+
import { colorToString, getColorContrast, getColorName, normalizeColor } from '@/shared/color'
|
|
22
|
+
|
|
23
|
+
const props = withDefaults(defineProps<ColorSwatchProps>(), { as: 'div', color: '' })
|
|
24
|
+
|
|
25
|
+
const colorString = computed(() => {
|
|
26
|
+
if (!props.color)
|
|
27
|
+
return ''
|
|
28
|
+
if (typeof props.color === 'string') {
|
|
29
|
+
return props.color
|
|
30
|
+
}
|
|
31
|
+
return colorToString(props.color, 'hex')
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
const colorObj = computed(() => {
|
|
35
|
+
if (!props.color)
|
|
36
|
+
return null
|
|
37
|
+
try {
|
|
38
|
+
return normalizeColor(props.color)
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
const alpha = computed(() => colorObj.value?.alpha ?? 0)
|
|
46
|
+
const isNoColor = computed(() => !props.color || alpha.value <= 0)
|
|
47
|
+
|
|
48
|
+
const label = computed(() => {
|
|
49
|
+
if (props.label)
|
|
50
|
+
return props.label
|
|
51
|
+
|
|
52
|
+
// Match React Aria: transparent colors get "transparent" label
|
|
53
|
+
if (!colorObj.value || colorObj.value.alpha === 0)
|
|
54
|
+
return 'transparent'
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
return getColorName(colorString.value)
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return colorString.value || 'transparent'
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
const colorContrast = computed(() => {
|
|
65
|
+
try {
|
|
66
|
+
return getColorContrast(colorString.value)
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
if (import.meta.env.DEV) {
|
|
70
|
+
console.warn(`WARNING: Unable to resolve contrast color for "${colorString.value}".
|
|
71
|
+
Please check that the color provided is a valid hex color.`)
|
|
72
|
+
}
|
|
73
|
+
return undefined
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<template>
|
|
79
|
+
<Primitive
|
|
80
|
+
role="img"
|
|
81
|
+
:aria-label="label"
|
|
82
|
+
aria-roledescription="color swatch"
|
|
83
|
+
:as-child="asChild"
|
|
84
|
+
:as="as"
|
|
85
|
+
:data-color-contrast="colorContrast"
|
|
86
|
+
:data-no-color="isNoColor ? '' : undefined"
|
|
87
|
+
:style="{
|
|
88
|
+
'--reka-color-swatch-color': colorString,
|
|
89
|
+
'--reka-color-swatch-alpha': String(alpha),
|
|
90
|
+
}"
|
|
91
|
+
>
|
|
92
|
+
<slot
|
|
93
|
+
:color="colorString"
|
|
94
|
+
:alpha="alpha"
|
|
95
|
+
/>
|
|
96
|
+
</Primitive>
|
|
97
|
+
</template>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Ref } from 'vue'
|
|
3
|
+
import type { ListboxItemEmits, ListboxItemProps } from '@/Listbox'
|
|
4
|
+
import { createContext, useForwardPropsEmits } from '@/shared'
|
|
5
|
+
|
|
6
|
+
export interface ColorSwatchPickerItemProps extends ListboxItemProps {
|
|
7
|
+
/**
|
|
8
|
+
* The color to display in the swatch as a hex string.
|
|
9
|
+
* Example: `#16a372` or `#ff5733`.
|
|
10
|
+
*/
|
|
11
|
+
value: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type ColorSwatchPickerItemEmits = ListboxItemEmits
|
|
15
|
+
|
|
16
|
+
export interface ColorSwatchPickerItemContext {
|
|
17
|
+
color: Ref<string>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const [injectColorSwatchPickerItemContext, provideColorSwatchPickerItemContext]
|
|
21
|
+
= createContext<ColorSwatchPickerItemContext>('ColorSwatchPickerItem', 'ColorSwatchPickerItemContext')
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<script setup lang="ts">
|
|
25
|
+
import { computed, toRefs } from 'vue'
|
|
26
|
+
import { ListboxItem } from '@/Listbox'
|
|
27
|
+
import { getColorName } from '@/shared/color'
|
|
28
|
+
|
|
29
|
+
const props = defineProps<ColorSwatchPickerItemProps>()
|
|
30
|
+
|
|
31
|
+
const emits = defineEmits<ColorSwatchPickerItemEmits>()
|
|
32
|
+
|
|
33
|
+
const { value } = toRefs(props)
|
|
34
|
+
|
|
35
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
36
|
+
|
|
37
|
+
const colorLabel = computed(() => {
|
|
38
|
+
try {
|
|
39
|
+
return getColorName(value.value)
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return value.value
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
provideColorSwatchPickerItemContext({
|
|
47
|
+
color: value,
|
|
48
|
+
})
|
|
49
|
+
</script>
|
|
50
|
+
|
|
51
|
+
<template>
|
|
52
|
+
<ListboxItem
|
|
53
|
+
v-bind="forwarded"
|
|
54
|
+
:aria-label="colorLabel"
|
|
55
|
+
:data-color="value"
|
|
56
|
+
:style="{ '--reka-color-swatch-picker-item-color': value }"
|
|
57
|
+
>
|
|
58
|
+
<slot />
|
|
59
|
+
</ListboxItem>
|
|
60
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ListboxItemIndicatorProps } from '@/Listbox'
|
|
3
|
+
|
|
4
|
+
export interface ColorSwatchPickerItemIndicatorProps extends ListboxItemIndicatorProps { }
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { ListboxItemIndicator } from '@/Listbox'
|
|
9
|
+
|
|
10
|
+
const props = defineProps<ColorSwatchPickerItemIndicatorProps>()
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<ListboxItemIndicator v-bind="props">
|
|
15
|
+
<slot />
|
|
16
|
+
</ListboxItemIndicator>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ColorSwatchProps } from '@/ColorSwatch/ColorSwatch.vue'
|
|
3
|
+
|
|
4
|
+
export interface ColorSwatchPickerItemSwatchProps extends Omit<ColorSwatchProps, 'color'> { }
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { ColorSwatch } from '@/ColorSwatch'
|
|
9
|
+
import { injectColorSwatchPickerItemContext } from './ColorSwatchPickerItem.vue'
|
|
10
|
+
|
|
11
|
+
const props = defineProps<ColorSwatchPickerItemSwatchProps>()
|
|
12
|
+
|
|
13
|
+
const colorSwatchPickerItemContext = injectColorSwatchPickerItemContext()
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<ColorSwatch
|
|
18
|
+
v-bind="props"
|
|
19
|
+
:color="colorSwatchPickerItemContext.color.value"
|
|
20
|
+
/>
|
|
21
|
+
</template>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ListboxRootEmits, ListboxRootProps } from '@/Listbox'
|
|
3
|
+
import { useVModel } from '@vueuse/core'
|
|
4
|
+
import { useForwardPropsEmits } from '@/shared'
|
|
5
|
+
|
|
6
|
+
export interface ColorSwatchPickerRootProps extends Omit<ListboxRootProps, 'by'> {
|
|
7
|
+
defaultValue?: string | string[]
|
|
8
|
+
modelValue?: string | string[]
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type ColorSwatchPickerRootEmits = ListboxRootEmits
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<script setup lang="ts">
|
|
15
|
+
import { ListboxContent, ListboxRoot } from '@/Listbox'
|
|
16
|
+
|
|
17
|
+
const props = withDefaults(defineProps<ColorSwatchPickerRootProps>(), {
|
|
18
|
+
as: 'div',
|
|
19
|
+
defaultValue: undefined,
|
|
20
|
+
dir: 'ltr',
|
|
21
|
+
disabled: false,
|
|
22
|
+
loop: false,
|
|
23
|
+
orientation: 'horizontal',
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const emits = defineEmits<ColorSwatchPickerRootEmits>()
|
|
27
|
+
|
|
28
|
+
const modelValue = useVModel(props, 'modelValue', emits, {
|
|
29
|
+
defaultValue: props.defaultValue ?? (props.multiple ? [] : ''),
|
|
30
|
+
// Cast required for VueUse's passive option type; enables passive sync when modelValue is undefined
|
|
31
|
+
passive: (props.modelValue === undefined) as false,
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<ListboxRoot
|
|
39
|
+
v-bind="forwarded"
|
|
40
|
+
v-model="modelValue"
|
|
41
|
+
as-child
|
|
42
|
+
>
|
|
43
|
+
<ListboxContent
|
|
44
|
+
:as-child="asChild"
|
|
45
|
+
:as="as"
|
|
46
|
+
>
|
|
47
|
+
<slot :model-value="modelValue" />
|
|
48
|
+
</ListboxContent>
|
|
49
|
+
</ListboxRoot>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export {
|
|
2
|
+
default as ColorSwatchPickerItem,
|
|
3
|
+
type ColorSwatchPickerItemProps,
|
|
4
|
+
} from './ColorSwatchPickerItem.vue'
|
|
5
|
+
export {
|
|
6
|
+
default as ColorSwatchPickerItemIndicator,
|
|
7
|
+
type ColorSwatchPickerItemIndicatorProps,
|
|
8
|
+
} from './ColorSwatchPickerItemIndicator.vue'
|
|
9
|
+
export {
|
|
10
|
+
default as ColorSwatchPickerItemSwatch,
|
|
11
|
+
type ColorSwatchPickerItemSwatchProps,
|
|
12
|
+
} from './ColorSwatchPickerItemSwatch.vue'
|
|
13
|
+
export {
|
|
14
|
+
default as ColorSwatchPickerRoot,
|
|
15
|
+
type ColorSwatchPickerRootEmits,
|
|
16
|
+
type ColorSwatchPickerRootProps,
|
|
17
|
+
} from './ColorSwatchPickerRoot.vue'
|
|
@@ -17,6 +17,11 @@ export interface ComboboxContentImplProps extends PopperContentProps, Dismissabl
|
|
|
17
17
|
position?: 'inline' | 'popper'
|
|
18
18
|
/** The document.body will be lock, and scrolling will be disabled. */
|
|
19
19
|
bodyLock?: boolean
|
|
20
|
+
/**
|
|
21
|
+
* When `true`, hides the content when there are no items matching the filter.
|
|
22
|
+
* @defaultValue false
|
|
23
|
+
*/
|
|
24
|
+
hideWhenEmpty?: boolean
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
export const [injectComboboxContentContext, provideComboboxContentContext]
|
|
@@ -42,6 +47,11 @@ const emits = defineEmits<ComboboxContentImplEmits>()
|
|
|
42
47
|
const { position } = toRefs(props)
|
|
43
48
|
const rootContext = injectComboboxRootContext()
|
|
44
49
|
|
|
50
|
+
const isEmpty = computed(() => rootContext.ignoreFilter.value
|
|
51
|
+
? rootContext.allItems.value.size === 0
|
|
52
|
+
: rootContext.filterState.value.count === 0,
|
|
53
|
+
)
|
|
54
|
+
|
|
45
55
|
const { forwardRef, currentElement } = useForwardExpose()
|
|
46
56
|
useBodyScrollLock(props.bodyLock)
|
|
47
57
|
useFocusGuards()
|
|
@@ -119,9 +129,11 @@ onUnmounted(() => {
|
|
|
119
129
|
:id="rootContext.contentId"
|
|
120
130
|
:ref="forwardRef"
|
|
121
131
|
:data-state="rootContext.open.value ? 'open' : 'closed'"
|
|
132
|
+
:data-empty="isEmpty ? '' : undefined"
|
|
122
133
|
:style="{
|
|
123
134
|
// flex layout so we can place the scroll buttons properly
|
|
124
|
-
|
|
135
|
+
// When hideWhenEmpty is true, hide the content when no items match
|
|
136
|
+
display: (props.hideWhenEmpty && isEmpty) ? 'none' : 'flex',
|
|
125
137
|
flexDirection: 'column',
|
|
126
138
|
// reset the outline by default as the content MAY get focused
|
|
127
139
|
outline: 'none',
|
|
@@ -60,6 +60,24 @@ function handleFocus() {
|
|
|
60
60
|
rootContext.onOpenChange(true)
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
function handleBlur(ev: FocusEvent) {
|
|
64
|
+
if (!rootContext.open.value)
|
|
65
|
+
return
|
|
66
|
+
|
|
67
|
+
const nextFocus = ev.relatedTarget as Element | null
|
|
68
|
+
|
|
69
|
+
// If focus moves to nothing (e.g. click on non-focusable area), let DismissableLayer handle it
|
|
70
|
+
if (!nextFocus)
|
|
71
|
+
return
|
|
72
|
+
|
|
73
|
+
const isInsideRoot = rootContext.parentElement.value?.contains(nextFocus)
|
|
74
|
+
const isInsideContent = document.getElementById(rootContext.contentId)?.contains(nextFocus)
|
|
75
|
+
|
|
76
|
+
if (!isInsideRoot && !isInsideContent) {
|
|
77
|
+
rootContext.onOpenChange(false)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
63
81
|
function handleClick() {
|
|
64
82
|
if (rootContext.openOnClick.value && !rootContext.open.value)
|
|
65
83
|
rootContext.onOpenChange(true)
|
|
@@ -122,6 +140,7 @@ watch(rootContext.filterState, (_newValue, oldValue) => {
|
|
|
122
140
|
@input="handleInput"
|
|
123
141
|
@keydown.down.up.prevent="handleKeyDown"
|
|
124
142
|
@focus="handleFocus"
|
|
143
|
+
@blur="handleBlur"
|
|
125
144
|
>
|
|
126
145
|
<slot />
|
|
127
146
|
</ListboxFilter>
|
|
@@ -44,7 +44,7 @@ export interface DateFieldRootProps extends PrimitiveProps, FormFieldProps {
|
|
|
44
44
|
defaultPlaceholder?: DateValue
|
|
45
45
|
/** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */
|
|
46
46
|
placeholder?: DateValue
|
|
47
|
-
/** The controlled
|
|
47
|
+
/** The controlled value of the field. Can be bound as `v-model`. */
|
|
48
48
|
modelValue?: DateValue | null
|
|
49
49
|
/** The hour cycle used for formatting times. Defaults to the local preference */
|
|
50
50
|
hourCycle?: HourCycle
|
|
@@ -12,15 +12,12 @@ import {
|
|
|
12
12
|
hasTime,
|
|
13
13
|
isBefore,
|
|
14
14
|
isBeforeOrSame,
|
|
15
|
-
|
|
16
15
|
} from '@/date'
|
|
17
16
|
import { createContext, useDateFormatter, useDirection, useKbd, useLocale } from '@/shared'
|
|
18
17
|
import {
|
|
19
18
|
createContent,
|
|
20
|
-
|
|
21
19
|
getDefaultDate,
|
|
22
20
|
getSegmentElements,
|
|
23
|
-
|
|
24
21
|
initializeSegmentValues,
|
|
25
22
|
isSegmentNavigationKey,
|
|
26
23
|
normalizeDateStep,
|
|
@@ -57,7 +54,7 @@ export interface DateRangeFieldRootProps extends PrimitiveProps, FormFieldProps
|
|
|
57
54
|
defaultPlaceholder?: DateValue
|
|
58
55
|
/** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */
|
|
59
56
|
placeholder?: DateValue
|
|
60
|
-
/** The controlled
|
|
57
|
+
/** The controlled value of the field. Can be bound as `v-model`. */
|
|
61
58
|
modelValue?: DateRange | null
|
|
62
59
|
/** The hour cycle used for formatting times. Defaults to the local preference */
|
|
63
60
|
hourCycle?: HourCycle
|
|
@@ -114,6 +111,16 @@ const props = withDefaults(defineProps<DateRangeFieldRootProps>(), {
|
|
|
114
111
|
isDateUnavailable: undefined,
|
|
115
112
|
})
|
|
116
113
|
const emits = defineEmits<DateRangeFieldRootEmits>()
|
|
114
|
+
defineSlots<{
|
|
115
|
+
default?: (props: {
|
|
116
|
+
/** The current date range of the field */
|
|
117
|
+
modelValue: DateRange | null
|
|
118
|
+
/** The date field segment contents */
|
|
119
|
+
segments: { start: { part: SegmentPart, value: string }[], end: { part: SegmentPart, value: string }[] }
|
|
120
|
+
/** Value if the input is invalid */
|
|
121
|
+
isInvalid: boolean
|
|
122
|
+
}) => any
|
|
123
|
+
}>()
|
|
117
124
|
const { disabled, readonly, isDateUnavailable: propsIsDateUnavailable, dir: propDir, locale: propLocale } = toRefs(props)
|
|
118
125
|
const locale = useLocale(propLocale)
|
|
119
126
|
const dir = useDirection(propDir)
|
|
@@ -13,7 +13,10 @@ export const CONTEXT_UPDATE = 'dismissableLayer.update'
|
|
|
13
13
|
export const POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside'
|
|
14
14
|
export const FOCUS_OUTSIDE = 'dismissableLayer.focusOutside'
|
|
15
15
|
|
|
16
|
-
function isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {
|
|
16
|
+
export function isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {
|
|
17
|
+
if (!(targetElement instanceof Element))
|
|
18
|
+
return false
|
|
19
|
+
|
|
17
20
|
const targetLayer = targetElement.closest(
|
|
18
21
|
'[data-dismissable-layer]',
|
|
19
22
|
)
|
|
@@ -28,8 +31,7 @@ function isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {
|
|
|
28
31
|
layerElement.ownerDocument.querySelectorAll('[data-dismissable-layer]'),
|
|
29
32
|
)
|
|
30
33
|
|
|
31
|
-
if (targetLayer && (mainLayer === targetLayer || nodeList.indexOf(mainLayer) < nodeList.indexOf(targetLayer))
|
|
32
|
-
) {
|
|
34
|
+
if (targetLayer && (mainLayer === targetLayer || nodeList.indexOf(mainLayer) < nodeList.indexOf(targetLayer))) {
|
|
33
35
|
return true
|
|
34
36
|
}
|
|
35
37
|
else {
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
+
import { useVModel } from '@vueuse/core'
|
|
4
|
+
import { computed, onMounted, onUnmounted, ref, watch, watchSyncEffect } from 'vue'
|
|
5
|
+
import { injectMenuContentContext } from '@/Menu/MenuContentImpl.vue'
|
|
6
|
+
import { injectMenuRootContext } from '@/Menu/MenuRoot.vue'
|
|
7
|
+
import { injectMenuSubContext } from '@/Menu/MenuSub.vue'
|
|
8
|
+
import { Primitive, usePrimitiveElement } from '@/Primitive'
|
|
9
|
+
|
|
10
|
+
export interface DropdownMenuFilterProps extends PrimitiveProps {
|
|
11
|
+
/** The controlled value of the filter. Can be binded with v-model. */
|
|
12
|
+
modelValue?: string
|
|
13
|
+
/** Focus on element when mounted. */
|
|
14
|
+
autoFocus?: boolean
|
|
15
|
+
/** When `true`, prevents the user from interacting with item */
|
|
16
|
+
disabled?: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type DropdownMenuFilterEmits = {
|
|
20
|
+
'update:modelValue': [string]
|
|
21
|
+
}
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<script setup lang="ts">
|
|
25
|
+
const props = withDefaults(defineProps<DropdownMenuFilterProps>(), {
|
|
26
|
+
as: 'input',
|
|
27
|
+
})
|
|
28
|
+
const emits = defineEmits<DropdownMenuFilterEmits>()
|
|
29
|
+
|
|
30
|
+
defineSlots<{
|
|
31
|
+
default?: (props: {
|
|
32
|
+
/** Current input values */
|
|
33
|
+
modelValue: typeof modelValue.value
|
|
34
|
+
}) => any
|
|
35
|
+
}>()
|
|
36
|
+
|
|
37
|
+
const modelValue = useVModel(props, 'modelValue', emits, {
|
|
38
|
+
defaultValue: '',
|
|
39
|
+
passive: (props.modelValue === undefined) as false,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
const rootContext = injectMenuRootContext()
|
|
43
|
+
const contentContext = injectMenuContentContext()
|
|
44
|
+
const subContext = injectMenuSubContext(null)
|
|
45
|
+
|
|
46
|
+
// Keep searchRef in sync with modelValue changes
|
|
47
|
+
watch(modelValue, (v) => { contentContext.searchRef.value = v ?? '' }, { immediate: true })
|
|
48
|
+
|
|
49
|
+
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
50
|
+
const disabled = computed(() => props.disabled || false)
|
|
51
|
+
|
|
52
|
+
const activedescendant = ref<string | undefined>()
|
|
53
|
+
watchSyncEffect(() => activedescendant.value = contentContext.highlightedElement.value?.id)
|
|
54
|
+
|
|
55
|
+
onMounted(() => {
|
|
56
|
+
contentContext.onFilterElementChange(currentElement.value)
|
|
57
|
+
setTimeout(() => {
|
|
58
|
+
// make sure all DOM was flush then only capture the focus
|
|
59
|
+
if (props.autoFocus) {
|
|
60
|
+
const isSubmenu = !!subContext
|
|
61
|
+
if (!isSubmenu || rootContext.isUsingKeyboardRef.value)
|
|
62
|
+
currentElement.value?.focus()
|
|
63
|
+
}
|
|
64
|
+
}, 1)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
onUnmounted(() => {
|
|
68
|
+
contentContext.onFilterElementChange(undefined)
|
|
69
|
+
// Clean up search when unmounting
|
|
70
|
+
contentContext.searchRef.value = ''
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
function handleInput(event: InputEvent) {
|
|
74
|
+
if (disabled.value)
|
|
75
|
+
return
|
|
76
|
+
const target = event.target as HTMLInputElement
|
|
77
|
+
modelValue.value = target.value
|
|
78
|
+
// Update the menu's search ref to help with filtering
|
|
79
|
+
contentContext.searchRef.value = target.value
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function handleKeyDown(event: KeyboardEvent) {
|
|
83
|
+
if (disabled.value)
|
|
84
|
+
return
|
|
85
|
+
if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {
|
|
86
|
+
event.preventDefault()
|
|
87
|
+
contentContext.onKeydownNavigation(event)
|
|
88
|
+
}
|
|
89
|
+
else if (event.key === 'Enter') {
|
|
90
|
+
event.preventDefault()
|
|
91
|
+
contentContext.onKeydownEnter(event)
|
|
92
|
+
}
|
|
93
|
+
// Prevent Escape from bubbling to avoid closing the menu when clearing the filter
|
|
94
|
+
else if (event.key === 'Escape' && modelValue.value) {
|
|
95
|
+
event.stopPropagation()
|
|
96
|
+
modelValue.value = ''
|
|
97
|
+
contentContext.searchRef.value = ''
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
</script>
|
|
101
|
+
|
|
102
|
+
<template>
|
|
103
|
+
<Primitive
|
|
104
|
+
ref="primitiveElement"
|
|
105
|
+
:as="as"
|
|
106
|
+
:as-child="asChild"
|
|
107
|
+
:value="modelValue"
|
|
108
|
+
:disabled="disabled ? '' : undefined"
|
|
109
|
+
:data-disabled="disabled ? '' : undefined"
|
|
110
|
+
:aria-disabled="disabled ? true : undefined"
|
|
111
|
+
:aria-activedescendant="activedescendant"
|
|
112
|
+
type="text"
|
|
113
|
+
role="searchbox"
|
|
114
|
+
@input="handleInput"
|
|
115
|
+
@keydown="handleKeyDown"
|
|
116
|
+
>
|
|
117
|
+
<slot :model-value="modelValue" />
|
|
118
|
+
</Primitive>
|
|
119
|
+
</template>
|
|
@@ -12,6 +12,11 @@ export {
|
|
|
12
12
|
type DropdownMenuContentEmits,
|
|
13
13
|
type DropdownMenuContentProps,
|
|
14
14
|
} from './DropdownMenuContent.vue'
|
|
15
|
+
export {
|
|
16
|
+
default as DropdownMenuFilter,
|
|
17
|
+
type DropdownMenuFilterEmits,
|
|
18
|
+
type DropdownMenuFilterProps,
|
|
19
|
+
} from './DropdownMenuFilter.vue'
|
|
15
20
|
export {
|
|
16
21
|
default as DropdownMenuGroup,
|
|
17
22
|
type DropdownMenuGroupProps,
|
|
@@ -27,6 +27,12 @@ export interface MenuContentContext {
|
|
|
27
27
|
onItemLeave: (event: PointerEvent) => void
|
|
28
28
|
onTriggerLeave: (event: PointerEvent) => boolean
|
|
29
29
|
searchRef: Ref<string>
|
|
30
|
+
highlightedElement: Ref<HTMLElement | undefined>
|
|
31
|
+
onKeydownNavigation: (event: KeyboardEvent) => void
|
|
32
|
+
onKeydownEnter: (event: KeyboardEvent) => void
|
|
33
|
+
filterElement: Ref<HTMLElement | undefined>
|
|
34
|
+
onFilterElementChange: (el: HTMLElement | undefined) => void
|
|
35
|
+
activeSubmenuContext: Ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> } | undefined>
|
|
30
36
|
pointerGraceTimerRef: Ref<number>
|
|
31
37
|
onPointerGraceIntentChange: (intent: GraceIntent | null) => void
|
|
32
38
|
}
|
|
@@ -132,6 +138,43 @@ const rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()
|
|
|
132
138
|
const { forwardRef, currentElement: contentElement } = useForwardExpose()
|
|
133
139
|
const { handleTypeaheadSearch } = useTypeahead()
|
|
134
140
|
|
|
141
|
+
const highlightedElement = ref<HTMLElement>()
|
|
142
|
+
|
|
143
|
+
function onKeydownNavigation(event: KeyboardEvent) {
|
|
144
|
+
const el = useArrowNavigation(
|
|
145
|
+
event,
|
|
146
|
+
(highlightedElement.value || getActiveElement()) as HTMLElement,
|
|
147
|
+
contentElement.value,
|
|
148
|
+
{
|
|
149
|
+
loop: loop.value,
|
|
150
|
+
arrowKeyOptions: 'vertical',
|
|
151
|
+
dir: rootContext?.dir.value,
|
|
152
|
+
focus: false,
|
|
153
|
+
attributeName: '[data-reka-collection-item]:not([data-disabled])',
|
|
154
|
+
},
|
|
155
|
+
)
|
|
156
|
+
if (el) {
|
|
157
|
+
highlightedElement.value = el
|
|
158
|
+
el.scrollIntoView({ block: 'nearest' })
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function onKeydownEnter() {
|
|
163
|
+
if (highlightedElement.value) {
|
|
164
|
+
highlightedElement.value.click()
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const filterElement = ref<HTMLElement>()
|
|
169
|
+
const activeSubmenuContext = ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> }>()
|
|
170
|
+
|
|
171
|
+
watch(highlightedElement, (el) => {
|
|
172
|
+
if (activeSubmenuContext.value && (el === undefined || el !== activeSubmenuContext.value.trigger.value)) {
|
|
173
|
+
activeSubmenuContext.value.onOpenChange(false)
|
|
174
|
+
activeSubmenuContext.value = undefined
|
|
175
|
+
}
|
|
176
|
+
})
|
|
177
|
+
|
|
135
178
|
watch(contentElement, (el) => {
|
|
136
179
|
menuContext!.onContentChange(el)
|
|
137
180
|
})
|
|
@@ -169,6 +212,7 @@ function handleKeyDown(event: KeyboardEvent) {
|
|
|
169
212
|
const target = event.target as HTMLElement
|
|
170
213
|
const isKeyDownInside
|
|
171
214
|
= target.closest('[data-reka-menu-content]') === event.currentTarget
|
|
215
|
+
const isKeyDownInTextField = ['input', 'textarea'].includes(target.tagName.toLowerCase())
|
|
172
216
|
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey
|
|
173
217
|
const isCharacterKey = event.key.length === 1
|
|
174
218
|
|
|
@@ -197,7 +241,7 @@ function handleKeyDown(event: KeyboardEvent) {
|
|
|
197
241
|
// menus should not be navigated using tab key so we prevent it
|
|
198
242
|
if (event.key === 'Tab')
|
|
199
243
|
event.preventDefault()
|
|
200
|
-
if (!isModifierKey && isCharacterKey)
|
|
244
|
+
if (!isModifierKey && isCharacterKey && !isKeyDownInTextField)
|
|
201
245
|
handleTypeaheadSearch(event.key, collectionItems)
|
|
202
246
|
}
|
|
203
247
|
|
|
@@ -240,6 +284,15 @@ function handlePointerMove(event: PointerEvent) {
|
|
|
240
284
|
}
|
|
241
285
|
}
|
|
242
286
|
|
|
287
|
+
function handlePointerEnter(event: PointerEvent) {
|
|
288
|
+
if (!isMouseEvent(event))
|
|
289
|
+
return
|
|
290
|
+
// When hovering over a menu content (main or sub), focus its filter element if it exists
|
|
291
|
+
if (filterElement.value) {
|
|
292
|
+
filterElement.value.focus()
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
243
296
|
provideMenuContentContext({
|
|
244
297
|
onItemEnter: (event) => {
|
|
245
298
|
// event.preventDefault() we can't prevent pointerMove event
|
|
@@ -251,7 +304,11 @@ provideMenuContentContext({
|
|
|
251
304
|
onItemLeave: (event) => {
|
|
252
305
|
if (isPointerMovingToSubmenu(event))
|
|
253
306
|
return
|
|
254
|
-
|
|
307
|
+
|
|
308
|
+
const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')
|
|
309
|
+
if (!isInputFocused)
|
|
310
|
+
contentElement.value?.focus()
|
|
311
|
+
|
|
255
312
|
currentItemId.value = null
|
|
256
313
|
},
|
|
257
314
|
onTriggerLeave: (event) => {
|
|
@@ -262,6 +319,14 @@ provideMenuContentContext({
|
|
|
262
319
|
return false
|
|
263
320
|
},
|
|
264
321
|
searchRef,
|
|
322
|
+
highlightedElement,
|
|
323
|
+
onKeydownNavigation,
|
|
324
|
+
onKeydownEnter,
|
|
325
|
+
filterElement,
|
|
326
|
+
onFilterElementChange: (el) => {
|
|
327
|
+
filterElement.value = el
|
|
328
|
+
},
|
|
329
|
+
activeSubmenuContext,
|
|
265
330
|
pointerGraceTimerRef,
|
|
266
331
|
onPointerGraceIntentChange: (intent) => {
|
|
267
332
|
pointerGraceIntentRef.value = intent
|
|
@@ -324,6 +389,7 @@ provideMenuContentContext({
|
|
|
324
389
|
@keydown="handleKeyDown"
|
|
325
390
|
@blur="handleBlur"
|
|
326
391
|
@pointermove="handlePointerMove"
|
|
392
|
+
@pointerenter="handlePointerEnter"
|
|
327
393
|
>
|
|
328
394
|
<slot />
|
|
329
395
|
</PopperContent>
|