reka-ui 2.7.0 → 2.8.2
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/Avatar/AvatarImage.cjs +4 -2
- package/dist/Avatar/AvatarImage.cjs.map +1 -1
- package/dist/Avatar/AvatarImage.js +4 -2
- package/dist/Avatar/AvatarImage.js.map +1 -1
- package/dist/Calendar/CalendarCellTrigger.cjs +4 -1
- package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
- package/dist/Calendar/CalendarCellTrigger.js +4 -1
- package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
- package/dist/Calendar/CalendarRoot.cjs +12 -7
- package/dist/Calendar/CalendarRoot.cjs.map +1 -1
- package/dist/Calendar/CalendarRoot.js +13 -8
- package/dist/Calendar/CalendarRoot.js.map +1 -1
- package/dist/Calendar/useCalendar.cjs +32 -2
- package/dist/Calendar/useCalendar.cjs.map +1 -1
- package/dist/Calendar/useCalendar.js +33 -3
- package/dist/Calendar/useCalendar.js.map +1 -1
- package/dist/Collection/Collection.cjs +6 -2
- package/dist/Collection/Collection.cjs.map +1 -1
- package/dist/Collection/Collection.js +6 -2
- package/dist/Collection/Collection.js.map +1 -1
- 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 +47 -33
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +48 -34
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.cjs +4 -0
- package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.js +4 -0
- package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
- package/dist/ContextMenu/ContextMenuRadioGroup.cjs +1 -1
- package/dist/ContextMenu/ContextMenuRadioGroup.js +1 -1
- package/dist/ContextMenu/ContextMenuRadioItem.cjs +1 -1
- package/dist/ContextMenu/ContextMenuRadioItem.js +1 -1
- package/dist/ContextMenu/ContextMenuSubContent.cjs +4 -0
- package/dist/ContextMenu/ContextMenuSubContent.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuSubContent.js +4 -0
- package/dist/ContextMenu/ContextMenuSubContent.js.map +1 -1
- package/dist/DatePicker/DatePickerContent.cjs +4 -0
- package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
- package/dist/DatePicker/DatePickerContent.js +4 -0
- package/dist/DatePicker/DatePickerContent.js.map +1 -1
- package/dist/DatePicker/DatePickerRoot.cjs +10 -8
- package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
- package/dist/DatePicker/DatePickerRoot.js +10 -8
- package/dist/DatePicker/DatePickerRoot.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.cjs +4 -0
- package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.js +4 -0
- package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.cjs +10 -8
- package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.js +11 -9
- package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.cjs +4 -0
- package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.js +4 -0
- package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +1 -1
- package/dist/DropdownMenu/DropdownMenuSubContent.cjs +4 -0
- package/dist/DropdownMenu/DropdownMenuSubContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubContent.js +4 -0
- package/dist/DropdownMenu/DropdownMenuSubContent.js.map +1 -1
- package/dist/Editable/EditableInput.cjs +1 -1
- package/dist/Editable/EditableInput.cjs.map +1 -1
- package/dist/Editable/EditableInput.js +1 -1
- package/dist/Editable/EditableInput.js.map +1 -1
- package/dist/FocusScope/FocusScope.cjs +1 -1
- package/dist/FocusScope/FocusScope.cjs.map +1 -1
- package/dist/FocusScope/FocusScope.js +2 -2
- package/dist/FocusScope/FocusScope.js.map +1 -1
- package/dist/FocusScope/stack.cjs +0 -9
- package/dist/FocusScope/stack.cjs.map +1 -1
- package/dist/FocusScope/stack.js +1 -4
- package/dist/FocusScope/stack.js.map +1 -1
- package/dist/HoverCard/HoverCardContent.cjs +4 -0
- package/dist/HoverCard/HoverCardContent.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContent.js +4 -0
- package/dist/HoverCard/HoverCardContent.js.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs +4 -0
- package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js +4 -0
- package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
- package/dist/Listbox/ListboxRoot.cjs.map +1 -1
- package/dist/Listbox/ListboxRoot.js.map +1 -1
- package/dist/Menu/MenuContent.cjs +4 -0
- package/dist/Menu/MenuContent.cjs.map +1 -1
- package/dist/Menu/MenuContent.js +4 -0
- package/dist/Menu/MenuContent.js.map +1 -1
- package/dist/Menu/MenuContentImpl.cjs +4 -0
- package/dist/Menu/MenuContentImpl.cjs.map +1 -1
- package/dist/Menu/MenuContentImpl.js +4 -0
- package/dist/Menu/MenuContentImpl.js.map +1 -1
- package/dist/Menu/MenuRadioGroup.cjs +1 -1
- package/dist/Menu/MenuRadioGroup.cjs.map +1 -1
- package/dist/Menu/MenuRadioGroup.js +1 -1
- package/dist/Menu/MenuRadioGroup.js.map +1 -1
- package/dist/Menu/MenuRadioItem.cjs +1 -1
- package/dist/Menu/MenuRadioItem.cjs.map +1 -1
- package/dist/Menu/MenuRadioItem.js +1 -1
- package/dist/Menu/MenuRadioItem.js.map +1 -1
- package/dist/Menu/MenuRootContentModal.cjs +4 -0
- package/dist/Menu/MenuRootContentModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentModal.js +4 -0
- package/dist/Menu/MenuRootContentModal.js.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.cjs +4 -0
- package/dist/Menu/MenuRootContentNonModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.js +4 -0
- package/dist/Menu/MenuRootContentNonModal.js.map +1 -1
- package/dist/Menu/MenuSubContent.cjs +4 -0
- package/dist/Menu/MenuSubContent.cjs.map +1 -1
- package/dist/Menu/MenuSubContent.js +4 -0
- package/dist/Menu/MenuSubContent.js.map +1 -1
- package/dist/Menubar/MenubarContent.cjs +4 -0
- package/dist/Menubar/MenubarContent.cjs.map +1 -1
- package/dist/Menubar/MenubarContent.js +4 -0
- package/dist/Menubar/MenubarContent.js.map +1 -1
- package/dist/Menubar/MenubarRadioGroup.cjs +1 -1
- package/dist/Menubar/MenubarRadioGroup.js +1 -1
- package/dist/Menubar/MenubarRadioItem.cjs +1 -1
- package/dist/Menubar/MenubarRadioItem.js +1 -1
- package/dist/Menubar/MenubarSubContent.cjs +4 -0
- package/dist/Menubar/MenubarSubContent.cjs.map +1 -1
- package/dist/Menubar/MenubarSubContent.js +4 -0
- package/dist/Menubar/MenubarSubContent.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.js +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.js +1 -1
- package/dist/NavigationMenu/NavigationMenuItem.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuItem.js +1 -1
- package/dist/NavigationMenu/NavigationMenuRoot.cjs +7 -5
- package/dist/NavigationMenu/NavigationMenuRoot.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuRoot.js +8 -6
- package/dist/NavigationMenu/NavigationMenuRoot.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.js +1 -1
- package/dist/NavigationMenu/NavigationMenuViewport.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuViewport.js +1 -1
- package/dist/NumberField/NumberFieldRoot.cjs +6 -1
- package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
- package/dist/NumberField/NumberFieldRoot.js +6 -1
- package/dist/NumberField/NumberFieldRoot.js.map +1 -1
- package/dist/PinInput/PinInputInput.cjs +15 -11
- package/dist/PinInput/PinInputInput.cjs.map +1 -1
- package/dist/PinInput/PinInputInput.js +15 -11
- package/dist/PinInput/PinInputInput.js.map +1 -1
- package/dist/Popover/PopoverContent.cjs +4 -0
- package/dist/Popover/PopoverContent.cjs.map +1 -1
- package/dist/Popover/PopoverContent.js +4 -0
- package/dist/Popover/PopoverContent.js.map +1 -1
- package/dist/Popover/PopoverContentImpl.cjs +4 -0
- package/dist/Popover/PopoverContentImpl.cjs.map +1 -1
- package/dist/Popover/PopoverContentImpl.js +4 -0
- package/dist/Popover/PopoverContentImpl.js.map +1 -1
- package/dist/Popover/PopoverContentModal.cjs +4 -0
- package/dist/Popover/PopoverContentModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentModal.js +4 -0
- package/dist/Popover/PopoverContentModal.js.map +1 -1
- package/dist/Popover/PopoverContentNonModal.cjs +4 -0
- package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentNonModal.js +4 -0
- package/dist/Popover/PopoverContentNonModal.js.map +1 -1
- package/dist/Popper/PopperContent.cjs +10 -2
- package/dist/Popper/PopperContent.cjs.map +1 -1
- package/dist/Popper/PopperContent.js +10 -2
- package/dist/Popper/PopperContent.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +8 -2
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js +8 -2
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.cjs +2 -1
- package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.js +2 -1
- package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.cjs +30 -16
- package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +31 -17
- package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs +41 -8
- package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js +41 -8
- package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaRoot.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaRoot.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.cjs +9 -2
- package/dist/ScrollArea/ScrollAreaScrollbar.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.js +9 -2
- package/dist/ScrollArea/ScrollAreaScrollbar.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs +132 -0
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs.map +1 -0
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js +126 -0
- package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js.map +1 -0
- package/dist/Select/SelectContent.cjs +4 -0
- package/dist/Select/SelectContent.cjs.map +1 -1
- package/dist/Select/SelectContent.js +4 -0
- package/dist/Select/SelectContent.js.map +1 -1
- package/dist/Select/SelectContentImpl.cjs +4 -0
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +4 -0
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectPopperPosition.cjs +4 -0
- package/dist/Select/SelectPopperPosition.cjs.map +1 -1
- package/dist/Select/SelectPopperPosition.js +4 -0
- package/dist/Select/SelectPopperPosition.js.map +1 -1
- package/dist/Tabs/TabsContent.cjs +4 -0
- package/dist/Tabs/TabsContent.cjs.map +1 -1
- package/dist/Tabs/TabsContent.js +5 -1
- package/dist/Tabs/TabsContent.js.map +1 -1
- package/dist/Tabs/TabsRoot.cjs +11 -1
- package/dist/Tabs/TabsRoot.cjs.map +1 -1
- package/dist/Tabs/TabsRoot.js +12 -2
- package/dist/Tabs/TabsRoot.js.map +1 -1
- package/dist/Tabs/TabsTrigger.cjs +1 -1
- package/dist/Tabs/TabsTrigger.cjs.map +1 -1
- package/dist/Tabs/TabsTrigger.js +1 -1
- package/dist/Tabs/TabsTrigger.js.map +1 -1
- package/dist/TimeField/TimeFieldInput.cjs +3 -1
- package/dist/TimeField/TimeFieldInput.cjs.map +1 -1
- package/dist/TimeField/TimeFieldInput.js +3 -1
- package/dist/TimeField/TimeFieldInput.js.map +1 -1
- package/dist/TimeField/TimeFieldRoot.cjs +24 -2
- package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
- package/dist/TimeField/TimeFieldRoot.js +24 -2
- package/dist/TimeField/TimeFieldRoot.js.map +1 -1
- package/dist/date/calendar.cjs +29 -9
- package/dist/date/calendar.cjs.map +1 -1
- package/dist/date/calendar.js +25 -11
- package/dist/date/calendar.js.map +1 -1
- package/dist/date/comparators.cjs +14 -2
- package/dist/date/comparators.cjs.map +1 -1
- package/dist/date/comparators.js +14 -2
- package/dist/date/comparators.js.map +1 -1
- package/dist/date/parser.cjs +1 -0
- package/dist/date/parser.cjs.map +1 -1
- package/dist/date/parser.js +1 -0
- package/dist/date/parser.js.map +1 -1
- package/dist/date/useDateField.cjs +41 -20
- package/dist/date/useDateField.cjs.map +1 -1
- package/dist/date/useDateField.js +41 -20
- package/dist/date/useDateField.js.map +1 -1
- package/dist/date.cjs +1 -0
- package/dist/date.d.cts +2 -2
- package/dist/date.d.ts +2 -2
- package/dist/date.js +2 -2
- package/dist/index.cjs +3 -1
- package/dist/index.d.cts +1148 -1106
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +670 -628
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index2.d.cts +9 -2
- package/dist/index2.d.cts.map +1 -1
- package/dist/index2.d.ts +9 -2
- package/dist/index2.d.ts.map +1 -1
- package/dist/shared/useDateFormatter.cjs +1 -1
- package/dist/shared/useDateFormatter.cjs.map +1 -1
- package/dist/shared/useDateFormatter.js +1 -1
- package/dist/shared/useDateFormatter.js.map +1 -1
- 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/useGraceArea.cjs +1 -1
- package/dist/shared/useGraceArea.cjs.map +1 -1
- package/dist/shared/useGraceArea.js +1 -1
- package/dist/shared/useGraceArea.js.map +1 -1
- package/package.json +20 -16
- package/src/Avatar/AvatarImage.vue +2 -1
- package/src/Calendar/CalendarCellTrigger.vue +8 -1
- package/src/Calendar/CalendarRoot.vue +19 -7
- package/src/Calendar/useCalendar.ts +43 -3
- package/src/Collection/Collection.ts +3 -2
- package/src/Combobox/ComboboxContentImpl.vue +40 -32
- package/src/Combobox/ComboboxRoot.vue +1 -1
- package/src/DatePicker/DatePickerRoot.vue +10 -10
- package/src/DatePicker/index.ts +4 -4
- package/src/DateRangePicker/DateRangePickerRoot.vue +11 -11
- package/src/DateRangePicker/index.ts +4 -4
- package/src/Editable/EditableInput.vue +1 -1
- package/src/FocusScope/FocusScope.vue +2 -2
- package/src/Listbox/ListboxFilter.vue +1 -1
- package/src/Listbox/ListboxRoot.vue +2 -1
- package/src/Menu/MenuRadioGroup.vue +5 -4
- package/src/Menu/MenuRadioItem.vue +2 -1
- package/src/NavigationMenu/NavigationMenuRoot.vue +10 -6
- package/src/NumberField/NumberFieldRoot.vue +6 -1
- package/src/PinInput/PinInputInput.vue +25 -18
- package/src/Popper/PopperContent.vue +15 -5
- package/src/RadioGroup/RadioGroupRoot.vue +1 -1
- package/src/RangeCalendar/RangeCalendarCellTrigger.vue +13 -3
- package/src/RangeCalendar/RangeCalendarGrid.vue +1 -0
- package/src/RangeCalendar/RangeCalendarRoot.vue +46 -30
- package/src/RangeCalendar/useRangeCalendar.ts +43 -15
- package/src/Rating/RatingItem.vue +52 -0
- package/src/Rating/RatingItemIndicator.vue +60 -0
- package/src/Rating/RatingRoot.vue +113 -0
- package/src/Rating/index.ts +3 -0
- package/src/ScrollArea/ScrollAreaRoot.vue +2 -1
- package/src/ScrollArea/ScrollAreaScrollbar.vue +9 -0
- package/src/ScrollArea/ScrollAreaScrollbarGlimpse.vue +145 -0
- package/src/ScrollArea/index.ts +4 -0
- package/src/ScrollArea/types.ts +1 -1
- package/src/Tabs/TabsContent.vue +6 -1
- package/src/Tabs/TabsRoot.vue +14 -1
- package/src/Tabs/TabsTrigger.vue +1 -1
- package/src/TimeField/TimeFieldInput.vue +6 -1
- package/src/TimeField/TimeFieldRoot.vue +25 -2
- package/src/Tree/TreeRoot.vue +2 -2
- package/src/date/calendar.ts +42 -18
- package/src/date/comparators.ts +15 -2
- package/src/index.ts +1 -0
- package/src/shared/date/parser.ts +10 -0
- package/src/shared/date/useDateField.ts +72 -21
- package/src/shared/index.ts +1 -1
- package/src/shared/useDateFormatter.ts +2 -2
- package/src/shared/useForwardExpose.ts +1 -1
- package/src/shared/useGraceArea.ts +1 -1
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import type { DateFields, DateValue } from '@internationalized/date'
|
|
6
6
|
import type { Ref } from 'vue'
|
|
7
|
-
import type { Grid, Matcher, WeekDayFormat } from '@/date'
|
|
7
|
+
import type { Grid, Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
|
|
8
8
|
import type { DateFormatterOptions } from '@/shared/useDateFormatter'
|
|
9
|
-
import { isEqualMonth, isSameDay } from '@internationalized/date'
|
|
9
|
+
import { isEqualMonth, isSameDay, isSameMonth } from '@internationalized/date'
|
|
10
10
|
import { computed, ref, watch } from 'vue'
|
|
11
11
|
import { createMonths, getDaysInMonth, isAfter, isBefore, toDate } from '@/date'
|
|
12
12
|
import { useDateFormatter } from '@/shared'
|
|
@@ -14,7 +14,7 @@ import { useDateFormatter } from '@/shared'
|
|
|
14
14
|
export type UseCalendarProps = {
|
|
15
15
|
locale: Ref<string>
|
|
16
16
|
placeholder: Ref<DateValue>
|
|
17
|
-
weekStartsOn: Ref<
|
|
17
|
+
weekStartsOn: Ref<WeekStartsOn>
|
|
18
18
|
fixedWeeks: Ref<boolean>
|
|
19
19
|
numberOfMonths: Ref<number>
|
|
20
20
|
minValue: Ref<DateValue | undefined>
|
|
@@ -71,9 +71,26 @@ export function useCalendarState(props: UseCalendarStateProps) {
|
|
|
71
71
|
},
|
|
72
72
|
)
|
|
73
73
|
|
|
74
|
+
const hasSelectedDate = computed(() => {
|
|
75
|
+
return Array.isArray(props.date.value) ? props.date.value.length > 0 : !!props.date.value
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
const isSelectedDateDisabled = computed(() => {
|
|
79
|
+
if (Array.isArray(props.date.value)) {
|
|
80
|
+
if (!props.date.value.length)
|
|
81
|
+
return false
|
|
82
|
+
return props.date.value.some(dateObj => props.isDateDisabled?.(dateObj))
|
|
83
|
+
}
|
|
84
|
+
if (!props.date.value)
|
|
85
|
+
return false
|
|
86
|
+
return !!props.isDateDisabled?.(props.date.value)
|
|
87
|
+
})
|
|
88
|
+
|
|
74
89
|
return {
|
|
75
90
|
isDateSelected,
|
|
76
91
|
isInvalid,
|
|
92
|
+
hasSelectedDate,
|
|
93
|
+
isSelectedDateDisabled,
|
|
77
94
|
}
|
|
78
95
|
}
|
|
79
96
|
|
|
@@ -336,6 +353,27 @@ export function useCalendar(props: UseCalendarProps) {
|
|
|
336
353
|
|
|
337
354
|
const fullCalendarLabel = computed(() => `${props.calendarLabel.value ?? 'Event Date'}, ${headingValue.value}`)
|
|
338
355
|
|
|
356
|
+
const isPlaceholderFocusable = computed(() => {
|
|
357
|
+
return !(isDateDisabled(props.placeholder.value) || isDateUnavailable(props.placeholder.value) || isOutsideVisibleView(props.placeholder.value))
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
const firstFocusableDate = computed(() => {
|
|
361
|
+
for (const month of grid.value) {
|
|
362
|
+
if (props.minValue.value && isBefore(month.value, props.minValue.value))
|
|
363
|
+
continue
|
|
364
|
+
|
|
365
|
+
const daysInMonth = getDaysInMonth(month.value)
|
|
366
|
+
const startDay = props.minValue.value && isSameMonth(props.minValue.value, month.value) ? props.minValue.value.day : 1
|
|
367
|
+
|
|
368
|
+
for (let day = startDay; day <= daysInMonth; day++) {
|
|
369
|
+
const date = month.value.set({ day })
|
|
370
|
+
if (isDateDisabled(date) || isDateUnavailable(date))
|
|
371
|
+
continue
|
|
372
|
+
return date
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
})
|
|
376
|
+
|
|
339
377
|
return {
|
|
340
378
|
isDateDisabled,
|
|
341
379
|
isDateUnavailable,
|
|
@@ -350,5 +388,7 @@ export function useCalendar(props: UseCalendarProps) {
|
|
|
350
388
|
prevPage,
|
|
351
389
|
headingValue,
|
|
352
390
|
fullCalendarLabel,
|
|
391
|
+
isPlaceholderFocusable,
|
|
392
|
+
firstFocusableDate,
|
|
353
393
|
}
|
|
354
394
|
}
|
|
@@ -46,12 +46,13 @@ export function useCollection<ItemData = {}>(options: { key?: string, isProvider
|
|
|
46
46
|
|
|
47
47
|
const CollectionSlot = defineComponent({
|
|
48
48
|
name: 'CollectionSlot',
|
|
49
|
-
|
|
49
|
+
inheritAttrs: false,
|
|
50
|
+
setup(_, { slots, attrs }) {
|
|
50
51
|
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
51
52
|
watch(currentElement, () => {
|
|
52
53
|
context.collectionRef.value = currentElement.value
|
|
53
54
|
})
|
|
54
|
-
return () => h(Slot, { ref: primitiveElement }, slots)
|
|
55
|
+
return () => h(Slot, { ref: primitiveElement, ...attrs }, slots)
|
|
55
56
|
},
|
|
56
57
|
})
|
|
57
58
|
|
|
@@ -3,7 +3,7 @@ import type { Ref } from 'vue'
|
|
|
3
3
|
import type { DismissableLayerEmits, DismissableLayerProps } from '@/DismissableLayer'
|
|
4
4
|
import type { PopperContentProps } from '@/Popper'
|
|
5
5
|
|
|
6
|
-
import { createContext, getActiveElement, useForwardExpose, useForwardProps, useHideOthers } from '@/shared'
|
|
6
|
+
import { createContext, getActiveElement, useFocusGuards, useForwardExpose, useForwardProps, useHideOthers } from '@/shared'
|
|
7
7
|
import { useBodyScrollLock } from '@/shared/useBodyScrollLock'
|
|
8
8
|
|
|
9
9
|
export type ComboboxContentImplEmits = DismissableLayerEmits
|
|
@@ -28,6 +28,7 @@ export const [injectComboboxContentContext, provideComboboxContentContext]
|
|
|
28
28
|
<script setup lang="ts">
|
|
29
29
|
import { computed, onMounted, onUnmounted, ref, toRefs } from 'vue'
|
|
30
30
|
import { DismissableLayer } from '@/DismissableLayer'
|
|
31
|
+
import { FocusScope } from '@/FocusScope'
|
|
31
32
|
import { ListboxContent } from '@/Listbox'
|
|
32
33
|
import { PopperContent } from '@/Popper'
|
|
33
34
|
import { Primitive } from '@/Primitive'
|
|
@@ -43,6 +44,7 @@ const rootContext = injectComboboxRootContext()
|
|
|
43
44
|
|
|
44
45
|
const { forwardRef, currentElement } = useForwardExpose()
|
|
45
46
|
useBodyScrollLock(props.bodyLock)
|
|
47
|
+
useFocusGuards()
|
|
46
48
|
useHideOthers(rootContext.parentElement)
|
|
47
49
|
|
|
48
50
|
const pickedProps = computed(() => {
|
|
@@ -89,40 +91,46 @@ onUnmounted(() => {
|
|
|
89
91
|
|
|
90
92
|
<template>
|
|
91
93
|
<ListboxContent as-child>
|
|
92
|
-
<
|
|
94
|
+
<FocusScope
|
|
93
95
|
as-child
|
|
94
|
-
|
|
95
|
-
@
|
|
96
|
-
@focus-outside="(ev) => {
|
|
97
|
-
// if clicking inside the combobox, prevent dismiss
|
|
98
|
-
if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
|
|
99
|
-
emits('focusOutside', ev)
|
|
100
|
-
}"
|
|
101
|
-
@interact-outside="emits('interactOutside', $event)"
|
|
102
|
-
@escape-key-down="emits('escapeKeyDown', $event)"
|
|
103
|
-
@pointer-down-outside="(ev) => {
|
|
104
|
-
// if clicking inside the combobox, prevent dismiss
|
|
105
|
-
if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
|
|
106
|
-
emits('pointerDownOutside', ev)
|
|
107
|
-
}"
|
|
96
|
+
@mount-auto-focus.prevent
|
|
97
|
+
@unmount-auto-focus.prevent
|
|
108
98
|
>
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
99
|
+
<DismissableLayer
|
|
100
|
+
as-child
|
|
101
|
+
:disable-outside-pointer-events="disableOutsidePointerEvents"
|
|
102
|
+
@dismiss="rootContext.onOpenChange(false)"
|
|
103
|
+
@focus-outside="(ev) => {
|
|
104
|
+
// if clicking inside the combobox, prevent dismiss
|
|
105
|
+
if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
|
|
106
|
+
emits('focusOutside', ev)
|
|
107
|
+
}"
|
|
108
|
+
@interact-outside="emits('interactOutside', $event)"
|
|
109
|
+
@escape-key-down="emits('escapeKeyDown', $event)"
|
|
110
|
+
@pointer-down-outside="(ev) => {
|
|
111
|
+
// if clicking inside the combobox, prevent dismiss
|
|
112
|
+
if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
|
|
113
|
+
emits('pointerDownOutside', ev)
|
|
122
114
|
}"
|
|
123
115
|
>
|
|
124
|
-
<
|
|
125
|
-
|
|
126
|
-
|
|
116
|
+
<component
|
|
117
|
+
:is="position === 'popper' ? PopperContent : Primitive"
|
|
118
|
+
v-bind="{ ...$attrs, ...forwardedProps }"
|
|
119
|
+
:id="rootContext.contentId"
|
|
120
|
+
:ref="forwardRef"
|
|
121
|
+
:data-state="rootContext.open.value ? 'open' : 'closed'"
|
|
122
|
+
:style="{
|
|
123
|
+
// flex layout so we can place the scroll buttons properly
|
|
124
|
+
display: 'flex',
|
|
125
|
+
flexDirection: 'column',
|
|
126
|
+
// reset the outline by default as the content MAY get focused
|
|
127
|
+
outline: 'none',
|
|
128
|
+
...(position === 'popper' ? popperStyle : {}),
|
|
129
|
+
}"
|
|
130
|
+
>
|
|
131
|
+
<slot />
|
|
132
|
+
</component>
|
|
133
|
+
</DismissableLayer>
|
|
134
|
+
</FocusScope>
|
|
127
135
|
</ListboxContent>
|
|
128
136
|
</template>
|
|
@@ -45,7 +45,7 @@ export type ComboboxRootEmits<T = AcceptableValue> = {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export interface ComboboxRootProps<T = AcceptableValue> extends Omit<ListboxRootProps<T>, 'orientation' | 'selectionBehavior'> {
|
|
48
|
-
/** The controlled open state of the Combobox. Can be binded with
|
|
48
|
+
/** The controlled open state of the Combobox. Can be binded with `v-model:open`. */
|
|
49
49
|
open?: boolean
|
|
50
50
|
/** The open state of the combobox when it is initially rendered. <br> Use when you do not need to control its open state. */
|
|
51
51
|
defaultOpen?: boolean
|
|
@@ -3,11 +3,12 @@ import type { DateValue } from '@internationalized/date'
|
|
|
3
3
|
|
|
4
4
|
import type { Ref } from 'vue'
|
|
5
5
|
import type { CalendarRootProps, DateFieldRoot, DateFieldRootProps, PopoverRootEmits, PopoverRootProps } from '..'
|
|
6
|
-
import type { Matcher, WeekDayFormat } from '@/date'
|
|
6
|
+
import type { Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
|
|
7
7
|
import type { DateStep, Granularity, HourCycle } from '@/shared/date'
|
|
8
8
|
import type { Direction } from '@/shared/types'
|
|
9
9
|
import { computed, ref, toRefs, watch } from 'vue'
|
|
10
|
-
import {
|
|
10
|
+
import { getWeekStartsOn } from '@/date'
|
|
11
|
+
import { createContext, useDirection, useLocale } from '@/shared'
|
|
11
12
|
import { getDefaultDate } from '@/shared/date'
|
|
12
13
|
import { PopoverRoot } from '..'
|
|
13
14
|
|
|
@@ -26,7 +27,7 @@ type DatePickerRootContext = {
|
|
|
26
27
|
placeholder: Ref<DateValue>
|
|
27
28
|
pagedNavigation: Ref<boolean>
|
|
28
29
|
preventDeselect: Ref<boolean>
|
|
29
|
-
weekStartsOn: Ref<
|
|
30
|
+
weekStartsOn: Ref<WeekStartsOn>
|
|
30
31
|
weekdayFormat: Ref<WeekDayFormat>
|
|
31
32
|
fixedWeeks: Ref<boolean>
|
|
32
33
|
numberOfMonths: Ref<number>
|
|
@@ -49,7 +50,7 @@ export type DatePickerRootProps = Omit<DateFieldRootProps, 'as' | 'asChild'> & P
|
|
|
49
50
|
closeOnSelect?: boolean
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
export type DatePickerRootEmits = {
|
|
53
|
+
export type DatePickerRootEmits = PopoverRootEmits & {
|
|
53
54
|
/** Event handler called whenever the model value changes */
|
|
54
55
|
'update:modelValue': [date: DateValue | undefined]
|
|
55
56
|
/** Event handler called whenever the placeholder value changes */
|
|
@@ -73,25 +74,22 @@ const props = withDefaults(defineProps<DatePickerRootProps>(), {
|
|
|
73
74
|
modal: false,
|
|
74
75
|
pagedNavigation: false,
|
|
75
76
|
preventDeselect: false,
|
|
76
|
-
weekStartsOn: 0,
|
|
77
77
|
weekdayFormat: 'narrow',
|
|
78
78
|
fixedWeeks: false,
|
|
79
79
|
numberOfMonths: 1,
|
|
80
80
|
disabled: false,
|
|
81
81
|
readonly: false,
|
|
82
82
|
placeholder: undefined,
|
|
83
|
-
locale: 'en',
|
|
84
83
|
isDateDisabled: undefined,
|
|
85
84
|
isDateUnavailable: undefined,
|
|
86
85
|
closeOnSelect: false,
|
|
87
86
|
})
|
|
88
|
-
const emits = defineEmits<DatePickerRootEmits
|
|
87
|
+
const emits = defineEmits<DatePickerRootEmits>()
|
|
89
88
|
const {
|
|
90
|
-
locale,
|
|
89
|
+
locale: propLocale,
|
|
91
90
|
disabled,
|
|
92
91
|
readonly,
|
|
93
92
|
pagedNavigation,
|
|
94
|
-
weekStartsOn,
|
|
95
93
|
weekdayFormat,
|
|
96
94
|
fixedWeeks,
|
|
97
95
|
numberOfMonths,
|
|
@@ -115,6 +113,8 @@ const {
|
|
|
115
113
|
} = toRefs(props)
|
|
116
114
|
|
|
117
115
|
const dir = useDirection(propDir)
|
|
116
|
+
const locale = useLocale(propLocale)
|
|
117
|
+
const weekStartsOn = computed(() => props.weekStartsOn ?? getWeekStartsOn(locale.value))
|
|
118
118
|
|
|
119
119
|
const modelValue = useVModel(props, 'modelValue', emits, {
|
|
120
120
|
defaultValue: defaultValue.value,
|
|
@@ -125,7 +125,7 @@ const defaultDate = computed(() => getDefaultDate({
|
|
|
125
125
|
defaultPlaceholder: props.placeholder,
|
|
126
126
|
granularity: props.granularity,
|
|
127
127
|
defaultValue: modelValue.value,
|
|
128
|
-
locale:
|
|
128
|
+
locale: locale.value,
|
|
129
129
|
}))
|
|
130
130
|
|
|
131
131
|
const placeholder = useVModel(props, 'placeholder', emits, {
|
package/src/DatePicker/index.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { default as DatePickerAnchor } from './DatePickerAnchor.vue'
|
|
1
|
+
export { default as DatePickerAnchor, type DatePickerAnchorProps } from './DatePickerAnchor.vue'
|
|
2
2
|
|
|
3
|
-
export { default as DatePickerArrow } from './DatePickerArrow.vue'
|
|
3
|
+
export { default as DatePickerArrow, type DatePickerArrowProps } from './DatePickerArrow.vue'
|
|
4
4
|
export { default as DatePickerCalendar } from './DatePickerCalendar.vue'
|
|
5
5
|
|
|
6
6
|
export { default as DatePickerCell, type DatePickerCellProps } from './DatePickerCell.vue'
|
|
7
7
|
|
|
8
8
|
export { default as DatePickerCellTrigger, type DatePickerCellTriggerProps } from './DatePickerCellTrigger.vue'
|
|
9
|
-
export { default as DatePickerClose } from './DatePickerClose.vue'
|
|
9
|
+
export { default as DatePickerClose, type DatePickerCloseProps } from './DatePickerClose.vue'
|
|
10
10
|
|
|
11
|
-
export { default as DatePickerContent, type DatePickerContentProps } from './DatePickerContent.vue'
|
|
11
|
+
export { default as DatePickerContent, type DatePickerContentEmits, type DatePickerContentProps } from './DatePickerContent.vue'
|
|
12
12
|
export { default as DatePickerField } from './DatePickerField.vue'
|
|
13
13
|
|
|
14
14
|
export { default as DatePickerGrid, type DatePickerGridProps } from './DatePickerGrid.vue'
|
|
@@ -3,11 +3,12 @@ import type { DateValue } from '@internationalized/date'
|
|
|
3
3
|
|
|
4
4
|
import type { Ref } from 'vue'
|
|
5
5
|
import type { DateRangeFieldRoot, DateRangeFieldRootProps, PopoverRootEmits, PopoverRootProps, RangeCalendarRootProps } from '..'
|
|
6
|
-
import type { Matcher, WeekDayFormat } from '@/date'
|
|
6
|
+
import type { Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
|
|
7
7
|
import type { DateRange, DateStep, Granularity, HourCycle } from '@/shared/date'
|
|
8
8
|
|
|
9
9
|
import type { Direction } from '@/shared/types'
|
|
10
|
-
import {
|
|
10
|
+
import { getWeekStartsOn } from '@/date'
|
|
11
|
+
import { createContext, useDirection, useLocale } from '@/shared'
|
|
11
12
|
import { getDefaultDate } from '@/shared/date'
|
|
12
13
|
import { PopoverRoot } from '..'
|
|
13
14
|
|
|
@@ -26,7 +27,7 @@ type DateRangePickerRootContext = {
|
|
|
26
27
|
placeholder: Ref<DateValue>
|
|
27
28
|
pagedNavigation: Ref<boolean>
|
|
28
29
|
preventDeselect: Ref<boolean>
|
|
29
|
-
weekStartsOn: Ref<
|
|
30
|
+
weekStartsOn: Ref<WeekStartsOn>
|
|
30
31
|
weekdayFormat: Ref<WeekDayFormat>
|
|
31
32
|
fixedWeeks: Ref<boolean>
|
|
32
33
|
numberOfMonths: Ref<number>
|
|
@@ -54,7 +55,7 @@ export type DateRangePickerRootProps = Omit<DateRangeFieldRootProps, 'as' | 'asC
|
|
|
54
55
|
closeOnSelect?: boolean
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
export type DateRangePickerRootEmits = {
|
|
58
|
+
export type DateRangePickerRootEmits = PopoverRootEmits & {
|
|
58
59
|
/** Event handler called whenever the model value changes */
|
|
59
60
|
'update:modelValue': [date: DateRange]
|
|
60
61
|
/** Event handler called whenever the placeholder value changes */
|
|
@@ -69,7 +70,7 @@ export const [injectDateRangePickerRootContext, provideDateRangePickerRootContex
|
|
|
69
70
|
|
|
70
71
|
<script setup lang="ts">
|
|
71
72
|
import { useVModel } from '@vueuse/core'
|
|
72
|
-
import { ref, toRefs, watch } from 'vue'
|
|
73
|
+
import { computed, ref, toRefs, watch } from 'vue'
|
|
73
74
|
|
|
74
75
|
defineOptions({
|
|
75
76
|
inheritAttrs: false,
|
|
@@ -81,14 +82,12 @@ const props = withDefaults(defineProps<DateRangePickerRootProps>(), {
|
|
|
81
82
|
modal: false,
|
|
82
83
|
pagedNavigation: false,
|
|
83
84
|
preventDeselect: false,
|
|
84
|
-
weekStartsOn: 0,
|
|
85
85
|
weekdayFormat: 'narrow',
|
|
86
86
|
fixedWeeks: false,
|
|
87
87
|
numberOfMonths: 1,
|
|
88
88
|
disabled: false,
|
|
89
89
|
readonly: false,
|
|
90
90
|
placeholder: undefined,
|
|
91
|
-
locale: 'en',
|
|
92
91
|
isDateDisabled: undefined,
|
|
93
92
|
isDateUnavailable: undefined,
|
|
94
93
|
isDateHighlightable: undefined,
|
|
@@ -96,13 +95,12 @@ const props = withDefaults(defineProps<DateRangePickerRootProps>(), {
|
|
|
96
95
|
maximumDays: undefined,
|
|
97
96
|
closeOnSelect: false,
|
|
98
97
|
})
|
|
99
|
-
const emits = defineEmits<DateRangePickerRootEmits
|
|
98
|
+
const emits = defineEmits<DateRangePickerRootEmits>()
|
|
100
99
|
const {
|
|
101
|
-
locale,
|
|
100
|
+
locale: propLocale,
|
|
102
101
|
disabled,
|
|
103
102
|
readonly,
|
|
104
103
|
pagedNavigation,
|
|
105
|
-
weekStartsOn,
|
|
106
104
|
weekdayFormat,
|
|
107
105
|
fixedWeeks,
|
|
108
106
|
numberOfMonths,
|
|
@@ -129,6 +127,8 @@ const {
|
|
|
129
127
|
} = toRefs(props)
|
|
130
128
|
|
|
131
129
|
const dir = useDirection(propsDir)
|
|
130
|
+
const locale = useLocale(propLocale)
|
|
131
|
+
const weekStartsOn = computed(() => props.weekStartsOn ?? getWeekStartsOn(locale.value))
|
|
132
132
|
|
|
133
133
|
const modelValue = useVModel(props, 'modelValue', emits, {
|
|
134
134
|
defaultValue: props.defaultValue ?? { start: undefined, end: undefined },
|
|
@@ -139,7 +139,7 @@ const defaultDate = getDefaultDate({
|
|
|
139
139
|
defaultPlaceholder: props.placeholder,
|
|
140
140
|
granularity: props.granularity,
|
|
141
141
|
defaultValue: modelValue.value?.start,
|
|
142
|
-
locale:
|
|
142
|
+
locale: locale.value,
|
|
143
143
|
})
|
|
144
144
|
|
|
145
145
|
const placeholder = useVModel(props, 'placeholder', emits, {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { default as DateRangePickerAnchor } from './DateRangePickerAnchor.vue'
|
|
1
|
+
export { default as DateRangePickerAnchor, type DateRangePickerAnchorProps } from './DateRangePickerAnchor.vue'
|
|
2
2
|
|
|
3
|
-
export { default as DateRangePickerArrow } from './DateRangePickerArrow.vue'
|
|
3
|
+
export { default as DateRangePickerArrow, type DateRangePickerArrowProps } from './DateRangePickerArrow.vue'
|
|
4
4
|
export { default as DateRangePickerCalendar } from './DateRangePickerCalendar.vue'
|
|
5
5
|
|
|
6
6
|
export { default as DateRangePickerCell, type DateRangePickerCellProps } from './DateRangePickerCell.vue'
|
|
7
7
|
|
|
8
8
|
export { default as DateRangePickerCellTrigger, type DateRangePickerCellTriggerProps } from './DateRangePickerCellTrigger.vue'
|
|
9
|
-
export { default as DateRangePickerClose } from './DateRangePickerClose.vue'
|
|
9
|
+
export { default as DateRangePickerClose, type DateRangePickerCloseProps } from './DateRangePickerClose.vue'
|
|
10
10
|
|
|
11
|
-
export { default as DateRangePickerContent, type DateRangePickerContentProps } from './DateRangePickerContent.vue'
|
|
11
|
+
export { default as DateRangePickerContent, type DateRangePickerContentEmits, type DateRangePickerContentProps } from './DateRangePickerContent.vue'
|
|
12
12
|
export { default as DateRangePickerField } from './DateRangePickerField.vue'
|
|
13
13
|
|
|
14
14
|
export { default as DateRangePickerGrid, type DateRangePickerGridProps } from './DateRangePickerGrid.vue'
|
|
@@ -45,7 +45,7 @@ watch(context.isEditing, (value) => {
|
|
|
45
45
|
})
|
|
46
46
|
|
|
47
47
|
function handleSubmitKeyDown(event: KeyboardEvent) {
|
|
48
|
-
if ((context.submitMode.value === 'enter' || context.submitMode.value === 'both') && event.key === kbd.ENTER && !event.shiftKey && !event.metaKey)
|
|
48
|
+
if ((context.submitMode.value === 'enter' || context.submitMode.value === 'both') && event.key === kbd.ENTER && !event.shiftKey && !event.metaKey && !event.isComposing)
|
|
49
49
|
context.submit()
|
|
50
50
|
}
|
|
51
51
|
</script>
|
|
@@ -37,7 +37,7 @@ export interface FocusScopeProps extends PrimitiveProps {
|
|
|
37
37
|
import { isClient } from '@vueuse/shared'
|
|
38
38
|
import { nextTick, reactive, ref, watchEffect } from 'vue'
|
|
39
39
|
import { Primitive } from '@/Primitive'
|
|
40
|
-
import { createFocusScopesStack
|
|
40
|
+
import { createFocusScopesStack } from './stack'
|
|
41
41
|
import {
|
|
42
42
|
AUTOFOCUS_ON_MOUNT,
|
|
43
43
|
AUTOFOCUS_ON_UNMOUNT,
|
|
@@ -152,7 +152,7 @@ watchEffect(async (cleanupFn) => {
|
|
|
152
152
|
container.dispatchEvent(mountEvent)
|
|
153
153
|
|
|
154
154
|
if (!mountEvent.defaultPrevented) {
|
|
155
|
-
focusFirst(
|
|
155
|
+
focusFirst(getTabbableCandidates(container), {
|
|
156
156
|
select: true,
|
|
157
157
|
})
|
|
158
158
|
if (getActiveElement() === previouslyFocusedElement)
|
|
@@ -7,7 +7,7 @@ import { Primitive } from '..'
|
|
|
7
7
|
import { injectListboxRootContext } from './ListboxRoot.vue'
|
|
8
8
|
|
|
9
9
|
export interface ListboxFilterProps extends PrimitiveProps {
|
|
10
|
-
/** The controlled value of the filter. Can be binded with
|
|
10
|
+
/** The controlled value of the filter. Can be binded with v-model. */
|
|
11
11
|
modelValue?: string
|
|
12
12
|
/** Focus on element when mounted. */
|
|
13
13
|
autoFocus?: boolean
|
|
@@ -40,7 +40,7 @@ export const [injectListboxRootContext, provideListboxRootContext]
|
|
|
40
40
|
= createContext<ListboxRootContext<AcceptableValue>>('ListboxRoot')
|
|
41
41
|
|
|
42
42
|
export interface ListboxRootProps<T = AcceptableValue> extends PrimitiveProps, FormFieldProps {
|
|
43
|
-
/** The controlled value of the listbox. Can be binded with
|
|
43
|
+
/** The controlled value of the listbox. Can be binded with `v-model`. */
|
|
44
44
|
modelValue?: T | Array<T>
|
|
45
45
|
/** The value of the listbox when initially rendered. Use when you do not need to control the state of the Listbox */
|
|
46
46
|
defaultValue?: T | Array<T>
|
|
@@ -173,6 +173,7 @@ function changeHighlight(el: HTMLElement, scrollIntoView = true) {
|
|
|
173
173
|
|
|
174
174
|
function highlightItem(value: T) {
|
|
175
175
|
if (isVirtual.value) {
|
|
176
|
+
// @ts-expect-error known type issue https://github.com/vueuse/vueuse/issues/4610
|
|
176
177
|
virtualHighlightHook.trigger(value)
|
|
177
178
|
}
|
|
178
179
|
else {
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { Ref } from 'vue'
|
|
3
3
|
import type { MenuGroupProps } from './MenuGroup.vue'
|
|
4
|
+
import type { AcceptableValue } from '@/shared/types'
|
|
4
5
|
import { createContext, useForwardProps } from '@/shared'
|
|
5
6
|
|
|
6
7
|
interface MenuRadioGroupContext {
|
|
7
|
-
modelValue: Ref<
|
|
8
|
-
onValueChange: (payload:
|
|
8
|
+
modelValue: Ref<AcceptableValue>
|
|
9
|
+
onValueChange: (payload: AcceptableValue) => void
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export interface MenuRadioGroupProps extends MenuGroupProps {
|
|
12
13
|
/** The value of the selected item in the group. */
|
|
13
|
-
modelValue?:
|
|
14
|
+
modelValue?: AcceptableValue
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export type MenuRadioGroupEmits = {
|
|
17
18
|
/** Event handler called when the value changes. */
|
|
18
|
-
'update:modelValue': [payload:
|
|
19
|
+
'update:modelValue': [payload: AcceptableValue]
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]
|
|
@@ -3,6 +3,7 @@ import type {
|
|
|
3
3
|
MenuItemEmits,
|
|
4
4
|
MenuItemProps,
|
|
5
5
|
} from './MenuItem.vue'
|
|
6
|
+
import type { AcceptableValue } from '@/shared/types'
|
|
6
7
|
import { reactiveOmit } from '@vueuse/shared'
|
|
7
8
|
import { useForwardProps } from '@/shared'
|
|
8
9
|
|
|
@@ -10,7 +11,7 @@ export type MenuRadioItemEmits = MenuItemEmits
|
|
|
10
11
|
|
|
11
12
|
export interface MenuRadioItemProps extends MenuItemProps {
|
|
12
13
|
/** The unique value of the item. */
|
|
13
|
-
value:
|
|
14
|
+
value: AcceptableValue
|
|
14
15
|
}
|
|
15
16
|
</script>
|
|
16
17
|
|
|
@@ -5,6 +5,7 @@ import type { Direction, Orientation } from './utils'
|
|
|
5
5
|
import type { PrimitiveProps } from '@/Primitive'
|
|
6
6
|
import { useCollection } from '@/Collection'
|
|
7
7
|
import { createContext, useDirection, useForwardExpose, useId } from '@/shared'
|
|
8
|
+
import { EVENT_ROOT_CONTENT_DISMISS } from './utils'
|
|
8
9
|
|
|
9
10
|
export interface NavigationMenuRootProps extends PrimitiveProps {
|
|
10
11
|
/** The controlled value of the menu item to activate. Can be used as `v-model`. */
|
|
@@ -91,7 +92,7 @@ export const [injectNavigationMenuContext, provideNavigationMenuContext]
|
|
|
91
92
|
</script>
|
|
92
93
|
|
|
93
94
|
<script setup lang="ts">
|
|
94
|
-
import { refAutoReset, useDebounceFn, useVModel } from '@vueuse/core'
|
|
95
|
+
import { refAutoReset, useDebounceFn, useEventListener, useVModel } from '@vueuse/core'
|
|
95
96
|
import {
|
|
96
97
|
computed,
|
|
97
98
|
ref,
|
|
@@ -164,6 +165,8 @@ watchEffect(() => {
|
|
|
164
165
|
)
|
|
165
166
|
})
|
|
166
167
|
|
|
168
|
+
useEventListener(rootNavigationMenu, EVENT_ROOT_CONTENT_DISMISS, onItemDismiss)
|
|
169
|
+
|
|
167
170
|
provideNavigationMenuContext({
|
|
168
171
|
isRootMenu: true,
|
|
169
172
|
modelValue,
|
|
@@ -203,18 +206,19 @@ provideNavigationMenuContext({
|
|
|
203
206
|
previousValue.value = modelValue.value
|
|
204
207
|
modelValue.value = val
|
|
205
208
|
},
|
|
206
|
-
onItemDismiss
|
|
207
|
-
previousValue.value = modelValue.value
|
|
208
|
-
modelValue.value = ''
|
|
209
|
-
},
|
|
209
|
+
onItemDismiss,
|
|
210
210
|
})
|
|
211
|
+
|
|
212
|
+
function onItemDismiss() {
|
|
213
|
+
previousValue.value = modelValue.value
|
|
214
|
+
modelValue.value = ''
|
|
215
|
+
}
|
|
211
216
|
</script>
|
|
212
217
|
|
|
213
218
|
<template>
|
|
214
219
|
<CollectionSlot>
|
|
215
220
|
<Primitive
|
|
216
221
|
:ref="forwardRef"
|
|
217
|
-
aria-label="Main"
|
|
218
222
|
:as="as"
|
|
219
223
|
:as-child="asChild"
|
|
220
224
|
:data-orientation="orientation"
|
|
@@ -17,6 +17,8 @@ export interface NumberFieldRootProps extends PrimitiveProps, FormFieldProps {
|
|
|
17
17
|
step?: number
|
|
18
18
|
/** When `false`, prevents the value from snapping to the nearest increment of the step value */
|
|
19
19
|
stepSnapping?: boolean
|
|
20
|
+
/** When `true`, the input will be focused when the value changes. */
|
|
21
|
+
focusOnChange?: boolean
|
|
20
22
|
/** Formatting options for the value displayed in the number field. This also affects what characters are allowed to be typed by the user. */
|
|
21
23
|
formatOptions?: Intl.NumberFormatOptions
|
|
22
24
|
/** The locale to use for formatting and currencies */
|
|
@@ -76,6 +78,7 @@ const props = withDefaults(defineProps<NumberFieldRootProps>(), {
|
|
|
76
78
|
defaultValue: undefined,
|
|
77
79
|
step: 1,
|
|
78
80
|
stepSnapping: true,
|
|
81
|
+
focusOnChange: true,
|
|
79
82
|
})
|
|
80
83
|
const emits = defineEmits<NumberFieldRootEmits>()
|
|
81
84
|
const { disabled, readonly, disableWheelChange, invertWheelChange, min, max, step, stepSnapping, formatOptions, id, locale: propLocale } = toRefs(props)
|
|
@@ -109,7 +112,9 @@ const isIncreaseDisabled = computed(() => (
|
|
|
109
112
|
)
|
|
110
113
|
|
|
111
114
|
function handleChangingValue(type: 'increase' | 'decrease', multiplier = 1) {
|
|
112
|
-
|
|
115
|
+
if (props.focusOnChange) {
|
|
116
|
+
inputEl.value?.focus()
|
|
117
|
+
}
|
|
113
118
|
if (props.disabled || props.readonly)
|
|
114
119
|
return
|
|
115
120
|
const currentInputValue = numberParser.parse(inputEl.value?.value ?? '')
|