@hh.ru/magritte-ui-tree-selector 5.1.8 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Item.js +1 -1
- package/ItemContent.js +1 -1
- package/ItemsList.d.ts +1 -0
- package/ItemsList.js +8 -5
- package/ItemsList.js.map +1 -1
- package/MobileItemsList.js +1 -1
- package/TreeSelector.js +2 -1
- package/TreeSelector.js.map +1 -1
- package/TreeSelectorDummy.js +3 -2
- package/TreeSelectorDummy.js.map +1 -1
- package/TreeSelectorWrapper.d.ts +3 -4
- package/TreeSelectorWrapper.js +25 -6
- package/TreeSelectorWrapper.js.map +1 -1
- package/index.css +49 -40
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/index.mock.js +14 -0
- package/index.mock.js.map +1 -1
- package/package.json +13 -12
- package/tree-selector-item-DZ_ZIDqN.js +5 -0
- package/tree-selector-item-DZ_ZIDqN.js.map +1 -0
- package/useAnimationTimeout.js +1 -1
- package/tree-selector-item-CZA_fh1j.js +0 -5
- package/tree-selector-item-CZA_fh1j.js.map +0 -1
package/Item.js
CHANGED
|
@@ -10,7 +10,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
10
10
|
import './TreeSelectorItemBase.js';
|
|
11
11
|
import '@hh.ru/magritte-ui-cell';
|
|
12
12
|
import '@hh.ru/magritte-ui-typography';
|
|
13
|
-
import './tree-selector-item-
|
|
13
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
14
14
|
|
|
15
15
|
const ONE_BOX_MARGIN = 36;
|
|
16
16
|
const getMargin = (allBoxesCount, hasShift, hasIndent) => {
|
package/ItemContent.js
CHANGED
|
@@ -7,7 +7,7 @@ import { DotFilledSize24, ChevronRightOutlinedSize24 } from '@hh.ru/magritte-ui-
|
|
|
7
7
|
import { Action } from './Action.js';
|
|
8
8
|
import { TreeSelectorItemBase } from './TreeSelectorItemBase.js';
|
|
9
9
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
10
|
-
import { s as styles } from './tree-selector-item-
|
|
10
|
+
import { s as styles } from './tree-selector-item-DZ_ZIDqN.js';
|
|
11
11
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
12
12
|
import '@hh.ru/magritte-ui-cell';
|
|
13
13
|
|
package/ItemsList.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ interface ItemsListProps<Additional extends AdditionalDefault> {
|
|
|
16
16
|
isSearch: boolean;
|
|
17
17
|
renderItemForDesktop?: RenderItem<Additional>;
|
|
18
18
|
renderContentBefore?: (isSearch: boolean) => ReactNode;
|
|
19
|
+
itemListRef?: React.MutableRefObject<HTMLDivElement | null>;
|
|
19
20
|
}
|
|
20
21
|
export declare const ItemsList: <Additional extends AdditionalDefault>(props: ItemsListProps<Additional>) => ReactElement;
|
|
21
22
|
export {};
|
package/ItemsList.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { useRef, useMemo, useCallback, useEffect } from 'react';
|
|
4
4
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
5
5
|
import { Item } from './Item.js';
|
|
6
|
-
import { s as styles } from './tree-selector-item-
|
|
6
|
+
import { s as styles } from './tree-selector-item-DZ_ZIDqN.js';
|
|
7
7
|
import 'classnames';
|
|
8
8
|
import './ItemContent.js';
|
|
9
9
|
import '@hh.ru/magritte-common-keyboard';
|
|
@@ -22,7 +22,7 @@ const getNewExpanded = (oldExpanded, newExpanded) => {
|
|
|
22
22
|
};
|
|
23
23
|
const DELIMITER = ';';
|
|
24
24
|
const ItemsList = (props) => {
|
|
25
|
-
const { collection, leavesOnly, checkSelectable, selected, expanded, disabled, onExpansion, indeterminate, onChange, isSearch, singleChoice, renderItemForDesktop, renderContentBefore, } = props;
|
|
25
|
+
const { collection, leavesOnly, checkSelectable, selected, expanded, disabled, onExpansion, indeterminate, onChange, isSearch, singleChoice, renderItemForDesktop, renderContentBefore, itemListRef, } = props;
|
|
26
26
|
const prevExpanded = useRef(expanded);
|
|
27
27
|
const expandedIds = useRef(expanded);
|
|
28
28
|
const treeItems = useMemo(() => {
|
|
@@ -58,9 +58,12 @@ const ItemsList = (props) => {
|
|
|
58
58
|
estimateSize: () => 48,
|
|
59
59
|
getItemKey: getKey,
|
|
60
60
|
});
|
|
61
|
-
const
|
|
61
|
+
const itemListRefCallback = useCallback((node) => {
|
|
62
|
+
if (itemListRef !== undefined) {
|
|
63
|
+
itemListRef.current = node;
|
|
64
|
+
}
|
|
62
65
|
parentRef.current = node ? node.parentElement : null;
|
|
63
|
-
}, []);
|
|
66
|
+
}, [itemListRef]);
|
|
64
67
|
const items = virtualizer.getVirtualItems();
|
|
65
68
|
useEffect(() => {
|
|
66
69
|
virtualizer.scrollToOffset(0);
|
|
@@ -71,7 +74,7 @@ const ItemsList = (props) => {
|
|
|
71
74
|
const onAnimationEnd = () => {
|
|
72
75
|
expandedIds.current = [];
|
|
73
76
|
};
|
|
74
|
-
return (jsx("div", { ref:
|
|
77
|
+
return (jsx("div", { ref: itemListRefCallback, className: styles.virtualizedList, style: {
|
|
75
78
|
height: `${virtualizer.getTotalSize()}px`,
|
|
76
79
|
}, children: jsx("div", { className: styles.virtualizedItem, style: {
|
|
77
80
|
transform: `translateY(${items[0]?.start}px)`,
|
package/ItemsList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemsList.js","sources":["../src/ItemsList.tsx"],"sourcesContent":["import { ReactElement, ReactNode, RefCallback, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { Item } from '@hh.ru/magritte-ui-tree-selector/Item';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, IdCollectionPredicate, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItem } from '@hh.ru/magritte-ui-tree-selector/types';\n\nimport styles from './tree-selector-item.less';\n\ninterface ItemsListProps<Additional extends AdditionalDefault> {\n collection: TreeCollection<Additional>;\n leavesOnly?: boolean;\n checkSelectable?: IdCollectionPredicate;\n onExpansion: (id: string) => void;\n expanded: string[];\n selected: string[];\n disabled: string[];\n onChange: (id: string, isSelected: boolean) => void;\n indeterminate: string[];\n singleChoice?: boolean;\n isSearch: boolean;\n renderItemForDesktop?: RenderItem<Additional>;\n renderContentBefore?: (isSearch: boolean) => ReactNode;\n}\n\ninterface TreeModelItem<Additional extends AdditionalDefault> extends TreeModel<Additional> {\n parentIds: string[];\n}\n\nconst getNewExpanded = (oldExpanded: string[], newExpanded: string[]): string[] => {\n if (oldExpanded.length >= newExpanded.length) {\n return [];\n }\n return newExpanded.filter((i) => !oldExpanded.includes(i));\n};\n\nconst DELIMITER = ';';\n\nexport const ItemsList = <Additional extends AdditionalDefault>(props: ItemsListProps<Additional>): ReactElement => {\n const {\n collection,\n leavesOnly,\n checkSelectable,\n selected,\n expanded,\n disabled,\n onExpansion,\n indeterminate,\n onChange,\n isSearch,\n singleChoice,\n renderItemForDesktop,\n renderContentBefore,\n } = props;\n const prevExpanded = useRef<string[]>(expanded);\n const expandedIds = useRef<string[]>(expanded);\n\n const treeItems = useMemo(() => {\n const newItems: TreeModelItem<Additional>[] = [];\n expandedIds.current = getNewExpanded(prevExpanded.current, expanded);\n collection.walk((item, currentParents) => {\n const parentId = currentParents.length ? currentParents[0].id : undefined;\n const isExpandedChild = currentParents.every((parent) => expanded.includes(parent.id));\n if (!parentId || isExpandedChild) {\n newItems.push({\n ...item,\n parentIds: currentParents.map((parent) => parent.id),\n });\n }\n });\n return newItems;\n }, [collection, expanded]);\n const marginCache = useRef<Record<string, number>>({});\n const parentRef = useRef<HTMLElement | null>(null);\n const withPromoContent = !!renderContentBefore;\n\n const getKey = (index: number) => {\n const treeIndex = withPromoContent ? index - 1 : index;\n const treeItem = treeItems[treeIndex];\n if (withPromoContent && index === 0) {\n return 'promo';\n }\n // без разделителя конкатенация значений может указывать на другой элемент\n return treeItem.parentIds[0] ? `${treeItem.parentIds[0]}${DELIMITER}${treeItem.id}` : `${treeItem.id}`;\n };\n const virtualizer = useVirtualizer({\n count: treeItems.length + (withPromoContent ? 1 : 0),\n getScrollElement: () => parentRef.current,\n estimateSize: () => 48,\n getItemKey: getKey,\n });\n\n const refCallback: RefCallback<HTMLDivElement> = useCallback((node) => {\n parentRef.current = node ? node.parentElement : null;\n }, []);\n\n const items = virtualizer.getVirtualItems();\n\n useEffect(() => {\n virtualizer.scrollToOffset(0);\n }, [collection, virtualizer]);\n\n useEffect(() => {\n prevExpanded.current = expanded;\n }, [expanded]);\n\n const onAnimationEnd = () => {\n expandedIds.current = [];\n };\n\n return (\n <div\n ref={refCallback}\n className={styles.virtualizedList}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n }}\n >\n <div\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${items[0]?.start}px)`,\n }}\n >\n {items.map((virtualItem) => {\n if (withPromoContent && virtualItem.index === 0) {\n return (\n <div key={virtualItem.key} ref={virtualizer.measureElement} data-index={virtualItem.index}>\n {renderContentBefore(isSearch)}\n </div>\n );\n }\n\n const treeIndex = withPromoContent ? virtualItem.index - 1 : virtualItem.index;\n const treeItem = treeItems[treeIndex];\n const { parentIds, ...item } = treeItem;\n const parentId = parentIds[0];\n const wasExpanded = expandedIds.current.some((expandedId) => parentIds.includes(expandedId));\n\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n onAnimationEnd={onAnimationEnd}\n className={wasExpanded ? styles.wasExpanded : undefined}\n >\n <Item\n collection={collection}\n checkSelectable={checkSelectable}\n isSelected={selected.includes(item.id)}\n isExpanded={expanded.includes(item.id)}\n isIndeterminate={indeterminate.includes(item.id)}\n isDisabled={disabled.includes(item.id)}\n parentId={parentId}\n item={item}\n leavesOnly={leavesOnly}\n singleChoice={singleChoice}\n onExpansion={onExpansion}\n onChange={onChange}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n cache={marginCache.current}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItemsList.js","sources":["../src/ItemsList.tsx"],"sourcesContent":["import { ReactElement, ReactNode, RefCallback, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { Item } from '@hh.ru/magritte-ui-tree-selector/Item';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, IdCollectionPredicate, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItem } from '@hh.ru/magritte-ui-tree-selector/types';\n\nimport styles from './tree-selector-item.less';\n\ninterface ItemsListProps<Additional extends AdditionalDefault> {\n collection: TreeCollection<Additional>;\n leavesOnly?: boolean;\n checkSelectable?: IdCollectionPredicate;\n onExpansion: (id: string) => void;\n expanded: string[];\n selected: string[];\n disabled: string[];\n onChange: (id: string, isSelected: boolean) => void;\n indeterminate: string[];\n singleChoice?: boolean;\n isSearch: boolean;\n renderItemForDesktop?: RenderItem<Additional>;\n renderContentBefore?: (isSearch: boolean) => ReactNode;\n itemListRef?: React.MutableRefObject<HTMLDivElement | null>;\n}\n\ninterface TreeModelItem<Additional extends AdditionalDefault> extends TreeModel<Additional> {\n parentIds: string[];\n}\n\nconst getNewExpanded = (oldExpanded: string[], newExpanded: string[]): string[] => {\n if (oldExpanded.length >= newExpanded.length) {\n return [];\n }\n return newExpanded.filter((i) => !oldExpanded.includes(i));\n};\n\nconst DELIMITER = ';';\n\nexport const ItemsList = <Additional extends AdditionalDefault>(props: ItemsListProps<Additional>): ReactElement => {\n const {\n collection,\n leavesOnly,\n checkSelectable,\n selected,\n expanded,\n disabled,\n onExpansion,\n indeterminate,\n onChange,\n isSearch,\n singleChoice,\n renderItemForDesktop,\n renderContentBefore,\n itemListRef,\n } = props;\n const prevExpanded = useRef<string[]>(expanded);\n const expandedIds = useRef<string[]>(expanded);\n\n const treeItems = useMemo(() => {\n const newItems: TreeModelItem<Additional>[] = [];\n expandedIds.current = getNewExpanded(prevExpanded.current, expanded);\n collection.walk((item, currentParents) => {\n const parentId = currentParents.length ? currentParents[0].id : undefined;\n const isExpandedChild = currentParents.every((parent) => expanded.includes(parent.id));\n if (!parentId || isExpandedChild) {\n newItems.push({\n ...item,\n parentIds: currentParents.map((parent) => parent.id),\n });\n }\n });\n return newItems;\n }, [collection, expanded]);\n const marginCache = useRef<Record<string, number>>({});\n const parentRef = useRef<HTMLElement | null>(null);\n const withPromoContent = !!renderContentBefore;\n\n const getKey = (index: number) => {\n const treeIndex = withPromoContent ? index - 1 : index;\n const treeItem = treeItems[treeIndex];\n if (withPromoContent && index === 0) {\n return 'promo';\n }\n // без разделителя конкатенация значений может указывать на другой элемент\n return treeItem.parentIds[0] ? `${treeItem.parentIds[0]}${DELIMITER}${treeItem.id}` : `${treeItem.id}`;\n };\n const virtualizer = useVirtualizer({\n count: treeItems.length + (withPromoContent ? 1 : 0),\n getScrollElement: () => parentRef.current,\n estimateSize: () => 48,\n getItemKey: getKey,\n });\n\n const itemListRefCallback: RefCallback<HTMLDivElement> = useCallback(\n (node) => {\n if (itemListRef !== undefined) {\n itemListRef.current = node;\n }\n parentRef.current = node ? node.parentElement : null;\n },\n [itemListRef]\n );\n\n const items = virtualizer.getVirtualItems();\n\n useEffect(() => {\n virtualizer.scrollToOffset(0);\n }, [collection, virtualizer]);\n\n useEffect(() => {\n prevExpanded.current = expanded;\n }, [expanded]);\n\n const onAnimationEnd = () => {\n expandedIds.current = [];\n };\n\n return (\n <div\n ref={itemListRefCallback}\n className={styles.virtualizedList}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n }}\n >\n <div\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${items[0]?.start}px)`,\n }}\n >\n {items.map((virtualItem) => {\n if (withPromoContent && virtualItem.index === 0) {\n return (\n <div key={virtualItem.key} ref={virtualizer.measureElement} data-index={virtualItem.index}>\n {renderContentBefore(isSearch)}\n </div>\n );\n }\n\n const treeIndex = withPromoContent ? virtualItem.index - 1 : virtualItem.index;\n const treeItem = treeItems[treeIndex];\n const { parentIds, ...item } = treeItem;\n const parentId = parentIds[0];\n const wasExpanded = expandedIds.current.some((expandedId) => parentIds.includes(expandedId));\n\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n onAnimationEnd={onAnimationEnd}\n className={wasExpanded ? styles.wasExpanded : undefined}\n >\n <Item\n collection={collection}\n checkSelectable={checkSelectable}\n isSelected={selected.includes(item.id)}\n isExpanded={expanded.includes(item.id)}\n isIndeterminate={indeterminate.includes(item.id)}\n isDisabled={disabled.includes(item.id)}\n parentId={parentId}\n item={item}\n leavesOnly={leavesOnly}\n singleChoice={singleChoice}\n onExpansion={onExpansion}\n onChange={onChange}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n cache={marginCache.current}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":"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"}
|
package/MobileItemsList.js
CHANGED
|
@@ -10,7 +10,7 @@ import { Action } from './Action.js';
|
|
|
10
10
|
import { MobileDelimiter } from './MobileDelimiter.js';
|
|
11
11
|
import { MobileItem } from './MobileItem.js';
|
|
12
12
|
import { MobileParentItem } from './MobileParentItem.js';
|
|
13
|
-
import { s as styles } from './tree-selector-item-
|
|
13
|
+
import { s as styles } from './tree-selector-item-DZ_ZIDqN.js';
|
|
14
14
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
15
15
|
import '@hh.ru/magritte-ui-card';
|
|
16
16
|
import '@hh.ru/magritte-ui-typography';
|
package/TreeSelector.js
CHANGED
|
@@ -19,7 +19,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
19
19
|
import './TreeSelectorItemBase.js';
|
|
20
20
|
import '@hh.ru/magritte-ui-cell';
|
|
21
21
|
import '@hh.ru/magritte-ui-typography';
|
|
22
|
-
import './tree-selector-item-
|
|
22
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
23
23
|
import './MobileItemsList.js';
|
|
24
24
|
import '@hh.ru/magritte-common-func-utils';
|
|
25
25
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
@@ -31,6 +31,7 @@ import '@hh.ru/magritte-ui-badge';
|
|
|
31
31
|
import './TreeSelectorWrapper.js';
|
|
32
32
|
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
33
33
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
34
|
+
import '@hh.ru/magritte-ui-scrollbar';
|
|
34
35
|
import './collection/treeCollectionHelper.js';
|
|
35
36
|
import './collection/treeCollection.js';
|
|
36
37
|
import './useExpanded.js';
|
package/TreeSelector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelector.js","sources":["../src/TreeSelector.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef, ReactElement, useMemo } from 'react';\n\nimport { TreeSelectorDummy } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorDummy';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\nimport { TreeSelectorProps, ListControls } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useDisabled } from '@hh.ru/magritte-ui-tree-selector/useDisabled';\nimport { useSelected } from '@hh.ru/magritte-ui-tree-selector/useSelected';\n\nconst TreeSelectorComponent = <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n value,\n collection,\n singleChoice,\n leavesOnly,\n collapseToParentId,\n checkSelectable,\n onChange,\n disabled,\n maxSelected,\n ...rest\n } = props;\n const strategy = useMemo(\n () =>\n new ImmutableSelectionStrategy(collection, {\n singleChoice,\n leavesOnly,\n checkSelectable,\n }),\n [collection, singleChoice, leavesOnly, checkSelectable]\n );\n\n if (maxSelected && !collapseToParentId && !leavesOnly) {\n throw new Error(\n `Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`\n );\n }\n\n const { selected, setSelected } = useSelected({\n value,\n strategy,\n collection,\n onChange,\n maxSelected,\n collapseToParentId,\n });\n\n const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });\n\n return (\n <TreeSelectorDummy\n {...rest}\n value={selected}\n disabled={currentDisabled}\n collection={collection}\n singleChoice={singleChoice}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n onChange={setSelected}\n ref={ref}\n />\n );\n};\n\nexport const TreeSelector = forwardRef(TreeSelectorComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TreeSelector.js","sources":["../src/TreeSelector.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef, ReactElement, useMemo } from 'react';\n\nimport { TreeSelectorDummy } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorDummy';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\nimport { TreeSelectorProps, ListControls } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useDisabled } from '@hh.ru/magritte-ui-tree-selector/useDisabled';\nimport { useSelected } from '@hh.ru/magritte-ui-tree-selector/useSelected';\n\nconst TreeSelectorComponent = <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n value,\n collection,\n singleChoice,\n leavesOnly,\n collapseToParentId,\n checkSelectable,\n onChange,\n disabled,\n maxSelected,\n ...rest\n } = props;\n const strategy = useMemo(\n () =>\n new ImmutableSelectionStrategy(collection, {\n singleChoice,\n leavesOnly,\n checkSelectable,\n }),\n [collection, singleChoice, leavesOnly, checkSelectable]\n );\n\n if (maxSelected && !collapseToParentId && !leavesOnly) {\n throw new Error(\n `Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`\n );\n }\n\n const { selected, setSelected } = useSelected({\n value,\n strategy,\n collection,\n onChange,\n maxSelected,\n collapseToParentId,\n });\n\n const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });\n\n return (\n <TreeSelectorDummy\n {...rest}\n value={selected}\n disabled={currentDisabled}\n collection={collection}\n singleChoice={singleChoice}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n onChange={setSelected}\n ref={ref}\n />\n );\n};\n\nexport const TreeSelector = forwardRef(TreeSelectorComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,qBAAqB,GAAG,CAC1B,KAAoC,EACpC,GAA+B,KACjB;IACd,MAAM,EACF,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,GAAG,IAAI,EACV,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CACpB,MACI,IAAI,0BAA0B,CAAC,UAAU,EAAE;QACvC,YAAY;QACZ,UAAU;QACV,eAAe;KAClB,CAAC,EACN,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC,CAC1D,CAAC;IAEF,IAAI,WAAW,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE;AACnD,QAAA,MAAM,IAAI,KAAK,CACX,CAAA,mGAAA,CAAqG,CACxG,CAAC;KACL;AAED,IAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAC1C,KAAK;QACL,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,WAAW;QACX,kBAAkB;AACrB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AAErF,IAAA,QACIA,GAAC,CAAA,iBAAiB,EACV,EAAA,GAAA,IAAI,EACR,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,GAAG,EAAA,CACV,EACJ;AACN,CAAC,CAAC;MAEW,YAAY,GAAG,UAAU,CAAC,qBAAqB;;;;"}
|
package/TreeSelectorDummy.js
CHANGED
|
@@ -21,7 +21,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
21
21
|
import './TreeSelectorItemBase.js';
|
|
22
22
|
import '@hh.ru/magritte-ui-cell';
|
|
23
23
|
import '@hh.ru/magritte-ui-typography';
|
|
24
|
-
import './tree-selector-item-
|
|
24
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
25
25
|
import '@hh.ru/magritte-common-func-utils';
|
|
26
26
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
27
27
|
import './MobileDelimiter.js';
|
|
@@ -31,6 +31,7 @@ import './MobileParentItem.js';
|
|
|
31
31
|
import '@hh.ru/magritte-ui-badge';
|
|
32
32
|
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
33
33
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
34
|
+
import '@hh.ru/magritte-ui-scrollbar';
|
|
34
35
|
import './collection/treeCollection.js';
|
|
35
36
|
import '@hh.ru/magritte-ui-input';
|
|
36
37
|
import './useAnimationTimeout.js';
|
|
@@ -133,7 +134,7 @@ const TreeSelectorDummyComponent = ({ collection: initialCollection, checkSelect
|
|
|
133
134
|
]);
|
|
134
135
|
const renderTreeSelector = useCallback(() => {
|
|
135
136
|
const hasModels = collection.getTopLevel().length;
|
|
136
|
-
return (jsx(TreeSelectorWrapper, { forwardRef: treeRefCallback, children: hasModels ? (
|
|
137
|
+
return (jsx(TreeSelectorWrapper, { forwardRef: treeRefCallback, children: hasModels ? (isMobile ? (jsx(MobileItemsList, { getMobileSearchItemOrder: getMobileSearchItemOrder || getSearchItemOrderDefault, collection: collection, selected: selected, disabled: disabled, onChange: onChange, leavesOnly: leavesOnly, checkSelectable: checkSelectable, singleChoice: singleChoice, ref: ref, setInputValue: setInputValue, renderItem: renderItem, renderMobileDelimiter: renderMobileDelimiter, handleChangeInput: handleChangeInput, contentFilterQuery: contentFilterQuery.trim(), onMobileNavigationChange: onMobileNavigationChange, isSearch: isSearch, getSelectAllParentTrl: getSelectAllParentTrl, renderContentBefore: renderContentBefore })) : (jsx(ItemsList, { collection: collection, leavesOnly: leavesOnly, checkSelectable: checkSelectable, expanded: currentExpanded, onExpansion: handleExpansion, selected: selected, onChange: onChange, disabled: disabled, singleChoice: singleChoice, indeterminate: indeterminate, isSearch: isSearch, renderItemForDesktop: renderItemForDesktop, renderContentBefore: renderContentBefore }))) : (jsx(Fragment, { children: contentNotFound })) }));
|
|
137
138
|
}, [
|
|
138
139
|
collection,
|
|
139
140
|
treeRefCallback,
|
package/TreeSelectorDummy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelectorDummy.js","sources":["../src/TreeSelectorDummy.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef, useCallback, useEffect, useRef, useState, RefCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ItemsList } from '@hh.ru/magritte-ui-tree-selector/ItemsList';\nimport { MobileItemsList } from '@hh.ru/magritte-ui-tree-selector/MobileItemsList';\nimport { TreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nimport { filterWithParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useExpanded } from '@hh.ru/magritte-ui-tree-selector/useExpanded';\nimport { useIndeterminate } from '@hh.ru/magritte-ui-tree-selector/useIndeterminate';\nimport { useRenderInput } from '@hh.ru/magritte-ui-tree-selector/useRenderInput';\n\nconst defaultCheckSelectable = () => true;\nconst defaultArray: string[] = [];\n\nconst needToApply = (query: string): boolean => {\n return !!(query && query.length);\n};\n\nexport const TreeSelectorDummyComponent = <Additional extends AdditionalDefault>(\n {\n collection: initialCollection,\n checkSelectable = defaultCheckSelectable,\n initialExpanded = defaultArray,\n value: selected,\n leavesOnly,\n singleChoice,\n disabled = defaultArray,\n treeFilter = filterWithParents,\n suggestedNotFound = defaultArray,\n constantlySuggested = defaultArray,\n renderItemForDesktop,\n renderItem,\n renderMobileDelimiter,\n onExpand,\n onChange,\n onChangeFilterQuery,\n contentNotFound,\n onMobileNavigationChange,\n getMobileSearchItemOrder,\n expandTreeOnSelected = true,\n getSelectAllParentTrl,\n renderContentBefore,\n children,\n }: TreeSelectorDummyProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const [collection, setCollection] = useState(initialCollection);\n const [isSearch, setIsSearch] = useState(false);\n const currentQuery = useRef('');\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));\n const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));\n const getSearchItemOrderDefault = useCallback(\n (model: TreeModel<Additional>) => {\n return initialCollection.getModelLevel(model.id);\n },\n [initialCollection]\n );\n\n const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });\n\n const {\n expanded: currentExpanded,\n setExpanded,\n handleExpansion,\n handleResetExpanded,\n } = useExpanded({\n initialValue: initialExpanded?.slice(),\n selected,\n expandTreeOnSelected,\n collection: initialCollection,\n onExpand,\n });\n const { isMobile } = useBreakpoint();\n\n const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);\n\n const treeRefCallback: RefCallback<HTMLDivElement> = useCallback(\n (node) => {\n if (!node) {\n handleResetExpanded();\n }\n },\n [handleResetExpanded]\n );\n\n useEffect(() => {\n const contentFilterQueryTrimmed = contentFilterQuery.trim();\n const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();\n\n if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {\n const newExpanded: string[] = [];\n const newCollection = treeFilter(\n initialCollection,\n (item) => match(contentFilterQueryTrimmed, item.text),\n isMobile\n );\n newCollection.toList().forEach((item) => {\n if (newCollection.hasChildren(item.id)) {\n // Если есть в отфильтрованной коллекции есть дочерние элементы,\n // значит они заматчились, и нужно открыть родителя.\n newExpanded.push(item.id);\n } else {\n // Если заматчился только сам родитель, показываем его\n // схлопнутым => нужно добавить его ветку в коллекцию.\n initialCollection.walkChildren(item.id, (child, parents) => {\n newCollection.addModel({ ...child }, parents[0].id);\n });\n }\n });\n\n const filteredIds = newCollection.toList().map((model) => model.id);\n\n // Если в отфильтрованной коллекции нет моделей, но заданы предложенные,\n // то показываем их\n // Если в отфильтрованной коллекции модели есть, то пробуем добавить к ним\n // всегда показывающиеся модели, если их ещё нет в коллекции\n if (!filteredIds.length && suggestedNotFoundModels.current.length) {\n suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));\n } else {\n constantlySuggestedModels.current.forEach((model) => {\n if (!filteredIds.includes(model.id)) {\n newCollection.addModel({ ...model });\n }\n });\n }\n\n setCollection(newCollection);\n currentQuery.current = contentFilterQuery;\n onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);\n setExpanded(newExpanded);\n setIsSearch(true);\n } else if (queryWasChanged) {\n // Запрос не годится для поиска.\n const newExpanded = initialExpanded.slice();\n setCollection(initialCollection);\n\n onChangeFilterQuery?.(\n initialCollection.toList().map((model) => model.id),\n contentFilterQueryTrimmed\n );\n currentQuery.current = contentFilterQuery;\n if (inputRef.current) {\n setExpanded(newExpanded);\n } else {\n handleResetExpanded();\n }\n\n setIsSearch(false);\n }\n }, [\n initialCollection,\n contentFilterQuery,\n treeFilter,\n selected,\n setExpanded,\n isMobile,\n onChangeFilterQuery,\n handleResetExpanded,\n initialExpanded,\n ]);\n\n const renderTreeSelector = useCallback(() => {\n const hasModels = collection.getTopLevel().length;\n return (\n <TreeSelectorWrapper forwardRef={treeRefCallback}>\n {hasModels ? (\n <>\n {isMobile ? (\n <MobileItemsList\n getMobileSearchItemOrder={getMobileSearchItemOrder || getSearchItemOrderDefault}\n collection={collection}\n selected={selected}\n disabled={disabled}\n onChange={onChange}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n singleChoice={singleChoice}\n ref={ref}\n setInputValue={setInputValue}\n renderItem={renderItem}\n renderMobileDelimiter={renderMobileDelimiter}\n handleChangeInput={handleChangeInput}\n contentFilterQuery={contentFilterQuery.trim()}\n onMobileNavigationChange={onMobileNavigationChange}\n isSearch={isSearch}\n getSelectAllParentTrl={getSelectAllParentTrl}\n renderContentBefore={renderContentBefore}\n />\n ) : (\n <ItemsList\n collection={collection}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n expanded={currentExpanded}\n onExpansion={handleExpansion}\n selected={selected}\n onChange={onChange}\n disabled={disabled}\n singleChoice={singleChoice}\n indeterminate={indeterminate}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n renderContentBefore={renderContentBefore}\n />\n )}\n </>\n ) : (\n <>{contentNotFound}</>\n )}\n </TreeSelectorWrapper>\n );\n }, [\n collection,\n treeRefCallback,\n isMobile,\n getMobileSearchItemOrder,\n getSearchItemOrderDefault,\n selected,\n disabled,\n onChange,\n leavesOnly,\n checkSelectable,\n singleChoice,\n ref,\n setInputValue,\n renderItem,\n renderMobileDelimiter,\n handleChangeInput,\n contentFilterQuery,\n onMobileNavigationChange,\n isSearch,\n getSelectAllParentTrl,\n renderContentBefore,\n currentExpanded,\n handleExpansion,\n indeterminate,\n renderItemForDesktop,\n contentNotFound,\n ]);\n\n return <>{children({ renderTreeSelector, renderInput })}</>;\n};\n\nexport const TreeSelectorDummy = forwardRef(TreeSelectorDummyComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorDummyProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeSelectorDummy.js","sources":["../src/TreeSelectorDummy.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef, useCallback, useEffect, useRef, useState, RefCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ItemsList } from '@hh.ru/magritte-ui-tree-selector/ItemsList';\nimport { MobileItemsList } from '@hh.ru/magritte-ui-tree-selector/MobileItemsList';\nimport { TreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nimport { filterWithParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useExpanded } from '@hh.ru/magritte-ui-tree-selector/useExpanded';\nimport { useIndeterminate } from '@hh.ru/magritte-ui-tree-selector/useIndeterminate';\nimport { useRenderInput } from '@hh.ru/magritte-ui-tree-selector/useRenderInput';\n\nconst defaultCheckSelectable = () => true;\nconst defaultArray: string[] = [];\n\nconst needToApply = (query: string): boolean => {\n return !!(query && query.length);\n};\n\nexport const TreeSelectorDummyComponent = <Additional extends AdditionalDefault>(\n {\n collection: initialCollection,\n checkSelectable = defaultCheckSelectable,\n initialExpanded = defaultArray,\n value: selected,\n leavesOnly,\n singleChoice,\n disabled = defaultArray,\n treeFilter = filterWithParents,\n suggestedNotFound = defaultArray,\n constantlySuggested = defaultArray,\n renderItemForDesktop,\n renderItem,\n renderMobileDelimiter,\n onExpand,\n onChange,\n onChangeFilterQuery,\n contentNotFound,\n onMobileNavigationChange,\n getMobileSearchItemOrder,\n expandTreeOnSelected = true,\n getSelectAllParentTrl,\n renderContentBefore,\n children,\n }: TreeSelectorDummyProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const [collection, setCollection] = useState(initialCollection);\n const [isSearch, setIsSearch] = useState(false);\n const currentQuery = useRef('');\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));\n const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));\n const getSearchItemOrderDefault = useCallback(\n (model: TreeModel<Additional>) => {\n return initialCollection.getModelLevel(model.id);\n },\n [initialCollection]\n );\n\n const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });\n\n const {\n expanded: currentExpanded,\n setExpanded,\n handleExpansion,\n handleResetExpanded,\n } = useExpanded({\n initialValue: initialExpanded?.slice(),\n selected,\n expandTreeOnSelected,\n collection: initialCollection,\n onExpand,\n });\n const { isMobile } = useBreakpoint();\n\n const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);\n\n const treeRefCallback: RefCallback<HTMLDivElement> = useCallback(\n (node) => {\n if (!node) {\n handleResetExpanded();\n }\n },\n [handleResetExpanded]\n );\n\n useEffect(() => {\n const contentFilterQueryTrimmed = contentFilterQuery.trim();\n const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();\n\n if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {\n const newExpanded: string[] = [];\n const newCollection = treeFilter(\n initialCollection,\n (item) => match(contentFilterQueryTrimmed, item.text),\n isMobile\n );\n newCollection.toList().forEach((item) => {\n if (newCollection.hasChildren(item.id)) {\n // Если есть в отфильтрованной коллекции есть дочерние элементы,\n // значит они заматчились, и нужно открыть родителя.\n newExpanded.push(item.id);\n } else {\n // Если заматчился только сам родитель, показываем его\n // схлопнутым => нужно добавить его ветку в коллекцию.\n initialCollection.walkChildren(item.id, (child, parents) => {\n newCollection.addModel({ ...child }, parents[0].id);\n });\n }\n });\n\n const filteredIds = newCollection.toList().map((model) => model.id);\n\n // Если в отфильтрованной коллекции нет моделей, но заданы предложенные,\n // то показываем их\n // Если в отфильтрованной коллекции модели есть, то пробуем добавить к ним\n // всегда показывающиеся модели, если их ещё нет в коллекции\n if (!filteredIds.length && suggestedNotFoundModels.current.length) {\n suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));\n } else {\n constantlySuggestedModels.current.forEach((model) => {\n if (!filteredIds.includes(model.id)) {\n newCollection.addModel({ ...model });\n }\n });\n }\n\n setCollection(newCollection);\n currentQuery.current = contentFilterQuery;\n onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);\n setExpanded(newExpanded);\n setIsSearch(true);\n } else if (queryWasChanged) {\n // Запрос не годится для поиска.\n const newExpanded = initialExpanded.slice();\n setCollection(initialCollection);\n\n onChangeFilterQuery?.(\n initialCollection.toList().map((model) => model.id),\n contentFilterQueryTrimmed\n );\n currentQuery.current = contentFilterQuery;\n if (inputRef.current) {\n setExpanded(newExpanded);\n } else {\n handleResetExpanded();\n }\n\n setIsSearch(false);\n }\n }, [\n initialCollection,\n contentFilterQuery,\n treeFilter,\n selected,\n setExpanded,\n isMobile,\n onChangeFilterQuery,\n handleResetExpanded,\n initialExpanded,\n ]);\n\n const renderTreeSelector = useCallback(() => {\n const hasModels = collection.getTopLevel().length;\n return (\n <TreeSelectorWrapper forwardRef={treeRefCallback}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {hasModels ? (\n isMobile ? (\n <MobileItemsList\n getMobileSearchItemOrder={getMobileSearchItemOrder || getSearchItemOrderDefault}\n collection={collection}\n selected={selected}\n disabled={disabled}\n onChange={onChange}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n singleChoice={singleChoice}\n ref={ref}\n setInputValue={setInputValue}\n renderItem={renderItem}\n renderMobileDelimiter={renderMobileDelimiter}\n handleChangeInput={handleChangeInput}\n contentFilterQuery={contentFilterQuery.trim()}\n onMobileNavigationChange={onMobileNavigationChange}\n isSearch={isSearch}\n getSelectAllParentTrl={getSelectAllParentTrl}\n renderContentBefore={renderContentBefore}\n />\n ) : (\n <ItemsList\n collection={collection}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n expanded={currentExpanded}\n onExpansion={handleExpansion}\n selected={selected}\n onChange={onChange}\n disabled={disabled}\n singleChoice={singleChoice}\n indeterminate={indeterminate}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n renderContentBefore={renderContentBefore}\n />\n )\n ) : (\n <>{contentNotFound}</>\n )}\n </TreeSelectorWrapper>\n );\n }, [\n collection,\n treeRefCallback,\n isMobile,\n getMobileSearchItemOrder,\n getSearchItemOrderDefault,\n selected,\n disabled,\n onChange,\n leavesOnly,\n checkSelectable,\n singleChoice,\n ref,\n setInputValue,\n renderItem,\n renderMobileDelimiter,\n handleChangeInput,\n contentFilterQuery,\n onMobileNavigationChange,\n isSearch,\n getSelectAllParentTrl,\n renderContentBefore,\n currentExpanded,\n handleExpansion,\n indeterminate,\n renderItemForDesktop,\n contentNotFound,\n ]);\n\n return <>{children({ renderTreeSelector, renderInput })}</>;\n};\n\nexport const TreeSelectorDummy = forwardRef(TreeSelectorDummyComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorDummyProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|
package/TreeSelectorWrapper.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ReactNode, PropsWithChildren, ForwardedRef, ReactElement } from 'react';
|
|
2
1
|
import { FcWithFlag } from '@hh.ru/magritte-types';
|
|
3
|
-
interface TreeSelectorWrapperProps extends PropsWithChildren {
|
|
4
|
-
forwardRef: ForwardedRef<HTMLDivElement>;
|
|
2
|
+
interface TreeSelectorWrapperProps extends React.PropsWithChildren {
|
|
3
|
+
forwardRef: React.ForwardedRef<HTMLDivElement>;
|
|
5
4
|
}
|
|
6
5
|
export declare const TreeSelectorWrapper: FcWithFlag<TreeSelectorWrapperProps, 'isTreeSelectorWrapper'>;
|
|
7
|
-
export declare const isValidTreeSelectorWrapper: (component: ReactNode) => component is ReactElement<TreeSelectorWrapperProps>;
|
|
6
|
+
export declare const isValidTreeSelectorWrapper: (component: React.ReactNode) => component is React.ReactElement<TreeSelectorWrapperProps>;
|
|
8
7
|
export {};
|
package/TreeSelectorWrapper.js
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import './index.css';
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useRef, useContext, useEffect, isValidElement } from 'react';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useRef, useContext, useEffect, isValidElement, cloneElement } from 'react';
|
|
4
|
+
import classnames from 'classnames';
|
|
4
5
|
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
5
6
|
import { CustomScrollContext } from '@hh.ru/magritte-internal-custom-scroll';
|
|
7
|
+
import { useScrollbar, Scrollbar } from '@hh.ru/magritte-ui-scrollbar';
|
|
8
|
+
import { ItemsList } from './ItemsList.js';
|
|
9
|
+
import '@tanstack/react-virtual';
|
|
10
|
+
import './Item.js';
|
|
11
|
+
import './ItemContent.js';
|
|
12
|
+
import '@hh.ru/magritte-common-keyboard';
|
|
13
|
+
import '@hh.ru/magritte-ui-icon/icon';
|
|
14
|
+
import './Action.js';
|
|
15
|
+
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
16
|
+
import './TreeSelectorItemBase.js';
|
|
17
|
+
import '@hh.ru/magritte-ui-cell';
|
|
18
|
+
import '@hh.ru/magritte-ui-typography';
|
|
19
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
6
20
|
|
|
7
|
-
var styles = {"wrapper":"magritte-wrapper___EzesX_5-1-
|
|
21
|
+
var styles = {"wrapper":"magritte-wrapper___EzesX_5-2-1","scroll-container":"magritte-scroll-container___wGzfI_5-2-1","scrollContainer":"magritte-scroll-container___wGzfI_5-2-1"};
|
|
8
22
|
|
|
9
|
-
const TreeSelectorWrapper = ({ forwardRef, ...props }) => {
|
|
23
|
+
const TreeSelectorWrapper = ({ forwardRef, children, ...props }) => {
|
|
24
|
+
const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({ axis: 'vertical' });
|
|
10
25
|
const wrapperRef = useRef(null);
|
|
11
|
-
const
|
|
26
|
+
const wrapperRefCallback = useMultipleRefs(wrapperRef, forwardRef, scrollbar.scrollContainerRef);
|
|
12
27
|
const scrollContext = useContext(CustomScrollContext);
|
|
13
28
|
useEffect(() => {
|
|
14
29
|
const wrapperElement = wrapperRef.current;
|
|
@@ -21,7 +36,11 @@ const TreeSelectorWrapper = ({ forwardRef, ...props }) => {
|
|
|
21
36
|
wrapperElement.addEventListener('touchmove', handleTouchMove);
|
|
22
37
|
return () => wrapperElement.removeEventListener('touchmove', handleTouchMove);
|
|
23
38
|
}, [scrollContext]);
|
|
24
|
-
return
|
|
39
|
+
return (jsxs("div", { className: classnames(styles.wrapper, scrollbar.hoverContainerCssClass), children: [jsx("div", { className: styles.scrollContainer, ref: wrapperRefCallback, "data-qa": "tree-selector-container", ...props, children: isValidElement(children) && children.type === ItemsList
|
|
40
|
+
? cloneElement(children, {
|
|
41
|
+
itemListRef: scrollbar.contentWrapperRef,
|
|
42
|
+
})
|
|
43
|
+
: children }), hasVerticalScroll && jsx(Scrollbar, { ...verticalScrollbarProps })] }));
|
|
25
44
|
};
|
|
26
45
|
TreeSelectorWrapper.isTreeSelectorWrapper = true;
|
|
27
46
|
const isValidTreeSelectorWrapper = (component) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelectorWrapper.js","sources":["../src/TreeSelectorWrapper.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"TreeSelectorWrapper.js","sources":["../src/TreeSelectorWrapper.tsx"],"sourcesContent":["import { cloneElement, isValidElement, useContext, useEffect, useRef } from 'react';\nimport classnames from 'classnames';\n\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { CustomScrollContext } from '@hh.ru/magritte-internal-custom-scroll';\nimport { FcWithFlag } from '@hh.ru/magritte-types';\nimport { Scrollbar, useScrollbar } from '@hh.ru/magritte-ui-scrollbar';\nimport { ItemsList } from '@hh.ru/magritte-ui-tree-selector/ItemsList';\n\nimport styles from './wrapper.less';\n\ninterface TreeSelectorWrapperProps extends React.PropsWithChildren {\n forwardRef: React.ForwardedRef<HTMLDivElement>;\n}\n\nexport const TreeSelectorWrapper: FcWithFlag<TreeSelectorWrapperProps, 'isTreeSelectorWrapper'> = ({\n forwardRef,\n children,\n ...props\n}) => {\n const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({ axis: 'vertical' });\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperRefCallback = useMultipleRefs(wrapperRef, forwardRef, scrollbar.scrollContainerRef);\n const scrollContext = useContext(CustomScrollContext);\n\n useEffect(() => {\n const wrapperElement = wrapperRef.current;\n if (!wrapperElement || !scrollContext) {\n return void 0;\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.stopPropagation();\n };\n\n wrapperElement.addEventListener('touchmove', handleTouchMove);\n return () => wrapperElement.removeEventListener('touchmove', handleTouchMove);\n }, [scrollContext]);\n\n return (\n <div className={classnames(styles.wrapper, scrollbar.hoverContainerCssClass)}>\n <div\n className={styles.scrollContainer}\n ref={wrapperRefCallback}\n data-qa=\"tree-selector-container\"\n {...props}\n >\n {isValidElement(children) && children.type === ItemsList\n ? cloneElement(children, {\n itemListRef: scrollbar.contentWrapperRef,\n } as React.ComponentProps<typeof ItemsList>)\n : children}\n </div>\n {hasVerticalScroll && <Scrollbar {...verticalScrollbarProps} />}\n </div>\n );\n};\n\nTreeSelectorWrapper.isTreeSelectorWrapper = true;\n\nexport const isValidTreeSelectorWrapper = (\n component: React.ReactNode\n): component is React.ReactElement<TreeSelectorWrapperProps> => {\n return (\n isValidElement(component) && typeof component.type === 'function' && 'isTreeSelectorWrapper' in component.type\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAeO,MAAM,mBAAmB,GAAkE,CAAC,EAC/F,UAAU,EACV,QAAQ,EACR,GAAG,KAAK,EACX,KAAI;AACD,IAAA,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACvG,IAAA,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;AAChD,IAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACjG,IAAA,MAAM,aAAa,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAEtD,SAAS,CAAC,MAAK;AACX,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE;YACnC,OAAO,KAAK,CAAC,CAAC;SACjB;AAED,QAAA,MAAM,eAAe,GAAG,CAAC,KAAiB,KAAI;YAC1C,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAC,CAAC;AAEF,QAAA,cAAc,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC9D,OAAO,MAAM,cAAc,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAClF,KAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AAEpB,IAAA,QACIA,IAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,sBAAsB,CAAC,EACxE,QAAA,EAAA,CAAAC,GAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,MAAM,CAAC,eAAe,EACjC,GAAG,EAAE,kBAAkB,EACf,SAAA,EAAA,yBAAyB,KAC7B,KAAK,EAAA,QAAA,EAER,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;AACpD,sBAAE,YAAY,CAAC,QAAQ,EAAE;wBACnB,WAAW,EAAE,SAAS,CAAC,iBAAiB;qBACD,CAAC;AAC9C,sBAAE,QAAQ,EACZ,CAAA,EACL,iBAAiB,IAAIA,GAAC,CAAA,SAAS,EAAK,EAAA,GAAA,sBAAsB,EAAI,CAAA,CAAA,EAAA,CAC7D,EACR;AACN,EAAE;AAEF,mBAAmB,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAEpC,MAAA,0BAA0B,GAAG,CACtC,SAA0B,KACiC;AAC3D,IAAA,QACI,cAAc,CAAC,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,uBAAuB,IAAI,SAAS,CAAC,IAAI,EAChH;AACN;;;;"}
|
package/index.css
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
:root{
|
|
2
|
-
--magritte-semantic-animation-ease-in-out-100-timing-function-v23-2-
|
|
3
|
-
--magritte-semantic-animation-ease-in-out-100-duration-v23-2-
|
|
4
|
-
--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-
|
|
5
|
-
--magritte-semantic-animation-ease-in-out-200-duration-v23-2-
|
|
2
|
+
--magritte-semantic-animation-ease-in-out-100-timing-function-v23-2-2:cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
3
|
+
--magritte-semantic-animation-ease-in-out-100-duration-v23-2-2:100ms;
|
|
4
|
+
--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-2:cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
5
|
+
--magritte-semantic-animation-ease-in-out-200-duration-v23-2-2:200ms;
|
|
6
6
|
}
|
|
7
|
-
@keyframes magritte-fade-in___yS4Ja_5-1
|
|
7
|
+
@keyframes magritte-fade-in___yS4Ja_5-2-1{
|
|
8
8
|
0%{
|
|
9
9
|
opacity:0;
|
|
10
10
|
}
|
|
@@ -12,24 +12,24 @@
|
|
|
12
12
|
opacity:1;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
.magritte-item-animation-timeout___pbOyZ_5-1
|
|
16
|
-
animation-name:magritte-fade-in___yS4Ja_5-1
|
|
17
|
-
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-
|
|
15
|
+
.magritte-item-animation-timeout___pbOyZ_5-2-1{
|
|
16
|
+
animation-name:magritte-fade-in___yS4Ja_5-2-1;
|
|
17
|
+
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-2);
|
|
18
18
|
--animation-duration:0ms;
|
|
19
19
|
animation-duration:var(--animation-duration);
|
|
20
20
|
}
|
|
21
21
|
@media (prefers-reduced-motion: no-preference){
|
|
22
|
-
.magritte-item-animation-timeout___pbOyZ_5-1
|
|
23
|
-
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-
|
|
22
|
+
.magritte-item-animation-timeout___pbOyZ_5-2-1{
|
|
23
|
+
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-2);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
.magritte-wrapper___GHKV6_5-1
|
|
26
|
+
.magritte-wrapper___GHKV6_5-2-1{
|
|
27
27
|
display:flex;
|
|
28
28
|
padding:12px 0;
|
|
29
29
|
gap:12px;
|
|
30
30
|
align-items:flex-start;
|
|
31
31
|
}
|
|
32
|
-
.magritte-letter___yZOCU_5-1
|
|
32
|
+
.magritte-letter___yZOCU_5-2-1{
|
|
33
33
|
width:24px;
|
|
34
34
|
height:24px;
|
|
35
35
|
display:flex;
|
|
@@ -37,73 +37,82 @@
|
|
|
37
37
|
justify-content:center;
|
|
38
38
|
flex-shrink:0;
|
|
39
39
|
}
|
|
40
|
-
.magritte-icon___kO3Fj_5-1
|
|
41
|
-
.magritte-space___xTO79_5-1
|
|
40
|
+
.magritte-icon___kO3Fj_5-2-1,
|
|
41
|
+
.magritte-space___xTO79_5-2-1{
|
|
42
42
|
flex-shrink:0;
|
|
43
43
|
line-height:0;
|
|
44
44
|
width:24px;
|
|
45
45
|
}
|
|
46
|
-
.magritte-icon___kO3Fj_5-1
|
|
46
|
+
.magritte-icon___kO3Fj_5-2-1{
|
|
47
47
|
transform:rotate(0);
|
|
48
48
|
}
|
|
49
|
-
.magritte-wrapperActive___Hwk8p_5-1
|
|
50
|
-
.magritte-iconActive___4yrG5_5-1
|
|
49
|
+
.magritte-wrapperActive___Hwk8p_5-2-1,
|
|
50
|
+
.magritte-iconActive___4yrG5_5-2-1{
|
|
51
51
|
cursor:pointer;
|
|
52
52
|
}
|
|
53
|
-
.magritte-iconUp___mpXV6_5-1
|
|
53
|
+
.magritte-iconUp___mpXV6_5-2-1{
|
|
54
54
|
transform:rotate(90deg);
|
|
55
55
|
}
|
|
56
56
|
@media (prefers-reduced-motion: no-preference){
|
|
57
|
-
.magritte-icon___kO3Fj_5-1
|
|
57
|
+
.magritte-icon___kO3Fj_5-2-1{
|
|
58
58
|
transition-property:transform;
|
|
59
|
-
transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v23-2-
|
|
60
|
-
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v23-2-
|
|
59
|
+
transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v23-2-2);
|
|
60
|
+
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v23-2-2);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
.magritte-content___ZRc6R_5-1
|
|
63
|
+
.magritte-content___ZRc6R_5-2-1{
|
|
64
64
|
flex-grow:1;
|
|
65
65
|
}
|
|
66
|
-
.magritte-mobile-item___ynALC_5-1
|
|
66
|
+
.magritte-mobile-item___ynALC_5-2-1{
|
|
67
67
|
display:flex;
|
|
68
68
|
gap:12px;
|
|
69
69
|
flex-wrap:wrap;
|
|
70
70
|
}
|
|
71
|
-
.magritte-with-gap___gbvGO_5-1
|
|
71
|
+
.magritte-with-gap___gbvGO_5-2-1{
|
|
72
72
|
padding-top:12px;
|
|
73
73
|
}
|
|
74
|
-
.magritte-virtualized-list___qt2E6_5-1
|
|
74
|
+
.magritte-virtualized-list___qt2E6_5-2-1{
|
|
75
75
|
width:100%;
|
|
76
76
|
position:relative;
|
|
77
77
|
will-change:transform;
|
|
78
78
|
}
|
|
79
|
-
.magritte-virtualized-item___qAYVN_5-1
|
|
79
|
+
.magritte-virtualized-item___qAYVN_5-2-1{
|
|
80
80
|
position:absolute;
|
|
81
81
|
top:0;
|
|
82
82
|
left:0;
|
|
83
83
|
width:100%;
|
|
84
84
|
}
|
|
85
|
-
.magritte-was-expanded___uCFbW_5-1
|
|
86
|
-
animation-name:magritte-fade-in___yS4Ja_5-1
|
|
87
|
-
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-
|
|
85
|
+
.magritte-was-expanded___uCFbW_5-2-1{
|
|
86
|
+
animation-name:magritte-fade-in___yS4Ja_5-2-1;
|
|
87
|
+
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-2);
|
|
88
88
|
--animation-duration:0ms;
|
|
89
89
|
animation-duration:var(--animation-duration);
|
|
90
90
|
}
|
|
91
91
|
@media (prefers-reduced-motion: no-preference){
|
|
92
|
-
.magritte-was-expanded___uCFbW_5-1
|
|
93
|
-
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-
|
|
92
|
+
.magritte-was-expanded___uCFbW_5-2-1{
|
|
93
|
+
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-2);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
.magritte-wrapper___EzesX_5-1
|
|
97
|
+
.magritte-wrapper___EzesX_5-2-1{
|
|
98
|
+
height:100%;
|
|
99
|
+
position:relative;
|
|
100
|
+
}
|
|
101
|
+
.magritte-scroll-container___wGzfI_5-2-1{
|
|
98
102
|
height:100%;
|
|
99
103
|
overflow:auto;
|
|
104
|
+
overscroll-behavior:none;
|
|
105
|
+
scrollbar-width:none;
|
|
106
|
+
}
|
|
107
|
+
.magritte-scroll-container___wGzfI_5-2-1::-webkit-scrollbar{
|
|
108
|
+
display:none;
|
|
100
109
|
}
|
|
101
110
|
|
|
102
111
|
:root{
|
|
103
|
-
--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-
|
|
104
|
-
--magritte-semantic-animation-ease-in-out-200-duration-v23-2-
|
|
112
|
+
--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-2:cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
113
|
+
--magritte-semantic-animation-ease-in-out-200-duration-v23-2-2:200ms;
|
|
105
114
|
}
|
|
106
|
-
@keyframes magritte-fade-in___FDoho_5-1
|
|
115
|
+
@keyframes magritte-fade-in___FDoho_5-2-1{
|
|
107
116
|
0%{
|
|
108
117
|
opacity:0;
|
|
109
118
|
}
|
|
@@ -111,14 +120,14 @@
|
|
|
111
120
|
opacity:1;
|
|
112
121
|
}
|
|
113
122
|
}
|
|
114
|
-
.magritte-item-animation-timeout___Pdli9_5-1
|
|
115
|
-
animation-name:magritte-fade-in___FDoho_5-1
|
|
116
|
-
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-
|
|
123
|
+
.magritte-item-animation-timeout___Pdli9_5-2-1{
|
|
124
|
+
animation-name:magritte-fade-in___FDoho_5-2-1;
|
|
125
|
+
animation-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-2);
|
|
117
126
|
--animation-duration:0ms;
|
|
118
127
|
animation-duration:var(--animation-duration);
|
|
119
128
|
}
|
|
120
129
|
@media (prefers-reduced-motion: no-preference){
|
|
121
|
-
.magritte-item-animation-timeout___Pdli9_5-1
|
|
122
|
-
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-
|
|
130
|
+
.magritte-item-animation-timeout___Pdli9_5-2-1{
|
|
131
|
+
--animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-2);
|
|
123
132
|
}
|
|
124
133
|
}
|
package/index.js
CHANGED
|
@@ -26,7 +26,7 @@ import '@hh.ru/magritte-ui-icon/icon';
|
|
|
26
26
|
import './Action.js';
|
|
27
27
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
28
28
|
import '@hh.ru/magritte-ui-typography';
|
|
29
|
-
import './tree-selector-item-
|
|
29
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
30
30
|
import './MobileItemsList.js';
|
|
31
31
|
import '@hh.ru/magritte-common-func-utils';
|
|
32
32
|
import '@hh.ru/magritte-ui-cell';
|
|
@@ -43,4 +43,5 @@ import '@hh.ru/magritte-common-use-multiple-refs';
|
|
|
43
43
|
import '@hh.ru/magritte-ui-input';
|
|
44
44
|
import './useAnimationTimeout.js';
|
|
45
45
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
46
|
+
import '@hh.ru/magritte-ui-scrollbar';
|
|
46
47
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.mock.js
CHANGED
|
@@ -10,8 +10,22 @@ import './strategy/createTreeCollectionToggler.js';
|
|
|
10
10
|
import './strategy/dummyToggle.js';
|
|
11
11
|
import 'react/jsx-runtime';
|
|
12
12
|
import 'react';
|
|
13
|
+
import 'classnames';
|
|
13
14
|
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
14
15
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
16
|
+
import '@hh.ru/magritte-ui-scrollbar';
|
|
17
|
+
import './ItemsList.js';
|
|
18
|
+
import '@tanstack/react-virtual';
|
|
19
|
+
import './Item.js';
|
|
20
|
+
import './ItemContent.js';
|
|
21
|
+
import '@hh.ru/magritte-common-keyboard';
|
|
22
|
+
import '@hh.ru/magritte-ui-icon/icon';
|
|
23
|
+
import './Action.js';
|
|
24
|
+
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
25
|
+
import './TreeSelectorItemBase.js';
|
|
26
|
+
import '@hh.ru/magritte-ui-cell';
|
|
27
|
+
import '@hh.ru/magritte-ui-typography';
|
|
28
|
+
import './tree-selector-item-DZ_ZIDqN.js';
|
|
15
29
|
|
|
16
30
|
const TreeSelector = mockComponent('TreeSelector', undefined, { withChildren: true });
|
|
17
31
|
const TreeSelectorDummy = mockComponent('TreeSelectorDummy', undefined, {
|
package/index.mock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mock.js","sources":["../src/index.mock.ts"],"sourcesContent":["import { ForwardRefExoticComponent } from 'react';\n\nimport { mockComponent } from '@hh.ru/magritte-ui-mock-component';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\n\nexport * from '@hh.ru/magritte-ui-tree-selector/types';\nexport * from '@hh.ru/magritte-ui-tree-selector/collection/types';\nexport * from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nexport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nexport { TreeCollection, ImmutableSelectionStrategy };\n\nexport const TreeSelector: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'TreeSelector',\n undefined,\n { withChildren: true }\n);\n\nexport const TreeSelectorDummy: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'TreeSelectorDummy',\n undefined,\n {\n withChildren: true,\n }\n);\n\nexport const TreeSelectorItemBase = mockComponent('TreeSelectorItemBase');\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mock.js","sources":["../src/index.mock.ts"],"sourcesContent":["import { ForwardRefExoticComponent } from 'react';\n\nimport { mockComponent } from '@hh.ru/magritte-ui-mock-component';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\n\nexport * from '@hh.ru/magritte-ui-tree-selector/types';\nexport * from '@hh.ru/magritte-ui-tree-selector/collection/types';\nexport * from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nexport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nexport { TreeCollection, ImmutableSelectionStrategy };\n\nexport const TreeSelector: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'TreeSelector',\n undefined,\n { withChildren: true }\n);\n\nexport const TreeSelectorDummy: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'TreeSelectorDummy',\n undefined,\n {\n withChildren: true,\n }\n);\n\nexport const TreeSelectorItemBase = mockComponent('TreeSelectorItemBase');\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYa,MAAA,YAAY,GAAuD,aAAa,CACzF,cAAc,EACd,SAAS,EACT,EAAE,YAAY,EAAE,IAAI,EAAE,EACxB;MAEW,iBAAiB,GAAuD,aAAa,CAC9F,mBAAmB,EACnB,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EACH;MAEW,oBAAoB,GAAG,aAAa,CAAC,sBAAsB;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-tree-selector",
|
|
3
|
-
"version": "5.1
|
|
3
|
+
"version": "5.2.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -24,20 +24,21 @@
|
|
|
24
24
|
"@hh.ru/magritte-common-keyboard": "4.1.3",
|
|
25
25
|
"@hh.ru/magritte-common-resize": "0.1.17",
|
|
26
26
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.9",
|
|
27
|
-
"@hh.ru/magritte-design-tokens": "23.2.
|
|
27
|
+
"@hh.ru/magritte-design-tokens": "23.2.2",
|
|
28
28
|
"@hh.ru/magritte-internal-custom-scroll": "1.4.4",
|
|
29
29
|
"@hh.ru/magritte-types": "5.0.4",
|
|
30
|
-
"@hh.ru/magritte-ui-badge": "3.1.
|
|
30
|
+
"@hh.ru/magritte-ui-badge": "3.1.4",
|
|
31
31
|
"@hh.ru/magritte-ui-breakpoint": "6.0.1",
|
|
32
|
-
"@hh.ru/magritte-ui-card": "8.0.
|
|
33
|
-
"@hh.ru/magritte-ui-cell": "7.0.
|
|
34
|
-
"@hh.ru/magritte-ui-checkable-card": "4.1.
|
|
35
|
-
"@hh.ru/magritte-ui-checkbox-radio": "4.0.
|
|
36
|
-
"@hh.ru/magritte-ui-icon": "12.3.
|
|
37
|
-
"@hh.ru/magritte-ui-input": "9.0.
|
|
32
|
+
"@hh.ru/magritte-ui-card": "8.0.11",
|
|
33
|
+
"@hh.ru/magritte-ui-cell": "7.0.3",
|
|
34
|
+
"@hh.ru/magritte-ui-checkable-card": "4.1.3",
|
|
35
|
+
"@hh.ru/magritte-ui-checkbox-radio": "4.0.9",
|
|
36
|
+
"@hh.ru/magritte-ui-icon": "12.3.3",
|
|
37
|
+
"@hh.ru/magritte-ui-input": "9.0.11",
|
|
38
38
|
"@hh.ru/magritte-ui-mock-component": "1.1.5",
|
|
39
|
-
"@hh.ru/magritte-ui-
|
|
40
|
-
"@hh.ru/magritte-ui-
|
|
39
|
+
"@hh.ru/magritte-ui-scrollbar": "1.0.2",
|
|
40
|
+
"@hh.ru/magritte-ui-spacing": "2.0.63",
|
|
41
|
+
"@hh.ru/magritte-ui-typography": "4.2.3",
|
|
41
42
|
"@tanstack/react-virtual": "3.8.3"
|
|
42
43
|
},
|
|
43
44
|
"peerDependencies": {
|
|
@@ -48,5 +49,5 @@
|
|
|
48
49
|
"publishConfig": {
|
|
49
50
|
"access": "public"
|
|
50
51
|
},
|
|
51
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "b2ab15b73592666625ff3b84e10f3cc1bcee9cbc"
|
|
52
53
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
var styles = {"item-animation-timeout":"magritte-item-animation-timeout___pbOyZ_5-2-1","itemAnimationTimeout":"magritte-item-animation-timeout___pbOyZ_5-2-1","fade-in":"magritte-fade-in___yS4Ja_5-2-1","fadeIn":"magritte-fade-in___yS4Ja_5-2-1","wrapper":"magritte-wrapper___GHKV6_5-2-1","letter":"magritte-letter___yZOCU_5-2-1","icon":"magritte-icon___kO3Fj_5-2-1","space":"magritte-space___xTO79_5-2-1","wrapperActive":"magritte-wrapperActive___Hwk8p_5-2-1","iconActive":"magritte-iconActive___4yrG5_5-2-1","iconUp":"magritte-iconUp___mpXV6_5-2-1","content":"magritte-content___ZRc6R_5-2-1","mobile-item":"magritte-mobile-item___ynALC_5-2-1","mobileItem":"magritte-mobile-item___ynALC_5-2-1","with-gap":"magritte-with-gap___gbvGO_5-2-1","withGap":"magritte-with-gap___gbvGO_5-2-1","virtualized-list":"magritte-virtualized-list___qt2E6_5-2-1","virtualizedList":"magritte-virtualized-list___qt2E6_5-2-1","virtualized-item":"magritte-virtualized-item___qAYVN_5-2-1","virtualizedItem":"magritte-virtualized-item___qAYVN_5-2-1","was-expanded":"magritte-was-expanded___uCFbW_5-2-1","wasExpanded":"magritte-was-expanded___uCFbW_5-2-1"};
|
|
3
|
+
|
|
4
|
+
export { styles as s };
|
|
5
|
+
//# sourceMappingURL=tree-selector-item-DZ_ZIDqN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-selector-item-DZ_ZIDqN.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/useAnimationTimeout.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
import { useState, useLayoutEffect } from 'react';
|
|
3
3
|
|
|
4
|
-
var styles = {"item-animation-timeout":"magritte-item-animation-timeout___Pdli9_5-1
|
|
4
|
+
var styles = {"item-animation-timeout":"magritte-item-animation-timeout___Pdli9_5-2-1","itemAnimationTimeout":"magritte-item-animation-timeout___Pdli9_5-2-1","fade-in":"magritte-fade-in___FDoho_5-2-1","fadeIn":"magritte-fade-in___FDoho_5-2-1"};
|
|
5
5
|
|
|
6
6
|
const useAnimationTimeout = () => {
|
|
7
7
|
const [animationTimeout, setAnimationTimeout] = useState(0);
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
var styles = {"item-animation-timeout":"magritte-item-animation-timeout___pbOyZ_5-1-8","itemAnimationTimeout":"magritte-item-animation-timeout___pbOyZ_5-1-8","fade-in":"magritte-fade-in___yS4Ja_5-1-8","fadeIn":"magritte-fade-in___yS4Ja_5-1-8","wrapper":"magritte-wrapper___GHKV6_5-1-8","letter":"magritte-letter___yZOCU_5-1-8","icon":"magritte-icon___kO3Fj_5-1-8","space":"magritte-space___xTO79_5-1-8","wrapperActive":"magritte-wrapperActive___Hwk8p_5-1-8","iconActive":"magritte-iconActive___4yrG5_5-1-8","iconUp":"magritte-iconUp___mpXV6_5-1-8","content":"magritte-content___ZRc6R_5-1-8","mobile-item":"magritte-mobile-item___ynALC_5-1-8","mobileItem":"magritte-mobile-item___ynALC_5-1-8","with-gap":"magritte-with-gap___gbvGO_5-1-8","withGap":"magritte-with-gap___gbvGO_5-1-8","virtualized-list":"magritte-virtualized-list___qt2E6_5-1-8","virtualizedList":"magritte-virtualized-list___qt2E6_5-1-8","virtualized-item":"magritte-virtualized-item___qAYVN_5-1-8","virtualizedItem":"magritte-virtualized-item___qAYVN_5-1-8","was-expanded":"magritte-was-expanded___uCFbW_5-1-8","wasExpanded":"magritte-was-expanded___uCFbW_5-1-8"};
|
|
3
|
-
|
|
4
|
-
export { styles as s };
|
|
5
|
-
//# sourceMappingURL=tree-selector-item-CZA_fh1j.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-selector-item-CZA_fh1j.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|