@vuu-ui/vuu-ui-controls 0.13.2 → 0.13.4
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/cjs/column-picker/ColumnPicker.js +2 -2
- package/cjs/column-picker/ColumnPicker.js.map +1 -1
- package/cjs/column-picker/ColumnSearch.js +4 -24
- package/cjs/column-picker/ColumnSearch.js.map +1 -1
- package/cjs/context-panel-provider/ContextPanelProvider.js +55 -0
- package/cjs/context-panel-provider/ContextPanelProvider.js.map +1 -0
- package/cjs/index.js +6 -80
- package/cjs/index.js.map +1 -1
- package/cjs/sortable-list/SortableList.js +38 -0
- package/cjs/sortable-list/SortableList.js.map +1 -0
- package/cjs/toolbar/Toolbar.js.map +1 -1
- package/cjs/toolbar/useSelection.js +0 -1
- package/cjs/toolbar/useSelection.js.map +1 -1
- package/esm/column-picker/ColumnPicker.js +2 -2
- package/esm/column-picker/ColumnPicker.js.map +1 -1
- package/esm/column-picker/ColumnSearch.js +5 -25
- package/esm/column-picker/ColumnSearch.js.map +1 -1
- package/esm/context-panel-provider/ContextPanelProvider.js +51 -0
- package/esm/context-panel-provider/ContextPanelProvider.js.map +1 -0
- package/esm/index.js +2 -21
- package/esm/index.js.map +1 -1
- package/esm/sortable-list/SortableList.js +35 -0
- package/esm/sortable-list/SortableList.js.map +1 -0
- package/esm/toolbar/Toolbar.js.map +1 -1
- package/esm/toolbar/useSelection.js +0 -1
- package/esm/toolbar/useSelection.js.map +1 -1
- package/package.json +15 -17
- package/cjs/common-hooks/collectionProvider.js +0 -24
- package/cjs/common-hooks/collectionProvider.js.map +0 -1
- package/cjs/common-hooks/isPlainObject.js +0 -6
- package/cjs/common-hooks/isPlainObject.js.map +0 -1
- package/cjs/common-hooks/itemToString.js +0 -24
- package/cjs/common-hooks/itemToString.js.map +0 -1
- package/cjs/common-hooks/useCollectionItems.js +0 -309
- package/cjs/common-hooks/useCollectionItems.js.map +0 -1
- package/cjs/common-hooks/useSelection.js +0 -212
- package/cjs/common-hooks/useSelection.js.map +0 -1
- package/cjs/list/Highlighter.css.js +0 -6
- package/cjs/list/Highlighter.css.js.map +0 -1
- package/cjs/list/Highlighter.js +0 -36
- package/cjs/list/Highlighter.js.map +0 -1
- package/cjs/list/List.css.js +0 -6
- package/cjs/list/List.css.js.map +0 -1
- package/cjs/list/List.js +0 -317
- package/cjs/list/List.js.map +0 -1
- package/cjs/list/ListItem.css.js +0 -6
- package/cjs/list/ListItem.css.js.map +0 -1
- package/cjs/list/ListItem.js +0 -84
- package/cjs/list/ListItem.js.map +0 -1
- package/cjs/list/ListItemGroup.js +0 -6
- package/cjs/list/ListItemGroup.js.map +0 -1
- package/cjs/list/ListItemHeader.js +0 -6
- package/cjs/list/ListItemHeader.js.map +0 -1
- package/cjs/list/RadioIcon.css.js +0 -6
- package/cjs/list/RadioIcon.css.js.map +0 -1
- package/cjs/list/RadioIcon.js +0 -27
- package/cjs/list/RadioIcon.js.map +0 -1
- package/cjs/list/common-hooks/keyUtils.js +0 -78
- package/cjs/list/common-hooks/keyUtils.js.map +0 -1
- package/cjs/list/common-hooks/list-dom-utils.js +0 -25
- package/cjs/list/common-hooks/list-dom-utils.js.map +0 -1
- package/cjs/list/common-hooks/useCollapsibleGroups.js +0 -72
- package/cjs/list/common-hooks/useCollapsibleGroups.js.map +0 -1
- package/cjs/list/common-hooks/useImperativeScrollingAPI.js +0 -52
- package/cjs/list/common-hooks/useImperativeScrollingAPI.js.map +0 -1
- package/cjs/list/common-hooks/useKeyboardNavigation.js +0 -289
- package/cjs/list/common-hooks/useKeyboardNavigation.js.map +0 -1
- package/cjs/list/common-hooks/useTypeahead.js +0 -74
- package/cjs/list/common-hooks/useTypeahead.js.map +0 -1
- package/cjs/list/common-hooks/useViewportTracking.js +0 -133
- package/cjs/list/common-hooks/useViewportTracking.js.map +0 -1
- package/cjs/list/common-hooks/utils/collection-item-utils.js +0 -182
- package/cjs/list/common-hooks/utils/collection-item-utils.js.map +0 -1
- package/cjs/list/common-hooks/utils/filter-utils.js +0 -11
- package/cjs/list/common-hooks/utils/filter-utils.js.map +0 -1
- package/cjs/list/common-hooks/utils/isSelected.js +0 -9
- package/cjs/list/common-hooks/utils/isSelected.js.map +0 -1
- package/cjs/list/useList.js +0 -278
- package/cjs/list/useList.js.map +0 -1
- package/cjs/list/useListDrop.js +0 -92
- package/cjs/list/useListDrop.js.map +0 -1
- package/cjs/list/useListHeight.js +0 -77
- package/cjs/list/useListHeight.js.map +0 -1
- package/cjs/list/useScrollPosition.js +0 -74
- package/cjs/list/useScrollPosition.js.map +0 -1
- package/esm/common-hooks/collectionProvider.js +0 -20
- package/esm/common-hooks/collectionProvider.js.map +0 -1
- package/esm/common-hooks/isPlainObject.js +0 -4
- package/esm/common-hooks/isPlainObject.js.map +0 -1
- package/esm/common-hooks/itemToString.js +0 -22
- package/esm/common-hooks/itemToString.js.map +0 -1
- package/esm/common-hooks/useCollectionItems.js +0 -307
- package/esm/common-hooks/useCollectionItems.js.map +0 -1
- package/esm/common-hooks/useSelection.js +0 -205
- package/esm/common-hooks/useSelection.js.map +0 -1
- package/esm/list/Highlighter.css.js +0 -4
- package/esm/list/Highlighter.css.js.map +0 -1
- package/esm/list/Highlighter.js +0 -34
- package/esm/list/Highlighter.js.map +0 -1
- package/esm/list/List.css.js +0 -4
- package/esm/list/List.css.js.map +0 -1
- package/esm/list/List.js +0 -315
- package/esm/list/List.js.map +0 -1
- package/esm/list/ListItem.css.js +0 -4
- package/esm/list/ListItem.css.js.map +0 -1
- package/esm/list/ListItem.js +0 -81
- package/esm/list/ListItem.js.map +0 -1
- package/esm/list/ListItemGroup.js +0 -4
- package/esm/list/ListItemGroup.js.map +0 -1
- package/esm/list/ListItemHeader.js +0 -4
- package/esm/list/ListItemHeader.js.map +0 -1
- package/esm/list/RadioIcon.css.js +0 -4
- package/esm/list/RadioIcon.css.js.map +0 -1
- package/esm/list/RadioIcon.js +0 -25
- package/esm/list/RadioIcon.js.map +0 -1
- package/esm/list/common-hooks/keyUtils.js +0 -64
- package/esm/list/common-hooks/keyUtils.js.map +0 -1
- package/esm/list/common-hooks/list-dom-utils.js +0 -19
- package/esm/list/common-hooks/list-dom-utils.js.map +0 -1
- package/esm/list/common-hooks/useCollapsibleGroups.js +0 -70
- package/esm/list/common-hooks/useCollapsibleGroups.js.map +0 -1
- package/esm/list/common-hooks/useImperativeScrollingAPI.js +0 -50
- package/esm/list/common-hooks/useImperativeScrollingAPI.js.map +0 -1
- package/esm/list/common-hooks/useKeyboardNavigation.js +0 -286
- package/esm/list/common-hooks/useKeyboardNavigation.js.map +0 -1
- package/esm/list/common-hooks/useTypeahead.js +0 -72
- package/esm/list/common-hooks/useTypeahead.js.map +0 -1
- package/esm/list/common-hooks/useViewportTracking.js +0 -131
- package/esm/list/common-hooks/useViewportTracking.js.map +0 -1
- package/esm/list/common-hooks/utils/collection-item-utils.js +0 -168
- package/esm/list/common-hooks/utils/collection-item-utils.js.map +0 -1
- package/esm/list/common-hooks/utils/filter-utils.js +0 -8
- package/esm/list/common-hooks/utils/filter-utils.js.map +0 -1
- package/esm/list/common-hooks/utils/isSelected.js +0 -7
- package/esm/list/common-hooks/utils/isSelected.js.map +0 -1
- package/esm/list/useList.js +0 -276
- package/esm/list/useList.js.map +0 -1
- package/esm/list/useListDrop.js +0 -90
- package/esm/list/useListDrop.js.map +0 -1
- package/esm/list/useListHeight.js +0 -75
- package/esm/list/useListHeight.js.map +0 -1
- package/esm/list/useScrollPosition.js +0 -72
- package/esm/list/useScrollPosition.js.map +0 -1
- package/types/calendar/Calendar.d.ts +0 -13
- package/types/calendar/index.d.ts +0 -4
- package/types/calendar/internal/CalendarCarousel.d.ts +0 -3
- package/types/calendar/internal/CalendarContext.d.ts +0 -8
- package/types/calendar/internal/CalendarDay.d.ts +0 -14
- package/types/calendar/internal/CalendarMonth.d.ts +0 -10
- package/types/calendar/internal/CalendarNavigation.d.ts +0 -16
- package/types/calendar/internal/CalendarWeekHeader.d.ts +0 -3
- package/types/calendar/internal/useFocusManagement.d.ts +0 -9
- package/types/calendar/internal/utils.d.ts +0 -15
- package/types/calendar/useCalendar.d.ts +0 -54
- package/types/calendar/useCalendarDay.d.ts +0 -22
- package/types/calendar/useSelection.d.ts +0 -78
- package/types/column-picker/ColumnPicker.d.ts +0 -7
- package/types/column-picker/ColumnSearch.d.ts +0 -6
- package/types/column-picker/index.d.ts +0 -2
- package/types/column-picker/moving-window.d.ts +0 -14
- package/types/common-hooks/collectionProvider.d.ts +0 -13
- package/types/common-hooks/collectionTypes.d.ts +0 -58
- package/types/common-hooks/index.d.ts +0 -8
- package/types/common-hooks/isPlainObject.d.ts +0 -1
- package/types/common-hooks/itemToString.d.ts +0 -2
- package/types/common-hooks/navigationTypes.d.ts +0 -36
- package/types/common-hooks/selectionTypes.d.ts +0 -70
- package/types/common-hooks/use-resize-observer.d.ts +0 -16
- package/types/common-hooks/useCollectionItems.d.ts +0 -2
- package/types/common-hooks/useControlled.d.ts +0 -24
- package/types/common-hooks/useSelection.d.ts +0 -8
- package/types/cycle-state-button/CycleStateButton.d.ts +0 -11
- package/types/cycle-state-button/index.d.ts +0 -1
- package/types/date-input/DateInput.d.ts +0 -60
- package/types/date-input/index.d.ts +0 -1
- package/types/date-picker/DatePicker.d.ts +0 -66
- package/types/date-picker/DatePickerContext.d.ts +0 -19
- package/types/date-picker/DatePickerPanel.d.ts +0 -10
- package/types/date-picker/index.d.ts +0 -1
- package/types/drag-drop/DragDropProvider.d.ts +0 -38
- package/types/drag-drop/DragDropState.d.ts +0 -15
- package/types/drag-drop/Draggable.d.ts +0 -13
- package/types/drag-drop/DropIndicator.d.ts +0 -5
- package/types/drag-drop/dragDropTypes.d.ts +0 -100
- package/types/drag-drop/drop-target-utils.d.ts +0 -82
- package/types/drag-drop/index.d.ts +0 -6
- package/types/drag-drop/useAutoScroll.d.ts +0 -11
- package/types/drag-drop/useDragDisplacers.d.ts +0 -17
- package/types/drag-drop/useDragDrop.d.ts +0 -2
- package/types/drag-drop/useDragDropCopy.d.ts +0 -6
- package/types/drag-drop/useDragDropIndicator.d.ts +0 -2
- package/types/drag-drop/useDragDropNaturalMovement.d.ts +0 -2
- package/types/drag-drop/useDropIndicator.d.ts +0 -8
- package/types/drag-drop/useGlobalDragDrop.d.ts +0 -11
- package/types/drag-drop/useTransition.d.ts +0 -3
- package/types/editable/index.d.ts +0 -1
- package/types/editable/useEditableText.d.ts +0 -19
- package/types/editable-label/EditableLabel.d.ts +0 -19
- package/types/editable-label/index.d.ts +0 -1
- package/types/expando-input/ExpandoInput.d.ts +0 -6
- package/types/expando-input/index.d.ts +0 -1
- package/types/icon-button/Icon.d.ts +0 -6
- package/types/icon-button/IconButton.d.ts +0 -6
- package/types/icon-button/ToggleIconButton.d.ts +0 -5
- package/types/icon-button/index.d.ts +0 -3
- package/types/index.d.ts +0 -27
- package/types/instrument-picker/SearchCell.d.ts +0 -2
- package/types/instrument-picker/TablePicker.d.ts +0 -10
- package/types/instrument-picker/index.d.ts +0 -1
- package/types/instrument-picker/moving-window.d.ts +0 -14
- package/types/instrument-picker/useDataSource.d.ts +0 -6
- package/types/instrument-picker/useTablePicker.d.ts +0 -47
- package/types/list/ChevronIcon.d.ts +0 -7
- package/types/list/Highlighter.d.ts +0 -6
- package/types/list/List.d.ts +0 -6
- package/types/list/ListItem.d.ts +0 -6
- package/types/list/ListItemGroup.d.ts +0 -6
- package/types/list/ListItemHeader.d.ts +0 -5
- package/types/list/RadioIcon.d.ts +0 -4
- package/types/list/common-hooks/index.d.ts +0 -10
- package/types/list/common-hooks/keyUtils.d.ts +0 -14
- package/types/list/common-hooks/list-dom-utils.d.ts +0 -5
- package/types/list/common-hooks/useCollapsibleGroups.d.ts +0 -14
- package/types/list/common-hooks/useImperativeScrollingAPI.d.ts +0 -14
- package/types/list/common-hooks/useKeyboardNavigation.d.ts +0 -3
- package/types/list/common-hooks/useTypeahead.d.ts +0 -14
- package/types/list/common-hooks/useViewportTracking.d.ts +0 -14
- package/types/list/common-hooks/utils/collection-item-utils.d.ts +0 -21
- package/types/list/common-hooks/utils/filter-utils.d.ts +0 -4
- package/types/list/common-hooks/utils/index.d.ts +0 -4
- package/types/list/common-hooks/utils/isSelected.d.ts +0 -2
- package/types/list/index.d.ts +0 -9
- package/types/list/keyset.d.ts +0 -9
- package/types/list/listTypes.d.ts +0 -200
- package/types/list/useList.d.ts +0 -3
- package/types/list/useListDrop.d.ts +0 -15
- package/types/list/useListHeight.d.ts +0 -19
- package/types/list/useScrollPosition.d.ts +0 -19
- package/types/measured-container/MeasuredContainer.d.ts +0 -14
- package/types/measured-container/index.d.ts +0 -2
- package/types/measured-container/useMeasuredContainer.d.ts +0 -23
- package/types/measured-container/useResizeObserver.d.ts +0 -15
- package/types/overflow-container/OverflowContainer.d.ts +0 -15
- package/types/overflow-container/index.d.ts +0 -2
- package/types/overflow-container/overflow-utils.d.ts +0 -48
- package/types/overflow-container/useOverflowContainer.d.ts +0 -19
- package/types/price-ticker/PriceTicker.d.ts +0 -7
- package/types/price-ticker/index.d.ts +0 -1
- package/types/split-button/SplitButton.d.ts +0 -11
- package/types/split-button/SplitStateButton.d.ts +0 -5
- package/types/split-button/index.d.ts +0 -2
- package/types/split-button/useSplitButton.d.ts +0 -311
- package/types/table-search/SearchCell.d.ts +0 -2
- package/types/table-search/TableSearch.d.ts +0 -9
- package/types/table-search/index.d.ts +0 -1
- package/types/table-search/moving-window.d.ts +0 -14
- package/types/table-search/useTableSearch.d.ts +0 -15
- package/types/tabs-next/TabBar.d.ts +0 -12
- package/types/tabs-next/TabListNext.d.ts +0 -12
- package/types/tabs-next/TabNext.d.ts +0 -12
- package/types/tabs-next/TabNextAction.d.ts +0 -5
- package/types/tabs-next/TabNextContext.d.ts +0 -12
- package/types/tabs-next/TabNextPanel.d.ts +0 -8
- package/types/tabs-next/TabNextTrigger.d.ts +0 -5
- package/types/tabs-next/TabOverflowList.d.ts +0 -11
- package/types/tabs-next/TabsNext.d.ts +0 -17
- package/types/tabs-next/TabsNextContext.d.ts +0 -21
- package/types/tabs-next/hooks/useCollection.d.ts +0 -18
- package/types/tabs-next/hooks/useFocusOutside.d.ts +0 -2
- package/types/tabs-next/hooks/useOverflow.d.ts +0 -11
- package/types/tabs-next/index.d.ts +0 -7
- package/types/tabstrip/Tab.d.ts +0 -27
- package/types/tabstrip/TabMenu.d.ts +0 -23
- package/types/tabstrip/TabMenuOptions.d.ts +0 -10
- package/types/tabstrip/TabsTypes.d.ts +0 -127
- package/types/tabstrip/Tabstrip.d.ts +0 -2
- package/types/tabstrip/index.d.ts +0 -5
- package/types/tabstrip/tabstrip-dom-utils.d.ts +0 -2
- package/types/tabstrip/useAnimatedSelectionThumb.d.ts +0 -7
- package/types/tabstrip/useKeyboardNavigation.d.ts +0 -29
- package/types/tabstrip/useSelection.d.ts +0 -13
- package/types/tabstrip/useTabstrip.d.ts +0 -55
- package/types/toolbar/Toolbar.d.ts +0 -19
- package/types/toolbar/index.d.ts +0 -1
- package/types/toolbar/toolbar-dom-utils.d.ts +0 -3
- package/types/toolbar/useKeyboardNavigation.d.ts +0 -32
- package/types/toolbar/useSelection.d.ts +0 -22
- package/types/toolbar/useToolbar.d.ts +0 -28
- package/types/utils/deprecated-types.d.ts +0 -2
- package/types/utils/escapeRegExp.d.ts +0 -1
- package/types/utils/forwardCallbackProps.d.ts +0 -3
- package/types/utils/index.d.ts +0 -5
- package/types/utils/isOverflowElement.d.ts +0 -1
- package/types/utils/isPlainObject.d.ts +0 -1
- package/types/vuu-date-picker/VuuDatePicker.d.ts +0 -7
- package/types/vuu-date-picker/index.d.ts +0 -1
- package/types/vuu-input/VuuInput.d.ts +0 -17
- package/types/vuu-input/index.d.ts +0 -1
- package/types/vuu-typeahead-input/VuuTypeaheadInput.d.ts +0 -29
- package/types/vuu-typeahead-input/index.d.ts +0 -1
- package/types/vuu-typeahead-input/useVuuTypeaheadInput.d.ts +0 -15
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var React = require('react');
|
|
4
|
-
var collectionItemUtils = require('../list/common-hooks/utils/collection-item-utils.js');
|
|
5
|
-
var filterUtils = require('../list/common-hooks/utils/filter-utils.js');
|
|
6
|
-
var itemToString = require('./itemToString.js');
|
|
7
|
-
var collectionProvider = require('./collectionProvider.js');
|
|
8
|
-
|
|
9
|
-
const defaultCollectionOptions = {};
|
|
10
|
-
const useCollectionItems = ({
|
|
11
|
-
children,
|
|
12
|
-
id: idRoot,
|
|
13
|
-
options = defaultCollectionOptions,
|
|
14
|
-
// revealSelected = false,
|
|
15
|
-
source
|
|
16
|
-
}) => {
|
|
17
|
-
const { getItemId } = options;
|
|
18
|
-
const [, forceUpdate] = React.useState(null);
|
|
19
|
-
const inheritedCollectionHook = collectionProvider.useCollection();
|
|
20
|
-
const dataRef = React.useRef([]);
|
|
21
|
-
const flattenedDataRef = React.useRef([]);
|
|
22
|
-
const EMPTY_COLLECTION = React.useMemo(() => [], []);
|
|
23
|
-
const filterPattern = React.useRef(options.filterPattern ?? "");
|
|
24
|
-
const disableFilter = options.disableFilter ?? false;
|
|
25
|
-
const {
|
|
26
|
-
getFilterRegex = filterUtils.getDefaultFilterRegex,
|
|
27
|
-
noChildrenLabel,
|
|
28
|
-
itemToString: itemToString$1 = itemToString.itemToString
|
|
29
|
-
} = options;
|
|
30
|
-
const isExpanded = React.useCallback(() => {
|
|
31
|
-
return options.defaultExpanded || false;
|
|
32
|
-
}, [options.defaultExpanded]);
|
|
33
|
-
const addMetadataToItems = React.useCallback(
|
|
34
|
-
(items, indexer, level = 1, path = "", results = [], flattenedCollection2 = [], flattenedSource2 = []) => {
|
|
35
|
-
items.forEach((item, i, all) => {
|
|
36
|
-
const isCollapsibleHeader = item.header && options.collapsibleHeaders;
|
|
37
|
-
const isNonCollapsibleGroupNode = item.childNodes && options.collapsibleHeaders === false;
|
|
38
|
-
const isLeaf = !item.childNodes || item.childNodes.length === 0;
|
|
39
|
-
const nonCollapsible = isNonCollapsibleGroupNode || isLeaf && !isCollapsibleHeader;
|
|
40
|
-
const childPath = path ? `${path}.${i}` : `item-${i}`;
|
|
41
|
-
const id = item.id ?? (getItemId ? getItemId(i) : `${idRoot}-${childPath}`);
|
|
42
|
-
const expanded = nonCollapsible ? void 0 : item.expanded ?? isExpanded();
|
|
43
|
-
const normalisedItem = {
|
|
44
|
-
...item,
|
|
45
|
-
childNodes: void 0,
|
|
46
|
-
count: !isNonCollapsibleGroupNode && expanded === void 0 ? 0 : collectionItemUtils.countChildItems(item, all, i),
|
|
47
|
-
description: item.description,
|
|
48
|
-
disabled: collectionItemUtils.isDisabled(item.value),
|
|
49
|
-
focusable: collectionItemUtils.isFocusable(item.value) ? void 0 : false,
|
|
50
|
-
id,
|
|
51
|
-
index: indexer.value,
|
|
52
|
-
expanded,
|
|
53
|
-
level
|
|
54
|
-
};
|
|
55
|
-
results.push(normalisedItem);
|
|
56
|
-
flattenedCollection2.push(normalisedItem);
|
|
57
|
-
flattenedSource2.push(items[i].value);
|
|
58
|
-
indexer.value += 1;
|
|
59
|
-
if (item.childNodes) {
|
|
60
|
-
const [children2] = addMetadataToItems(
|
|
61
|
-
item.childNodes,
|
|
62
|
-
indexer,
|
|
63
|
-
level + 1,
|
|
64
|
-
childPath,
|
|
65
|
-
[],
|
|
66
|
-
flattenedCollection2,
|
|
67
|
-
flattenedSource2
|
|
68
|
-
);
|
|
69
|
-
normalisedItem.childNodes = children2;
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
return [results, flattenedSource2, flattenedCollection2];
|
|
73
|
-
},
|
|
74
|
-
[options.collapsibleHeaders, getItemId, idRoot, isExpanded]
|
|
75
|
-
);
|
|
76
|
-
const getFilter = React.useCallback(() => {
|
|
77
|
-
if (filterPattern.current && !disableFilter) {
|
|
78
|
-
return filterUtils.getDefaultFilter(filterPattern.current, getFilterRegex);
|
|
79
|
-
} else {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
}, [disableFilter, getFilterRegex]);
|
|
83
|
-
const collectVisibleItems = React.useCallback(
|
|
84
|
-
(items, filter = getFilter(), results = [], idx = { value: 0 }) => {
|
|
85
|
-
let skipToNextHeader = false;
|
|
86
|
-
for (const item of items) {
|
|
87
|
-
if (!(skipToNextHeader && !collectionItemUtils.isHeader(item))) {
|
|
88
|
-
if (item.value !== null && (filter === null || filter(itemToString$1(item.value)))) {
|
|
89
|
-
results[idx.value] = item;
|
|
90
|
-
idx.value += 1;
|
|
91
|
-
}
|
|
92
|
-
skipToNextHeader = false;
|
|
93
|
-
if (collectionItemUtils.isHeader(item) && item.expanded === false) {
|
|
94
|
-
skipToNextHeader = true;
|
|
95
|
-
} else if (collectionItemUtils.isGroupNode(item)) {
|
|
96
|
-
if (item.expanded !== false && item.childNodes) {
|
|
97
|
-
collectVisibleItems(item.childNodes, filter, results, idx);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return results;
|
|
103
|
-
},
|
|
104
|
-
[getFilter, itemToString$1]
|
|
105
|
-
);
|
|
106
|
-
const partialCollectionItems = React.useMemo(() => {
|
|
107
|
-
return inheritedCollectionHook ? EMPTY_COLLECTION : collectionItemUtils.sourceItems(source, { itemToString: itemToString$1, noChildrenLabel }) || collectionItemUtils.childItems(children) || [];
|
|
108
|
-
}, [
|
|
109
|
-
inheritedCollectionHook,
|
|
110
|
-
EMPTY_COLLECTION,
|
|
111
|
-
source,
|
|
112
|
-
itemToString$1,
|
|
113
|
-
noChildrenLabel,
|
|
114
|
-
children
|
|
115
|
-
]);
|
|
116
|
-
const [collectionItems, flattenedSource, flattenedCollection] = React.useMemo(
|
|
117
|
-
() => inheritedCollectionHook ? [EMPTY_COLLECTION, EMPTY_COLLECTION, EMPTY_COLLECTION] : (
|
|
118
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
119
|
-
//@ts-ignore
|
|
120
|
-
addMetadataToItems(partialCollectionItems, { value: 0 })
|
|
121
|
-
),
|
|
122
|
-
[
|
|
123
|
-
EMPTY_COLLECTION,
|
|
124
|
-
addMetadataToItems,
|
|
125
|
-
inheritedCollectionHook,
|
|
126
|
-
partialCollectionItems
|
|
127
|
-
]
|
|
128
|
-
);
|
|
129
|
-
flattenedDataRef.current = flattenedCollection;
|
|
130
|
-
React.useMemo(
|
|
131
|
-
() => inheritedCollectionHook ? EMPTY_COLLECTION : dataRef.current = collectVisibleItems(collectionItems),
|
|
132
|
-
[
|
|
133
|
-
EMPTY_COLLECTION,
|
|
134
|
-
collectVisibleItems,
|
|
135
|
-
collectionItems,
|
|
136
|
-
inheritedCollectionHook
|
|
137
|
-
]
|
|
138
|
-
);
|
|
139
|
-
const collectionItemsRef = React.useRef(collectionItems);
|
|
140
|
-
const setFilterPattern = React.useCallback(
|
|
141
|
-
(pattern = "") => {
|
|
142
|
-
if (typeof pattern === "string") {
|
|
143
|
-
filterPattern.current = pattern;
|
|
144
|
-
dataRef.current = collectVisibleItems(collectionItems);
|
|
145
|
-
forceUpdate({});
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
[collectionItems, collectVisibleItems]
|
|
149
|
-
);
|
|
150
|
-
const itemById = React.useCallback(
|
|
151
|
-
(id, target = collectionItems) => {
|
|
152
|
-
const sourceWithId = target.find(
|
|
153
|
-
(i) => i.id === id || i?.childNodes?.length && collectionItemUtils.isParentPath(i.id, id)
|
|
154
|
-
);
|
|
155
|
-
if (sourceWithId?.id === id) {
|
|
156
|
-
return flattenedSource?.[sourceWithId.index];
|
|
157
|
-
} else if (sourceWithId) {
|
|
158
|
-
return itemById(id, sourceWithId.childNodes);
|
|
159
|
-
}
|
|
160
|
-
throw Error(`useCollectionData itemById, id ${id} not found `);
|
|
161
|
-
},
|
|
162
|
-
[flattenedSource, collectionItems]
|
|
163
|
-
);
|
|
164
|
-
const indexOfItemById = React.useCallback(
|
|
165
|
-
(id, target = collectionItems) => {
|
|
166
|
-
const sourceWithId = target.find(
|
|
167
|
-
(i) => i.id === id || i?.childNodes?.length && collectionItemUtils.isParentPath(i.id, id)
|
|
168
|
-
);
|
|
169
|
-
const idx = sourceWithId ? dataRef.current.indexOf(sourceWithId) : -1;
|
|
170
|
-
if (idx !== -1) {
|
|
171
|
-
return idx;
|
|
172
|
-
}
|
|
173
|
-
throw Error(`useCollectionData indexOfItemById, id ${id} not found `);
|
|
174
|
-
},
|
|
175
|
-
[collectionItems]
|
|
176
|
-
);
|
|
177
|
-
const toCollectionItem = React.useCallback(
|
|
178
|
-
(item) => {
|
|
179
|
-
const collectionItem = flattenedDataRef.current.find(
|
|
180
|
-
(i) => React.isValidElement(i.value) ? i.label === item : i.value === item
|
|
181
|
-
);
|
|
182
|
-
if (collectionItem) {
|
|
183
|
-
return collectionItem;
|
|
184
|
-
}
|
|
185
|
-
throw Error(`useCollectionData toCollectionItem, item not found `);
|
|
186
|
-
},
|
|
187
|
-
[]
|
|
188
|
-
);
|
|
189
|
-
const itemToCollectionItem = React.useCallback(
|
|
190
|
-
(sel) => {
|
|
191
|
-
if (sel === null) {
|
|
192
|
-
return null;
|
|
193
|
-
} else if (Array.isArray(sel)) {
|
|
194
|
-
const result = [];
|
|
195
|
-
for (const item of sel) {
|
|
196
|
-
const collectionItem = toCollectionItem(item);
|
|
197
|
-
result.push(collectionItem);
|
|
198
|
-
}
|
|
199
|
-
return result;
|
|
200
|
-
} else if (sel !== void 0) {
|
|
201
|
-
return toCollectionItem(sel);
|
|
202
|
-
}
|
|
203
|
-
return void 0;
|
|
204
|
-
},
|
|
205
|
-
[toCollectionItem]
|
|
206
|
-
);
|
|
207
|
-
const itemToCollectionItemId = React.useCallback(
|
|
208
|
-
(sel) => {
|
|
209
|
-
if (sel === void 0) {
|
|
210
|
-
return void 0;
|
|
211
|
-
}
|
|
212
|
-
const selectedCollectionItem = itemToCollectionItem(sel);
|
|
213
|
-
if (Array.isArray(selectedCollectionItem)) {
|
|
214
|
-
return selectedCollectionItem.map((i) => i.id);
|
|
215
|
-
} else if (selectedCollectionItem) {
|
|
216
|
-
return [selectedCollectionItem.id];
|
|
217
|
-
} else {
|
|
218
|
-
return [];
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
[itemToCollectionItem]
|
|
222
|
-
);
|
|
223
|
-
const stringToCollectionItem = React.useCallback(
|
|
224
|
-
(value) => {
|
|
225
|
-
const toCollectionItem2 = (item) => {
|
|
226
|
-
const collectionItem = flattenedDataRef.current.find(
|
|
227
|
-
(i) => (
|
|
228
|
-
// const collectionItem = collectionItemsRef.current.find((i) =>
|
|
229
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
230
|
-
//@ts-ignore
|
|
231
|
-
React.isValidElement(i.value) ? i.label === item : i.value !== null && itemToString$1(i.value) === item
|
|
232
|
-
)
|
|
233
|
-
);
|
|
234
|
-
if (collectionItem) {
|
|
235
|
-
return collectionItem;
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
if (value === null) {
|
|
239
|
-
return null;
|
|
240
|
-
} else if (Array.isArray(value)) {
|
|
241
|
-
const result = [];
|
|
242
|
-
for (const item of value) {
|
|
243
|
-
const collectionItem = toCollectionItem2(item);
|
|
244
|
-
if (collectionItem) {
|
|
245
|
-
result.push(collectionItem);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return result;
|
|
249
|
-
} else if (value !== void 0) {
|
|
250
|
-
return toCollectionItem2(value);
|
|
251
|
-
}
|
|
252
|
-
return void 0;
|
|
253
|
-
},
|
|
254
|
-
[itemToString$1]
|
|
255
|
-
);
|
|
256
|
-
const itemToId = React.useCallback((item) => {
|
|
257
|
-
for (const collectionItem of collectionItemsRef.current) {
|
|
258
|
-
if (item === collectionItem.value) {
|
|
259
|
-
return collectionItem.id;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
throw Error("useCollectionData itemToId, item not found");
|
|
263
|
-
}, []);
|
|
264
|
-
const collapseGroupItem = React.useCallback(
|
|
265
|
-
(item) => {
|
|
266
|
-
collectionItemsRef.current = collectionItemUtils.replaceCollectionItem(
|
|
267
|
-
collectionItemsRef.current,
|
|
268
|
-
item.id,
|
|
269
|
-
{
|
|
270
|
-
expanded: false
|
|
271
|
-
}
|
|
272
|
-
);
|
|
273
|
-
dataRef.current = collectVisibleItems(collectionItemsRef.current);
|
|
274
|
-
forceUpdate({});
|
|
275
|
-
},
|
|
276
|
-
[collectVisibleItems]
|
|
277
|
-
);
|
|
278
|
-
const expandGroupItem = React.useCallback(
|
|
279
|
-
(item) => {
|
|
280
|
-
collectionItemsRef.current = collectionItemUtils.replaceCollectionItem(
|
|
281
|
-
collectionItemsRef.current,
|
|
282
|
-
item.id,
|
|
283
|
-
{
|
|
284
|
-
expanded: true
|
|
285
|
-
}
|
|
286
|
-
);
|
|
287
|
-
dataRef.current = collectVisibleItems(collectionItemsRef.current);
|
|
288
|
-
forceUpdate({});
|
|
289
|
-
},
|
|
290
|
-
[collectVisibleItems]
|
|
291
|
-
);
|
|
292
|
-
return inheritedCollectionHook || {
|
|
293
|
-
collapseGroupItem,
|
|
294
|
-
data: dataRef.current,
|
|
295
|
-
expandGroupItem,
|
|
296
|
-
// why not toggle, or just rely on setdata ?
|
|
297
|
-
setFilterPattern,
|
|
298
|
-
indexOfItemById,
|
|
299
|
-
itemById,
|
|
300
|
-
itemToId,
|
|
301
|
-
toCollectionItem,
|
|
302
|
-
itemToCollectionItem,
|
|
303
|
-
itemToCollectionItemId,
|
|
304
|
-
stringToCollectionItem
|
|
305
|
-
};
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
exports.useCollectionItems = useCollectionItems;
|
|
309
|
-
//# sourceMappingURL=useCollectionItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCollectionItems.js","sources":["../../src/common-hooks/useCollectionItems.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState, isValidElement } from \"react\";\nimport {\n CollectionItem,\n CollectionIndexer,\n CollectionHookProps,\n CollectionHookResult,\n} from \"./collectionTypes\";\nimport {\n isHeader,\n isGroupNode,\n childItems,\n countChildItems,\n FilterPredicate,\n getDefaultFilter,\n getDefaultFilterRegex,\n isDisabled,\n isFocusable,\n isParentPath,\n replaceCollectionItem,\n sourceItems,\n} from \"../list/common-hooks/utils\";\nimport { itemToString as defaultItemToString } from \"./itemToString\";\n\nimport { useCollection } from \"./collectionProvider\";\n\nconst defaultCollectionOptions = {};\n\nexport const useCollectionItems = <Item>({\n children,\n id: idRoot,\n options = defaultCollectionOptions,\n // revealSelected = false,\n source,\n}: CollectionHookProps<Item>): CollectionHookResult<Item> => {\n const { getItemId } = options;\n const [, forceUpdate] = useState<unknown>(null);\n const inheritedCollectionHook = useCollection<Item>();\n const dataRef = useRef<CollectionItem<Item>[]>([]);\n const flattenedDataRef = useRef<CollectionItem<Item>[]>([]);\n const EMPTY_COLLECTION: CollectionItem<Item>[] = useMemo(() => [], []);\n const filterPattern = useRef<string>(options.filterPattern ?? \"\");\n const disableFilter = options.disableFilter ?? false;\n\n // destructure individual option values so we can safely reference them in dependency arrays\n const {\n getFilterRegex = getDefaultFilterRegex,\n noChildrenLabel,\n itemToString = defaultItemToString,\n } = options;\n\n const isExpanded = useCallback(() => {\n // We can't do this here because itemToId won't work until we complete this phase\n // if (Array.isArray(revealSelected)) {\n // const selectedIds = revealSelected.map(itemToId);\n // return selectedIds.some((id) => isParentPath(path, id));\n // }\n return options.defaultExpanded || false;\n }, [options.defaultExpanded]);\n\n const addMetadataToItems = useCallback(\n <Item>(\n items: CollectionItem<Item>[],\n indexer: CollectionIndexer,\n level = 1,\n path = \"\",\n results: CollectionItem<Item>[] = [],\n flattenedCollection: CollectionItem<Item>[] = [],\n flattenedSource: (Item | null)[] = [],\n ): [CollectionItem<Item>[], (Item | null)[], CollectionItem<Item>[]] => {\n items.forEach((item, i, all) => {\n const isCollapsibleHeader = item.header && options.collapsibleHeaders;\n const isNonCollapsibleGroupNode =\n item.childNodes && options.collapsibleHeaders === false;\n const isLeaf = !item.childNodes || item.childNodes.length === 0;\n const nonCollapsible =\n isNonCollapsibleGroupNode || (isLeaf && !isCollapsibleHeader);\n const childPath = path ? `${path}.${i}` : `item-${i}`;\n // getItemId is backward compatible with earlier List implementation.\n // It is not appropriate for a nested source structure, where index\n // will not always be an absolute offset.\n const id =\n item.id ?? (getItemId ? getItemId(i) : `${idRoot}-${childPath}`);\n\n const expanded = nonCollapsible\n ? undefined\n : (item.expanded ?? isExpanded());\n //TODO dev time check - if id is provided by user, make sure\n // hierarchical pattern is consistent\n const normalisedItem: CollectionItem<Item> = {\n ...item,\n childNodes: undefined,\n count:\n !isNonCollapsibleGroupNode && expanded === undefined\n ? 0\n : countChildItems(item, all, i),\n description: item.description,\n disabled: isDisabled(item.value),\n focusable: isFocusable(item.value) ? undefined : false,\n id,\n index: indexer.value,\n expanded,\n level,\n };\n results.push(normalisedItem);\n flattenedCollection.push(normalisedItem);\n flattenedSource.push(items[i].value);\n\n indexer.value += 1;\n\n // if ((isNonCollapsibleGroupNode || expanded !== undefined) && !isCollapsibleHeader) {\n if (item.childNodes) {\n const [children] = addMetadataToItems<Item>(\n item.childNodes,\n indexer,\n level + 1,\n childPath,\n [],\n flattenedCollection,\n flattenedSource,\n );\n normalisedItem.childNodes = children;\n }\n });\n return [results, flattenedSource, flattenedCollection];\n },\n [options.collapsibleHeaders, getItemId, idRoot, isExpanded],\n );\n\n const getFilter = useCallback(() => {\n if (filterPattern.current && !disableFilter) {\n return getDefaultFilter(filterPattern.current, getFilterRegex);\n } else {\n return null;\n }\n }, [disableFilter, getFilterRegex]);\n\n const collectVisibleItems = useCallback(\n (\n items: CollectionItem<Item>[],\n filter: null | FilterPredicate = getFilter(),\n results: CollectionItem<Item>[] = [],\n idx: { value: number } = { value: 0 },\n ): CollectionItem<Item>[] => {\n let skipToNextHeader = false;\n for (const item of items) {\n if (!(skipToNextHeader && !isHeader(item))) {\n if (\n item.value !== null &&\n (filter === null || filter(itemToString(item.value)))\n ) {\n results[idx.value] = item;\n idx.value += 1;\n }\n skipToNextHeader = false;\n if (isHeader(item) && item.expanded === false) {\n skipToNextHeader = true;\n } else if (isGroupNode(item)) {\n if (item.expanded !== false && item.childNodes) {\n collectVisibleItems(item.childNodes, filter, results, idx);\n }\n }\n }\n }\n return results;\n },\n [getFilter, itemToString],\n );\n\n // Stage 1 - convert source or children to CollectionItems.\n const partialCollectionItems = useMemo(() => {\n return inheritedCollectionHook\n ? EMPTY_COLLECTION\n : sourceItems<Item>(source, { itemToString, noChildrenLabel }) ||\n childItems(children) ||\n [];\n }, [\n inheritedCollectionHook,\n EMPTY_COLLECTION,\n source,\n itemToString,\n noChildrenLabel,\n children,\n ]);\n\n // Stage 2 - extend the collectionItems with additional metadata\n const [collectionItems, flattenedSource, flattenedCollection] = useMemo(\n () =>\n inheritedCollectionHook\n ? [EMPTY_COLLECTION, EMPTY_COLLECTION, EMPTY_COLLECTION]\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n addMetadataToItems<Item>(partialCollectionItems, { value: 0 }),\n [\n EMPTY_COLLECTION,\n addMetadataToItems,\n inheritedCollectionHook,\n partialCollectionItems,\n ],\n );\n flattenedDataRef.current = flattenedCollection;\n\n // Stage 3 prepare the list of visible items, this is what will be rendered\n useMemo(\n () =>\n inheritedCollectionHook\n ? EMPTY_COLLECTION\n : (dataRef.current = collectVisibleItems(collectionItems)),\n [\n EMPTY_COLLECTION,\n collectVisibleItems,\n collectionItems,\n inheritedCollectionHook,\n ],\n );\n\n const collectionItemsRef = useRef(collectionItems);\n\n const setFilterPattern = useCallback(\n (pattern = \"\") => {\n if (typeof pattern === \"string\") {\n filterPattern.current = pattern;\n dataRef.current = collectVisibleItems(collectionItems);\n forceUpdate({});\n }\n },\n [collectionItems, collectVisibleItems],\n );\n\n const itemById = useCallback(\n (\n id: string,\n target: CollectionItem<Item>[] = collectionItems,\n ): Item | never => {\n const sourceWithId = target.find(\n (i) => i.id === id || (i?.childNodes?.length && isParentPath(i.id, id)),\n );\n if (sourceWithId?.id === id) {\n //TODO do we need the flattered source at all ?\n return flattenedSource?.[sourceWithId.index!] as Item;\n } else if (sourceWithId) {\n return itemById(id, sourceWithId.childNodes);\n }\n throw Error(`useCollectionData itemById, id ${id} not found `);\n },\n [flattenedSource, collectionItems],\n );\n\n const indexOfItemById = useCallback(\n (\n id: string,\n target: CollectionItem<Item>[] = collectionItems,\n ): number | never => {\n const sourceWithId = target.find(\n (i) => i.id === id || (i?.childNodes?.length && isParentPath(i.id, id)),\n );\n const idx = sourceWithId ? dataRef.current.indexOf(sourceWithId) : -1;\n if (idx !== -1) {\n return idx;\n }\n throw Error(`useCollectionData indexOfItemById, id ${id} not found `);\n },\n [collectionItems],\n );\n\n const toCollectionItem = useCallback(\n (item: Item): CollectionItem<Item> | never => {\n // TODO what about Tree structures, we need to search flattened source\n const collectionItem = flattenedDataRef.current.find((i) =>\n isValidElement(i.value) ? i.label === item : i.value === item,\n );\n if (collectionItem) {\n return collectionItem;\n }\n throw Error(`useCollectionData toCollectionItem, item not found `);\n },\n [],\n );\n\n // TODO types need more work, these are correct but we\n // don't really want references to Selection in here\n const itemToCollectionItem = useCallback(\n (sel: Item) => {\n if (sel === null) {\n return null;\n } else if (Array.isArray(sel)) {\n const result: CollectionItem<Item>[] = [];\n for (const item of sel) {\n const collectionItem = toCollectionItem(item);\n result.push(collectionItem);\n }\n return result;\n } else if (sel !== undefined) {\n return toCollectionItem(sel as Item);\n }\n\n return undefined;\n },\n [toCollectionItem],\n );\n\n const itemToCollectionItemId = useCallback(\n (sel: Item) => {\n if (sel === undefined) {\n return undefined;\n }\n\n const selectedCollectionItem = itemToCollectionItem(sel);\n if (Array.isArray(selectedCollectionItem)) {\n return selectedCollectionItem.map((i) => i.id);\n } else if (selectedCollectionItem) {\n return [selectedCollectionItem.id];\n } else {\n return [];\n }\n },\n [itemToCollectionItem],\n );\n\n const stringToCollectionItem = useCallback(\n (value: string | null | undefined) => {\n const toCollectionItem = (\n item: string,\n ): undefined | CollectionItem<Item> | never => {\n // TODO what about Tree structures, we need to search flattened source\n const collectionItem = flattenedDataRef.current.find((i) =>\n // const collectionItem = collectionItemsRef.current.find((i) =>\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n isValidElement(i.value)\n ? i.label === item\n : i.value !== null && itemToString(i.value) === item,\n );\n if (collectionItem) {\n return collectionItem;\n }\n };\n\n if (value === null) {\n return null;\n } else if (Array.isArray(value)) {\n const result: CollectionItem<Item>[] = [];\n for (const item of value) {\n const collectionItem = toCollectionItem(item);\n if (collectionItem) {\n result.push(collectionItem);\n }\n }\n return result;\n } else if (value !== undefined) {\n return toCollectionItem(value);\n }\n\n return undefined;\n },\n [itemToString],\n );\n\n const itemToId = useCallback((item: Item): string => {\n for (const collectionItem of collectionItemsRef.current) {\n if (item === collectionItem.value) {\n return collectionItem.id;\n }\n }\n throw Error(\"useCollectionData itemToId, item not found\");\n }, []);\n\n const collapseGroupItem = useCallback(\n (item: CollectionItem<Item>) => {\n collectionItemsRef.current = replaceCollectionItem(\n collectionItemsRef.current,\n item.id,\n {\n expanded: false,\n },\n );\n dataRef.current = collectVisibleItems(collectionItemsRef.current);\n forceUpdate({});\n },\n [collectVisibleItems],\n );\n\n const expandGroupItem = useCallback(\n (item: CollectionItem<Item>) => {\n collectionItemsRef.current = replaceCollectionItem<Item>(\n collectionItemsRef.current,\n item.id,\n {\n expanded: true,\n },\n );\n dataRef.current = collectVisibleItems(collectionItemsRef.current);\n forceUpdate({});\n },\n [collectVisibleItems],\n );\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (\n inheritedCollectionHook || {\n collapseGroupItem,\n data: dataRef.current,\n expandGroupItem, // why not toggle, or just rely on setdata ?\n setFilterPattern,\n indexOfItemById,\n itemById,\n itemToId,\n toCollectionItem,\n itemToCollectionItem,\n itemToCollectionItemId,\n stringToCollectionItem,\n }\n );\n};\n"],"names":["useState","useCollection","useRef","useMemo","getDefaultFilterRegex","itemToString","defaultItemToString","useCallback","flattenedCollection","flattenedSource","countChildItems","isDisabled","isFocusable","children","getDefaultFilter","isHeader","isGroupNode","sourceItems","childItems","isParentPath","isValidElement","toCollectionItem","replaceCollectionItem"],"mappings":"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"}
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var React = require('react');
|
|
5
|
-
var selectionTypes = require('./selectionTypes.js');
|
|
6
|
-
var useControlled = require('./useControlled.js');
|
|
7
|
-
|
|
8
|
-
const CHECKBOX = "checkbox";
|
|
9
|
-
const GROUP_SELECTION_NONE = "none";
|
|
10
|
-
const GROUP_SELECTION_SINGLE = "single";
|
|
11
|
-
const GROUP_SELECTION_CASCADE = "cascade";
|
|
12
|
-
const defaultSelectionKeys = ["Enter", " "];
|
|
13
|
-
const groupSelectionEnabled = (groupSelection) => groupSelection && groupSelection !== GROUP_SELECTION_NONE;
|
|
14
|
-
const useSelection = ({
|
|
15
|
-
containerRef,
|
|
16
|
-
defaultSelected,
|
|
17
|
-
disableSelection = false,
|
|
18
|
-
// groupSelection = GROUP_SELECTION_NONE,
|
|
19
|
-
highlightedIndex,
|
|
20
|
-
itemQuery,
|
|
21
|
-
onClick,
|
|
22
|
-
// label,
|
|
23
|
-
onSelect,
|
|
24
|
-
onSelectionChange,
|
|
25
|
-
selected: selectedProp,
|
|
26
|
-
selectionStrategy,
|
|
27
|
-
selectionKeys = defaultSelectionKeys,
|
|
28
|
-
tabToSelect
|
|
29
|
-
}) => {
|
|
30
|
-
const isDeselectable = selectionStrategy === "deselectable";
|
|
31
|
-
const isMultipleSelect = selectionStrategy === "multiple";
|
|
32
|
-
const isExtendedSelect = selectionStrategy === "extended";
|
|
33
|
-
const lastActive = React.useRef(-1);
|
|
34
|
-
const isSelectionEvent = React.useCallback(
|
|
35
|
-
(evt) => selectionKeys.includes(evt.key),
|
|
36
|
-
[selectionKeys]
|
|
37
|
-
);
|
|
38
|
-
const [selected, setSelected] = useControlled.useControlled({
|
|
39
|
-
controlled: selectedProp,
|
|
40
|
-
default: defaultSelected ?? [],
|
|
41
|
-
name: "UseSelection",
|
|
42
|
-
state: "selected"
|
|
43
|
-
});
|
|
44
|
-
const isItemSelected = React.useCallback(
|
|
45
|
-
(itemId) => selected.includes(itemId),
|
|
46
|
-
[selected]
|
|
47
|
-
);
|
|
48
|
-
const selectDeselectable = React.useCallback(
|
|
49
|
-
(itemId) => isItemSelected(itemId) ? [] : [itemId],
|
|
50
|
-
[isItemSelected]
|
|
51
|
-
);
|
|
52
|
-
const selectMultiple = React.useCallback(
|
|
53
|
-
(itemId) => {
|
|
54
|
-
const nextItems = isItemSelected(itemId) ? selected.filter((i) => i !== itemId) : selected.concat(itemId);
|
|
55
|
-
nextItems.sort();
|
|
56
|
-
return nextItems;
|
|
57
|
-
},
|
|
58
|
-
[isItemSelected, selected]
|
|
59
|
-
);
|
|
60
|
-
const selectRange = React.useCallback(
|
|
61
|
-
(idx, preserveExistingSelection) => {
|
|
62
|
-
const currentSelection = preserveExistingSelection ? selected : [];
|
|
63
|
-
const [lastSelectedItemId] = selected.slice(-1);
|
|
64
|
-
const lastSelectedItemIndex = lastSelectedItemId ? vuuUtils.getElementDataIndex(document.getElementById(lastSelectedItemId)) : 0;
|
|
65
|
-
const startRegion = Math.min(idx, lastSelectedItemIndex);
|
|
66
|
-
const endRegion = Math.max(idx, lastSelectedItemIndex);
|
|
67
|
-
const container = containerRef.current;
|
|
68
|
-
const allItems = Array.from(
|
|
69
|
-
container.querySelectorAll(itemQuery)
|
|
70
|
-
);
|
|
71
|
-
const rangeSelection = allItems.slice(startRegion, endRegion + 1).map((el) => el.id);
|
|
72
|
-
const nextItems = [.../* @__PURE__ */ new Set([...currentSelection, ...rangeSelection])];
|
|
73
|
-
nextItems.sort();
|
|
74
|
-
return nextItems;
|
|
75
|
-
},
|
|
76
|
-
[containerRef, itemQuery, selected]
|
|
77
|
-
);
|
|
78
|
-
const selectItemAtIndex = React.useCallback(
|
|
79
|
-
(evt, idx, rangeSelect, preserveExistingSelection) => {
|
|
80
|
-
const { current: container } = containerRef;
|
|
81
|
-
const { id } = vuuUtils.getElementByDataIndex(container, idx, true);
|
|
82
|
-
let newSelected;
|
|
83
|
-
if (isMultipleSelect) {
|
|
84
|
-
newSelected = selectMultiple(id);
|
|
85
|
-
} else if (isExtendedSelect) {
|
|
86
|
-
if (preserveExistingSelection && !rangeSelect) {
|
|
87
|
-
newSelected = selectMultiple(id);
|
|
88
|
-
} else if (rangeSelect) {
|
|
89
|
-
newSelected = selectRange(idx, preserveExistingSelection);
|
|
90
|
-
} else {
|
|
91
|
-
newSelected = [id];
|
|
92
|
-
}
|
|
93
|
-
} else if (isDeselectable) {
|
|
94
|
-
newSelected = selectDeselectable(id);
|
|
95
|
-
} else {
|
|
96
|
-
newSelected = [id];
|
|
97
|
-
}
|
|
98
|
-
if (newSelected !== selected) {
|
|
99
|
-
setSelected(newSelected);
|
|
100
|
-
}
|
|
101
|
-
onSelect?.(evt, id);
|
|
102
|
-
if (newSelected !== selected) {
|
|
103
|
-
if (onSelectionChange) {
|
|
104
|
-
onSelectionChange(evt, newSelected);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
[
|
|
109
|
-
containerRef,
|
|
110
|
-
isMultipleSelect,
|
|
111
|
-
isExtendedSelect,
|
|
112
|
-
isDeselectable,
|
|
113
|
-
selected,
|
|
114
|
-
onSelect,
|
|
115
|
-
selectMultiple,
|
|
116
|
-
selectRange,
|
|
117
|
-
selectDeselectable,
|
|
118
|
-
setSelected,
|
|
119
|
-
onSelectionChange
|
|
120
|
-
]
|
|
121
|
-
);
|
|
122
|
-
const handleKeyDown = React.useCallback(
|
|
123
|
-
(evt) => {
|
|
124
|
-
const { current: container } = containerRef;
|
|
125
|
-
const element = vuuUtils.getElementByDataIndex(container, highlightedIndex);
|
|
126
|
-
if (vuuUtils.isSelectableElement(element)) {
|
|
127
|
-
if (isSelectionEvent(evt) || tabToSelect && evt.key === "Tab") {
|
|
128
|
-
if (evt.key !== "Tab") {
|
|
129
|
-
evt.preventDefault();
|
|
130
|
-
}
|
|
131
|
-
selectItemAtIndex(
|
|
132
|
-
evt,
|
|
133
|
-
highlightedIndex,
|
|
134
|
-
false,
|
|
135
|
-
evt.ctrlKey || evt.metaKey
|
|
136
|
-
);
|
|
137
|
-
if (isExtendedSelect) {
|
|
138
|
-
lastActive.current = highlightedIndex;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
[
|
|
144
|
-
highlightedIndex,
|
|
145
|
-
containerRef,
|
|
146
|
-
isSelectionEvent,
|
|
147
|
-
tabToSelect,
|
|
148
|
-
selectItemAtIndex,
|
|
149
|
-
isExtendedSelect
|
|
150
|
-
]
|
|
151
|
-
);
|
|
152
|
-
const handleKeyboardNavigation = React.useCallback(
|
|
153
|
-
(evt, currentIndex) => {
|
|
154
|
-
if (isExtendedSelect && evt.shiftKey) {
|
|
155
|
-
const { current: container } = containerRef;
|
|
156
|
-
const element = vuuUtils.getElementByDataIndex(container, currentIndex);
|
|
157
|
-
if (vuuUtils.isSelectableElement(element)) {
|
|
158
|
-
selectItemAtIndex(evt, currentIndex, true);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
[isExtendedSelect, containerRef, selectItemAtIndex]
|
|
163
|
-
);
|
|
164
|
-
const handleClick = React.useCallback(
|
|
165
|
-
(evt) => {
|
|
166
|
-
const { current: container } = containerRef;
|
|
167
|
-
const element = vuuUtils.getElementByDataIndex(container, highlightedIndex);
|
|
168
|
-
if (!disableSelection && vuuUtils.isSelectableElement(element)) {
|
|
169
|
-
evt.preventDefault();
|
|
170
|
-
evt.stopPropagation();
|
|
171
|
-
selectItemAtIndex(
|
|
172
|
-
evt,
|
|
173
|
-
highlightedIndex,
|
|
174
|
-
evt.shiftKey,
|
|
175
|
-
evt.ctrlKey || evt.metaKey
|
|
176
|
-
);
|
|
177
|
-
if (isExtendedSelect) {
|
|
178
|
-
lastActive.current = highlightedIndex;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
onClick?.(evt);
|
|
182
|
-
},
|
|
183
|
-
[
|
|
184
|
-
containerRef,
|
|
185
|
-
highlightedIndex,
|
|
186
|
-
disableSelection,
|
|
187
|
-
onClick,
|
|
188
|
-
selectItemAtIndex,
|
|
189
|
-
isExtendedSelect
|
|
190
|
-
]
|
|
191
|
-
);
|
|
192
|
-
const listHandlers = selectionTypes.selectionIsDisallowed(selectionStrategy) ? {
|
|
193
|
-
onClick
|
|
194
|
-
} : {
|
|
195
|
-
onClick: handleClick,
|
|
196
|
-
onKeyDown: handleKeyDown,
|
|
197
|
-
onKeyboardNavigation: handleKeyboardNavigation
|
|
198
|
-
};
|
|
199
|
-
return {
|
|
200
|
-
listHandlers,
|
|
201
|
-
selected,
|
|
202
|
-
setSelected
|
|
203
|
-
};
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
exports.CHECKBOX = CHECKBOX;
|
|
207
|
-
exports.GROUP_SELECTION_CASCADE = GROUP_SELECTION_CASCADE;
|
|
208
|
-
exports.GROUP_SELECTION_NONE = GROUP_SELECTION_NONE;
|
|
209
|
-
exports.GROUP_SELECTION_SINGLE = GROUP_SELECTION_SINGLE;
|
|
210
|
-
exports.groupSelectionEnabled = groupSelectionEnabled;
|
|
211
|
-
exports.useSelection = useSelection;
|
|
212
|
-
//# sourceMappingURL=useSelection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSelection.js","sources":["../../src/common-hooks/useSelection.ts"],"sourcesContent":["import {\n getElementByDataIndex,\n getElementDataIndex,\n isSelectableElement,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n MouseEvent,\n SyntheticEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport {\n SelectionHookProps,\n SelectionHookResult,\n selectionIsDisallowed,\n} from \"./selectionTypes\";\nimport { useControlled } from \"./useControlled\";\n\nexport const CHECKBOX = \"checkbox\";\n\nexport const GROUP_SELECTION_NONE = \"none\";\nexport const GROUP_SELECTION_SINGLE = \"single\";\nexport const GROUP_SELECTION_CASCADE = \"cascade\";\n\nexport type GroupSelectionMode = \"none\" | \"single\" | \"cascade\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nexport const groupSelectionEnabled = (\n groupSelection: GroupSelectionMode,\n): boolean => groupSelection && groupSelection !== GROUP_SELECTION_NONE;\n\nexport const useSelection = ({\n containerRef,\n defaultSelected,\n disableSelection = false,\n // groupSelection = GROUP_SELECTION_NONE,\n highlightedIndex,\n itemQuery,\n onClick,\n // label,\n onSelect,\n onSelectionChange,\n selected: selectedProp,\n selectionStrategy,\n selectionKeys = defaultSelectionKeys,\n tabToSelect,\n}: SelectionHookProps): SelectionHookResult => {\n const isDeselectable = selectionStrategy === \"deselectable\";\n const isMultipleSelect = selectionStrategy === \"multiple\";\n const isExtendedSelect = selectionStrategy === \"extended\";\n const lastActive = useRef(-1);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent) => selectionKeys.includes(evt.key),\n [selectionKeys],\n );\n\n const [selected, setSelected] = useControlled<string[]>({\n controlled: selectedProp,\n default: defaultSelected ?? [],\n name: \"UseSelection\",\n state: \"selected\",\n });\n\n const isItemSelected = useCallback(\n (itemId: string) => selected.includes(itemId),\n [selected],\n );\n\n const selectDeselectable = useCallback(\n (itemId: string) => (isItemSelected(itemId) ? [] : [itemId]),\n [isItemSelected],\n );\n const selectMultiple = useCallback(\n (itemId: string) => {\n const nextItems = isItemSelected(itemId)\n ? (selected as string[]).filter((i) => i !== itemId)\n : (selected as string[]).concat(itemId);\n nextItems.sort();\n return nextItems;\n },\n [isItemSelected, selected],\n );\n const selectRange = useCallback(\n (idx: number, preserveExistingSelection?: boolean) => {\n const currentSelection = preserveExistingSelection\n ? (selected as string[])\n : ([] as string[]);\n\n const [lastSelectedItemId] = (selected as string[]).slice(-1);\n const lastSelectedItemIndex = lastSelectedItemId\n ? getElementDataIndex(document.getElementById(lastSelectedItemId))\n : 0;\n\n const startRegion = Math.min(idx, lastSelectedItemIndex);\n const endRegion = Math.max(idx, lastSelectedItemIndex);\n\n const container = containerRef.current as HTMLElement;\n const allItems = Array.from(\n container.querySelectorAll(itemQuery),\n ) as HTMLElement[];\n const rangeSelection = allItems\n .slice(startRegion, endRegion + 1)\n .map((el) => el.id);\n // concat the current selection with a new selection and remove duplicates for overlaps\n const nextItems = [...new Set([...currentSelection, ...rangeSelection])];\n nextItems.sort();\n return nextItems;\n },\n [containerRef, itemQuery, selected],\n );\n\n const selectItemAtIndex = useCallback(\n (\n evt: SyntheticEvent,\n idx: number,\n rangeSelect: boolean,\n preserveExistingSelection?: boolean,\n ) => {\n const { current: container } = containerRef;\n const { id } = getElementByDataIndex(container, idx, true);\n\n let newSelected;\n if (isMultipleSelect) {\n newSelected = selectMultiple(id);\n } else if (isExtendedSelect) {\n if (preserveExistingSelection && !rangeSelect) {\n newSelected = selectMultiple(id);\n } else if (rangeSelect) {\n newSelected = selectRange(idx, preserveExistingSelection);\n } else {\n newSelected = [id];\n }\n } else if (isDeselectable) {\n newSelected = selectDeselectable(id);\n } else {\n newSelected = [id];\n }\n\n if (newSelected !== selected) {\n setSelected(newSelected);\n }\n\n // We fire onSelect irrespective of whether selection changes\n onSelect?.(evt, id);\n\n if (newSelected !== selected) {\n if (onSelectionChange) {\n onSelectionChange(evt, newSelected);\n }\n }\n },\n [\n containerRef,\n isMultipleSelect,\n isExtendedSelect,\n isDeselectable,\n selected,\n onSelect,\n selectMultiple,\n selectRange,\n selectDeselectable,\n setSelected,\n onSelectionChange,\n ],\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n const { current: container } = containerRef;\n const element = getElementByDataIndex(container, highlightedIndex);\n if (isSelectableElement(element)) {\n if (isSelectionEvent(evt) || (tabToSelect && evt.key === \"Tab\")) {\n // We do not inhibit Tab behaviour, if we are selecting on Tab then we apply\n // selection as a side effect of the Tab, not as a replacement for Tabbing.\n if (evt.key !== \"Tab\") {\n evt.preventDefault();\n }\n selectItemAtIndex(\n evt,\n highlightedIndex,\n false,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = highlightedIndex;\n }\n }\n }\n },\n [\n highlightedIndex,\n containerRef,\n isSelectionEvent,\n tabToSelect,\n selectItemAtIndex,\n isExtendedSelect,\n ],\n );\n\n const handleKeyboardNavigation = useCallback(\n (evt: KeyboardEvent, currentIndex: number) => {\n if (isExtendedSelect && evt.shiftKey) {\n const { current: container } = containerRef;\n const element = getElementByDataIndex(container, currentIndex);\n if (isSelectableElement(element)) {\n selectItemAtIndex(evt, currentIndex, true);\n }\n }\n },\n [isExtendedSelect, containerRef, selectItemAtIndex],\n );\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n const { current: container } = containerRef;\n const element = getElementByDataIndex(container, highlightedIndex);\n if (!disableSelection && isSelectableElement(element)) {\n evt.preventDefault();\n evt.stopPropagation();\n selectItemAtIndex(\n evt,\n highlightedIndex,\n evt.shiftKey,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = highlightedIndex;\n }\n }\n onClick?.(evt);\n },\n [\n containerRef,\n highlightedIndex,\n disableSelection,\n onClick,\n selectItemAtIndex,\n isExtendedSelect,\n ],\n );\n\n const listHandlers = selectionIsDisallowed(selectionStrategy)\n ? {\n onClick,\n }\n : {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onKeyboardNavigation: handleKeyboardNavigation,\n };\n\n return {\n listHandlers,\n selected,\n setSelected,\n };\n};\n"],"names":["useRef","useCallback","useControlled","getElementDataIndex","getElementByDataIndex","isSelectableElement","selectionIsDisallowed"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Highlighter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/cjs/list/Highlighter.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var core = require('@salt-ds/core');
|
|
5
|
-
var styles = require('@salt-ds/styles');
|
|
6
|
-
var window = require('@salt-ds/window');
|
|
7
|
-
var escapeRegExp = require('../utils/escapeRegExp.js');
|
|
8
|
-
var Highlighter$1 = require('./Highlighter.css.js');
|
|
9
|
-
|
|
10
|
-
const withBaseName = core.makePrefixer("saltHighlighter");
|
|
11
|
-
const Highlighter = (props) => {
|
|
12
|
-
const targetWindow = window.useWindow();
|
|
13
|
-
styles.useComponentCssInjection({
|
|
14
|
-
testId: "vuu-highlighter",
|
|
15
|
-
css: Highlighter$1,
|
|
16
|
-
window: targetWindow
|
|
17
|
-
});
|
|
18
|
-
const { matchPattern, text = "" } = props;
|
|
19
|
-
const matchRegex = typeof matchPattern === "string" ? new RegExp(`(${escapeRegExp.escapeRegExp(matchPattern)})`, "gi") : matchPattern;
|
|
20
|
-
if (matchRegex === void 0) {
|
|
21
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: text });
|
|
22
|
-
}
|
|
23
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: text.split(matchRegex).map(
|
|
24
|
-
(part, index) => part.match(matchRegex) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
25
|
-
"strong",
|
|
26
|
-
{
|
|
27
|
-
className: withBaseName("highlight"),
|
|
28
|
-
children: part
|
|
29
|
-
},
|
|
30
|
-
`${index}-${part}`
|
|
31
|
-
) : part
|
|
32
|
-
) });
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
exports.Highlighter = Highlighter;
|
|
36
|
-
//# sourceMappingURL=Highlighter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Highlighter.js","sources":["../../src/list/Highlighter.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ReactElement } from \"react\";\nimport { escapeRegExp } from \"../utils\";\n\nimport highlighterCss from \"./Highlighter.css\";\n\nconst withBaseName = makePrefixer(\"saltHighlighter\");\n\nexport interface HighlighterProps {\n matchPattern?: RegExp | string;\n text?: string;\n}\n\nexport const Highlighter = (\n props: HighlighterProps\n): ReactElement<HighlighterProps> => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-highlighter\",\n css: highlighterCss,\n window: targetWindow,\n });\n\n const { matchPattern, text = \"\" } = props;\n\n const matchRegex =\n typeof matchPattern === \"string\"\n ? new RegExp(`(${escapeRegExp(matchPattern)})`, \"gi\")\n : matchPattern;\n\n if (matchRegex === undefined) {\n return <>{text}</>;\n }\n return (\n <span>\n {text.split(matchRegex).map((part, index) =>\n part.match(matchRegex) ? (\n <strong\n className={withBaseName(\"highlight\")}\n key={`${index}-${part}`}\n >\n {part}\n </strong>\n ) : (\n part\n )\n )}\n </span>\n );\n};\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","highlighterCss","escapeRegExp","jsx"],"mappings":";;;;;;;;;AAQA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAOtC,MAAA,WAAA,GAAc,CACzB,KACmC,KAAA;AACnC,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,YAAA,EAAc,IAAO,GAAA,EAAA,EAAO,GAAA,KAAA;AAEpC,EAAA,MAAM,UACJ,GAAA,OAAO,YAAiB,KAAA,QAAA,GACpB,IAAI,MAAA,CAAO,CAAI,CAAA,EAAAC,yBAAA,CAAa,YAAY,CAAC,CAAK,CAAA,CAAA,EAAA,IAAI,CAClD,GAAA,YAAA;AAEN,EAAA,IAAI,eAAe,KAAW,CAAA,EAAA;AAC5B,IAAA,6DAAU,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA;AAEjB,EAAA,uBACGC,cAAA,CAAA,MAAA,EAAA,EACE,QAAK,EAAA,IAAA,CAAA,KAAA,CAAM,UAAU,CAAE,CAAA,GAAA;AAAA,IAAI,CAAC,IAAM,EAAA,KAAA,KACjC,IAAK,CAAA,KAAA,CAAM,UAAU,CACnB,mBAAAA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,aAAa,WAAW,CAAA;AAAA,QAGlC,QAAA,EAAA;AAAA,OAAA;AAAA,MAFI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,KAKvB,GAAA;AAAA,GAGN,EAAA,CAAA;AAEJ;;;;"}
|
package/cjs/list/List.css.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var listCss = ".vuuList {\n --list-background: var(--salt-container-primary-background);\n --list-borderStyle: var(\n --vuuList-borderStyle,\n var(--salt-container-borderStyle)\n );\n --list-borderWidth: var(--salt-size-border);\n --list-height: auto;\n --list-item-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n --list-item-gap: 0px;\n --list-maxHeight: 100%;\n --vuuDraggable-display: block;\n --vuuDraggable-spacer-height: 0;\n --vuuDraggable-spacer-width: 100%;\n --vuuDraggable-transitionProp: height;\n --vuuMeasuredContainer-height: var(--computed-list-height);\n\n background: var(--list-background);\n border: var(--list-borderStyle) var(--list-borderWidth)\n var(--salt-container-primary-borderColor);\n height: var(--saltList-height, var(--list-height));\n max-height: var(--list-maxHeight);\n outline: none;\n position: relative;\n user-select: none;\n width: var(--saltList-width, auto);\n padding: 0 1px;\n}\n\n.vuuDraggable-list-item {\n --vuuList-item-background: var(--salt-selectable-background-hover);\n}\n\n.vuuList-contentSized {\n box-sizing: content-box;\n}\n\n.vuuList-borderless {\n --list-borderStyle: none;\n}\n\n/* virtualised list */\n.vuuList-viewport {\n height: var(--computed-list-height, var(--measured-px-height));\n overflow: auto;\n}\n\n.vuuListHeader {\n --saltList-item-background: var(--list-item-header-background);\n color: var(--list-item-header-color);\n font-weight: 600;\n}\n\n.vuuListHeader[data-sticky=\"true\"] {\n --saltList-item-background: var(--list-background);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.vuuList-collapsible .vuuListItemHeader:after {\n border-width: var(--checkbox-borderWidth);\n border-color: var(--checkbox-borderColor);\n content: var(--list-item-header-twisty-content);\n -webkit-mask: var(--list-svg-chevron-down) center center/12px 12px no-repeat;\n mask: var(--list-svg-chevron-down) center center/12px 12px no-repeat;\n background: var(--list-item-header-twisty-color);\n height: 12px;\n left: var(--list-item-header-twisty-left);\n right: var(--list-item-header-twisty-right);\n margin-top: -8px;\n position: absolute;\n top: var(--list-item-header-twisty-top);\n transition: transform 0.3s;\n width: 12px;\n}\n.vuuListItemHeader[aria-expanded=\"false\"]:after {\n transform: rotate(-90deg);\n}\n\n/* Selection */\n\n.vuuList-scrollingContentContainer {\n box-sizing: inherit;\n position: relative;\n}\n\n.vuuList-virtualized .vuuListItem {\n line-height: 30px;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n will-change: transform;\n}\n.vuuList.saltFocusVisible:after {\n inset: 2px;\n}\n";
|
|
4
|
-
|
|
5
|
-
module.exports = listCss;
|
|
6
|
-
//# sourceMappingURL=List.css.js.map
|