@vuu-ui/vuu-ui-controls 0.0.26
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/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/calendar/Calendar.css.js +6 -0
- package/cjs/calendar/Calendar.css.js.map +1 -0
- package/cjs/calendar/Calendar.js +74 -0
- package/cjs/calendar/Calendar.js.map +1 -0
- package/cjs/calendar/internal/CalendarCarousel.css.js +6 -0
- package/cjs/calendar/internal/CalendarCarousel.css.js.map +1 -0
- package/cjs/calendar/internal/CalendarCarousel.js +97 -0
- package/cjs/calendar/internal/CalendarCarousel.js.map +1 -0
- package/cjs/calendar/internal/CalendarContext.js +19 -0
- package/cjs/calendar/internal/CalendarContext.js.map +1 -0
- package/cjs/calendar/internal/CalendarDay.css.js +6 -0
- package/cjs/calendar/internal/CalendarDay.css.js.map +1 -0
- package/cjs/calendar/internal/CalendarDay.js +83 -0
- package/cjs/calendar/internal/CalendarDay.js.map +1 -0
- package/cjs/calendar/internal/CalendarMonth.css.js +6 -0
- package/cjs/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/cjs/calendar/internal/CalendarMonth.js +73 -0
- package/cjs/calendar/internal/CalendarMonth.js.map +1 -0
- package/cjs/calendar/internal/CalendarNavigation.css.js +6 -0
- package/cjs/calendar/internal/CalendarNavigation.css.js.map +1 -0
- package/cjs/calendar/internal/CalendarNavigation.js +250 -0
- package/cjs/calendar/internal/CalendarNavigation.js.map +1 -0
- package/cjs/calendar/internal/CalendarWeekHeader.css.js +6 -0
- package/cjs/calendar/internal/CalendarWeekHeader.css.js.map +1 -0
- package/cjs/calendar/internal/CalendarWeekHeader.js +43 -0
- package/cjs/calendar/internal/CalendarWeekHeader.js.map +1 -0
- package/cjs/calendar/internal/useFocusManagement.js +63 -0
- package/cjs/calendar/internal/useFocusManagement.js.map +1 -0
- package/cjs/calendar/internal/utils.js +63 -0
- package/cjs/calendar/internal/utils.js.map +1 -0
- package/cjs/calendar/useCalendar.js +131 -0
- package/cjs/calendar/useCalendar.js.map +1 -0
- package/cjs/calendar/useCalendarDay.js +70 -0
- package/cjs/calendar/useCalendarDay.js.map +1 -0
- package/cjs/calendar/useSelection.js +242 -0
- package/cjs/calendar/useSelection.js.map +1 -0
- package/cjs/combo-box/ComboBox.js +191 -0
- package/cjs/combo-box/ComboBox.js.map +1 -0
- package/cjs/combo-box/useCombobox.js +358 -0
- package/cjs/combo-box/useCombobox.js.map +1 -0
- package/cjs/common-hooks/collectionProvider.js +24 -0
- package/cjs/common-hooks/collectionProvider.js.map +1 -0
- package/cjs/common-hooks/isPlainObject.js +6 -0
- package/cjs/common-hooks/isPlainObject.js.map +1 -0
- package/cjs/common-hooks/itemToString.js +24 -0
- package/cjs/common-hooks/itemToString.js.map +1 -0
- package/cjs/common-hooks/selectionTypes.js +18 -0
- package/cjs/common-hooks/selectionTypes.js.map +1 -0
- package/cjs/common-hooks/use-resize-observer.js +123 -0
- package/cjs/common-hooks/use-resize-observer.js.map +1 -0
- package/cjs/common-hooks/useCollectionItems.js +309 -0
- package/cjs/common-hooks/useCollectionItems.js.map +1 -0
- package/cjs/common-hooks/useControlled.js +58 -0
- package/cjs/common-hooks/useControlled.js.map +1 -0
- package/cjs/common-hooks/useSelection.js +212 -0
- package/cjs/common-hooks/useSelection.js.map +1 -0
- package/cjs/common-hooks/useStateRef.js +23 -0
- package/cjs/common-hooks/useStateRef.js.map +1 -0
- package/cjs/cycle-state-button/CycleStateButton.js +54 -0
- package/cjs/cycle-state-button/CycleStateButton.js.map +1 -0
- package/cjs/date-input/DateInput.css.js +6 -0
- package/cjs/date-input/DateInput.css.js.map +1 -0
- package/cjs/date-input/DateInput.js +90 -0
- package/cjs/date-input/DateInput.js.map +1 -0
- package/cjs/date-input/DateRangeInput.js +77 -0
- package/cjs/date-input/DateRangeInput.js.map +1 -0
- package/cjs/date-input/useDatePicker.js +20 -0
- package/cjs/date-input/useDatePicker.js.map +1 -0
- package/cjs/date-popup/DatePopup.js +90 -0
- package/cjs/date-popup/DatePopup.js.map +1 -0
- package/cjs/date-popup/useDatePopup.js +77 -0
- package/cjs/date-popup/useDatePopup.js.map +1 -0
- package/cjs/drag-drop/DragDropProvider.js +145 -0
- package/cjs/drag-drop/DragDropProvider.js.map +1 -0
- package/cjs/drag-drop/DragDropState.js +29 -0
- package/cjs/drag-drop/DragDropState.js.map +1 -0
- package/cjs/drag-drop/Draggable.css.js +6 -0
- package/cjs/drag-drop/Draggable.css.js.map +1 -0
- package/cjs/drag-drop/Draggable.js +95 -0
- package/cjs/drag-drop/Draggable.js.map +1 -0
- package/cjs/drag-drop/dragDropTypes.js +8 -0
- package/cjs/drag-drop/dragDropTypes.js.map +1 -0
- package/cjs/drag-drop/drop-target-utils.js +245 -0
- package/cjs/drag-drop/drop-target-utils.js.map +1 -0
- package/cjs/drag-drop/useAutoScroll.js +71 -0
- package/cjs/drag-drop/useAutoScroll.js.map +1 -0
- package/cjs/drag-drop/useDragDisplacers.js +160 -0
- package/cjs/drag-drop/useDragDisplacers.js.map +1 -0
- package/cjs/drag-drop/useDragDrop.js +499 -0
- package/cjs/drag-drop/useDragDrop.js.map +1 -0
- package/cjs/drag-drop/useDragDropCopy.js +34 -0
- package/cjs/drag-drop/useDragDropCopy.js.map +1 -0
- package/cjs/drag-drop/useDragDropIndicator.js +251 -0
- package/cjs/drag-drop/useDragDropIndicator.js.map +1 -0
- package/cjs/drag-drop/useDragDropNaturalMovement.js +264 -0
- package/cjs/drag-drop/useDragDropNaturalMovement.js.map +1 -0
- package/cjs/drag-drop/useDropIndicator.js +27 -0
- package/cjs/drag-drop/useDropIndicator.js.map +1 -0
- package/cjs/drag-drop/useGlobalDragDrop.js +89 -0
- package/cjs/drag-drop/useGlobalDragDrop.js.map +1 -0
- package/cjs/dropdown/Dropdown.css.js +6 -0
- package/cjs/dropdown/Dropdown.css.js.map +1 -0
- package/cjs/dropdown/Dropdown.js +150 -0
- package/cjs/dropdown/Dropdown.js.map +1 -0
- package/cjs/dropdown/DropdownBase.js +121 -0
- package/cjs/dropdown/DropdownBase.js.map +1 -0
- package/cjs/dropdown/DropdownButton.css.js +6 -0
- package/cjs/dropdown/DropdownButton.css.js.map +1 -0
- package/cjs/dropdown/DropdownButton.js +72 -0
- package/cjs/dropdown/DropdownButton.js.map +1 -0
- package/cjs/dropdown/useClickAway.js +67 -0
- package/cjs/dropdown/useClickAway.js.map +1 -0
- package/cjs/dropdown/useDropdown.js +115 -0
- package/cjs/dropdown/useDropdown.js.map +1 -0
- package/cjs/dropdown/useDropdownBase.js +169 -0
- package/cjs/dropdown/useDropdownBase.js.map +1 -0
- package/cjs/editable/editable-utils.js +37 -0
- package/cjs/editable/editable-utils.js.map +1 -0
- package/cjs/editable/useEditableText.js +106 -0
- package/cjs/editable/useEditableText.js.map +1 -0
- package/cjs/editable-label/EditableLabel.css.js +6 -0
- package/cjs/editable-label/EditableLabel.css.js.map +1 -0
- package/cjs/editable-label/EditableLabel.js +138 -0
- package/cjs/editable-label/EditableLabel.js.map +1 -0
- package/cjs/expando-input/ExpandoInput.css.js +6 -0
- package/cjs/expando-input/ExpandoInput.css.js.map +1 -0
- package/cjs/expando-input/ExpandoInput.js +53 -0
- package/cjs/expando-input/ExpandoInput.js.map +1 -0
- package/cjs/icon-button/Icon.css.js +6 -0
- package/cjs/icon-button/Icon.css.js.map +1 -0
- package/cjs/icon-button/Icon.js +37 -0
- package/cjs/icon-button/Icon.js.map +1 -0
- package/cjs/icon-button/IconButton.css.js +6 -0
- package/cjs/icon-button/IconButton.css.js.map +1 -0
- package/cjs/icon-button/IconButton.js +26 -0
- package/cjs/icon-button/IconButton.js.map +1 -0
- package/cjs/index.js +231 -0
- package/cjs/index.js.map +1 -0
- package/cjs/inputs/Checkbox.css.js +6 -0
- package/cjs/inputs/Checkbox.css.js.map +1 -0
- package/cjs/inputs/Checkbox.js +32 -0
- package/cjs/inputs/Checkbox.js.map +1 -0
- package/cjs/inputs/RadioButton.css.js +6 -0
- package/cjs/inputs/RadioButton.css.js.map +1 -0
- package/cjs/inputs/RadioButton.js +39 -0
- package/cjs/inputs/RadioButton.js.map +1 -0
- package/cjs/instrument-picker/InstrumentPicker.css.js +6 -0
- package/cjs/instrument-picker/InstrumentPicker.css.js.map +1 -0
- package/cjs/instrument-picker/InstrumentPicker.js +113 -0
- package/cjs/instrument-picker/InstrumentPicker.js.map +1 -0
- package/cjs/instrument-picker/SearchCell.css.js +6 -0
- package/cjs/instrument-picker/SearchCell.css.js.map +1 -0
- package/cjs/instrument-picker/SearchCell.js +33 -0
- package/cjs/instrument-picker/SearchCell.js.map +1 -0
- package/cjs/instrument-picker/useInstrumentPicker.js +87 -0
- package/cjs/instrument-picker/useInstrumentPicker.js.map +1 -0
- package/cjs/instrument-search/InstrumentSearch.css.js +6 -0
- package/cjs/instrument-search/InstrumentSearch.css.js.map +1 -0
- package/cjs/instrument-search/InstrumentSearch.js +96 -0
- package/cjs/instrument-search/InstrumentSearch.js.map +1 -0
- package/cjs/instrument-search/SearchCell.css.js +6 -0
- package/cjs/instrument-search/SearchCell.css.js.map +1 -0
- package/cjs/instrument-search/SearchCell.js +33 -0
- package/cjs/instrument-search/SearchCell.js.map +1 -0
- package/cjs/instrument-search/useInstrumentSearch.js +39 -0
- package/cjs/instrument-search/useInstrumentSearch.js.map +1 -0
- package/cjs/list/CheckboxIcon.css.js +6 -0
- package/cjs/list/CheckboxIcon.css.js.map +1 -0
- package/cjs/list/CheckboxIcon.js +33 -0
- package/cjs/list/CheckboxIcon.js.map +1 -0
- package/cjs/list/ChevronIcon.css.js +6 -0
- package/cjs/list/ChevronIcon.css.js.map +1 -0
- package/cjs/list/ChevronIcon.js +22 -0
- package/cjs/list/ChevronIcon.js.map +1 -0
- package/cjs/list/Highlighter.css.js +6 -0
- package/cjs/list/Highlighter.css.js.map +1 -0
- package/cjs/list/Highlighter.js +36 -0
- package/cjs/list/Highlighter.js.map +1 -0
- package/cjs/list/List.css.js +6 -0
- package/cjs/list/List.css.js.map +1 -0
- package/cjs/list/List.js +317 -0
- package/cjs/list/List.js.map +1 -0
- package/cjs/list/ListItem.css.js +6 -0
- package/cjs/list/ListItem.css.js.map +1 -0
- package/cjs/list/ListItem.js +84 -0
- package/cjs/list/ListItem.js.map +1 -0
- package/cjs/list/ListItemGroup.js +6 -0
- package/cjs/list/ListItemGroup.js.map +1 -0
- package/cjs/list/ListItemHeader.js +6 -0
- package/cjs/list/ListItemHeader.js.map +1 -0
- package/cjs/list/RadioIcon.css.js +6 -0
- package/cjs/list/RadioIcon.css.js.map +1 -0
- package/cjs/list/RadioIcon.js +27 -0
- package/cjs/list/RadioIcon.js.map +1 -0
- package/cjs/list/common-hooks/keyUtils.js +78 -0
- package/cjs/list/common-hooks/keyUtils.js.map +1 -0
- package/cjs/list/common-hooks/list-dom-utils.js +25 -0
- package/cjs/list/common-hooks/list-dom-utils.js.map +1 -0
- package/cjs/list/common-hooks/useCollapsibleGroups.js +82 -0
- package/cjs/list/common-hooks/useCollapsibleGroups.js.map +1 -0
- package/cjs/list/common-hooks/useImperativeScrollingAPI.js +52 -0
- package/cjs/list/common-hooks/useImperativeScrollingAPI.js.map +1 -0
- package/cjs/list/common-hooks/useKeyboardNavigation.js +289 -0
- package/cjs/list/common-hooks/useKeyboardNavigation.js.map +1 -0
- package/cjs/list/common-hooks/useTypeahead.js +74 -0
- package/cjs/list/common-hooks/useTypeahead.js.map +1 -0
- package/cjs/list/common-hooks/useViewportTracking.js +133 -0
- package/cjs/list/common-hooks/useViewportTracking.js.map +1 -0
- package/cjs/list/common-hooks/utils/collection-item-utils.js +181 -0
- package/cjs/list/common-hooks/utils/collection-item-utils.js.map +1 -0
- package/cjs/list/common-hooks/utils/filter-utils.js +11 -0
- package/cjs/list/common-hooks/utils/filter-utils.js.map +1 -0
- package/cjs/list/common-hooks/utils/isSelected.js +9 -0
- package/cjs/list/common-hooks/utils/isSelected.js.map +1 -0
- package/cjs/list/useList.js +278 -0
- package/cjs/list/useList.js.map +1 -0
- package/cjs/list/useListDrop.js +92 -0
- package/cjs/list/useListDrop.js.map +1 -0
- package/cjs/list/useListHeight.js +77 -0
- package/cjs/list/useListHeight.js.map +1 -0
- package/cjs/list/useScrollPosition.js +74 -0
- package/cjs/list/useScrollPosition.js.map +1 -0
- package/cjs/measured-container/MeasuredContainer.css.js +6 -0
- package/cjs/measured-container/MeasuredContainer.css.js.map +1 -0
- package/cjs/measured-container/MeasuredContainer.js +69 -0
- package/cjs/measured-container/MeasuredContainer.js.map +1 -0
- package/cjs/measured-container/useMeasuredContainer.js +127 -0
- package/cjs/measured-container/useMeasuredContainer.js.map +1 -0
- package/cjs/measured-container/useResizeObserver.js +130 -0
- package/cjs/measured-container/useResizeObserver.js.map +1 -0
- package/cjs/overflow-container/OverflowContainer.css.js +6 -0
- package/cjs/overflow-container/OverflowContainer.css.js.map +1 -0
- package/cjs/overflow-container/OverflowContainer.js +142 -0
- package/cjs/overflow-container/OverflowContainer.js.map +1 -0
- package/cjs/overflow-container/overflow-utils.js +286 -0
- package/cjs/overflow-container/overflow-utils.js.map +1 -0
- package/cjs/overflow-container/useOverflowContainer.js +143 -0
- package/cjs/overflow-container/useOverflowContainer.js.map +1 -0
- package/cjs/price-ticker/PriceTicker.css.js +6 -0
- package/cjs/price-ticker/PriceTicker.css.js.map +1 -0
- package/cjs/price-ticker/PriceTicker.js +50 -0
- package/cjs/price-ticker/PriceTicker.js.map +1 -0
- package/cjs/split-button/SplitButton.css.js +6 -0
- package/cjs/split-button/SplitButton.css.js.map +1 -0
- package/cjs/split-button/SplitButton.js +81 -0
- package/cjs/split-button/SplitButton.js.map +1 -0
- package/cjs/split-button/SplitStateButton.css.js +6 -0
- package/cjs/split-button/SplitStateButton.css.js.map +1 -0
- package/cjs/split-button/SplitStateButton.js +31 -0
- package/cjs/split-button/SplitStateButton.js.map +1 -0
- package/cjs/split-button/useSplitButton.js +84 -0
- package/cjs/split-button/useSplitButton.js.map +1 -0
- package/cjs/tabstrip/Tab.css.js +6 -0
- package/cjs/tabstrip/Tab.css.js.map +1 -0
- package/cjs/tabstrip/Tab.js +151 -0
- package/cjs/tabstrip/Tab.js.map +1 -0
- package/cjs/tabstrip/TabMenu.css.js +6 -0
- package/cjs/tabstrip/TabMenu.css.js.map +1 -0
- package/cjs/tabstrip/TabMenu.js +72 -0
- package/cjs/tabstrip/TabMenu.js.map +1 -0
- package/cjs/tabstrip/TabMenuOptions.js +20 -0
- package/cjs/tabstrip/TabMenuOptions.js.map +1 -0
- package/cjs/tabstrip/Tabstrip.css.js +6 -0
- package/cjs/tabstrip/Tabstrip.css.js.map +1 -0
- package/cjs/tabstrip/Tabstrip.js +156 -0
- package/cjs/tabstrip/Tabstrip.js.map +1 -0
- package/cjs/tabstrip/tabstrip-dom-utils.js +19 -0
- package/cjs/tabstrip/tabstrip-dom-utils.js.map +1 -0
- package/cjs/tabstrip/useAnimatedSelectionThumb.js +85 -0
- package/cjs/tabstrip/useAnimatedSelectionThumb.js.map +1 -0
- package/cjs/tabstrip/useKeyboardNavigation.js +243 -0
- package/cjs/tabstrip/useKeyboardNavigation.js.map +1 -0
- package/cjs/tabstrip/useSelection.js +60 -0
- package/cjs/tabstrip/useSelection.js.map +1 -0
- package/cjs/tabstrip/useTabstrip.js +261 -0
- package/cjs/tabstrip/useTabstrip.js.map +1 -0
- package/cjs/toolbar/Toolbar.css.js +6 -0
- package/cjs/toolbar/Toolbar.css.js.map +1 -0
- package/cjs/toolbar/Toolbar.js +90 -0
- package/cjs/toolbar/Toolbar.js.map +1 -0
- package/cjs/toolbar/toolbar-dom-utils.js +18 -0
- package/cjs/toolbar/toolbar-dom-utils.js.map +1 -0
- package/cjs/toolbar/useKeyboardNavigation.js +305 -0
- package/cjs/toolbar/useKeyboardNavigation.js.map +1 -0
- package/cjs/toolbar/useSelection.js +94 -0
- package/cjs/toolbar/useSelection.js.map +1 -0
- package/cjs/toolbar/useToolbar.js +100 -0
- package/cjs/toolbar/useToolbar.js.map +1 -0
- package/cjs/tree/Tree.css.js +6 -0
- package/cjs/tree/Tree.css.js.map +1 -0
- package/cjs/tree/Tree.js +179 -0
- package/cjs/tree/Tree.js.map +1 -0
- package/cjs/tree/hierarchical-data-utils.js +72 -0
- package/cjs/tree/hierarchical-data-utils.js.map +1 -0
- package/cjs/tree/key-code.js +62 -0
- package/cjs/tree/key-code.js.map +1 -0
- package/cjs/tree/list-dom-utils.js +19 -0
- package/cjs/tree/list-dom-utils.js.map +1 -0
- package/cjs/tree/treeTypeUtils.js +6 -0
- package/cjs/tree/treeTypeUtils.js.map +1 -0
- package/cjs/tree/use-collapsible-groups.js +85 -0
- package/cjs/tree/use-collapsible-groups.js.map +1 -0
- package/cjs/tree/use-hierarchical-data.js +51 -0
- package/cjs/tree/use-hierarchical-data.js.map +1 -0
- package/cjs/tree/use-items-with-ids.js +100 -0
- package/cjs/tree/use-items-with-ids.js.map +1 -0
- package/cjs/tree/use-keyboard-navigation.js +144 -0
- package/cjs/tree/use-keyboard-navigation.js.map +1 -0
- package/cjs/tree/use-selection.js +154 -0
- package/cjs/tree/use-selection.js.map +1 -0
- package/cjs/tree/use-tree-keyboard-navigation.js +41 -0
- package/cjs/tree/use-tree-keyboard-navigation.js.map +1 -0
- package/cjs/tree/use-viewport-tracking.js +76 -0
- package/cjs/tree/use-viewport-tracking.js.map +1 -0
- package/cjs/tree/useTree.js +106 -0
- package/cjs/tree/useTree.js.map +1 -0
- package/cjs/utils/escapeRegExp.js +9 -0
- package/cjs/utils/escapeRegExp.js.map +1 -0
- package/cjs/utils/forwardCallbackProps.js +22 -0
- package/cjs/utils/forwardCallbackProps.js.map +1 -0
- package/cjs/utils/isOverflowElement.js +8 -0
- package/cjs/utils/isOverflowElement.js.map +1 -0
- package/cjs/vuu-input/VuuInput.css.js +6 -0
- package/cjs/vuu-input/VuuInput.css.js.map +1 -0
- package/cjs/vuu-input/VuuInput.js +105 -0
- package/cjs/vuu-input/VuuInput.js.map +1 -0
- package/esm/calendar/Calendar.css.js +4 -0
- package/esm/calendar/Calendar.css.js.map +1 -0
- package/esm/calendar/Calendar.js +72 -0
- package/esm/calendar/Calendar.js.map +1 -0
- package/esm/calendar/internal/CalendarCarousel.css.js +4 -0
- package/esm/calendar/internal/CalendarCarousel.css.js.map +1 -0
- package/esm/calendar/internal/CalendarCarousel.js +95 -0
- package/esm/calendar/internal/CalendarCarousel.js.map +1 -0
- package/esm/calendar/internal/CalendarContext.js +16 -0
- package/esm/calendar/internal/CalendarContext.js.map +1 -0
- package/esm/calendar/internal/CalendarDay.css.js +4 -0
- package/esm/calendar/internal/CalendarDay.css.js.map +1 -0
- package/esm/calendar/internal/CalendarDay.js +81 -0
- package/esm/calendar/internal/CalendarDay.js.map +1 -0
- package/esm/calendar/internal/CalendarMonth.css.js +4 -0
- package/esm/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/esm/calendar/internal/CalendarMonth.js +71 -0
- package/esm/calendar/internal/CalendarMonth.js.map +1 -0
- package/esm/calendar/internal/CalendarNavigation.css.js +4 -0
- package/esm/calendar/internal/CalendarNavigation.css.js.map +1 -0
- package/esm/calendar/internal/CalendarNavigation.js +248 -0
- package/esm/calendar/internal/CalendarNavigation.js.map +1 -0
- package/esm/calendar/internal/CalendarWeekHeader.css.js +4 -0
- package/esm/calendar/internal/CalendarWeekHeader.css.js.map +1 -0
- package/esm/calendar/internal/CalendarWeekHeader.js +41 -0
- package/esm/calendar/internal/CalendarWeekHeader.js.map +1 -0
- package/esm/calendar/internal/useFocusManagement.js +61 -0
- package/esm/calendar/internal/useFocusManagement.js.map +1 -0
- package/esm/calendar/internal/utils.js +55 -0
- package/esm/calendar/internal/utils.js.map +1 -0
- package/esm/calendar/useCalendar.js +129 -0
- package/esm/calendar/useCalendar.js.map +1 -0
- package/esm/calendar/useCalendarDay.js +68 -0
- package/esm/calendar/useCalendarDay.js.map +1 -0
- package/esm/calendar/useSelection.js +239 -0
- package/esm/calendar/useSelection.js.map +1 -0
- package/esm/combo-box/ComboBox.js +189 -0
- package/esm/combo-box/ComboBox.js.map +1 -0
- package/esm/combo-box/useCombobox.js +356 -0
- package/esm/combo-box/useCombobox.js.map +1 -0
- package/esm/common-hooks/collectionProvider.js +20 -0
- package/esm/common-hooks/collectionProvider.js.map +1 -0
- package/esm/common-hooks/isPlainObject.js +4 -0
- package/esm/common-hooks/isPlainObject.js.map +1 -0
- package/esm/common-hooks/itemToString.js +22 -0
- package/esm/common-hooks/itemToString.js.map +1 -0
- package/esm/common-hooks/selectionTypes.js +10 -0
- package/esm/common-hooks/selectionTypes.js.map +1 -0
- package/esm/common-hooks/use-resize-observer.js +118 -0
- package/esm/common-hooks/use-resize-observer.js.map +1 -0
- package/esm/common-hooks/useCollectionItems.js +307 -0
- package/esm/common-hooks/useCollectionItems.js.map +1 -0
- package/esm/common-hooks/useControlled.js +56 -0
- package/esm/common-hooks/useControlled.js.map +1 -0
- package/esm/common-hooks/useSelection.js +205 -0
- package/esm/common-hooks/useSelection.js.map +1 -0
- package/esm/common-hooks/useStateRef.js +21 -0
- package/esm/common-hooks/useStateRef.js.map +1 -0
- package/esm/cycle-state-button/CycleStateButton.js +52 -0
- package/esm/cycle-state-button/CycleStateButton.js.map +1 -0
- package/esm/date-input/DateInput.css.js +4 -0
- package/esm/date-input/DateInput.css.js.map +1 -0
- package/esm/date-input/DateInput.js +88 -0
- package/esm/date-input/DateInput.js.map +1 -0
- package/esm/date-input/DateRangeInput.js +75 -0
- package/esm/date-input/DateRangeInput.js.map +1 -0
- package/esm/date-input/useDatePicker.js +18 -0
- package/esm/date-input/useDatePicker.js.map +1 -0
- package/esm/date-popup/DatePopup.js +88 -0
- package/esm/date-popup/DatePopup.js.map +1 -0
- package/esm/date-popup/useDatePopup.js +75 -0
- package/esm/date-popup/useDatePopup.js.map +1 -0
- package/esm/drag-drop/DragDropProvider.js +142 -0
- package/esm/drag-drop/DragDropProvider.js.map +1 -0
- package/esm/drag-drop/DragDropState.js +27 -0
- package/esm/drag-drop/DragDropState.js.map +1 -0
- package/esm/drag-drop/Draggable.css.js +4 -0
- package/esm/drag-drop/Draggable.css.js.map +1 -0
- package/esm/drag-drop/Draggable.js +90 -0
- package/esm/drag-drop/Draggable.js.map +1 -0
- package/esm/drag-drop/dragDropTypes.js +5 -0
- package/esm/drag-drop/dragDropTypes.js.map +1 -0
- package/esm/drag-drop/drop-target-utils.js +228 -0
- package/esm/drag-drop/drop-target-utils.js.map +1 -0
- package/esm/drag-drop/useAutoScroll.js +69 -0
- package/esm/drag-drop/useAutoScroll.js.map +1 -0
- package/esm/drag-drop/useDragDisplacers.js +158 -0
- package/esm/drag-drop/useDragDisplacers.js.map +1 -0
- package/esm/drag-drop/useDragDrop.js +497 -0
- package/esm/drag-drop/useDragDrop.js.map +1 -0
- package/esm/drag-drop/useDragDropCopy.js +31 -0
- package/esm/drag-drop/useDragDropCopy.js.map +1 -0
- package/esm/drag-drop/useDragDropIndicator.js +249 -0
- package/esm/drag-drop/useDragDropIndicator.js.map +1 -0
- package/esm/drag-drop/useDragDropNaturalMovement.js +262 -0
- package/esm/drag-drop/useDragDropNaturalMovement.js.map +1 -0
- package/esm/drag-drop/useDropIndicator.js +25 -0
- package/esm/drag-drop/useDropIndicator.js.map +1 -0
- package/esm/drag-drop/useGlobalDragDrop.js +87 -0
- package/esm/drag-drop/useGlobalDragDrop.js.map +1 -0
- package/esm/dropdown/Dropdown.css.js +4 -0
- package/esm/dropdown/Dropdown.css.js.map +1 -0
- package/esm/dropdown/Dropdown.js +148 -0
- package/esm/dropdown/Dropdown.js.map +1 -0
- package/esm/dropdown/DropdownBase.js +119 -0
- package/esm/dropdown/DropdownBase.js.map +1 -0
- package/esm/dropdown/DropdownButton.css.js +4 -0
- package/esm/dropdown/DropdownButton.css.js.map +1 -0
- package/esm/dropdown/DropdownButton.js +70 -0
- package/esm/dropdown/DropdownButton.js.map +1 -0
- package/esm/dropdown/useClickAway.js +64 -0
- package/esm/dropdown/useClickAway.js.map +1 -0
- package/esm/dropdown/useDropdown.js +113 -0
- package/esm/dropdown/useDropdown.js.map +1 -0
- package/esm/dropdown/useDropdownBase.js +167 -0
- package/esm/dropdown/useDropdownBase.js.map +1 -0
- package/esm/editable/editable-utils.js +35 -0
- package/esm/editable/editable-utils.js.map +1 -0
- package/esm/editable/useEditableText.js +103 -0
- package/esm/editable/useEditableText.js.map +1 -0
- package/esm/editable-label/EditableLabel.css.js +4 -0
- package/esm/editable-label/EditableLabel.css.js.map +1 -0
- package/esm/editable-label/EditableLabel.js +135 -0
- package/esm/editable-label/EditableLabel.js.map +1 -0
- package/esm/expando-input/ExpandoInput.css.js +4 -0
- package/esm/expando-input/ExpandoInput.css.js.map +1 -0
- package/esm/expando-input/ExpandoInput.js +51 -0
- package/esm/expando-input/ExpandoInput.js.map +1 -0
- package/esm/icon-button/Icon.css.js +4 -0
- package/esm/icon-button/Icon.css.js.map +1 -0
- package/esm/icon-button/Icon.js +35 -0
- package/esm/icon-button/Icon.js.map +1 -0
- package/esm/icon-button/IconButton.css.js +4 -0
- package/esm/icon-button/IconButton.css.js.map +1 -0
- package/esm/icon-button/IconButton.js +24 -0
- package/esm/icon-button/IconButton.js.map +1 -0
- package/esm/index.js +73 -0
- package/esm/index.js.map +1 -0
- package/esm/inputs/Checkbox.css.js +4 -0
- package/esm/inputs/Checkbox.css.js.map +1 -0
- package/esm/inputs/Checkbox.js +30 -0
- package/esm/inputs/Checkbox.js.map +1 -0
- package/esm/inputs/RadioButton.css.js +4 -0
- package/esm/inputs/RadioButton.css.js.map +1 -0
- package/esm/inputs/RadioButton.js +37 -0
- package/esm/inputs/RadioButton.js.map +1 -0
- package/esm/instrument-picker/InstrumentPicker.css.js +4 -0
- package/esm/instrument-picker/InstrumentPicker.css.js.map +1 -0
- package/esm/instrument-picker/InstrumentPicker.js +111 -0
- package/esm/instrument-picker/InstrumentPicker.js.map +1 -0
- package/esm/instrument-picker/SearchCell.css.js +4 -0
- package/esm/instrument-picker/SearchCell.css.js.map +1 -0
- package/esm/instrument-picker/SearchCell.js +31 -0
- package/esm/instrument-picker/SearchCell.js.map +1 -0
- package/esm/instrument-picker/useInstrumentPicker.js +85 -0
- package/esm/instrument-picker/useInstrumentPicker.js.map +1 -0
- package/esm/instrument-search/InstrumentSearch.css.js +4 -0
- package/esm/instrument-search/InstrumentSearch.css.js.map +1 -0
- package/esm/instrument-search/InstrumentSearch.js +94 -0
- package/esm/instrument-search/InstrumentSearch.js.map +1 -0
- package/esm/instrument-search/SearchCell.css.js +4 -0
- package/esm/instrument-search/SearchCell.css.js.map +1 -0
- package/esm/instrument-search/SearchCell.js +31 -0
- package/esm/instrument-search/SearchCell.js.map +1 -0
- package/esm/instrument-search/useInstrumentSearch.js +37 -0
- package/esm/instrument-search/useInstrumentSearch.js.map +1 -0
- package/esm/list/CheckboxIcon.css.js +4 -0
- package/esm/list/CheckboxIcon.css.js.map +1 -0
- package/esm/list/CheckboxIcon.js +31 -0
- package/esm/list/CheckboxIcon.js.map +1 -0
- package/esm/list/ChevronIcon.css.js +4 -0
- package/esm/list/ChevronIcon.css.js.map +1 -0
- package/esm/list/ChevronIcon.js +20 -0
- package/esm/list/ChevronIcon.js.map +1 -0
- package/esm/list/Highlighter.css.js +4 -0
- package/esm/list/Highlighter.css.js.map +1 -0
- package/esm/list/Highlighter.js +34 -0
- package/esm/list/Highlighter.js.map +1 -0
- package/esm/list/List.css.js +4 -0
- package/esm/list/List.css.js.map +1 -0
- package/esm/list/List.js +315 -0
- package/esm/list/List.js.map +1 -0
- package/esm/list/ListItem.css.js +4 -0
- package/esm/list/ListItem.css.js.map +1 -0
- package/esm/list/ListItem.js +81 -0
- package/esm/list/ListItem.js.map +1 -0
- package/esm/list/ListItemGroup.js +4 -0
- package/esm/list/ListItemGroup.js.map +1 -0
- package/esm/list/ListItemHeader.js +4 -0
- package/esm/list/ListItemHeader.js.map +1 -0
- package/esm/list/RadioIcon.css.js +4 -0
- package/esm/list/RadioIcon.css.js.map +1 -0
- package/esm/list/RadioIcon.js +25 -0
- package/esm/list/RadioIcon.js.map +1 -0
- package/esm/list/common-hooks/keyUtils.js +64 -0
- package/esm/list/common-hooks/keyUtils.js.map +1 -0
- package/esm/list/common-hooks/list-dom-utils.js +19 -0
- package/esm/list/common-hooks/list-dom-utils.js.map +1 -0
- package/esm/list/common-hooks/useCollapsibleGroups.js +80 -0
- package/esm/list/common-hooks/useCollapsibleGroups.js.map +1 -0
- package/esm/list/common-hooks/useImperativeScrollingAPI.js +50 -0
- package/esm/list/common-hooks/useImperativeScrollingAPI.js.map +1 -0
- package/esm/list/common-hooks/useKeyboardNavigation.js +286 -0
- package/esm/list/common-hooks/useKeyboardNavigation.js.map +1 -0
- package/esm/list/common-hooks/useTypeahead.js +72 -0
- package/esm/list/common-hooks/useTypeahead.js.map +1 -0
- package/esm/list/common-hooks/useViewportTracking.js +131 -0
- package/esm/list/common-hooks/useViewportTracking.js.map +1 -0
- package/esm/list/common-hooks/utils/collection-item-utils.js +167 -0
- package/esm/list/common-hooks/utils/collection-item-utils.js.map +1 -0
- package/esm/list/common-hooks/utils/filter-utils.js +8 -0
- package/esm/list/common-hooks/utils/filter-utils.js.map +1 -0
- package/esm/list/common-hooks/utils/isSelected.js +7 -0
- package/esm/list/common-hooks/utils/isSelected.js.map +1 -0
- package/esm/list/useList.js +276 -0
- package/esm/list/useList.js.map +1 -0
- package/esm/list/useListDrop.js +90 -0
- package/esm/list/useListDrop.js.map +1 -0
- package/esm/list/useListHeight.js +75 -0
- package/esm/list/useListHeight.js.map +1 -0
- package/esm/list/useScrollPosition.js +72 -0
- package/esm/list/useScrollPosition.js.map +1 -0
- package/esm/measured-container/MeasuredContainer.css.js +4 -0
- package/esm/measured-container/MeasuredContainer.css.js.map +1 -0
- package/esm/measured-container/MeasuredContainer.js +67 -0
- package/esm/measured-container/MeasuredContainer.js.map +1 -0
- package/esm/measured-container/useMeasuredContainer.js +125 -0
- package/esm/measured-container/useMeasuredContainer.js.map +1 -0
- package/esm/measured-container/useResizeObserver.js +128 -0
- package/esm/measured-container/useResizeObserver.js.map +1 -0
- package/esm/overflow-container/OverflowContainer.css.js +4 -0
- package/esm/overflow-container/OverflowContainer.css.js.map +1 -0
- package/esm/overflow-container/OverflowContainer.js +140 -0
- package/esm/overflow-container/OverflowContainer.js.map +1 -0
- package/esm/overflow-container/overflow-utils.js +272 -0
- package/esm/overflow-container/overflow-utils.js.map +1 -0
- package/esm/overflow-container/useOverflowContainer.js +141 -0
- package/esm/overflow-container/useOverflowContainer.js.map +1 -0
- package/esm/price-ticker/PriceTicker.css.js +4 -0
- package/esm/price-ticker/PriceTicker.css.js.map +1 -0
- package/esm/price-ticker/PriceTicker.js +48 -0
- package/esm/price-ticker/PriceTicker.js.map +1 -0
- package/esm/split-button/SplitButton.css.js +4 -0
- package/esm/split-button/SplitButton.css.js.map +1 -0
- package/esm/split-button/SplitButton.js +79 -0
- package/esm/split-button/SplitButton.js.map +1 -0
- package/esm/split-button/SplitStateButton.css.js +4 -0
- package/esm/split-button/SplitStateButton.css.js.map +1 -0
- package/esm/split-button/SplitStateButton.js +29 -0
- package/esm/split-button/SplitStateButton.js.map +1 -0
- package/esm/split-button/useSplitButton.js +82 -0
- package/esm/split-button/useSplitButton.js.map +1 -0
- package/esm/tabstrip/Tab.css.js +4 -0
- package/esm/tabstrip/Tab.css.js.map +1 -0
- package/esm/tabstrip/Tab.js +149 -0
- package/esm/tabstrip/Tab.js.map +1 -0
- package/esm/tabstrip/TabMenu.css.js +4 -0
- package/esm/tabstrip/TabMenu.css.js.map +1 -0
- package/esm/tabstrip/TabMenu.js +70 -0
- package/esm/tabstrip/TabMenu.js.map +1 -0
- package/esm/tabstrip/TabMenuOptions.js +16 -0
- package/esm/tabstrip/TabMenuOptions.js.map +1 -0
- package/esm/tabstrip/Tabstrip.css.js +4 -0
- package/esm/tabstrip/Tabstrip.css.js.map +1 -0
- package/esm/tabstrip/Tabstrip.js +154 -0
- package/esm/tabstrip/Tabstrip.js.map +1 -0
- package/esm/tabstrip/tabstrip-dom-utils.js +16 -0
- package/esm/tabstrip/tabstrip-dom-utils.js.map +1 -0
- package/esm/tabstrip/useAnimatedSelectionThumb.js +83 -0
- package/esm/tabstrip/useAnimatedSelectionThumb.js.map +1 -0
- package/esm/tabstrip/useKeyboardNavigation.js +241 -0
- package/esm/tabstrip/useKeyboardNavigation.js.map +1 -0
- package/esm/tabstrip/useSelection.js +58 -0
- package/esm/tabstrip/useSelection.js.map +1 -0
- package/esm/tabstrip/useTabstrip.js +259 -0
- package/esm/tabstrip/useTabstrip.js.map +1 -0
- package/esm/toolbar/Toolbar.css.js +4 -0
- package/esm/toolbar/Toolbar.css.js.map +1 -0
- package/esm/toolbar/Toolbar.js +88 -0
- package/esm/toolbar/Toolbar.js.map +1 -0
- package/esm/toolbar/toolbar-dom-utils.js +15 -0
- package/esm/toolbar/toolbar-dom-utils.js.map +1 -0
- package/esm/toolbar/useKeyboardNavigation.js +303 -0
- package/esm/toolbar/useKeyboardNavigation.js.map +1 -0
- package/esm/toolbar/useSelection.js +92 -0
- package/esm/toolbar/useSelection.js.map +1 -0
- package/esm/toolbar/useToolbar.js +98 -0
- package/esm/toolbar/useToolbar.js.map +1 -0
- package/esm/tree/Tree.css.js +4 -0
- package/esm/tree/Tree.css.js.map +1 -0
- package/esm/tree/Tree.js +176 -0
- package/esm/tree/Tree.js.map +1 -0
- package/esm/tree/hierarchical-data-utils.js +65 -0
- package/esm/tree/hierarchical-data-utils.js.map +1 -0
- package/esm/tree/key-code.js +54 -0
- package/esm/tree/key-code.js.map +1 -0
- package/esm/tree/list-dom-utils.js +15 -0
- package/esm/tree/list-dom-utils.js.map +1 -0
- package/esm/tree/treeTypeUtils.js +4 -0
- package/esm/tree/treeTypeUtils.js.map +1 -0
- package/esm/tree/use-collapsible-groups.js +83 -0
- package/esm/tree/use-collapsible-groups.js.map +1 -0
- package/esm/tree/use-hierarchical-data.js +49 -0
- package/esm/tree/use-hierarchical-data.js.map +1 -0
- package/esm/tree/use-items-with-ids.js +98 -0
- package/esm/tree/use-items-with-ids.js.map +1 -0
- package/esm/tree/use-keyboard-navigation.js +142 -0
- package/esm/tree/use-keyboard-navigation.js.map +1 -0
- package/esm/tree/use-selection.js +147 -0
- package/esm/tree/use-selection.js.map +1 -0
- package/esm/tree/use-tree-keyboard-navigation.js +39 -0
- package/esm/tree/use-tree-keyboard-navigation.js.map +1 -0
- package/esm/tree/use-viewport-tracking.js +74 -0
- package/esm/tree/use-viewport-tracking.js.map +1 -0
- package/esm/tree/useTree.js +104 -0
- package/esm/tree/useTree.js.map +1 -0
- package/esm/utils/escapeRegExp.js +7 -0
- package/esm/utils/escapeRegExp.js.map +1 -0
- package/esm/utils/forwardCallbackProps.js +20 -0
- package/esm/utils/forwardCallbackProps.js.map +1 -0
- package/esm/utils/isOverflowElement.js +6 -0
- package/esm/utils/isOverflowElement.js.map +1 -0
- package/esm/vuu-input/VuuInput.css.js +4 -0
- package/esm/vuu-input/VuuInput.css.js.map +1 -0
- package/esm/vuu-input/VuuInput.js +103 -0
- package/esm/vuu-input/VuuInput.js.map +1 -0
- package/package.json +45 -0
- package/types/calendar/Calendar.d.ts +12 -0
- package/types/calendar/index.d.ts +4 -0
- package/types/calendar/internal/CalendarCarousel.d.ts +4 -0
- package/types/calendar/internal/CalendarContext.d.ts +9 -0
- package/types/calendar/internal/CalendarDay.d.ts +14 -0
- package/types/calendar/internal/CalendarMonth.d.ts +11 -0
- package/types/calendar/internal/CalendarNavigation.d.ts +20 -0
- package/types/calendar/internal/CalendarWeekHeader.d.ts +5 -0
- package/types/calendar/internal/useFocusManagement.d.ts +9 -0
- package/types/calendar/internal/utils.d.ts +14 -0
- package/types/calendar/useCalendar.d.ts +57 -0
- package/types/calendar/useCalendarDay.d.ts +19 -0
- package/types/calendar/useSelection.d.ts +75 -0
- package/types/combo-box/ComboBox.d.ts +24 -0
- package/types/combo-box/index.d.ts +1 -0
- package/types/combo-box/useCombobox.d.ts +20 -0
- package/types/common-hooks/collectionProvider.d.ts +13 -0
- package/types/common-hooks/collectionTypes.d.ts +58 -0
- package/types/common-hooks/index.d.ts +9 -0
- package/types/common-hooks/isPlainObject.d.ts +1 -0
- package/types/common-hooks/itemToString.d.ts +2 -0
- package/types/common-hooks/navigationTypes.d.ts +36 -0
- package/types/common-hooks/selectionTypes.d.ts +70 -0
- package/types/common-hooks/use-resize-observer.d.ts +16 -0
- package/types/common-hooks/useCollectionItems.d.ts +2 -0
- package/types/common-hooks/useControlled.d.ts +24 -0
- package/types/common-hooks/useSelection.d.ts +8 -0
- package/types/common-hooks/useStateRef.d.ts +2 -0
- package/types/cycle-state-button/CycleStateButton.d.ts +12 -0
- package/types/cycle-state-button/index.d.ts +1 -0
- package/types/date-input/DateInput.d.ts +12 -0
- package/types/date-input/DateRangeInput.d.ts +11 -0
- package/types/date-input/index.d.ts +2 -0
- package/types/date-input/types.d.ts +16 -0
- package/types/date-input/useBaseDatePickerDropdown.d.ts +15 -0
- package/types/date-input/useDatePicker.d.ts +7 -0
- package/types/date-popup/DatePopup.d.ts +12 -0
- package/types/date-popup/index.d.ts +1 -0
- package/types/date-popup/useDatePopup.d.ts +20 -0
- package/types/drag-drop/DragDropProvider.d.ts +38 -0
- package/types/drag-drop/DragDropState.d.ts +15 -0
- package/types/drag-drop/Draggable.d.ts +13 -0
- package/types/drag-drop/DropIndicator.d.ts +6 -0
- package/types/drag-drop/dragDropTypes.d.ts +100 -0
- package/types/drag-drop/drop-target-utils.d.ts +78 -0
- package/types/drag-drop/index.d.ts +6 -0
- package/types/drag-drop/useAutoScroll.d.ts +11 -0
- package/types/drag-drop/useDragDisplacers.d.ts +17 -0
- package/types/drag-drop/useDragDrop.d.ts +2 -0
- package/types/drag-drop/useDragDropCopy.d.ts +6 -0
- package/types/drag-drop/useDragDropIndicator.d.ts +2 -0
- package/types/drag-drop/useDragDropNaturalMovement.d.ts +2 -0
- package/types/drag-drop/useDropIndicator.d.ts +8 -0
- package/types/drag-drop/useGlobalDragDrop.d.ts +12 -0
- package/types/drag-drop/useTransition.d.ts +3 -0
- package/types/dropdown/Dropdown.d.ts +10 -0
- package/types/dropdown/DropdownBase.d.ts +9 -0
- package/types/dropdown/DropdownButton.d.ts +41 -0
- package/types/dropdown/dropdownTypes.d.ts +51 -0
- package/types/dropdown/index.d.ts +5 -0
- package/types/dropdown/useClickAway.d.ts +10 -0
- package/types/dropdown/useDropdown.d.ts +13 -0
- package/types/dropdown/useDropdownBase.d.ts +2 -0
- package/types/editable/editable-utils.d.ts +2 -0
- package/types/editable/index.d.ts +2 -0
- package/types/editable/useEditableText.d.ts +19 -0
- package/types/editable-label/EditableLabel.d.ts +19 -0
- package/types/editable-label/index.d.ts +1 -0
- package/types/expando-input/ExpandoInput.d.ts +6 -0
- package/types/expando-input/index.d.ts +1 -0
- package/types/icon-button/Icon.d.ts +6 -0
- package/types/icon-button/IconButton.d.ts +7 -0
- package/types/icon-button/index.d.ts +2 -0
- package/types/index.d.ts +27 -0
- package/types/inputs/Checkbox.d.ts +9 -0
- package/types/inputs/RadioButton.d.ts +9 -0
- package/types/inputs/index.d.ts +2 -0
- package/types/instrument-picker/InstrumentPicker.d.ts +24 -0
- package/types/instrument-picker/SearchCell.d.ts +3 -0
- package/types/instrument-picker/index.d.ts +1 -0
- package/types/instrument-picker/moving-window.d.ts +14 -0
- package/types/instrument-picker/useDataSource.d.ts +6 -0
- package/types/instrument-picker/useInstrumentPicker.d.ts +28 -0
- package/types/instrument-search/InstrumentSearch.d.ts +11 -0
- package/types/instrument-search/SearchCell.d.ts +3 -0
- package/types/instrument-search/index.d.ts +1 -0
- package/types/instrument-search/moving-window.d.ts +14 -0
- package/types/instrument-search/useDataSource.d.ts +6 -0
- package/types/instrument-search/useInstrumentSearch.d.ts +13 -0
- package/types/list/CheckboxIcon.d.ts +6 -0
- package/types/list/ChevronIcon.d.ts +7 -0
- package/types/list/Highlighter.d.ts +6 -0
- package/types/list/List.d.ts +6 -0
- package/types/list/ListItem.d.ts +6 -0
- package/types/list/ListItemGroup.d.ts +6 -0
- package/types/list/ListItemHeader.d.ts +5 -0
- package/types/list/RadioIcon.d.ts +5 -0
- package/types/list/common-hooks/index.d.ts +10 -0
- package/types/list/common-hooks/keyUtils.d.ts +14 -0
- package/types/list/common-hooks/list-dom-utils.d.ts +5 -0
- package/types/list/common-hooks/useCollapsibleGroups.d.ts +14 -0
- package/types/list/common-hooks/useImperativeScrollingAPI.d.ts +14 -0
- package/types/list/common-hooks/useKeyboardNavigation.d.ts +3 -0
- package/types/list/common-hooks/useTypeahead.d.ts +15 -0
- package/types/list/common-hooks/useViewportTracking.d.ts +14 -0
- package/types/list/common-hooks/utils/collection-item-utils.d.ts +21 -0
- package/types/list/common-hooks/utils/filter-utils.d.ts +4 -0
- package/types/list/common-hooks/utils/index.d.ts +4 -0
- package/types/list/common-hooks/utils/isSelected.d.ts +2 -0
- package/types/list/index.d.ts +10 -0
- package/types/list/keyset.d.ts +9 -0
- package/types/list/listTypes.d.ts +200 -0
- package/types/list/useList.d.ts +3 -0
- package/types/list/useListDrop.d.ts +15 -0
- package/types/list/useListHeight.d.ts +19 -0
- package/types/list/useScrollPosition.d.ts +19 -0
- package/types/measured-container/MeasuredContainer.d.ts +14 -0
- package/types/measured-container/index.d.ts +2 -0
- package/types/measured-container/useMeasuredContainer.d.ts +22 -0
- package/types/measured-container/useResizeObserver.d.ts +15 -0
- package/types/overflow-container/OverflowContainer.d.ts +15 -0
- package/types/overflow-container/index.d.ts +2 -0
- package/types/overflow-container/overflow-utils.d.ts +48 -0
- package/types/overflow-container/useOverflowContainer.d.ts +20 -0
- package/types/price-ticker/PriceTicker.d.ts +7 -0
- package/types/price-ticker/index.d.ts +1 -0
- package/types/split-button/SplitButton.d.ts +11 -0
- package/types/split-button/SplitStateButton.d.ts +6 -0
- package/types/split-button/index.d.ts +2 -0
- package/types/split-button/useSplitButton.d.ts +288 -0
- package/types/tabstrip/Tab.d.ts +26 -0
- package/types/tabstrip/TabMenu.d.ts +19 -0
- package/types/tabstrip/TabMenuOptions.d.ts +10 -0
- package/types/tabstrip/TabsTypes.d.ts +127 -0
- package/types/tabstrip/Tabstrip.d.ts +3 -0
- package/types/tabstrip/index.d.ts +4 -0
- package/types/tabstrip/tabstrip-dom-utils.d.ts +2 -0
- package/types/tabstrip/useAnimatedSelectionThumb.d.ts +7 -0
- package/types/tabstrip/useKeyboardNavigation.d.ts +29 -0
- package/types/tabstrip/useSelection.d.ts +13 -0
- package/types/tabstrip/useTabstrip.d.ts +49 -0
- package/types/toolbar/Toolbar.d.ts +20 -0
- package/types/toolbar/index.d.ts +1 -0
- package/types/toolbar/toolbar-dom-utils.d.ts +3 -0
- package/types/toolbar/useKeyboardNavigation.d.ts +32 -0
- package/types/toolbar/useSelection.d.ts +22 -0
- package/types/toolbar/useToolbar.d.ts +28 -0
- package/types/tree/Tree.d.ts +19 -0
- package/types/tree/hierarchical-data-utils.d.ts +8 -0
- package/types/tree/index.d.ts +4 -0
- package/types/tree/key-code.d.ts +11 -0
- package/types/tree/list-dom-utils.d.ts +6 -0
- package/types/tree/treeTypeUtils.d.ts +2 -0
- package/types/tree/treeTypes.d.ts +17 -0
- package/types/tree/use-collapsible-groups.d.ts +18 -0
- package/types/tree/use-hierarchical-data.d.ts +6 -0
- package/types/tree/use-items-with-ids.d.ts +8 -0
- package/types/tree/use-keyboard-navigation.d.ts +26 -0
- package/types/tree/use-selection.d.ts +31 -0
- package/types/tree/use-tree-keyboard-navigation.d.ts +12 -0
- package/types/tree/use-viewport-tracking.d.ts +2 -0
- package/types/tree/useTree.d.ts +30 -0
- package/types/utils/escapeRegExp.d.ts +1 -0
- package/types/utils/forwardCallbackProps.d.ts +3 -0
- package/types/utils/index.d.ts +3 -0
- package/types/utils/isOverflowElement.d.ts +1 -0
- package/types/vuu-input/VuuInput.d.ts +16 -0
- package/types/vuu-input/index.d.ts +1 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { isValidNumber } from '@vuu-ui/vuu-utils';
|
|
2
|
+
import { useRef, useCallback } from 'react';
|
|
3
|
+
import { useKeyboardNavigation } from './useKeyboardNavigation.js';
|
|
4
|
+
import { useSelection } from './useSelection.js';
|
|
5
|
+
|
|
6
|
+
const useToolbar = ({
|
|
7
|
+
activeItemIndex: activeItemIndexProp,
|
|
8
|
+
defaultActiveItemIndex,
|
|
9
|
+
containerRef,
|
|
10
|
+
itemQuery = "vuuToolbarItem",
|
|
11
|
+
onActiveChange,
|
|
12
|
+
onNavigateOutOfBounds,
|
|
13
|
+
orientation,
|
|
14
|
+
selectionStrategy
|
|
15
|
+
}) => {
|
|
16
|
+
const lastSelection = useRef(activeItemIndexProp);
|
|
17
|
+
const {
|
|
18
|
+
focusItem: keyboardHookFocusItem,
|
|
19
|
+
highlightedIdx,
|
|
20
|
+
onClick: keyboardHookHandleClick,
|
|
21
|
+
onKeyDown: keyboardHookHandleKeyDown,
|
|
22
|
+
setHighlightedIdx: keyboardHookSetHighlightedIndex,
|
|
23
|
+
...keyboardHook
|
|
24
|
+
} = useKeyboardNavigation({
|
|
25
|
+
containerRef,
|
|
26
|
+
onNavigateOutOfBounds,
|
|
27
|
+
orientation
|
|
28
|
+
});
|
|
29
|
+
const {
|
|
30
|
+
activateItem: selectionHookActivateItem,
|
|
31
|
+
itemHandlers: { onClick, onKeyDown },
|
|
32
|
+
selected: selectionHookSelected
|
|
33
|
+
} = useSelection({
|
|
34
|
+
containerRef,
|
|
35
|
+
defaultSelected: defaultActiveItemIndex,
|
|
36
|
+
highlightedIdx,
|
|
37
|
+
itemQuery,
|
|
38
|
+
onSelectionChange: onActiveChange,
|
|
39
|
+
selected: activeItemIndexProp,
|
|
40
|
+
selectionStrategy
|
|
41
|
+
});
|
|
42
|
+
lastSelection.current = selectionHookSelected;
|
|
43
|
+
const handleClick = useCallback(
|
|
44
|
+
(evt) => {
|
|
45
|
+
const target = evt.target;
|
|
46
|
+
const toolbarItem = target.closest("[data-index]");
|
|
47
|
+
if (toolbarItem) {
|
|
48
|
+
const index = parseInt(toolbarItem.dataset.index ?? "-1");
|
|
49
|
+
if (index !== -1 && isValidNumber(index)) {
|
|
50
|
+
keyboardHookHandleClick(evt, index);
|
|
51
|
+
onClick?.(evt, index);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
[keyboardHookHandleClick, onClick]
|
|
56
|
+
);
|
|
57
|
+
const handleKeyDown = useCallback(
|
|
58
|
+
(evt) => {
|
|
59
|
+
keyboardHookHandleKeyDown(evt);
|
|
60
|
+
if (!evt.defaultPrevented) {
|
|
61
|
+
onKeyDown?.(evt);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[keyboardHookHandleKeyDown, onKeyDown]
|
|
65
|
+
);
|
|
66
|
+
const onSwitchWrappedItemIntoView = useCallback(
|
|
67
|
+
(item) => {
|
|
68
|
+
const index = parseInt(item.index);
|
|
69
|
+
if (!isNaN(index)) {
|
|
70
|
+
selectionHookActivateItem(index);
|
|
71
|
+
keyboardHookFocusItem(index);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
[keyboardHookFocusItem, selectionHookActivateItem]
|
|
75
|
+
);
|
|
76
|
+
const itemProps = {
|
|
77
|
+
onClick: handleClick,
|
|
78
|
+
onFocus: keyboardHook.onFocus,
|
|
79
|
+
onKeyDown: handleKeyDown
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
activeItemIndex: selectionHookSelected,
|
|
83
|
+
focusableIdx: keyboardHook.focusableIdx,
|
|
84
|
+
focusVisible: keyboardHook.focusVisible,
|
|
85
|
+
containerProps: {
|
|
86
|
+
PopupMenuProps: {
|
|
87
|
+
onKeyDown: handleKeyDown,
|
|
88
|
+
onMenuClose: keyboardHook.onOverflowMenuClose
|
|
89
|
+
},
|
|
90
|
+
...keyboardHook.containerProps,
|
|
91
|
+
onSwitchWrappedItemIntoView
|
|
92
|
+
},
|
|
93
|
+
itemProps
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export { useToolbar };
|
|
98
|
+
//# sourceMappingURL=useToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToolbar.js","sources":["../../src/toolbar/useToolbar.ts"],"sourcesContent":["import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n RefObject,\n useCallback,\n useRef,\n} from \"react\";\nimport { OverflowItem } from \"../overflow-container\";\nimport { ToolbarProps } from \"./Toolbar\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\n\nexport interface ToolbarHookProps\n extends Pick<\n ToolbarProps,\n | \"activeItemIndex\"\n | \"defaultActiveItemIndex\"\n | \"onActiveChange\"\n | \"onNavigateOutOfBounds\"\n >,\n Required<Pick<ToolbarProps, \"orientation\" | \"selectionStrategy\">> {\n containerRef: RefObject<HTMLElement>;\n itemQuery?: string;\n}\n\nexport const useToolbar = ({\n activeItemIndex: activeItemIndexProp,\n defaultActiveItemIndex,\n containerRef,\n itemQuery = \"vuuToolbarItem\",\n onActiveChange,\n onNavigateOutOfBounds,\n orientation,\n selectionStrategy,\n}: ToolbarHookProps) => {\n const lastSelection = useRef(activeItemIndexProp);\n\n const {\n focusItem: keyboardHookFocusItem,\n highlightedIdx,\n onClick: keyboardHookHandleClick,\n onKeyDown: keyboardHookHandleKeyDown,\n setHighlightedIdx: keyboardHookSetHighlightedIndex,\n ...keyboardHook\n } = useKeyboardNavigation({\n containerRef,\n onNavigateOutOfBounds,\n orientation,\n });\n\n const {\n activateItem: selectionHookActivateItem,\n itemHandlers: { onClick, onKeyDown },\n selected: selectionHookSelected,\n } = useSelection({\n containerRef,\n defaultSelected: defaultActiveItemIndex,\n highlightedIdx,\n itemQuery,\n onSelectionChange: onActiveChange,\n selected: activeItemIndexProp,\n selectionStrategy,\n });\n // We need this on reEntry for navigation hook to handle focus and for dragDropHook\n // to re-apply selection after drag drop. For some reason the value is stale if we\n // directly use selectionHookSelected within the drag, even though all dependencies\n //appear to be correctly declared.\n lastSelection.current = selectionHookSelected;\n\n const handleClick = useCallback(\n (evt: ReactMouseEvent<HTMLElement>) => {\n const target = evt.target as HTMLElement;\n const toolbarItem = target.closest(\"[data-index]\") as HTMLElement;\n if (toolbarItem) {\n const index = parseInt(toolbarItem.dataset.index ?? \"-1\");\n if (index !== -1 && isValidNumber(index)) {\n keyboardHookHandleClick(evt, index);\n onClick?.(evt, index);\n }\n }\n },\n [keyboardHookHandleClick, onClick]\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n keyboardHookHandleKeyDown(evt);\n if (!evt.defaultPrevented) {\n onKeyDown?.(evt);\n }\n },\n [keyboardHookHandleKeyDown, onKeyDown]\n );\n\n const onSwitchWrappedItemIntoView = useCallback(\n (item: OverflowItem) => {\n const index = parseInt(item.index);\n if (!isNaN(index)) {\n //TODO need to be able to reset the overflow-priority without selecting the item\n selectionHookActivateItem(index);\n keyboardHookFocusItem(index);\n }\n },\n [keyboardHookFocusItem, selectionHookActivateItem]\n );\n\n const itemProps = {\n onClick: handleClick,\n onFocus: keyboardHook.onFocus,\n onKeyDown: handleKeyDown,\n };\n\n return {\n activeItemIndex: selectionHookSelected,\n focusableIdx: keyboardHook.focusableIdx,\n focusVisible: keyboardHook.focusVisible,\n containerProps: {\n PopupMenuProps: {\n onKeyDown: handleKeyDown,\n onMenuClose: keyboardHook.onOverflowMenuClose,\n },\n ...keyboardHook.containerProps,\n onSwitchWrappedItemIntoView,\n },\n itemProps,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var treeCss = ".vuuTree {\n --tree-node-collapse: var(--vuuTree-toggle-collapse, var(--svg-tree-node-collapse));\n --tree-node-expand: var(--vuuTree-toggle-expand, var(--svg-tree-node-expand));\n --tree-toggle-width: 12px;\n --tree-icon-color: var(--vuuTree-icon-color, #4c505b);\n --tree-node-expanded-transform: var(--vuuTree-node-expanded-transform, none);\n --tree-node-indent: 0px;\n\n --list-hilited-bg: var(--hw-list-hilited-bg, rgba(0, 0, 0, 0.1));\n --list-item-height: var(--hw-list-item-height, 30px);\n --list-item-padding: var(--hw-list-item-padding, 0 6px);\n --list-item-header-bg: var(--hw-list-item-header-bg, black);\n --list-item-header-color: var(--hw-list-item-header-color, white);\n --list-item-header-font-weight: bold;\n --list-item-header-twisty-color: black;\n --list-item-header-twisty-content: '';\n --list-item-header-twisty-top: 50%;\n --list-item-header-twisty-left: -18px;\n --list-item-header-twisty-right: auto;\n --list-item-selected-bg: var(--hw-list-selected-bg, #1ea7fd);\n --list-item-selected-color: white;\n --list-item-text-color: var(--hw-gray-800);\n --focus-visible-border-color: var(--hw-focus-visible-border-color, rgb(141, 154, 179));\n\n list-style: none;\n margin: 0;\n padding: 0 1px;\n font-size: var(--vuuTree-font-size, 14px);\n max-height: inherit;\n outline: none;\n overflow-y: auto;\n position: relative;\n user-select: none;\n}\n\n.vuuTree-viewport {\n --list-item-height: 30px;\n box-sizing: border-box;\n max-height: inherit;\n overflow: auto;\n}\n\n.vuuTree-scrollingContentContainer {\n box-sizing: inherit;\n position: relative;\n}\n\n.vuuTree-scrollingContentContainer .vuuTreeNode {\n line-height: 30px;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n will-change: transform;\n}\n\n.vuuTreeNode {\n list-style: none;\n}\n\n/* Leaf node or the div child of a collapsible node */\n.vuuTreeNode:not([aria-expanded]),\n.vuuTreeNode[aria-expanded] > .vuuTreeNode-label {\n --checkbox-border-color: black;\n --checkbox-border-width: 1px;\n --checkbox-tick: black;\n --list-item-padding-left: 6px;\n --svg-toggle: var(--tree-node-collapse);\n\n align-items: center;\n color: var(--list-item-text-color);\n display: flex;\n flex-wrap: nowrap;\n height: var(--list-item-height);\n line-height: var(--list-item-height);\n padding: var(--list-item-padding);\n padding-left: var(--padding-left);\n position: relative;\n cursor: default;\n margin: 0;\n white-space: nowrap;\n}\n\n.vuuTreeNode:not([aria-expanded]) {\n --padding-left: calc(\n var(--list-item-padding-left) + var(--tree-toggle-width) + var(--tree-node-indent)\n );\n}\n\n.vuuTreeNode[aria-expanded] > .vuuTreeNode-label {\n --padding-left: calc(\n var(--list-item-padding-left) + var(--tree-toggle-width) + var(--tree-node-indent)\n );\n}\n\n.vuuTreeNode-icon {\n background-color: var(--tree-icon-color);\n display: inline-block;\n height: 18px;\n margin-right: 6px;\n -webkit-mask: var(--vuu-icon-svg) center center/12px 12px no-repeat;\n mask: var(--vuu-icon-svg) center center/12px 12px no-repeat;\n flex: 0 0 18px;\n}\n\n.vuuTreeNode[aria-expanded] {\n flex-direction: column;\n}\n\n.vuuTreeNode[aria-expanded] {\n flex-direction: column;\n height: auto;\n}\n\n.vuuTreeNode > *[role='group'] {\n padding-left: 0px;\n}\n\n.vuuTreeNode {\n padding-left: calc(var(--padding-left) + var(--tree-node-indent));\n}\n\n.vuuTreeNode[aria-level='2'] {\n --tree-node-indent: 12px;\n}\n.vuuTreeNode[aria-level='3'] {\n --tree-node-indent: 24px;\n}\n.vuuTreeNode[aria-level='4'] {\n --tree-node-indent: 36px;\n}\n\n.vuuTreeNode:not(.focusVisible):not(.hwListItemHeader):not([aria-expanded])[data-highlighted],\n.vuuTreeNode:not(.focusVisible):not(.hwListItemHeader)[aria-expanded][data-highlighted]\n > div:first-child {\n background-color: var(--list-hilited-bg);\n}\n\n.vuuTreeNode-toggle {\n cursor: pointer;\n}\n\n.vuuTreeNode > .vuuTreeNode-toggle {\n display: inline-block;\n height: 100%;\n left: 0;\n position: absolute;\n width: calc(var(--list-item-padding-left) + var(--tree-toggle-width));\n}\n\n.vuuTreeNode[aria-expanded] > .vuuTreeNode-label:after {\n content: var(--list-item-header-twisty-content);\n -webkit-mask: var(--svg-toggle) center center/8px 8px no-repeat;\n mask: var(--svg-toggle) center center/8px 8px no-repeat;\n background-color: var(--list-item-header-twisty-color);\n height: 18px;\n margin-top: -9px;\n left: var(--tree-node-indent);\n position: absolute;\n top: var(--list-item-header-twisty-top);\n transition: transform 0.3s;\n width: 18px;\n}\n\n.vuuTreeNode[aria-selected='true'] {\n --list-item-header-twisty-color: var(--list-item-selected-color);\n}\n\n\n.vuuTreeNode:not(.focusVisible):focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.vuuTreeNode:not([aria-expanded]).focusVisible:before,\n.vuuTreeNode[aria-expanded].focusVisible > div:first-child:before {\n content: '';\n position: absolute;\n top: 0px;\n left: var(--tree-focus-offset, 0px);\n right: 0;\n bottom: 0px;\n border: dotted var(--focus-visible-border-color) 2px;\n background-color: var(--list-hilited-bg);\n}\n\n\n.vuuTreeNode[aria-expanded='false'] > *:first-child:after {\n --svg-toggle: var(--tree-node-expand);\n}\n\n.vuuTreeNode[aria-expanded='true'] > *:first-child:after {\n transform: var(--tree-node-expanded-transform);\n}\n\n/* Selection */\n\n.vuuTree:not(.checkbox-only) .vuuTreeNode:not([aria-expanded])[aria-selected='true'],\n.vuuTree:not(.checkbox-only) .vuuTreeNode[aria-expanded][aria-selected='true'] > div:first-child {\n --checkbox-border-color: var(--list-item-selected-color);\n --checkbox-tick: var(--list-item-selected-color);\n --focus-visible-border-color: var(--list-item-selected-color);\n background-color: var(--list-item-selected-bg);\n color: var(--list-item-selected-color);\n}\n\n.with-checkbox .vuuTreeNode {\n padding-left: 28px;\n}\n\n.with-checkbox .vuuTreeNode:before {\n border-style: solid;\n border-width: var(--checkbox-border-width);\n border-color: var(--checkbox-border-color);\n content: '';\n height: 12px;\n left: 3px;\n margin-top: -7px;\n position: absolute;\n top: 50%;\n width: 12px;\n}\n";
|
|
2
|
+
|
|
3
|
+
export { treeCss as default };
|
|
4
|
+
//# sourceMappingURL=Tree.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/esm/tree/Tree.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useRef, createElement } from 'react';
|
|
3
|
+
import { useIdMemo, useForkRef } from '@salt-ds/core';
|
|
4
|
+
import cx from 'clsx';
|
|
5
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
6
|
+
import { useWindow } from '@salt-ds/window';
|
|
7
|
+
import { closestListItemIndex } from './list-dom-utils.js';
|
|
8
|
+
import { isExpanded } from './treeTypeUtils.js';
|
|
9
|
+
import { useItemsWithIds } from './use-items-with-ids.js';
|
|
10
|
+
import { groupSelectionEnabled } from './use-selection.js';
|
|
11
|
+
import { useViewportTracking } from './use-viewport-tracking.js';
|
|
12
|
+
import { useTree } from './useTree.js';
|
|
13
|
+
import treeCss from './Tree.css.js';
|
|
14
|
+
|
|
15
|
+
const classBase = "vuuTree";
|
|
16
|
+
const TreeNode = ({ children, idx, ...props }) => {
|
|
17
|
+
return /* @__PURE__ */ jsx("li", { ...props, children });
|
|
18
|
+
};
|
|
19
|
+
const Tree = forwardRef(function Tree2({
|
|
20
|
+
allowDragDrop,
|
|
21
|
+
className,
|
|
22
|
+
defaultSelected,
|
|
23
|
+
groupSelection = "none",
|
|
24
|
+
id: idProp,
|
|
25
|
+
onHighlight,
|
|
26
|
+
onSelectionChange,
|
|
27
|
+
revealSelected,
|
|
28
|
+
selected: selectedProp,
|
|
29
|
+
selection = "single",
|
|
30
|
+
source,
|
|
31
|
+
...htmlAttributes
|
|
32
|
+
}, forwardedRef) {
|
|
33
|
+
const targetWindow = useWindow();
|
|
34
|
+
useComponentCssInjection({
|
|
35
|
+
testId: "vuu-tree",
|
|
36
|
+
css: treeCss,
|
|
37
|
+
window: targetWindow
|
|
38
|
+
});
|
|
39
|
+
const id = useIdMemo(idProp);
|
|
40
|
+
const rootRef = useRef(null);
|
|
41
|
+
const [, sourceWithIds, sourceItemById] = useItemsWithIds(source, id, {
|
|
42
|
+
revealSelected: revealSelected ? selectedProp ?? defaultSelected ?? false : void 0
|
|
43
|
+
});
|
|
44
|
+
const handleSelectionChange = (evt, selected2) => {
|
|
45
|
+
if (onSelectionChange) {
|
|
46
|
+
const sourceItems = selected2.map((id2) => sourceItemById(id2)).filter((sourceItem) => sourceItem !== void 0);
|
|
47
|
+
onSelectionChange(sourceItems);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const {
|
|
51
|
+
focusVisible,
|
|
52
|
+
highlightedIdx,
|
|
53
|
+
hiliteItemAtIndex,
|
|
54
|
+
listProps,
|
|
55
|
+
listItemHandlers,
|
|
56
|
+
selected,
|
|
57
|
+
visibleData
|
|
58
|
+
} = useTree({
|
|
59
|
+
defaultSelected,
|
|
60
|
+
groupSelection,
|
|
61
|
+
onChange: handleSelectionChange,
|
|
62
|
+
onHighlight,
|
|
63
|
+
selected: selectedProp,
|
|
64
|
+
selection,
|
|
65
|
+
sourceWithIds
|
|
66
|
+
});
|
|
67
|
+
useViewportTracking(rootRef, highlightedIdx);
|
|
68
|
+
const defaultItemHandlers = {
|
|
69
|
+
onMouseEnter: (evt) => {
|
|
70
|
+
const targetEl = evt.target;
|
|
71
|
+
const idx = closestListItemIndex(targetEl);
|
|
72
|
+
hiliteItemAtIndex(idx);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const propsCommonToAllListItems = {
|
|
76
|
+
...defaultItemHandlers,
|
|
77
|
+
...listItemHandlers,
|
|
78
|
+
role: "treeitem"
|
|
79
|
+
};
|
|
80
|
+
const allowGroupSelect = groupSelectionEnabled(groupSelection);
|
|
81
|
+
function addLeafNode(list, item, idx) {
|
|
82
|
+
list.push(
|
|
83
|
+
/* @__PURE__ */ jsxs(
|
|
84
|
+
TreeNode,
|
|
85
|
+
{
|
|
86
|
+
...propsCommonToAllListItems,
|
|
87
|
+
...getListItemProps(item, idx, highlightedIdx, selected, focusVisible),
|
|
88
|
+
children: [
|
|
89
|
+
item.icon ? /* @__PURE__ */ jsx("span", { className: `${classBase}Node-icon`, "data-icon": item.icon }) : null,
|
|
90
|
+
/* @__PURE__ */ jsx("span", { children: item.label })
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
);
|
|
95
|
+
idx.value += 1;
|
|
96
|
+
}
|
|
97
|
+
function addGroupNode(list, child, idx, id2, title) {
|
|
98
|
+
const { value: i } = idx;
|
|
99
|
+
idx.value += 1;
|
|
100
|
+
list.push(
|
|
101
|
+
/* @__PURE__ */ createElement(
|
|
102
|
+
TreeNode,
|
|
103
|
+
{
|
|
104
|
+
...listItemHandlers,
|
|
105
|
+
"aria-expanded": child.expanded,
|
|
106
|
+
"aria-level": child.level,
|
|
107
|
+
"aria-selected": selected.includes(id2) || void 0,
|
|
108
|
+
className: cx(`${classBase}Node`, {
|
|
109
|
+
focusVisible: focusVisible === i,
|
|
110
|
+
[`${classBase}Node-toggle`]: !allowGroupSelect
|
|
111
|
+
}),
|
|
112
|
+
"data-idx": i,
|
|
113
|
+
"data-highlighted": i === highlightedIdx || void 0,
|
|
114
|
+
"data-selectable": true,
|
|
115
|
+
id: id2,
|
|
116
|
+
key: `header-${i}`
|
|
117
|
+
},
|
|
118
|
+
allowGroupSelect ? /* @__PURE__ */ jsxs("div", { className: `${classBase}Node-label`, children: [
|
|
119
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}Node-toggle` }),
|
|
120
|
+
title
|
|
121
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: `${classBase}Node-label`, children: [
|
|
122
|
+
child.icon ? /* @__PURE__ */ jsx(
|
|
123
|
+
"span",
|
|
124
|
+
{
|
|
125
|
+
className: `${classBase}Node-icon`,
|
|
126
|
+
"data-icon": child.icon
|
|
127
|
+
}
|
|
128
|
+
) : null,
|
|
129
|
+
/* @__PURE__ */ jsx("span", { children: title })
|
|
130
|
+
] }),
|
|
131
|
+
/* @__PURE__ */ jsx("ul", { role: "group", children: isExpanded(child) ? renderSourceContent(child.childNodes, idx) : "" })
|
|
132
|
+
)
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
function renderSourceContent(items, idx = { value: 0 }) {
|
|
136
|
+
if (items?.length > 0) {
|
|
137
|
+
const listItems = [];
|
|
138
|
+
for (const item of items) {
|
|
139
|
+
if (item.childNodes) {
|
|
140
|
+
addGroupNode(listItems, item, idx, item.id, item.label);
|
|
141
|
+
} else {
|
|
142
|
+
addLeafNode(listItems, item, idx);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return listItems;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return /* @__PURE__ */ jsx(
|
|
149
|
+
"ul",
|
|
150
|
+
{
|
|
151
|
+
...htmlAttributes,
|
|
152
|
+
...listProps,
|
|
153
|
+
className: cx(classBase, className),
|
|
154
|
+
id: `Tree-${id}`,
|
|
155
|
+
ref: useForkRef(rootRef, forwardedRef),
|
|
156
|
+
role: "tree",
|
|
157
|
+
tabIndex: 0,
|
|
158
|
+
children: renderSourceContent(visibleData)
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
});
|
|
162
|
+
const getListItemProps = (item, idx, highlightedIdx, selected, focusVisible, className) => ({
|
|
163
|
+
id: item.id,
|
|
164
|
+
key: item.id,
|
|
165
|
+
"aria-level": item.level,
|
|
166
|
+
"aria-selected": selected.includes(item.id) || void 0,
|
|
167
|
+
"data-idx": idx.value,
|
|
168
|
+
"data-highlighted": idx.value === highlightedIdx || void 0,
|
|
169
|
+
className: cx("vuuTreeNode", className, {
|
|
170
|
+
focusVisible: focusVisible === idx.value
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
Tree.displayName = "Tree";
|
|
174
|
+
|
|
175
|
+
export { Tree, TreeNode };
|
|
176
|
+
//# sourceMappingURL=Tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.js","sources":["../../src/tree/Tree.tsx"],"sourcesContent":["import { useForkRef, useIdMemo as useId } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n ForwardedRef,\n HTMLAttributes,\n MouseEvent,\n forwardRef,\n useRef,\n} from \"react\";\nimport { closestListItemIndex } from \"./list-dom-utils\";\nimport { isExpanded } from \"./treeTypeUtils\";\nimport type { NormalisedTreeSourceNode, TreeSourceNode } from \"./treeTypes\";\nimport { useItemsWithIds } from \"./use-items-with-ids\";\nimport {\n GroupSelection,\n TreeNodeSelectionHandler,\n TreeSelection,\n groupSelectionEnabled,\n} from \"./use-selection\";\nimport { useViewportTracking } from \"./use-viewport-tracking\";\nimport { useTree } from \"./useTree\";\n\nimport treeCss from \"./Tree.css\";\n\nconst classBase = \"vuuTree\";\n\ntype Indexer = {\n value: number;\n};\n\nexport interface TreeNodeProps extends HTMLAttributes<HTMLLIElement> {\n idx?: number;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport const TreeNode = ({ children, idx, ...props }: TreeNodeProps) => {\n return <li {...props}>{children}</li>;\n};\n\nexport interface TreeProps extends HTMLAttributes<HTMLUListElement> {\n allowDragDrop?: boolean;\n defaultSelected?: any;\n groupSelection?: GroupSelection;\n onHighlight?: (index: number) => void;\n onSelectionChange?: (selected: TreeSourceNode[]) => void;\n revealSelected?: boolean;\n selected?: string[];\n selection?: TreeSelection;\n source: TreeSourceNode[];\n}\n\nexport const Tree = forwardRef(function Tree(\n {\n allowDragDrop,\n className,\n defaultSelected,\n groupSelection = \"none\",\n id: idProp,\n onHighlight,\n onSelectionChange,\n revealSelected,\n selected: selectedProp,\n selection = \"single\",\n source,\n ...htmlAttributes\n }: TreeProps,\n forwardedRef: ForwardedRef<HTMLUListElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tree\",\n css: treeCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n const rootRef = useRef<HTMLUListElement>(null);\n // returns the full source data\n const [, sourceWithIds, sourceItemById] = useItemsWithIds(source, id, {\n revealSelected: revealSelected\n ? selectedProp ?? defaultSelected ?? false\n : undefined,\n });\n\n const handleSelectionChange: TreeNodeSelectionHandler = (evt, selected) => {\n if (onSelectionChange) {\n const sourceItems = selected\n .map((id) => sourceItemById(id))\n .filter((sourceItem) => sourceItem !== undefined) as TreeSourceNode[];\n onSelectionChange(sourceItems);\n }\n };\n\n const {\n focusVisible,\n highlightedIdx,\n hiliteItemAtIndex,\n listProps,\n listItemHandlers,\n selected,\n visibleData,\n } = useTree({\n defaultSelected,\n groupSelection,\n onChange: handleSelectionChange,\n onHighlight,\n selected: selectedProp,\n selection,\n sourceWithIds,\n });\n\n // const isScrolling = useViewportTracking(root, highlightedIdx);\n useViewportTracking(rootRef, highlightedIdx);\n\n const defaultItemHandlers = {\n onMouseEnter: (evt: MouseEvent) => {\n // if (!isScrolling.current) {\n const targetEl = evt.target as HTMLElement;\n const idx = closestListItemIndex(targetEl);\n hiliteItemAtIndex(idx);\n // onMouseEnterListItem && onMouseEnterListItem(evt, idx);\n // }\n },\n };\n\n const propsCommonToAllListItems = {\n ...defaultItemHandlers,\n ...listItemHandlers,\n role: \"treeitem\",\n };\n const allowGroupSelect = groupSelectionEnabled(groupSelection);\n\n /**\n * Add a ListItem from source item\n */\n function addLeafNode(\n list: JSX.Element[],\n item: NormalisedTreeSourceNode,\n idx: Indexer\n ) {\n list.push(\n <TreeNode\n {...propsCommonToAllListItems}\n {...getListItemProps(item, idx, highlightedIdx, selected, focusVisible)}\n >\n {item.icon ? (\n <span className={`${classBase}Node-icon`} data-icon={item.icon} />\n ) : null}\n <span>{item.label}</span>\n </TreeNode>\n );\n idx.value += 1;\n }\n\n function addGroupNode(\n list: JSX.Element[],\n child: NormalisedTreeSourceNode,\n idx: Indexer,\n id: string,\n title: string\n ) {\n const { value: i } = idx;\n idx.value += 1;\n list.push(\n <TreeNode\n {...listItemHandlers}\n aria-expanded={child.expanded}\n aria-level={child.level}\n aria-selected={selected.includes(id) || undefined}\n className={cx(`${classBase}Node`, {\n focusVisible: focusVisible === i,\n [`${classBase}Node-toggle`]: !allowGroupSelect,\n })}\n data-idx={i}\n data-highlighted={i === highlightedIdx || undefined}\n data-selectable\n id={id}\n key={`header-${i}`}\n >\n {allowGroupSelect ? (\n <div className={`${classBase}Node-label`}>\n <span className={`${classBase}Node-toggle`} />\n {title}\n </div>\n ) : (\n <div className={`${classBase}Node-label`}>\n {child.icon ? (\n <span\n className={`${classBase}Node-icon`}\n data-icon={child.icon}\n />\n ) : null}\n <span>{title}</span>\n </div>\n )}\n <ul role=\"group\">\n {isExpanded(child) ? renderSourceContent(child.childNodes, idx) : \"\"}\n </ul>\n </TreeNode>\n );\n }\n\n function renderSourceContent(\n items: NormalisedTreeSourceNode[],\n idx = { value: 0 }\n ) {\n if (items?.length > 0) {\n const listItems: JSX.Element[] = [];\n for (const item of items) {\n if (item.childNodes) {\n addGroupNode(listItems, item, idx, item.id, item.label);\n } else {\n addLeafNode(listItems, item, idx);\n }\n }\n return listItems;\n }\n }\n\n return (\n <ul\n {...htmlAttributes}\n {...listProps}\n className={cx(classBase, className)}\n id={`Tree-${id}`}\n ref={useForkRef<HTMLUListElement>(rootRef, forwardedRef)}\n role=\"tree\"\n tabIndex={0}\n >\n {renderSourceContent(visibleData)}\n </ul>\n );\n});\n\nconst getListItemProps = (\n item: NormalisedTreeSourceNode,\n idx: Indexer,\n highlightedIdx: number,\n selected: string[],\n focusVisible: number,\n className?: string\n) => ({\n id: item.id,\n key: item.id,\n \"aria-level\": item.level,\n \"aria-selected\": selected.includes(item.id) || undefined,\n \"data-idx\": idx.value,\n \"data-highlighted\": idx.value === highlightedIdx || undefined,\n className: cx(\"vuuTreeNode\", className, {\n focusVisible: focusVisible === idx.value,\n }),\n});\n\nTree.displayName = \"Tree\";\n"],"names":["Tree","useId","selected","id"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const getNodeParentPath = ({ id }) => {
|
|
2
|
+
let pos = id.lastIndexOf("-");
|
|
3
|
+
if (pos !== -1) {
|
|
4
|
+
const path = id.slice(pos + 1);
|
|
5
|
+
const steps = path.split(".");
|
|
6
|
+
if (steps.length === 1) {
|
|
7
|
+
return null;
|
|
8
|
+
} else {
|
|
9
|
+
steps.pop();
|
|
10
|
+
return `${id.slice(0, pos)}-${steps.join(".")}`;
|
|
11
|
+
}
|
|
12
|
+
} else if ((pos = id.lastIndexOf("/")) !== -1) {
|
|
13
|
+
return id.slice(0, pos);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const isGroupNode = (node) => node.childNodes !== void 0;
|
|
17
|
+
const isHeader = (node) => node.header === true;
|
|
18
|
+
const PATH_SEPARATORS = /* @__PURE__ */ new Set([".", "/"]);
|
|
19
|
+
const isDescendantOf = (node, targetPath) => {
|
|
20
|
+
if (!targetPath.startsWith(node.id)) {
|
|
21
|
+
return false;
|
|
22
|
+
} else {
|
|
23
|
+
return PATH_SEPARATORS.has(targetPath.charAt(node.id.length));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const getNodeById = (nodes, id) => {
|
|
27
|
+
for (const node of nodes) {
|
|
28
|
+
if (node.id === id) {
|
|
29
|
+
return node;
|
|
30
|
+
} else if (isDescendantOf(node, id)) {
|
|
31
|
+
return getNodeById(node.childNodes, id);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const getIndexOfNode = (treeNodes, node) => {
|
|
36
|
+
const id = typeof node === "string" ? node : node.id;
|
|
37
|
+
for (let i = 0; i < treeNodes.length; i++) {
|
|
38
|
+
if (treeNodes[i].id === id) {
|
|
39
|
+
return i;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const replaceNode = (nodes, id, props) => {
|
|
44
|
+
let childNodes;
|
|
45
|
+
const newNodes = nodes.map((node) => {
|
|
46
|
+
if (node.id === id) {
|
|
47
|
+
return {
|
|
48
|
+
...node,
|
|
49
|
+
...props
|
|
50
|
+
};
|
|
51
|
+
} else if (isDescendantOf(node, id)) {
|
|
52
|
+
childNodes = replaceNode(node.childNodes, id, props);
|
|
53
|
+
return {
|
|
54
|
+
...node,
|
|
55
|
+
childNodes
|
|
56
|
+
};
|
|
57
|
+
} else {
|
|
58
|
+
return node;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return newNodes;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { getIndexOfNode, getNodeById, getNodeParentPath, isGroupNode, isHeader, replaceNode };
|
|
65
|
+
//# sourceMappingURL=hierarchical-data-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchical-data-utils.js","sources":["../../src/tree/hierarchical-data-utils.ts"],"sourcesContent":["import { NonLeafNode, NormalisedTreeSourceNode } from \"./treeTypes\";\n\nexport const getNodeParentPath = ({ id }: NormalisedTreeSourceNode) => {\n let pos = id.lastIndexOf(\"-\");\n if (pos !== -1) {\n // using the built-in hierarchical id scheme\n // rootId-n-n.n\n const path = id.slice(pos + 1);\n const steps = path.split(\".\");\n if (steps.length === 1) {\n return null;\n } else {\n steps.pop();\n return `${id.slice(0, pos)}-${steps.join(\".\")}`;\n }\n } else if ((pos = id.lastIndexOf(\"/\")) !== -1) {\n // using a path scheme step/step/step\n return id.slice(0, pos);\n }\n};\n\nexport const isGroupNode = (node: NormalisedTreeSourceNode) =>\n node.childNodes !== undefined;\nexport const isCollapsibleGroupNode = (node: NormalisedTreeSourceNode) =>\n isGroupNode(node) && node.expanded !== undefined;\nexport const isHeader = (node: NormalisedTreeSourceNode) =>\n node.header === true;\n\nconst PATH_SEPARATORS = new Set([\".\", \"/\"]);\n\nconst isDescendantOf = (\n node: NormalisedTreeSourceNode,\n targetPath: string\n): node is NonLeafNode => {\n if (!targetPath.startsWith(node.id)) {\n return false;\n } else {\n return PATH_SEPARATORS.has(targetPath.charAt(node.id.length));\n }\n};\n\nexport const getNodeById = (\n nodes: NormalisedTreeSourceNode[],\n id: string\n): NormalisedTreeSourceNode | undefined => {\n for (const node of nodes) {\n if (node.id === id) {\n return node;\n } else if (isDescendantOf(node, id)) {\n return getNodeById(node.childNodes, id);\n }\n }\n};\n\nexport const getIndexOfNode = (\n treeNodes: NormalisedTreeSourceNode[],\n node: NormalisedTreeSourceNode\n) => {\n const id = typeof node === \"string\" ? node : node.id;\n for (let i = 0; i < treeNodes.length; i++) {\n if (treeNodes[i].id === id) {\n return i;\n }\n }\n};\n\nexport const replaceNode = (\n nodes: NormalisedTreeSourceNode[],\n id: string,\n props: Partial<NormalisedTreeSourceNode>\n): NormalisedTreeSourceNode[] => {\n let childNodes;\n const newNodes = nodes.map((node) => {\n if (node.id === id) {\n return {\n ...node,\n ...props,\n };\n } else if (isDescendantOf(node, id)) {\n childNodes = replaceNode(node.childNodes, id, props);\n return {\n ...node,\n childNodes,\n };\n } else {\n return node;\n }\n });\n\n return newNodes;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
function union(set1, ...sets) {
|
|
2
|
+
const result = new Set(set1);
|
|
3
|
+
for (const set of sets) {
|
|
4
|
+
for (const element of set) {
|
|
5
|
+
result.add(element);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
const ArrowUp = "ArrowUp";
|
|
11
|
+
const ArrowDown = "ArrowDown";
|
|
12
|
+
const ArrowLeft = "ArrowLeft";
|
|
13
|
+
const ArrowRight = "ArrowRight";
|
|
14
|
+
const Enter = "Enter";
|
|
15
|
+
const Delete = "Delete";
|
|
16
|
+
const actionKeys = /* @__PURE__ */ new Set([Enter, Delete]);
|
|
17
|
+
const focusKeys = /* @__PURE__ */ new Set(["Tab"]);
|
|
18
|
+
const arrowLeftRightKeys = /* @__PURE__ */ new Set(["ArrowRight", "ArrowLeft"]);
|
|
19
|
+
const verticalNavigationKeys = /* @__PURE__ */ new Set(["Home", "End", "ArrowDown", "ArrowUp"]);
|
|
20
|
+
const horizontalNavigationKeys = /* @__PURE__ */ new Set([
|
|
21
|
+
"Home",
|
|
22
|
+
"End",
|
|
23
|
+
"ArrowRight",
|
|
24
|
+
"ArrowLeft"
|
|
25
|
+
]);
|
|
26
|
+
const functionKeys = /* @__PURE__ */ new Set([
|
|
27
|
+
"F1",
|
|
28
|
+
"F2",
|
|
29
|
+
"F3",
|
|
30
|
+
"F4",
|
|
31
|
+
"F5",
|
|
32
|
+
"F6",
|
|
33
|
+
"F7",
|
|
34
|
+
"F8",
|
|
35
|
+
"F9",
|
|
36
|
+
"F10",
|
|
37
|
+
"F11",
|
|
38
|
+
"F12"
|
|
39
|
+
]);
|
|
40
|
+
union(
|
|
41
|
+
actionKeys,
|
|
42
|
+
horizontalNavigationKeys,
|
|
43
|
+
verticalNavigationKeys,
|
|
44
|
+
arrowLeftRightKeys,
|
|
45
|
+
functionKeys,
|
|
46
|
+
focusKeys
|
|
47
|
+
);
|
|
48
|
+
const isNavigationKey = ({ key }, orientation = "vertical") => {
|
|
49
|
+
const navigationKeys = orientation === "vertical" ? verticalNavigationKeys : horizontalNavigationKeys;
|
|
50
|
+
return navigationKeys.has(key);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, Delete, Enter, isNavigationKey };
|
|
54
|
+
//# sourceMappingURL=key-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-code.js","sources":["../../src/tree/key-code.ts"],"sourcesContent":["import { KeyboardEvent } from \"react\";\n\nfunction union(set1: Set<string>, ...sets: Set<string>[]) {\n const result = new Set(set1);\n for (const set of sets) {\n for (const element of set) {\n result.add(element);\n }\n }\n return result;\n}\n\nexport const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const Backspace = \"Backspace\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Delete = \"Delete\";\n\nconst actionKeys = new Set([Enter, Delete]);\nconst focusKeys = new Set([\"Tab\"]);\n// const navigationKeys = new Set([\"Home\", \"End\", \"ArrowRight\", \"ArrowLeft\",\"ArrowDown\", \"ArrowUp\"]);\nconst arrowLeftRightKeys = new Set([\"ArrowRight\", \"ArrowLeft\"]);\nconst verticalNavigationKeys = new Set([\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\"]);\nconst horizontalNavigationKeys = new Set([\n \"Home\",\n \"End\",\n \"ArrowRight\",\n \"ArrowLeft\",\n]);\nconst functionKeys = new Set([\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n]);\nconst specialKeys = union(\n actionKeys,\n horizontalNavigationKeys,\n verticalNavigationKeys,\n arrowLeftRightKeys,\n functionKeys,\n focusKeys\n);\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (specialKeys.has(evt.key)) {\n return false;\n }\n if (typeof evt.which === \"number\" && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isNavigationKey = (\n { key }: KeyboardEvent,\n orientation = \"vertical\"\n) => {\n const navigationKeys =\n orientation === \"vertical\"\n ? verticalNavigationKeys\n : horizontalNavigationKeys;\n return navigationKeys.has(key);\n};\n"],"names":[],"mappings":"AAEA,SAAS,KAAA,CAAM,SAAsB,IAAqB,EAAA;AACxD,EAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAC3B,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAA,KAAA,MAAW,WAAW,GAAK,EAAA;AACzB,MAAA,MAAA,CAAO,IAAI,OAAO,CAAA,CAAA;AAAA,KACpB;AAAA,GACF;AACA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,MAAM,OAAU,GAAA,UAAA;AAChB,MAAM,SAAY,GAAA,YAAA;AAClB,MAAM,SAAY,GAAA,YAAA;AAElB,MAAM,UAAa,GAAA,aAAA;AACnB,MAAM,KAAQ,GAAA,QAAA;AAEd,MAAM,MAAS,GAAA,SAAA;AAEtB,MAAM,6BAAiB,IAAA,GAAA,CAAI,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA;AAC1C,MAAM,SAAY,mBAAA,IAAI,GAAI,CAAA,CAAC,KAAK,CAAC,CAAA,CAAA;AAEjC,MAAM,qCAAyB,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA,CAAA;AAC9D,MAAM,sBAAA,uBAA6B,GAAI,CAAA,CAAC,QAAQ,KAAO,EAAA,WAAA,EAAa,SAAS,CAAC,CAAA,CAAA;AAC9E,MAAM,wBAAA,uBAA+B,GAAI,CAAA;AAAA,EACvC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AACF,CAAC,CAAA,CAAA;AACD,MAAM,YAAA,uBAAmB,GAAI,CAAA;AAAA,EAC3B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AACF,CAAC,CAAA,CAAA;AACmB,KAAA;AAAA,EAClB,UAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AACF,EAAA;AAUO,MAAM,kBAAkB,CAC7B,EAAE,GAAI,EAAA,EACN,cAAc,UACX,KAAA;AACH,EAAM,MAAA,cAAA,GACJ,WAAgB,KAAA,UAAA,GACZ,sBACA,GAAA,wBAAA,CAAA;AACN,EAAO,OAAA,cAAA,CAAe,IAAI,GAAG,CAAA,CAAA;AAC/B;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function listItemIndex(listItemEl) {
|
|
2
|
+
if (listItemEl) {
|
|
3
|
+
let idx = listItemEl.dataset.idx;
|
|
4
|
+
if (idx) {
|
|
5
|
+
return parseInt(idx, 10);
|
|
6
|
+
} else if (idx = listItemEl.ariaPosInSet ?? "-1") {
|
|
7
|
+
return parseInt(idx, 10) - 1;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const closestListItem = (el) => el.closest("[data-idx],[aria-posinset]");
|
|
12
|
+
const closestListItemIndex = (el) => listItemIndex(closestListItem(el));
|
|
13
|
+
|
|
14
|
+
export { closestListItem, closestListItemIndex, listItemIndex };
|
|
15
|
+
//# sourceMappingURL=list-dom-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-dom-utils.js","sources":["../../src/tree/list-dom-utils.ts"],"sourcesContent":["export const listItemElement = (listEl: HTMLElement, listItemIdx: number) =>\n listEl.querySelector(`:scope > [data-idx=\"${listItemIdx}\"]`);\n\nexport function listItemIndex(listItemEl: HTMLElement) {\n if (listItemEl) {\n let idx = listItemEl.dataset.idx;\n if (idx) {\n return parseInt(idx, 10);\n // eslint-disable-next-line no-cond-assign\n } else if ((idx = listItemEl.ariaPosInSet ?? \"-1\")) {\n return parseInt(idx, 10) - 1;\n }\n }\n}\n\nexport const listItemId = (el: HTMLElement | null) => el?.id;\n\nexport const closestListItem = (el: HTMLElement) =>\n el.closest(\"[data-idx],[aria-posinset]\") as HTMLElement;\n\nexport const closestListItemId = (el: HTMLElement) =>\n listItemId(closestListItem(el));\n\nexport const closestListItemIndex = (el: HTMLElement) =>\n listItemIndex(closestListItem(el));\n"],"names":[],"mappings":"AAGO,SAAS,cAAc,UAAyB,EAAA;AACrD,EAAA,IAAI,UAAY,EAAA;AACd,IAAI,IAAA,GAAA,GAAM,WAAW,OAAQ,CAAA,GAAA,CAAA;AAC7B,IAAA,IAAI,GAAK,EAAA;AACP,MAAO,OAAA,QAAA,CAAS,KAAK,EAAE,CAAA,CAAA;AAAA,KAEb,MAAA,IAAA,GAAA,GAAM,UAAW,CAAA,YAAA,IAAgB,IAAO,EAAA;AAClD,MAAO,OAAA,QAAA,CAAS,GAAK,EAAA,EAAE,CAAI,GAAA,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AACF,CAAA;AAIO,MAAM,eAAkB,GAAA,CAAC,EAC9B,KAAA,EAAA,CAAG,QAAQ,4BAA4B,EAAA;AAKlC,MAAM,uBAAuB,CAAC,EAAA,KACnC,aAAc,CAAA,eAAA,CAAgB,EAAE,CAAC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeTypeUtils.js","sources":["../../src/tree/treeTypeUtils.ts"],"sourcesContent":["import type { NonLeafNode, NormalisedTreeSourceNode } from \"./treeTypes\";\n\nexport const isExpanded = (\n node: NormalisedTreeSourceNode\n): node is NonLeafNode => node.expanded === true;\n"],"names":[],"mappings":"AAEO,MAAM,UAAa,GAAA,CACxB,IACwB,KAAA,IAAA,CAAK,QAAa,KAAA;;;;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
2
|
+
import { closestListItem } from './list-dom-utils.js';
|
|
3
|
+
import { ArrowRight, Enter, ArrowLeft } from './key-code.js';
|
|
4
|
+
import { replaceNode, getNodeById } from './hierarchical-data-utils.js';
|
|
5
|
+
|
|
6
|
+
const NO_HANDLERS = {};
|
|
7
|
+
const isToggleElement = (element) => element && element.hasAttribute("aria-expanded");
|
|
8
|
+
const useCollapsibleGroups = ({
|
|
9
|
+
collapsibleHeaders,
|
|
10
|
+
highlightedIdx,
|
|
11
|
+
treeNodes,
|
|
12
|
+
setVisibleData,
|
|
13
|
+
source
|
|
14
|
+
}) => {
|
|
15
|
+
const fullSource = useRef(source);
|
|
16
|
+
const stateSource = useRef(fullSource.current);
|
|
17
|
+
const setSource = useCallback(
|
|
18
|
+
(value) => {
|
|
19
|
+
setVisibleData(stateSource.current = value);
|
|
20
|
+
},
|
|
21
|
+
[setVisibleData]
|
|
22
|
+
);
|
|
23
|
+
const expandNode = useCallback(
|
|
24
|
+
(nodeList, { id }) => replaceNode(nodeList, id, { expanded: true }),
|
|
25
|
+
[]
|
|
26
|
+
);
|
|
27
|
+
const collapseNode = useCallback(
|
|
28
|
+
(nodeList, { id }) => replaceNode(nodeList, id, { expanded: false }),
|
|
29
|
+
[]
|
|
30
|
+
);
|
|
31
|
+
const handleKeyDown = useCallback(
|
|
32
|
+
(e) => {
|
|
33
|
+
if (e.key === ArrowRight || e.key === Enter) {
|
|
34
|
+
const node = treeNodes[highlightedIdx];
|
|
35
|
+
if (node) {
|
|
36
|
+
if (node.expanded === false) {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
setSource(expandNode(stateSource.current, node));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (e.key === ArrowLeft || e.key === Enter) {
|
|
43
|
+
const node = treeNodes[highlightedIdx];
|
|
44
|
+
if (node) {
|
|
45
|
+
if (node.expanded) {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
setSource(collapseNode(stateSource.current, node));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
[collapseNode, expandNode, highlightedIdx, treeNodes, setSource]
|
|
53
|
+
);
|
|
54
|
+
const listHandlers = collapsibleHeaders ? {
|
|
55
|
+
onKeyDown: handleKeyDown
|
|
56
|
+
} : NO_HANDLERS;
|
|
57
|
+
const handleClick = useCallback(
|
|
58
|
+
(evt) => {
|
|
59
|
+
const el = closestListItem(evt.target);
|
|
60
|
+
if (isToggleElement(el)) {
|
|
61
|
+
evt.stopPropagation();
|
|
62
|
+
evt.preventDefault();
|
|
63
|
+
const node = getNodeById(source, el.id);
|
|
64
|
+
if (node?.expanded === false) {
|
|
65
|
+
setSource(expandNode(source, node));
|
|
66
|
+
} else if (node?.expanded === true) {
|
|
67
|
+
setSource(collapseNode(source, node));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
[collapseNode, expandNode, setSource, source]
|
|
72
|
+
);
|
|
73
|
+
const listItemHandlers = {
|
|
74
|
+
onClick: handleClick
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
listHandlers,
|
|
78
|
+
listItemHandlers
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export { useCollapsibleGroups };
|
|
83
|
+
//# sourceMappingURL=use-collapsible-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-collapsible-groups.js","sources":["../../src/tree/use-collapsible-groups.ts"],"sourcesContent":["import { KeyboardEvent, MouseEvent, useCallback, useRef } from \"react\";\nimport { closestListItem } from \"./list-dom-utils\";\nimport { ArrowLeft, ArrowRight, Enter } from \"./key-code\";\nimport { getNodeById, replaceNode } from \"./hierarchical-data-utils\";\nimport { NormalisedTreeSourceNode } from \"./treeTypes\";\n\nconst NO_HANDLERS: CollapsibleHookResult[\"listHandlers\"] = {};\nconst isToggleElement = (element: HTMLElement) =>\n element && element.hasAttribute(\"aria-expanded\");\n\nexport interface CollapsibleGroupsHookProps {\n collapsibleHeaders?: boolean;\n highlightedIdx: number;\n treeNodes: NormalisedTreeSourceNode[];\n setVisibleData: (nodes: NormalisedTreeSourceNode[]) => void;\n source: NormalisedTreeSourceNode[];\n}\n\nexport interface CollapsibleHookResult {\n listHandlers: {\n onKeyDown?: (e: KeyboardEvent) => void;\n };\n listItemHandlers: {\n onClick: (e: MouseEvent) => void;\n };\n}\n\nexport const useCollapsibleGroups = ({\n collapsibleHeaders,\n highlightedIdx,\n treeNodes,\n setVisibleData,\n source,\n}: CollapsibleGroupsHookProps): CollapsibleHookResult => {\n const fullSource = useRef<NormalisedTreeSourceNode[]>(source);\n const stateSource = useRef<NormalisedTreeSourceNode[]>(fullSource.current);\n\n const setSource = useCallback(\n (value) => {\n setVisibleData((stateSource.current = value));\n },\n [setVisibleData]\n );\n\n const expandNode = useCallback(\n (nodeList: NormalisedTreeSourceNode[], { id }: NormalisedTreeSourceNode) =>\n replaceNode(nodeList, id, { expanded: true }),\n []\n );\n\n const collapseNode = useCallback(\n (nodeList, { id }) => replaceNode(nodeList, id, { expanded: false }),\n []\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === ArrowRight || e.key === Enter) {\n const node = treeNodes[highlightedIdx];\n if (node) {\n if (node.expanded === false) {\n e.preventDefault();\n setSource(expandNode(stateSource.current, node));\n }\n }\n }\n\n if (e.key === ArrowLeft || e.key === Enter) {\n const node = treeNodes[highlightedIdx];\n if (node) {\n if (node.expanded) {\n e.preventDefault();\n setSource(collapseNode(stateSource.current, node));\n }\n }\n }\n },\n [collapseNode, expandNode, highlightedIdx, treeNodes, setSource]\n );\n\n /**\n * These are List handlers, so we will not have reference to the actual node\n * element. We must rely on highlightedIdx to tell us which node is interactive.\n */\n const listHandlers = collapsibleHeaders\n ? {\n onKeyDown: handleKeyDown,\n }\n : NO_HANDLERS;\n\n const handleClick = useCallback(\n (evt) => {\n const el = closestListItem(evt.target);\n if (isToggleElement(el)) {\n evt.stopPropagation();\n evt.preventDefault();\n const node = getNodeById(source, el.id);\n if (node?.expanded === false) {\n setSource(expandNode(source, node));\n } else if (node?.expanded === true) {\n setSource(collapseNode(source, node));\n }\n }\n },\n [collapseNode, expandNode, setSource, source]\n );\n\n const listItemHandlers = {\n onClick: handleClick,\n };\n\n return {\n listHandlers,\n listItemHandlers,\n };\n};\n"],"names":[],"mappings":"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"}
|