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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRoot.js","sources":["../../src/Tree/TreeRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Direction } from '@/shared/types'\nimport { createContext, getActiveElement, useDirection, useSelectionBehavior, useTypeahead } from '@/shared'\nimport { flatten } from './utils'\n\nexport interface TreeRootProps<T = Record<string, any>, U extends Record<string, any> = Record<string, any>> extends PrimitiveProps {\n /** The controlled value of the tree. Can be binded with with `v-model`. */\n modelValue?: U | U[]\n /** The value of the tree when initially rendered. Use when you do not need to control the state of the tree */\n defaultValue?: U | U[]\n /** List of items */\n items?: T[]\n /** The controlled value of the expanded item. Can be binded with with `v-model`. */\n expanded?: string[]\n /** The value of the expanded tree when initially rendered. Use when you do not need to control the state of the expanded tree */\n defaultExpanded?: string[]\n /** This function is passed the index of each item and should return a unique key for that item */\n getKey: (val: T) => string\n /** This function is passed the index of each item and should return a list of children for that item */\n getChildren?: (val: T) => T[] | undefined\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: 'toggle' | 'replace'\n /** Whether multiple options can be selected or not. */\n multiple?: boolean\n /** The reading direction of the listbox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** When `true`, prevents the user from interacting with tree */\n disabled?: boolean\n /** When `true`, selecting parent will select the descendants. */\n propagateSelect?: boolean\n}\n\nexport type TreeRootEmits<T = Record<string, any>> = {\n 'update:modelValue': [val: T]\n 'update:expanded': [val: string[]]\n}\n\ninterface TreeRootContext<T = Record<string, any>> {\n modelValue: Ref<T | T[]>\n selectedKeys: Ref<string[]>\n onSelect: (val: T) => void\n expanded: Ref<string[]>\n onToggle: (val: T) => void\n items: Ref<T[]>\n expandedItems: Ref<T[]>\n getKey: (val: T) => string\n getChildren: (val: T) => T[] | undefined\n multiple: Ref<boolean>\n disabled: Ref<boolean>\n dir: Ref<Direction>\n propagateSelect: Ref<boolean>\n isVirtual: Ref<boolean>\n virtualKeydownHook: EventHook<KeyboardEvent>\n\n handleMultipleReplace: ReturnType<typeof useSelectionBehavior>['handleMultipleReplace']\n}\n\nexport type FlattenedItem<T> = {\n _id: string\n index: number\n value: T\n level: number\n hasChildren: boolean\n parentItem?: T\n bind: {\n value: T\n level: number\n [key: string]: any\n }\n}\n\nexport const [injectTreeRootContext, provideTreeRootContext] = createContext<TreeRootContext<any>>('TreeRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>, U extends Record<string, any>\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { EventHook } from '@vueuse/core'\nimport type { Ref } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { createEventHook, useVModel } from '@vueuse/core'\nimport { computed, nextTick, ref, toRefs } from 'vue'\n\nconst props = withDefaults(defineProps<TreeRootProps<T, U>>(), {\n as: 'ul',\n selectionBehavior: 'toggle',\n getChildren: (val: T) => val.children,\n})\nconst emits = defineEmits<TreeRootEmits<U>>()\n\ndefineSlots<{\n default: (props: {\n flattenItems: FlattenedItem<T>[]\n modelValue: typeof modelValue.value\n expanded: typeof expanded.value\n }) => any\n}>()\n\nconst { items, multiple, disabled, propagateSelect, dir: propDir } = toRefs(props)\nconst { handleTypeaheadSearch } = useTypeahead()\nconst dir = useDirection(propDir)\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\n\n// Virtualizer\nconst isVirtual = ref(false)\nconst virtualKeydownHook = createEventHook<KeyboardEvent>()\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<U | U[]>\n\nconst expanded = useVModel(props, 'expanded', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultExpanded ?? [],\n passive: (props.expanded === undefined) as false,\n deep: true,\n}) as Ref<string[]>\n\nconst { onSelectItem, handleMultipleReplace } = useSelectionBehavior(modelValue, props)\n\nconst selectedKeys = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value.map(i => props.getKey(i as any))\n else\n return [props.getKey(modelValue.value as any ?? {})]\n})\n\nfunction flattenItems(items: T[], level: number = 1, parentItem?: T): FlattenedItem<T>[] {\n return items.reduce((acc: FlattenedItem<T>[], item: T, index: number) => {\n const key = props.getKey(item)\n const children = props.getChildren(item)\n const isExpanded = expanded.value.includes(key)\n\n const flattenedItem: FlattenedItem<T> = {\n _id: key,\n value: item,\n index,\n level,\n parentItem,\n hasChildren: !!children,\n bind: {\n 'value': item,\n level,\n 'aria-setsize': items.length,\n 'aria-posinset': index + 1,\n },\n }\n acc.push(flattenedItem)\n\n if (children && isExpanded)\n acc.push(...flattenItems(children, level + 1, item))\n\n return acc\n }, [])\n}\n\nconst expandedItems = computed(() => {\n const items = props.items\n const expandedKeys = expanded.value.map(i => i)\n return flattenItems(items ?? [])\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isVirtual.value) {\n virtualKeydownHook.trigger(event)\n }\n else {\n const collections = rovingFocusGroupRef.value?.getItems() ?? []\n handleTypeaheadSearch(event.key, collections)\n }\n}\n\nfunction handleKeydownNavigation(event: KeyboardEvent) {\n if (isVirtual.value)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n nextTick(() => {\n handleMultipleReplace(\n intent,\n getActiveElement(),\n rovingFocusGroupRef.value?.getItems!,\n expandedItems.value.map(i => i.value),\n )\n })\n}\n\nprovideTreeRootContext({\n modelValue,\n selectedKeys,\n onSelect: (val) => {\n const condition = (baseValue: U) => props.getKey(baseValue as any ?? {}) === props.getKey(val)\n const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : undefined\n onSelectItem(val, condition)\n\n if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {\n const children = flatten<U, any>(props.getChildren(val) ?? [])\n if (exist) {\n // remove all child\n modelValue.value = [...modelValue.value]\n .filter(i => !children.some(child => props.getKey(i as any ?? {}) === props.getKey(child as any)))\n }\n else {\n // select all child\n modelValue.value = [...modelValue.value, ...children]\n }\n }\n },\n expanded,\n onToggle(val) {\n const children = val ? props.getChildren(val) : undefined\n if (!children)\n return\n\n const key = props.getKey(val) ?? val\n if (expanded.value.includes(key))\n expanded.value = expanded.value.filter(val => val !== key)\n else\n expanded.value.push(key)\n },\n getKey: props.getKey,\n getChildren: props.getChildren,\n items,\n expandedItems,\n disabled,\n multiple,\n dir,\n propagateSelect,\n\n isVirtual,\n virtualKeydownHook,\n handleMultipleReplace,\n})\n</script>\n\n<template>\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n as-child\n orientation=\"vertical\"\n :dir=\"dir\"\n >\n <Primitive\n role=\"tree\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-multiselectable=\"multiple ? true : undefined\"\n @keydown=\"handleKeydown\"\n @keydown.up.down.shift=\"handleKeydownNavigation\"\n >\n <slot\n :flatten-items=\"expandedItems\"\n :model-value=\"modelValue\"\n :expanded=\"expanded\"\n />\n </Primitive>\n </RovingFocusGroup>\n</template>\n"],"names":["items","val"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeRoot.js","sources":["../../src/Tree/TreeRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Direction } from '@/shared/types'\nimport { createContext, getActiveElement, useDirection, useSelectionBehavior, useTypeahead } from '@/shared'\nimport { flatten } from './utils'\n\nexport interface TreeRootProps<T = Record<string, any>, U extends Record<string, any> = Record<string, any>, M extends boolean = false> extends PrimitiveProps {\n /** The controlled value of the tree. Can be binded with with `v-model`. */\n modelValue?: M extends true ? U[] : U\n /** The value of the tree when initially rendered. Use when you do not need to control the state of the tree */\n defaultValue?: M extends true ? U[] : U\n /** List of items */\n items?: T[]\n /** The controlled value of the expanded item. Can be binded with with `v-model`. */\n expanded?: string[]\n /** The value of the expanded tree when initially rendered. Use when you do not need to control the state of the expanded tree */\n defaultExpanded?: string[]\n /** This function is passed the index of each item and should return a unique key for that item */\n getKey: (val: T) => string\n /** This function is passed the index of each item and should return a list of children for that item */\n getChildren?: (val: T) => T[] | undefined\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: 'toggle' | 'replace'\n /** Whether multiple options can be selected or not. */\n multiple?: M\n /** The reading direction of the listbox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** When `true`, prevents the user from interacting with tree */\n disabled?: boolean\n /** When `true`, selecting parent will select the descendants. */\n propagateSelect?: boolean\n /** When `true`, selecting children will update the parent state. */\n bubbleSelect?: boolean\n}\n\nexport type TreeRootEmits<T = Record<string, any>, M extends boolean = false> = {\n 'update:modelValue': [val: M extends true ? T[] : T]\n 'update:expanded': [val: string[]]\n}\n\ninterface TreeRootContext<T = Record<string, any>> {\n modelValue: Ref<T | T[]>\n selectedKeys: Ref<string[]>\n onSelect: (val: T) => void\n expanded: Ref<string[]>\n onToggle: (val: T) => void\n items: Ref<T[]>\n expandedItems: Ref<T[]>\n getKey: (val: T) => string\n getChildren: (val: T) => T[] | undefined\n multiple: Ref<boolean>\n disabled: Ref<boolean>\n dir: Ref<Direction>\n propagateSelect: Ref<boolean>\n bubbleSelect: Ref<boolean>\n isVirtual: Ref<boolean>\n virtualKeydownHook: EventHook<KeyboardEvent>\n\n handleMultipleReplace: ReturnType<typeof useSelectionBehavior>['handleMultipleReplace']\n}\n\nexport type FlattenedItem<T> = {\n _id: string\n index: number\n value: T\n level: number\n hasChildren: boolean\n parentItem?: T\n bind: {\n value: T\n level: number\n [key: string]: any\n }\n}\n\nexport const [injectTreeRootContext, provideTreeRootContext] = createContext<TreeRootContext<any>>('TreeRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>, U extends Record<string, any>, M extends boolean = false\">\nimport type { EventHook } from '@vueuse/core'\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createEventHook, useVModel } from '@vueuse/core'\nimport { computed, nextTick, ref, toRefs } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\n\nconst props = withDefaults(defineProps<TreeRootProps<T, U, M>>(), {\n as: 'ul',\n selectionBehavior: 'toggle',\n getChildren: (val: T) => val.children,\n})\nconst emits = defineEmits<TreeRootEmits<U, M>>()\n\ndefineSlots<{\n default?: (props: {\n flattenItems: FlattenedItem<T>[]\n modelValue: M extends true ? U[] : U\n expanded: typeof expanded.value\n }) => any\n}>()\n\nconst { items, multiple, disabled, propagateSelect, dir: propDir, bubbleSelect } = toRefs(props)\nconst { handleTypeaheadSearch } = useTypeahead()\nconst dir = useDirection(propDir)\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\n\n// Virtualizer\nconst isVirtual = ref(false)\nconst virtualKeydownHook = createEventHook<KeyboardEvent>()\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<U | U[]>\n\nconst expanded = useVModel(props, 'expanded', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultExpanded ?? [],\n passive: (props.expanded === undefined) as false,\n deep: true,\n}) as Ref<string[]>\n\nconst { onSelectItem, handleMultipleReplace } = useSelectionBehavior(modelValue, props)\n\nconst selectedKeys = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value.map(i => props.getKey(i as any))\n else\n return [props.getKey(modelValue.value as any ?? {})]\n})\n\nfunction flattenItems(items: T[], level: number = 1, parentItem?: T): FlattenedItem<T>[] {\n return items.reduce((acc: FlattenedItem<T>[], item: T, index: number) => {\n const key = props.getKey(item)\n const children = props.getChildren(item)\n const isExpanded = expanded.value.includes(key)\n\n const flattenedItem: FlattenedItem<T> = {\n _id: key,\n value: item,\n index,\n level,\n parentItem,\n hasChildren: !!children,\n bind: {\n 'value': item,\n level,\n 'aria-setsize': items.length,\n 'aria-posinset': index + 1,\n },\n }\n acc.push(flattenedItem)\n\n if (children && isExpanded)\n acc.push(...flattenItems(children, level + 1, item))\n\n return acc\n }, [])\n}\n\nconst expandedItems = computed(() => {\n const items = props.items\n const expandedKeys = expanded.value.map(i => i)\n return flattenItems(items ?? [])\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isVirtual.value) {\n virtualKeydownHook.trigger(event)\n }\n else {\n const collections = rovingFocusGroupRef.value?.getItems() ?? []\n handleTypeaheadSearch(event.key, collections)\n }\n}\n\nfunction handleKeydownNavigation(event: KeyboardEvent) {\n if (isVirtual.value)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n nextTick(() => {\n handleMultipleReplace(\n intent,\n getActiveElement(),\n rovingFocusGroupRef.value?.getItems!,\n expandedItems.value.map(i => i.value),\n )\n })\n}\n\nfunction handleBubbleSelect(item: FlattenedItem<T>) {\n if (item.parentItem != null && Array.isArray(modelValue.value) && props.multiple) {\n const parentItem = expandedItems.value.find((i) => {\n return item.parentItem != null && props.getKey(i.value) === props.getKey(item.parentItem)\n })\n\n if (parentItem != null) {\n const areAllChilredOfParentSelected = props.getChildren(parentItem.value)?.every(i => modelValue.value.find((v: any) => props.getKey(v) === props.getKey(i)))\n\n if (areAllChilredOfParentSelected) {\n modelValue.value = [...modelValue.value, parentItem.value as any]\n }\n else {\n modelValue.value = modelValue.value.filter((v: any) => props.getKey(v) !== props.getKey(parentItem.value))\n }\n\n handleBubbleSelect(parentItem)\n }\n }\n}\n\nprovideTreeRootContext({\n modelValue,\n selectedKeys,\n onSelect: (val) => {\n const condition = (baseValue: U) => props.getKey(baseValue as any ?? {}) === props.getKey(val)\n const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : undefined\n onSelectItem(val, condition)\n\n if (props.bubbleSelect && props.multiple && Array.isArray(modelValue.value)) {\n const item = expandedItems.value.find((i) => {\n return props.getKey(i.value) === props.getKey(val)\n })\n if (item != null) {\n handleBubbleSelect(item)\n }\n }\n\n if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {\n const children = flatten<U, any>(props.getChildren(val) ?? [])\n\n if (exist) {\n // remove all child\n modelValue.value = [...modelValue.value]\n .filter(i => !children.some(child => props.getKey(i as any ?? {}) === props.getKey(child as any)))\n }\n else {\n // select all child\n modelValue.value = [...modelValue.value, ...children]\n }\n }\n },\n expanded,\n onToggle(val) {\n const children = val ? props.getChildren(val) : undefined\n if (!children)\n return\n\n const key = props.getKey(val) ?? val\n if (expanded.value.includes(key))\n expanded.value = expanded.value.filter(val => val !== key)\n else\n expanded.value.push(key)\n },\n getKey: props.getKey,\n getChildren: props.getChildren,\n items,\n expandedItems,\n disabled,\n multiple,\n dir,\n propagateSelect,\n bubbleSelect,\n\n isVirtual,\n virtualKeydownHook,\n handleMultipleReplace,\n})\n</script>\n\n<template>\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n as-child\n orientation=\"vertical\"\n :dir=\"dir\"\n >\n <Primitive\n role=\"tree\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-multiselectable=\"multiple ? true : undefined\"\n @keydown=\"handleKeydown\"\n @keydown.up.down.shift=\"handleKeydownNavigation\"\n >\n <slot\n :flatten-items=\"expandedItems\"\n :model-value=\"modelValue as M extends true ? U[] : U\"\n :expanded=\"expanded\"\n />\n </Primitive>\n </RovingFocusGroup>\n</template>\n"],"names":["items","val"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const vue = require('vue');
|
|
4
|
+
const vueVirtual = require('@tanstack/vue-virtual');
|
|
5
|
+
const core = require('@vueuse/core');
|
|
4
6
|
const Collection_Collection = require('../Collection/Collection.cjs');
|
|
5
7
|
const RovingFocus_utils = require('../RovingFocus/utils.cjs');
|
|
6
8
|
const shared_useTypeahead = require('../shared/useTypeahead.cjs');
|
|
7
|
-
const vueVirtual = require('@tanstack/vue-virtual');
|
|
8
|
-
const core = require('@vueuse/core');
|
|
9
9
|
const shared_getActiveElement = require('../shared/getActiveElement.cjs');
|
|
10
10
|
const Tree_TreeRoot = require('./TreeRoot.cjs');
|
|
11
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeVirtualizer.cjs","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":["useSlots","injectTreeRootContext","useParentElement","useCollection","refAutoReset","computed","useVirtualizer","cloneVNode","MAP_KEY_TO_FOCUS_INTENT","getActiveElement","getNextMatch","nextTick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeVirtualizer.cjs","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default?: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":["useSlots","injectTreeRootContext","useParentElement","useCollection","refAutoReset","computed","useVirtualizer","cloneVNode","MAP_KEY_TO_FOCUS_INTENT","getActiveElement","getNextMatch","nextTick"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent, useSlots, computed, cloneVNode, nextTick, createElementBlock, openBlock, normalizeStyle, unref, Fragment, renderList, createBlock, resolveDynamicComponent } from 'vue';
|
|
2
|
+
import { useVirtualizer } from '@tanstack/vue-virtual';
|
|
3
|
+
import { useParentElement, refAutoReset } from '@vueuse/core';
|
|
2
4
|
import { u as useCollection } from '../Collection/Collection.js';
|
|
3
5
|
import { M as MAP_KEY_TO_FOCUS_INTENT } from '../RovingFocus/utils.js';
|
|
4
6
|
import { g as getNextMatch } from '../shared/useTypeahead.js';
|
|
5
|
-
import { useVirtualizer } from '@tanstack/vue-virtual';
|
|
6
|
-
import { useParentElement, refAutoReset } from '@vueuse/core';
|
|
7
7
|
import { g as getActiveElement } from '../shared/getActiveElement.js';
|
|
8
8
|
import { i as injectTreeRootContext } from './TreeRoot.js';
|
|
9
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeVirtualizer.js","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeVirtualizer.js","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default?: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Viewport.cjs","sources":["../../src/Viewport/Viewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {
|
|
1
|
+
{"version":3,"file":"Viewport.cjs","sources":["../../src/Viewport/Viewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { toRefs } from 'vue'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface ViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\n\nconst props = defineProps<ViewportProps>()\nconst { forwardRef } = useForwardExpose()\n\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n</script>\n\n<template>\n <Primitive\n v-bind=\"{ ...$attrs, ...props }\"\n :ref=\"forwardRef\"\n data-reka-viewport\n role=\"presentation\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n }\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":["useForwardExpose","toRefs","useNonce"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,wCAAiB,EAAA;AAExC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAIC,WAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQC,yBAAS,SAAS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Viewport.js","sources":["../../src/Viewport/Viewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {
|
|
1
|
+
{"version":3,"file":"Viewport.js","sources":["../../src/Viewport/Viewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { toRefs } from 'vue'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface ViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\n\nconst props = defineProps<ViewportProps>()\nconst { forwardRef } = useForwardExpose()\n\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n</script>\n\n<template>\n <Primitive\n v-bind=\"{ ...$attrs, ...props }\"\n :ref=\"forwardRef\"\n data-reka-viewport\n role=\"presentation\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n }\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA;AAExC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAI,OAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisuallyHiddenInputBubble.cjs","sources":["../../src/VisuallyHidden/VisuallyHiddenInputBubble.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface VisuallyHiddenInputBubbleProps<T> {\n name: string\n value: T\n checked?: boolean\n required?: boolean\n disabled?: boolean\n feature?: VisuallyHiddenProps['feature']\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type { VisuallyHiddenProps } from './VisuallyHidden.vue'\nimport {
|
|
1
|
+
{"version":3,"file":"VisuallyHiddenInputBubble.cjs","sources":["../../src/VisuallyHidden/VisuallyHiddenInputBubble.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface VisuallyHiddenInputBubbleProps<T> {\n name: string\n value: T\n checked?: boolean\n required?: boolean\n disabled?: boolean\n feature?: VisuallyHiddenProps['feature']\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type { VisuallyHiddenProps } from './VisuallyHidden.vue'\nimport { computed, watch } from 'vue'\nimport { usePrimitiveElement } from '@/Primitive'\nimport VisuallyHidden from './VisuallyHidden.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<VisuallyHiddenInputBubbleProps<T>>(), {\n feature: 'fully-hidden',\n checked: undefined,\n})\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\nconst valueState = computed(() => props.checked ?? props.value)\n\nwatch(valueState, (cur, prev) => {\n if (!currentElement.value)\n return\n\n const input = currentElement.value as HTMLInputElement\n const inputProto = window.HTMLInputElement.prototype\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor\n const setValue = descriptor.set\n if (setValue && cur !== prev) {\n const inputEvent = new Event('input', { bubbles: true })\n const changeEvent = new Event('change', { bubbles: true })\n setValue.call(input, cur)\n input.dispatchEvent(inputEvent)\n input.dispatchEvent(changeEvent)\n }\n})\n</script>\n\n<template>\n <VisuallyHidden\n ref=\"primitiveElement\"\n v-bind=\"{ ...props, ...$attrs }\"\n as=\"input\"\n />\n</template>\n"],"names":["usePrimitiveElement","computed","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,gBAAA,EAAkB,cAAe,EAAA,GAAIA,iDAAoB,EAAA;AACjE,IAAA,MAAM,aAAaC,YAAS,CAAA,MAAM,KAAM,CAAA,OAAA,IAAW,MAAM,KAAK,CAAA;AAE9D,IAAMC,SAAA,CAAA,UAAA,EAAY,CAAC,GAAA,EAAK,IAAS,KAAA;AAC/B,MAAA,IAAI,CAAC,cAAe,CAAA,KAAA;AAClB,QAAA;AAEF,MAAA,MAAM,QAAQ,cAAe,CAAA,KAAA;AAC7B,MAAM,MAAA,UAAA,GAAa,OAAO,gBAAiB,CAAA,SAAA;AAC3C,MAAA,MAAM,UAAa,GAAA,MAAA,CAAO,wBAAyB,CAAA,UAAA,EAAY,OAAO,CAAA;AACtE,MAAA,MAAM,WAAW,UAAW,CAAA,GAAA;AAC5B,MAAI,IAAA,QAAA,IAAY,QAAQ,IAAM,EAAA;AAC5B,QAAA,MAAM,aAAa,IAAI,KAAA,CAAM,SAAS,EAAE,OAAA,EAAS,MAAM,CAAA;AACvD,QAAA,MAAM,cAAc,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AACzD,QAAS,QAAA,CAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACxB,QAAA,KAAA,CAAM,cAAc,UAAU,CAAA;AAC9B,QAAA,KAAA,CAAM,cAAc,WAAW,CAAA;AAAA;AACjC,KACD,CAAA;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisuallyHiddenInputBubble.js","sources":["../../src/VisuallyHidden/VisuallyHiddenInputBubble.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface VisuallyHiddenInputBubbleProps<T> {\n name: string\n value: T\n checked?: boolean\n required?: boolean\n disabled?: boolean\n feature?: VisuallyHiddenProps['feature']\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type { VisuallyHiddenProps } from './VisuallyHidden.vue'\nimport {
|
|
1
|
+
{"version":3,"file":"VisuallyHiddenInputBubble.js","sources":["../../src/VisuallyHidden/VisuallyHiddenInputBubble.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface VisuallyHiddenInputBubbleProps<T> {\n name: string\n value: T\n checked?: boolean\n required?: boolean\n disabled?: boolean\n feature?: VisuallyHiddenProps['feature']\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type { VisuallyHiddenProps } from './VisuallyHidden.vue'\nimport { computed, watch } from 'vue'\nimport { usePrimitiveElement } from '@/Primitive'\nimport VisuallyHidden from './VisuallyHidden.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<VisuallyHiddenInputBubbleProps<T>>(), {\n feature: 'fully-hidden',\n checked: undefined,\n})\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\nconst valueState = computed(() => props.checked ?? props.value)\n\nwatch(valueState, (cur, prev) => {\n if (!currentElement.value)\n return\n\n const input = currentElement.value as HTMLInputElement\n const inputProto = window.HTMLInputElement.prototype\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor\n const setValue = descriptor.set\n if (setValue && cur !== prev) {\n const inputEvent = new Event('input', { bubbles: true })\n const changeEvent = new Event('change', { bubbles: true })\n setValue.call(input, cur)\n input.dispatchEvent(inputEvent)\n input.dispatchEvent(changeEvent)\n }\n})\n</script>\n\n<template>\n <VisuallyHidden\n ref=\"primitiveElement\"\n v-bind=\"{ ...props, ...$attrs }\"\n as=\"input\"\n />\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,gBAAA,EAAkB,cAAe,EAAA,GAAI,mBAAoB,EAAA;AACjE,IAAA,MAAM,aAAa,QAAS,CAAA,MAAM,KAAM,CAAA,OAAA,IAAW,MAAM,KAAK,CAAA;AAE9D,IAAM,KAAA,CAAA,UAAA,EAAY,CAAC,GAAA,EAAK,IAAS,KAAA;AAC/B,MAAA,IAAI,CAAC,cAAe,CAAA,KAAA;AAClB,QAAA;AAEF,MAAA,MAAM,QAAQ,cAAe,CAAA,KAAA;AAC7B,MAAM,MAAA,UAAA,GAAa,OAAO,gBAAiB,CAAA,SAAA;AAC3C,MAAA,MAAM,UAAa,GAAA,MAAA,CAAO,wBAAyB,CAAA,UAAA,EAAY,OAAO,CAAA;AACtE,MAAA,MAAM,WAAW,UAAW,CAAA,GAAA;AAC5B,MAAI,IAAA,QAAA,IAAY,QAAQ,IAAM,EAAA;AAC5B,QAAA,MAAM,aAAa,IAAI,KAAA,CAAM,SAAS,EAAE,OAAA,EAAS,MAAM,CAAA;AACvD,QAAA,MAAM,cAAc,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AACzD,QAAS,QAAA,CAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACxB,QAAA,KAAA,CAAM,cAAc,UAAU,CAAA;AAC9B,QAAA,KAAA,CAAM,cAAc,WAAW,CAAA;AAAA;AACjC,KACD,CAAA;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSeparator.cjs","sources":["../../src/shared/component/BaseSeparator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {
|
|
1
|
+
{"version":3,"file":"BaseSeparator.cjs","sources":["../../src/shared/component/BaseSeparator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataOrientation } from '../types'\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface BaseSeparatorProps extends PrimitiveProps {\n /**\n * Orientation of the component.\n *\n * Either `vertical` or `horizontal`. Defaults to `horizontal`.\n */\n orientation?: DataOrientation\n /**\n * Whether or not the component is purely decorative. <br>When `true`, accessibility-related attributes\n * are updated so that that the rendered element is removed from the accessibility tree.\n */\n decorative?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Primitive } from '@/Primitive'\n\nconst props = withDefaults(defineProps<BaseSeparatorProps>(), {\n orientation: 'horizontal',\n})\n\nconst ORIENTATIONS = ['horizontal', 'vertical'] as const\nfunction isValidOrientation(orientation: any): orientation is DataOrientation {\n return ORIENTATIONS.includes(orientation)\n}\n\nconst computedOrientation = computed(() =>\n isValidOrientation(props.orientation) ? props.orientation : 'horizontal',\n)\n// `aria-orientation` defaults to `horizontal` so we only need it if `orientation` is vertical\nconst ariaOrientation = computed(() =>\n computedOrientation.value === 'vertical' ? props.orientation : undefined,\n)\n\nconst semanticProps = computed(() =>\n props.decorative\n ? { role: 'none' }\n : { 'aria-orientation': ariaOrientation.value, 'role': 'separator' },\n)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-orientation=\"computedOrientation\"\n v-bind=\"semanticProps\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["computed"],"mappings":";;;;;;;;;;;;;;AAuBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAM,MAAA,YAAA,GAAe,CAAC,YAAA,EAAc,UAAU,CAAA;AAC9C,IAAA,SAAS,mBAAmB,WAAkD,EAAA;AAC5E,MAAO,OAAA,YAAA,CAAa,SAAS,WAAW,CAAA;AAAA;AAG1C,IAAA,MAAM,mBAAsB,GAAAA,YAAA;AAAA,MAAS,MACnC,kBAAmB,CAAA,KAAA,CAAM,WAAW,CAAA,GAAI,MAAM,WAAc,GAAA;AAAA,KAC9D;AAEA,IAAA,MAAM,eAAkB,GAAAA,YAAA;AAAA,MAAS,MAC/B,mBAAA,CAAoB,KAAU,KAAA,UAAA,GAAa,MAAM,WAAc,GAAA;AAAA,KACjE;AAEA,IAAA,MAAM,aAAgB,GAAAA,YAAA;AAAA,MAAS,MAC7B,KAAA,CAAM,UACF,GAAA,EAAE,IAAM,EAAA,MAAA,EACR,GAAA,EAAE,kBAAoB,EAAA,eAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,WAAY;AAAA,KACvE;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSeparator.js","sources":["../../src/shared/component/BaseSeparator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {
|
|
1
|
+
{"version":3,"file":"BaseSeparator.js","sources":["../../src/shared/component/BaseSeparator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataOrientation } from '../types'\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface BaseSeparatorProps extends PrimitiveProps {\n /**\n * Orientation of the component.\n *\n * Either `vertical` or `horizontal`. Defaults to `horizontal`.\n */\n orientation?: DataOrientation\n /**\n * Whether or not the component is purely decorative. <br>When `true`, accessibility-related attributes\n * are updated so that that the rendered element is removed from the accessibility tree.\n */\n decorative?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Primitive } from '@/Primitive'\n\nconst props = withDefaults(defineProps<BaseSeparatorProps>(), {\n orientation: 'horizontal',\n})\n\nconst ORIENTATIONS = ['horizontal', 'vertical'] as const\nfunction isValidOrientation(orientation: any): orientation is DataOrientation {\n return ORIENTATIONS.includes(orientation)\n}\n\nconst computedOrientation = computed(() =>\n isValidOrientation(props.orientation) ? props.orientation : 'horizontal',\n)\n// `aria-orientation` defaults to `horizontal` so we only need it if `orientation` is vertical\nconst ariaOrientation = computed(() =>\n computedOrientation.value === 'vertical' ? props.orientation : undefined,\n)\n\nconst semanticProps = computed(() =>\n props.decorative\n ? { role: 'none' }\n : { 'aria-orientation': ariaOrientation.value, 'role': 'separator' },\n)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-orientation=\"computedOrientation\"\n v-bind=\"semanticProps\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAM,MAAA,YAAA,GAAe,CAAC,YAAA,EAAc,UAAU,CAAA;AAC9C,IAAA,SAAS,mBAAmB,WAAkD,EAAA;AAC5E,MAAO,OAAA,YAAA,CAAa,SAAS,WAAW,CAAA;AAAA;AAG1C,IAAA,MAAM,mBAAsB,GAAA,QAAA;AAAA,MAAS,MACnC,kBAAmB,CAAA,KAAA,CAAM,WAAW,CAAA,GAAI,MAAM,WAAc,GAAA;AAAA,KAC9D;AAEA,IAAA,MAAM,eAAkB,GAAA,QAAA;AAAA,MAAS,MAC/B,mBAAA,CAAoB,KAAU,KAAA,UAAA,GAAa,MAAM,WAAc,GAAA;AAAA,KACjE;AAEA,IAAA,MAAM,aAAgB,GAAA,QAAA;AAAA,MAAS,MAC7B,KAAA,CAAM,UACF,GAAA,EAAE,IAAM,EAAA,MAAA,EACR,GAAA,EAAE,kBAAoB,EAAA,eAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,WAAY;AAAA,KACvE;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.cjs","sources":["../../src/date/calendar.ts"],"sourcesContent":["/*\n * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/calendar/create.ts\n*/\n\nimport type { DateRange } from '@/shared'\nimport type { DateValue } from '@internationalized/date'\nimport type { Grid } from './types'\nimport { endOfMonth, endOfYear, startOfMonth, startOfYear } from '@internationalized/date'\nimport { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek } from './comparators'\nimport { chunk } from './utils'\n\nexport type WeekDayFormat = 'narrow' | 'short' | 'long'\n\nexport type CreateSelectProps = {\n /**\n * The date object representing the date (usually the first day of the month/year).\n */\n dateObj: DateValue\n}\n\nexport type CreateMonthProps = {\n /**\n * The date object representing the month's date (usually the first day of the month).\n */\n dateObj: DateValue\n\n /**\n * The day of the week to start the calendar on (0 for Sunday, 1 for Monday, etc.).\n */\n weekStartsOn: number\n\n /**\n * Whether to always render 6 weeks in the calendar, even if the month doesn't\n * span 6 weeks.\n */\n fixedWeeks: boolean\n\n /**\n * The locale to use when creating the calendar month.\n */\n locale: string\n}\n\n/**\n * Retrieves an array of date values representing the days between\n * the provided start and end dates.\n */\nexport function getDaysBetween(start: DateValue, end: DateValue) {\n const days: DateValue[] = []\n let dCurrent = start.add({ days: 1 })\n const dEnd = end\n while (dCurrent.compare(dEnd) < 0) {\n days.push(dCurrent)\n dCurrent = dCurrent.add({ days: 1 })\n }\n return days\n}\n\nexport function createMonth(props: CreateMonthProps): Grid<DateValue> {\n const { dateObj, weekStartsOn, fixedWeeks, locale } = props\n const daysInMonth = getDaysInMonth(dateObj)\n\n const datesArray = Array.from({ length: daysInMonth }, (_, i) => dateObj.set({ day: i + 1 }))\n\n const firstDayOfMonth = startOfMonth(dateObj)\n const lastDayOfMonth = endOfMonth(dateObj)\n\n const lastSunday = getLastFirstDayOfWeek(firstDayOfMonth, weekStartsOn, locale)\n const nextSaturday = getNextLastDayOfWeek(lastDayOfMonth, weekStartsOn, locale)\n\n const lastMonthDays = getDaysBetween(lastSunday.subtract({ days: 1 }), firstDayOfMonth)\n const nextMonthDays = getDaysBetween(lastDayOfMonth, nextSaturday.add({ days: 1 }))\n\n const totalDays = lastMonthDays.length + datesArray.length + nextMonthDays.length\n\n if (fixedWeeks && totalDays < 42) {\n const extraDays = 42 - totalDays\n\n let startFrom = nextMonthDays[nextMonthDays.length - 1]\n\n if (!startFrom)\n startFrom = endOfMonth(dateObj)\n\n const extraDaysArray = Array.from({ length: extraDays }, (_, i) => {\n const incr = i + 1\n return startFrom.add({ days: incr })\n })\n nextMonthDays.push(...extraDaysArray)\n }\n\n const allDays = lastMonthDays.concat(datesArray, nextMonthDays)\n\n const weeks = chunk(allDays, 7)\n\n return {\n value: dateObj,\n cells: allDays,\n rows: weeks,\n }\n}\n\ntype SetMonthProps = CreateMonthProps & {\n numberOfMonths: number | undefined\n currentMonths?: Grid<DateValue>[]\n}\n\ntype SetYearProps = CreateSelectProps & {\n numberOfMonths?: number\n pagedNavigation?: boolean\n}\n\ntype SetDecadeProps = CreateSelectProps & {\n startIndex?: number\n endIndex: number\n}\n\nexport function startOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return startOfYear(dateObj.subtract({ years: dateObj.year - Math.floor(dateObj.year / 10) * 10 }).set({ day: 1, month: 1 }))\n}\n\nexport function endOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return endOfYear(dateObj.add({ years: Math.ceil((dateObj.year + 1) / 10) * 10 - dateObj.year - 1 }).set({ day: 35, month: 12 }))\n}\n\nexport function createDecade(props: SetDecadeProps): DateValue[] {\n const { dateObj, startIndex, endIndex } = props\n\n const decadeArray = Array.from({ length: Math.abs(startIndex ?? 0) + endIndex }, (_, i) =>\n i <= Math.abs((startIndex ?? 0))\n ? dateObj.subtract({ years: i }).set({ day: 1, month: 1 })\n : dateObj.add({ years: i - endIndex }).set({ day: 1, month: 1 }))\n\n decadeArray.sort((a: DateValue, b: DateValue) => a.year - b.year)\n\n return decadeArray\n}\n\nexport function createYear(props: SetYearProps): DateValue[] {\n const { dateObj, numberOfMonths = 1, pagedNavigation = false } = props\n\n if (numberOfMonths && pagedNavigation) {\n const monthsArray = Array.from({ length: Math.floor(12 / numberOfMonths) }, (_, i) => startOfMonth(dateObj.set({ month: i * numberOfMonths + 1 })))\n\n return monthsArray\n }\n\n const monthsArray = Array.from({ length: 12 }, (_, i) => startOfMonth(dateObj.set({ month: i + 1 })))\n return monthsArray\n}\n\nexport function createMonths(props: SetMonthProps) {\n const { numberOfMonths, dateObj, ...monthProps } = props\n\n const months: Grid<DateValue>[] = []\n\n if (!numberOfMonths || numberOfMonths === 1) {\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n return months\n }\n\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n\n // Create all the months, starting with the current month\n for (let i = 1; i < numberOfMonths; i++) {\n const nextMonth = dateObj.add({ months: i })\n months.push(\n createMonth({\n ...monthProps,\n dateObj: nextMonth,\n }),\n )\n }\n\n return months\n}\n\nexport function createYearRange({ start, end }: DateRange): DateValue[] {\n const years: DateValue[] = []\n\n if (!start || !end)\n return years\n\n let current = startOfYear(start)\n\n while (current.compare(end) <= 0) {\n years.push(current)\n // Move to the first day of the next year\n current = startOfYear(current.add({ years: 1 }))\n }\n\n return years\n}\n\nexport function createDateRange({ start, end }: DateRange): DateValue[] {\n const dates: DateValue[] = []\n\n if (!start || !end)\n return dates\n\n let current = start\n\n while (current.compare(end) <= 0) {\n dates.push(current)\n current = current.add({ days: 1 })\n }\n\n return dates\n}\n"],"names":["getDaysInMonth","startOfMonth","endOfMonth","getLastFirstDayOfWeek","getNextLastDayOfWeek","chunk","startOfYear","endOfYear","monthsArray"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar.cjs","sources":["../../src/date/calendar.ts"],"sourcesContent":["/*\n * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/calendar/create.ts\n*/\n\nimport type { DateValue } from '@internationalized/date'\nimport type { Grid } from './types'\nimport type { DateRange } from '@/shared'\nimport { endOfMonth, endOfYear, startOfMonth, startOfYear } from '@internationalized/date'\nimport { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek } from './comparators'\nimport { chunk } from './utils'\n\nexport type WeekDayFormat = 'narrow' | 'short' | 'long'\n\nexport type CreateSelectProps = {\n /**\n * The date object representing the date (usually the first day of the month/year).\n */\n dateObj: DateValue\n}\n\nexport type CreateMonthProps = {\n /**\n * The date object representing the month's date (usually the first day of the month).\n */\n dateObj: DateValue\n\n /**\n * The day of the week to start the calendar on (0 for Sunday, 1 for Monday, etc.).\n */\n weekStartsOn: number\n\n /**\n * Whether to always render 6 weeks in the calendar, even if the month doesn't\n * span 6 weeks.\n */\n fixedWeeks: boolean\n\n /**\n * The locale to use when creating the calendar month.\n */\n locale: string\n}\n\n/**\n * Retrieves an array of date values representing the days between\n * the provided start and end dates.\n */\nexport function getDaysBetween(start: DateValue, end: DateValue) {\n const days: DateValue[] = []\n let dCurrent = start.add({ days: 1 })\n const dEnd = end\n while (dCurrent.compare(dEnd) < 0) {\n days.push(dCurrent)\n dCurrent = dCurrent.add({ days: 1 })\n }\n return days\n}\n\nexport function createMonth(props: CreateMonthProps): Grid<DateValue> {\n const { dateObj, weekStartsOn, fixedWeeks, locale } = props\n const daysInMonth = getDaysInMonth(dateObj)\n\n const datesArray = Array.from({ length: daysInMonth }, (_, i) => dateObj.set({ day: i + 1 }))\n\n const firstDayOfMonth = startOfMonth(dateObj)\n const lastDayOfMonth = endOfMonth(dateObj)\n\n const lastSunday = getLastFirstDayOfWeek(firstDayOfMonth, weekStartsOn, locale)\n const nextSaturday = getNextLastDayOfWeek(lastDayOfMonth, weekStartsOn, locale)\n\n const lastMonthDays = getDaysBetween(lastSunday.subtract({ days: 1 }), firstDayOfMonth)\n const nextMonthDays = getDaysBetween(lastDayOfMonth, nextSaturday.add({ days: 1 }))\n\n const totalDays = lastMonthDays.length + datesArray.length + nextMonthDays.length\n\n if (fixedWeeks && totalDays < 42) {\n const extraDays = 42 - totalDays\n\n let startFrom = nextMonthDays[nextMonthDays.length - 1]\n\n if (!startFrom)\n startFrom = endOfMonth(dateObj)\n\n const extraDaysArray = Array.from({ length: extraDays }, (_, i) => {\n const incr = i + 1\n return startFrom.add({ days: incr })\n })\n nextMonthDays.push(...extraDaysArray)\n }\n\n const allDays = lastMonthDays.concat(datesArray, nextMonthDays)\n\n const weeks = chunk(allDays, 7)\n\n return {\n value: dateObj,\n cells: allDays,\n rows: weeks,\n }\n}\n\ntype SetMonthProps = CreateMonthProps & {\n numberOfMonths: number | undefined\n currentMonths?: Grid<DateValue>[]\n}\n\ntype SetYearProps = CreateSelectProps & {\n numberOfMonths?: number\n pagedNavigation?: boolean\n}\n\ntype SetDecadeProps = CreateSelectProps & {\n startIndex?: number\n endIndex: number\n}\n\nexport function startOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return startOfYear(dateObj.subtract({ years: dateObj.year - Math.floor(dateObj.year / 10) * 10 }).set({ day: 1, month: 1 }))\n}\n\nexport function endOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return endOfYear(dateObj.add({ years: Math.ceil((dateObj.year + 1) / 10) * 10 - dateObj.year - 1 }).set({ day: 35, month: 12 }))\n}\n\nexport function createDecade(props: SetDecadeProps): DateValue[] {\n const { dateObj, startIndex, endIndex } = props\n\n const decadeArray = Array.from({ length: Math.abs(startIndex ?? 0) + endIndex }, (_, i) =>\n i <= Math.abs((startIndex ?? 0))\n ? dateObj.subtract({ years: i }).set({ day: 1, month: 1 })\n : dateObj.add({ years: i - endIndex }).set({ day: 1, month: 1 }))\n\n decadeArray.sort((a: DateValue, b: DateValue) => a.year - b.year)\n\n return decadeArray\n}\n\nexport function createYear(props: SetYearProps): DateValue[] {\n const { dateObj, numberOfMonths = 1, pagedNavigation = false } = props\n\n if (numberOfMonths && pagedNavigation) {\n const monthsArray = Array.from({ length: Math.floor(12 / numberOfMonths) }, (_, i) => startOfMonth(dateObj.set({ month: i * numberOfMonths + 1 })))\n\n return monthsArray\n }\n\n const monthsArray = Array.from({ length: 12 }, (_, i) => startOfMonth(dateObj.set({ month: i + 1 })))\n return monthsArray\n}\n\nexport function createMonths(props: SetMonthProps) {\n const { numberOfMonths, dateObj, ...monthProps } = props\n\n const months: Grid<DateValue>[] = []\n\n if (!numberOfMonths || numberOfMonths === 1) {\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n return months\n }\n\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n\n // Create all the months, starting with the current month\n for (let i = 1; i < numberOfMonths; i++) {\n const nextMonth = dateObj.add({ months: i })\n months.push(\n createMonth({\n ...monthProps,\n dateObj: nextMonth,\n }),\n )\n }\n\n return months\n}\n\nexport function createYearRange({ start, end }: DateRange): DateValue[] {\n const years: DateValue[] = []\n\n if (!start || !end)\n return years\n\n let current = startOfYear(start)\n\n while (current.compare(end) <= 0) {\n years.push(current)\n // Move to the first day of the next year\n current = startOfYear(current.add({ years: 1 }))\n }\n\n return years\n}\n\nexport function createDateRange({ start, end }: DateRange): DateValue[] {\n const dates: DateValue[] = []\n\n if (!start || !end)\n return dates\n\n let current = start\n\n while (current.compare(end) <= 0) {\n dates.push(current)\n current = current.add({ days: 1 })\n }\n\n return dates\n}\n"],"names":["getDaysInMonth","startOfMonth","endOfMonth","getLastFirstDayOfWeek","getNextLastDayOfWeek","chunk","startOfYear","endOfYear","monthsArray"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../src/date/calendar.ts"],"sourcesContent":["/*\n * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/calendar/create.ts\n*/\n\nimport type { DateRange } from '@/shared'\nimport type { DateValue } from '@internationalized/date'\nimport type { Grid } from './types'\nimport { endOfMonth, endOfYear, startOfMonth, startOfYear } from '@internationalized/date'\nimport { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek } from './comparators'\nimport { chunk } from './utils'\n\nexport type WeekDayFormat = 'narrow' | 'short' | 'long'\n\nexport type CreateSelectProps = {\n /**\n * The date object representing the date (usually the first day of the month/year).\n */\n dateObj: DateValue\n}\n\nexport type CreateMonthProps = {\n /**\n * The date object representing the month's date (usually the first day of the month).\n */\n dateObj: DateValue\n\n /**\n * The day of the week to start the calendar on (0 for Sunday, 1 for Monday, etc.).\n */\n weekStartsOn: number\n\n /**\n * Whether to always render 6 weeks in the calendar, even if the month doesn't\n * span 6 weeks.\n */\n fixedWeeks: boolean\n\n /**\n * The locale to use when creating the calendar month.\n */\n locale: string\n}\n\n/**\n * Retrieves an array of date values representing the days between\n * the provided start and end dates.\n */\nexport function getDaysBetween(start: DateValue, end: DateValue) {\n const days: DateValue[] = []\n let dCurrent = start.add({ days: 1 })\n const dEnd = end\n while (dCurrent.compare(dEnd) < 0) {\n days.push(dCurrent)\n dCurrent = dCurrent.add({ days: 1 })\n }\n return days\n}\n\nexport function createMonth(props: CreateMonthProps): Grid<DateValue> {\n const { dateObj, weekStartsOn, fixedWeeks, locale } = props\n const daysInMonth = getDaysInMonth(dateObj)\n\n const datesArray = Array.from({ length: daysInMonth }, (_, i) => dateObj.set({ day: i + 1 }))\n\n const firstDayOfMonth = startOfMonth(dateObj)\n const lastDayOfMonth = endOfMonth(dateObj)\n\n const lastSunday = getLastFirstDayOfWeek(firstDayOfMonth, weekStartsOn, locale)\n const nextSaturday = getNextLastDayOfWeek(lastDayOfMonth, weekStartsOn, locale)\n\n const lastMonthDays = getDaysBetween(lastSunday.subtract({ days: 1 }), firstDayOfMonth)\n const nextMonthDays = getDaysBetween(lastDayOfMonth, nextSaturday.add({ days: 1 }))\n\n const totalDays = lastMonthDays.length + datesArray.length + nextMonthDays.length\n\n if (fixedWeeks && totalDays < 42) {\n const extraDays = 42 - totalDays\n\n let startFrom = nextMonthDays[nextMonthDays.length - 1]\n\n if (!startFrom)\n startFrom = endOfMonth(dateObj)\n\n const extraDaysArray = Array.from({ length: extraDays }, (_, i) => {\n const incr = i + 1\n return startFrom.add({ days: incr })\n })\n nextMonthDays.push(...extraDaysArray)\n }\n\n const allDays = lastMonthDays.concat(datesArray, nextMonthDays)\n\n const weeks = chunk(allDays, 7)\n\n return {\n value: dateObj,\n cells: allDays,\n rows: weeks,\n }\n}\n\ntype SetMonthProps = CreateMonthProps & {\n numberOfMonths: number | undefined\n currentMonths?: Grid<DateValue>[]\n}\n\ntype SetYearProps = CreateSelectProps & {\n numberOfMonths?: number\n pagedNavigation?: boolean\n}\n\ntype SetDecadeProps = CreateSelectProps & {\n startIndex?: number\n endIndex: number\n}\n\nexport function startOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return startOfYear(dateObj.subtract({ years: dateObj.year - Math.floor(dateObj.year / 10) * 10 }).set({ day: 1, month: 1 }))\n}\n\nexport function endOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return endOfYear(dateObj.add({ years: Math.ceil((dateObj.year + 1) / 10) * 10 - dateObj.year - 1 }).set({ day: 35, month: 12 }))\n}\n\nexport function createDecade(props: SetDecadeProps): DateValue[] {\n const { dateObj, startIndex, endIndex } = props\n\n const decadeArray = Array.from({ length: Math.abs(startIndex ?? 0) + endIndex }, (_, i) =>\n i <= Math.abs((startIndex ?? 0))\n ? dateObj.subtract({ years: i }).set({ day: 1, month: 1 })\n : dateObj.add({ years: i - endIndex }).set({ day: 1, month: 1 }))\n\n decadeArray.sort((a: DateValue, b: DateValue) => a.year - b.year)\n\n return decadeArray\n}\n\nexport function createYear(props: SetYearProps): DateValue[] {\n const { dateObj, numberOfMonths = 1, pagedNavigation = false } = props\n\n if (numberOfMonths && pagedNavigation) {\n const monthsArray = Array.from({ length: Math.floor(12 / numberOfMonths) }, (_, i) => startOfMonth(dateObj.set({ month: i * numberOfMonths + 1 })))\n\n return monthsArray\n }\n\n const monthsArray = Array.from({ length: 12 }, (_, i) => startOfMonth(dateObj.set({ month: i + 1 })))\n return monthsArray\n}\n\nexport function createMonths(props: SetMonthProps) {\n const { numberOfMonths, dateObj, ...monthProps } = props\n\n const months: Grid<DateValue>[] = []\n\n if (!numberOfMonths || numberOfMonths === 1) {\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n return months\n }\n\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n\n // Create all the months, starting with the current month\n for (let i = 1; i < numberOfMonths; i++) {\n const nextMonth = dateObj.add({ months: i })\n months.push(\n createMonth({\n ...monthProps,\n dateObj: nextMonth,\n }),\n )\n }\n\n return months\n}\n\nexport function createYearRange({ start, end }: DateRange): DateValue[] {\n const years: DateValue[] = []\n\n if (!start || !end)\n return years\n\n let current = startOfYear(start)\n\n while (current.compare(end) <= 0) {\n years.push(current)\n // Move to the first day of the next year\n current = startOfYear(current.add({ years: 1 }))\n }\n\n return years\n}\n\nexport function createDateRange({ start, end }: DateRange): DateValue[] {\n const dates: DateValue[] = []\n\n if (!start || !end)\n return dates\n\n let current = start\n\n while (current.compare(end) <= 0) {\n dates.push(current)\n current = current.add({ days: 1 })\n }\n\n return dates\n}\n"],"names":["monthsArray"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../src/date/calendar.ts"],"sourcesContent":["/*\n * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/calendar/create.ts\n*/\n\nimport type { DateValue } from '@internationalized/date'\nimport type { Grid } from './types'\nimport type { DateRange } from '@/shared'\nimport { endOfMonth, endOfYear, startOfMonth, startOfYear } from '@internationalized/date'\nimport { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek } from './comparators'\nimport { chunk } from './utils'\n\nexport type WeekDayFormat = 'narrow' | 'short' | 'long'\n\nexport type CreateSelectProps = {\n /**\n * The date object representing the date (usually the first day of the month/year).\n */\n dateObj: DateValue\n}\n\nexport type CreateMonthProps = {\n /**\n * The date object representing the month's date (usually the first day of the month).\n */\n dateObj: DateValue\n\n /**\n * The day of the week to start the calendar on (0 for Sunday, 1 for Monday, etc.).\n */\n weekStartsOn: number\n\n /**\n * Whether to always render 6 weeks in the calendar, even if the month doesn't\n * span 6 weeks.\n */\n fixedWeeks: boolean\n\n /**\n * The locale to use when creating the calendar month.\n */\n locale: string\n}\n\n/**\n * Retrieves an array of date values representing the days between\n * the provided start and end dates.\n */\nexport function getDaysBetween(start: DateValue, end: DateValue) {\n const days: DateValue[] = []\n let dCurrent = start.add({ days: 1 })\n const dEnd = end\n while (dCurrent.compare(dEnd) < 0) {\n days.push(dCurrent)\n dCurrent = dCurrent.add({ days: 1 })\n }\n return days\n}\n\nexport function createMonth(props: CreateMonthProps): Grid<DateValue> {\n const { dateObj, weekStartsOn, fixedWeeks, locale } = props\n const daysInMonth = getDaysInMonth(dateObj)\n\n const datesArray = Array.from({ length: daysInMonth }, (_, i) => dateObj.set({ day: i + 1 }))\n\n const firstDayOfMonth = startOfMonth(dateObj)\n const lastDayOfMonth = endOfMonth(dateObj)\n\n const lastSunday = getLastFirstDayOfWeek(firstDayOfMonth, weekStartsOn, locale)\n const nextSaturday = getNextLastDayOfWeek(lastDayOfMonth, weekStartsOn, locale)\n\n const lastMonthDays = getDaysBetween(lastSunday.subtract({ days: 1 }), firstDayOfMonth)\n const nextMonthDays = getDaysBetween(lastDayOfMonth, nextSaturday.add({ days: 1 }))\n\n const totalDays = lastMonthDays.length + datesArray.length + nextMonthDays.length\n\n if (fixedWeeks && totalDays < 42) {\n const extraDays = 42 - totalDays\n\n let startFrom = nextMonthDays[nextMonthDays.length - 1]\n\n if (!startFrom)\n startFrom = endOfMonth(dateObj)\n\n const extraDaysArray = Array.from({ length: extraDays }, (_, i) => {\n const incr = i + 1\n return startFrom.add({ days: incr })\n })\n nextMonthDays.push(...extraDaysArray)\n }\n\n const allDays = lastMonthDays.concat(datesArray, nextMonthDays)\n\n const weeks = chunk(allDays, 7)\n\n return {\n value: dateObj,\n cells: allDays,\n rows: weeks,\n }\n}\n\ntype SetMonthProps = CreateMonthProps & {\n numberOfMonths: number | undefined\n currentMonths?: Grid<DateValue>[]\n}\n\ntype SetYearProps = CreateSelectProps & {\n numberOfMonths?: number\n pagedNavigation?: boolean\n}\n\ntype SetDecadeProps = CreateSelectProps & {\n startIndex?: number\n endIndex: number\n}\n\nexport function startOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return startOfYear(dateObj.subtract({ years: dateObj.year - Math.floor(dateObj.year / 10) * 10 }).set({ day: 1, month: 1 }))\n}\n\nexport function endOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return endOfYear(dateObj.add({ years: Math.ceil((dateObj.year + 1) / 10) * 10 - dateObj.year - 1 }).set({ day: 35, month: 12 }))\n}\n\nexport function createDecade(props: SetDecadeProps): DateValue[] {\n const { dateObj, startIndex, endIndex } = props\n\n const decadeArray = Array.from({ length: Math.abs(startIndex ?? 0) + endIndex }, (_, i) =>\n i <= Math.abs((startIndex ?? 0))\n ? dateObj.subtract({ years: i }).set({ day: 1, month: 1 })\n : dateObj.add({ years: i - endIndex }).set({ day: 1, month: 1 }))\n\n decadeArray.sort((a: DateValue, b: DateValue) => a.year - b.year)\n\n return decadeArray\n}\n\nexport function createYear(props: SetYearProps): DateValue[] {\n const { dateObj, numberOfMonths = 1, pagedNavigation = false } = props\n\n if (numberOfMonths && pagedNavigation) {\n const monthsArray = Array.from({ length: Math.floor(12 / numberOfMonths) }, (_, i) => startOfMonth(dateObj.set({ month: i * numberOfMonths + 1 })))\n\n return monthsArray\n }\n\n const monthsArray = Array.from({ length: 12 }, (_, i) => startOfMonth(dateObj.set({ month: i + 1 })))\n return monthsArray\n}\n\nexport function createMonths(props: SetMonthProps) {\n const { numberOfMonths, dateObj, ...monthProps } = props\n\n const months: Grid<DateValue>[] = []\n\n if (!numberOfMonths || numberOfMonths === 1) {\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n return months\n }\n\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n\n // Create all the months, starting with the current month\n for (let i = 1; i < numberOfMonths; i++) {\n const nextMonth = dateObj.add({ months: i })\n months.push(\n createMonth({\n ...monthProps,\n dateObj: nextMonth,\n }),\n )\n }\n\n return months\n}\n\nexport function createYearRange({ start, end }: DateRange): DateValue[] {\n const years: DateValue[] = []\n\n if (!start || !end)\n return years\n\n let current = startOfYear(start)\n\n while (current.compare(end) <= 0) {\n years.push(current)\n // Move to the first day of the next year\n current = startOfYear(current.add({ years: 1 }))\n }\n\n return years\n}\n\nexport function createDateRange({ start, end }: DateRange): DateValue[] {\n const dates: DateValue[] = []\n\n if (!start || !end)\n return dates\n\n let current = start\n\n while (current.compare(end) <= 0) {\n dates.push(current)\n current = current.add({ days: 1 })\n }\n\n return dates\n}\n"],"names":["monthsArray"],"mappings":"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"}
|
package/dist/date/parser.cjs
CHANGED
|
@@ -65,13 +65,23 @@ function createContentObj(props) {
|
|
|
65
65
|
if ("hour" in segmentValues) {
|
|
66
66
|
const value = segmentValues[part];
|
|
67
67
|
if (value !== null) {
|
|
68
|
-
if (part === "day"
|
|
69
|
-
return formatter.part(props.dateRef.set({
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
if (part === "day") {
|
|
69
|
+
return formatter.part(props.dateRef.set({
|
|
70
|
+
[part]: value,
|
|
71
|
+
/**
|
|
72
|
+
* Edge case for the day field:
|
|
73
|
+
*
|
|
74
|
+
* 1. If the month is filled,
|
|
75
|
+
* we need to ensure that the day snaps to the maximum value of that month.
|
|
76
|
+
* 2. If the month is not filled,
|
|
77
|
+
* we default to the month with the maximum number of days (here just using January, 31 days),
|
|
78
|
+
* so that user can input any possible day.
|
|
79
|
+
*/
|
|
80
|
+
month: segmentValues.month ?? 1
|
|
81
|
+
}), part, { hourCycle: date_utils.normalizeHourCycle(props.hourCycle) });
|
|
72
82
|
}
|
|
73
83
|
return formatter.part(props.dateRef.set({ [part]: value }), part, {
|
|
74
|
-
hourCycle: props.hourCycle
|
|
84
|
+
hourCycle: date_utils.normalizeHourCycle(props.hourCycle)
|
|
75
85
|
});
|
|
76
86
|
} else {
|
|
77
87
|
return date_placeholders.getPlaceholder(part, "", locale.value);
|
|
@@ -80,8 +90,13 @@ function createContentObj(props) {
|
|
|
80
90
|
if (date_parts.isDateSegmentPart(part)) {
|
|
81
91
|
const value = segmentValues[part];
|
|
82
92
|
if (value !== null) {
|
|
83
|
-
if (part === "day"
|
|
84
|
-
return formatter.part(props.dateRef.set({
|
|
93
|
+
if (part === "day") {
|
|
94
|
+
return formatter.part(props.dateRef.set({
|
|
95
|
+
[part]: value,
|
|
96
|
+
// Same logic as above for the day field
|
|
97
|
+
month: segmentValues.month ?? 1
|
|
98
|
+
}), part);
|
|
99
|
+
}
|
|
85
100
|
return formatter.part(props.dateRef.set({ [part]: value }), part);
|
|
86
101
|
} else {
|
|
87
102
|
return date_placeholders.getPlaceholder(part, "", locale.value);
|
package/dist/date/parser.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.cjs","sources":["../../src/shared/date/parser.ts"],"sourcesContent":["import type { Formatter } from '@/shared'\nimport type { DateSegmentPart, Granularity, HourCycle, SegmentContentObj, SegmentPart, SegmentValueObj, TimeSegmentPart } from '@/shared/date'\nimport type { DateFields, DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport { isZonedDateTime, toDate } from '@/date'\nimport { DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, getOptsByGranularity, getPlaceholder, isDateSegmentPart, isSegmentPart, TIME_SEGMENT_PARTS } from '@/shared/date'\n\nconst calendarDateTimeGranularities = ['hour', 'minute', 'second']\n\ntype SyncDateSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\ntype SyncTimeSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\nexport function syncTimeSegmentValues(props: SyncTimeSegmentValuesProps) {\n return Object.fromEntries(TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, props.formatter.dayPeriod(toDate(props.value))]\n return [part, props.value[part as keyof DateValue]]\n })) as SegmentValueObj\n}\n\nexport function syncSegmentValues(props: SyncDateSegmentValuesProps) {\n const { formatter } = props\n\n const dateValues = DATE_SEGMENT_PARTS.map((part) => {\n return [part, props.value[part]]\n })\n if ('hour' in props.value) {\n const timeValues = syncTimeSegmentValues({ value: props.value, formatter })\n\n return { ...Object.fromEntries(dateValues), ...timeValues } as SegmentValueObj\n }\n\n return Object.fromEntries(dateValues) as SegmentValueObj\n}\n\nexport function initializeTimeSegmentValues(granularity: 'hour' | 'minute' | 'second'): SegmentValueObj {\n return Object.fromEntries(\n TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n else return true\n }),\n )\n}\n\nexport function initializeSegmentValues(granularity: Granularity): SegmentValueObj {\n const initialParts = EDITABLE_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n if (granularity === 'day')\n return !calendarDateTimeGranularities.includes(key) && key !== 'dayPeriod'\n else return true\n })\n\n return Object.fromEntries(initialParts)\n}\n\ntype SharedContentProps = {\n granularity: Granularity\n dateRef: DateValue\n formatter: Formatter\n hideTimeZone: boolean\n hourCycle: HourCycle\n isTimeValue?: boolean\n}\n\ntype CreateContentObjProps = SharedContentProps & {\n segmentValues: SegmentValueObj\n locale: Ref<string>\n}\n\ntype CreateContentArrProps = SharedContentProps & {\n contentObj: SegmentContentObj\n}\n\nfunction createContentObj(props: CreateContentObjProps) {\n const { segmentValues, formatter, locale } = props\n function getPartContent(part: DateSegmentPart | TimeSegmentPart) {\n if ('hour' in segmentValues) {\n const value = segmentValues[part]\n if (value !== null) {\n /**\n * Edge case for when the month field is filled and the day field snaps to the maximum value of the value of the placeholder month\n */\n if (part === 'day' && segmentValues.month !== null) {\n return formatter.part(props.dateRef.set({ [part as keyof DateFields]: value, month: segmentValues.month }), part, {\n hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n })\n }\n return formatter.part(props.dateRef.set({ [part]: value }), part, {\n hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n })\n }\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n else {\n if (isDateSegmentPart(part)) {\n const value = segmentValues[part]\n if (value !== null) {\n if (part === 'day' && segmentValues.month !== null)\n /**\n * As described above, same function\n */\n return formatter.part(props.dateRef.set({ [part]: value, month: segmentValues.month }), part)\n\n return formatter.part(props.dateRef.set({ [part]: value }), part)\n }\n\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n return ''\n }\n }\n\n const content = Object.keys(segmentValues).reduce((obj, part) => {\n if (!isSegmentPart(part))\n return obj\n if ('hour' in segmentValues && part === 'dayPeriod') {\n const value = segmentValues[part]\n\n if (value !== null)\n obj[part] = value\n\n else\n obj[part] = getPlaceholder(part, 'AM', locale.value)\n }\n else {\n obj[part] = getPartContent(part)\n }\n\n return obj\n }, {} as SegmentContentObj)\n\n return content\n}\n\nfunction createContentArr(props: CreateContentArrProps) {\n const { granularity, formatter, contentObj, hideTimeZone, hourCycle, isTimeValue } = props\n const parts = formatter.toParts(props.dateRef, getOptsByGranularity(granularity, hourCycle, isTimeValue))\n\n const segmentContentArr = parts\n .map((part) => {\n const defaultParts = ['literal', 'timeZoneName', null]\n\n if (defaultParts.includes(part.type) || !isSegmentPart(part.type)) {\n return {\n part: part.type,\n value: part.value,\n }\n }\n\n return {\n part: part.type,\n value: contentObj[part.type],\n }\n })\n .filter((segment): segment is { part: SegmentPart, value: string } => {\n if (segment.part === null || segment.value === null)\n return false\n if (segment.part === 'timeZoneName' && (!isZonedDateTime(props.dateRef) || hideTimeZone))\n return false\n\n return true\n })\n\n return segmentContentArr\n}\n\ntype CreateContentProps = CreateContentObjProps\n\nexport function createContent(props: CreateContentProps) {\n const contentObj = createContentObj(props)\n\n const contentArr = createContentArr({\n contentObj,\n ...props,\n })\n\n return {\n obj: contentObj,\n arr: contentArr,\n }\n}\n"],"names":["TIME_SEGMENT_PARTS","toDate","DATE_SEGMENT_PARTS","EDITABLE_SEGMENT_PARTS","getPlaceholder","isDateSegmentPart","isSegmentPart","getOptsByGranularity","isZonedDateTime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.cjs","sources":["../../src/shared/date/parser.ts"],"sourcesContent":["import type { DateFields, DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { Formatter } from '@/shared'\nimport type { DateSegmentPart, Granularity, HourCycle, SegmentContentObj, SegmentPart, SegmentValueObj, TimeSegmentPart } from '@/shared/date'\nimport { isZonedDateTime, toDate } from '@/date'\nimport { DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, getOptsByGranularity, getPlaceholder, isDateSegmentPart, isSegmentPart, normalizeHourCycle, TIME_SEGMENT_PARTS } from '@/shared/date'\n\nconst calendarDateTimeGranularities = ['hour', 'minute', 'second']\n\ntype SyncDateSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\ntype SyncTimeSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\nexport function syncTimeSegmentValues(props: SyncTimeSegmentValuesProps) {\n return Object.fromEntries(TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, props.formatter.dayPeriod(toDate(props.value))]\n return [part, props.value[part as keyof DateValue]]\n })) as SegmentValueObj\n}\n\nexport function syncSegmentValues(props: SyncDateSegmentValuesProps) {\n const { formatter } = props\n\n const dateValues = DATE_SEGMENT_PARTS.map((part) => {\n return [part, props.value[part]]\n })\n if ('hour' in props.value) {\n const timeValues = syncTimeSegmentValues({ value: props.value, formatter })\n\n return { ...Object.fromEntries(dateValues), ...timeValues } as SegmentValueObj\n }\n\n return Object.fromEntries(dateValues) as SegmentValueObj\n}\n\nexport function initializeTimeSegmentValues(granularity: 'hour' | 'minute' | 'second'): SegmentValueObj {\n return Object.fromEntries(\n TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n else return true\n }),\n )\n}\n\nexport function initializeSegmentValues(granularity: Granularity): SegmentValueObj {\n const initialParts = EDITABLE_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n if (granularity === 'day')\n return !calendarDateTimeGranularities.includes(key) && key !== 'dayPeriod'\n else return true\n })\n\n return Object.fromEntries(initialParts)\n}\n\ntype SharedContentProps = {\n granularity: Granularity\n dateRef: DateValue\n formatter: Formatter\n hideTimeZone: boolean\n hourCycle: HourCycle\n isTimeValue?: boolean\n}\n\ntype CreateContentObjProps = SharedContentProps & {\n segmentValues: SegmentValueObj\n locale: Ref<string>\n}\n\ntype CreateContentArrProps = SharedContentProps & {\n contentObj: SegmentContentObj\n}\n\nfunction createContentObj(props: CreateContentObjProps) {\n const { segmentValues, formatter, locale } = props\n function getPartContent(part: DateSegmentPart | TimeSegmentPart) {\n if ('hour' in segmentValues) {\n const value = segmentValues[part]\n if (value !== null) {\n if (part === 'day') {\n return formatter.part(props.dateRef.set({\n [part as keyof DateFields]: value,\n /**\n * Edge case for the day field:\n *\n * 1. If the month is filled,\n * we need to ensure that the day snaps to the maximum value of that month.\n * 2. If the month is not filled,\n * we default to the month with the maximum number of days (here just using January, 31 days),\n * so that user can input any possible day.\n */\n month: segmentValues.month ?? 1,\n }), part, { hourCycle: normalizeHourCycle(props.hourCycle) })\n }\n return formatter.part(props.dateRef.set({ [part]: value }), part, {\n hourCycle: normalizeHourCycle(props.hourCycle),\n })\n }\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n else {\n if (isDateSegmentPart(part)) {\n const value = segmentValues[part]\n if (value !== null) {\n if (part === 'day') {\n return formatter.part(props.dateRef.set({\n [part]: value,\n // Same logic as above for the day field\n month: segmentValues.month ?? 1,\n }), part)\n }\n\n return formatter.part(props.dateRef.set({ [part]: value }), part)\n }\n\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n return ''\n }\n }\n\n const content = Object.keys(segmentValues).reduce((obj, part) => {\n if (!isSegmentPart(part))\n return obj\n if ('hour' in segmentValues && part === 'dayPeriod') {\n const value = segmentValues[part]\n\n if (value !== null)\n obj[part] = value\n\n else\n obj[part] = getPlaceholder(part, 'AM', locale.value)\n }\n else {\n obj[part] = getPartContent(part)\n }\n\n return obj\n }, {} as SegmentContentObj)\n\n return content\n}\n\nfunction createContentArr(props: CreateContentArrProps) {\n const { granularity, formatter, contentObj, hideTimeZone, hourCycle, isTimeValue } = props\n const parts = formatter.toParts(props.dateRef, getOptsByGranularity(granularity, hourCycle, isTimeValue))\n\n const segmentContentArr = parts\n .map((part) => {\n const defaultParts = ['literal', 'timeZoneName', null]\n\n if (defaultParts.includes(part.type) || !isSegmentPart(part.type)) {\n return {\n part: part.type,\n value: part.value,\n }\n }\n\n return {\n part: part.type,\n value: contentObj[part.type],\n }\n })\n .filter((segment): segment is { part: SegmentPart, value: string } => {\n if (segment.part === null || segment.value === null)\n return false\n if (segment.part === 'timeZoneName' && (!isZonedDateTime(props.dateRef) || hideTimeZone))\n return false\n\n return true\n })\n\n return segmentContentArr\n}\n\ntype CreateContentProps = CreateContentObjProps\n\nexport function createContent(props: CreateContentProps) {\n const contentObj = createContentObj(props)\n\n const contentArr = createContentArr({\n contentObj,\n ...props,\n })\n\n return {\n obj: contentObj,\n arr: contentArr,\n }\n}\n"],"names":["TIME_SEGMENT_PARTS","toDate","DATE_SEGMENT_PARTS","EDITABLE_SEGMENT_PARTS","normalizeHourCycle","getPlaceholder","isDateSegmentPart","isSegmentPart","getOptsByGranularity","isZonedDateTime"],"mappings":"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"}
|
package/dist/date/parser.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as toDate, a as isZonedDateTime } from './comparators.js';
|
|
2
2
|
import { E as EDITABLE_SEGMENT_PARTS, D as DATE_SEGMENT_PARTS, T as TIME_SEGMENT_PARTS, i as isSegmentPart, a as isDateSegmentPart } from './parts.js';
|
|
3
3
|
import { g as getPlaceholder } from './placeholders.js';
|
|
4
|
-
import { g as getOptsByGranularity } from './utils.js';
|
|
4
|
+
import { g as getOptsByGranularity, n as normalizeHourCycle } from './utils.js';
|
|
5
5
|
|
|
6
6
|
const calendarDateTimeGranularities = ["hour", "minute", "second"];
|
|
7
7
|
function syncTimeSegmentValues(props) {
|
|
@@ -63,13 +63,23 @@ function createContentObj(props) {
|
|
|
63
63
|
if ("hour" in segmentValues) {
|
|
64
64
|
const value = segmentValues[part];
|
|
65
65
|
if (value !== null) {
|
|
66
|
-
if (part === "day"
|
|
67
|
-
return formatter.part(props.dateRef.set({
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
if (part === "day") {
|
|
67
|
+
return formatter.part(props.dateRef.set({
|
|
68
|
+
[part]: value,
|
|
69
|
+
/**
|
|
70
|
+
* Edge case for the day field:
|
|
71
|
+
*
|
|
72
|
+
* 1. If the month is filled,
|
|
73
|
+
* we need to ensure that the day snaps to the maximum value of that month.
|
|
74
|
+
* 2. If the month is not filled,
|
|
75
|
+
* we default to the month with the maximum number of days (here just using January, 31 days),
|
|
76
|
+
* so that user can input any possible day.
|
|
77
|
+
*/
|
|
78
|
+
month: segmentValues.month ?? 1
|
|
79
|
+
}), part, { hourCycle: normalizeHourCycle(props.hourCycle) });
|
|
70
80
|
}
|
|
71
81
|
return formatter.part(props.dateRef.set({ [part]: value }), part, {
|
|
72
|
-
hourCycle: props.hourCycle
|
|
82
|
+
hourCycle: normalizeHourCycle(props.hourCycle)
|
|
73
83
|
});
|
|
74
84
|
} else {
|
|
75
85
|
return getPlaceholder(part, "", locale.value);
|
|
@@ -78,8 +88,13 @@ function createContentObj(props) {
|
|
|
78
88
|
if (isDateSegmentPart(part)) {
|
|
79
89
|
const value = segmentValues[part];
|
|
80
90
|
if (value !== null) {
|
|
81
|
-
if (part === "day"
|
|
82
|
-
return formatter.part(props.dateRef.set({
|
|
91
|
+
if (part === "day") {
|
|
92
|
+
return formatter.part(props.dateRef.set({
|
|
93
|
+
[part]: value,
|
|
94
|
+
// Same logic as above for the day field
|
|
95
|
+
month: segmentValues.month ?? 1
|
|
96
|
+
}), part);
|
|
97
|
+
}
|
|
83
98
|
return formatter.part(props.dateRef.set({ [part]: value }), part);
|
|
84
99
|
} else {
|
|
85
100
|
return getPlaceholder(part, "", locale.value);
|