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,10 +1,10 @@
|
|
|
1
1
|
import { defineComponent, useSlots, computed, onMounted, createBlock, openBlock, unref, withModifiers, withCtx, createVNode, mergeProps, renderSlot, createTextVNode, toDisplayString, Comment } from 'vue';
|
|
2
|
-
import { _ as _sfc_main$1 } from '../DismissableLayer/DismissableLayer.js';
|
|
3
|
-
import { _ as _sfc_main$2 } from '../Popper/PopperContent.js';
|
|
4
2
|
import { useEventListener } from '@vueuse/core';
|
|
3
|
+
import { _ as _sfc_main$2 } from '../Popper/PopperContent.js';
|
|
5
4
|
import { T as TOOLTIP_OPEN } from './utils.js';
|
|
6
5
|
import { i as injectTooltipRootContext } from './TooltipRoot.js';
|
|
7
6
|
import { u as useForwardExpose } from '../shared/useForwardExpose.js';
|
|
7
|
+
import { _ as _sfc_main$1 } from '../DismissableLayer/DismissableLayer.js';
|
|
8
8
|
import { _ as _sfc_main$3 } from '../VisuallyHidden/VisuallyHidden.js';
|
|
9
9
|
|
|
10
10
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipContentImpl.js","sources":["../../src/Tooltip/TooltipContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {
|
|
1
|
+
{"version":3,"file":"TooltipContentImpl.js","sources":["../../src/Tooltip/TooltipContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { VNode } from 'vue'\nimport type { PopperContentProps } from '@/Popper'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport type TooltipContentImplEmits = {\n /** Event handler called when focus moves to the destructive action after opening. It can be prevented by calling `event.preventDefault` */\n escapeKeyDown: [event: KeyboardEvent]\n /** Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling `event.preventDefault`. */\n pointerDownOutside: [event: Event]\n}\n\nexport interface TooltipContentImplProps\n extends PrimitiveProps,\n Pick<\n PopperContentProps,\n | 'side'\n | 'sideOffset'\n | 'align'\n | 'alignOffset'\n | 'avoidCollisions'\n | 'collisionBoundary'\n | 'collisionPadding'\n | 'arrowPadding'\n | 'sticky'\n | 'hideWhenDetached'\n | 'positionStrategy'\n | 'updatePositionStrategy'\n > {\n /**\n * By default, screenreaders will announce the content inside\n * the component. If this is not descriptive enough, or you have\n * content that cannot be announced, use aria-label as a more\n * descriptive label.\n *\n * @defaultValue String\n */\n ariaLabel?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useEventListener } from '@vueuse/core'\nimport { Comment, computed, onMounted, useSlots } from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { PopperContent } from '@/Popper'\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { injectTooltipRootContext } from './TooltipRoot.vue'\nimport { TOOLTIP_OPEN } from './utils'\n\nconst props = withDefaults(defineProps<TooltipContentImplProps>(), {\n side: 'top',\n sideOffset: 0,\n align: 'center',\n avoidCollisions: true,\n collisionBoundary: () => [],\n collisionPadding: 0,\n arrowPadding: 0,\n sticky: 'partial',\n hideWhenDetached: false,\n})\nconst emits = defineEmits<TooltipContentImplEmits>()\n\nconst rootContext = injectTooltipRootContext()\n\nconst { forwardRef } = useForwardExpose()\nconst slot = useSlots()\nconst defaultSlot = computed(() => slot.default?.({}))\nconst ariaLabel = computed(() => {\n if (props.ariaLabel)\n return props.ariaLabel\n let content = ''\n\n function recursiveTextSearch(node: VNode) {\n if (typeof node.children === 'string' && node.type !== Comment)\n content += node.children\n else if (Array.isArray(node.children))\n node.children.forEach(child => recursiveTextSearch(child as VNode))\n }\n\n defaultSlot.value?.forEach((node: VNode) => recursiveTextSearch(node))\n return content\n})\n\nconst popperContentProps = computed(() => {\n const { ariaLabel: _, ...restProps } = props\n return restProps\n})\n\nonMounted(() => {\n // Close the tooltip if the trigger is scrolled\n useEventListener(window, 'scroll', (event) => {\n const target = event.target as HTMLElement\n if (target?.contains(rootContext.trigger.value!))\n rootContext.onClose()\n })\n // Close this tooltip if another one opens\n useEventListener(window, TOOLTIP_OPEN, rootContext.onClose)\n})\n</script>\n\n<template>\n <DismissableLayer\n as-child\n :disable-outside-pointer-events=\"false\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"(event) => {\n if (rootContext.disableClosingTrigger.value && rootContext.trigger.value?.contains(event.target as HTMLElement))\n event.preventDefault()\n\n emits('pointerDownOutside', event)\n }\"\n @focus-outside.prevent\n @dismiss=\"rootContext.onClose()\"\n >\n <PopperContent\n :ref=\"forwardRef\"\n :data-state=\"rootContext.stateAttribute.value\"\n v-bind=\"{ ...$attrs, ...popperContentProps }\"\n :style=\"{\n '--reka-tooltip-content-transform-origin': 'var(--reka-popper-transform-origin)',\n '--reka-tooltip-content-available-width': 'var(--reka-popper-available-width)',\n '--reka-tooltip-content-available-height': 'var(--reka-popper-available-height)',\n '--reka-tooltip-trigger-width': 'var(--reka-popper-anchor-width)',\n '--reka-tooltip-trigger-height': 'var(--reka-popper-anchor-height)',\n }\"\n >\n <slot />\n <VisuallyHidden\n :id=\"rootContext.contentId\"\n role=\"tooltip\"\n >\n {{ ariaLabel }}\n </VisuallyHidden>\n </PopperContent>\n </DismissableLayer>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAWd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAE7C,IAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA;AACxC,IAAA,MAAM,OAAO,QAAS,EAAA;AACtB,IAAA,MAAM,cAAc,QAAS,CAAA,MAAM,KAAK,OAAU,GAAA,EAAE,CAAC,CAAA;AACrD,IAAM,MAAA,SAAA,GAAY,SAAS,MAAM;AAC/B,MAAA,IAAI,KAAM,CAAA,SAAA;AACR,QAAA,OAAO,KAAM,CAAA,SAAA;AACf,MAAA,IAAI,OAAU,GAAA,EAAA;AAEd,MAAA,SAAS,oBAAoB,IAAa,EAAA;AACxC,QAAA,IAAI,OAAO,IAAA,CAAK,QAAa,KAAA,QAAA,IAAY,KAAK,IAAS,KAAA,OAAA;AACrD,UAAA,OAAA,IAAW,IAAK,CAAA,QAAA;AAAA,aACT,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAA;AAClC,UAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,CAAS,KAAA,KAAA,mBAAA,CAAoB,KAAc,CAAC,CAAA;AAAA;AAGtE,MAAA,WAAA,CAAY,OAAO,OAAQ,CAAA,CAAC,IAAgB,KAAA,mBAAA,CAAoB,IAAI,CAAC,CAAA;AACrE,MAAO,OAAA,OAAA;AAAA,KACR,CAAA;AAED,IAAM,MAAA,kBAAA,GAAqB,SAAS,MAAM;AACxC,MAAA,MAAM,EAAE,SAAA,EAAW,CAAG,EAAA,GAAG,WAAc,GAAA,KAAA;AACvC,MAAO,OAAA,SAAA;AAAA,KACR,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AAEd,MAAiB,gBAAA,CAAA,MAAA,EAAQ,QAAU,EAAA,CAAC,KAAU,KAAA;AAC5C,QAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,QAAA,IAAI,MAAQ,EAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,KAAM,CAAA;AAC7C,UAAA,WAAA,CAAY,OAAQ,EAAA;AAAA,OACvB,CAAA;AAED,MAAiB,gBAAA,CAAA,MAAA,EAAQ,YAAc,EAAA,WAAA,CAAY,OAAO,CAAA;AAAA,KAC3D,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const vue = require('vue');
|
|
4
|
-
const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
|
|
5
4
|
const core = require('@vueuse/core');
|
|
5
|
+
const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
|
|
6
6
|
const Tooltip_utils = require('./utils.cjs');
|
|
7
7
|
const shared_createContext = require('../shared/createContext.cjs');
|
|
8
8
|
const shared_useForwardExpose = require('../shared/useForwardExpose.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipRoot.cjs","sources":["../../src/Tooltip/TooltipRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose } from '@/shared'\n\nexport interface TooltipRootProps {\n /**\n * The open state of the tooltip when it is initially rendered.\n * Use when you do not need to control its open state.\n */\n defaultOpen?: boolean\n /**\n * The controlled open state of the tooltip.\n */\n open?: boolean\n /**\n * Override the duration given to the `Provider` to customise\n * the open delay for a specific tooltip.\n *\n * @defaultValue 700\n */\n delayDuration?: number\n /**\n * Prevents Tooltip.Content from remaining open when hovering.\n * Disabling this has accessibility consequences. Inherits\n * from Tooltip.Provider.\n */\n disableHoverableContent?: boolean\n /**\n * When `true`, clicking on trigger will not close the content.\n * @defaultValue false\n */\n disableClosingTrigger?: boolean\n /**\n * When `true`, disable tooltip\n * @defaultValue false\n */\n disabled?: boolean\n /**\n * Prevent the tooltip from opening if the focus did not come from\n * the keyboard by matching against the `:focus-visible` selector.\n * This is useful if you want to avoid opening it when switching\n * browser tabs or closing a dialog.\n * @defaultValue false\n */\n ignoreNonKeyboardFocus?: boolean\n}\n\nexport type TooltipRootEmits = {\n /** Event handler called when the open state of the tooltip changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface TooltipContext {\n contentId: string\n open: Ref<boolean>\n stateAttribute: Ref<'closed' | 'delayed-open' | 'instant-open'>\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n onTriggerEnter: () => void\n onTriggerLeave: () => void\n onOpen: () => void\n onClose: () => void\n disableHoverableContent: Ref<boolean>\n disableClosingTrigger: Ref<boolean>\n disabled: Ref<boolean>\n ignoreNonKeyboardFocus: Ref<boolean>\n}\n\nexport const [injectTooltipRootContext, provideTooltipRootContext]\n = createContext<TooltipContext>('TooltipRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"TooltipRoot.cjs","sources":["../../src/Tooltip/TooltipRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose } from '@/shared'\n\nexport interface TooltipRootProps {\n /**\n * The open state of the tooltip when it is initially rendered.\n * Use when you do not need to control its open state.\n */\n defaultOpen?: boolean\n /**\n * The controlled open state of the tooltip.\n */\n open?: boolean\n /**\n * Override the duration given to the `Provider` to customise\n * the open delay for a specific tooltip.\n *\n * @defaultValue 700\n */\n delayDuration?: number\n /**\n * Prevents Tooltip.Content from remaining open when hovering.\n * Disabling this has accessibility consequences. Inherits\n * from Tooltip.Provider.\n */\n disableHoverableContent?: boolean\n /**\n * When `true`, clicking on trigger will not close the content.\n * @defaultValue false\n */\n disableClosingTrigger?: boolean\n /**\n * When `true`, disable tooltip\n * @defaultValue false\n */\n disabled?: boolean\n /**\n * Prevent the tooltip from opening if the focus did not come from\n * the keyboard by matching against the `:focus-visible` selector.\n * This is useful if you want to avoid opening it when switching\n * browser tabs or closing a dialog.\n * @defaultValue false\n */\n ignoreNonKeyboardFocus?: boolean\n}\n\nexport type TooltipRootEmits = {\n /** Event handler called when the open state of the tooltip changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface TooltipContext {\n contentId: string\n open: Ref<boolean>\n stateAttribute: Ref<'closed' | 'delayed-open' | 'instant-open'>\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n onTriggerEnter: () => void\n onTriggerLeave: () => void\n onOpen: () => void\n onClose: () => void\n disableHoverableContent: Ref<boolean>\n disableClosingTrigger: Ref<boolean>\n disabled: Ref<boolean>\n ignoreNonKeyboardFocus: Ref<boolean>\n}\n\nexport const [injectTooltipRootContext, provideTooltipRootContext]\n = createContext<TooltipContext>('TooltipRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useTimeoutFn, useVModel } from '@vueuse/core'\nimport { computed, ref, watch } from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport { injectTooltipProviderContext } from './TooltipProvider.vue'\nimport { TOOLTIP_OPEN } from './utils'\n\nconst props = withDefaults(defineProps<TooltipRootProps>(), {\n defaultOpen: false,\n open: undefined,\n delayDuration: undefined,\n disableHoverableContent: undefined,\n disableClosingTrigger: undefined,\n disabled: undefined,\n ignoreNonKeyboardFocus: undefined,\n})\n\nconst emit = defineEmits<TooltipRootEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nuseForwardExpose()\nconst providerContext = injectTooltipProviderContext()\n\nconst disableHoverableContent = computed(() => props.disableHoverableContent ?? providerContext.disableHoverableContent.value)\nconst disableClosingTrigger = computed(() => props.disableClosingTrigger ?? providerContext.disableClosingTrigger.value)\nconst disableTooltip = computed(() => props.disabled ?? providerContext.disabled.value)\n\nconst delayDuration = computed(() => props.delayDuration ?? providerContext.delayDuration.value)\nconst ignoreNonKeyboardFocus = computed(() => props.ignoreNonKeyboardFocus ?? providerContext.ignoreNonKeyboardFocus.value)\n\nconst open = useVModel(props, 'open', emit, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nwatch(open, (isOpen) => {\n if (!providerContext.onClose)\n return\n if (isOpen) {\n providerContext.onOpen()\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN))\n }\n else {\n providerContext.onClose()\n }\n})\n\nconst wasOpenDelayedRef = ref(false)\nconst trigger = ref<HTMLElement>()\n\nconst stateAttribute = computed(() => {\n if (!open.value)\n return 'closed'\n return wasOpenDelayedRef.value ? 'delayed-open' : 'instant-open'\n})\n\nconst { start: startTimer, stop: clearTimer } = useTimeoutFn(() => {\n wasOpenDelayedRef.value = true\n open.value = true\n}, delayDuration, { immediate: false })\n\nfunction handleOpen() {\n clearTimer()\n wasOpenDelayedRef.value = false\n open.value = true\n}\nfunction handleClose() {\n clearTimer()\n open.value = false\n}\nfunction handleDelayedOpen() {\n startTimer()\n}\n\nprovideTooltipRootContext({\n contentId: '',\n open,\n stateAttribute,\n trigger,\n onTriggerChange(el) {\n trigger.value = el\n },\n onTriggerEnter() {\n if (providerContext.isOpenDelayed.value)\n handleDelayedOpen()\n else handleOpen()\n },\n onTriggerLeave() {\n if (disableHoverableContent.value) {\n handleClose()\n }\n else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n clearTimer()\n }\n },\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n disableClosingTrigger,\n disabled: disableTooltip,\n ignoreNonKeyboardFocus,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot :open=\"open\" />\n </PopperRoot>\n</template>\n"],"names":["createContext","useForwardExpose","injectTooltipProviderContext","computed","useVModel","watch","TOOLTIP_OPEN","ref","useTimeoutFn"],"mappings":";;;;;;;;;;AAoEO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7DA,mCAA8B,aAAa;;;;;;;;;;;;;;AAU/C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAUd,IAAA,MAAM,IAAO,GAAA,MAAA;AASb,IAAiBC,wCAAA,EAAA;AACjB,IAAA,MAAM,kBAAkBC,oDAA6B,EAAA;AAErD,IAAA,MAAM,0BAA0BC,YAAS,CAAA,MAAM,MAAM,uBAA2B,IAAA,eAAA,CAAgB,wBAAwB,KAAK,CAAA;AAC7H,IAAA,MAAM,wBAAwBA,YAAS,CAAA,MAAM,MAAM,qBAAyB,IAAA,eAAA,CAAgB,sBAAsB,KAAK,CAAA;AACvH,IAAA,MAAM,iBAAiBA,YAAS,CAAA,MAAM,MAAM,QAAY,IAAA,eAAA,CAAgB,SAAS,KAAK,CAAA;AAEtF,IAAA,MAAM,gBAAgBA,YAAS,CAAA,MAAM,MAAM,aAAiB,IAAA,eAAA,CAAgB,cAAc,KAAK,CAAA;AAC/F,IAAA,MAAM,yBAAyBA,YAAS,CAAA,MAAM,MAAM,sBAA0B,IAAA,eAAA,CAAgB,uBAAuB,KAAK,CAAA;AAE1H,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA;AAAA,MAC1C,cAAc,KAAM,CAAA,WAAA;AAAA,MACpB,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAMC,SAAA,CAAA,IAAA,EAAM,CAAC,MAAW,KAAA;AACtB,MAAA,IAAI,CAAC,eAAgB,CAAA,OAAA;AACnB,QAAA;AACF,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,eAAA,CAAgB,MAAO,EAAA;AAGvB,QAAA,QAAA,CAAS,aAAc,CAAA,IAAI,WAAY,CAAAC,0BAAY,CAAC,CAAA;AAAA,OAEjD,MAAA;AACH,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAAA;AAC1B,KACD,CAAA;AAED,IAAM,MAAA,iBAAA,GAAoBC,QAAI,KAAK,CAAA;AACnC,IAAA,MAAM,UAAUA,OAAiB,EAAA;AAEjC,IAAM,MAAA,cAAA,GAAiBJ,aAAS,MAAM;AACpC,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAO,OAAA,QAAA;AACT,MAAO,OAAA,iBAAA,CAAkB,QAAQ,cAAiB,GAAA,cAAA;AAAA,KACnD,CAAA;AAED,IAAA,MAAM,EAAE,KAAO,EAAA,UAAA,EAAY,MAAM,UAAW,EAAA,GAAIK,kBAAa,MAAM;AACjE,MAAA,iBAAA,CAAkB,KAAQ,GAAA,IAAA;AAC1B,MAAA,IAAA,CAAK,KAAQ,GAAA,IAAA;AAAA,KACZ,EAAA,aAAA,EAAe,EAAE,SAAA,EAAW,OAAO,CAAA;AAEtC,IAAA,SAAS,UAAa,GAAA;AACpB,MAAW,UAAA,EAAA;AACX,MAAA,iBAAA,CAAkB,KAAQ,GAAA,KAAA;AAC1B,MAAA,IAAA,CAAK,KAAQ,GAAA,IAAA;AAAA;AAEf,IAAA,SAAS,WAAc,GAAA;AACrB,MAAW,UAAA,EAAA;AACX,MAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AAEf,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAW,UAAA,EAAA;AAAA;AAGb,IAA0B,yBAAA,CAAA;AAAA,MACxB,SAAW,EAAA,EAAA;AAAA,MACX,IAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAgB,EAAI,EAAA;AAClB,QAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA;AAAA,OAClB;AAAA,MACA,cAAiB,GAAA;AACf,QAAA,IAAI,gBAAgB,aAAc,CAAA,KAAA;AAChC,UAAkB,iBAAA,EAAA;AAAA,aACJ,UAAA,EAAA;AAAA,OAClB;AAAA,MACA,cAAiB,GAAA;AACf,QAAA,IAAI,wBAAwB,KAAO,EAAA;AACjC,UAAY,WAAA,EAAA;AAAA,SAET,MAAA;AAEH,UAAW,UAAA,EAAA;AAAA;AACb,OACF;AAAA,MACA,MAAQ,EAAA,UAAA;AAAA,MACR,OAAS,EAAA,WAAA;AAAA,MACT,uBAAA;AAAA,MACA,qBAAA;AAAA,MACA,QAAU,EAAA,cAAA;AAAA,MACV;AAAA,KACD,CAAA;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, watch, ref, createBlock, openBlock, unref, withCtx, renderSlot } from 'vue';
|
|
2
|
-
import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
|
|
3
2
|
import { useVModel, useTimeoutFn } from '@vueuse/core';
|
|
3
|
+
import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
|
|
4
4
|
import { T as TOOLTIP_OPEN } from './utils.js';
|
|
5
5
|
import { c as createContext } from '../shared/createContext.js';
|
|
6
6
|
import { u as useForwardExpose } from '../shared/useForwardExpose.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipRoot.js","sources":["../../src/Tooltip/TooltipRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose } from '@/shared'\n\nexport interface TooltipRootProps {\n /**\n * The open state of the tooltip when it is initially rendered.\n * Use when you do not need to control its open state.\n */\n defaultOpen?: boolean\n /**\n * The controlled open state of the tooltip.\n */\n open?: boolean\n /**\n * Override the duration given to the `Provider` to customise\n * the open delay for a specific tooltip.\n *\n * @defaultValue 700\n */\n delayDuration?: number\n /**\n * Prevents Tooltip.Content from remaining open when hovering.\n * Disabling this has accessibility consequences. Inherits\n * from Tooltip.Provider.\n */\n disableHoverableContent?: boolean\n /**\n * When `true`, clicking on trigger will not close the content.\n * @defaultValue false\n */\n disableClosingTrigger?: boolean\n /**\n * When `true`, disable tooltip\n * @defaultValue false\n */\n disabled?: boolean\n /**\n * Prevent the tooltip from opening if the focus did not come from\n * the keyboard by matching against the `:focus-visible` selector.\n * This is useful if you want to avoid opening it when switching\n * browser tabs or closing a dialog.\n * @defaultValue false\n */\n ignoreNonKeyboardFocus?: boolean\n}\n\nexport type TooltipRootEmits = {\n /** Event handler called when the open state of the tooltip changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface TooltipContext {\n contentId: string\n open: Ref<boolean>\n stateAttribute: Ref<'closed' | 'delayed-open' | 'instant-open'>\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n onTriggerEnter: () => void\n onTriggerLeave: () => void\n onOpen: () => void\n onClose: () => void\n disableHoverableContent: Ref<boolean>\n disableClosingTrigger: Ref<boolean>\n disabled: Ref<boolean>\n ignoreNonKeyboardFocus: Ref<boolean>\n}\n\nexport const [injectTooltipRootContext, provideTooltipRootContext]\n = createContext<TooltipContext>('TooltipRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport {
|
|
1
|
+
{"version":3,"file":"TooltipRoot.js","sources":["../../src/Tooltip/TooltipRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose } from '@/shared'\n\nexport interface TooltipRootProps {\n /**\n * The open state of the tooltip when it is initially rendered.\n * Use when you do not need to control its open state.\n */\n defaultOpen?: boolean\n /**\n * The controlled open state of the tooltip.\n */\n open?: boolean\n /**\n * Override the duration given to the `Provider` to customise\n * the open delay for a specific tooltip.\n *\n * @defaultValue 700\n */\n delayDuration?: number\n /**\n * Prevents Tooltip.Content from remaining open when hovering.\n * Disabling this has accessibility consequences. Inherits\n * from Tooltip.Provider.\n */\n disableHoverableContent?: boolean\n /**\n * When `true`, clicking on trigger will not close the content.\n * @defaultValue false\n */\n disableClosingTrigger?: boolean\n /**\n * When `true`, disable tooltip\n * @defaultValue false\n */\n disabled?: boolean\n /**\n * Prevent the tooltip from opening if the focus did not come from\n * the keyboard by matching against the `:focus-visible` selector.\n * This is useful if you want to avoid opening it when switching\n * browser tabs or closing a dialog.\n * @defaultValue false\n */\n ignoreNonKeyboardFocus?: boolean\n}\n\nexport type TooltipRootEmits = {\n /** Event handler called when the open state of the tooltip changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface TooltipContext {\n contentId: string\n open: Ref<boolean>\n stateAttribute: Ref<'closed' | 'delayed-open' | 'instant-open'>\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n onTriggerEnter: () => void\n onTriggerLeave: () => void\n onOpen: () => void\n onClose: () => void\n disableHoverableContent: Ref<boolean>\n disableClosingTrigger: Ref<boolean>\n disabled: Ref<boolean>\n ignoreNonKeyboardFocus: Ref<boolean>\n}\n\nexport const [injectTooltipRootContext, provideTooltipRootContext]\n = createContext<TooltipContext>('TooltipRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useTimeoutFn, useVModel } from '@vueuse/core'\nimport { computed, ref, watch } from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport { injectTooltipProviderContext } from './TooltipProvider.vue'\nimport { TOOLTIP_OPEN } from './utils'\n\nconst props = withDefaults(defineProps<TooltipRootProps>(), {\n defaultOpen: false,\n open: undefined,\n delayDuration: undefined,\n disableHoverableContent: undefined,\n disableClosingTrigger: undefined,\n disabled: undefined,\n ignoreNonKeyboardFocus: undefined,\n})\n\nconst emit = defineEmits<TooltipRootEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nuseForwardExpose()\nconst providerContext = injectTooltipProviderContext()\n\nconst disableHoverableContent = computed(() => props.disableHoverableContent ?? providerContext.disableHoverableContent.value)\nconst disableClosingTrigger = computed(() => props.disableClosingTrigger ?? providerContext.disableClosingTrigger.value)\nconst disableTooltip = computed(() => props.disabled ?? providerContext.disabled.value)\n\nconst delayDuration = computed(() => props.delayDuration ?? providerContext.delayDuration.value)\nconst ignoreNonKeyboardFocus = computed(() => props.ignoreNonKeyboardFocus ?? providerContext.ignoreNonKeyboardFocus.value)\n\nconst open = useVModel(props, 'open', emit, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nwatch(open, (isOpen) => {\n if (!providerContext.onClose)\n return\n if (isOpen) {\n providerContext.onOpen()\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN))\n }\n else {\n providerContext.onClose()\n }\n})\n\nconst wasOpenDelayedRef = ref(false)\nconst trigger = ref<HTMLElement>()\n\nconst stateAttribute = computed(() => {\n if (!open.value)\n return 'closed'\n return wasOpenDelayedRef.value ? 'delayed-open' : 'instant-open'\n})\n\nconst { start: startTimer, stop: clearTimer } = useTimeoutFn(() => {\n wasOpenDelayedRef.value = true\n open.value = true\n}, delayDuration, { immediate: false })\n\nfunction handleOpen() {\n clearTimer()\n wasOpenDelayedRef.value = false\n open.value = true\n}\nfunction handleClose() {\n clearTimer()\n open.value = false\n}\nfunction handleDelayedOpen() {\n startTimer()\n}\n\nprovideTooltipRootContext({\n contentId: '',\n open,\n stateAttribute,\n trigger,\n onTriggerChange(el) {\n trigger.value = el\n },\n onTriggerEnter() {\n if (providerContext.isOpenDelayed.value)\n handleDelayedOpen()\n else handleOpen()\n },\n onTriggerLeave() {\n if (disableHoverableContent.value) {\n handleClose()\n }\n else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n clearTimer()\n }\n },\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n disableClosingTrigger,\n disabled: disableTooltip,\n ignoreNonKeyboardFocus,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot :open=\"open\" />\n </PopperRoot>\n</template>\n"],"names":[],"mappings":";;;;;;;;AAoEO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7D,cAA8B,aAAa;;;;;;;;;;;;;;AAU/C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAUd,IAAA,MAAM,IAAO,GAAA,MAAA;AASb,IAAiB,gBAAA,EAAA;AACjB,IAAA,MAAM,kBAAkB,4BAA6B,EAAA;AAErD,IAAA,MAAM,0BAA0B,QAAS,CAAA,MAAM,MAAM,uBAA2B,IAAA,eAAA,CAAgB,wBAAwB,KAAK,CAAA;AAC7H,IAAA,MAAM,wBAAwB,QAAS,CAAA,MAAM,MAAM,qBAAyB,IAAA,eAAA,CAAgB,sBAAsB,KAAK,CAAA;AACvH,IAAA,MAAM,iBAAiB,QAAS,CAAA,MAAM,MAAM,QAAY,IAAA,eAAA,CAAgB,SAAS,KAAK,CAAA;AAEtF,IAAA,MAAM,gBAAgB,QAAS,CAAA,MAAM,MAAM,aAAiB,IAAA,eAAA,CAAgB,cAAc,KAAK,CAAA;AAC/F,IAAA,MAAM,yBAAyB,QAAS,CAAA,MAAM,MAAM,sBAA0B,IAAA,eAAA,CAAgB,uBAAuB,KAAK,CAAA;AAE1H,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA;AAAA,MAC1C,cAAc,KAAM,CAAA,WAAA;AAAA,MACpB,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAM,KAAA,CAAA,IAAA,EAAM,CAAC,MAAW,KAAA;AACtB,MAAA,IAAI,CAAC,eAAgB,CAAA,OAAA;AACnB,QAAA;AACF,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,eAAA,CAAgB,MAAO,EAAA;AAGvB,QAAA,QAAA,CAAS,aAAc,CAAA,IAAI,WAAY,CAAA,YAAY,CAAC,CAAA;AAAA,OAEjD,MAAA;AACH,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAAA;AAC1B,KACD,CAAA;AAED,IAAM,MAAA,iBAAA,GAAoB,IAAI,KAAK,CAAA;AACnC,IAAA,MAAM,UAAU,GAAiB,EAAA;AAEjC,IAAM,MAAA,cAAA,GAAiB,SAAS,MAAM;AACpC,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAO,OAAA,QAAA;AACT,MAAO,OAAA,iBAAA,CAAkB,QAAQ,cAAiB,GAAA,cAAA;AAAA,KACnD,CAAA;AAED,IAAA,MAAM,EAAE,KAAO,EAAA,UAAA,EAAY,MAAM,UAAW,EAAA,GAAI,aAAa,MAAM;AACjE,MAAA,iBAAA,CAAkB,KAAQ,GAAA,IAAA;AAC1B,MAAA,IAAA,CAAK,KAAQ,GAAA,IAAA;AAAA,KACZ,EAAA,aAAA,EAAe,EAAE,SAAA,EAAW,OAAO,CAAA;AAEtC,IAAA,SAAS,UAAa,GAAA;AACpB,MAAW,UAAA,EAAA;AACX,MAAA,iBAAA,CAAkB,KAAQ,GAAA,KAAA;AAC1B,MAAA,IAAA,CAAK,KAAQ,GAAA,IAAA;AAAA;AAEf,IAAA,SAAS,WAAc,GAAA;AACrB,MAAW,UAAA,EAAA;AACX,MAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AAEf,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAW,UAAA,EAAA;AAAA;AAGb,IAA0B,yBAAA,CAAA;AAAA,MACxB,SAAW,EAAA,EAAA;AAAA,MACX,IAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAgB,EAAI,EAAA;AAClB,QAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA;AAAA,OAClB;AAAA,MACA,cAAiB,GAAA;AACf,QAAA,IAAI,gBAAgB,aAAc,CAAA,KAAA;AAChC,UAAkB,iBAAA,EAAA;AAAA,aACJ,UAAA,EAAA;AAAA,OAClB;AAAA,MACA,cAAiB,GAAA;AACf,QAAA,IAAI,wBAAwB,KAAO,EAAA;AACjC,UAAY,WAAA,EAAA;AAAA,SAET,MAAA;AAEH,UAAW,UAAA,EAAA;AAAA;AACb,OACF;AAAA,MACA,MAAQ,EAAA,UAAA;AAAA,MACR,OAAS,EAAA,WAAA;AAAA,MACT,uBAAA;AAAA,MACA,qBAAA;AAAA,MACA,QAAU,EAAA,cAAA;AAAA,MACV;AAAA,KACD,CAAA;;;;;;;;;;;;;;"}
|
|
@@ -44,7 +44,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
44
44
|
}, 1);
|
|
45
45
|
}
|
|
46
46
|
function handlePointerDown() {
|
|
47
|
-
if (rootContext.open) {
|
|
47
|
+
if (rootContext.open && !rootContext.disableClosingTrigger.value) {
|
|
48
48
|
rootContext.onClose();
|
|
49
49
|
}
|
|
50
50
|
isPointerDown.value = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipTrigger.cjs","sources":["../../src/Tooltip/TooltipTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useForwardExpose, useId } from '@/shared'\n\nexport type TooltipTriggerDataState =\n | 'closed'\n | 'delayed-open'\n | 'instant-open'\n\nexport interface TooltipTriggerProps extends PopperAnchorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\nimport {\n Primitive,\n} from '@/Primitive'\nimport {
|
|
1
|
+
{"version":3,"file":"TooltipTrigger.cjs","sources":["../../src/Tooltip/TooltipTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useForwardExpose, useId } from '@/shared'\n\nexport type TooltipTriggerDataState =\n | 'closed'\n | 'delayed-open'\n | 'instant-open'\n\nexport interface TooltipTriggerProps extends PopperAnchorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { computed, onMounted, ref } from 'vue'\nimport { PopperAnchor } from '@/Popper'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { injectTooltipProviderContext } from './TooltipProvider.vue'\nimport { injectTooltipRootContext } from './TooltipRoot.vue'\n\nconst props = withDefaults(defineProps<TooltipTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectTooltipRootContext()\nconst providerContext = injectTooltipProviderContext()\n\nrootContext.contentId ||= useId(undefined, 'reka-tooltip-content')\n\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isPointerDown = ref(false)\nconst hasPointerMoveOpened = ref(false)\n\nconst tooltipListeners = computed(() => {\n if (rootContext.disabled.value)\n return {}\n\n return {\n click: handleClick,\n focus: handleFocus,\n pointermove: handlePointerMove,\n pointerleave: handlePointerLeave,\n pointerdown: handlePointerDown,\n blur: handleBlur,\n }\n})\n\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nfunction handlePointerUp() {\n setTimeout(() => {\n isPointerDown.value = false\n }, 1)\n}\n\nfunction handlePointerDown() {\n if (rootContext.open && !rootContext.disableClosingTrigger.value) {\n rootContext.onClose()\n }\n isPointerDown.value = true\n document.addEventListener('pointerup', handlePointerUp, { once: true })\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (event.pointerType === 'touch')\n return\n if (\n !hasPointerMoveOpened.value && !providerContext.isPointerInTransitRef.value\n ) {\n rootContext.onTriggerEnter()\n hasPointerMoveOpened.value = true\n }\n}\n\nfunction handlePointerLeave() {\n rootContext.onTriggerLeave()\n hasPointerMoveOpened.value = false\n}\n\nfunction handleFocus(event: FocusEvent) {\n if (isPointerDown.value)\n return\n\n if (rootContext.ignoreNonKeyboardFocus.value && !(event.target as HTMLElement).matches?.(':focus-visible'))\n return\n\n rootContext.onOpen()\n}\n\nfunction handleBlur() {\n rootContext.onClose()\n}\n\nfunction handleClick() {\n if (!rootContext.disableClosingTrigger.value)\n rootContext.onClose()\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :aria-describedby=\"\n rootContext.open.value ? rootContext.contentId : undefined\n \"\n :data-state=\"rootContext.stateAttribute.value\"\n :as=\"as\"\n :as-child=\"props.asChild\"\n data-grace-area-trigger\n v-on=\"tooltipListeners\"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":["injectTooltipRootContext","injectTooltipProviderContext","useId","useForwardExpose","ref","computed","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAcA,4CAAyB,EAAA;AAC7C,IAAA,MAAM,kBAAkBC,oDAA6B,EAAA;AAErD,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmBC,wCAAiB,EAAA;AAExE,IAAM,MAAA,aAAA,GAAgBC,QAAI,KAAK,CAAA;AAC/B,IAAM,MAAA,oBAAA,GAAuBA,QAAI,KAAK,CAAA;AAEtC,IAAM,MAAA,gBAAA,GAAmBC,aAAS,MAAM;AACtC,MAAA,IAAI,YAAY,QAAS,CAAA,KAAA;AACvB,QAAA,OAAO,EAAC;AAEV,MAAO,OAAA;AAAA,QACL,KAAO,EAAA,WAAA;AAAA,QACP,KAAO,EAAA,WAAA;AAAA,QACP,WAAa,EAAA,iBAAA;AAAA,QACb,YAAc,EAAA,kBAAA;AAAA,QACd,WAAa,EAAA,iBAAA;AAAA,QACb,IAAM,EAAA;AAAA,OACR;AAAA,KACD,CAAA;AAED,IAAAC,aAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAA,SAAS,eAAkB,GAAA;AACzB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,aAAA,CAAc,KAAQ,GAAA,KAAA;AAAA,SACrB,CAAC,CAAA;AAAA;AAGN,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,IAAI,WAAY,CAAA,IAAA,IAAQ,CAAC,WAAA,CAAY,sBAAsB,KAAO,EAAA;AAChE,QAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;AAEtB,MAAA,aAAA,CAAc,KAAQ,GAAA,IAAA;AACtB,MAAA,QAAA,CAAS,iBAAiB,WAAa,EAAA,eAAA,EAAiB,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA;AAGxE,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAA,IAAI,MAAM,WAAgB,KAAA,OAAA;AACxB,QAAA;AACF,MAAA,IACE,CAAC,oBAAqB,CAAA,KAAA,IAAS,CAAC,eAAA,CAAgB,sBAAsB,KACtE,EAAA;AACA,QAAA,WAAA,CAAY,cAAe,EAAA;AAC3B,QAAA,oBAAA,CAAqB,KAAQ,GAAA,IAAA;AAAA;AAC/B;AAGF,IAAA,SAAS,kBAAqB,GAAA;AAC5B,MAAA,WAAA,CAAY,cAAe,EAAA;AAC3B,MAAA,oBAAA,CAAqB,KAAQ,GAAA,KAAA;AAAA;AAG/B,IAAA,SAAS,YAAY,KAAmB,EAAA;AACtC,MAAA,IAAI,aAAc,CAAA,KAAA;AAChB,QAAA;AAEF,MAAA,IAAI,YAAY,sBAAuB,CAAA,KAAA,IAAS,CAAE,KAAM,CAAA,MAAA,CAAuB,UAAU,gBAAgB,CAAA;AACvG,QAAA;AAEF,MAAA,WAAA,CAAY,MAAO,EAAA;AAAA;AAGrB,IAAA,SAAS,UAAa,GAAA;AACpB,MAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;AAGtB,IAAA,SAAS,WAAc,GAAA;AACrB,MAAI,IAAA,CAAC,YAAY,qBAAsB,CAAA,KAAA;AACrC,QAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -42,7 +42,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
42
42
|
}, 1);
|
|
43
43
|
}
|
|
44
44
|
function handlePointerDown() {
|
|
45
|
-
if (rootContext.open) {
|
|
45
|
+
if (rootContext.open && !rootContext.disableClosingTrigger.value) {
|
|
46
46
|
rootContext.onClose();
|
|
47
47
|
}
|
|
48
48
|
isPointerDown.value = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipTrigger.js","sources":["../../src/Tooltip/TooltipTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useForwardExpose, useId } from '@/shared'\n\nexport type TooltipTriggerDataState =\n | 'closed'\n | 'delayed-open'\n | 'instant-open'\n\nexport interface TooltipTriggerProps extends PopperAnchorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\nimport {\n Primitive,\n} from '@/Primitive'\nimport {
|
|
1
|
+
{"version":3,"file":"TooltipTrigger.js","sources":["../../src/Tooltip/TooltipTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useForwardExpose, useId } from '@/shared'\n\nexport type TooltipTriggerDataState =\n | 'closed'\n | 'delayed-open'\n | 'instant-open'\n\nexport interface TooltipTriggerProps extends PopperAnchorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { computed, onMounted, ref } from 'vue'\nimport { PopperAnchor } from '@/Popper'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { injectTooltipProviderContext } from './TooltipProvider.vue'\nimport { injectTooltipRootContext } from './TooltipRoot.vue'\n\nconst props = withDefaults(defineProps<TooltipTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectTooltipRootContext()\nconst providerContext = injectTooltipProviderContext()\n\nrootContext.contentId ||= useId(undefined, 'reka-tooltip-content')\n\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isPointerDown = ref(false)\nconst hasPointerMoveOpened = ref(false)\n\nconst tooltipListeners = computed(() => {\n if (rootContext.disabled.value)\n return {}\n\n return {\n click: handleClick,\n focus: handleFocus,\n pointermove: handlePointerMove,\n pointerleave: handlePointerLeave,\n pointerdown: handlePointerDown,\n blur: handleBlur,\n }\n})\n\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nfunction handlePointerUp() {\n setTimeout(() => {\n isPointerDown.value = false\n }, 1)\n}\n\nfunction handlePointerDown() {\n if (rootContext.open && !rootContext.disableClosingTrigger.value) {\n rootContext.onClose()\n }\n isPointerDown.value = true\n document.addEventListener('pointerup', handlePointerUp, { once: true })\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (event.pointerType === 'touch')\n return\n if (\n !hasPointerMoveOpened.value && !providerContext.isPointerInTransitRef.value\n ) {\n rootContext.onTriggerEnter()\n hasPointerMoveOpened.value = true\n }\n}\n\nfunction handlePointerLeave() {\n rootContext.onTriggerLeave()\n hasPointerMoveOpened.value = false\n}\n\nfunction handleFocus(event: FocusEvent) {\n if (isPointerDown.value)\n return\n\n if (rootContext.ignoreNonKeyboardFocus.value && !(event.target as HTMLElement).matches?.(':focus-visible'))\n return\n\n rootContext.onOpen()\n}\n\nfunction handleBlur() {\n rootContext.onClose()\n}\n\nfunction handleClick() {\n if (!rootContext.disableClosingTrigger.value)\n rootContext.onClose()\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :aria-describedby=\"\n rootContext.open.value ? rootContext.contentId : undefined\n \"\n :data-state=\"rootContext.stateAttribute.value\"\n :as=\"as\"\n :as-child=\"props.asChild\"\n data-grace-area-trigger\n v-on=\"tooltipListeners\"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAC7C,IAAA,MAAM,kBAAkB,4BAA6B,EAAA;AAErD,IAAY,WAAA,CAAA,SAAA,KAAc,KAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmB,gBAAiB,EAAA;AAExE,IAAM,MAAA,aAAA,GAAgB,IAAI,KAAK,CAAA;AAC/B,IAAM,MAAA,oBAAA,GAAuB,IAAI,KAAK,CAAA;AAEtC,IAAM,MAAA,gBAAA,GAAmB,SAAS,MAAM;AACtC,MAAA,IAAI,YAAY,QAAS,CAAA,KAAA;AACvB,QAAA,OAAO,EAAC;AAEV,MAAO,OAAA;AAAA,QACL,KAAO,EAAA,WAAA;AAAA,QACP,KAAO,EAAA,WAAA;AAAA,QACP,WAAa,EAAA,iBAAA;AAAA,QACb,YAAc,EAAA,kBAAA;AAAA,QACd,WAAa,EAAA,iBAAA;AAAA,QACb,IAAM,EAAA;AAAA,OACR;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAA,SAAS,eAAkB,GAAA;AACzB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,aAAA,CAAc,KAAQ,GAAA,KAAA;AAAA,SACrB,CAAC,CAAA;AAAA;AAGN,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,IAAI,WAAY,CAAA,IAAA,IAAQ,CAAC,WAAA,CAAY,sBAAsB,KAAO,EAAA;AAChE,QAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;AAEtB,MAAA,aAAA,CAAc,KAAQ,GAAA,IAAA;AACtB,MAAA,QAAA,CAAS,iBAAiB,WAAa,EAAA,eAAA,EAAiB,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA;AAGxE,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAA,IAAI,MAAM,WAAgB,KAAA,OAAA;AACxB,QAAA;AACF,MAAA,IACE,CAAC,oBAAqB,CAAA,KAAA,IAAS,CAAC,eAAA,CAAgB,sBAAsB,KACtE,EAAA;AACA,QAAA,WAAA,CAAY,cAAe,EAAA;AAC3B,QAAA,oBAAA,CAAqB,KAAQ,GAAA,IAAA;AAAA;AAC/B;AAGF,IAAA,SAAS,kBAAqB,GAAA;AAC5B,MAAA,WAAA,CAAY,cAAe,EAAA;AAC3B,MAAA,oBAAA,CAAqB,KAAQ,GAAA,KAAA;AAAA;AAG/B,IAAA,SAAS,YAAY,KAAmB,EAAA;AACtC,MAAA,IAAI,aAAc,CAAA,KAAA;AAChB,QAAA;AAEF,MAAA,IAAI,YAAY,sBAAuB,CAAA,KAAA,IAAS,CAAE,KAAM,CAAA,MAAA,CAAuB,UAAU,gBAAgB,CAAA;AACvG,QAAA;AAEF,MAAA,WAAA,CAAY,MAAO,EAAA;AAAA;AAGrB,IAAA,SAAS,UAAa,GAAA;AACpB,MAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;AAGtB,IAAA,SAAS,WAAc,GAAA;AACrB,MAAI,IAAA,CAAC,YAAY,qBAAsB,CAAA,KAAA;AACrC,QAAA,WAAA,CAAY,OAAQ,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/Tree/TreeItem.cjs
CHANGED
|
@@ -38,7 +38,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
38
38
|
return rootContext.selectedKeys.value.includes(key);
|
|
39
39
|
});
|
|
40
40
|
const isIndeterminate = vue.computed(() => {
|
|
41
|
-
if (rootContext.
|
|
41
|
+
if (rootContext.bubbleSelect.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {
|
|
42
|
+
const children = Tree_utils.flatten(rootContext.getChildren(props.value) || []);
|
|
43
|
+
return children.some((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child))) && !children.every((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child)));
|
|
44
|
+
} else if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {
|
|
42
45
|
const children = Tree_utils.flatten(rootContext.getChildren(props.value) || []);
|
|
43
46
|
return !children.every((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child)));
|
|
44
47
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeItem.cjs","sources":["../../src/Tree/TreeItem.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeItemProps<T> extends PrimitiveProps {\n /** Value given to this item */\n value: T\n /** Level of depth */\n level: number\n}\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\nexport type ToggleEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\n\nexport type TreeItemEmits<T> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n toggle: [event: ToggleEvent<T>]\n}\n\nconst TREE_SELECT = 'tree.select'\nconst TREE_TOGGLE = 'tree.toggle'\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\nimport { computed } from 'vue'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { flatten } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TreeItemProps<T>>(), {\n as: 'li',\n})\n\nconst emits = defineEmits<TreeItemEmits<T>>()\n\ndefineSlots<{\n default: (props: {\n isExpanded: boolean\n isSelected: boolean\n isIndeterminate: boolean | undefined\n handleToggle: () => void\n handleSelect: () => void\n }) => any\n}>()\nconst rootContext = injectTreeRootContext()\nconst { getItems } = useCollection()\n\nconst hasChildren = computed(() => !!rootContext.getChildren(props.value))\n\nconst isExpanded = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.expanded.value.includes(key)\n})\n\nconst isSelected = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.selectedKeys.value.includes(key)\n})\n\nconst isIndeterminate = computed(() => {\n if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else {\n return undefined\n }\n})\n\nfunction handleKeydownRight(ev: KeyboardEvent) {\n if (!hasChildren.value)\n return\n\n if (isExpanded.value) {\n // go to first child\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(currentIndex)\n const nextElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level + 1))\n\n if (nextElement)\n nextElement.focus()\n }\n else {\n // open expanded\n handleToggleCustomEvent(ev)\n }\n}\n\nfunction handleKeydownLeft(ev: KeyboardEvent) {\n if (isExpanded.value) {\n // close expanded\n handleToggleCustomEvent(ev)\n }\n else {\n // go back to parent\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(0, currentIndex).reverse()\n const parentElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level - 1))\n\n if (parentElement)\n parentElement.focus()\n }\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n emits('select', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onSelect(props.value)\n}\nasync function handleToggle(ev: ToggleEvent<T>) {\n emits('toggle', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onToggle(props.value)\n}\n\nasync function handleSelectCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleToggleCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_TOGGLE, handleToggle, eventDetail)\n}\n\ndefineExpose({\n isExpanded,\n isSelected,\n isIndeterminate,\n handleToggle: () => rootContext.onToggle(props.value),\n handleSelect: () => rootContext.onSelect(props.value),\n})\n</script>\n\n<template>\n <RovingFocusItem\n as-child\n :value=\"value\"\n allow-shift-key\n >\n <Primitive\n v-bind=\"$attrs\"\n role=\"treeitem\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-selected=\"isSelected\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-level=\"level\"\n :data-indent=\"level\"\n :data-selected=\"isSelected ? '' : undefined\"\n :data-expanded=\"isExpanded ? '' : undefined\"\n @keydown.enter.space.self.prevent=\"handleSelectCustomEvent\"\n @keydown.right.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)\"\n @keydown.left.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)\"\n @click.stop=\"(ev) => {\n handleSelectCustomEvent(ev)\n handleToggleCustomEvent(ev)\n }\"\n >\n <slot\n :is-expanded=\"isExpanded\"\n :is-selected=\"isSelected\"\n :is-indeterminate=\"isIndeterminate\"\n :handle-select=\"() => rootContext.onSelect(value)\"\n :handle-toggle=\"() => rootContext.onToggle(value)\"\n />\n </Primitive>\n </RovingFocusItem>\n</template>\n"],"names":["injectTreeRootContext","useCollection","computed","flatten","getActiveElement","handleAndDispatchCustomEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeItem.cjs","sources":["../../src/Tree/TreeItem.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeItemProps<T> extends PrimitiveProps {\n /** Value given to this item */\n value: T\n /** Level of depth */\n level: number\n}\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\nexport type ToggleEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\n\nexport type TreeItemEmits<T> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n toggle: [event: ToggleEvent<T>]\n}\n\nconst TREE_SELECT = 'tree.select'\nconst TREE_TOGGLE = 'tree.toggle'\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { computed } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { flatten } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TreeItemProps<T>>(), {\n as: 'li',\n})\n\nconst emits = defineEmits<TreeItemEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n isExpanded: boolean\n isSelected: boolean\n isIndeterminate: boolean | undefined\n handleToggle: () => void\n handleSelect: () => void\n }) => any\n}>()\nconst rootContext = injectTreeRootContext()\nconst { getItems } = useCollection()\n\nconst hasChildren = computed(() => !!rootContext.getChildren(props.value))\n\nconst isExpanded = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.expanded.value.includes(key)\n})\n\nconst isSelected = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.selectedKeys.value.includes(key)\n})\n\nconst isIndeterminate = computed(() => {\n if (rootContext.bubbleSelect.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return children.some(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n && !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else {\n return undefined\n }\n})\n\nfunction handleKeydownRight(ev: KeyboardEvent) {\n if (!hasChildren.value)\n return\n\n if (isExpanded.value) {\n // go to first child\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(currentIndex)\n const nextElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level + 1))\n\n if (nextElement)\n nextElement.focus()\n }\n else {\n // open expanded\n handleToggleCustomEvent(ev)\n }\n}\n\nfunction handleKeydownLeft(ev: KeyboardEvent) {\n if (isExpanded.value) {\n // close expanded\n handleToggleCustomEvent(ev)\n }\n else {\n // go back to parent\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(0, currentIndex).reverse()\n const parentElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level - 1))\n\n if (parentElement)\n parentElement.focus()\n }\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n emits('select', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onSelect(props.value)\n}\nasync function handleToggle(ev: ToggleEvent<T>) {\n emits('toggle', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onToggle(props.value)\n}\n\nasync function handleSelectCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleToggleCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_TOGGLE, handleToggle, eventDetail)\n}\n\ndefineExpose({\n isExpanded,\n isSelected,\n isIndeterminate,\n handleToggle: () => rootContext.onToggle(props.value),\n handleSelect: () => rootContext.onSelect(props.value),\n})\n</script>\n\n<template>\n <RovingFocusItem\n as-child\n :value=\"value\"\n allow-shift-key\n >\n <Primitive\n v-bind=\"$attrs\"\n role=\"treeitem\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-selected=\"isSelected\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-level=\"level\"\n :data-indent=\"level\"\n :data-selected=\"isSelected ? '' : undefined\"\n :data-expanded=\"isExpanded ? '' : undefined\"\n @keydown.enter.space.self.prevent=\"handleSelectCustomEvent\"\n @keydown.right.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)\"\n @keydown.left.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)\"\n @click.stop=\"(ev) => {\n handleSelectCustomEvent(ev)\n handleToggleCustomEvent(ev)\n }\"\n >\n <slot\n :is-expanded=\"isExpanded\"\n :is-selected=\"isSelected\"\n :is-indeterminate=\"isIndeterminate\"\n :handle-select=\"() => rootContext.onSelect(value)\"\n :handle-toggle=\"() => rootContext.onToggle(value)\"\n />\n </Primitive>\n </RovingFocusItem>\n</template>\n"],"names":["injectTreeRootContext","useCollection","computed","flatten","getActiveElement","handleAndDispatchCustomEvent"],"mappings":"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"}
|
package/dist/Tree/TreeItem.js
CHANGED
|
@@ -36,7 +36,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
36
36
|
return rootContext.selectedKeys.value.includes(key);
|
|
37
37
|
});
|
|
38
38
|
const isIndeterminate = computed(() => {
|
|
39
|
-
if (rootContext.
|
|
39
|
+
if (rootContext.bubbleSelect.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {
|
|
40
|
+
const children = flatten(rootContext.getChildren(props.value) || []);
|
|
41
|
+
return children.some((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child))) && !children.every((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child)));
|
|
42
|
+
} else if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {
|
|
40
43
|
const children = flatten(rootContext.getChildren(props.value) || []);
|
|
41
44
|
return !children.every((child) => rootContext.modelValue.value.find((v) => rootContext.getKey(v) === rootContext.getKey(child)));
|
|
42
45
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeItem.js","sources":["../../src/Tree/TreeItem.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeItemProps<T> extends PrimitiveProps {\n /** Value given to this item */\n value: T\n /** Level of depth */\n level: number\n}\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\nexport type ToggleEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\n\nexport type TreeItemEmits<T> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n toggle: [event: ToggleEvent<T>]\n}\n\nconst TREE_SELECT = 'tree.select'\nconst TREE_TOGGLE = 'tree.toggle'\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\nimport { computed } from 'vue'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { flatten } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TreeItemProps<T>>(), {\n as: 'li',\n})\n\nconst emits = defineEmits<TreeItemEmits<T>>()\n\ndefineSlots<{\n default: (props: {\n isExpanded: boolean\n isSelected: boolean\n isIndeterminate: boolean | undefined\n handleToggle: () => void\n handleSelect: () => void\n }) => any\n}>()\nconst rootContext = injectTreeRootContext()\nconst { getItems } = useCollection()\n\nconst hasChildren = computed(() => !!rootContext.getChildren(props.value))\n\nconst isExpanded = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.expanded.value.includes(key)\n})\n\nconst isSelected = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.selectedKeys.value.includes(key)\n})\n\nconst isIndeterminate = computed(() => {\n if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else {\n return undefined\n }\n})\n\nfunction handleKeydownRight(ev: KeyboardEvent) {\n if (!hasChildren.value)\n return\n\n if (isExpanded.value) {\n // go to first child\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(currentIndex)\n const nextElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level + 1))\n\n if (nextElement)\n nextElement.focus()\n }\n else {\n // open expanded\n handleToggleCustomEvent(ev)\n }\n}\n\nfunction handleKeydownLeft(ev: KeyboardEvent) {\n if (isExpanded.value) {\n // close expanded\n handleToggleCustomEvent(ev)\n }\n else {\n // go back to parent\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(0, currentIndex).reverse()\n const parentElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level - 1))\n\n if (parentElement)\n parentElement.focus()\n }\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n emits('select', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onSelect(props.value)\n}\nasync function handleToggle(ev: ToggleEvent<T>) {\n emits('toggle', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onToggle(props.value)\n}\n\nasync function handleSelectCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleToggleCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_TOGGLE, handleToggle, eventDetail)\n}\n\ndefineExpose({\n isExpanded,\n isSelected,\n isIndeterminate,\n handleToggle: () => rootContext.onToggle(props.value),\n handleSelect: () => rootContext.onSelect(props.value),\n})\n</script>\n\n<template>\n <RovingFocusItem\n as-child\n :value=\"value\"\n allow-shift-key\n >\n <Primitive\n v-bind=\"$attrs\"\n role=\"treeitem\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-selected=\"isSelected\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-level=\"level\"\n :data-indent=\"level\"\n :data-selected=\"isSelected ? '' : undefined\"\n :data-expanded=\"isExpanded ? '' : undefined\"\n @keydown.enter.space.self.prevent=\"handleSelectCustomEvent\"\n @keydown.right.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)\"\n @keydown.left.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)\"\n @click.stop=\"(ev) => {\n handleSelectCustomEvent(ev)\n handleToggleCustomEvent(ev)\n }\"\n >\n <slot\n :is-expanded=\"isExpanded\"\n :is-selected=\"isSelected\"\n :is-indeterminate=\"isIndeterminate\"\n :handle-select=\"() => rootContext.onSelect(value)\"\n :handle-toggle=\"() => rootContext.onToggle(value)\"\n />\n </Primitive>\n </RovingFocusItem>\n</template>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeItem.js","sources":["../../src/Tree/TreeItem.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeItemProps<T> extends PrimitiveProps {\n /** Value given to this item */\n value: T\n /** Level of depth */\n level: number\n}\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\nexport type ToggleEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>\n\nexport type TreeItemEmits<T> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n toggle: [event: ToggleEvent<T>]\n}\n\nconst TREE_SELECT = 'tree.select'\nconst TREE_TOGGLE = 'tree.toggle'\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { computed } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { flatten } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TreeItemProps<T>>(), {\n as: 'li',\n})\n\nconst emits = defineEmits<TreeItemEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n isExpanded: boolean\n isSelected: boolean\n isIndeterminate: boolean | undefined\n handleToggle: () => void\n handleSelect: () => void\n }) => any\n}>()\nconst rootContext = injectTreeRootContext()\nconst { getItems } = useCollection()\n\nconst hasChildren = computed(() => !!rootContext.getChildren(props.value))\n\nconst isExpanded = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.expanded.value.includes(key)\n})\n\nconst isSelected = computed(() => {\n const key = rootContext.getKey(props.value)\n return rootContext.selectedKeys.value.includes(key)\n})\n\nconst isIndeterminate = computed(() => {\n if (rootContext.bubbleSelect.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return children.some(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n && !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else if (rootContext.propagateSelect.value && isSelected.value && hasChildren.value && Array.isArray(rootContext.modelValue.value)) {\n const children = flatten<T, any>(rootContext.getChildren(props.value) || [])\n\n return !children.every(child => rootContext.modelValue.value.find((v: any) => rootContext.getKey(v) === rootContext.getKey(child)))\n }\n else {\n return undefined\n }\n})\n\nfunction handleKeydownRight(ev: KeyboardEvent) {\n if (!hasChildren.value)\n return\n\n if (isExpanded.value) {\n // go to first child\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(currentIndex)\n const nextElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level + 1))\n\n if (nextElement)\n nextElement.focus()\n }\n else {\n // open expanded\n handleToggleCustomEvent(ev)\n }\n}\n\nfunction handleKeydownLeft(ev: KeyboardEvent) {\n if (isExpanded.value) {\n // close expanded\n handleToggleCustomEvent(ev)\n }\n else {\n // go back to parent\n const collection = getItems().map(i => i.ref)\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = collection.indexOf(currentElement)\n const list = [...collection].slice(0, currentIndex).reverse()\n const parentElement = list.find(el => Number(el.getAttribute('data-indent')) === (props.level - 1))\n\n if (parentElement)\n parentElement.focus()\n }\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n emits('select', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onSelect(props.value)\n}\nasync function handleToggle(ev: ToggleEvent<T>) {\n emits('toggle', ev)\n if (ev?.defaultPrevented)\n return\n\n rootContext.onToggle(props.value)\n}\n\nasync function handleSelectCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleToggleCustomEvent(ev?: PointerEvent | KeyboardEvent) {\n if (!ev)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value, isExpanded: isExpanded.value, isSelected: isSelected.value }\n handleAndDispatchCustomEvent(TREE_TOGGLE, handleToggle, eventDetail)\n}\n\ndefineExpose({\n isExpanded,\n isSelected,\n isIndeterminate,\n handleToggle: () => rootContext.onToggle(props.value),\n handleSelect: () => rootContext.onSelect(props.value),\n})\n</script>\n\n<template>\n <RovingFocusItem\n as-child\n :value=\"value\"\n allow-shift-key\n >\n <Primitive\n v-bind=\"$attrs\"\n role=\"treeitem\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-selected=\"isSelected\"\n :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n :aria-level=\"level\"\n :data-indent=\"level\"\n :data-selected=\"isSelected ? '' : undefined\"\n :data-expanded=\"isExpanded ? '' : undefined\"\n @keydown.enter.space.self.prevent=\"handleSelectCustomEvent\"\n @keydown.right.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)\"\n @keydown.left.prevent=\"(ev) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)\"\n @click.stop=\"(ev) => {\n handleSelectCustomEvent(ev)\n handleToggleCustomEvent(ev)\n }\"\n >\n <slot\n :is-expanded=\"isExpanded\"\n :is-selected=\"isSelected\"\n :is-indeterminate=\"isIndeterminate\"\n :handle-select=\"() => rootContext.onSelect(value)\"\n :handle-toggle=\"() => rootContext.onToggle(value)\"\n />\n </Primitive>\n </RovingFocusItem>\n</template>\n"],"names":[],"mappings":"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"}
|
package/dist/Tree/TreeRoot.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const vue = require('vue');
|
|
4
|
-
const RovingFocus_utils = require('../RovingFocus/utils.cjs');
|
|
5
4
|
const core = require('@vueuse/core');
|
|
5
|
+
const RovingFocus_utils = require('../RovingFocus/utils.cjs');
|
|
6
6
|
const Tree_utils = require('./utils.cjs');
|
|
7
7
|
const shared_createContext = require('../shared/createContext.cjs');
|
|
8
8
|
const shared_useTypeahead = require('../shared/useTypeahead.cjs');
|
|
@@ -24,10 +24,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
24
24
|
getKey: {},
|
|
25
25
|
getChildren: { type: Function, default: (val) => val.children },
|
|
26
26
|
selectionBehavior: { default: "toggle" },
|
|
27
|
-
multiple: {
|
|
27
|
+
multiple: {},
|
|
28
28
|
dir: {},
|
|
29
29
|
disabled: { type: Boolean },
|
|
30
30
|
propagateSelect: { type: Boolean },
|
|
31
|
+
bubbleSelect: { type: Boolean },
|
|
31
32
|
asChild: { type: Boolean },
|
|
32
33
|
as: { default: "ul" }
|
|
33
34
|
},
|
|
@@ -35,7 +36,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
35
36
|
setup(__props, { emit: __emit }) {
|
|
36
37
|
const props = __props;
|
|
37
38
|
const emits = __emit;
|
|
38
|
-
const { items, multiple, disabled, propagateSelect, dir: propDir } = vue.toRefs(props);
|
|
39
|
+
const { items, multiple, disabled, propagateSelect, dir: propDir, bubbleSelect } = vue.toRefs(props);
|
|
39
40
|
const { handleTypeaheadSearch } = shared_useTypeahead.useTypeahead();
|
|
40
41
|
const dir = shared_useDirection.useDirection(propDir);
|
|
41
42
|
const rovingFocusGroupRef = vue.ref();
|
|
@@ -111,6 +112,22 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
111
112
|
);
|
|
112
113
|
});
|
|
113
114
|
}
|
|
115
|
+
function handleBubbleSelect(item) {
|
|
116
|
+
if (item.parentItem != null && Array.isArray(modelValue.value) && props.multiple) {
|
|
117
|
+
const parentItem = expandedItems.value.find((i) => {
|
|
118
|
+
return item.parentItem != null && props.getKey(i.value) === props.getKey(item.parentItem);
|
|
119
|
+
});
|
|
120
|
+
if (parentItem != null) {
|
|
121
|
+
const areAllChilredOfParentSelected = props.getChildren(parentItem.value)?.every((i) => modelValue.value.find((v) => props.getKey(v) === props.getKey(i)));
|
|
122
|
+
if (areAllChilredOfParentSelected) {
|
|
123
|
+
modelValue.value = [...modelValue.value, parentItem.value];
|
|
124
|
+
} else {
|
|
125
|
+
modelValue.value = modelValue.value.filter((v) => props.getKey(v) !== props.getKey(parentItem.value));
|
|
126
|
+
}
|
|
127
|
+
handleBubbleSelect(parentItem);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
114
131
|
provideTreeRootContext({
|
|
115
132
|
modelValue,
|
|
116
133
|
selectedKeys,
|
|
@@ -118,6 +135,14 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
118
135
|
const condition = (baseValue) => props.getKey(baseValue ?? {}) === props.getKey(val);
|
|
119
136
|
const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : void 0;
|
|
120
137
|
onSelectItem(val, condition);
|
|
138
|
+
if (props.bubbleSelect && props.multiple && Array.isArray(modelValue.value)) {
|
|
139
|
+
const item = expandedItems.value.find((i) => {
|
|
140
|
+
return props.getKey(i.value) === props.getKey(val);
|
|
141
|
+
});
|
|
142
|
+
if (item != null) {
|
|
143
|
+
handleBubbleSelect(item);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
121
146
|
if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {
|
|
122
147
|
const children = Tree_utils.flatten(props.getChildren(val) ?? []);
|
|
123
148
|
if (exist) {
|
|
@@ -146,6 +171,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
146
171
|
multiple,
|
|
147
172
|
dir,
|
|
148
173
|
propagateSelect,
|
|
174
|
+
bubbleSelect,
|
|
149
175
|
isVirtual,
|
|
150
176
|
virtualKeydownHook,
|
|
151
177
|
handleMultipleReplace
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRoot.cjs","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":["createContext","toRefs","useTypeahead","useDirection","ref","createEventHook","useVModel","useSelectionBehavior","computed","items","MAP_KEY_TO_FOCUS_INTENT","nextTick","getActiveElement","flatten","val"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeRoot.cjs","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":["createContext","toRefs","useTypeahead","useDirection","ref","createEventHook","useVModel","useSelectionBehavior","computed","items","MAP_KEY_TO_FOCUS_INTENT","nextTick","getActiveElement","flatten","val"],"mappings":"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"}
|
package/dist/Tree/TreeRoot.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, toRefs, ref, computed, createBlock, openBlock, unref, withCtx, createVNode, withKeys, withModifiers, renderSlot, nextTick } from 'vue';
|
|
2
|
-
import { M as MAP_KEY_TO_FOCUS_INTENT } from '../RovingFocus/utils.js';
|
|
3
2
|
import { createEventHook, useVModel } from '@vueuse/core';
|
|
3
|
+
import { M as MAP_KEY_TO_FOCUS_INTENT } from '../RovingFocus/utils.js';
|
|
4
4
|
import { f as flatten } from './utils.js';
|
|
5
5
|
import { c as createContext } from '../shared/createContext.js';
|
|
6
6
|
import { u as useTypeahead } from '../shared/useTypeahead.js';
|
|
@@ -22,10 +22,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
22
22
|
getKey: {},
|
|
23
23
|
getChildren: { type: Function, default: (val) => val.children },
|
|
24
24
|
selectionBehavior: { default: "toggle" },
|
|
25
|
-
multiple: {
|
|
25
|
+
multiple: {},
|
|
26
26
|
dir: {},
|
|
27
27
|
disabled: { type: Boolean },
|
|
28
28
|
propagateSelect: { type: Boolean },
|
|
29
|
+
bubbleSelect: { type: Boolean },
|
|
29
30
|
asChild: { type: Boolean },
|
|
30
31
|
as: { default: "ul" }
|
|
31
32
|
},
|
|
@@ -33,7 +34,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
33
34
|
setup(__props, { emit: __emit }) {
|
|
34
35
|
const props = __props;
|
|
35
36
|
const emits = __emit;
|
|
36
|
-
const { items, multiple, disabled, propagateSelect, dir: propDir } = toRefs(props);
|
|
37
|
+
const { items, multiple, disabled, propagateSelect, dir: propDir, bubbleSelect } = toRefs(props);
|
|
37
38
|
const { handleTypeaheadSearch } = useTypeahead();
|
|
38
39
|
const dir = useDirection(propDir);
|
|
39
40
|
const rovingFocusGroupRef = ref();
|
|
@@ -109,6 +110,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
109
110
|
);
|
|
110
111
|
});
|
|
111
112
|
}
|
|
113
|
+
function handleBubbleSelect(item) {
|
|
114
|
+
if (item.parentItem != null && Array.isArray(modelValue.value) && props.multiple) {
|
|
115
|
+
const parentItem = expandedItems.value.find((i) => {
|
|
116
|
+
return item.parentItem != null && props.getKey(i.value) === props.getKey(item.parentItem);
|
|
117
|
+
});
|
|
118
|
+
if (parentItem != null) {
|
|
119
|
+
const areAllChilredOfParentSelected = props.getChildren(parentItem.value)?.every((i) => modelValue.value.find((v) => props.getKey(v) === props.getKey(i)));
|
|
120
|
+
if (areAllChilredOfParentSelected) {
|
|
121
|
+
modelValue.value = [...modelValue.value, parentItem.value];
|
|
122
|
+
} else {
|
|
123
|
+
modelValue.value = modelValue.value.filter((v) => props.getKey(v) !== props.getKey(parentItem.value));
|
|
124
|
+
}
|
|
125
|
+
handleBubbleSelect(parentItem);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
112
129
|
provideTreeRootContext({
|
|
113
130
|
modelValue,
|
|
114
131
|
selectedKeys,
|
|
@@ -116,6 +133,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
116
133
|
const condition = (baseValue) => props.getKey(baseValue ?? {}) === props.getKey(val);
|
|
117
134
|
const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : void 0;
|
|
118
135
|
onSelectItem(val, condition);
|
|
136
|
+
if (props.bubbleSelect && props.multiple && Array.isArray(modelValue.value)) {
|
|
137
|
+
const item = expandedItems.value.find((i) => {
|
|
138
|
+
return props.getKey(i.value) === props.getKey(val);
|
|
139
|
+
});
|
|
140
|
+
if (item != null) {
|
|
141
|
+
handleBubbleSelect(item);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
119
144
|
if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {
|
|
120
145
|
const children = flatten(props.getChildren(val) ?? []);
|
|
121
146
|
if (exist) {
|
|
@@ -144,6 +169,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
144
169
|
multiple,
|
|
145
170
|
dir,
|
|
146
171
|
propagateSelect,
|
|
172
|
+
bubbleSelect,
|
|
147
173
|
isVirtual,
|
|
148
174
|
virtualKeydownHook,
|
|
149
175
|
handleMultipleReplace
|