reka-ui 2.9.2 → 2.9.4
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/Accordion/AccordionItem.js +1 -1
- package/dist/Accordion/AccordionRoot.js +1 -1
- package/dist/AlertDialog/AlertDialogContent.js +1 -1
- package/dist/Autocomplete/AutocompleteInput.cjs +25 -8
- package/dist/Autocomplete/AutocompleteInput.cjs.map +1 -1
- package/dist/Autocomplete/AutocompleteInput.js +26 -9
- package/dist/Autocomplete/AutocompleteInput.js.map +1 -1
- package/dist/Autocomplete/AutocompleteRoot.js +1 -1
- package/dist/Avatar/AvatarRoot.js +1 -1
- package/dist/Calendar/CalendarRoot.cjs +1 -1
- package/dist/Calendar/CalendarRoot.cjs.map +1 -1
- package/dist/Calendar/CalendarRoot.js +2 -2
- package/dist/Calendar/CalendarRoot.js.map +1 -1
- package/dist/Calendar/useCalendar.cjs +2 -2
- package/dist/Calendar/useCalendar.cjs.map +1 -1
- package/dist/Calendar/useCalendar.js +2 -2
- package/dist/Calendar/useCalendar.js.map +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.js +1 -1
- package/dist/Checkbox/CheckboxRoot.js +1 -1
- package/dist/Collapsible/CollapsibleRoot.js +1 -1
- package/dist/Collection/Collection.js +2 -2
- package/dist/ColorArea/ColorAreaRoot.cjs +0 -1
- package/dist/ColorArea/ColorAreaRoot.cjs.map +1 -1
- package/dist/ColorArea/ColorAreaRoot.js +1 -2
- package/dist/ColorArea/ColorAreaRoot.js.map +1 -1
- package/dist/ColorField/ColorFieldInput.cjs +2 -1
- package/dist/ColorField/ColorFieldInput.cjs.map +1 -1
- package/dist/ColorField/ColorFieldInput.js +2 -1
- package/dist/ColorField/ColorFieldInput.js.map +1 -1
- package/dist/ColorField/ColorFieldRoot.cjs +0 -1
- package/dist/ColorField/ColorFieldRoot.cjs.map +1 -1
- package/dist/ColorField/ColorFieldRoot.js +1 -2
- package/dist/ColorField/ColorFieldRoot.js.map +1 -1
- package/dist/ColorSlider/ColorSliderRoot.js +1 -1
- package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +1 -1
- package/dist/Combobox/ComboboxGroup.js +1 -1
- package/dist/Combobox/ComboboxItem.cjs +1 -1
- package/dist/Combobox/ComboboxItem.cjs.map +1 -1
- package/dist/Combobox/ComboboxItem.js +1 -1
- package/dist/Combobox/ComboboxItem.js.map +1 -1
- package/dist/Combobox/ComboboxRoot.js +1 -1
- package/dist/ConfigProvider/ConfigProvider.js +1 -1
- package/dist/ContextMenu/ContextMenuRoot.js +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.cjs +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.js +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.js.map +1 -1
- package/dist/DateField/DateFieldRoot.cjs +9 -4
- package/dist/DateField/DateFieldRoot.cjs.map +1 -1
- package/dist/DateField/DateFieldRoot.js +11 -6
- package/dist/DateField/DateFieldRoot.js.map +1 -1
- package/dist/DatePicker/DatePickerRoot.js +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.js +1 -1
- package/dist/Dialog/DialogRoot.js +1 -1
- package/dist/DismissableLayer/DismissableLayer.js +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.js +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.js.map +1 -1
- package/dist/Editable/EditableRoot.js +1 -1
- package/dist/FocusScope/FocusScope.cjs +5 -1
- package/dist/FocusScope/FocusScope.cjs.map +1 -1
- package/dist/FocusScope/FocusScope.js +6 -2
- package/dist/FocusScope/FocusScope.js.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs +5 -0
- package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js +5 -0
- package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
- package/dist/HoverCard/HoverCardRoot.js +1 -1
- package/dist/Label/Label.cjs.map +1 -1
- package/dist/Label/Label.js.map +1 -1
- package/dist/Listbox/ListboxContent.cjs.map +1 -1
- package/dist/Listbox/ListboxContent.js.map +1 -1
- package/dist/Listbox/ListboxGroup.js +1 -1
- package/dist/Listbox/ListboxItem.cjs +1 -1
- package/dist/Listbox/ListboxItem.cjs.map +1 -1
- package/dist/Listbox/ListboxItem.js +2 -2
- package/dist/Listbox/ListboxItem.js.map +1 -1
- package/dist/Listbox/ListboxRoot.cjs +6 -5
- package/dist/Listbox/ListboxRoot.cjs.map +1 -1
- package/dist/Listbox/ListboxRoot.js +7 -6
- package/dist/Listbox/ListboxRoot.js.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.cjs +3 -3
- package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.js +3 -3
- package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
- package/dist/Menu/MenuContentImpl.js +1 -1
- package/dist/Menu/MenuGroup.js +1 -1
- package/dist/Menu/MenuItem.cjs +1 -1
- package/dist/Menu/MenuItem.cjs.map +1 -1
- package/dist/Menu/MenuItem.js +1 -1
- package/dist/Menu/MenuItem.js.map +1 -1
- package/dist/Menu/MenuItemImpl.cjs.map +1 -1
- package/dist/Menu/MenuItemImpl.js.map +1 -1
- package/dist/Menu/MenuItemIndicator.js +1 -1
- package/dist/Menu/MenuRadioGroup.js +1 -1
- package/dist/Menu/MenuRoot.js +2 -2
- package/dist/Menu/MenuSub.js +1 -1
- package/dist/Menu/MenuSubTrigger.cjs +2 -1
- package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
- package/dist/Menu/MenuSubTrigger.js +2 -1
- package/dist/Menu/MenuSubTrigger.js.map +1 -1
- package/dist/Menubar/MenubarMenu.js +1 -1
- package/dist/Menubar/MenubarRoot.js +1 -1
- package/dist/Menubar/MenubarTrigger.cjs.map +1 -1
- package/dist/Menubar/MenubarTrigger.js.map +1 -1
- package/dist/MonthPicker/MonthPickerRoot.cjs +1 -1
- package/dist/MonthPicker/MonthPickerRoot.cjs.map +1 -1
- package/dist/MonthPicker/MonthPickerRoot.js +2 -2
- package/dist/MonthPicker/MonthPickerRoot.js.map +1 -1
- package/dist/MonthRangePicker/MonthRangePickerRoot.js +1 -1
- package/dist/NavigationMenu/NavigationMenuItem.js +1 -1
- package/dist/NavigationMenu/NavigationMenuRoot.js +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.cjs +1 -0
- package/dist/NavigationMenu/NavigationMenuTrigger.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.js +1 -0
- package/dist/NavigationMenu/NavigationMenuTrigger.js.map +1 -1
- package/dist/NumberField/NumberFieldRoot.js +1 -1
- package/dist/Pagination/PaginationRoot.js +1 -1
- package/dist/PinInput/PinInputInput.cjs +12 -6
- package/dist/PinInput/PinInputInput.cjs.map +1 -1
- package/dist/PinInput/PinInputInput.js +12 -6
- package/dist/PinInput/PinInputInput.js.map +1 -1
- package/dist/PinInput/PinInputRoot.js +1 -1
- package/dist/Popover/PopoverRoot.js +1 -1
- package/dist/Popper/PopperArrow.cjs +1 -1
- package/dist/Popper/PopperArrow.cjs.map +1 -1
- package/dist/Popper/PopperArrow.js +1 -1
- package/dist/Popper/PopperArrow.js.map +1 -1
- package/dist/Popper/PopperContent.js +1 -1
- package/dist/Popper/PopperRoot.js +1 -1
- package/dist/Presence/Presence.js +1 -1
- package/dist/Primitive/Primitive.js +1 -1
- package/dist/Primitive/Slot.js +1 -1
- package/dist/Progress/ProgressRoot.js +1 -1
- package/dist/RadioGroup/RadioGroupItem.js +1 -1
- package/dist/RadioGroup/RadioGroupRoot.js +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +1 -1
- package/dist/RovingFocus/RovingFocusGroup.js +1 -1
- package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
- package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaRoot.js +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.js +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs +2 -2
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js +2 -2
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.cjs +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.js +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarVisible.js +1 -1
- package/dist/Select/SelectContentImpl.cjs +1 -0
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +2 -1
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectGroup.js +1 -1
- package/dist/Select/SelectItem.cjs.map +1 -1
- package/dist/Select/SelectItem.js +1 -1
- package/dist/Select/SelectItem.js.map +1 -1
- package/dist/Select/SelectItemAlignedPosition.cjs +1 -1
- package/dist/Select/SelectItemAlignedPosition.cjs.map +1 -1
- package/dist/Select/SelectItemAlignedPosition.js +2 -2
- package/dist/Select/SelectItemAlignedPosition.js.map +1 -1
- package/dist/Select/SelectRoot.cjs +1 -1
- package/dist/Select/SelectRoot.cjs.map +1 -1
- package/dist/Select/SelectRoot.js +2 -2
- package/dist/Select/SelectRoot.js.map +1 -1
- package/dist/Select/SelectTrigger.cjs.map +1 -1
- package/dist/Select/SelectTrigger.js.map +1 -1
- package/dist/Slider/SliderImpl.cjs.map +1 -1
- package/dist/Slider/SliderImpl.js.map +1 -1
- package/dist/Slider/SliderRoot.js +1 -1
- package/dist/Slider/utils.js +1 -1
- package/dist/Splitter/SplitterGroup.js +1 -1
- package/dist/Stepper/StepperItem.js +1 -1
- package/dist/Stepper/StepperRoot.js +1 -1
- package/dist/Switch/SwitchRoot.js +1 -1
- package/dist/Tabs/TabsRoot.js +1 -1
- package/dist/Tabs/TabsTrigger.cjs.map +1 -1
- package/dist/Tabs/TabsTrigger.js.map +1 -1
- package/dist/TagsInput/TagsInputInput.cjs +3 -0
- package/dist/TagsInput/TagsInputInput.cjs.map +1 -1
- package/dist/TagsInput/TagsInputInput.js +3 -0
- package/dist/TagsInput/TagsInputInput.js.map +1 -1
- package/dist/TagsInput/TagsInputItem.js +1 -1
- package/dist/TagsInput/TagsInputRoot.js +1 -1
- package/dist/TimeField/TimeFieldRoot.js +1 -1
- package/dist/TimeRangeField/TimeRangeFieldRoot.js +1 -1
- package/dist/Toast/ToastProvider.js +1 -1
- package/dist/Toast/ToastRootImpl.cjs +3 -3
- package/dist/Toast/ToastRootImpl.cjs.map +1 -1
- package/dist/Toast/ToastRootImpl.js +4 -4
- package/dist/Toast/ToastRootImpl.js.map +1 -1
- package/dist/Toast/ToastViewport.cjs +5 -1
- package/dist/Toast/ToastViewport.cjs.map +1 -1
- package/dist/Toast/ToastViewport.js +5 -1
- package/dist/Toast/ToastViewport.js.map +1 -1
- package/dist/ToggleGroup/ToggleGroupRoot.js +1 -1
- package/dist/Toolbar/ToolbarRoot.js +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.js +1 -1
- package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
- package/dist/Tooltip/TooltipProvider.js +1 -1
- package/dist/Tooltip/TooltipRoot.js +1 -1
- package/dist/Tree/TreeItem.cjs.map +1 -1
- package/dist/Tree/TreeItem.js.map +1 -1
- package/dist/Tree/TreeRoot.js +1 -1
- package/dist/Tree/TreeVirtualizer.cjs +1 -1
- package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
- package/dist/Tree/TreeVirtualizer.js +1 -1
- package/dist/Tree/TreeVirtualizer.js.map +1 -1
- package/dist/YearPicker/YearPickerRoot.cjs +1 -1
- package/dist/YearPicker/YearPickerRoot.cjs.map +1 -1
- package/dist/YearPicker/YearPickerRoot.js +2 -2
- package/dist/YearPicker/YearPickerRoot.js.map +1 -1
- package/dist/YearPicker/useYearPicker.cjs +3 -3
- package/dist/YearPicker/useYearPicker.cjs.map +1 -1
- package/dist/YearPicker/useYearPicker.js +3 -3
- package/dist/YearPicker/useYearPicker.js.map +1 -1
- package/dist/YearRangePicker/YearRangePickerRoot.js +1 -1
- package/dist/color/parse.cjs +10 -4
- package/dist/color/parse.cjs.map +1 -1
- package/dist/color/parse.js +10 -4
- package/dist/color/parse.js.map +1 -1
- package/dist/color/utils.cjs +5 -2
- package/dist/color/utils.cjs.map +1 -1
- package/dist/color/utils.js +5 -2
- package/dist/color/utils.js.map +1 -1
- package/dist/constant.d.cts.map +1 -1
- package/dist/date/calendar.cjs +1 -1
- package/dist/date/calendar.cjs.map +1 -1
- package/dist/date/calendar.js +1 -1
- package/dist/date/calendar.js.map +1 -1
- package/dist/date/useDateField.cjs +3 -0
- package/dist/date/useDateField.cjs.map +1 -1
- package/dist/date/useDateField.js +3 -0
- package/dist/date/useDateField.js.map +1 -1
- package/dist/date/utils.cjs +30 -0
- package/dist/date/utils.cjs.map +1 -1
- package/dist/date/utils.js +19 -1
- package/dist/date/utils.js.map +1 -1
- package/dist/date.d.cts +2 -1
- package/dist/date.d.ts +2 -1
- package/dist/index.cjs +6 -0
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +6 -0
- package/dist/index2.d.cts +5 -44
- package/dist/index2.d.cts.map +1 -1
- package/dist/index2.d.ts +5 -44
- package/dist/index2.d.ts.map +1 -1
- package/dist/index3.d.cts +400 -10813
- package/dist/index3.d.cts.map +1 -1
- package/dist/index3.d.ts +400 -10813
- package/dist/index3.d.ts.map +1 -1
- package/dist/index4.d.cts +10538 -0
- package/dist/index4.d.cts.map +1 -0
- package/dist/index4.d.ts +10538 -0
- package/dist/index4.d.ts.map +1 -0
- package/dist/internal.cjs +22 -0
- package/dist/internal.d.cts +10 -6
- package/dist/internal.d.cts.map +1 -1
- package/dist/internal.d.ts +10 -6
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +22 -0
- package/dist/namespaced/index.cjs +82 -0
- package/dist/namespaced/index.d.cts +77 -3
- package/dist/namespaced/index.d.mts +77 -3
- package/dist/namespaced/index.mjs +75 -3
- package/dist/shared/arrays.cjs +22 -0
- package/dist/shared/arrays.cjs.map +1 -1
- package/dist/shared/arrays.js +17 -1
- package/dist/shared/arrays.js.map +1 -1
- package/dist/shared/clamp.cjs +6 -0
- package/dist/shared/clamp.js +1 -1
- package/dist/shared/createContext.cjs +1 -1
- package/dist/shared/createContext.js +1 -1
- package/dist/shared/index.cjs +0 -0
- package/dist/shared/index.js +0 -0
- package/dist/shared/isValidVNodeElement.cjs +17 -0
- package/dist/shared/isValidVNodeElement.cjs.map +1 -0
- package/dist/shared/isValidVNodeElement.js +11 -0
- package/dist/shared/isValidVNodeElement.js.map +1 -0
- package/dist/shared/object.cjs +26 -0
- package/dist/shared/object.cjs.map +1 -0
- package/dist/shared/object.js +14 -0
- package/dist/shared/object.js.map +1 -0
- package/dist/shared/onFocusOutside.cjs +30 -0
- package/dist/shared/onFocusOutside.cjs.map +1 -0
- package/dist/shared/onFocusOutside.js +24 -0
- package/dist/shared/onFocusOutside.js.map +1 -0
- package/dist/shared/trap-focus.cjs +35 -0
- package/dist/shared/trap-focus.cjs.map +1 -0
- package/dist/shared/trap-focus.js +30 -0
- package/dist/shared/trap-focus.js.map +1 -0
- package/dist/shared/useForwardExpose.cjs +1 -1
- package/dist/shared/useForwardExpose.cjs.map +1 -1
- package/dist/shared/useForwardExpose.js +1 -1
- package/dist/shared/useForwardExpose.js.map +1 -1
- package/dist/shared/useForwardProps.cjs.map +1 -1
- package/dist/shared/useForwardProps.js.map +1 -1
- package/dist/shared/useForwardRef.cjs +23 -0
- package/dist/shared/useForwardRef.cjs.map +1 -0
- package/dist/shared/useForwardRef.js +17 -0
- package/dist/shared/useForwardRef.js.map +1 -0
- package/dist/shared/useGraceArea.cjs +3 -2
- package/dist/shared/useGraceArea.cjs.map +1 -1
- package/dist/shared/useGraceArea.js +3 -2
- package/dist/shared/useGraceArea.js.map +1 -1
- package/dist/shared/useKbd.cjs +17 -0
- package/dist/shared/useKbd.cjs.map +1 -1
- package/dist/shared/useKbd.js +12 -1
- package/dist/shared/useKbd.js.map +1 -1
- package/dist/shared/useSelectionBehavior.cjs +1 -1
- package/dist/shared/useSelectionBehavior.cjs.map +1 -1
- package/dist/shared/useSelectionBehavior.js +1 -1
- package/dist/shared/useSelectionBehavior.js.map +1 -1
- package/dist/shared.cjs +83 -0
- package/dist/shared.d.cts +2 -0
- package/dist/shared.d.ts +2 -0
- package/dist/shared.js +43 -0
- package/package.json +10 -6
- package/src/Autocomplete/AutocompleteInput.vue +30 -8
- package/src/Calendar/CalendarRoot.vue +1 -1
- package/src/Calendar/useCalendar.ts +2 -2
- package/src/ColorArea/ColorAreaRoot.vue +0 -4
- package/src/ColorField/ColorFieldInput.vue +3 -1
- package/src/ColorField/ColorFieldRoot.vue +0 -4
- package/src/Combobox/ComboboxItem.vue +3 -0
- package/src/ContextMenu/ContextMenuTrigger.vue +1 -4
- package/src/DateField/DateFieldRoot.vue +11 -4
- package/src/DropdownMenu/DropdownMenuTrigger.vue +2 -2
- package/src/FocusScope/FocusScope.vue +15 -1
- package/src/HoverCard/HoverCardContentImpl.vue +7 -0
- package/src/Label/Label.vue +1 -1
- package/src/Listbox/ListboxContent.vue +1 -1
- package/src/Listbox/ListboxItem.vue +2 -2
- package/src/Listbox/ListboxRoot.vue +8 -6
- package/src/Listbox/ListboxVirtualizer.vue +3 -3
- package/src/Menu/MenuItem.vue +4 -4
- package/src/Menu/MenuItemImpl.vue +2 -2
- package/src/Menu/MenuSubTrigger.vue +4 -3
- package/src/Menubar/MenubarTrigger.vue +2 -2
- package/src/MonthPicker/MonthPickerRoot.vue +1 -1
- package/src/NavigationMenu/NavigationMenuTrigger.vue +4 -2
- package/src/PinInput/PinInputInput.vue +19 -8
- package/src/Popper/PopperArrow.vue +3 -2
- package/src/RovingFocus/RovingFocusItem.vue +1 -1
- package/src/ScrollArea/ScrollAreaScrollbarGlimpse.vue +2 -8
- package/src/ScrollArea/ScrollAreaScrollbarScroll.vue +1 -4
- package/src/Select/SelectContentImpl.vue +3 -2
- package/src/Select/SelectItem.vue +1 -1
- package/src/Select/SelectItemAlignedPosition.vue +1 -1
- package/src/Select/SelectRoot.vue +1 -1
- package/src/Select/SelectTrigger.vue +1 -1
- package/src/Select/index.ts +1 -0
- package/src/Slider/SliderImpl.vue +4 -4
- package/src/Tabs/TabsTrigger.vue +1 -1
- package/src/TagsInput/TagsInputInput.vue +10 -1
- package/src/Toast/ToastRootImpl.vue +3 -3
- package/src/Toast/ToastViewport.vue +9 -5
- package/src/Tooltip/TooltipContentImpl.vue +1 -1
- package/src/Tree/TreeItem.vue +3 -3
- package/src/Tree/TreeVirtualizer.vue +1 -1
- package/src/YearPicker/YearPickerRoot.vue +1 -1
- package/src/YearPicker/useYearPicker.ts +3 -3
- package/src/date/calendar.ts +1 -1
- package/src/shared/color/parse.ts +11 -4
- package/src/shared/color/utils.ts +6 -2
- package/src/shared/date/types.ts +2 -0
- package/src/shared/date/useDateField.ts +3 -0
- package/src/shared/date/utils.ts +29 -1
- package/src/shared/object.ts +1 -1
- package/src/shared/trap-focus.ts +1 -3
- package/src/shared/useForwardExpose.ts +1 -1
- package/src/shared/useForwardProps.ts +13 -2
- package/src/shared/useGraceArea.ts +7 -5
- package/src/shared/useSelectionBehavior.ts +1 -1
|
@@ -117,7 +117,21 @@ watchEffect((cleanupFn) => {
|
|
|
117
117
|
// if the element still exist inside the container,
|
|
118
118
|
// if not then we focus to the container
|
|
119
119
|
function handleMutations(mutations: MutationRecord[]) {
|
|
120
|
-
const
|
|
120
|
+
const lastFocusedElement = lastFocusedElementRef.value
|
|
121
|
+
|
|
122
|
+
// Mutation may be triggered by something unrelated to focus, e.g. class is set on an element
|
|
123
|
+
// so we first check if we even have a previously focused element.
|
|
124
|
+
if (lastFocusedElement === null) {
|
|
125
|
+
return
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Ensure mutations removed nodes from the DOM at all.
|
|
129
|
+
const anyNodesRemoved = mutations.some(m => m.removedNodes.length > 0)
|
|
130
|
+
if (!anyNodesRemoved) {
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const isLastFocusedElementExist = container.contains(lastFocusedElement)
|
|
121
135
|
if (!isLastFocusedElementExist)
|
|
122
136
|
focus(container)
|
|
123
137
|
}
|
|
@@ -9,6 +9,7 @@ export interface HoverCardContentImplProps extends PopperContentProps {}
|
|
|
9
9
|
</script>
|
|
10
10
|
|
|
11
11
|
<script setup lang="ts">
|
|
12
|
+
import { useEventListener } from '@vueuse/core'
|
|
12
13
|
import { nextTick, onMounted, onUnmounted, ref, watchEffect } from 'vue'
|
|
13
14
|
import { DismissableLayer } from '@/DismissableLayer'
|
|
14
15
|
import { PopperContent } from '@/Popper'
|
|
@@ -68,6 +69,12 @@ onMounted(() => {
|
|
|
68
69
|
const tabbables = getTabbableNodes(contentElement.value)
|
|
69
70
|
tabbables.forEach(tabbable => tabbable.setAttribute('tabindex', '-1'))
|
|
70
71
|
}
|
|
72
|
+
|
|
73
|
+
useEventListener(window, 'scroll', (event: Event) => {
|
|
74
|
+
const target = event.target as HTMLElement
|
|
75
|
+
if (target?.contains(rootContext.triggerElement.value!))
|
|
76
|
+
rootContext.onDismiss()
|
|
77
|
+
}, { capture: true })
|
|
71
78
|
})
|
|
72
79
|
|
|
73
80
|
onUnmounted(() => {
|
package/src/Label/Label.vue
CHANGED
|
@@ -21,7 +21,7 @@ useForwardExpose()
|
|
|
21
21
|
<template>
|
|
22
22
|
<Primitive
|
|
23
23
|
v-bind="props"
|
|
24
|
-
@mousedown="(event) => {
|
|
24
|
+
@mousedown="(event: MouseEvent) => {
|
|
25
25
|
// prevent text selection when double clicking label
|
|
26
26
|
if (!event.defaultPrevented && event.detail > 1) event.preventDefault();
|
|
27
27
|
}"
|
|
@@ -29,7 +29,7 @@ const isClickFocus = refAutoReset(false, 10)
|
|
|
29
29
|
:aria-multiselectable="!!rootContext.multiple.value"
|
|
30
30
|
:data-orientation="rootContext.orientation.value"
|
|
31
31
|
@mousedown.left="isClickFocus = true"
|
|
32
|
-
@focus="(ev) => {
|
|
32
|
+
@focus="(ev: FocusEvent) => {
|
|
33
33
|
if (isClickFocus)
|
|
34
34
|
return
|
|
35
35
|
rootContext.onEnter(ev)
|
|
@@ -92,8 +92,8 @@ provideListboxItemContext({
|
|
|
92
92
|
if (rootContext.highlightedElement.value === currentElement)
|
|
93
93
|
return
|
|
94
94
|
|
|
95
|
-
if (rootContext.highlightOnHover.value
|
|
96
|
-
rootContext.changeHighlight(currentElement, false)
|
|
95
|
+
if (rootContext.highlightOnHover.value)
|
|
96
|
+
rootContext.changeHighlight(currentElement, false, false)
|
|
97
97
|
}"
|
|
98
98
|
>
|
|
99
99
|
<slot />
|
|
@@ -27,7 +27,7 @@ type ListboxRootContext<T> = {
|
|
|
27
27
|
|
|
28
28
|
onLeave: (event: Event) => void
|
|
29
29
|
onEnter: (event: Event) => void
|
|
30
|
-
changeHighlight: (el: HTMLElement, scrollIntoView?: boolean) => void
|
|
30
|
+
changeHighlight: (el: HTMLElement, scrollIntoView?: boolean, focus?: boolean) => void
|
|
31
31
|
onKeydownNavigation: (event: KeyboardEvent) => void
|
|
32
32
|
onKeydownEnter: (event: KeyboardEvent) => void
|
|
33
33
|
onKeydownTypeAhead: (event: KeyboardEvent) => void
|
|
@@ -157,12 +157,12 @@ function getCollectionItem() {
|
|
|
157
157
|
return getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
function changeHighlight(el: HTMLElement, scrollIntoView = true) {
|
|
160
|
+
function changeHighlight(el: HTMLElement, scrollIntoView = true, focus?: boolean) {
|
|
161
161
|
if (!el)
|
|
162
162
|
return
|
|
163
163
|
|
|
164
164
|
highlightedElement.value = el
|
|
165
|
-
if (focusable.value)
|
|
165
|
+
if (focus ?? focusable.value)
|
|
166
166
|
highlightedElement.value.focus()
|
|
167
167
|
if (scrollIntoView)
|
|
168
168
|
highlightedElement.value.scrollIntoView({ block: 'nearest' })
|
|
@@ -211,7 +211,9 @@ function onKeydownTypeAhead(event: KeyboardEvent) {
|
|
|
211
211
|
const values = collection.map(i => i.value)
|
|
212
212
|
modelValue.value = [...values]
|
|
213
213
|
event.preventDefault()
|
|
214
|
-
|
|
214
|
+
const lastItem = collection.at(-1)
|
|
215
|
+
if (lastItem)
|
|
216
|
+
changeHighlight(lastItem.ref)
|
|
215
217
|
}
|
|
216
218
|
else if (!isMetaKey) {
|
|
217
219
|
const el = handleTypeaheadSearch(event.key, getItems())
|
|
@@ -309,9 +311,9 @@ function handleMultipleReplace(event: KeyboardEvent, targetEl: HTMLElement) {
|
|
|
309
311
|
let lastValue = collection.find(i => i.ref === targetEl)?.value
|
|
310
312
|
|
|
311
313
|
if (event.key === kbd.END)
|
|
312
|
-
lastValue = collection
|
|
314
|
+
lastValue = collection.at(-1)?.value
|
|
313
315
|
else if (event.key === kbd.HOME)
|
|
314
|
-
lastValue = collection[0]
|
|
316
|
+
lastValue = collection[0]?.value
|
|
315
317
|
|
|
316
318
|
if (!lastValue || !firstValue.value)
|
|
317
319
|
return
|
|
@@ -83,7 +83,7 @@ const virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map(
|
|
|
83
83
|
})[0]
|
|
84
84
|
|
|
85
85
|
const targetNode = defaultNode.type === Fragment && Array.isArray(defaultNode.children)
|
|
86
|
-
? defaultNode.children
|
|
86
|
+
? defaultNode.children.find(child => typeof (child as VNode).type !== 'symbol') as VNode
|
|
87
87
|
: defaultNode
|
|
88
88
|
|
|
89
89
|
return {
|
|
@@ -178,7 +178,7 @@ function handleMultipleReplace(event: Event, intent: 'first' | 'last' | 'prev' |
|
|
|
178
178
|
break
|
|
179
179
|
}
|
|
180
180
|
case 'last': {
|
|
181
|
-
value = findValuesBetween(props.options, rootContext.firstValue.value as T, props.options
|
|
181
|
+
value = findValuesBetween(props.options, rootContext.firstValue.value as T, props.options.at(-1)!)
|
|
182
182
|
break
|
|
183
183
|
}
|
|
184
184
|
}
|
|
@@ -211,7 +211,7 @@ rootContext.virtualKeydownHook.on((event) => {
|
|
|
211
211
|
virtualizer.value.scrollToIndex(index)
|
|
212
212
|
requestAnimationFrame(() => {
|
|
213
213
|
const items = getItems()
|
|
214
|
-
const item = intent === 'first' ? items[0] : items
|
|
214
|
+
const item = intent === 'first' ? items[0] : items.at(-1)
|
|
215
215
|
if (item)
|
|
216
216
|
rootContext.changeHighlight(item.ref)
|
|
217
217
|
})
|
package/src/Menu/MenuItem.vue
CHANGED
|
@@ -57,21 +57,21 @@ async function handleSelect() {
|
|
|
57
57
|
}
|
|
58
58
|
"
|
|
59
59
|
@pointerup="
|
|
60
|
-
async (event) => {
|
|
60
|
+
async (event: PointerEvent) => {
|
|
61
61
|
await nextTick();
|
|
62
62
|
if (event.defaultPrevented) return;
|
|
63
63
|
// Pointer down can move to a different menu item which should activate it on pointer up.
|
|
64
64
|
// We dispatch a click for selection to allow composition with click based triggers and to
|
|
65
65
|
// prevent Firefox from getting stuck in text selection mode when the menu closes.
|
|
66
|
-
if (!isPointerDownRef) event.currentTarget?.click();
|
|
66
|
+
if (!isPointerDownRef) (event.currentTarget as HTMLElement)?.click();
|
|
67
67
|
}
|
|
68
68
|
"
|
|
69
69
|
@keydown="
|
|
70
|
-
async (event) => {
|
|
70
|
+
async (event: KeyboardEvent) => {
|
|
71
71
|
const isTypingAhead = contentContext.searchRef.value !== '';
|
|
72
72
|
if (disabled || (isTypingAhead && event.key === ' ')) return;
|
|
73
73
|
if (SELECTION_KEYS.includes(event.key)) {
|
|
74
|
-
event.currentTarget
|
|
74
|
+
(event.currentTarget as HTMLElement)?.click();
|
|
75
75
|
/**
|
|
76
76
|
* We prevent default browser behaviour for selection keys as they should trigger
|
|
77
77
|
* a selection only:
|
|
@@ -79,7 +79,7 @@ async function handlePointerLeave(event: PointerEvent) {
|
|
|
79
79
|
@pointermove="handlePointerMove"
|
|
80
80
|
@pointerleave="handlePointerLeave"
|
|
81
81
|
@focus="
|
|
82
|
-
async (event) => {
|
|
82
|
+
async (event: FocusEvent) => {
|
|
83
83
|
await nextTick();
|
|
84
84
|
if (event.defaultPrevented || disabled) return;
|
|
85
85
|
isFocused = true;
|
|
@@ -87,7 +87,7 @@ async function handlePointerLeave(event: PointerEvent) {
|
|
|
87
87
|
}
|
|
88
88
|
"
|
|
89
89
|
@blur="
|
|
90
|
-
async (event) => {
|
|
90
|
+
async (event: FocusEvent) => {
|
|
91
91
|
await nextTick();
|
|
92
92
|
if (event.defaultPrevented) return;
|
|
93
93
|
isFocused = false;
|
|
@@ -133,7 +133,8 @@ async function handleKeyDown(event: KeyboardEvent) {
|
|
|
133
133
|
v-bind="props"
|
|
134
134
|
:id="subContext.triggerId"
|
|
135
135
|
:ref="
|
|
136
|
-
(vnode: ComponentPublicInstance) => {
|
|
136
|
+
(vnode: Element | ComponentPublicInstance | null) => {
|
|
137
|
+
if (!vnode) return undefined
|
|
137
138
|
// @ts-ignore
|
|
138
139
|
subContext?.onTriggerChange(vnode?.$el);
|
|
139
140
|
return undefined
|
|
@@ -144,14 +145,14 @@ async function handleKeyDown(event: KeyboardEvent) {
|
|
|
144
145
|
:aria-controls="subContext.contentId"
|
|
145
146
|
:data-state="getOpenState(menuContext.open.value)"
|
|
146
147
|
@click="
|
|
147
|
-
async (event) => {
|
|
148
|
+
async (event: MouseEvent) => {
|
|
148
149
|
if (props.disabled || event.defaultPrevented) return;
|
|
149
150
|
/**
|
|
150
151
|
* We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
|
|
151
152
|
* and we rely heavily on `onFocusOutside` for submenus to close when switching
|
|
152
153
|
* between separate submenus.
|
|
153
154
|
*/
|
|
154
|
-
event.currentTarget
|
|
155
|
+
(event.currentTarget as HTMLElement)?.focus();
|
|
155
156
|
if (!menuContext.open.value) menuContext.onOpenChange(true);
|
|
156
157
|
}
|
|
157
158
|
"
|
|
@@ -60,7 +60,7 @@ onMounted(() => {
|
|
|
60
60
|
:data-disabled="disabled ? '' : undefined"
|
|
61
61
|
:disabled="disabled"
|
|
62
62
|
:data-value="menuContext.value"
|
|
63
|
-
@pointerdown="(event) => {
|
|
63
|
+
@pointerdown="(event: PointerEvent) => {
|
|
64
64
|
// only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
|
|
65
65
|
// but not when the control key is pressed (avoiding MacOS right click)
|
|
66
66
|
if (!disabled && event.button === 0 && event.ctrlKey === false) {
|
|
@@ -77,7 +77,7 @@ onMounted(() => {
|
|
|
77
77
|
triggerElement?.focus()
|
|
78
78
|
}
|
|
79
79
|
}"
|
|
80
|
-
@keydown.enter.space.arrow-down="(event) => {
|
|
80
|
+
@keydown.enter.space.arrow-down="(event: KeyboardEvent) => {
|
|
81
81
|
if (disabled) return;
|
|
82
82
|
if (['Enter', ' '].includes(event.key)) rootContext.onMenuToggle(menuContext.value);
|
|
83
83
|
if (event.key === 'ArrowDown') rootContext.onMenuOpen(menuContext.value);
|
|
@@ -196,7 +196,7 @@ const { isInvalid, isMonthSelected } = useMonthPickerState({
|
|
|
196
196
|
|
|
197
197
|
watch(modelValue, (_modelValue) => {
|
|
198
198
|
if (Array.isArray(_modelValue) && _modelValue.length) {
|
|
199
|
-
const lastValue = _modelValue
|
|
199
|
+
const lastValue = _modelValue.at(-1)
|
|
200
200
|
if (lastValue && !isSameYearMonth(placeholder.value, lastValue))
|
|
201
201
|
onPlaceholderChange(lastValue)
|
|
202
202
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type {
|
|
2
|
+
import type { ComponentPublicInstance } from 'vue'
|
|
3
3
|
import type { PrimitiveProps } from '@/Primitive'
|
|
4
4
|
import { useCollection } from '@/Collection'
|
|
5
5
|
import { useForwardExpose } from '@/shared'
|
|
@@ -119,7 +119,9 @@ function handleKeydown(ev: KeyboardEvent) {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
function setFocusProxyRef(node:
|
|
122
|
+
function setFocusProxyRef(node: Element | ComponentPublicInstance | null) {
|
|
123
|
+
if (!node)
|
|
124
|
+
return undefined
|
|
123
125
|
// @ts-expect-error unrefElement expect MaybeRef, but also support Vnode
|
|
124
126
|
itemContext.focusProxyRef.value = unrefElement(node)
|
|
125
127
|
return undefined
|
|
@@ -21,13 +21,16 @@ const props = withDefaults(defineProps<PinInputInputProps>(), {
|
|
|
21
21
|
})
|
|
22
22
|
|
|
23
23
|
const context = injectPinInputRootContext()
|
|
24
|
-
const inputElements = computed(() =>
|
|
24
|
+
const inputElements = computed(() => [...context.inputElements!.value])
|
|
25
25
|
const currentValue = computed(() => context.currentModelValue.value[props.index])
|
|
26
26
|
|
|
27
27
|
const disabled = computed(() => props.disabled || context.disabled.value)
|
|
28
28
|
const isOtpMode = computed(() => context.otp.value)
|
|
29
29
|
const isPasswordMode = computed(() => context.mask.value)
|
|
30
30
|
|
|
31
|
+
const NUMBER_REG = /^\d*$/
|
|
32
|
+
const NON_NUMBER_REG = /\D/g
|
|
33
|
+
|
|
31
34
|
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
32
35
|
function handleInput(event: InputEvent) {
|
|
33
36
|
const target = event.target as HTMLInputElement
|
|
@@ -37,8 +40,8 @@ function handleInput(event: InputEvent) {
|
|
|
37
40
|
return
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
if (context.isNumericMode.value &&
|
|
41
|
-
target.value = target.value.replace(
|
|
43
|
+
if (context.isNumericMode.value && !NUMBER_REG.test(target.value)) {
|
|
44
|
+
target.value = target.value.replace(NON_NUMBER_REG, '')
|
|
42
45
|
return
|
|
43
46
|
}
|
|
44
47
|
|
|
@@ -127,7 +130,10 @@ function handlePaste(event: ClipboardEvent) {
|
|
|
127
130
|
if (!clipboardData)
|
|
128
131
|
return
|
|
129
132
|
|
|
130
|
-
const
|
|
133
|
+
const rawValues = clipboardData.getData('text')
|
|
134
|
+
const values = context.isNumericMode.value
|
|
135
|
+
? rawValues.replace(NON_NUMBER_REG, '')
|
|
136
|
+
: rawValues
|
|
131
137
|
handleMultipleCharacter(values)
|
|
132
138
|
}
|
|
133
139
|
|
|
@@ -138,10 +144,15 @@ function handleMultipleCharacter(values: string) {
|
|
|
138
144
|
for (let i = initialIndex; i < lastIndex; i++) {
|
|
139
145
|
const input = inputElements.value[i]
|
|
140
146
|
const value = values[i - initialIndex]
|
|
141
|
-
if (context.isNumericMode.value
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
if (context.isNumericMode.value) {
|
|
148
|
+
const num = Number.parseInt(value)
|
|
149
|
+
if (Number.isNaN(num))
|
|
150
|
+
continue
|
|
151
|
+
tempModelValue[i] = num
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
tempModelValue[i] = value
|
|
155
|
+
}
|
|
145
156
|
input.focus()
|
|
146
157
|
}
|
|
147
158
|
context.modelValue.value = tempModelValue
|
|
@@ -14,6 +14,7 @@ export interface PopperArrowProps extends ArrowProps, PrimitiveProps {}
|
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
16
|
<script setup lang="ts">
|
|
17
|
+
import type { ComponentPublicInstance } from 'vue'
|
|
17
18
|
import { computed } from 'vue'
|
|
18
19
|
import { useForwardExpose } from '@/shared'
|
|
19
20
|
import Arrow from '@/shared/component/Arrow.vue'
|
|
@@ -36,8 +37,8 @@ const baseSide = computed(() => OPPOSITE_SIDE[contentContext.placedSide.value])
|
|
|
36
37
|
|
|
37
38
|
<template>
|
|
38
39
|
<span
|
|
39
|
-
:ref="(el:
|
|
40
|
-
contentContext.onArrowChange(el)
|
|
40
|
+
:ref="(el: Element | ComponentPublicInstance | null) => {
|
|
41
|
+
contentContext.onArrowChange((el as HTMLElement) ?? undefined)
|
|
41
42
|
return undefined
|
|
42
43
|
}"
|
|
43
44
|
:style="{
|
|
@@ -97,7 +97,7 @@ function handleKeydown(event: KeyboardEvent) {
|
|
|
97
97
|
:as="as"
|
|
98
98
|
:as-child="asChild"
|
|
99
99
|
@mousedown="
|
|
100
|
-
(event) => {
|
|
100
|
+
(event: MouseEvent) => {
|
|
101
101
|
// We prevent focusing non-focusable items on `mousedown`.
|
|
102
102
|
// Even though the item has tabIndex={-1}, that only means take it out of the tab order.
|
|
103
103
|
if (!focusable) event.preventDefault();
|
|
@@ -65,10 +65,7 @@ const debounceScrollEnd = useDebounceFn(() => dispatch('SCROLL_END'), 100)
|
|
|
65
65
|
|
|
66
66
|
watchEffect((onCleanup) => {
|
|
67
67
|
if (state.value === 'glimpse') {
|
|
68
|
-
const timeId = window.setTimeout(
|
|
69
|
-
() => dispatch('HIDE'),
|
|
70
|
-
rootContext.scrollHideDelay.value,
|
|
71
|
-
)
|
|
68
|
+
const timeId = window.setTimeout(dispatch, rootContext.scrollHideDelay.value, 'HIDE')
|
|
72
69
|
|
|
73
70
|
onCleanup(() => {
|
|
74
71
|
window.clearTimeout(timeId)
|
|
@@ -78,10 +75,7 @@ watchEffect((onCleanup) => {
|
|
|
78
75
|
|
|
79
76
|
watchEffect((onCleanup) => {
|
|
80
77
|
if (state.value === 'idle') {
|
|
81
|
-
const timeId = window.setTimeout(
|
|
82
|
-
() => dispatch('HIDE'),
|
|
83
|
-
rootContext.scrollHideDelay.value,
|
|
84
|
-
)
|
|
78
|
+
const timeId = window.setTimeout(dispatch, rootContext.scrollHideDelay.value, 'HIDE')
|
|
85
79
|
|
|
86
80
|
onCleanup(() => {
|
|
87
81
|
window.clearTimeout(timeId)
|
|
@@ -44,10 +44,7 @@ const visible = computed(() => state.value !== 'hidden')
|
|
|
44
44
|
|
|
45
45
|
watchEffect((onCleanup) => {
|
|
46
46
|
if (state.value === 'idle') {
|
|
47
|
-
const timeId = window.setTimeout(
|
|
48
|
-
() => dispatch('HIDE'),
|
|
49
|
-
rootContext.scrollHideDelay.value,
|
|
50
|
-
)
|
|
47
|
+
const timeId = window.setTimeout(dispatch, rootContext.scrollHideDelay.value, 'HIDE')
|
|
51
48
|
|
|
52
49
|
onCleanup(() => {
|
|
53
50
|
window.clearTimeout(timeId)
|
|
@@ -301,8 +301,9 @@ provideSelectContentContext({
|
|
|
301
301
|
v-bind="{ ...$attrs, ...forwardedProps }"
|
|
302
302
|
:id="rootContext.contentId"
|
|
303
303
|
:ref="
|
|
304
|
-
(vnode: ComponentPublicInstance) => {
|
|
305
|
-
|
|
304
|
+
(vnode: Element | ComponentPublicInstance | null) => {
|
|
305
|
+
if (!vnode) return undefined
|
|
306
|
+
const el = unrefElement(vnode as ComponentPublicInstance) as HTMLElement | undefined
|
|
306
307
|
// special case for PopperContent
|
|
307
308
|
if (el?.hasAttribute('data-reka-popper-content-wrapper'))
|
|
308
309
|
content = el.firstElementChild as HTMLElement
|
|
@@ -169,7 +169,7 @@ provideSelectItemContext({
|
|
|
169
169
|
@focus="isFocused = true"
|
|
170
170
|
@blur="isFocused = false"
|
|
171
171
|
@pointerup="handleSelectCustomEvent"
|
|
172
|
-
@pointerdown="(event) => {
|
|
172
|
+
@pointerdown="(event: PointerEvent) => {
|
|
173
173
|
(event.currentTarget as HTMLElement).focus({ preventScroll: true })
|
|
174
174
|
}"
|
|
175
175
|
@touchend.prevent.stop
|
|
@@ -145,7 +145,7 @@ function position() {
|
|
|
145
145
|
= contentTopToItemMiddle <= topEdgeToTriggerMiddle
|
|
146
146
|
|
|
147
147
|
if (willAlignWithoutTopOverflow) {
|
|
148
|
-
const isLastItem = selectedItem.value === items
|
|
148
|
+
const isLastItem = selectedItem.value === items.at(-1)
|
|
149
149
|
contentWrapperElement.value.style.bottom = `${0}px`
|
|
150
150
|
const viewportOffsetBottom
|
|
151
151
|
= contentElement.value.clientHeight
|
|
@@ -111,7 +111,7 @@ function handlePointerOpen(event: PointerEvent) {
|
|
|
111
111
|
}
|
|
112
112
|
"
|
|
113
113
|
@keydown="
|
|
114
|
-
(event) => {
|
|
114
|
+
(event: KeyboardEvent) => {
|
|
115
115
|
const isTypingAhead = search !== '';
|
|
116
116
|
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
|
|
117
117
|
if (!isModifierKey && event.key.length === 1)
|
package/src/Select/index.ts
CHANGED
|
@@ -29,7 +29,7 @@ const rootContext = injectSliderRootContext()
|
|
|
29
29
|
<Primitive
|
|
30
30
|
data-slider-impl
|
|
31
31
|
v-bind="props"
|
|
32
|
-
@keydown="(event) => {
|
|
32
|
+
@keydown="(event: KeyboardEvent) => {
|
|
33
33
|
if (event.key === 'Home') {
|
|
34
34
|
emits('homeKeyDown', event)
|
|
35
35
|
// Prevent scrolling to page start
|
|
@@ -46,7 +46,7 @@ const rootContext = injectSliderRootContext()
|
|
|
46
46
|
event.preventDefault();
|
|
47
47
|
}
|
|
48
48
|
}"
|
|
49
|
-
@pointerdown="(event) => {
|
|
49
|
+
@pointerdown="(event: PointerEvent) => {
|
|
50
50
|
const target = event.target as HTMLElement;
|
|
51
51
|
target.setPointerCapture(event.pointerId);
|
|
52
52
|
// Prevent browser focus behaviour because we focus a thumb manually when values change.
|
|
@@ -60,11 +60,11 @@ const rootContext = injectSliderRootContext()
|
|
|
60
60
|
emits('slideStart', event)
|
|
61
61
|
}
|
|
62
62
|
}"
|
|
63
|
-
@pointermove="(event) => {
|
|
63
|
+
@pointermove="(event: PointerEvent) => {
|
|
64
64
|
const target = event.target as HTMLElement;
|
|
65
65
|
if (target.hasPointerCapture(event.pointerId)) emits('slideMove', event);
|
|
66
66
|
}"
|
|
67
|
-
@pointerup="(event) => {
|
|
67
|
+
@pointerup="(event: PointerEvent) => {
|
|
68
68
|
const target = event.target as HTMLElement;
|
|
69
69
|
if (target.hasPointerCapture(event.pointerId)) {
|
|
70
70
|
target.releasePointerCapture(event.pointerId);
|
package/src/Tabs/TabsTrigger.vue
CHANGED
|
@@ -51,7 +51,7 @@ const isSelected = computed(() => props.value === rootContext.modelValue.value)
|
|
|
51
51
|
:disabled="disabled"
|
|
52
52
|
:data-disabled="disabled ? '' : undefined"
|
|
53
53
|
:data-orientation="rootContext.orientation.value"
|
|
54
|
-
@mousedown.left="(event) => {
|
|
54
|
+
@mousedown.left="(event: MouseEvent) => {
|
|
55
55
|
// only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
|
|
56
56
|
// but not when the control key is pressed (avoiding MacOS right click)
|
|
57
57
|
if (!disabled && event.ctrlKey === false) {
|
|
@@ -24,13 +24,22 @@ const props = withDefaults(defineProps<TagsInputInputProps>(), {
|
|
|
24
24
|
const context = injectTagsInputRootContext()
|
|
25
25
|
const { forwardRef, currentElement } = useForwardExpose()
|
|
26
26
|
|
|
27
|
-
function handleBlur(event:
|
|
27
|
+
function handleBlur(event: FocusEvent) {
|
|
28
28
|
context.selectedElement.value = undefined
|
|
29
29
|
|
|
30
30
|
if (!context.addOnBlur.value)
|
|
31
31
|
return
|
|
32
32
|
|
|
33
33
|
const target = event.target as HTMLInputElement
|
|
34
|
+
|
|
35
|
+
// If the blur is caused by clicking an option within the content,
|
|
36
|
+
// we don't trigger the `addOnBlur` action,
|
|
37
|
+
// because the clicked option should be added instead of the input's current value.
|
|
38
|
+
const relatedTarget = event.relatedTarget as HTMLElement | null
|
|
39
|
+
const controlledId = target.getAttribute('aria-controls')
|
|
40
|
+
if (controlledId && relatedTarget?.closest(`#${CSS.escape(controlledId)}`))
|
|
41
|
+
return
|
|
42
|
+
|
|
34
43
|
if (!target.value)
|
|
35
44
|
return
|
|
36
45
|
|
|
@@ -82,7 +82,7 @@ const closeTimerRef = ref(0)
|
|
|
82
82
|
const remainingTime = ref(duration.value)
|
|
83
83
|
|
|
84
84
|
const remainingRaf = useRafFn(() => {
|
|
85
|
-
const elapsedTime =
|
|
85
|
+
const elapsedTime = Date.now() - closeTimerStartTimeRef.value
|
|
86
86
|
remainingTime.value = Math.max(closeTimerRemainingTimeRef.value - elapsedTime, 0)
|
|
87
87
|
}, { fpsLimit: 60 })
|
|
88
88
|
|
|
@@ -95,7 +95,7 @@ function startTimer(duration: number) {
|
|
|
95
95
|
if (!isClient)
|
|
96
96
|
return
|
|
97
97
|
window.clearTimeout(closeTimerRef.value)
|
|
98
|
-
closeTimerStartTimeRef.value =
|
|
98
|
+
closeTimerStartTimeRef.value = Date.now()
|
|
99
99
|
closeTimerRef.value = window.setTimeout(handleClose, duration)
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -133,7 +133,7 @@ watchEffect((cleanupFn) => {
|
|
|
133
133
|
emits('resume')
|
|
134
134
|
}
|
|
135
135
|
const handlePause = () => {
|
|
136
|
-
const elapsedTime =
|
|
136
|
+
const elapsedTime = Date.now() - closeTimerStartTimeRef.value
|
|
137
137
|
closeTimerRemainingTimeRef.value = closeTimerRemainingTimeRef.value - elapsedTime
|
|
138
138
|
window.clearTimeout(closeTimerRef.value)
|
|
139
139
|
remainingRaf.pause()
|
|
@@ -48,7 +48,9 @@ const hasToasts = computed(() => providerContext.toastCount.value > 0)
|
|
|
48
48
|
const headFocusProxyRef = ref<HTMLElement>()
|
|
49
49
|
const tailFocusProxyRef = ref<HTMLElement>()
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const KEY_RE = /Key/g
|
|
52
|
+
const DIGIT_RE = /Digit/g
|
|
53
|
+
const hotkeyMessage = computed(() => hotkey.value.join('+').replace(KEY_RE, '').replace(DIGIT_RE, ''))
|
|
52
54
|
|
|
53
55
|
onKeyStroke(hotkey.value, () => {
|
|
54
56
|
currentElement.value.focus()
|
|
@@ -172,8 +174,9 @@ function getSortedTabbableCandidates({ tabbingDirection }: { tabbingDirection: '
|
|
|
172
174
|
>
|
|
173
175
|
<FocusProxy
|
|
174
176
|
v-if="hasToasts"
|
|
175
|
-
:ref="(node: ComponentPublicInstance) => {
|
|
176
|
-
|
|
177
|
+
:ref="(node: Element | ComponentPublicInstance | null) => {
|
|
178
|
+
if (!node) return undefined
|
|
179
|
+
headFocusProxyRef = unrefElement(node as ComponentPublicInstance) as HTMLElement
|
|
177
180
|
return undefined
|
|
178
181
|
}"
|
|
179
182
|
@focus-from-outside-viewport="() => {
|
|
@@ -196,8 +199,9 @@ function getSortedTabbableCandidates({ tabbingDirection }: { tabbingDirection: '
|
|
|
196
199
|
</CollectionSlot>
|
|
197
200
|
<FocusProxy
|
|
198
201
|
v-if="hasToasts"
|
|
199
|
-
:ref="(node: ComponentPublicInstance) => {
|
|
200
|
-
|
|
202
|
+
:ref="(node: Element | ComponentPublicInstance | null) => {
|
|
203
|
+
if (!node) return undefined
|
|
204
|
+
tailFocusProxyRef = unrefElement(node as ComponentPublicInstance) as HTMLElement
|
|
201
205
|
return undefined
|
|
202
206
|
}"
|
|
203
207
|
@focus-from-outside-viewport="() => {
|
|
@@ -85,7 +85,7 @@ onMounted(() => {
|
|
|
85
85
|
const target = event.target as HTMLElement
|
|
86
86
|
if (target?.contains(rootContext.trigger.value!))
|
|
87
87
|
rootContext.onClose()
|
|
88
|
-
})
|
|
88
|
+
}, { capture: true })
|
|
89
89
|
// Close this tooltip if another one opens
|
|
90
90
|
useEventListener(window, TOOLTIP_OPEN, rootContext.onClose)
|
|
91
91
|
})
|
package/src/Tree/TreeItem.vue
CHANGED
|
@@ -178,9 +178,9 @@ defineExpose({
|
|
|
178
178
|
:data-selected="isSelected ? '' : undefined"
|
|
179
179
|
:data-expanded="isExpanded ? '' : undefined"
|
|
180
180
|
@keydown.enter.space.self.prevent="handleSelectCustomEvent"
|
|
181
|
-
@keydown.right.prevent="(ev) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)"
|
|
182
|
-
@keydown.left.prevent="(ev) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)"
|
|
183
|
-
@click.stop="(ev) => {
|
|
181
|
+
@keydown.right.prevent="(ev: KeyboardEvent) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)"
|
|
182
|
+
@keydown.left.prevent="(ev: KeyboardEvent) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)"
|
|
183
|
+
@click.stop="(ev: PointerEvent) => {
|
|
184
184
|
handleSelectCustomEvent(ev)
|
|
185
185
|
handleToggleCustomEvent(ev)
|
|
186
186
|
}"
|
|
@@ -134,7 +134,7 @@ rootContext.virtualKeydownHook.on((event) => {
|
|
|
134
134
|
virtualizer.value.scrollToIndex(index)
|
|
135
135
|
requestAnimationFrame(() => {
|
|
136
136
|
const items = getItems()
|
|
137
|
-
const item = intent === 'first' ? items[0] : items
|
|
137
|
+
const item = intent === 'first' ? items[0] : items.at(-1)!
|
|
138
138
|
item.ref.focus()
|
|
139
139
|
})
|
|
140
140
|
}
|
|
@@ -202,7 +202,7 @@ const { isInvalid, isYearSelected } = useYearPickerState({
|
|
|
202
202
|
|
|
203
203
|
watch(modelValue, (_modelValue) => {
|
|
204
204
|
if (Array.isArray(_modelValue) && _modelValue.length) {
|
|
205
|
-
const lastValue = _modelValue
|
|
205
|
+
const lastValue = _modelValue.at(-1)
|
|
206
206
|
if (lastValue && !isSameYear(placeholder.value, lastValue))
|
|
207
207
|
onPlaceholderChange(lastValue)
|
|
208
208
|
}
|