reka-ui 2.2.0 → 2.3.0
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/AccordionHeader.cjs.map +1 -1
- package/dist/Accordion/AccordionHeader.js.map +1 -1
- 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/Accordion/AccordionTrigger.cjs.map +1 -1
- package/dist/Accordion/AccordionTrigger.js.map +1 -1
- package/dist/AlertDialog/AlertDialogCancel.cjs.map +1 -1
- package/dist/AlertDialog/AlertDialogCancel.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 +3 -3
- package/dist/Calendar/CalendarCell.cjs.map +1 -1
- package/dist/Calendar/CalendarCell.js +3 -3
- 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 +1 -1
- package/dist/Calendar/CalendarHeading.cjs.map +1 -1
- package/dist/Calendar/CalendarHeading.js +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.map +1 -1
- package/dist/Calendar/useCalendar.js.map +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.cjs +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.cjs.map +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.js +1 -1
- package/dist/Checkbox/CheckboxGroupRoot.js.map +1 -1
- package/dist/Checkbox/CheckboxIndicator.cjs.map +1 -1
- package/dist/Checkbox/CheckboxIndicator.js.map +1 -1
- package/dist/Checkbox/CheckboxRoot.cjs +1 -1
- package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
- package/dist/Checkbox/CheckboxRoot.js +1 -1
- package/dist/Checkbox/CheckboxRoot.js.map +1 -1
- package/dist/Collapsible/CollapsibleContent.cjs +1 -1
- package/dist/Collapsible/CollapsibleContent.cjs.map +1 -1
- package/dist/Collapsible/CollapsibleContent.js +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/Collapsible/CollapsibleTrigger.cjs +1 -1
- package/dist/Collapsible/CollapsibleTrigger.js +1 -1
- package/dist/Collection/Collection.cjs.map +1 -1
- package/dist/Collection/Collection.js.map +1 -1
- package/dist/Combobox/ComboboxAnchor.cjs.map +1 -1
- package/dist/Combobox/ComboboxAnchor.js.map +1 -1
- package/dist/Combobox/ComboboxArrow.cjs.map +1 -1
- package/dist/Combobox/ComboboxArrow.js.map +1 -1
- package/dist/Combobox/ComboboxCancel.cjs +1 -0
- package/dist/Combobox/ComboboxCancel.cjs.map +1 -1
- package/dist/Combobox/ComboboxCancel.js +1 -0
- package/dist/Combobox/ComboboxCancel.js.map +1 -1
- package/dist/Combobox/ComboboxContent.cjs.map +1 -1
- package/dist/Combobox/ComboboxContent.js.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs +2 -2
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +2 -2
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/Combobox/ComboboxEmpty.cjs.map +1 -1
- package/dist/Combobox/ComboboxEmpty.js.map +1 -1
- package/dist/Combobox/ComboboxGroup.cjs +1 -1
- package/dist/Combobox/ComboboxGroup.cjs.map +1 -1
- package/dist/Combobox/ComboboxGroup.js +1 -1
- package/dist/Combobox/ComboboxGroup.js.map +1 -1
- package/dist/Combobox/ComboboxInput.cjs +9 -1
- package/dist/Combobox/ComboboxInput.cjs.map +1 -1
- package/dist/Combobox/ComboboxInput.js +9 -1
- package/dist/Combobox/ComboboxInput.js.map +1 -1
- package/dist/Combobox/ComboboxItem.cjs +4 -3
- package/dist/Combobox/ComboboxItem.cjs.map +1 -1
- package/dist/Combobox/ComboboxItem.js +4 -3
- package/dist/Combobox/ComboboxItem.js.map +1 -1
- package/dist/Combobox/ComboboxLabel.cjs +1 -1
- package/dist/Combobox/ComboboxLabel.js +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/ContextMenuPortal.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuPortal.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.map +1 -1
- package/dist/ContextMenu/ContextMenuSub.js.map +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.cjs +2 -2
- package/dist/ContextMenu/ContextMenuTrigger.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuTrigger.js +2 -2
- 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/DatePickerArrow.cjs.map +1 -1
- package/dist/DatePicker/DatePickerArrow.js.map +1 -1
- package/dist/DatePicker/DatePickerCalendar.cjs.map +1 -1
- package/dist/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/DatePicker/DatePickerCell.cjs.map +1 -1
- package/dist/DatePicker/DatePickerCell.js.map +1 -1
- package/dist/DatePicker/DatePickerCellTrigger.cjs.map +1 -1
- package/dist/DatePicker/DatePickerCellTrigger.js.map +1 -1
- package/dist/DatePicker/DatePickerClose.cjs.map +1 -1
- package/dist/DatePicker/DatePickerClose.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/DatePickerGrid.cjs.map +1 -1
- package/dist/DatePicker/DatePickerGrid.js.map +1 -1
- package/dist/DatePicker/DatePickerGridBody.cjs.map +1 -1
- package/dist/DatePicker/DatePickerGridBody.js.map +1 -1
- package/dist/DatePicker/DatePickerGridHead.cjs.map +1 -1
- package/dist/DatePicker/DatePickerGridHead.js.map +1 -1
- package/dist/DatePicker/DatePickerGridRow.cjs.map +1 -1
- package/dist/DatePicker/DatePickerGridRow.js.map +1 -1
- package/dist/DatePicker/DatePickerHeadCell.cjs.map +1 -1
- package/dist/DatePicker/DatePickerHeadCell.js.map +1 -1
- package/dist/DatePicker/DatePickerHeader.cjs.map +1 -1
- package/dist/DatePicker/DatePickerHeader.js.map +1 -1
- package/dist/DatePicker/DatePickerHeading.cjs.map +1 -1
- package/dist/DatePicker/DatePickerHeading.js.map +1 -1
- package/dist/DatePicker/DatePickerInput.cjs.map +1 -1
- package/dist/DatePicker/DatePickerInput.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/DatePicker/DatePickerTrigger.cjs.map +1 -1
- package/dist/DatePicker/DatePickerTrigger.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/DateRangePickerAnchor.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerAnchor.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerArrow.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerArrow.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.cjs +3 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.js +3 -1
- package/dist/DateRangePicker/DateRangePickerCalendar.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCell.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerCell.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerClose.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerClose.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/DateRangePickerGrid.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGrid.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridBody.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridBody.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridHead.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridHead.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridRow.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerGridRow.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeadCell.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeadCell.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeader.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeader.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeading.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerHeading.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerInput.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerInput.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 +9 -2
- package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.js +9 -2
- package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerTrigger.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerTrigger.js.map +1 -1
- package/dist/Dialog/DialogClose.cjs +1 -1
- package/dist/Dialog/DialogClose.cjs.map +1 -1
- package/dist/Dialog/DialogClose.js +1 -1
- package/dist/Dialog/DialogClose.js.map +1 -1
- package/dist/Dialog/DialogContent.cjs.map +1 -1
- package/dist/Dialog/DialogContent.js.map +1 -1
- package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
- package/dist/Dialog/DialogContentImpl.js.map +1 -1
- package/dist/Dialog/DialogContentModal.cjs.map +1 -1
- package/dist/Dialog/DialogContentModal.js.map +1 -1
- package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
- package/dist/Dialog/DialogContentNonModal.js.map +1 -1
- package/dist/Dialog/DialogDescription.cjs.map +1 -1
- package/dist/Dialog/DialogDescription.js.map +1 -1
- package/dist/Dialog/DialogOverlay.cjs.map +1 -1
- package/dist/Dialog/DialogOverlay.js.map +1 -1
- package/dist/Dialog/DialogOverlayImpl.cjs.map +1 -1
- package/dist/Dialog/DialogOverlayImpl.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/DialogTitle.cjs.map +1 -1
- package/dist/Dialog/DialogTitle.js.map +1 -1
- package/dist/Dialog/DialogTrigger.cjs +1 -1
- package/dist/Dialog/DialogTrigger.cjs.map +1 -1
- package/dist/Dialog/DialogTrigger.js +1 -1
- package/dist/Dialog/DialogTrigger.js.map +1 -1
- package/dist/Dialog/utils.cjs.map +1 -1
- package/dist/Dialog/utils.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 +11 -6
- package/dist/DismissableLayer/utils.cjs.map +1 -1
- package/dist/DismissableLayer/utils.js +12 -7
- package/dist/DismissableLayer/utils.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.js +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRoot.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSub.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.cjs +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuTrigger.js +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/EditablePreview.cjs.map +1 -1
- package/dist/Editable/EditablePreview.js.map +1 -1
- package/dist/Editable/EditableRoot.cjs +1 -1
- package/dist/Editable/EditableRoot.cjs.map +1 -1
- package/dist/Editable/EditableRoot.js +1 -1
- package/dist/Editable/EditableRoot.js.map +1 -1
- package/dist/FocusScope/FocusScope.cjs +1 -1
- package/dist/FocusScope/FocusScope.cjs.map +1 -1
- package/dist/FocusScope/FocusScope.js +1 -1
- package/dist/FocusScope/FocusScope.js.map +1 -1
- package/dist/HoverCard/HoverCardContent.cjs +1 -1
- package/dist/HoverCard/HoverCardContent.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContent.js +1 -1
- package/dist/HoverCard/HoverCardContent.js.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs +3 -3
- package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js +3 -3
- package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
- package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
- package/dist/HoverCard/HoverCardRoot.js.map +1 -1
- package/dist/HoverCard/HoverCardTrigger.cjs +1 -1
- package/dist/HoverCard/HoverCardTrigger.cjs.map +1 -1
- package/dist/HoverCard/HoverCardTrigger.js +1 -1
- package/dist/HoverCard/HoverCardTrigger.js.map +1 -1
- package/dist/Listbox/ListboxContent.cjs +1 -1
- package/dist/Listbox/ListboxContent.cjs.map +1 -1
- package/dist/Listbox/ListboxContent.js +1 -1
- package/dist/Listbox/ListboxContent.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 +2 -2
- package/dist/Listbox/ListboxItem.cjs.map +1 -1
- package/dist/Listbox/ListboxItem.js +2 -2
- package/dist/Listbox/ListboxItem.js.map +1 -1
- package/dist/Listbox/ListboxItemIndicator.cjs.map +1 -1
- package/dist/Listbox/ListboxItemIndicator.js.map +1 -1
- package/dist/Listbox/ListboxRoot.cjs +3 -3
- package/dist/Listbox/ListboxRoot.cjs.map +1 -1
- package/dist/Listbox/ListboxRoot.js +3 -3
- package/dist/Listbox/ListboxRoot.js.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.cjs +4 -4
- package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.js +4 -4
- package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
- package/dist/Menu/MenuAnchor.cjs.map +1 -1
- package/dist/Menu/MenuAnchor.js.map +1 -1
- package/dist/Menu/MenuCheckboxItem.cjs +1 -1
- package/dist/Menu/MenuCheckboxItem.cjs.map +1 -1
- package/dist/Menu/MenuCheckboxItem.js +1 -1
- package/dist/Menu/MenuCheckboxItem.js.map +1 -1
- package/dist/Menu/MenuContent.cjs.map +1 -1
- package/dist/Menu/MenuContent.js.map +1 -1
- package/dist/Menu/MenuContentImpl.cjs +2 -2
- package/dist/Menu/MenuContentImpl.cjs.map +1 -1
- package/dist/Menu/MenuContentImpl.js +2 -2
- package/dist/Menu/MenuContentImpl.js.map +1 -1
- package/dist/Menu/MenuItem.cjs.map +1 -1
- package/dist/Menu/MenuItem.js.map +1 -1
- package/dist/Menu/MenuItemImpl.cjs +1 -1
- package/dist/Menu/MenuItemImpl.cjs.map +1 -1
- package/dist/Menu/MenuItemImpl.js +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/MenuRadioItem.cjs +1 -1
- package/dist/Menu/MenuRadioItem.cjs.map +1 -1
- package/dist/Menu/MenuRadioItem.js +1 -1
- package/dist/Menu/MenuRadioItem.js.map +1 -1
- package/dist/Menu/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/MenuRootContentModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentModal.js.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.js.map +1 -1
- package/dist/Menu/MenuSub.cjs.map +1 -1
- package/dist/Menu/MenuSub.js.map +1 -1
- package/dist/Menu/MenuSubContent.cjs.map +1 -1
- package/dist/Menu/MenuSubContent.js.map +1 -1
- package/dist/Menu/MenuSubTrigger.cjs +1 -1
- package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
- package/dist/Menu/MenuSubTrigger.js +1 -1
- package/dist/Menu/MenuSubTrigger.js.map +1 -1
- package/dist/Menubar/MenubarContent.cjs +1 -1
- package/dist/Menubar/MenubarContent.cjs.map +1 -1
- package/dist/Menubar/MenubarContent.js +1 -1
- package/dist/Menubar/MenubarContent.js.map +1 -1
- package/dist/Menubar/MenubarGroup.cjs.map +1 -1
- package/dist/Menubar/MenubarGroup.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.map +1 -1
- package/dist/Menubar/MenubarSub.js.map +1 -1
- package/dist/Menubar/MenubarSubContent.cjs.map +1 -1
- package/dist/Menubar/MenubarSubContent.js.map +1 -1
- package/dist/Menubar/MenubarTrigger.cjs +1 -1
- package/dist/Menubar/MenubarTrigger.cjs.map +1 -1
- package/dist/Menubar/MenubarTrigger.js +1 -1
- package/dist/Menubar/MenubarTrigger.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.cjs +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContent.js +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/NavigationMenuLink.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuLink.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/NumberFieldDecrement.cjs +1 -1
- package/dist/NumberField/NumberFieldDecrement.cjs.map +1 -1
- package/dist/NumberField/NumberFieldDecrement.js +1 -1
- package/dist/NumberField/NumberFieldDecrement.js.map +1 -1
- package/dist/NumberField/NumberFieldIncrement.cjs.map +1 -1
- package/dist/NumberField/NumberFieldIncrement.js.map +1 -1
- package/dist/NumberField/NumberFieldInput.cjs +3 -3
- package/dist/NumberField/NumberFieldInput.cjs.map +1 -1
- package/dist/NumberField/NumberFieldInput.js +3 -3
- 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/NumberField/utils.cjs.map +1 -1
- package/dist/NumberField/utils.js +1 -1
- package/dist/NumberField/utils.js.map +1 -1
- package/dist/Pagination/PaginationList.cjs.map +1 -1
- package/dist/Pagination/PaginationList.js.map +1 -1
- package/dist/Pagination/PaginationRoot.cjs.map +1 -1
- package/dist/Pagination/PaginationRoot.js.map +1 -1
- package/dist/Pagination/utils.cjs.map +1 -1
- package/dist/Pagination/utils.js.map +1 -1
- package/dist/PinInput/PinInputInput.cjs +1 -1
- package/dist/PinInput/PinInputInput.cjs.map +1 -1
- package/dist/PinInput/PinInputInput.js +1 -1
- package/dist/PinInput/PinInputInput.js.map +1 -1
- package/dist/PinInput/PinInputRoot.cjs.map +1 -1
- 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/PopoverClose.cjs.map +1 -1
- package/dist/Popover/PopoverClose.js.map +1 -1
- package/dist/Popover/PopoverContent.cjs.map +1 -1
- package/dist/Popover/PopoverContent.js.map +1 -1
- package/dist/Popover/PopoverContentImpl.cjs +1 -1
- package/dist/Popover/PopoverContentImpl.cjs.map +1 -1
- package/dist/Popover/PopoverContentImpl.js +1 -1
- package/dist/Popover/PopoverContentImpl.js.map +1 -1
- package/dist/Popover/PopoverContentModal.cjs +1 -1
- package/dist/Popover/PopoverContentModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentModal.js +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.map +1 -1
- package/dist/Popover/PopoverRoot.js.map +1 -1
- package/dist/Popover/PopoverTrigger.cjs +1 -1
- package/dist/Popover/PopoverTrigger.cjs.map +1 -1
- package/dist/Popover/PopoverTrigger.js +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 +2 -2
- package/dist/Popper/PopperContent.cjs.map +1 -1
- package/dist/Popper/PopperContent.js +2 -2
- package/dist/Popper/PopperContent.js.map +1 -1
- package/dist/Popper/PopperRoot.cjs.map +1 -1
- package/dist/Popper/PopperRoot.js.map +1 -1
- package/dist/Presence/Presence.cjs +1 -1
- package/dist/Presence/Presence.cjs.map +1 -1
- package/dist/Presence/Presence.js +1 -1
- package/dist/Presence/Presence.js.map +1 -1
- package/dist/Presence/usePresence.cjs +2 -2
- package/dist/Presence/usePresence.cjs.map +1 -1
- package/dist/Presence/usePresence.js +2 -2
- package/dist/Presence/usePresence.js.map +1 -1
- package/dist/Primitive/Primitive.cjs.map +1 -1
- package/dist/Primitive/Primitive.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/Primitive/usePrimitiveElement.cjs.map +1 -1
- package/dist/Primitive/usePrimitiveElement.js.map +1 -1
- package/dist/Progress/ProgressIndicator.cjs.map +1 -1
- package/dist/Progress/ProgressIndicator.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.map +1 -1
- package/dist/RadioGroup/Radio.js.map +1 -1
- package/dist/RadioGroup/RadioGroupIndicator.cjs.map +1 -1
- package/dist/RadioGroup/RadioGroupIndicator.js.map +1 -1
- package/dist/RadioGroup/RadioGroupItem.cjs +1 -1
- package/dist/RadioGroup/RadioGroupItem.cjs.map +1 -1
- package/dist/RadioGroup/RadioGroupItem.js +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/RadioGroup/utils.cjs.map +1 -1
- package/dist/RadioGroup/utils.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCell.cjs +3 -3
- package/dist/RangeCalendar/RangeCalendarCell.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCell.js +3 -3
- 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/RangeCalendarHeading.cjs +1 -1
- package/dist/RangeCalendar/RangeCalendarHeading.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarHeading.js +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 +32 -10
- package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +32 -10
- package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs +26 -3
- package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js +26 -3
- 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 +1 -1
- package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
- package/dist/RovingFocus/RovingFocusItem.js +1 -1
- package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaCorner.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaCorner.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaCornerImpl.cjs +1 -1
- package/dist/ScrollArea/ScrollAreaCornerImpl.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaCornerImpl.js +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 +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbar.js +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/ScrollAreaScrollbarVisible.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarVisible.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 +1 -1
- package/dist/ScrollArea/ScrollAreaViewport.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaViewport.js +1 -1
- package/dist/ScrollArea/ScrollAreaViewport.js.map +1 -1
- package/dist/ScrollArea/utils.cjs.map +1 -1
- package/dist/ScrollArea/utils.js.map +1 -1
- package/dist/Select/SelectArrow.cjs +1 -1
- package/dist/Select/SelectArrow.cjs.map +1 -1
- package/dist/Select/SelectArrow.js +1 -1
- package/dist/Select/SelectArrow.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 +4 -4
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +4 -4
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectItem.cjs +1 -1
- package/dist/Select/SelectItem.cjs.map +1 -1
- package/dist/Select/SelectItem.js +1 -1
- package/dist/Select/SelectItem.js.map +1 -1
- package/dist/Select/SelectItemAlignedPosition.cjs +2 -2
- package/dist/Select/SelectItemAlignedPosition.cjs.map +1 -1
- package/dist/Select/SelectItemAlignedPosition.js +2 -2
- package/dist/Select/SelectItemAlignedPosition.js.map +1 -1
- package/dist/Select/SelectItemIndicator.cjs.map +1 -1
- package/dist/Select/SelectItemIndicator.js.map +1 -1
- package/dist/Select/SelectItemText.cjs.map +1 -1
- package/dist/Select/SelectItemText.js.map +1 -1
- package/dist/Select/SelectPopperPosition.cjs +1 -1
- package/dist/Select/SelectPopperPosition.cjs.map +1 -1
- package/dist/Select/SelectPopperPosition.js +1 -1
- package/dist/Select/SelectPopperPosition.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 +5 -3
- package/dist/Select/SelectRoot.cjs.map +1 -1
- package/dist/Select/SelectRoot.js +5 -3
- 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/SelectScrollDownButton.cjs +1 -1
- package/dist/Select/SelectScrollDownButton.cjs.map +1 -1
- package/dist/Select/SelectScrollDownButton.js +1 -1
- package/dist/Select/SelectScrollDownButton.js.map +1 -1
- package/dist/Select/SelectTrigger.cjs +3 -3
- package/dist/Select/SelectTrigger.cjs.map +1 -1
- package/dist/Select/SelectTrigger.js +3 -3
- package/dist/Select/SelectTrigger.js.map +1 -1
- package/dist/Select/SelectValue.cjs +2 -1
- package/dist/Select/SelectValue.cjs.map +1 -1
- package/dist/Select/SelectValue.js +2 -1
- package/dist/Select/SelectValue.js.map +1 -1
- package/dist/Select/SelectViewport.cjs +1 -1
- package/dist/Select/SelectViewport.cjs.map +1 -1
- package/dist/Select/SelectViewport.js +1 -1
- package/dist/Select/SelectViewport.js.map +1 -1
- package/dist/Select/utils.cjs +4 -0
- package/dist/Select/utils.cjs.map +1 -1
- package/dist/Select/utils.js +4 -1
- package/dist/Select/utils.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 +1 -1
- package/dist/Slider/SliderRoot.cjs.map +1 -1
- package/dist/Slider/SliderRoot.js +1 -1
- package/dist/Slider/SliderRoot.js.map +1 -1
- package/dist/Slider/SliderThumb.cjs +1 -1
- package/dist/Slider/SliderThumb.cjs.map +1 -1
- package/dist/Slider/SliderThumb.js +1 -1
- package/dist/Slider/SliderThumb.js.map +1 -1
- package/dist/Slider/SliderThumbImpl.cjs +2 -2
- package/dist/Slider/SliderThumbImpl.cjs.map +1 -1
- package/dist/Slider/SliderThumbImpl.js +2 -2
- 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 +5 -5
- package/dist/Splitter/SplitterGroup.cjs.map +1 -1
- package/dist/Splitter/SplitterGroup.js +5 -5
- 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/Splitter/SplitterResizeHandle.cjs +1 -1
- package/dist/Splitter/SplitterResizeHandle.cjs.map +1 -1
- package/dist/Splitter/SplitterResizeHandle.js +1 -1
- package/dist/Splitter/SplitterResizeHandle.js.map +1 -1
- package/dist/Stepper/StepperDescription.cjs +1 -1
- package/dist/Stepper/StepperDescription.cjs.map +1 -1
- package/dist/Stepper/StepperDescription.js +1 -1
- package/dist/Stepper/StepperDescription.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 +30 -3
- package/dist/Stepper/StepperRoot.cjs.map +1 -1
- package/dist/Stepper/StepperRoot.js +30 -3
- package/dist/Stepper/StepperRoot.js.map +1 -1
- package/dist/Stepper/StepperSeparator.cjs.map +1 -1
- package/dist/Stepper/StepperSeparator.js.map +1 -1
- package/dist/Stepper/StepperTitle.cjs.map +1 -1
- package/dist/Stepper/StepperTitle.js.map +1 -1
- package/dist/Stepper/StepperTrigger.cjs +1 -1
- package/dist/Stepper/StepperTrigger.cjs.map +1 -1
- package/dist/Stepper/StepperTrigger.js +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/Switch/SwitchThumb.cjs.map +1 -1
- package/dist/Switch/SwitchThumb.js.map +1 -1
- package/dist/Tabs/TabsContent.cjs +1 -1
- package/dist/Tabs/TabsContent.cjs.map +1 -1
- package/dist/Tabs/TabsContent.js +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 +1 -1
- package/dist/Tabs/TabsList.cjs.map +1 -1
- package/dist/Tabs/TabsList.js +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/TagsInputClear.cjs +1 -1
- package/dist/TagsInput/TagsInputClear.cjs.map +1 -1
- package/dist/TagsInput/TagsInputClear.js +1 -1
- package/dist/TagsInput/TagsInputClear.js.map +1 -1
- package/dist/TagsInput/TagsInputInput.cjs +2 -1
- package/dist/TagsInput/TagsInputInput.cjs.map +1 -1
- package/dist/TagsInput/TagsInputInput.js +2 -1
- 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 +1 -1
- package/dist/TagsInput/TagsInputItemDelete.cjs.map +1 -1
- package/dist/TagsInput/TagsInputItemDelete.js +1 -1
- package/dist/TagsInput/TagsInputItemDelete.js.map +1 -1
- package/dist/TagsInput/TagsInputItemText.cjs +1 -1
- package/dist/TagsInput/TagsInputItemText.cjs.map +1 -1
- package/dist/TagsInput/TagsInputItemText.js +1 -1
- package/dist/TagsInput/TagsInputItemText.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 +12 -3
- package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
- package/dist/TimeField/TimeFieldRoot.js +12 -3
- package/dist/TimeField/TimeFieldRoot.js.map +1 -1
- package/dist/Toast/ToastAnnounce.cjs +1 -1
- package/dist/Toast/ToastAnnounce.cjs.map +1 -1
- package/dist/Toast/ToastAnnounce.js +1 -1
- package/dist/Toast/ToastAnnounce.js.map +1 -1
- package/dist/Toast/ToastProvider.cjs.map +1 -1
- package/dist/Toast/ToastProvider.js.map +1 -1
- package/dist/Toast/ToastRoot.cjs +28 -20
- package/dist/Toast/ToastRoot.cjs.map +1 -1
- package/dist/Toast/ToastRoot.js +28 -20
- package/dist/Toast/ToastRoot.js.map +1 -1
- package/dist/Toast/ToastRootImpl.cjs +2 -2
- package/dist/Toast/ToastRootImpl.cjs.map +1 -1
- package/dist/Toast/ToastRootImpl.js +2 -2
- 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/ToolbarSeparator.cjs +1 -1
- package/dist/Toolbar/ToolbarSeparator.js +1 -1
- package/dist/Toolbar/ToolbarToggleGroup.cjs +1 -1
- package/dist/Toolbar/ToolbarToggleGroup.cjs.map +1 -1
- package/dist/Toolbar/ToolbarToggleGroup.js +1 -1
- package/dist/Toolbar/ToolbarToggleGroup.js.map +1 -1
- package/dist/Toolbar/ToolbarToggleItem.cjs.map +1 -1
- package/dist/Toolbar/ToolbarToggleItem.js.map +1 -1
- package/dist/Tooltip/TooltipContent.cjs +1 -1
- package/dist/Tooltip/TooltipContent.cjs.map +1 -1
- package/dist/Tooltip/TooltipContent.js +1 -1
- package/dist/Tooltip/TooltipContent.js.map +1 -1
- package/dist/Tooltip/TooltipContentHoverable.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentHoverable.js.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs +3 -3
- package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.js +3 -3
- package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
- package/dist/Tooltip/TooltipRoot.cjs.map +1 -1
- package/dist/Tooltip/TooltipRoot.js.map +1 -1
- package/dist/Tooltip/TooltipTrigger.cjs +4 -1
- package/dist/Tooltip/TooltipTrigger.cjs.map +1 -1
- package/dist/Tooltip/TooltipTrigger.js +4 -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 +28 -2
- package/dist/Tree/TreeRoot.cjs.map +1 -1
- package/dist/Tree/TreeRoot.js +28 -2
- 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/Tree/utils.cjs.map +1 -1
- package/dist/Tree/utils.js.map +1 -1
- package/dist/Viewport/Viewport.cjs.map +1 -1
- package/dist/Viewport/Viewport.js.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInput.cjs.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInput.js.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInputBubble.cjs.map +1 -1
- package/dist/VisuallyHidden/VisuallyHiddenInputBubble.js.map +1 -1
- package/dist/composables/useWindowSplitterBehavior.cjs.map +1 -1
- package/dist/composables/useWindowSplitterBehavior.js.map +1 -1
- package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs +3 -3
- package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs.map +1 -1
- package/dist/composables/useWindowSplitterPanelGroupBehavior.js +3 -3
- package/dist/composables/useWindowSplitterPanelGroupBehavior.js.map +1 -1
- package/dist/date/calendar.cjs +1 -1
- package/dist/date/calendar.cjs.map +1 -1
- package/dist/date/calendar.js +1 -1
- package/dist/date/calendar.js.map +1 -1
- package/dist/date/comparators.cjs +6 -4
- package/dist/date/comparators.cjs.map +1 -1
- package/dist/date/comparators.js +6 -4
- package/dist/date/comparators.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 +37 -8
- package/dist/date/utils.cjs.map +1 -1
- package/dist/date/utils.js +36 -9
- package/dist/date/utils.js.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/index.cjs +347 -347
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1558 -1552
- package/dist/index.js +161 -161
- package/dist/index.js.map +1 -1
- package/dist/shared/createContext.cjs.map +1 -1
- package/dist/shared/createContext.js.map +1 -1
- package/dist/shared/renderSlotFragments.cjs.map +1 -1
- package/dist/shared/renderSlotFragments.js.map +1 -1
- package/dist/shared/useArrowNavigation.cjs.map +1 -1
- package/dist/shared/useArrowNavigation.js.map +1 -1
- package/dist/shared/useBodyScrollLock.cjs +3 -3
- package/dist/shared/useBodyScrollLock.cjs.map +1 -1
- package/dist/shared/useBodyScrollLock.js +3 -3
- 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/useFilter.cjs.map +1 -1
- package/dist/shared/useFilter.js.map +1 -1
- package/dist/shared/useFormControl.cjs.map +1 -1
- package/dist/shared/useFormControl.js.map +1 -1
- package/dist/shared/useForwardExpose.cjs.map +1 -1
- package/dist/shared/useForwardExpose.js.map +1 -1
- package/dist/shared/useForwardProps.cjs +4 -2
- package/dist/shared/useForwardProps.cjs.map +1 -1
- package/dist/shared/useForwardProps.js +5 -3
- package/dist/shared/useForwardProps.js.map +1 -1
- package/dist/shared/useForwardPropsEmits.cjs.map +1 -1
- package/dist/shared/useForwardPropsEmits.js.map +1 -1
- package/dist/shared/useGraceArea.cjs +1 -1
- package/dist/shared/useGraceArea.cjs.map +1 -1
- package/dist/shared/useGraceArea.js +1 -1
- package/dist/shared/useGraceArea.js.map +1 -1
- package/dist/shared/useHideOthers.cjs.map +1 -1
- package/dist/shared/useHideOthers.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/dist/shared/useSelectionBehavior.cjs +2 -2
- package/dist/shared/useSelectionBehavior.cjs.map +1 -1
- package/dist/shared/useSelectionBehavior.js +2 -2
- package/dist/shared/useSelectionBehavior.js.map +1 -1
- package/dist/shared/useSingleOrMultipleValue.cjs +1 -1
- package/dist/shared/useSingleOrMultipleValue.cjs.map +1 -1
- package/dist/shared/useSingleOrMultipleValue.js +1 -1
- package/dist/shared/useSingleOrMultipleValue.js.map +1 -1
- package/dist/shared/useSize.cjs.map +1 -1
- package/dist/shared/useSize.js.map +1 -1
- package/dist/shared/useStateMachine.cjs.map +1 -1
- package/dist/shared/useStateMachine.js.map +1 -1
- package/dist/shared/withDefault.cjs.map +1 -1
- package/dist/shared/withDefault.js.map +1 -1
- package/dist/utils/calculate.cjs +1 -1
- package/dist/utils/calculate.cjs.map +1 -1
- package/dist/utils/calculate.js +1 -1
- package/dist/utils/calculate.js.map +1 -1
- package/dist/utils/dom.cjs.map +1 -1
- package/dist/utils/dom.js.map +1 -1
- package/dist/utils/registry.cjs +1 -1
- package/dist/utils/registry.cjs.map +1 -1
- package/dist/utils/registry.js +1 -1
- package/dist/utils/registry.js.map +1 -1
- package/dist/utils/resizePanel.cjs +1 -1
- package/dist/utils/resizePanel.cjs.map +1 -1
- package/dist/utils/resizePanel.js +1 -1
- package/dist/utils/resizePanel.js.map +1 -1
- package/dist/utils/style.cjs.map +1 -1
- package/dist/utils/style.js.map +1 -1
- package/package.json +7 -8
|
@@ -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 {
|
|
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 { Primitive, type PrimitiveProps } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { computed } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\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 { Primitive, type PrimitiveProps } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { injectTreeRootContext } from './TreeRoot.vue'\nimport { computed } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { getActiveElement, handleAndDispatchCustomEvent } from '@/shared'\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
|
@@ -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 { createContext, getActiveElement, useDirection, useSelectionBehavior, useTypeahead } from '@/shared'\nimport type { Direction } from '@/shared/types'\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 { Primitive, type PrimitiveProps } from '@/Primitive'\nimport { type EventHook, createEventHook, useVModel } from '@vueuse/core'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { type Ref, computed, nextTick, ref, toRefs } from 'vue'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\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
|
@@ -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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRoot.js","sources":["../../src/Tree/TreeRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { createContext, getActiveElement, useDirection, useSelectionBehavior, useTypeahead } from '@/shared'\nimport type { Direction } from '@/shared/types'\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 { Primitive, type PrimitiveProps } from '@/Primitive'\nimport { type EventHook, createEventHook, useVModel } from '@vueuse/core'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { type Ref, computed, nextTick, ref, toRefs } from 'vue'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\n\nconst props = withDefaults(defineProps<TreeRootProps<T, U>>(), {\n as: 'ul',\n selectionBehavior: 'toggle',\n getChildren: (val: T) => val.children,\n})\nconst emits = defineEmits<TreeRootEmits<U>>()\n\ndefineSlots<{\n default: (props: {\n flattenItems: FlattenedItem<T>[]\n modelValue: typeof modelValue.value\n expanded: typeof expanded.value\n }) => any\n}>()\n\nconst { items, multiple, disabled, propagateSelect, dir: propDir } = toRefs(props)\nconst { handleTypeaheadSearch } = useTypeahead()\nconst dir = useDirection(propDir)\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\n\n// Virtualizer\nconst isVirtual = ref(false)\nconst virtualKeydownHook = createEventHook<KeyboardEvent>()\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<U | U[]>\n\nconst expanded = useVModel(props, 'expanded', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultExpanded ?? [],\n passive: (props.expanded === undefined) as false,\n deep: true,\n}) as Ref<string[]>\n\nconst { onSelectItem, handleMultipleReplace } = useSelectionBehavior(modelValue, props)\n\nconst selectedKeys = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value.map(i => props.getKey(i as any))\n else\n return [props.getKey(modelValue.value as any ?? {})]\n})\n\nfunction flattenItems(items: T[], level: number = 1, parentItem?: T): FlattenedItem<T>[] {\n return items.reduce((acc: FlattenedItem<T>[], item: T, index: number) => {\n const key = props.getKey(item)\n const children = props.getChildren(item)\n const isExpanded = expanded.value.includes(key)\n\n const flattenedItem: FlattenedItem<T> = {\n _id: key,\n value: item,\n index,\n level,\n parentItem,\n hasChildren: !!children,\n bind: {\n 'value': item,\n level,\n 'aria-setsize': items.length,\n 'aria-posinset': index + 1,\n },\n }\n acc.push(flattenedItem)\n\n if (children && isExpanded)\n acc.push(...flattenItems(children, level + 1, item))\n\n return acc\n }, [])\n}\n\nconst expandedItems = computed(() => {\n const items = props.items\n const expandedKeys = expanded.value.map(i => i)\n return flattenItems(items ?? [])\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isVirtual.value) {\n virtualKeydownHook.trigger(event)\n }\n else {\n const collections = rovingFocusGroupRef.value?.getItems() ?? []\n handleTypeaheadSearch(event.key, collections)\n }\n}\n\nfunction handleKeydownNavigation(event: KeyboardEvent) {\n if (isVirtual.value)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n nextTick(() => {\n handleMultipleReplace(\n intent,\n getActiveElement(),\n rovingFocusGroupRef.value?.getItems!,\n expandedItems.value.map(i => i.value),\n )\n })\n}\n\nprovideTreeRootContext({\n modelValue,\n selectedKeys,\n onSelect: (val) => {\n const condition = (baseValue: U) => props.getKey(baseValue as any ?? {}) === props.getKey(val)\n const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : undefined\n onSelectItem(val, condition)\n\n if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {\n const children = flatten<U, any>(props.getChildren(val) ?? [])\n if (exist) {\n // remove all child\n modelValue.value = [...modelValue.value]\n .filter(i => !children.some(child => props.getKey(i as any ?? {}) === props.getKey(child as any)))\n }\n else {\n // select all child\n modelValue.value = [...modelValue.value, ...children]\n }\n }\n },\n expanded,\n onToggle(val) {\n const children = val ? props.getChildren(val) : undefined\n if (!children)\n return\n\n const key = props.getKey(val) ?? val\n if (expanded.value.includes(key))\n expanded.value = expanded.value.filter(val => val !== key)\n else\n expanded.value.push(key)\n },\n getKey: props.getKey,\n getChildren: props.getChildren,\n items,\n expandedItems,\n disabled,\n multiple,\n dir,\n propagateSelect,\n\n isVirtual,\n virtualKeydownHook,\n handleMultipleReplace,\n})\n</script>\n\n<template>\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n as-child\n orientation=\"vertical\"\n :dir=\"dir\"\n >\n <Primitive\n role=\"tree\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-multiselectable=\"multiple ? true : undefined\"\n @keydown=\"handleKeydown\"\n @keydown.up.down.shift=\"handleKeydownNavigation\"\n >\n <slot\n :flatten-items=\"expandedItems\"\n :model-value=\"modelValue\"\n :expanded=\"expanded\"\n />\n </Primitive>\n </RovingFocusGroup>\n</template>\n"],"names":["items","val"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeRoot.js","sources":["../../src/Tree/TreeRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Direction } from '@/shared/types'\nimport { createContext, getActiveElement, useDirection, useSelectionBehavior, useTypeahead } from '@/shared'\nimport { flatten } from './utils'\n\nexport interface TreeRootProps<T = Record<string, any>, U extends Record<string, any> = Record<string, any>, M extends boolean = false> extends PrimitiveProps {\n /** The controlled value of the tree. Can be binded with with `v-model`. */\n modelValue?: M extends true ? U[] : U\n /** The value of the tree when initially rendered. Use when you do not need to control the state of the tree */\n defaultValue?: M extends true ? U[] : U\n /** List of items */\n items?: T[]\n /** The controlled value of the expanded item. Can be binded with with `v-model`. */\n expanded?: string[]\n /** The value of the expanded tree when initially rendered. Use when you do not need to control the state of the expanded tree */\n defaultExpanded?: string[]\n /** This function is passed the index of each item and should return a unique key for that item */\n getKey: (val: T) => string\n /** This function is passed the index of each item and should return a list of children for that item */\n getChildren?: (val: T) => T[] | undefined\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: 'toggle' | 'replace'\n /** Whether multiple options can be selected or not. */\n multiple?: M\n /** The reading direction of the listbox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** When `true`, prevents the user from interacting with tree */\n disabled?: boolean\n /** When `true`, selecting parent will select the descendants. */\n propagateSelect?: boolean\n /** When `true`, selecting children will update the parent state. */\n bubbleSelect?: boolean\n}\n\nexport type TreeRootEmits<T = Record<string, any>, M extends boolean = false> = {\n 'update:modelValue': [val: M extends true ? T[] : T]\n 'update:expanded': [val: string[]]\n}\n\ninterface TreeRootContext<T = Record<string, any>> {\n modelValue: Ref<T | T[]>\n selectedKeys: Ref<string[]>\n onSelect: (val: T) => void\n expanded: Ref<string[]>\n onToggle: (val: T) => void\n items: Ref<T[]>\n expandedItems: Ref<T[]>\n getKey: (val: T) => string\n getChildren: (val: T) => T[] | undefined\n multiple: Ref<boolean>\n disabled: Ref<boolean>\n dir: Ref<Direction>\n propagateSelect: Ref<boolean>\n bubbleSelect: Ref<boolean>\n isVirtual: Ref<boolean>\n virtualKeydownHook: EventHook<KeyboardEvent>\n\n handleMultipleReplace: ReturnType<typeof useSelectionBehavior>['handleMultipleReplace']\n}\n\nexport type FlattenedItem<T> = {\n _id: string\n index: number\n value: T\n level: number\n hasChildren: boolean\n parentItem?: T\n bind: {\n value: T\n level: number\n [key: string]: any\n }\n}\n\nexport const [injectTreeRootContext, provideTreeRootContext] = createContext<TreeRootContext<any>>('TreeRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>, U extends Record<string, any>, M extends boolean = false\">\nimport type { EventHook } from '@vueuse/core'\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createEventHook, useVModel } from '@vueuse/core'\nimport { computed, nextTick, ref, toRefs } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\n\nconst props = withDefaults(defineProps<TreeRootProps<T, U, M>>(), {\n as: 'ul',\n selectionBehavior: 'toggle',\n getChildren: (val: T) => val.children,\n})\nconst emits = defineEmits<TreeRootEmits<U, M>>()\n\ndefineSlots<{\n default?: (props: {\n flattenItems: FlattenedItem<T>[]\n modelValue: M extends true ? U[] : U\n expanded: typeof expanded.value\n }) => any\n}>()\n\nconst { items, multiple, disabled, propagateSelect, dir: propDir, bubbleSelect } = toRefs(props)\nconst { handleTypeaheadSearch } = useTypeahead()\nconst dir = useDirection(propDir)\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\n\n// Virtualizer\nconst isVirtual = ref(false)\nconst virtualKeydownHook = createEventHook<KeyboardEvent>()\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<U | U[]>\n\nconst expanded = useVModel(props, 'expanded', emits, {\n // @ts-expect-error idk\n defaultValue: props.defaultExpanded ?? [],\n passive: (props.expanded === undefined) as false,\n deep: true,\n}) as Ref<string[]>\n\nconst { onSelectItem, handleMultipleReplace } = useSelectionBehavior(modelValue, props)\n\nconst selectedKeys = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value.map(i => props.getKey(i as any))\n else\n return [props.getKey(modelValue.value as any ?? {})]\n})\n\nfunction flattenItems(items: T[], level: number = 1, parentItem?: T): FlattenedItem<T>[] {\n return items.reduce((acc: FlattenedItem<T>[], item: T, index: number) => {\n const key = props.getKey(item)\n const children = props.getChildren(item)\n const isExpanded = expanded.value.includes(key)\n\n const flattenedItem: FlattenedItem<T> = {\n _id: key,\n value: item,\n index,\n level,\n parentItem,\n hasChildren: !!children,\n bind: {\n 'value': item,\n level,\n 'aria-setsize': items.length,\n 'aria-posinset': index + 1,\n },\n }\n acc.push(flattenedItem)\n\n if (children && isExpanded)\n acc.push(...flattenItems(children, level + 1, item))\n\n return acc\n }, [])\n}\n\nconst expandedItems = computed(() => {\n const items = props.items\n const expandedKeys = expanded.value.map(i => i)\n return flattenItems(items ?? [])\n})\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (isVirtual.value) {\n virtualKeydownHook.trigger(event)\n }\n else {\n const collections = rovingFocusGroupRef.value?.getItems() ?? []\n handleTypeaheadSearch(event.key, collections)\n }\n}\n\nfunction handleKeydownNavigation(event: KeyboardEvent) {\n if (isVirtual.value)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n nextTick(() => {\n handleMultipleReplace(\n intent,\n getActiveElement(),\n rovingFocusGroupRef.value?.getItems!,\n expandedItems.value.map(i => i.value),\n )\n })\n}\n\nfunction handleBubbleSelect(item: FlattenedItem<T>) {\n if (item.parentItem != null && Array.isArray(modelValue.value) && props.multiple) {\n const parentItem = expandedItems.value.find((i) => {\n return item.parentItem != null && props.getKey(i.value) === props.getKey(item.parentItem)\n })\n\n if (parentItem != null) {\n const areAllChilredOfParentSelected = props.getChildren(parentItem.value)?.every(i => modelValue.value.find((v: any) => props.getKey(v) === props.getKey(i)))\n\n if (areAllChilredOfParentSelected) {\n modelValue.value = [...modelValue.value, parentItem.value as any]\n }\n else {\n modelValue.value = modelValue.value.filter((v: any) => props.getKey(v) !== props.getKey(parentItem.value))\n }\n\n handleBubbleSelect(parentItem)\n }\n }\n}\n\nprovideTreeRootContext({\n modelValue,\n selectedKeys,\n onSelect: (val) => {\n const condition = (baseValue: U) => props.getKey(baseValue as any ?? {}) === props.getKey(val)\n const exist = props.multiple && Array.isArray(modelValue.value) ? modelValue.value?.findIndex(condition) !== -1 : undefined\n onSelectItem(val, condition)\n\n if (props.bubbleSelect && props.multiple && Array.isArray(modelValue.value)) {\n const item = expandedItems.value.find((i) => {\n return props.getKey(i.value) === props.getKey(val)\n })\n if (item != null) {\n handleBubbleSelect(item)\n }\n }\n\n if (props.propagateSelect && props.multiple && Array.isArray(modelValue.value)) {\n const children = flatten<U, any>(props.getChildren(val) ?? [])\n\n if (exist) {\n // remove all child\n modelValue.value = [...modelValue.value]\n .filter(i => !children.some(child => props.getKey(i as any ?? {}) === props.getKey(child as any)))\n }\n else {\n // select all child\n modelValue.value = [...modelValue.value, ...children]\n }\n }\n },\n expanded,\n onToggle(val) {\n const children = val ? props.getChildren(val) : undefined\n if (!children)\n return\n\n const key = props.getKey(val) ?? val\n if (expanded.value.includes(key))\n expanded.value = expanded.value.filter(val => val !== key)\n else\n expanded.value.push(key)\n },\n getKey: props.getKey,\n getChildren: props.getChildren,\n items,\n expandedItems,\n disabled,\n multiple,\n dir,\n propagateSelect,\n bubbleSelect,\n\n isVirtual,\n virtualKeydownHook,\n handleMultipleReplace,\n})\n</script>\n\n<template>\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n as-child\n orientation=\"vertical\"\n :dir=\"dir\"\n >\n <Primitive\n role=\"tree\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-multiselectable=\"multiple ? true : undefined\"\n @keydown=\"handleKeydown\"\n @keydown.up.down.shift=\"handleKeydownNavigation\"\n >\n <slot\n :flatten-items=\"expandedItems\"\n :model-value=\"modelValue as M extends true ? U[] : U\"\n :expanded=\"expanded\"\n />\n </Primitive>\n </RovingFocusGroup>\n</template>\n"],"names":["items","val"],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
const vue = require('vue');
|
|
4
4
|
const vueVirtual = require('@tanstack/vue-virtual');
|
|
5
5
|
const core = require('@vueuse/core');
|
|
6
|
-
const shared_useTypeahead = require('../shared/useTypeahead.cjs');
|
|
7
|
-
const RovingFocus_utils = require('../RovingFocus/utils.cjs');
|
|
8
6
|
const Collection_Collection = require('../Collection/Collection.cjs');
|
|
7
|
+
const RovingFocus_utils = require('../RovingFocus/utils.cjs');
|
|
8
|
+
const shared_useTypeahead = require('../shared/useTypeahead.cjs');
|
|
9
9
|
const shared_getActiveElement = require('../shared/getActiveElement.cjs');
|
|
10
10
|
const Tree_TreeRoot = require('./TreeRoot.cjs');
|
|
11
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeVirtualizer.cjs","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { type VirtualItem, type Virtualizer, useVirtualizer } from '@tanstack/vue-virtual'\nimport { type Ref, cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { type FlattenedItem, injectTreeRootContext } from './TreeRoot.vue'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { useCollection } from '@/Collection'\nimport { getActiveElement } from '@/shared'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":["useSlots","injectTreeRootContext","useParentElement","useCollection","refAutoReset","computed","useVirtualizer","cloneVNode","MAP_KEY_TO_FOCUS_INTENT","getActiveElement","getNextMatch","nextTick"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAUd,IAAA,MAAM,QAAQA,YAAS,EAAA;AACvB,IAAA,MAAM,cAAcC,mCAAsB,EAAA;AAC1C,IAAA,MAAM,WAAWC,qBAAiB,EAAA;AAClC,IAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,mCAAc,EAAA;AAGnC,IAAM,MAAA,MAAA,GAASC,iBAAa,CAAA,EAAA,EAAI,GAAI,CAAA;AACpC,IAAM,MAAA,mBAAA,GAAsBC,aAAS,MAAM;AACzC,MAAM,MAAA,gBAAA,GAAmB,CAAC,MAAgC,KAAA;AACxD,QAAA,IAAI,KAAM,CAAA,WAAA;AACR,UAAO,OAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA;AAE/B,UAAO,OAAA,MAAA,CAAO,QAAS,EAAA,CAAE,WAAY,EAAA;AAAA,OACzC;AAEA,MAAA,OAAO,YAAY,aAAc,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,QAAQ,KAAW,MAAA;AAAA,QAC7D,KAAA;AAAA,QACA,WAAA,EAAa,gBAAiB,CAAA,MAAA,CAAO,KAAK;AAAA,OAC1C,CAAA,CAAA;AAAA,KACH,CAAA;AAGD,IAAA,WAAA,CAAY,UAAU,KAAQ,GAAA,IAAA;AAE9B,IAAM,MAAA,OAAA,GAAUA,aAAS,MAAM;AAC7B,MAAA,MAAM,KAAK,QAAS,CAAA,KAAA;AACpB,MAAA,IAAI,CAAC,EAAI,EAAA;AACP,QAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,GAAA,EAAK,CAAE,EAAA;AAAA,OAEvB,MAAA;AACH,QAAM,MAAA,MAAA,GAAS,MAAO,CAAA,gBAAA,CAAiB,EAAE,CAAA;AACzC,QAAO,OAAA;AAAA,UACL,OAAO,MAAO,CAAA,UAAA,CAAW,MAAO,CAAA,iBAAA,IAAqB,OAAO,UAAU,CAAA;AAAA,UACtE,KAAK,MAAO,CAAA,UAAA,CAAW,MAAO,CAAA,eAAA,IAAmB,OAAO,aAAa;AAAA,SACvE;AAAA;AACF,KACD,CAAA;AAED,IAAA,MAAM,WAAc,GAAAC,yBAAA;AAAA,MAClB;AAAA,QACE,IAAI,kBAAqB,GAAA;AAAE,UAAA,OAAO,QAAQ,KAAM,CAAA,KAAA;AAAA,SAAM;AAAA,QACtD,IAAI,gBAAmB,GAAA;AAAE,UAAA,OAAO,QAAQ,KAAM,CAAA,GAAA;AAAA,SAAI;AAAA,QAClD,IAAI,KAAQ,GAAA;AAAE,UAAO,OAAA,WAAA,CAAY,aAAc,CAAA,KAAA,CAAM,MAAU,IAAA,CAAA;AAAA,SAAE;AAAA,QACjE,IAAI,UAAa,GAAA;AAAE,UAAO,OAAA,KAAA;AAAA,SAAM;AAAA,QAChC,WAAW,KAAO,EAAA;AAChB,UAAO,OAAA,KAAA,GAAQ,YAAY,MAAO,CAAA,WAAA,CAAY,cAAc,KAAM,CAAA,KAAK,EAAE,KAAK,CAAA;AAAA,SAChF;AAAA,QACA,YAAe,GAAA;AACb,UAAA,OAAO,MAAM,YAAgB,IAAA,EAAA;AAAA,SAC/B;AAAA,QACA,gBAAmB,GAAA;AAAE,UAAA,OAAO,QAAS,CAAA,KAAA;AAAA,SAAM;AAAA,QAC3C,QAAA,EAAU,MAAM,QAAY,IAAA;AAAA;AAC9B,KACF;AAEA,IAAM,MAAA,gBAAA,GAAmBD,aAAS,MAAM,WAAA,CAAY,MAAM,eAAgB,EAAA,CAAE,GAAI,CAAA,CAAC,IAAS,KAAA;AACxF,MAAO,OAAA;AAAA,QACL,IAAA;AAAA,QACA,EAAA,EAAIE,cAAW,CAAA,KAAA,CAAM,OAAS,CAAA;AAAA,UAC5B,IAAM,EAAA,WAAA,CAAY,aAAc,CAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,UAChD,aAAa,WAAY,CAAA,KAAA;AAAA,UACzB,WAAa,EAAA;AAAA,SACd,CAAG,CAAA,CAAC,CAAG,EAAA;AAAA,UACN,cAAc,IAAK,CAAA,KAAA;AAAA,UACnB,OAAS,EAAA;AAAA,YACP,QAAU,EAAA,UAAA;AAAA,YACV,GAAK,EAAA,CAAA;AAAA,YACL,IAAM,EAAA,CAAA;AAAA,YACN,SAAA,EAAW,CAAc,WAAA,EAAA,IAAA,CAAK,KAAK,CAAA,GAAA,CAAA;AAAA,YACnC,cAAgB,EAAA;AAAA;AAClB,SACD;AAAA,OACH;AAAA,KACD,CAAC,CAAA;AAEF,IAAA,SAAS,sBAAsB,KAAe,EAAA;AAC5C,MAAA,WAAA,CAAY,MAAM,aAAc,CAAA,KAAA,EAAO,EAAE,KAAA,EAAO,SAAS,CAAA;AACzD,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,MAAM,OAAO,QAAS,CAAA,KAAA,CAAM,aAAc,CAAA,CAAA,aAAA,EAAgB,KAAK,CAAI,EAAA,CAAA,CAAA;AACnE,QAAA,IAAI,IAAgB,YAAA,WAAA;AAClB,UAAA,IAAA,CAAK,KAAM,EAAA;AAAA,OACd,CAAA;AAAA;AAGH,IAAY,WAAA,CAAA,kBAAA,CAAmB,EAAG,CAAA,CAAC,KAAU,KAAA;AAC3C,MAAA,MAAM,SAAY,GAAA,KAAA,CAAM,MAAU,IAAA,KAAA,CAAM,WAAW,KAAM,CAAA,OAAA;AACzD,MAAA,MAAM,QAAW,GAAA,KAAA,CAAM,GAAQ,KAAA,KAAA,IAAS,CAAC,SAAA;AACzC,MAAI,IAAA,QAAA;AACF,QAAA;AAEF,MAAM,MAAA,MAAA,GAASC,yCAAwB,CAAA,KAAA,CAAM,GAAG,CAAA;AAEhD,MAAA,IAAI,CAAC,OAAS,EAAA,MAAM,CAAE,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACtC,QAAA,KAAA,CAAM,cAAe,EAAA;AAErB,QAAA,MAAM,QAAQ,MAAW,KAAA,OAAA,GAAU,IAAI,WAAY,CAAA,aAAA,CAAc,MAAM,MAAS,GAAA,CAAA;AAChF,QAAY,WAAA,CAAA,KAAA,CAAM,cAAc,KAAK,CAAA;AACrC,QAAA,qBAAA,CAAsB,MAAM;AAC1B,UAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,UAAM,MAAA,IAAA,GAAO,WAAW,OAAU,GAAA,KAAA,CAAM,CAAC,CAAI,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA;AACnE,UAAA,IAAA,CAAK,IAAI,KAAM,EAAA;AAAA,SAChB,CAAA;AAAA,OAEM,MAAA,IAAA,MAAA,KAAW,MAAU,IAAA,KAAA,CAAM,QAAQ,SAAW,EAAA;AACrD,QAAA,MAAM,iBAAiBC,wCAAiB,EAAA;AACxC,QAAA,MAAM,YAAe,GAAA,MAAA,CAAO,cAAe,CAAA,YAAA,CAAa,YAAY,CAAC,CAAA;AACrE,QAAA,MAAM,YAAe,GAAA,MAAA,CAAO,cAAe,CAAA,YAAA,CAAa,aAAa,CAAC,CAAA;AACtE,QAAA,MAAM,OAAO,WAAY,CAAA,aAAA,CAAc,MAAM,KAAM,CAAA,CAAA,EAAG,YAAY,CAAE,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,WAAW,EAAE,GAAG,MAAM,KAAM,EAAA,CAAE,EAAE,OAAQ,EAAA;AAEvH,QAAA,MAAM,aAAa,IAAK,CAAA,IAAA,CAAK,UAAQ,IAAK,CAAA,KAAA,KAAW,eAAe,CAAE,CAAA;AACtE,QAAI,IAAA,UAAA;AACF,UAAA,qBAAA,CAAsB,WAAW,KAAK,CAAA;AAAA,OAEjC,MAAA,IAAA,CAAC,MAAU,IAAA,CAAC,SAAW,EAAA;AAC9B,QAAA,MAAA,CAAO,SAAS,KAAM,CAAA,GAAA;AACtB,QAAA,MAAM,eAAe,MAAO,CAAAA,wCAAA,EAAoB,EAAA,YAAA,CAAa,YAAY,CAAC,CAAA;AAC1E,QAAA,MAAM,YAAe,GAAA,mBAAA,CAAoB,KAAM,CAAA,YAAY,CAAE,CAAA,WAAA;AAC7D,QAAA,MAAM,kBAAkB,mBAAoB,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,WAAW,CAAA;AACxE,QAAA,MAAM,IAAO,GAAAC,gCAAA,CAAa,eAAiB,EAAA,MAAA,CAAO,OAAO,YAAY,CAAA;AAErE,QAAA,MAAM,YAAY,mBAAoB,CAAA,KAAA,CAAM,KAAK,CAAU,MAAA,KAAA,MAAA,CAAO,gBAAgB,IAAI,CAAA;AACtF,QAAI,IAAA,SAAA;AACF,UAAA,qBAAA,CAAsB,UAAU,KAAK,CAAA;AAAA;AAGzC,MAAAC,YAAA,CAAS,MAAM;AACb,QAAA,IAAI,MAAM,QAAY,IAAA,MAAA;AACpB,UAAA,WAAA,CAAY,qBAAsB,CAAA,MAAA,EAAQF,wCAAiB,EAAA,EAAG,QAAU,EAAA,WAAA,CAAY,aAAc,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,KAAK,CAAC,CAAA;AAAA,OAC5H,CAAA;AAAA,KACF,CAAA;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"TreeVirtualizer.cjs","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default?: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":["useSlots","injectTreeRootContext","useParentElement","useCollection","refAutoReset","computed","useVirtualizer","cloneVNode","MAP_KEY_TO_FOCUS_INTENT","getActiveElement","getNextMatch","nextTick"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent, useSlots, computed, cloneVNode, nextTick, createElementBlock, openBlock, normalizeStyle, unref, Fragment, renderList, createBlock, resolveDynamicComponent } from 'vue';
|
|
2
2
|
import { useVirtualizer } from '@tanstack/vue-virtual';
|
|
3
3
|
import { useParentElement, refAutoReset } from '@vueuse/core';
|
|
4
|
-
import { g as getNextMatch } from '../shared/useTypeahead.js';
|
|
5
|
-
import { M as MAP_KEY_TO_FOCUS_INTENT } from '../RovingFocus/utils.js';
|
|
6
4
|
import { u as useCollection } from '../Collection/Collection.js';
|
|
5
|
+
import { M as MAP_KEY_TO_FOCUS_INTENT } from '../RovingFocus/utils.js';
|
|
6
|
+
import { g as getNextMatch } from '../shared/useTypeahead.js';
|
|
7
7
|
import { g as getActiveElement } from '../shared/getActiveElement.js';
|
|
8
8
|
import { i as injectTreeRootContext } from './TreeRoot.js';
|
|
9
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeVirtualizer.js","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { type VirtualItem, type Virtualizer, useVirtualizer } from '@tanstack/vue-virtual'\nimport { type Ref, cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { type FlattenedItem, injectTreeRootContext } from './TreeRoot.vue'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { useCollection } from '@/Collection'\nimport { getActiveElement } from '@/shared'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeVirtualizer.js","sources":["../../src/Tree/TreeVirtualizer.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TreeVirtualizerProps {\n /** Number of items rendered outside the visible area */\n overscan?: number\n /** Estimated size (in px) of each item */\n estimateSize?: number\n /** Text content for each item to achieve type-ahead feature */\n textContent?: (item: Record<string, any>) => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { VirtualItem, Virtualizer } from '@tanstack/vue-virtual'\nimport type { Ref } from 'vue'\nimport type { FlattenedItem } from './TreeRoot.vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { refAutoReset, useParentElement } from '@vueuse/core'\nimport { cloneVNode, computed, nextTick, useSlots } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { MAP_KEY_TO_FOCUS_INTENT } from '@/RovingFocus/utils'\nimport { getActiveElement } from '@/shared'\nimport { getNextMatch } from '@/shared/useTypeahead'\nimport { injectTreeRootContext } from './TreeRoot.vue'\n\nconst props = defineProps<TreeVirtualizerProps>()\n\ndefineSlots<{\n default?: (props: {\n item: FlattenedItem<Record<string, any>>\n virtualizer: Virtualizer<Element | Window, Element>\n virtualItem: VirtualItem\n }) => any\n}>()\n\nconst slots = useSlots()\nconst rootContext = injectTreeRootContext()\nconst parentEl = useParentElement() as Ref<HTMLElement>\nconst { getItems } = useCollection()\n\n// Reset `search` 1 second after it was last updated\nconst search = refAutoReset('', 1000)\nconst optionsWithMetadata = computed(() => {\n const parseTextContent = (option: Record<string, any>) => {\n if (props.textContent)\n return props.textContent(option)\n else\n return option.toString().toLowerCase()\n }\n\n return rootContext.expandedItems.value.map((option, index) => ({\n index,\n textContent: parseTextContent(option.value),\n }))\n})\n\n// set virtual true when this component mounted\nrootContext.isVirtual.value = true\n\nconst padding = computed(() => {\n const el = parentEl.value\n if (!el) {\n return { start: 0, end: 0 }\n }\n else {\n const styles = window.getComputedStyle(el)\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n }\n})\n\nconst virtualizer = useVirtualizer(\n {\n get scrollPaddingStart() { return padding.value.start },\n get scrollPaddingEnd() { return padding.value.end },\n get count() { return rootContext.expandedItems.value.length ?? 0 },\n get horizontal() { return false },\n getItemKey(index) {\n return index + rootContext.getKey(rootContext.expandedItems.value[index].value)\n },\n estimateSize() {\n return props.estimateSize ?? 28\n },\n getScrollElement() { return parentEl.value },\n overscan: props.overscan ?? 12,\n },\n)\n\nconst virtualizedItems = computed(() => virtualizer.value.getVirtualItems().map((item) => {\n return {\n item,\n is: cloneVNode(slots.default!({\n item: rootContext.expandedItems.value[item.index],\n virtualizer: virtualizer.value,\n virtualItem: item,\n })![0], {\n 'data-index': item.index,\n 'style': {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }),\n }\n}))\n\nfunction scrollToIndexAndFocus(index: number) {\n virtualizer.value.scrollToIndex(index, { align: 'start' })\n requestAnimationFrame(() => {\n const item = parentEl.value.querySelector(`[data-index=\"${index}\"]`) as HTMLElement\n if (item instanceof HTMLElement)\n item.focus()\n })\n}\n\nrootContext.virtualKeydownHook.on((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n const isTabKey = event.key === 'Tab' && !isMetaKey\n if (isTabKey)\n return\n\n const intent = MAP_KEY_TO_FOCUS_INTENT[event.key]\n\n if (['first', 'last'].includes(intent)) {\n event.preventDefault()\n\n const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1\n virtualizer.value.scrollToIndex(index)\n requestAnimationFrame(() => {\n const items = getItems()\n const item = intent === 'first' ? items[0] : items[items.length - 1]\n item.ref.focus()\n })\n }\n else if (intent === 'prev' && event.key !== 'ArrowUp') {\n const currentElement = getActiveElement() as HTMLElement\n const currentIndex = Number(currentElement.getAttribute('data-index'))\n const currentLevel = Number(currentElement.getAttribute('data-indent'))\n const list = rootContext.expandedItems.value.slice(0, currentIndex).map((item, index) => ({ ...item, index })).reverse()\n\n const parentItem = list.find(item => item.level === (currentLevel - 1))\n if (parentItem)\n scrollToIndexAndFocus(parentItem.index)\n }\n else if (!intent && !isMetaKey) {\n search.value += event.key\n const currentIndex = Number(getActiveElement()?.getAttribute('data-index'))\n const currentMatch = optionsWithMetadata.value[currentIndex].textContent\n const filteredOptions = optionsWithMetadata.value.map(i => i.textContent)\n const next = getNextMatch(filteredOptions, search.value, currentMatch)\n\n const nextMatch = optionsWithMetadata.value.find(option => option.textContent === next)\n if (nextMatch)\n scrollToIndexAndFocus(nextMatch.index)\n }\n\n nextTick(() => {\n if (event.shiftKey && intent)\n rootContext.handleMultipleReplace(intent, getActiveElement(), getItems, rootContext.expandedItems.value.map(i => i.value))\n })\n})\n</script>\n\n<template>\n <div\n data-reka-virtualizer\n :style=\"{\n position: 'relative',\n width: '100%',\n height: `${virtualizer.getTotalSize()}px`,\n }\"\n >\n <component\n :is=\"is\"\n v-for=\"{ is, item } in virtualizedItems\"\n :key=\"item.key\"\n />\n </div>\n</template>\n"],"names":[],"mappings":"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"}
|
package/dist/Tree/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","sources":["../../src/Tree/utils.ts"],"sourcesContent":["export function flatten<U, T extends { children: any[] }
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../src/Tree/utils.ts"],"sourcesContent":["export function flatten<U, T extends { children: any[] }>(items: T[]): U[] {\n return items.reduce((acc: any[], item: T) => {\n acc.push(item)\n\n if (item.children)\n acc.push(...flatten(item.children))\n\n return acc\n }, [])\n}\n\n// TODO: expose more utility function to handle flattened item\n"],"names":[],"mappings":";;AAAO,SAAS,QAA0C,KAAiB,EAAA;AACzE,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,GAAA,EAAY,IAAY,KAAA;AAC3C,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAEb,IAAA,IAAI,IAAK,CAAA,QAAA;AACP,MAAA,GAAA,CAAI,IAAK,CAAA,GAAG,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAEpC,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACP;;;;"}
|
package/dist/Tree/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/Tree/utils.ts"],"sourcesContent":["export function flatten<U, T extends { children: any[] }
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/Tree/utils.ts"],"sourcesContent":["export function flatten<U, T extends { children: any[] }>(items: T[]): U[] {\n return items.reduce((acc: any[], item: T) => {\n acc.push(item)\n\n if (item.children)\n acc.push(...flatten(item.children))\n\n return acc\n }, [])\n}\n\n// TODO: expose more utility function to handle flattened item\n"],"names":[],"mappings":"AAAO,SAAS,QAA0C,KAAiB,EAAA;AACzE,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,GAAA,EAAY,IAAY,KAAA;AAC3C,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAEb,IAAA,IAAI,IAAK,CAAA,QAAA;AACP,MAAA,GAAA,CAAI,IAAK,CAAA,GAAG,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAEpC,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACP;;;;"}
|