reka-ui 2.2.1 → 2.3.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/Accordion/AccordionItem.cjs.map +1 -1
- package/dist/Accordion/AccordionItem.js.map +1 -1
- package/dist/Accordion/AccordionRoot.cjs.map +1 -1
- package/dist/Accordion/AccordionRoot.js.map +1 -1
- package/dist/AlertDialog/AlertDialogCancel.cjs.map +1 -1
- package/dist/AlertDialog/AlertDialogCancel.js.map +1 -1
- package/dist/AlertDialog/AlertDialogContent.cjs.map +1 -1
- package/dist/AlertDialog/AlertDialogContent.js.map +1 -1
- package/dist/AspectRatio/AspectRatio.cjs.map +1 -1
- package/dist/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/Avatar/AvatarFallback.cjs +11 -14
- package/dist/Avatar/AvatarFallback.cjs.map +1 -1
- package/dist/Avatar/AvatarFallback.js +12 -15
- package/dist/Avatar/AvatarFallback.js.map +1 -1
- package/dist/Avatar/AvatarImage.cjs +3 -2
- package/dist/Avatar/AvatarImage.cjs.map +1 -1
- package/dist/Avatar/AvatarImage.js +3 -2
- package/dist/Avatar/AvatarImage.js.map +1 -1
- package/dist/Avatar/AvatarRoot.cjs +1 -1
- package/dist/Avatar/AvatarRoot.cjs.map +1 -1
- package/dist/Avatar/AvatarRoot.js +1 -1
- package/dist/Avatar/AvatarRoot.js.map +1 -1
- package/dist/Avatar/utils.cjs +43 -16
- package/dist/Avatar/utils.cjs.map +1 -1
- package/dist/Avatar/utils.js +44 -17
- package/dist/Avatar/utils.js.map +1 -1
- package/dist/Calendar/CalendarCell.cjs +2 -2
- package/dist/Calendar/CalendarCell.cjs.map +1 -1
- package/dist/Calendar/CalendarCell.js +2 -2
- package/dist/Calendar/CalendarCell.js.map +1 -1
- package/dist/Calendar/CalendarCellTrigger.cjs +5 -1
- package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
- package/dist/Calendar/CalendarCellTrigger.js +5 -1
- package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
- package/dist/Calendar/CalendarGrid.cjs.map +1 -1
- package/dist/Calendar/CalendarGrid.js.map +1 -1
- package/dist/Calendar/CalendarHeading.cjs.map +1 -1
- package/dist/Calendar/CalendarHeading.js.map +1 -1
- package/dist/Calendar/CalendarNext.cjs.map +1 -1
- package/dist/Calendar/CalendarNext.js.map +1 -1
- package/dist/Calendar/CalendarPrev.cjs.map +1 -1
- package/dist/Calendar/CalendarPrev.js.map +1 -1
- package/dist/Calendar/CalendarRoot.cjs +7 -4
- package/dist/Calendar/CalendarRoot.cjs.map +1 -1
- package/dist/Calendar/CalendarRoot.js +7 -4
- 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.cjs.map +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.js.map +1 -1
- package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
- package/dist/Checkbox/CheckboxRoot.js.map +1 -1
- package/dist/Collapsible/CollapsibleContent.cjs.map +1 -1
- package/dist/Collapsible/CollapsibleContent.js.map +1 -1
- package/dist/Collapsible/CollapsibleRoot.cjs +2 -0
- package/dist/Collapsible/CollapsibleRoot.cjs.map +1 -1
- package/dist/Collapsible/CollapsibleRoot.js +2 -0
- package/dist/Collapsible/CollapsibleRoot.js.map +1 -1
- package/dist/Collection/Collection.cjs.map +1 -1
- package/dist/Collection/Collection.js.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +1 -1
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/Combobox/ComboboxGroup.cjs.map +1 -1
- package/dist/Combobox/ComboboxGroup.js.map +1 -1
- package/dist/Combobox/ComboboxInput.cjs.map +1 -1
- package/dist/Combobox/ComboboxInput.js.map +1 -1
- package/dist/Combobox/ComboboxItem.cjs.map +1 -1
- package/dist/Combobox/ComboboxItem.js.map +1 -1
- package/dist/Combobox/ComboboxRoot.cjs +1 -2
- package/dist/Combobox/ComboboxRoot.cjs.map +1 -1
- package/dist/Combobox/ComboboxRoot.js +1 -2
- package/dist/Combobox/ComboboxRoot.js.map +1 -1
- package/dist/Combobox/ComboboxTrigger.cjs.map +1 -1
- package/dist/Combobox/ComboboxTrigger.js.map +1 -1
- package/dist/Combobox/ComboboxViewport.cjs.map +1 -1
- package/dist/Combobox/ComboboxViewport.js.map +1 -1
- package/dist/Combobox/ComboboxVirtualizer.cjs.map +1 -1
- package/dist/Combobox/ComboboxVirtualizer.js.map +1 -1
- package/dist/ConfigProvider/ConfigProvider.cjs.map +1 -1
- package/dist/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
- package/dist/ContextMenu/ContextMenuRoot.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuRoot.js.map +1 -1
- package/dist/ContextMenu/ContextMenuSub.cjs +1 -1
- package/dist/ContextMenu/ContextMenuSub.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuSub.js +1 -1
- package/dist/ContextMenu/ContextMenuSub.js.map +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.js.map +1 -1
- package/dist/DateField/DateFieldInput.cjs +1 -0
- package/dist/DateField/DateFieldInput.cjs.map +1 -1
- package/dist/DateField/DateFieldInput.js +1 -0
- package/dist/DateField/DateFieldInput.js.map +1 -1
- package/dist/DateField/DateFieldRoot.cjs +7 -1
- package/dist/DateField/DateFieldRoot.cjs.map +1 -1
- package/dist/DateField/DateFieldRoot.js +7 -1
- package/dist/DateField/DateFieldRoot.js.map +1 -1
- package/dist/DatePicker/DatePickerCellTrigger.cjs.map +1 -1
- package/dist/DatePicker/DatePickerCellTrigger.js.map +1 -1
- package/dist/DatePicker/DatePickerContent.cjs +8 -3
- package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
- package/dist/DatePicker/DatePickerContent.js +9 -4
- package/dist/DatePicker/DatePickerContent.js.map +1 -1
- package/dist/DatePicker/DatePickerHeading.cjs.map +1 -1
- package/dist/DatePicker/DatePickerHeading.js.map +1 -1
- package/dist/DatePicker/DatePickerNext.cjs.map +1 -1
- package/dist/DatePicker/DatePickerNext.js.map +1 -1
- package/dist/DatePicker/DatePickerPrev.cjs.map +1 -1
- package/dist/DatePicker/DatePickerPrev.js.map +1 -1
- package/dist/DatePicker/DatePickerRoot.cjs +1 -0
- package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
- package/dist/DatePicker/DatePickerRoot.js +1 -0
- package/dist/DatePicker/DatePickerRoot.js.map +1 -1
- package/dist/DateRangeField/DateRangeFieldInput.cjs +1 -0
- package/dist/DateRangeField/DateRangeFieldInput.cjs.map +1 -1
- package/dist/DateRangeField/DateRangeFieldInput.js +1 -0
- package/dist/DateRangeField/DateRangeFieldInput.js.map +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.cjs +13 -9
- package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js +13 -9
- package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.cjs +2 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.js +2 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.cjs +8 -3
- package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.js +9 -4
- package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeading.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeading.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerNext.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerNext.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerPrev.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerPrev.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.cjs +6 -2
- package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.js +6 -2
- package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
- package/dist/Dialog/DialogContentImpl.cjs +1 -1
- package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
- package/dist/Dialog/DialogContentImpl.js +1 -1
- package/dist/Dialog/DialogContentImpl.js.map +1 -1
- package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
- package/dist/Dialog/DialogContentNonModal.js.map +1 -1
- package/dist/Dialog/DialogRoot.cjs +4 -1
- package/dist/Dialog/DialogRoot.cjs.map +1 -1
- package/dist/Dialog/DialogRoot.js +4 -1
- package/dist/Dialog/DialogRoot.js.map +1 -1
- package/dist/Dialog/DialogTrigger.cjs.map +1 -1
- package/dist/Dialog/DialogTrigger.js.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
- package/dist/DismissableLayer/DismissableLayerBranch.cjs.map +1 -1
- package/dist/DismissableLayer/DismissableLayerBranch.js.map +1 -1
- package/dist/DismissableLayer/utils.cjs +19 -7
- package/dist/DismissableLayer/utils.cjs.map +1 -1
- package/dist/DismissableLayer/utils.js +20 -8
- package/dist/DismissableLayer/utils.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.js +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.js +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.js.map +1 -1
- package/dist/Editable/EditableInput.cjs.map +1 -1
- package/dist/Editable/EditableInput.js.map +1 -1
- package/dist/Editable/EditableRoot.cjs +3 -3
- package/dist/Editable/EditableRoot.cjs.map +1 -1
- package/dist/Editable/EditableRoot.js +3 -3
- package/dist/Editable/EditableRoot.js.map +1 -1
- package/dist/FocusScope/FocusScope.cjs.map +1 -1
- package/dist/FocusScope/FocusScope.js.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
- package/dist/HoverCard/HoverCardRoot.cjs +1 -1
- package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
- package/dist/HoverCard/HoverCardRoot.js +1 -1
- package/dist/HoverCard/HoverCardRoot.js.map +1 -1
- package/dist/Listbox/ListboxFilter.cjs.map +1 -1
- package/dist/Listbox/ListboxFilter.js.map +1 -1
- package/dist/Listbox/ListboxItem.cjs.map +1 -1
- package/dist/Listbox/ListboxItem.js.map +1 -1
- package/dist/Listbox/ListboxRoot.cjs +1 -1
- package/dist/Listbox/ListboxRoot.cjs.map +1 -1
- package/dist/Listbox/ListboxRoot.js +1 -1
- 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/MenuCheckboxItem.cjs.map +1 -1
- package/dist/Menu/MenuCheckboxItem.js.map +1 -1
- package/dist/Menu/MenuContentImpl.cjs +1 -1
- package/dist/Menu/MenuContentImpl.cjs.map +1 -1
- package/dist/Menu/MenuContentImpl.js +1 -1
- package/dist/Menu/MenuContentImpl.js.map +1 -1
- package/dist/Menu/MenuItemImpl.cjs.map +1 -1
- package/dist/Menu/MenuItemImpl.js.map +1 -1
- package/dist/Menu/MenuItemIndicator.cjs.map +1 -1
- package/dist/Menu/MenuItemIndicator.js.map +1 -1
- package/dist/Menu/MenuRadioGroup.cjs.map +1 -1
- package/dist/Menu/MenuRadioGroup.js.map +1 -1
- package/dist/Menu/MenuRoot.cjs +1 -1
- package/dist/Menu/MenuRoot.cjs.map +1 -1
- package/dist/Menu/MenuRoot.js +1 -1
- package/dist/Menu/MenuRoot.js.map +1 -1
- package/dist/Menu/MenuSub.cjs +1 -1
- package/dist/Menu/MenuSub.cjs.map +1 -1
- package/dist/Menu/MenuSub.js +1 -1
- package/dist/Menu/MenuSub.js.map +1 -1
- package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
- package/dist/Menu/MenuSubTrigger.js.map +1 -1
- package/dist/Menubar/MenubarContent.cjs.map +1 -1
- package/dist/Menubar/MenubarContent.js.map +1 -1
- package/dist/Menubar/MenubarMenu.cjs.map +1 -1
- package/dist/Menubar/MenubarMenu.js.map +1 -1
- package/dist/Menubar/MenubarRoot.cjs.map +1 -1
- package/dist/Menubar/MenubarRoot.js.map +1 -1
- package/dist/Menubar/MenubarSub.cjs +1 -1
- package/dist/Menubar/MenubarSub.cjs.map +1 -1
- package/dist/Menubar/MenubarSub.js +1 -1
- package/dist/Menubar/MenubarSub.js.map +1 -1
- package/dist/Menubar/MenubarTrigger.cjs.map +1 -1
- package/dist/Menubar/MenubarTrigger.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.js +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuIndicator.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuIndicator.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuItem.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuList.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuList.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuRoot.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuRoot.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuSub.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuSub.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuTrigger.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuViewport.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuViewport.js.map +1 -1
- package/dist/NumberField/NumberFieldInput.cjs +2 -2
- package/dist/NumberField/NumberFieldInput.cjs.map +1 -1
- package/dist/NumberField/NumberFieldInput.js +2 -2
- package/dist/NumberField/NumberFieldInput.js.map +1 -1
- package/dist/NumberField/NumberFieldRoot.cjs +8 -5
- package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
- package/dist/NumberField/NumberFieldRoot.js +8 -5
- package/dist/NumberField/NumberFieldRoot.js.map +1 -1
- package/dist/Pagination/PaginationFirst.cjs.map +1 -1
- package/dist/Pagination/PaginationFirst.js.map +1 -1
- package/dist/Pagination/PaginationLast.cjs.map +1 -1
- package/dist/Pagination/PaginationLast.js.map +1 -1
- package/dist/Pagination/PaginationList.cjs.map +1 -1
- package/dist/Pagination/PaginationList.js.map +1 -1
- package/dist/Pagination/PaginationListItem.cjs.map +1 -1
- package/dist/Pagination/PaginationListItem.js.map +1 -1
- package/dist/Pagination/PaginationNext.cjs.map +1 -1
- package/dist/Pagination/PaginationNext.js.map +1 -1
- package/dist/Pagination/PaginationPrev.cjs.map +1 -1
- package/dist/Pagination/PaginationPrev.js.map +1 -1
- package/dist/Pagination/PaginationRoot.cjs.map +1 -1
- package/dist/Pagination/PaginationRoot.js.map +1 -1
- package/dist/PinInput/PinInputInput.cjs +14 -6
- package/dist/PinInput/PinInputInput.cjs.map +1 -1
- package/dist/PinInput/PinInputInput.js +14 -6
- package/dist/PinInput/PinInputInput.js.map +1 -1
- package/dist/PinInput/PinInputRoot.cjs +4 -2
- package/dist/PinInput/PinInputRoot.cjs.map +1 -1
- package/dist/PinInput/PinInputRoot.js +4 -2
- package/dist/PinInput/PinInputRoot.js.map +1 -1
- package/dist/Popover/PopoverAnchor.cjs.map +1 -1
- package/dist/Popover/PopoverAnchor.js.map +1 -1
- package/dist/Popover/PopoverContentImpl.cjs +1 -1
- package/dist/Popover/PopoverContentImpl.js +1 -1
- package/dist/Popover/PopoverContentModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentModal.js.map +1 -1
- package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentNonModal.js.map +1 -1
- package/dist/Popover/PopoverRoot.cjs +1 -1
- package/dist/Popover/PopoverRoot.cjs.map +1 -1
- package/dist/Popover/PopoverRoot.js +1 -1
- package/dist/Popover/PopoverRoot.js.map +1 -1
- package/dist/Popover/PopoverTrigger.cjs.map +1 -1
- package/dist/Popover/PopoverTrigger.js.map +1 -1
- package/dist/Popper/PopperAnchor.cjs.map +1 -1
- package/dist/Popper/PopperAnchor.js.map +1 -1
- package/dist/Popper/PopperArrow.cjs.map +1 -1
- package/dist/Popper/PopperArrow.js.map +1 -1
- package/dist/Popper/PopperContent.cjs.map +1 -1
- package/dist/Popper/PopperContent.js.map +1 -1
- package/dist/Presence/Presence.cjs.map +1 -1
- package/dist/Presence/Presence.js.map +1 -1
- package/dist/Presence/usePresence.cjs.map +1 -1
- package/dist/Presence/usePresence.js.map +1 -1
- package/dist/Primitive/Slot.cjs +1 -9
- package/dist/Primitive/Slot.cjs.map +1 -1
- package/dist/Primitive/Slot.js +1 -9
- package/dist/Primitive/Slot.js.map +1 -1
- package/dist/Progress/ProgressRoot.cjs +3 -2
- package/dist/Progress/ProgressRoot.cjs.map +1 -1
- package/dist/Progress/ProgressRoot.js +3 -2
- package/dist/Progress/ProgressRoot.js.map +1 -1
- package/dist/RadioGroup/Radio.cjs +2 -0
- package/dist/RadioGroup/Radio.cjs.map +1 -1
- package/dist/RadioGroup/Radio.js +2 -0
- package/dist/RadioGroup/Radio.js.map +1 -1
- package/dist/RadioGroup/RadioGroupItem.cjs.map +1 -1
- package/dist/RadioGroup/RadioGroupItem.js.map +1 -1
- package/dist/RadioGroup/RadioGroupRoot.cjs.map +1 -1
- package/dist/RadioGroup/RadioGroupRoot.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCell.cjs +2 -2
- package/dist/RangeCalendar/RangeCalendarCell.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCell.js +2 -2
- package/dist/RangeCalendar/RangeCalendarCell.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +28 -9
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js +28 -9
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarHeading.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarHeading.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.cjs +26 -9
- package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +26 -9
- package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs +21 -4
- package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js +21 -4
- package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
- package/dist/RovingFocus/RovingFocusGroup.cjs +1 -1
- package/dist/RovingFocus/RovingFocusGroup.cjs.map +1 -1
- package/dist/RovingFocus/RovingFocusGroup.js +1 -1
- package/dist/RovingFocus/RovingFocusGroup.js.map +1 -1
- package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
- package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaCornerImpl.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaCornerImpl.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.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarAuto.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarAuto.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarHover.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarHover.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarScroll.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarX.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarX.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarY.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarY.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaThumb.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaThumb.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaViewport.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaViewport.js.map +1 -1
- package/dist/Select/BubbleSelect.cjs.map +1 -1
- package/dist/Select/BubbleSelect.js.map +1 -1
- package/dist/Select/SelectContent.cjs.map +1 -1
- package/dist/Select/SelectContent.js.map +1 -1
- package/dist/Select/SelectContentImpl.cjs +2 -2
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +2 -2
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectItem.cjs.map +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 +1 -1
- package/dist/Select/SelectItemAlignedPosition.js.map +1 -1
- package/dist/Select/SelectItemText.cjs.map +1 -1
- package/dist/Select/SelectItemText.js.map +1 -1
- package/dist/Select/SelectProvider.cjs.map +1 -1
- package/dist/Select/SelectProvider.js.map +1 -1
- package/dist/Select/SelectRoot.cjs +3 -1
- package/dist/Select/SelectRoot.cjs.map +1 -1
- package/dist/Select/SelectRoot.js +3 -1
- package/dist/Select/SelectRoot.js.map +1 -1
- package/dist/Select/SelectScrollButtonImpl.cjs.map +1 -1
- package/dist/Select/SelectScrollButtonImpl.js.map +1 -1
- package/dist/Select/SelectTrigger.cjs.map +1 -1
- package/dist/Select/SelectTrigger.js.map +1 -1
- package/dist/Select/SelectValue.cjs.map +1 -1
- package/dist/Select/SelectValue.js.map +1 -1
- package/dist/Select/SelectViewport.cjs.map +1 -1
- package/dist/Select/SelectViewport.js.map +1 -1
- package/dist/Slider/SliderHorizontal.cjs +7 -4
- package/dist/Slider/SliderHorizontal.cjs.map +1 -1
- package/dist/Slider/SliderHorizontal.js +7 -4
- package/dist/Slider/SliderHorizontal.js.map +1 -1
- package/dist/Slider/SliderRange.cjs +2 -2
- package/dist/Slider/SliderRange.cjs.map +1 -1
- package/dist/Slider/SliderRange.js +2 -2
- package/dist/Slider/SliderRange.js.map +1 -1
- package/dist/Slider/SliderRoot.cjs.map +1 -1
- package/dist/Slider/SliderRoot.js.map +1 -1
- package/dist/Slider/SliderThumb.cjs.map +1 -1
- package/dist/Slider/SliderThumb.js.map +1 -1
- package/dist/Slider/SliderThumbImpl.cjs +3 -3
- package/dist/Slider/SliderThumbImpl.cjs.map +1 -1
- package/dist/Slider/SliderThumbImpl.js +3 -3
- package/dist/Slider/SliderThumbImpl.js.map +1 -1
- package/dist/Slider/SliderVertical.cjs +7 -4
- package/dist/Slider/SliderVertical.cjs.map +1 -1
- package/dist/Slider/SliderVertical.js +7 -4
- package/dist/Slider/SliderVertical.js.map +1 -1
- package/dist/Slider/utils.cjs +1 -1
- package/dist/Slider/utils.cjs.map +1 -1
- package/dist/Slider/utils.js +1 -1
- package/dist/Slider/utils.js.map +1 -1
- package/dist/Splitter/SplitterGroup.cjs.map +1 -1
- package/dist/Splitter/SplitterGroup.js.map +1 -1
- package/dist/Splitter/SplitterPanel.cjs +16 -10
- package/dist/Splitter/SplitterPanel.cjs.map +1 -1
- package/dist/Splitter/SplitterPanel.js +16 -10
- package/dist/Splitter/SplitterPanel.js.map +1 -1
- package/dist/Stepper/StepperIndicator.cjs.map +1 -1
- package/dist/Stepper/StepperIndicator.js.map +1 -1
- package/dist/Stepper/StepperItem.cjs.map +1 -1
- package/dist/Stepper/StepperItem.js.map +1 -1
- package/dist/Stepper/StepperRoot.cjs +31 -4
- package/dist/Stepper/StepperRoot.cjs.map +1 -1
- package/dist/Stepper/StepperRoot.js +31 -4
- package/dist/Stepper/StepperRoot.js.map +1 -1
- package/dist/Stepper/StepperTrigger.cjs.map +1 -1
- package/dist/Stepper/StepperTrigger.js.map +1 -1
- package/dist/Switch/SwitchRoot.cjs.map +1 -1
- package/dist/Switch/SwitchRoot.js.map +1 -1
- package/dist/Tabs/TabsContent.cjs.map +1 -1
- package/dist/Tabs/TabsContent.js.map +1 -1
- package/dist/Tabs/TabsIndicator.cjs.map +1 -1
- package/dist/Tabs/TabsIndicator.js.map +1 -1
- package/dist/Tabs/TabsList.cjs.map +1 -1
- package/dist/Tabs/TabsList.js.map +1 -1
- package/dist/Tabs/TabsRoot.cjs.map +1 -1
- package/dist/Tabs/TabsRoot.js.map +1 -1
- package/dist/Tabs/TabsTrigger.cjs.map +1 -1
- package/dist/Tabs/TabsTrigger.js.map +1 -1
- package/dist/TagsInput/TagsInputInput.cjs +1 -0
- package/dist/TagsInput/TagsInputInput.cjs.map +1 -1
- package/dist/TagsInput/TagsInputInput.js +1 -0
- package/dist/TagsInput/TagsInputInput.js.map +1 -1
- package/dist/TagsInput/TagsInputItem.cjs.map +1 -1
- package/dist/TagsInput/TagsInputItem.js.map +1 -1
- package/dist/TagsInput/TagsInputItemDelete.cjs.map +1 -1
- package/dist/TagsInput/TagsInputItemDelete.js.map +1 -1
- package/dist/TagsInput/TagsInputRoot.cjs +1 -1
- package/dist/TagsInput/TagsInputRoot.cjs.map +1 -1
- package/dist/TagsInput/TagsInputRoot.js +1 -1
- package/dist/TagsInput/TagsInputRoot.js.map +1 -1
- package/dist/TimeField/TimeFieldInput.cjs +1 -0
- package/dist/TimeField/TimeFieldInput.cjs.map +1 -1
- package/dist/TimeField/TimeFieldInput.js +1 -0
- package/dist/TimeField/TimeFieldInput.js.map +1 -1
- package/dist/TimeField/TimeFieldRoot.cjs +13 -4
- package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
- package/dist/TimeField/TimeFieldRoot.js +13 -4
- package/dist/TimeField/TimeFieldRoot.js.map +1 -1
- package/dist/Toast/ToastAnnounce.cjs.map +1 -1
- package/dist/Toast/ToastAnnounce.js.map +1 -1
- package/dist/Toast/ToastRoot.cjs.map +1 -1
- package/dist/Toast/ToastRoot.js.map +1 -1
- package/dist/Toast/ToastRootImpl.cjs +1 -1
- package/dist/Toast/ToastRootImpl.cjs.map +1 -1
- package/dist/Toast/ToastRootImpl.js +1 -1
- package/dist/Toast/ToastRootImpl.js.map +1 -1
- package/dist/Toast/ToastViewport.cjs +2 -2
- package/dist/Toast/ToastViewport.cjs.map +1 -1
- package/dist/Toast/ToastViewport.js +2 -2
- package/dist/Toast/ToastViewport.js.map +1 -1
- package/dist/Toggle/Toggle.cjs.map +1 -1
- package/dist/Toggle/Toggle.js.map +1 -1
- package/dist/ToggleGroup/ToggleGroupItem.cjs.map +1 -1
- package/dist/ToggleGroup/ToggleGroupItem.js.map +1 -1
- package/dist/ToggleGroup/ToggleGroupRoot.cjs.map +1 -1
- package/dist/ToggleGroup/ToggleGroupRoot.js.map +1 -1
- package/dist/Toolbar/ToolbarRoot.cjs.map +1 -1
- package/dist/Toolbar/ToolbarRoot.js.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs +2 -2
- package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.js +2 -2
- package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
- package/dist/Tooltip/TooltipRoot.cjs +1 -1
- package/dist/Tooltip/TooltipRoot.cjs.map +1 -1
- package/dist/Tooltip/TooltipRoot.js +1 -1
- package/dist/Tooltip/TooltipRoot.js.map +1 -1
- package/dist/Tooltip/TooltipTrigger.cjs +1 -1
- package/dist/Tooltip/TooltipTrigger.cjs.map +1 -1
- package/dist/Tooltip/TooltipTrigger.js +1 -1
- package/dist/Tooltip/TooltipTrigger.js.map +1 -1
- package/dist/Tree/TreeItem.cjs +4 -1
- package/dist/Tree/TreeItem.cjs.map +1 -1
- package/dist/Tree/TreeItem.js +4 -1
- package/dist/Tree/TreeItem.js.map +1 -1
- package/dist/Tree/TreeRoot.cjs +29 -3
- package/dist/Tree/TreeRoot.cjs.map +1 -1
- package/dist/Tree/TreeRoot.js +29 -3
- package/dist/Tree/TreeRoot.js.map +1 -1
- package/dist/Tree/TreeVirtualizer.cjs +2 -2
- package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
- package/dist/Tree/TreeVirtualizer.js +2 -2
- package/dist/Tree/TreeVirtualizer.js.map +1 -1
- package/dist/Viewport/Viewport.cjs.map +1 -1
- package/dist/Viewport/Viewport.js.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInputBubble.cjs.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInputBubble.js.map +1 -1
- package/dist/component/BaseSeparator.cjs.map +1 -1
- package/dist/component/BaseSeparator.js.map +1 -1
- package/dist/date/calendar.cjs.map +1 -1
- package/dist/date/calendar.js.map +1 -1
- package/dist/date/parser.cjs +22 -7
- package/dist/date/parser.cjs.map +1 -1
- package/dist/date/parser.js +23 -8
- package/dist/date/parser.js.map +1 -1
- package/dist/date/useDateField.cjs +21 -6
- package/dist/date/useDateField.cjs.map +1 -1
- package/dist/date/useDateField.js +21 -6
- package/dist/date/useDateField.js.map +1 -1
- package/dist/date/utils.cjs +31 -2
- package/dist/date/utils.cjs.map +1 -1
- package/dist/date/utils.js +30 -3
- package/dist/date/utils.js.map +1 -1
- package/dist/index.d.ts +495 -353
- package/dist/shared/useBodyScrollLock.cjs +2 -2
- package/dist/shared/useBodyScrollLock.cjs.map +1 -1
- package/dist/shared/useBodyScrollLock.js +2 -2
- package/dist/shared/useBodyScrollLock.js.map +1 -1
- package/dist/shared/useDateFormatter.cjs +12 -10
- package/dist/shared/useDateFormatter.cjs.map +1 -1
- package/dist/shared/useDateFormatter.js +12 -10
- package/dist/shared/useDateFormatter.js.map +1 -1
- package/dist/shared/useDirection.cjs.map +1 -1
- package/dist/shared/useDirection.js.map +1 -1
- package/dist/shared/useGraceArea.cjs.map +1 -1
- package/dist/shared/useGraceArea.js.map +1 -1
- package/dist/shared/useId.cjs +2 -2
- package/dist/shared/useId.cjs.map +1 -1
- package/dist/shared/useId.js +2 -2
- package/dist/shared/useId.js.map +1 -1
- package/dist/shared/useLocale.cjs.map +1 -1
- package/dist/shared/useLocale.js.map +1 -1
- package/dist/shared/useNonce.cjs.map +1 -1
- package/dist/shared/useNonce.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineComponent, toRefs, ref, computed, watch, onMounted, createBlock, openBlock, unref, withCtx, createElementVNode, renderSlot, toDisplayString } from 'vue';
|
|
2
2
|
import { useVModel, useEventListener } from '@vueuse/core';
|
|
3
|
+
import { isEqualDay } from '@internationalized/date';
|
|
3
4
|
import { u as useCalendar } from '../Calendar/useCalendar.js';
|
|
4
5
|
import { n as getDefaultDate, b as isBefore } from '../date/comparators.js';
|
|
5
|
-
import { isEqualDay } from '@internationalized/date';
|
|
6
6
|
import { u as useRangeCalendarState } from './useRangeCalendar.js';
|
|
7
7
|
import { u as usePrimitiveElement } from '../Primitive/usePrimitiveElement.js';
|
|
8
8
|
import { u as useDirection } from '../shared/useDirection.js';
|
|
@@ -29,6 +29,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
29
29
|
allowNonContiguousRanges: { type: Boolean, default: false },
|
|
30
30
|
pagedNavigation: { type: Boolean, default: false },
|
|
31
31
|
preventDeselect: { type: Boolean, default: false },
|
|
32
|
+
maximumDays: { default: void 0 },
|
|
32
33
|
weekStartsOn: { default: 0 },
|
|
33
34
|
weekdayFormat: { default: "narrow" },
|
|
34
35
|
calendarLabel: {},
|
|
@@ -46,6 +47,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
46
47
|
dir: {},
|
|
47
48
|
nextPage: {},
|
|
48
49
|
prevPage: {},
|
|
50
|
+
disableDaysOutsideCurrentView: { type: Boolean, default: false },
|
|
51
|
+
fixedDate: {},
|
|
49
52
|
asChild: { type: Boolean },
|
|
50
53
|
as: { default: "div" }
|
|
51
54
|
},
|
|
@@ -73,7 +76,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
73
76
|
locale: propLocale,
|
|
74
77
|
nextPage: propsNextPage,
|
|
75
78
|
prevPage: propsPrevPage,
|
|
76
|
-
allowNonContiguousRanges
|
|
79
|
+
allowNonContiguousRanges,
|
|
80
|
+
disableDaysOutsideCurrentView,
|
|
81
|
+
fixedDate,
|
|
82
|
+
maximumDays
|
|
77
83
|
} = toRefs(props);
|
|
78
84
|
const { primitiveElement, currentElement: parentElement } = usePrimitiveElement();
|
|
79
85
|
const dir = useDirection(propDir);
|
|
@@ -85,7 +91,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
85
91
|
defaultValue: props.defaultValue ?? { start: void 0, end: void 0 },
|
|
86
92
|
passive: props.modelValue === void 0
|
|
87
93
|
});
|
|
88
|
-
const currentModelValue = computed(
|
|
94
|
+
const currentModelValue = computed(
|
|
95
|
+
() => isNullish(modelValue.value) ? { start: void 0, end: void 0 } : modelValue.value
|
|
96
|
+
);
|
|
89
97
|
const defaultDate = getDefaultDate({
|
|
90
98
|
defaultPlaceholder: props.placeholder,
|
|
91
99
|
defaultValue: currentModelValue.value.start,
|
|
@@ -138,7 +146,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
138
146
|
isSelectionStart,
|
|
139
147
|
isSelectionEnd,
|
|
140
148
|
isHighlightedStart,
|
|
141
|
-
isHighlightedEnd
|
|
149
|
+
isHighlightedEnd,
|
|
150
|
+
isDateDisabled: rangeIsDateDisabled
|
|
142
151
|
} = useRangeCalendarState({
|
|
143
152
|
start: startValue,
|
|
144
153
|
end: endValue,
|
|
@@ -146,7 +155,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
146
155
|
isDateUnavailable,
|
|
147
156
|
isDateHighlightable: propsIsDateHighlightable.value,
|
|
148
157
|
focusedValue,
|
|
149
|
-
allowNonContiguousRanges
|
|
158
|
+
allowNonContiguousRanges,
|
|
159
|
+
fixedDate,
|
|
160
|
+
maximumDays
|
|
150
161
|
});
|
|
151
162
|
watch(modelValue, (_modelValue, _prevValue) => {
|
|
152
163
|
if (!_prevValue?.start && _modelValue?.start || !_modelValue || !_modelValue.start || startValue.value && !isEqualDay(_modelValue.start, startValue.value)) {
|
|
@@ -163,13 +174,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
163
174
|
});
|
|
164
175
|
watch([startValue, endValue], ([_startValue, _endValue]) => {
|
|
165
176
|
const value = currentModelValue.value;
|
|
166
|
-
if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))
|
|
177
|
+
if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue)) {
|
|
167
178
|
return;
|
|
179
|
+
}
|
|
168
180
|
isEditing.value = true;
|
|
169
181
|
if (_startValue && _endValue) {
|
|
170
182
|
isEditing.value = false;
|
|
171
|
-
if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))
|
|
183
|
+
if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue)) {
|
|
172
184
|
return;
|
|
185
|
+
}
|
|
173
186
|
if (isBefore(_endValue, _startValue)) {
|
|
174
187
|
modelValue.value = {
|
|
175
188
|
start: _endValue.copy(),
|
|
@@ -212,7 +225,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
212
225
|
fullCalendarLabel,
|
|
213
226
|
headingValue,
|
|
214
227
|
isInvalid,
|
|
215
|
-
isDateDisabled,
|
|
228
|
+
isDateDisabled: rangeIsDateDisabled,
|
|
229
|
+
allowNonContiguousRanges,
|
|
216
230
|
highlightedRange,
|
|
217
231
|
focusedValue,
|
|
218
232
|
lastPressedDateValue,
|
|
@@ -229,7 +243,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
229
243
|
locale,
|
|
230
244
|
dir,
|
|
231
245
|
isHighlightedStart,
|
|
232
|
-
isHighlightedEnd
|
|
246
|
+
isHighlightedEnd,
|
|
247
|
+
disableDaysOutsideCurrentView,
|
|
248
|
+
fixedDate,
|
|
249
|
+
maximumDays
|
|
233
250
|
});
|
|
234
251
|
onMounted(() => {
|
|
235
252
|
if (initialFocus.value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeCalendarRoot.js","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Grid, Matcher, WeekDayFormat } from '@/date'\n\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Formatter } from '@/shared'\nimport type { DateRange } from '@/shared/date'\nimport type { Direction } from '@/shared/types'\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport { isBefore } from '@/date'\nimport { createContext, isNullish, useDirection, useKbd, useLocale } from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { isEqualDay } from '@internationalized/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n grid: Ref<Grid<DateValue>[]>\n weekDays: Ref<string[]>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isDateHighlightable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (nextPageFunc?: (date: DateValue) => DateValue) => boolean\n isPrevButtonDisabled: (prevPageFunc?: (date: DateValue) => DateValue) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** 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 */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** A function that returns whether or not a date is hightable */\n isDateHighlightable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { useEventListener, useVModel } from '@vueuse/core'\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n isDateHighlightable: undefined,\n allowNonContiguousRanges: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateHighlightable: propsIsDateHighlightable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() => isNullish(modelValue.value) ? { start: undefined, end: undefined } : modelValue.value)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<DateValue | undefined>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n isDateHighlightable,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n isDateHighlightable: propsIsDateHighlightable.value,\n focusedValue,\n allowNonContiguousRanges,\n})\n\nwatch(modelValue, (_modelValue, _prevValue) => {\n if ((!_prevValue?.start && _modelValue?.start)\n || !_modelValue\n || !_modelValue.start\n || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))\n ) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n\n if ((!_prevValue?.end && _modelValue.end)\n || !_modelValue\n || !_modelValue.end\n || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))\n ) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n isDateHighlightable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n grid,\n weekDays: weekdays,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; white-space: nowrap; width: 1px;\">\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RangeCalendarRoot.js","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { Grid, Matcher, WeekDayFormat } from '@/date'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Formatter } from '@/shared'\nimport type { DateRange } from '@/shared/date'\nimport type { Direction } from '@/shared/types'\nimport { isEqualDay } from '@internationalized/date'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport { isBefore } from '@/date'\nimport {\n createContext,\n isNullish,\n useDirection,\n useKbd,\n useLocale,\n} from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n grid: Ref<Grid<DateValue>[]>\n weekDays: Ref<string[]>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isDateHighlightable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n allowNonContiguousRanges: Ref<boolean>\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (\n nextPageFunc?: (date: DateValue) => DateValue\n ) => boolean\n isPrevButtonDisabled: (\n prevPageFunc?: (date: DateValue) => DateValue\n ) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n disableDaysOutsideCurrentView: Ref<boolean>\n fixedDate: Ref<'start' | 'end' | undefined>\n maximumDays: Ref<number | undefined>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** 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 */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The maximum number of days that can be selected in a range */\n maximumDays?: number\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** A function that returns whether or not a date is hightable */\n isDateHighlightable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n /** Whether or not to disable days outside the current view. */\n disableDaysOutsideCurrentView?: boolean\n /** Which part of the range should be fixed */\n fixedDate?: 'start' | 'end'\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useEventListener, useVModel } from '@vueuse/core'\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n isDateHighlightable: undefined,\n allowNonContiguousRanges: false,\n maximumDays: undefined,\n disableDaysOutsideCurrentView: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateHighlightable: propsIsDateHighlightable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n disableDaysOutsideCurrentView,\n fixedDate,\n maximumDays,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() =>\n isNullish(modelValue.value)\n ? { start: undefined, end: undefined }\n : modelValue.value,\n)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<\n DateValue | undefined\n>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n isDateHighlightable,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n isDateDisabled: rangeIsDateDisabled,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n isDateHighlightable: propsIsDateHighlightable.value,\n focusedValue,\n allowNonContiguousRanges,\n fixedDate,\n maximumDays,\n})\n\nwatch(modelValue, (_modelValue, _prevValue) => {\n if (\n (!_prevValue?.start && _modelValue?.start)\n || !_modelValue\n || !_modelValue.start\n || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))\n ) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n\n if (\n (!_prevValue?.end && _modelValue.end)\n || !_modelValue\n || !_modelValue.end\n || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))\n ) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (\n value\n && value.start\n && value.end\n && _startValue\n && _endValue\n && isEqualDay(value.start, _startValue)\n && isEqualDay(value.end, _endValue)\n ) {\n return\n }\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (\n value.start\n && value.end\n && isEqualDay(value.start, _startValue)\n && isEqualDay(value.end, _endValue)\n ) {\n return\n }\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n isDateHighlightable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n grid,\n weekDays: weekdays,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled: rangeIsDateDisabled,\n allowNonContiguousRanges,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n disableDaysOutsideCurrentView,\n fixedDate,\n maximumDays,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div\n style=\"\n border: 0px;\n clip: rect(0px, 0px, 0px, 0px);\n clip-path: inset(50%);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0px;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n \"\n >\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAyIO,MAAM,CAAC,8BAAA,EAAgC,+BAA+B,CAAA,GACzE,cAAwC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQ/D,IAAA,MAAM,KAAQ,GAAA,OAAA;AAoBd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAqBd,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAmB,EAAA,sBAAA;AAAA,MACnB,mBAAqB,EAAA,wBAAA;AAAA,MACrB,cAAgB,EAAA,mBAAA;AAAA,MAChB,aAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAK,EAAA,OAAA;AAAA,MACL,MAAQ,EAAA,UAAA;AAAA,MACR,QAAU,EAAA,aAAA;AAAA,MACV,QAAU,EAAA,aAAA;AAAA,MACV,wBAAA;AAAA,MACA,6BAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,OAAO,KAAK,CAAA;AAEhB,IAAA,MAAM,EAAE,gBAAA,EAAkB,cAAgB,EAAA,aAAA,KACtC,mBAAoB,EAAA;AACxB,IAAM,MAAA,GAAA,GAAM,aAAa,OAAO,CAAA;AAChC,IAAM,MAAA,MAAA,GAAS,UAAU,UAAU,CAAA;AAEnC,IAAA,MAAM,uBAAuB,GAAI,EAAA;AACjC,IAAA,MAAM,eAAe,GAAI,EAAA;AACzB,IAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA;AAE3B,IAAA,MAAM,UAAa,GAAA,SAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAO,EAAA;AAAA,MACvD,cAAc,KAAM,CAAA,YAAA,IAAgB,EAAE,KAAO,EAAA,MAAA,EAAW,KAAK,MAAU,EAAA;AAAA,MACvE,OAAA,EAAU,MAAM,UAAe,KAAA;AAAA,KAChC,CAAA;AAED,IAAA,MAAM,iBAAoB,GAAA,QAAA;AAAA,MAAS,MACjC,SAAU,CAAA,UAAA,CAAW,KAAK,CAAA,GACtB,EAAE,KAAA,EAAO,MAAW,EAAA,GAAA,EAAK,MAAU,EAAA,GACnC,UAAW,CAAA;AAAA,KACjB;AAEA,IAAA,MAAM,cAAc,cAAe,CAAA;AAAA,MACjC,oBAAoB,KAAM,CAAA,WAAA;AAAA,MAC1B,YAAA,EAAc,kBAAkB,KAAM,CAAA,KAAA;AAAA,MACtC,QAAQ,KAAM,CAAA;AAAA,KACf,CAAA;AAED,IAAA,MAAM,UAAa,GAAA,GAAA,CAAI,iBAAkB,CAAA,KAAA,CAAM,KAAK,CAAA;AAGpD,IAAA,MAAM,QAAW,GAAA,GAAA,CAAI,iBAAkB,CAAA,KAAA,CAAM,GAAG,CAAA;AAEhD,IAAA,MAAM,WAAc,GAAA,SAAA,CAAU,KAAO,EAAA,aAAA,EAAe,KAAO,EAAA;AAAA,MACzD,YAAc,EAAA,KAAA,CAAM,kBAAsB,IAAA,WAAA,CAAY,IAAK,EAAA;AAAA,MAC3D,OAAA,EAAU,MAAM,WAAgB,KAAA;AAAA,KACjC,CAAA;AAED,IAAA,SAAS,oBAAoB,KAAkB,EAAA;AAC7C,MAAY,WAAA,CAAA,KAAA,GAAQ,MAAM,IAAK,EAAA;AAAA;AAGjC,IAAM,MAAA;AAAA,MACJ,iBAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,oBAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,QACE,WAAY,CAAA;AAAA,MACd,MAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAgB,mBAAoB,CAAA,KAAA;AAAA,MACpC,mBAAmB,sBAAuB,CAAA,KAAA;AAAA,MAC1C,aAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA,MACV,QAAU,EAAA;AAAA,KACX,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,UAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,qBAAsB,CAAA;AAAA,MACxB,KAAO,EAAA,UAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,qBAAqB,wBAAyB,CAAA,KAAA;AAAA,MAC9C,YAAA;AAAA,MACA,wBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAM,KAAA,CAAA,UAAA,EAAY,CAAC,WAAA,EAAa,UAAe,KAAA;AAC7C,MAAA,IACG,CAAC,UAAY,EAAA,KAAA,IAAS,aAAa,KACjC,IAAA,CAAC,eACD,CAAC,WAAA,CAAY,KACZ,IAAA,UAAA,CAAW,SAAS,CAAC,UAAA,CAAW,YAAY,KAAO,EAAA,UAAA,CAAW,KAAK,CACvE,EAAA;AACA,QAAW,UAAA,CAAA,KAAA,GAAQ,WAAa,EAAA,KAAA,EAAO,IAAO,IAAA;AAAA;AAGhD,MAAA,IACG,CAAC,UAAY,EAAA,GAAA,IAAO,YAAY,GAC9B,IAAA,CAAC,eACD,CAAC,WAAA,CAAY,GACZ,IAAA,QAAA,CAAS,SAAS,CAAC,UAAA,CAAW,YAAY,GAAK,EAAA,QAAA,CAAS,KAAK,CACjE,EAAA;AACA,QAAS,QAAA,CAAA,KAAA,GAAQ,WAAa,EAAA,GAAA,EAAK,IAAO,IAAA;AAAA;AAC5C,KACD,CAAA;AAED,IAAM,KAAA,CAAA,UAAA,EAAY,CAAC,WAAgB,KAAA;AACjC,MAAA,IAAI,WAAe,IAAA,CAAC,UAAW,CAAA,WAAA,EAAa,YAAY,KAAK,CAAA;AAC3D,QAAA,mBAAA,CAAoB,WAAW,CAAA;AAEjC,MAAA,KAAA,CAAM,qBAAqB,WAAW,CAAA;AAAA,KACvC,CAAA;AAED,IAAM,KAAA,CAAA,CAAC,YAAY,QAAQ,CAAA,EAAG,CAAC,CAAC,WAAA,EAAa,SAAS,CAAM,KAAA;AAC1D,MAAA,MAAM,QAAQ,iBAAkB,CAAA,KAAA;AAEhC,MAAA,IACE,SACG,KAAM,CAAA,KAAA,IACN,KAAM,CAAA,GAAA,IACN,eACA,SACA,IAAA,UAAA,CAAW,KAAM,CAAA,KAAA,EAAO,WAAW,CACnC,IAAA,UAAA,CAAW,KAAM,CAAA,GAAA,EAAK,SAAS,CAClC,EAAA;AACA,QAAA;AAAA;AAGF,MAAA,SAAA,CAAU,KAAQ,GAAA,IAAA;AAClB,MAAA,IAAI,eAAe,SAAW,EAAA;AAC5B,QAAA,SAAA,CAAU,KAAQ,GAAA,KAAA;AAClB,QAAA,IACE,KAAM,CAAA,KAAA,IACH,KAAM,CAAA,GAAA,IACN,UAAW,CAAA,KAAA,CAAM,KAAO,EAAA,WAAW,CACnC,IAAA,UAAA,CAAW,KAAM,CAAA,GAAA,EAAK,SAAS,CAClC,EAAA;AACA,UAAA;AAAA;AAEF,QAAI,IAAA,QAAA,CAAS,SAAW,EAAA,WAAW,CAAG,EAAA;AACpC,UAAA,UAAA,CAAW,KAAQ,GAAA;AAAA,YACjB,KAAA,EAAO,UAAU,IAAK,EAAA;AAAA,YACtB,GAAA,EAAK,YAAY,IAAK;AAAA,WACxB;AAAA,SAEG,MAAA;AACH,UAAA,UAAA,CAAW,KAAQ,GAAA;AAAA,YACjB,KAAA,EAAO,YAAY,IAAK,EAAA;AAAA,YACxB,GAAA,EAAK,UAAU,IAAK;AAAA,WACtB;AAAA;AACF;AACF,KACD,CAAA;AAED,IAAA,MAAM,MAAM,MAAO,EAAA;AACnB,IAAiB,gBAAA,CAAA,SAAA,EAAW,CAAC,EAAO,KAAA;AAClC,MAAA,IAAI,EAAG,CAAA,GAAA,KAAQ,GAAI,CAAA,MAAA,IAAU,UAAU,KAAO,EAAA;AAE5C,QAAA,UAAA,CAAW,KAAQ,GAAA,UAAA,CAAW,KAAM,CAAA,KAAA,EAAO,IAAK,EAAA;AAChD,QAAA,QAAA,CAAS,KAAQ,GAAA,UAAA,CAAW,KAAM,CAAA,GAAA,EAAK,IAAK,EAAA;AAAA;AAC9C,KACD,CAAA;AAED,IAAgC,+BAAA,CAAA;AAAA,MAC9B,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAU,EAAA,QAAA;AAAA,MACV,YAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAgB,EAAA,mBAAA;AAAA,MAChB,wBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,6BAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,YAAa,CAAA,KAAA;AACf,QAAA,0BAAA,CAA2B,cAAc,KAAK,CAAA;AAAA,KACjD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const date_comparators = require('../date/comparators.cjs');
|
|
4
3
|
const date = require('@internationalized/date');
|
|
5
4
|
const vue = require('vue');
|
|
5
|
+
const date_comparators = require('../date/comparators.cjs');
|
|
6
6
|
|
|
7
7
|
function useRangeCalendarState(props) {
|
|
8
8
|
const isStartInvalid = vue.computed(() => {
|
|
@@ -47,13 +47,22 @@ function useRangeCalendarState(props) {
|
|
|
47
47
|
return date_comparators.isBetween(date$1, props.start.value, props.end.value);
|
|
48
48
|
return false;
|
|
49
49
|
};
|
|
50
|
+
const rangeIsDateDisabled = (date$1) => {
|
|
51
|
+
if (props.isDateDisabled(date$1))
|
|
52
|
+
return true;
|
|
53
|
+
if (!props.maximumDays?.value || !props.start.value || props.end.value || date.isSameDay(props.start.value, date$1))
|
|
54
|
+
return false;
|
|
55
|
+
if (Math.abs(date$1.compare(props.start.value)) > props.maximumDays.value)
|
|
56
|
+
return true;
|
|
57
|
+
return false;
|
|
58
|
+
};
|
|
50
59
|
const isDateHighlightable = (date) => {
|
|
51
60
|
if (props.isDateHighlightable?.(date))
|
|
52
61
|
return true;
|
|
53
62
|
return false;
|
|
54
63
|
};
|
|
55
64
|
const highlightedRange = vue.computed(() => {
|
|
56
|
-
if (props.start.value && props.end.value)
|
|
65
|
+
if (props.start.value && props.end.value && !props.fixedDate.value)
|
|
57
66
|
return null;
|
|
58
67
|
if (!props.start.value || !props.focusedValue.value)
|
|
59
68
|
return null;
|
|
@@ -66,7 +75,14 @@ function useRangeCalendarState(props) {
|
|
|
66
75
|
end
|
|
67
76
|
};
|
|
68
77
|
}
|
|
69
|
-
|
|
78
|
+
if (props.maximumDays?.value && !props.end.value && Math.abs(end.compare(start)) > props.maximumDays.value) {
|
|
79
|
+
const cappedEnd = isStartBeforeFocused ? start.add({ days: props.maximumDays.value }) : start.subtract({ days: props.maximumDays.value });
|
|
80
|
+
return {
|
|
81
|
+
start,
|
|
82
|
+
end: cappedEnd
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const isValid = date_comparators.areAllDaysBetweenValid(start, end, props.allowNonContiguousRanges.value ? () => false : props.isDateUnavailable, rangeIsDateDisabled, props.isDateHighlightable);
|
|
70
86
|
if (isValid) {
|
|
71
87
|
return {
|
|
72
88
|
start,
|
|
@@ -93,7 +109,8 @@ function useRangeCalendarState(props) {
|
|
|
93
109
|
isSelectionStart,
|
|
94
110
|
isSelectionEnd,
|
|
95
111
|
isHighlightedStart,
|
|
96
|
-
isHighlightedEnd
|
|
112
|
+
isHighlightedEnd,
|
|
113
|
+
isDateDisabled: rangeIsDateDisabled
|
|
97
114
|
};
|
|
98
115
|
}
|
|
99
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRangeCalendar.cjs","sources":["../../src/RangeCalendar/useRangeCalendar.ts"],"sourcesContent":["/*\n * Adapted from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/range-calendar/create.ts\n*/\n\nimport type {
|
|
1
|
+
{"version":3,"file":"useRangeCalendar.cjs","sources":["../../src/RangeCalendar/useRangeCalendar.ts"],"sourcesContent":["/*\n * Adapted from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/range-calendar/create.ts\n*/\n\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { Matcher } from '@/date'\nimport { isSameDay } from '@internationalized/date'\nimport { computed } from 'vue'\nimport { areAllDaysBetweenValid, isBefore, isBetween } from '@/date'\n\nexport type UseRangeCalendarProps = {\n start: Ref<DateValue | undefined>\n end: Ref<DateValue | undefined>\n isDateDisabled: Matcher\n isDateUnavailable: Matcher\n isDateHighlightable?: Matcher\n focusedValue: Ref<DateValue | undefined>\n allowNonContiguousRanges: Ref<boolean>\n fixedDate: Ref<'start' | 'end' | undefined>\n maximumDays?: Ref<number | undefined>\n}\n\nexport function useRangeCalendarState(props: UseRangeCalendarProps) {\n const isStartInvalid = computed(() => {\n if (!props.start.value)\n return false\n if (props.isDateDisabled(props.start.value))\n return true\n return false\n })\n\n const isEndInvalid = computed(() => {\n if (!props.end.value)\n return false\n if (props.isDateDisabled(props.end.value))\n return true\n return false\n })\n\n const isInvalid = computed(\n () => {\n if (isStartInvalid.value || isEndInvalid.value)\n return false\n if (props.start.value && props.end.value && isBefore(props.end.value, props.start.value))\n return true\n return false\n },\n )\n\n const isSelectionStart = (date: DateValue) => {\n if (!props.start.value)\n return false\n return isSameDay(props.start.value, date)\n }\n\n const isSelectionEnd = (date: DateValue) => {\n if (!props.end.value)\n return false\n return isSameDay(props.end.value, date)\n }\n\n const isSelected = (date: DateValue) => {\n if (props.start.value && isSameDay(props.start.value, date))\n return true\n if (props.end.value && isSameDay(props.end.value, date))\n return true\n if (props.end.value && props.start.value)\n return isBetween(date, props.start.value, props.end.value)\n\n return false\n }\n\n // Check if a date exceeds maximum days limit from the start date\n const rangeIsDateDisabled = (date: DateValue) => {\n if (props.isDateDisabled(date))\n return true\n\n if (!props.maximumDays?.value || !props.start.value || props.end.value || isSameDay(props.start.value, date))\n return false\n\n // Check if exceeds maximum days limit\n if (Math.abs(date.compare(props.start.value)) > props.maximumDays.value)\n return true\n\n return false\n }\n\n const isDateHighlightable = (date: DateValue) => {\n if (props.isDateHighlightable?.(date))\n return true\n return false\n }\n\n const highlightedRange = computed(() => {\n if (props.start.value && props.end.value && !props.fixedDate.value)\n return null\n if (!props.start.value || !props.focusedValue.value)\n return null\n\n const isStartBeforeFocused = isBefore(props.start.value, props.focusedValue.value)\n const start = isStartBeforeFocused ? props.start.value : props.focusedValue.value\n const end = isStartBeforeFocused ? props.focusedValue.value : props.start.value\n\n if (isSameDay(start, end)) {\n return {\n start,\n end,\n }\n }\n\n // If maximum days is set and the range exceeds it, limit the highlight\n // We only apply this when we're in the middle of a selection (no end date yet)\n if (props.maximumDays?.value && !props.end.value && Math.abs(end.compare(start)) > props.maximumDays.value) {\n // Determine the direction of selection and limit to maximum days\n const cappedEnd = isStartBeforeFocused\n ? start.add({ days: props.maximumDays.value })\n : start.subtract({ days: props.maximumDays.value })\n\n return {\n start,\n end: cappedEnd,\n }\n }\n\n const isValid = areAllDaysBetweenValid(start, end, props.allowNonContiguousRanges.value ? () => false : props.isDateUnavailable, rangeIsDateDisabled, props.isDateHighlightable)\n if (isValid) {\n return {\n start,\n end,\n }\n }\n return null\n })\n\n const isHighlightedStart = (date: DateValue) => {\n if (!highlightedRange.value || !highlightedRange.value.start)\n return false\n return isSameDay(highlightedRange.value.start, date)\n }\n\n const isHighlightedEnd = (date: DateValue) => {\n if (!highlightedRange.value || !highlightedRange.value.end)\n return false\n return isSameDay(highlightedRange.value.end, date)\n }\n\n return {\n isInvalid,\n isSelected,\n isDateHighlightable,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n isDateDisabled: rangeIsDateDisabled,\n }\n}\n"],"names":["computed","isBefore","date","isSameDay","isBetween","areAllDaysBetweenValid"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { b as isBefore, m as areAllDaysBetweenValid, j as isBetween } from '../date/comparators.js';
|
|
2
1
|
import { isSameDay } from '@internationalized/date';
|
|
3
2
|
import { computed } from 'vue';
|
|
3
|
+
import { b as isBefore, m as areAllDaysBetweenValid, j as isBetween } from '../date/comparators.js';
|
|
4
4
|
|
|
5
5
|
function useRangeCalendarState(props) {
|
|
6
6
|
const isStartInvalid = computed(() => {
|
|
@@ -45,13 +45,22 @@ function useRangeCalendarState(props) {
|
|
|
45
45
|
return isBetween(date, props.start.value, props.end.value);
|
|
46
46
|
return false;
|
|
47
47
|
};
|
|
48
|
+
const rangeIsDateDisabled = (date) => {
|
|
49
|
+
if (props.isDateDisabled(date))
|
|
50
|
+
return true;
|
|
51
|
+
if (!props.maximumDays?.value || !props.start.value || props.end.value || isSameDay(props.start.value, date))
|
|
52
|
+
return false;
|
|
53
|
+
if (Math.abs(date.compare(props.start.value)) > props.maximumDays.value)
|
|
54
|
+
return true;
|
|
55
|
+
return false;
|
|
56
|
+
};
|
|
48
57
|
const isDateHighlightable = (date) => {
|
|
49
58
|
if (props.isDateHighlightable?.(date))
|
|
50
59
|
return true;
|
|
51
60
|
return false;
|
|
52
61
|
};
|
|
53
62
|
const highlightedRange = computed(() => {
|
|
54
|
-
if (props.start.value && props.end.value)
|
|
63
|
+
if (props.start.value && props.end.value && !props.fixedDate.value)
|
|
55
64
|
return null;
|
|
56
65
|
if (!props.start.value || !props.focusedValue.value)
|
|
57
66
|
return null;
|
|
@@ -64,7 +73,14 @@ function useRangeCalendarState(props) {
|
|
|
64
73
|
end
|
|
65
74
|
};
|
|
66
75
|
}
|
|
67
|
-
|
|
76
|
+
if (props.maximumDays?.value && !props.end.value && Math.abs(end.compare(start)) > props.maximumDays.value) {
|
|
77
|
+
const cappedEnd = isStartBeforeFocused ? start.add({ days: props.maximumDays.value }) : start.subtract({ days: props.maximumDays.value });
|
|
78
|
+
return {
|
|
79
|
+
start,
|
|
80
|
+
end: cappedEnd
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const isValid = areAllDaysBetweenValid(start, end, props.allowNonContiguousRanges.value ? () => false : props.isDateUnavailable, rangeIsDateDisabled, props.isDateHighlightable);
|
|
68
84
|
if (isValid) {
|
|
69
85
|
return {
|
|
70
86
|
start,
|
|
@@ -91,7 +107,8 @@ function useRangeCalendarState(props) {
|
|
|
91
107
|
isSelectionStart,
|
|
92
108
|
isSelectionEnd,
|
|
93
109
|
isHighlightedStart,
|
|
94
|
-
isHighlightedEnd
|
|
110
|
+
isHighlightedEnd,
|
|
111
|
+
isDateDisabled: rangeIsDateDisabled
|
|
95
112
|
};
|
|
96
113
|
}
|
|
97
114
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRangeCalendar.js","sources":["../../src/RangeCalendar/useRangeCalendar.ts"],"sourcesContent":["/*\n * Adapted from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/range-calendar/create.ts\n*/\n\nimport type {
|
|
1
|
+
{"version":3,"file":"useRangeCalendar.js","sources":["../../src/RangeCalendar/useRangeCalendar.ts"],"sourcesContent":["/*\n * Adapted from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/range-calendar/create.ts\n*/\n\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { Matcher } from '@/date'\nimport { isSameDay } from '@internationalized/date'\nimport { computed } from 'vue'\nimport { areAllDaysBetweenValid, isBefore, isBetween } from '@/date'\n\nexport type UseRangeCalendarProps = {\n start: Ref<DateValue | undefined>\n end: Ref<DateValue | undefined>\n isDateDisabled: Matcher\n isDateUnavailable: Matcher\n isDateHighlightable?: Matcher\n focusedValue: Ref<DateValue | undefined>\n allowNonContiguousRanges: Ref<boolean>\n fixedDate: Ref<'start' | 'end' | undefined>\n maximumDays?: Ref<number | undefined>\n}\n\nexport function useRangeCalendarState(props: UseRangeCalendarProps) {\n const isStartInvalid = computed(() => {\n if (!props.start.value)\n return false\n if (props.isDateDisabled(props.start.value))\n return true\n return false\n })\n\n const isEndInvalid = computed(() => {\n if (!props.end.value)\n return false\n if (props.isDateDisabled(props.end.value))\n return true\n return false\n })\n\n const isInvalid = computed(\n () => {\n if (isStartInvalid.value || isEndInvalid.value)\n return false\n if (props.start.value && props.end.value && isBefore(props.end.value, props.start.value))\n return true\n return false\n },\n )\n\n const isSelectionStart = (date: DateValue) => {\n if (!props.start.value)\n return false\n return isSameDay(props.start.value, date)\n }\n\n const isSelectionEnd = (date: DateValue) => {\n if (!props.end.value)\n return false\n return isSameDay(props.end.value, date)\n }\n\n const isSelected = (date: DateValue) => {\n if (props.start.value && isSameDay(props.start.value, date))\n return true\n if (props.end.value && isSameDay(props.end.value, date))\n return true\n if (props.end.value && props.start.value)\n return isBetween(date, props.start.value, props.end.value)\n\n return false\n }\n\n // Check if a date exceeds maximum days limit from the start date\n const rangeIsDateDisabled = (date: DateValue) => {\n if (props.isDateDisabled(date))\n return true\n\n if (!props.maximumDays?.value || !props.start.value || props.end.value || isSameDay(props.start.value, date))\n return false\n\n // Check if exceeds maximum days limit\n if (Math.abs(date.compare(props.start.value)) > props.maximumDays.value)\n return true\n\n return false\n }\n\n const isDateHighlightable = (date: DateValue) => {\n if (props.isDateHighlightable?.(date))\n return true\n return false\n }\n\n const highlightedRange = computed(() => {\n if (props.start.value && props.end.value && !props.fixedDate.value)\n return null\n if (!props.start.value || !props.focusedValue.value)\n return null\n\n const isStartBeforeFocused = isBefore(props.start.value, props.focusedValue.value)\n const start = isStartBeforeFocused ? props.start.value : props.focusedValue.value\n const end = isStartBeforeFocused ? props.focusedValue.value : props.start.value\n\n if (isSameDay(start, end)) {\n return {\n start,\n end,\n }\n }\n\n // If maximum days is set and the range exceeds it, limit the highlight\n // We only apply this when we're in the middle of a selection (no end date yet)\n if (props.maximumDays?.value && !props.end.value && Math.abs(end.compare(start)) > props.maximumDays.value) {\n // Determine the direction of selection and limit to maximum days\n const cappedEnd = isStartBeforeFocused\n ? start.add({ days: props.maximumDays.value })\n : start.subtract({ days: props.maximumDays.value })\n\n return {\n start,\n end: cappedEnd,\n }\n }\n\n const isValid = areAllDaysBetweenValid(start, end, props.allowNonContiguousRanges.value ? () => false : props.isDateUnavailable, rangeIsDateDisabled, props.isDateHighlightable)\n if (isValid) {\n return {\n start,\n end,\n }\n }\n return null\n })\n\n const isHighlightedStart = (date: DateValue) => {\n if (!highlightedRange.value || !highlightedRange.value.start)\n return false\n return isSameDay(highlightedRange.value.start, date)\n }\n\n const isHighlightedEnd = (date: DateValue) => {\n if (!highlightedRange.value || !highlightedRange.value.end)\n return false\n return isSameDay(highlightedRange.value.end, date)\n }\n\n return {\n isInvalid,\n isSelected,\n isDateHighlightable,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n isDateDisabled: rangeIsDateDisabled,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const vue = require('vue');
|
|
4
|
-
const Collection_Collection = require('../Collection/Collection.cjs');
|
|
5
4
|
const core = require('@vueuse/core');
|
|
5
|
+
const Collection_Collection = require('../Collection/Collection.cjs');
|
|
6
6
|
const RovingFocus_utils = require('./utils.cjs');
|
|
7
7
|
const shared_useDirection = require('../shared/useDirection.cjs');
|
|
8
8
|
const shared_createContext = require('../shared/createContext.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RovingFocusGroup.cjs","sources":["../../src/RovingFocus/RovingFocusGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {
|
|
1
|
+
{"version":3,"file":"RovingFocusGroup.cjs","sources":["../../src/RovingFocus/RovingFocusGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n Direction,\n Orientation,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useDirection } from '@/shared'\n\nexport interface RovingFocusGroupProps extends PrimitiveProps {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation\n /**\n * The direction of navigation between items.\n */\n dir?: Direction\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean\n /** The controlled value of the current stop item. Can be binded as `v-model`. */\n currentTabStopId?: string | null\n /**\n * The value of the current stop item.\n *\n * Use when you do not need to control the state of the stop item.\n */\n defaultCurrentTabStopId?: string\n /**\n * When `true`, will prevent scrolling to the focus item when focused.\n */\n preventScrollOnEntryFocus?: boolean\n}\n\nexport type RovingFocusGroupEmits = {\n 'entryFocus': [event: Event]\n 'update:currentTabStopId': [value: string | null | undefined]\n}\n\ninterface RovingContext {\n orientation: Ref<Orientation | undefined>\n dir: Ref<Direction>\n loop: Ref<boolean>\n currentTabStopId: Ref<string | null | undefined>\n onItemFocus: (tabStopId: string) => void\n onItemShiftTab: () => void\n onFocusableItemAdd: () => void\n onFocusableItemRemove: () => void\n}\n\nexport const [injectRovingFocusGroupContext, provideRovingFocusGroupContext]\n = createContext<RovingContext>('RovingFocusGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { ENTRY_FOCUS, EVENT_OPTIONS, focusFirst } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusGroupProps>(), {\n loop: false,\n orientation: undefined,\n preventScrollOnEntryFocus: false,\n})\nconst emits = defineEmits<RovingFocusGroupEmits>()\n\nconst { loop, orientation, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst currentTabStopId = useVModel(props, 'currentTabStopId', emits, {\n defaultValue: props.defaultCurrentTabStopId,\n passive: (props.currentTabStopId === undefined) as false,\n})\nconst isTabbingBackOut = ref(false)\nconst isClickFocus = ref(false)\nconst focusableItemsCount = ref(0)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nfunction handleFocus(event: FocusEvent) {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocus.value\n\n if (\n event.currentTarget\n && event.target === event.currentTarget\n && isKeyboardFocus\n && !isTabbingBackOut.value\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS)\n event.currentTarget.dispatchEvent(entryFocusEvent)\n emits('entryFocus', entryFocusEvent)\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n const activeItem = items.find(item => item.getAttribute('data-active') === '')\n const currentItem = items.find(\n item => item.id === currentTabStopId.value,\n )\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean,\n ) as typeof items\n focusFirst(candidateItems, props.preventScrollOnEntryFocus)\n }\n }\n isClickFocus.value = false\n}\n\nfunction handleMouseUp() {\n // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element\n setTimeout(() => {\n isClickFocus.value = false\n }, 1)\n}\n\ndefineExpose({\n getItems,\n})\n\nprovideRovingFocusGroupContext({\n loop,\n dir,\n orientation,\n currentTabStopId,\n onItemFocus: (tabStopId) => {\n currentTabStopId.value = tabStopId\n },\n onItemShiftTab: () => {\n isTabbingBackOut.value = true\n },\n onFocusableItemAdd: () => {\n focusableItemsCount.value++\n },\n onFocusableItemRemove: () => {\n focusableItemsCount.value--\n },\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :tabindex=\"isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0\"\n :data-orientation=\"orientation\"\n :as=\"as\"\n :as-child=\"asChild\"\n :dir=\"dir\"\n style=\"outline: none\"\n @mousedown=\"isClickFocus = true\"\n @mouseup=\"handleMouseUp\"\n @focus=\"handleFocus\"\n @blur=\"isTabbingBackOut = false\"\n >\n <slot />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useVModel","ref","useCollection","ENTRY_FOCUS","EVENT_OPTIONS","focusFirst"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, toRefs, ref, createBlock, openBlock, unref, withCtx, createVNode, renderSlot } from 'vue';
|
|
2
|
-
import { u as useCollection } from '../Collection/Collection.js';
|
|
3
2
|
import { useVModel } from '@vueuse/core';
|
|
3
|
+
import { u as useCollection } from '../Collection/Collection.js';
|
|
4
4
|
import { f as focusFirst, E as ENTRY_FOCUS, a as EVENT_OPTIONS } from './utils.js';
|
|
5
5
|
import { u as useDirection } from '../shared/useDirection.js';
|
|
6
6
|
import { c as createContext } from '../shared/createContext.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RovingFocusGroup.js","sources":["../../src/RovingFocus/RovingFocusGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {
|
|
1
|
+
{"version":3,"file":"RovingFocusGroup.js","sources":["../../src/RovingFocus/RovingFocusGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n Direction,\n Orientation,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useDirection } from '@/shared'\n\nexport interface RovingFocusGroupProps extends PrimitiveProps {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation\n /**\n * The direction of navigation between items.\n */\n dir?: Direction\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean\n /** The controlled value of the current stop item. Can be binded as `v-model`. */\n currentTabStopId?: string | null\n /**\n * The value of the current stop item.\n *\n * Use when you do not need to control the state of the stop item.\n */\n defaultCurrentTabStopId?: string\n /**\n * When `true`, will prevent scrolling to the focus item when focused.\n */\n preventScrollOnEntryFocus?: boolean\n}\n\nexport type RovingFocusGroupEmits = {\n 'entryFocus': [event: Event]\n 'update:currentTabStopId': [value: string | null | undefined]\n}\n\ninterface RovingContext {\n orientation: Ref<Orientation | undefined>\n dir: Ref<Direction>\n loop: Ref<boolean>\n currentTabStopId: Ref<string | null | undefined>\n onItemFocus: (tabStopId: string) => void\n onItemShiftTab: () => void\n onFocusableItemAdd: () => void\n onFocusableItemRemove: () => void\n}\n\nexport const [injectRovingFocusGroupContext, provideRovingFocusGroupContext]\n = createContext<RovingContext>('RovingFocusGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { ENTRY_FOCUS, EVENT_OPTIONS, focusFirst } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusGroupProps>(), {\n loop: false,\n orientation: undefined,\n preventScrollOnEntryFocus: false,\n})\nconst emits = defineEmits<RovingFocusGroupEmits>()\n\nconst { loop, orientation, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst currentTabStopId = useVModel(props, 'currentTabStopId', emits, {\n defaultValue: props.defaultCurrentTabStopId,\n passive: (props.currentTabStopId === undefined) as false,\n})\nconst isTabbingBackOut = ref(false)\nconst isClickFocus = ref(false)\nconst focusableItemsCount = ref(0)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nfunction handleFocus(event: FocusEvent) {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocus.value\n\n if (\n event.currentTarget\n && event.target === event.currentTarget\n && isKeyboardFocus\n && !isTabbingBackOut.value\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS)\n event.currentTarget.dispatchEvent(entryFocusEvent)\n emits('entryFocus', entryFocusEvent)\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n const activeItem = items.find(item => item.getAttribute('data-active') === '')\n const currentItem = items.find(\n item => item.id === currentTabStopId.value,\n )\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean,\n ) as typeof items\n focusFirst(candidateItems, props.preventScrollOnEntryFocus)\n }\n }\n isClickFocus.value = false\n}\n\nfunction handleMouseUp() {\n // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element\n setTimeout(() => {\n isClickFocus.value = false\n }, 1)\n}\n\ndefineExpose({\n getItems,\n})\n\nprovideRovingFocusGroupContext({\n loop,\n dir,\n orientation,\n currentTabStopId,\n onItemFocus: (tabStopId) => {\n currentTabStopId.value = tabStopId\n },\n onItemShiftTab: () => {\n isTabbingBackOut.value = true\n },\n onFocusableItemAdd: () => {\n focusableItemsCount.value++\n },\n onFocusableItemRemove: () => {\n focusableItemsCount.value--\n },\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :tabindex=\"isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0\"\n :data-orientation=\"orientation\"\n :as=\"as\"\n :as-child=\"asChild\"\n :dir=\"dir\"\n style=\"outline: none\"\n @mousedown=\"isClickFocus = true\"\n @mouseup=\"handleMouseUp\"\n @focus=\"handleFocus\"\n @blur=\"isTabbingBackOut = false\"\n >\n <slot />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RovingFocusItem.cjs","sources":["../../src/RovingFocus/RovingFocusItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface RovingFocusItemProps extends PrimitiveProps {\n tabStopId?: string\n /**\n * When `false`, item will not be focusable.\n * @defaultValue `true`\n */\n focusable?: boolean\n /** When `true`, item will be initially focused. */\n active?: boolean\n /** When `true`, shift + arrow key will allow focusing on next/previous item. */\n allowShiftKey?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"RovingFocusItem.cjs","sources":["../../src/RovingFocus/RovingFocusItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface RovingFocusItemProps extends PrimitiveProps {\n tabStopId?: string\n /**\n * When `false`, item will not be focusable.\n * @defaultValue `true`\n */\n focusable?: boolean\n /** When `true`, item will be initially focused. */\n active?: boolean\n /** When `true`, shift + arrow key will allow focusing on next/previous item. */\n allowShiftKey?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { useId } from '@/shared'\nimport { injectRovingFocusGroupContext } from './RovingFocusGroup.vue'\nimport { focusFirst, getFocusIntent, wrapArray } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusItemProps>(), {\n focusable: true,\n as: 'span',\n})\n\nconst context = injectRovingFocusGroupContext()\nconst randomId = useId()\nconst id = computed(() => props.tabStopId || randomId)\nconst isCurrentTabStop = computed(\n () => context.currentTabStopId.value === id.value,\n)\n\nconst { getItems, CollectionItem } = useCollection()\n\nonMounted(() => {\n if (props.focusable)\n context.onFocusableItemAdd()\n})\nonUnmounted(() => {\n if (props.focusable)\n context.onFocusableItemRemove()\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Tab' && event.shiftKey) {\n context.onItemShiftTab()\n return\n }\n\n if (event.target !== event.currentTarget)\n return\n\n const focusIntent = getFocusIntent(\n event,\n context.orientation.value,\n context.dir.value,\n )\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || (props.allowShiftKey ? false : event.shiftKey))\n return\n event.preventDefault()\n let candidateNodes = [...getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')]\n\n if (focusIntent === 'last') {\n candidateNodes.reverse()\n }\n else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev')\n candidateNodes.reverse()\n const currentIndex = candidateNodes.indexOf(\n event.currentTarget as HTMLElement,\n )\n\n candidateNodes = context.loop.value\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1)\n }\n\n nextTick(() => focusFirst(candidateNodes))\n }\n}\n</script>\n\n<template>\n <CollectionItem>\n <Primitive\n :tabindex=\"isCurrentTabStop ? 0 : -1\"\n :data-orientation=\"context.orientation.value\"\n :data-active=\"active ? '' : undefined\"\n :data-disabled=\"!focusable ? '' : undefined\"\n :as=\"as\"\n :as-child=\"asChild\"\n @mousedown=\"\n (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n else context.onItemFocus(id);\n }\n \"\n @focus=\"context.onItemFocus(id)\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":["injectRovingFocusGroupContext","useId","computed","useCollection","onMounted","onUnmounted","getFocusIntent","wrapArray","nextTick","focusFirst"],"mappings":";;;;;;;;;;;;;;;;;;;;AAyBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,UAAUA,0DAA8B,EAAA;AAC9C,IAAA,MAAM,WAAWC,kBAAM,EAAA;AACvB,IAAA,MAAM,EAAK,GAAAC,YAAA,CAAS,MAAM,KAAA,CAAM,aAAa,QAAQ,CAAA;AACrD,IAAA,MAAM,gBAAmB,GAAAA,YAAA;AAAA,MACvB,MAAM,OAAA,CAAQ,gBAAiB,CAAA,KAAA,KAAU,EAAG,CAAA;AAAA,KAC9C;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,cAAe,EAAA,GAAIC,mCAAc,EAAA;AAEnD,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,IAAI,KAAM,CAAA,SAAA;AACR,QAAA,OAAA,CAAQ,kBAAmB,EAAA;AAAA,KAC9B,CAAA;AACD,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAA,IAAI,KAAM,CAAA,SAAA;AACR,QAAA,OAAA,CAAQ,qBAAsB,EAAA;AAAA,KACjC,CAAA;AAED,IAAA,SAAS,cAAc,KAAsB,EAAA;AAC3C,MAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,KAAS,IAAA,KAAA,CAAM,QAAU,EAAA;AACzC,QAAA,OAAA,CAAQ,cAAe,EAAA;AACvB,QAAA;AAAA;AAGF,MAAI,IAAA,KAAA,CAAM,WAAW,KAAM,CAAA,aAAA;AACzB,QAAA;AAEF,MAAA,MAAM,WAAc,GAAAC,gCAAA;AAAA,QAClB,KAAA;AAAA,QACA,QAAQ,WAAY,CAAA,KAAA;AAAA,QACpB,QAAQ,GAAI,CAAA;AAAA,OACd;AAEA,MAAA,IAAI,gBAAgB,MAAW,EAAA;AAC7B,QAAI,IAAA,KAAA,CAAM,WAAW,KAAM,CAAA,OAAA,IAAW,MAAM,MAAW,KAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,GAAQ,KAAM,CAAA,QAAA,CAAA;AACzF,UAAA;AACF,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA,IAAI,iBAAiB,CAAC,GAAG,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAA,CAAE,OAAO,CAAK,CAAA,KAAA,CAAA,CAAE,OAAQ,CAAA,QAAA,KAAa,EAAE,CAAC,CAAA;AAE1F,QAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,UAAA,cAAA,CAAe,OAAQ,EAAA;AAAA,SAEhB,MAAA,IAAA,WAAA,KAAgB,MAAU,IAAA,WAAA,KAAgB,MAAQ,EAAA;AACzD,UAAA,IAAI,WAAgB,KAAA,MAAA;AAClB,YAAA,cAAA,CAAe,OAAQ,EAAA;AACzB,UAAA,MAAM,eAAe,cAAe,CAAA,OAAA;AAAA,YAClC,KAAM,CAAA;AAAA,WACR;AAEA,UAAiB,cAAA,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,GAC1BC,2BAAU,CAAA,cAAA,EAAgB,YAAe,GAAA,CAAC,CAC1C,GAAA,cAAA,CAAe,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAAA;AAG3C,QAASC,YAAA,CAAA,MAAMC,4BAAW,CAAA,cAAc,CAAC,CAAA;AAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RovingFocusItem.js","sources":["../../src/RovingFocus/RovingFocusItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface RovingFocusItemProps extends PrimitiveProps {\n tabStopId?: string\n /**\n * When `false`, item will not be focusable.\n * @defaultValue `true`\n */\n focusable?: boolean\n /** When `true`, item will be initially focused. */\n active?: boolean\n /** When `true`, shift + arrow key will allow focusing on next/previous item. */\n allowShiftKey?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"RovingFocusItem.js","sources":["../../src/RovingFocus/RovingFocusItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface RovingFocusItemProps extends PrimitiveProps {\n tabStopId?: string\n /**\n * When `false`, item will not be focusable.\n * @defaultValue `true`\n */\n focusable?: boolean\n /** When `true`, item will be initially focused. */\n active?: boolean\n /** When `true`, shift + arrow key will allow focusing on next/previous item. */\n allowShiftKey?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { useId } from '@/shared'\nimport { injectRovingFocusGroupContext } from './RovingFocusGroup.vue'\nimport { focusFirst, getFocusIntent, wrapArray } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusItemProps>(), {\n focusable: true,\n as: 'span',\n})\n\nconst context = injectRovingFocusGroupContext()\nconst randomId = useId()\nconst id = computed(() => props.tabStopId || randomId)\nconst isCurrentTabStop = computed(\n () => context.currentTabStopId.value === id.value,\n)\n\nconst { getItems, CollectionItem } = useCollection()\n\nonMounted(() => {\n if (props.focusable)\n context.onFocusableItemAdd()\n})\nonUnmounted(() => {\n if (props.focusable)\n context.onFocusableItemRemove()\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Tab' && event.shiftKey) {\n context.onItemShiftTab()\n return\n }\n\n if (event.target !== event.currentTarget)\n return\n\n const focusIntent = getFocusIntent(\n event,\n context.orientation.value,\n context.dir.value,\n )\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || (props.allowShiftKey ? false : event.shiftKey))\n return\n event.preventDefault()\n let candidateNodes = [...getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')]\n\n if (focusIntent === 'last') {\n candidateNodes.reverse()\n }\n else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev')\n candidateNodes.reverse()\n const currentIndex = candidateNodes.indexOf(\n event.currentTarget as HTMLElement,\n )\n\n candidateNodes = context.loop.value\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1)\n }\n\n nextTick(() => focusFirst(candidateNodes))\n }\n}\n</script>\n\n<template>\n <CollectionItem>\n <Primitive\n :tabindex=\"isCurrentTabStop ? 0 : -1\"\n :data-orientation=\"context.orientation.value\"\n :data-active=\"active ? '' : undefined\"\n :data-disabled=\"!focusable ? '' : undefined\"\n :as=\"as\"\n :as-child=\"asChild\"\n @mousedown=\"\n (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n else context.onItemFocus(id);\n }\n \"\n @focus=\"context.onItemFocus(id)\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAyBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,UAAU,6BAA8B,EAAA;AAC9C,IAAA,MAAM,WAAW,KAAM,EAAA;AACvB,IAAA,MAAM,EAAK,GAAA,QAAA,CAAS,MAAM,KAAA,CAAM,aAAa,QAAQ,CAAA;AACrD,IAAA,MAAM,gBAAmB,GAAA,QAAA;AAAA,MACvB,MAAM,OAAA,CAAQ,gBAAiB,CAAA,KAAA,KAAU,EAAG,CAAA;AAAA,KAC9C;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,cAAe,EAAA,GAAI,aAAc,EAAA;AAEnD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,KAAM,CAAA,SAAA;AACR,QAAA,OAAA,CAAQ,kBAAmB,EAAA;AAAA,KAC9B,CAAA;AACD,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,IAAI,KAAM,CAAA,SAAA;AACR,QAAA,OAAA,CAAQ,qBAAsB,EAAA;AAAA,KACjC,CAAA;AAED,IAAA,SAAS,cAAc,KAAsB,EAAA;AAC3C,MAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,KAAS,IAAA,KAAA,CAAM,QAAU,EAAA;AACzC,QAAA,OAAA,CAAQ,cAAe,EAAA;AACvB,QAAA;AAAA;AAGF,MAAI,IAAA,KAAA,CAAM,WAAW,KAAM,CAAA,aAAA;AACzB,QAAA;AAEF,MAAA,MAAM,WAAc,GAAA,cAAA;AAAA,QAClB,KAAA;AAAA,QACA,QAAQ,WAAY,CAAA,KAAA;AAAA,QACpB,QAAQ,GAAI,CAAA;AAAA,OACd;AAEA,MAAA,IAAI,gBAAgB,MAAW,EAAA;AAC7B,QAAI,IAAA,KAAA,CAAM,WAAW,KAAM,CAAA,OAAA,IAAW,MAAM,MAAW,KAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,GAAQ,KAAM,CAAA,QAAA,CAAA;AACzF,UAAA;AACF,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA,IAAI,iBAAiB,CAAC,GAAG,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAA,CAAE,OAAO,CAAK,CAAA,KAAA,CAAA,CAAE,OAAQ,CAAA,QAAA,KAAa,EAAE,CAAC,CAAA;AAE1F,QAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,UAAA,cAAA,CAAe,OAAQ,EAAA;AAAA,SAEhB,MAAA,IAAA,WAAA,KAAgB,MAAU,IAAA,WAAA,KAAgB,MAAQ,EAAA;AACzD,UAAA,IAAI,WAAgB,KAAA,MAAA;AAClB,YAAA,cAAA,CAAe,OAAQ,EAAA;AACzB,UAAA,MAAM,eAAe,cAAe,CAAA,OAAA;AAAA,YAClC,KAAM,CAAA;AAAA,WACR;AAEA,UAAiB,cAAA,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,GAC1B,SAAU,CAAA,cAAA,EAAgB,YAAe,GAAA,CAAC,CAC1C,GAAA,cAAA,CAAe,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAAA;AAG3C,QAAS,QAAA,CAAA,MAAM,UAAW,CAAA,cAAc,CAAC,CAAA;AAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollAreaCornerImpl.cjs","sources":["../../src/ScrollArea/ScrollAreaCornerImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"ScrollAreaCornerImpl.cjs","sources":["../../src/ScrollArea/ScrollAreaCornerImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useResizeObserver } from '@vueuse/core'\nimport { computed, ref, watch } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectScrollAreaRootContext } from './ScrollAreaRoot.vue'\n\nconst rootContext = injectScrollAreaRootContext()\n\nconst width = ref(0)\nconst height = ref(0)\n\nconst hasSize = computed(() => !!width.value && !!height.value)\n\nfunction setCornerHeight() {\n const offsetHeight = rootContext.scrollbarX.value?.offsetHeight || 0\n rootContext.onCornerHeightChange(offsetHeight)\n height.value = offsetHeight\n}\nfunction setCornerWidth() {\n const offsetWidth = rootContext.scrollbarY.value?.offsetWidth || 0\n rootContext.onCornerWidthChange(offsetWidth)\n width.value = offsetWidth\n}\n\nuseResizeObserver(rootContext.scrollbarX.value, setCornerHeight)\nuseResizeObserver(rootContext.scrollbarY.value, setCornerWidth)\n\n// because we are not remounting the component, useResizeObserver doesn't trigger, thus using watcher here\nwatch(() => rootContext.scrollbarX.value, setCornerHeight)\nwatch(() => rootContext.scrollbarY.value, setCornerWidth)\n</script>\n\n<template>\n <Primitive\n v-if=\"hasSize\"\n :style=\"{\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute',\n right: rootContext.dir.value === 'ltr' ? 0 : undefined,\n left: rootContext.dir.value === 'rtl' ? 0 : undefined,\n bottom: 0,\n }\"\n v-bind=\"$parent?.$props\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectScrollAreaRootContext","ref","computed","useResizeObserver","watch"],"mappings":";;;;;;;;;;AAMA,IAAA,MAAM,cAAcA,qDAA4B,EAAA;AAEhD,IAAM,MAAA,KAAA,GAAQC,QAAI,CAAC,CAAA;AACnB,IAAM,MAAA,MAAA,GAASA,QAAI,CAAC,CAAA;AAEpB,IAAM,MAAA,OAAA,GAAUC,YAAS,CAAA,MAAM,CAAC,CAAC,MAAM,KAAS,IAAA,CAAC,CAAC,MAAA,CAAO,KAAK,CAAA;AAE9D,IAAA,SAAS,eAAkB,GAAA;AACzB,MAAA,MAAM,YAAe,GAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,YAAgB,IAAA,CAAA;AACnE,MAAA,WAAA,CAAY,qBAAqB,YAAY,CAAA;AAC7C,MAAA,MAAA,CAAO,KAAQ,GAAA,YAAA;AAAA;AAEjB,IAAA,SAAS,cAAiB,GAAA;AACxB,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,WAAe,IAAA,CAAA;AACjE,MAAA,WAAA,CAAY,oBAAoB,WAAW,CAAA;AAC3C,MAAA,KAAA,CAAM,KAAQ,GAAA,WAAA;AAAA;AAGhB,IAAkBC,sBAAA,CAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,eAAe,CAAA;AAC/D,IAAkBA,sBAAA,CAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,cAAc,CAAA;AAG9D,IAAAC,SAAA,CAAM,MAAM,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,eAAe,CAAA;AACzD,IAAAA,SAAA,CAAM,MAAM,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,cAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollAreaCornerImpl.js","sources":["../../src/ScrollArea/ScrollAreaCornerImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"ScrollAreaCornerImpl.js","sources":["../../src/ScrollArea/ScrollAreaCornerImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useResizeObserver } from '@vueuse/core'\nimport { computed, ref, watch } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectScrollAreaRootContext } from './ScrollAreaRoot.vue'\n\nconst rootContext = injectScrollAreaRootContext()\n\nconst width = ref(0)\nconst height = ref(0)\n\nconst hasSize = computed(() => !!width.value && !!height.value)\n\nfunction setCornerHeight() {\n const offsetHeight = rootContext.scrollbarX.value?.offsetHeight || 0\n rootContext.onCornerHeightChange(offsetHeight)\n height.value = offsetHeight\n}\nfunction setCornerWidth() {\n const offsetWidth = rootContext.scrollbarY.value?.offsetWidth || 0\n rootContext.onCornerWidthChange(offsetWidth)\n width.value = offsetWidth\n}\n\nuseResizeObserver(rootContext.scrollbarX.value, setCornerHeight)\nuseResizeObserver(rootContext.scrollbarY.value, setCornerWidth)\n\n// because we are not remounting the component, useResizeObserver doesn't trigger, thus using watcher here\nwatch(() => rootContext.scrollbarX.value, setCornerHeight)\nwatch(() => rootContext.scrollbarY.value, setCornerWidth)\n</script>\n\n<template>\n <Primitive\n v-if=\"hasSize\"\n :style=\"{\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute',\n right: rootContext.dir.value === 'ltr' ? 0 : undefined,\n left: rootContext.dir.value === 'rtl' ? 0 : undefined,\n bottom: 0,\n }\"\n v-bind=\"$parent?.$props\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;AAMA,IAAA,MAAM,cAAc,2BAA4B,EAAA;AAEhD,IAAM,MAAA,KAAA,GAAQ,IAAI,CAAC,CAAA;AACnB,IAAM,MAAA,MAAA,GAAS,IAAI,CAAC,CAAA;AAEpB,IAAM,MAAA,OAAA,GAAU,QAAS,CAAA,MAAM,CAAC,CAAC,MAAM,KAAS,IAAA,CAAC,CAAC,MAAA,CAAO,KAAK,CAAA;AAE9D,IAAA,SAAS,eAAkB,GAAA;AACzB,MAAA,MAAM,YAAe,GAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,YAAgB,IAAA,CAAA;AACnE,MAAA,WAAA,CAAY,qBAAqB,YAAY,CAAA;AAC7C,MAAA,MAAA,CAAO,KAAQ,GAAA,YAAA;AAAA;AAEjB,IAAA,SAAS,cAAiB,GAAA;AACxB,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,WAAe,IAAA,CAAA;AACjE,MAAA,WAAA,CAAY,oBAAoB,WAAW,CAAA;AAC3C,MAAA,KAAA,CAAM,KAAQ,GAAA,WAAA;AAAA;AAGhB,IAAkB,iBAAA,CAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,eAAe,CAAA;AAC/D,IAAkB,iBAAA,CAAA,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,cAAc,CAAA;AAG9D,IAAA,KAAA,CAAM,MAAM,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,eAAe,CAAA;AACzD,IAAA,KAAA,CAAM,MAAM,WAAA,CAAY,UAAW,CAAA,KAAA,EAAO,cAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;"}
|