react-native-tree-multi-select 3.0.0-beta.5 → 3.0.0-beta.7
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/README.md +57 -26
- package/lib/module/TreeView.js +130 -24
- package/lib/module/TreeView.js.map +1 -1
- package/lib/module/components/DragOverlay.js +19 -2
- package/lib/module/components/DragOverlay.js.map +1 -1
- package/lib/module/components/NodeList.js +82 -29
- package/lib/module/components/NodeList.js.map +1 -1
- package/lib/module/constants/treeView.constants.js +5 -0
- package/lib/module/constants/treeView.constants.js.map +1 -1
- package/lib/module/helpers/moveTreeNode.helper.js +175 -47
- package/lib/module/helpers/moveTreeNode.helper.js.map +1 -1
- package/lib/module/helpers/toggleCheckbox.helper.js +5 -12
- package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/module/helpers/treeNode.helper.js +49 -0
- package/lib/module/helpers/treeNode.helper.js.map +1 -1
- package/lib/module/hooks/useDragDrop.js +470 -186
- package/lib/module/hooks/useDragDrop.js.map +1 -1
- package/lib/module/hooks/useScrollToNode.js +17 -0
- package/lib/module/hooks/useScrollToNode.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/store/treeView.store.js +7 -0
- package/lib/module/store/treeView.store.js.map +1 -1
- package/lib/module/types/dragDrop.types.js +0 -2
- package/lib/typescript/src/TreeView.d.ts.map +1 -1
- package/lib/typescript/src/components/DragOverlay.d.ts.map +1 -1
- package/lib/typescript/src/components/NodeList.d.ts.map +1 -1
- package/lib/typescript/src/constants/treeView.constants.d.ts +4 -0
- package/lib/typescript/src/constants/treeView.constants.d.ts.map +1 -1
- package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts +32 -0
- package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts.map +1 -1
- package/lib/typescript/src/helpers/toggleCheckbox.helper.d.ts.map +1 -1
- package/lib/typescript/src/helpers/treeNode.helper.d.ts +15 -0
- package/lib/typescript/src/helpers/treeNode.helper.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useDragDrop.d.ts +24 -6
- package/lib/typescript/src/hooks/useDragDrop.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useScrollToNode.d.ts +10 -0
- package/lib/typescript/src/hooks/useScrollToNode.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/store/treeView.store.d.ts +6 -0
- package/lib/typescript/src/store/treeView.store.d.ts.map +1 -1
- package/lib/typescript/src/types/dragDrop.types.d.ts +24 -12
- package/lib/typescript/src/types/dragDrop.types.d.ts.map +1 -1
- package/lib/typescript/src/types/treeView.types.d.ts +68 -12
- package/lib/typescript/src/types/treeView.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/TreeView.tsx +158 -26
- package/src/components/DragOverlay.tsx +32 -3
- package/src/components/NodeList.tsx +82 -28
- package/src/constants/treeView.constants.ts +6 -1
- package/src/helpers/moveTreeNode.helper.ts +160 -43
- package/src/helpers/toggleCheckbox.helper.ts +5 -12
- package/src/helpers/treeNode.helper.ts +52 -1
- package/src/hooks/useDragDrop.ts +573 -214
- package/src/hooks/useScrollToNode.ts +21 -0
- package/src/index.tsx +3 -1
- package/src/store/treeView.store.ts +6 -0
- package/src/types/dragDrop.types.ts +25 -13
- package/src/types/treeView.types.ts +71 -11
- package/lib/module/components/DropIndicator.js +0 -79
- package/lib/module/components/DropIndicator.js.map +0 -1
- package/lib/typescript/src/components/DropIndicator.d.ts +0 -12
- package/lib/typescript/src/components/DropIndicator.d.ts.map +0 -1
- package/src/components/DropIndicator.tsx +0 -95
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
-
import { View, StyleSheet, TouchableOpacity } from "react-native";
|
|
4
|
+
import { View, StyleSheet, TouchableOpacity, Platform } from "react-native";
|
|
5
5
|
import { FlashList } from "@shopify/flash-list";
|
|
6
6
|
import { useTreeViewStore } from "../store/treeView.store.js";
|
|
7
7
|
import { getFilteredTreeData, getFlattenedTreeData, getCheckboxValue, getInnerMostChildrenIdsInTree, handleToggleExpand, toggleCheckboxes } from "../helpers/index.js";
|
|
8
8
|
import { CheckboxView } from "./CheckboxView.js";
|
|
9
9
|
import { CustomExpandCollapseIcon } from "./CustomExpandCollapseIcon.js";
|
|
10
10
|
import { DragOverlay } from "./DragOverlay.js";
|
|
11
|
-
import { defaultIndentationMultiplier, listHeaderFooterPadding } from "../constants/treeView.constants.js";
|
|
11
|
+
import { defaultIndentationMultiplier, defaultItemHeight, listHeaderFooterPadding } from "../constants/treeView.constants.js";
|
|
12
12
|
import { useShallow } from "zustand/react/shallow";
|
|
13
13
|
import { typedMemo } from "../utils/typedMemo.js";
|
|
14
14
|
import { useScrollToNode } from "../hooks/useScrollToNode.js";
|
|
@@ -39,7 +39,10 @@ function _NodeList(props) {
|
|
|
39
39
|
autoScrollThreshold = 60,
|
|
40
40
|
autoScrollSpeed = 1.0,
|
|
41
41
|
dragOverlayOffset = -2,
|
|
42
|
+
overlayYCorrection,
|
|
42
43
|
autoExpandDelay = 800,
|
|
44
|
+
autoExpand = true,
|
|
45
|
+
magneticSnap = true,
|
|
43
46
|
customizations: dragDropCustomizations,
|
|
44
47
|
canDrop: canDropCallback,
|
|
45
48
|
maxDepth,
|
|
@@ -48,9 +51,10 @@ function _NodeList(props) {
|
|
|
48
51
|
autoScrollToDroppedNode
|
|
49
52
|
} = dragAndDrop ?? {};
|
|
50
53
|
|
|
51
|
-
// When the dragAndDrop prop is provided, drag is enabled by default
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
+
// When the dragAndDrop prop is provided, drag is enabled by default on native
|
|
55
|
+
// (iOS/Android). On web it defaults OFF because the PanResponder-based drag is
|
|
56
|
+
// still a work in progress there - consumers can opt in with `enabled: true`.
|
|
57
|
+
const dragEnabled = dragAndDrop ? _dragEnabled ?? Platform.OS !== "web" : false;
|
|
54
58
|
const {
|
|
55
59
|
expanded,
|
|
56
60
|
initialTreeViewData,
|
|
@@ -66,13 +70,30 @@ function _NodeList(props) {
|
|
|
66
70
|
})));
|
|
67
71
|
const flashListRef = useRef(null);
|
|
68
72
|
const containerRef = useRef(null);
|
|
69
|
-
const internalDataRef = useRef(null);
|
|
70
73
|
const measuredItemHeightRef = useRef(0);
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
const contentHeightRef = useRef(0);
|
|
75
|
+
// Measured row heights keyed by stable node id (NOT flattened index, which is
|
|
76
|
+
// reused by different nodes across expand/collapse/filter/reorder). Used for
|
|
77
|
+
// accurate drop targeting with variable-height rows when the whole list is
|
|
78
|
+
// rendered. Keying by id means a stale entry can never satisfy the
|
|
79
|
+
// "all current rows measured" gate in useDragDrop.
|
|
80
|
+
const itemHeightsRef = useRef(new Map());
|
|
81
|
+
const handleItemLayout = useCallback((id, height) => {
|
|
82
|
+
if (height > 0) {
|
|
83
|
+
itemHeightsRef.current.set(id, height);
|
|
84
|
+
// First measured height seeds the uniform fallback used while
|
|
85
|
+
// virtualization keeps some rows unmeasured.
|
|
86
|
+
if (measuredItemHeightRef.current === 0) {
|
|
87
|
+
measuredItemHeightRef.current = height;
|
|
88
|
+
}
|
|
74
89
|
}
|
|
75
90
|
}, []);
|
|
91
|
+
|
|
92
|
+
// Measured heights of removed nodes would otherwise accumulate forever on
|
|
93
|
+
// dynamic trees; clear on structural change and let rows re-measure on layout.
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
itemHeightsRef.current.clear();
|
|
96
|
+
}, [initialTreeViewData]);
|
|
76
97
|
const [initialScrollIndex, setInitialScrollIndex] = useState(-1);
|
|
77
98
|
|
|
78
99
|
// First we filter the tree as per the search term and keys
|
|
@@ -103,11 +124,10 @@ function _NodeList(props) {
|
|
|
103
124
|
overlayX,
|
|
104
125
|
isDragging,
|
|
105
126
|
draggedNode,
|
|
106
|
-
effectiveDropLevel,
|
|
107
127
|
handleNodeTouchStart,
|
|
108
128
|
handleNodeTouchEnd,
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
handleScroll: dragHandleScroll,
|
|
130
|
+
containerHeightRef
|
|
111
131
|
} = useDragDrop({
|
|
112
132
|
storeId,
|
|
113
133
|
flattenedNodes: flattenedFilteredNodes,
|
|
@@ -120,10 +140,14 @@ function _NodeList(props) {
|
|
|
120
140
|
longPressDuration,
|
|
121
141
|
autoScrollThreshold,
|
|
122
142
|
autoScrollSpeed,
|
|
123
|
-
internalDataRef,
|
|
124
143
|
measuredItemHeightRef,
|
|
144
|
+
contentHeightRef,
|
|
145
|
+
itemHeightsRef,
|
|
125
146
|
dragOverlayOffset,
|
|
147
|
+
overlayYCorrection,
|
|
126
148
|
autoExpandDelay,
|
|
149
|
+
autoExpand,
|
|
150
|
+
magneticSnap,
|
|
127
151
|
indentationMultiplier: effectiveIndentationMultiplier,
|
|
128
152
|
canDrop: canDropCallback,
|
|
129
153
|
maxDepth,
|
|
@@ -133,14 +157,25 @@ function _NodeList(props) {
|
|
|
133
157
|
autoScrollToDroppedNode
|
|
134
158
|
});
|
|
135
159
|
|
|
136
|
-
//
|
|
160
|
+
// The hook owns scroll-offset bookkeeping (single-writer during drag,
|
|
161
|
+
// long-press cancellation); this wrapper just forwards to the user's onScroll.
|
|
137
162
|
const handleScroll = useCallback(event => {
|
|
138
|
-
|
|
139
|
-
// Cancel long press timer if user is scrolling
|
|
140
|
-
cancelLongPressTimer();
|
|
141
|
-
// Forward to user's onScroll
|
|
163
|
+
dragHandleScroll(event);
|
|
142
164
|
treeFlashListProps?.onScroll?.(event);
|
|
143
|
-
}, [
|
|
165
|
+
}, [dragHandleScroll, treeFlashListProps]);
|
|
166
|
+
|
|
167
|
+
// Track total content height so auto-scroll during drag can clamp to the
|
|
168
|
+
// scrollable range.
|
|
169
|
+
const handleContentSizeChange = useCallback((width, height) => {
|
|
170
|
+
contentHeightRef.current = height;
|
|
171
|
+
treeFlashListProps?.onContentSizeChange?.(width, height);
|
|
172
|
+
}, [contentHeightRef, treeFlashListProps]);
|
|
173
|
+
|
|
174
|
+
// Keep the container height fresh on resize (orientation change, keyboard, split
|
|
175
|
+
// view) so auto-scroll edge detection and clamping don't go stale mid-session.
|
|
176
|
+
const handleContainerLayout = useCallback(e => {
|
|
177
|
+
containerHeightRef.current = e.nativeEvent.layout.height;
|
|
178
|
+
}, [containerHeightRef]);
|
|
144
179
|
const nodeRenderer = useCallback(({
|
|
145
180
|
item,
|
|
146
181
|
index
|
|
@@ -154,8 +189,12 @@ function _NodeList(props) {
|
|
|
154
189
|
CheckboxComponent: CheckboxComponent,
|
|
155
190
|
ExpandCollapseIconComponent: ExpandCollapseIconComponent,
|
|
156
191
|
ExpandCollapseTouchableComponent: ExpandCollapseTouchableComponent,
|
|
157
|
-
CustomNodeRowComponent: CustomNodeRowComponent
|
|
158
|
-
|
|
192
|
+
CustomNodeRowComponent: CustomNodeRowComponent
|
|
193
|
+
|
|
194
|
+
// Index only matters for drag touch bookkeeping; keep it stable
|
|
195
|
+
// when drag is off so memoized nodes skip index-shift re-renders
|
|
196
|
+
,
|
|
197
|
+
nodeIndex: dragEnabled ? index : 0,
|
|
159
198
|
dragEnabled: dragEnabled,
|
|
160
199
|
isDragging: isDragging,
|
|
161
200
|
onNodeTouchStart: dragEnabled ? handleNodeTouchStart : undefined,
|
|
@@ -165,15 +204,20 @@ function _NodeList(props) {
|
|
|
165
204
|
});
|
|
166
205
|
}, [storeId, CheckboxComponent, ExpandCollapseIconComponent, ExpandCollapseTouchableComponent, CustomNodeRowComponent, checkBoxViewStyleProps, indentationMultiplier, dragEnabled, isDragging, handleNodeTouchStart, handleNodeTouchEnd, dragDropCustomizations, handleItemLayout]);
|
|
167
206
|
|
|
168
|
-
// Extract FlashList props but exclude onScroll (we provide
|
|
207
|
+
// Extract FlashList props but exclude onScroll / onContentSizeChange (we provide
|
|
208
|
+
// our own combined handlers that still forward to the user's callbacks)
|
|
169
209
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
170
210
|
const {
|
|
171
211
|
onScroll: _userOnScroll,
|
|
212
|
+
onContentSizeChange: _userOnContentSizeChange,
|
|
172
213
|
...restFlashListProps
|
|
173
214
|
} = treeFlashListProps ?? {};
|
|
174
215
|
const flashListElement = /*#__PURE__*/_jsx(FlashList, {
|
|
175
|
-
ref: flashListRef
|
|
176
|
-
estimatedItemSize
|
|
216
|
+
ref: flashListRef
|
|
217
|
+
// estimatedItemSize is used by FlashList v1; v2 auto-measures and ignores
|
|
218
|
+
// it. Consumers can override via treeFlashListProps (spread below).
|
|
219
|
+
,
|
|
220
|
+
estimatedItemSize: defaultItemHeight,
|
|
177
221
|
initialScrollIndex: initialScrollIndex,
|
|
178
222
|
removeClippedSubviews: true,
|
|
179
223
|
keyboardShouldPersistTaps: "handled",
|
|
@@ -182,6 +226,7 @@ function _NodeList(props) {
|
|
|
182
226
|
ListFooterComponent: /*#__PURE__*/_jsx(HeaderFooterView, {}),
|
|
183
227
|
...restFlashListProps,
|
|
184
228
|
onScroll: handleScroll,
|
|
229
|
+
onContentSizeChange: handleContentSizeChange,
|
|
185
230
|
scrollEnabled: isDragging ? false : restFlashListProps?.scrollEnabled ?? true,
|
|
186
231
|
data: flattenedFilteredNodes,
|
|
187
232
|
renderItem: nodeRenderer
|
|
@@ -190,13 +235,17 @@ function _NodeList(props) {
|
|
|
190
235
|
children: dragEnabled ? /*#__PURE__*/_jsxs(View, {
|
|
191
236
|
ref: containerRef,
|
|
192
237
|
style: styles.dragContainer,
|
|
238
|
+
onLayout: handleContainerLayout,
|
|
193
239
|
...panResponder.panHandlers,
|
|
194
240
|
children: [flashListElement, isDragging && draggedNode && /*#__PURE__*/_jsx(DragOverlay, {
|
|
195
241
|
storeId: storeId,
|
|
196
242
|
overlayY: overlayY,
|
|
197
243
|
overlayX: overlayX,
|
|
198
|
-
node: draggedNode
|
|
199
|
-
|
|
244
|
+
node: draggedNode
|
|
245
|
+
/* Constant for the whole drag: the level shift toward the
|
|
246
|
+
drop target is expressed via the overlayX translate, not
|
|
247
|
+
a re-render (which caused visible indent flicker). */,
|
|
248
|
+
level: draggedNode.level ?? 0,
|
|
200
249
|
indentationMultiplier: effectiveIndentationMultiplier,
|
|
201
250
|
CheckboxComponent: CheckboxComponent,
|
|
202
251
|
ExpandCollapseIconComponent: ExpandCollapseIconComponent,
|
|
@@ -296,8 +345,8 @@ function _Node(props) {
|
|
|
296
345
|
const invalidOpacity = dragDropCustomizations?.invalidTargetOpacity ?? 0.3;
|
|
297
346
|
const nodeOpacity = CustomNodeRowComponent ? 1.0 : isDraggingGlobal ? isBeingDragged ? draggedOpacity : isDragInvalid ? invalidOpacity : 1.0 : 1.0;
|
|
298
347
|
const handleLayout = useCallback(e => {
|
|
299
|
-
onItemLayout?.(e.nativeEvent.layout.height);
|
|
300
|
-
}, [onItemLayout]);
|
|
348
|
+
onItemLayout?.(node.id, e.nativeEvent.layout.height);
|
|
349
|
+
}, [onItemLayout, node.id]);
|
|
301
350
|
const touchHandlers = dragEnabled ? {
|
|
302
351
|
onTouchStart: handleTouchStart,
|
|
303
352
|
onTouchEnd: handleTouchEnd,
|
|
@@ -375,6 +424,8 @@ function NodeDropIndicator({
|
|
|
375
424
|
const circleSize = styleProps?.circleSize ?? 10;
|
|
376
425
|
const highlightColor = styleProps?.highlightColor ?? "rgba(0, 120, 255, 0.15)";
|
|
377
426
|
const highlightBorderColor = styleProps?.highlightBorderColor ?? "rgba(0, 120, 255, 0.5)";
|
|
427
|
+
const highlightBorderWidth = styleProps?.highlightBorderWidth ?? 2;
|
|
428
|
+
const highlightBorderRadius = styleProps?.highlightBorderRadius ?? 4;
|
|
378
429
|
|
|
379
430
|
// Indent the line to match the node's nesting level so users can
|
|
380
431
|
// visually distinguish drops at different tree depths.
|
|
@@ -385,7 +436,9 @@ function NodeDropIndicator({
|
|
|
385
436
|
style: [styles.dropHighlight, {
|
|
386
437
|
left: leftOffset,
|
|
387
438
|
backgroundColor: highlightColor,
|
|
388
|
-
borderColor: highlightBorderColor
|
|
439
|
+
borderColor: highlightBorderColor,
|
|
440
|
+
borderWidth: highlightBorderWidth,
|
|
441
|
+
borderRadius: highlightBorderRadius
|
|
389
442
|
}]
|
|
390
443
|
});
|
|
391
444
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","TouchableOpacity","FlashList","useTreeViewStore","getFilteredTreeData","getFlattenedTreeData","getCheckboxValue","getInnerMostChildrenIdsInTree","handleToggleExpand","toggleCheckboxes","CheckboxView","CustomExpandCollapseIcon","DragOverlay","defaultIndentationMultiplier","listHeaderFooterPadding","useShallow","typedMemo","useScrollToNode","useDragDrop","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","NodeList","_NodeList","props","storeId","scrollToNodeHandlerRef","initialScrollNodeID","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","dragAndDrop","enabled","_dragEnabled","onDragStart","onDragEnd","onDragCancel","longPressDuration","autoScrollThreshold","autoScrollSpeed","dragOverlayOffset","autoExpandDelay","customizations","dragDropCustomizations","canDrop","canDropCallback","maxDepth","canNodeHaveChildren","canDrag","autoScrollToDroppedNode","dragEnabled","expanded","initialTreeViewData","updateInnerMostChildrenIds","searchKeys","searchText","state","flashListRef","containerRef","internalDataRef","measuredItemHeightRef","handleItemLayout","height","current","initialScrollIndex","setInitialScrollIndex","filteredTree","trim","toLowerCase","flattenedFilteredNodes","updatedInnerMostChildrenIds","effectiveIndentationMultiplier","panResponder","overlayY","overlayX","isDragging","draggedNode","effectiveDropLevel","handleNodeTouchStart","handleNodeTouchEnd","cancelLongPressTimer","scrollOffsetRef","flattenedNodes","handleScroll","event","nativeEvent","contentOffset","y","onScroll","nodeRenderer","item","index","Node","node","level","nodeIndex","onNodeTouchStart","undefined","onNodeTouchEnd","onItemLayout","_userOnScroll","restFlashListProps","flashListElement","ref","estimatedItemSize","removeClippedSubviews","keyboardShouldPersistTaps","drawDistance","ListHeaderComponent","HeaderFooterView","ListFooterComponent","scrollEnabled","data","renderItem","children","style","styles","dragContainer","panHandlers","padding","_Node","isDraggingGlobal","isExpanded","value","isBeingDragged","isDragInvalid","isDropTarget","nodeDropPosition","nodeDropLevel","has","id","checked","indeterminate","draggedNodeId","invalidDragTargetIds","dropTargetNodeId","dropPosition","dropLevel","wasDraggedRef","_onToggleExpand","_onCheck","handleTouchStart","e","pageY","locationY","handleTouchEnd","draggedOpacity","draggedNodeOpacity","invalidOpacity","invalidTargetOpacity","nodeOpacity","handleLayout","layout","touchHandlers","onTouchStart","onTouchEnd","onTouchCancel","CustomDropIndicator","CustomDropIndicatorComponent","indicatorLevel","dropIndicator","position","NodeDropIndicator","styleProps","dropIndicatorStyleProps","testID","onLayout","nodeCheckboxAndArrowRow","paddingStart","opacity","nodeOverflowVisible","text","name","onValueChange","length","nodeExpandableArrowTouchable","onPress","checkedValue","onCheck","onExpand","isInvalidDropTarget","isDraggedNode","dragHandleProps","lineColor","lineThickness","circleSize","highlightColor","highlightBorderColor","leftOffset","pointerEvents","dropHighlight","left","backgroundColor","borderColor","safeLeftOffset","Math","max","dropLineContainer","dropLineTop","dropLineBottom","width","borderRadius","marginLeft","dropLine","create","flex","flexDirection","alignItems","minWidth","top","bottom","right","borderWidth","zIndex","overflow"],"sourceRoot":"../../../src","sources":["components/NodeList.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","TouchableOpacity","Platform","FlashList","useTreeViewStore","getFilteredTreeData","getFlattenedTreeData","getCheckboxValue","getInnerMostChildrenIdsInTree","handleToggleExpand","toggleCheckboxes","CheckboxView","CustomExpandCollapseIcon","DragOverlay","defaultIndentationMultiplier","defaultItemHeight","listHeaderFooterPadding","useShallow","typedMemo","useScrollToNode","useDragDrop","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","NodeList","_NodeList","props","storeId","scrollToNodeHandlerRef","initialScrollNodeID","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","dragAndDrop","enabled","_dragEnabled","onDragStart","onDragEnd","onDragCancel","longPressDuration","autoScrollThreshold","autoScrollSpeed","dragOverlayOffset","overlayYCorrection","autoExpandDelay","autoExpand","magneticSnap","customizations","dragDropCustomizations","canDrop","canDropCallback","maxDepth","canNodeHaveChildren","canDrag","autoScrollToDroppedNode","dragEnabled","OS","expanded","initialTreeViewData","updateInnerMostChildrenIds","searchKeys","searchText","state","flashListRef","containerRef","measuredItemHeightRef","contentHeightRef","itemHeightsRef","Map","handleItemLayout","id","height","current","set","clear","initialScrollIndex","setInitialScrollIndex","filteredTree","trim","toLowerCase","flattenedFilteredNodes","updatedInnerMostChildrenIds","effectiveIndentationMultiplier","panResponder","overlayY","overlayX","isDragging","draggedNode","handleNodeTouchStart","handleNodeTouchEnd","handleScroll","dragHandleScroll","containerHeightRef","flattenedNodes","event","onScroll","handleContentSizeChange","width","onContentSizeChange","handleContainerLayout","e","nativeEvent","layout","nodeRenderer","item","index","Node","node","level","nodeIndex","onNodeTouchStart","undefined","onNodeTouchEnd","onItemLayout","_userOnScroll","_userOnContentSizeChange","restFlashListProps","flashListElement","ref","estimatedItemSize","removeClippedSubviews","keyboardShouldPersistTaps","drawDistance","ListHeaderComponent","HeaderFooterView","ListFooterComponent","scrollEnabled","data","renderItem","children","style","styles","dragContainer","onLayout","panHandlers","padding","_Node","isDraggingGlobal","isExpanded","value","isBeingDragged","isDragInvalid","isDropTarget","nodeDropPosition","nodeDropLevel","has","checked","indeterminate","draggedNodeId","invalidDragTargetIds","dropTargetNodeId","dropPosition","dropLevel","wasDraggedRef","_onToggleExpand","_onCheck","handleTouchStart","pageY","locationY","handleTouchEnd","draggedOpacity","draggedNodeOpacity","invalidOpacity","invalidTargetOpacity","nodeOpacity","handleLayout","touchHandlers","onTouchStart","onTouchEnd","onTouchCancel","CustomDropIndicator","CustomDropIndicatorComponent","indicatorLevel","dropIndicator","position","NodeDropIndicator","styleProps","dropIndicatorStyleProps","testID","nodeCheckboxAndArrowRow","paddingStart","opacity","nodeOverflowVisible","text","name","onValueChange","length","nodeExpandableArrowTouchable","onPress","checkedValue","onCheck","onExpand","isInvalidDropTarget","isDraggedNode","dragHandleProps","lineColor","lineThickness","circleSize","highlightColor","highlightBorderColor","highlightBorderWidth","highlightBorderRadius","leftOffset","pointerEvents","dropHighlight","left","backgroundColor","borderColor","borderWidth","borderRadius","safeLeftOffset","Math","max","dropLineContainer","dropLineTop","dropLineBottom","marginLeft","dropLine","create","flex","flexDirection","alignItems","minWidth","top","bottom","right","zIndex","overflow"],"sourceRoot":"../../../src","sources":["components/NodeList.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,4 +4,9 @@ export const defaultIndentationMultiplier = 15;
|
|
|
4
4
|
|
|
5
5
|
/** Padding used by the FlashList header/footer component. Total header height = 2 * this value. */
|
|
6
6
|
export const listHeaderFooterPadding = 5;
|
|
7
|
+
|
|
8
|
+
/** Estimated/default row height in px. Used as FlashList's estimatedItemSize and as
|
|
9
|
+
* the drag-and-drop fallback height before a row has been measured (kept in one
|
|
10
|
+
* place so the two never silently diverge). */
|
|
11
|
+
export const defaultItemHeight = 36;
|
|
7
12
|
//# sourceMappingURL=treeView.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultIndentationMultiplier","listHeaderFooterPadding"],"sourceRoot":"../../../src","sources":["constants/treeView.constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,4BAA4B,GAAG,EAAE;;AAE9C;AACA,OAAO,MAAMC,uBAAuB,GAAG,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["defaultIndentationMultiplier","listHeaderFooterPadding","defaultItemHeight"],"sourceRoot":"../../../src","sources":["constants/treeView.constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,4BAA4B,GAAG,EAAE;;AAE9C;AACA,OAAO,MAAMC,uBAAuB,GAAG,CAAC;;AAExC;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAG,EAAE","ignoreList":[]}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { getTreeViewStore } from "../store/treeView.store.js";
|
|
4
|
+
import { initializeNodeMaps } from "./treeNode.helper.js";
|
|
5
|
+
import { recalculateCheckedStates } from "./toggleCheckbox.helper.js";
|
|
6
|
+
import { expandNodes } from "./expandCollapse.helper.js";
|
|
7
|
+
|
|
3
8
|
/**
|
|
4
9
|
* Move a node within a tree structure. Returns a new tree (no mutation).
|
|
5
10
|
*
|
|
@@ -28,61 +33,185 @@ export function moveTreeNode(data, draggedNodeId, targetNodeId, position) {
|
|
|
28
33
|
return cloned;
|
|
29
34
|
}
|
|
30
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Commit the result of a `moveTreeNode` to the store: swap in the new tree,
|
|
38
|
+
* rebuild the node maps, recalculate parent checked/indeterminate states, and
|
|
39
|
+
* expand whatever is needed to make the moved node visible ("inside" drops
|
|
40
|
+
* expand the target; ancestors of the moved node are always expanded).
|
|
41
|
+
*
|
|
42
|
+
* Shared by the interactive drag commit (useDragDrop.handleDragEnd) and the
|
|
43
|
+
* programmatic `TreeViewRef.moveNode` so the two paths cannot drift.
|
|
44
|
+
*/
|
|
45
|
+
export function applyMoveToStore(storeId, newData, movedNodeId, targetNodeId, position) {
|
|
46
|
+
const store = getTreeViewStore(storeId);
|
|
47
|
+
store.getState().updateInitialTreeViewData(newData);
|
|
48
|
+
initializeNodeMaps(storeId, newData);
|
|
49
|
+
recalculateCheckedStates(storeId);
|
|
50
|
+
if (position === "inside") {
|
|
51
|
+
expandNodes(storeId, [targetNodeId]);
|
|
52
|
+
}
|
|
53
|
+
expandNodes(storeId, [movedNodeId], true);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Locate a node within a tree, returning its parent id (null at root) and its
|
|
58
|
+
* index within that parent's children (or the root array). Returns null if the
|
|
59
|
+
* node is not found. Iterative (stack-based) DFS.
|
|
60
|
+
*
|
|
61
|
+
* Used to build the lightweight `MoveResult` delta (previous/new parent + index)
|
|
62
|
+
* without exposing a full tree copy.
|
|
63
|
+
*/
|
|
64
|
+
export function findNodePosition(data, nodeId) {
|
|
65
|
+
const stack = [{
|
|
66
|
+
nodes: data,
|
|
67
|
+
parentId: null
|
|
68
|
+
}];
|
|
69
|
+
while (stack.length > 0) {
|
|
70
|
+
const {
|
|
71
|
+
nodes,
|
|
72
|
+
parentId
|
|
73
|
+
} = stack.pop();
|
|
74
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
75
|
+
const node = nodes[i];
|
|
76
|
+
if (node.id === nodeId) return {
|
|
77
|
+
parentId,
|
|
78
|
+
index: i
|
|
79
|
+
};
|
|
80
|
+
if (node.children?.length) {
|
|
81
|
+
stack.push({
|
|
82
|
+
nodes: node.children,
|
|
83
|
+
parentId: node.id
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* `findNodePosition` for a node that is still in the store's CURRENT tree:
|
|
93
|
+
* uses the already-built childToParentMap/nodeMap for O(depth + siblings)
|
|
94
|
+
* instead of a full-tree DFS. Only valid while the maps match `data` (i.e.
|
|
95
|
+
* before the move mutates the tree).
|
|
96
|
+
*/
|
|
97
|
+
export function findNodePositionFromMaps(data, nodeMap, childToParentMap, nodeId) {
|
|
98
|
+
const parentId = childToParentMap.get(nodeId);
|
|
99
|
+
const siblings = parentId !== undefined ? nodeMap.get(parentId)?.children : data;
|
|
100
|
+
if (!siblings) return null;
|
|
101
|
+
const index = siblings.findIndex(n => n.id === nodeId);
|
|
102
|
+
return index === -1 ? null : {
|
|
103
|
+
parentId: parentId ?? null,
|
|
104
|
+
index
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
31
108
|
/**
|
|
32
109
|
* Check if `candidateDescendantId` is a descendant of `ancestorId` in the tree.
|
|
110
|
+
* Iterative (stack-based) DFS to avoid call-stack limits on deep trees.
|
|
33
111
|
*/
|
|
34
112
|
function isDescendant(nodes, ancestorId, candidateDescendantId) {
|
|
35
|
-
|
|
113
|
+
const stack = [...nodes];
|
|
114
|
+
while (stack.length > 0) {
|
|
115
|
+
const node = stack.pop();
|
|
36
116
|
if (node.id === ancestorId) {
|
|
37
|
-
// Found the ancestor - search its subtree for the candidate
|
|
117
|
+
// Found the ancestor - search its subtree for the candidate.
|
|
118
|
+
// IDs are unique, so the first match is the only ancestor to check.
|
|
38
119
|
return containsNode(node.children ?? [], candidateDescendantId);
|
|
39
120
|
}
|
|
40
|
-
if (node.children
|
|
41
|
-
|
|
121
|
+
if (node.children) {
|
|
122
|
+
for (const child of node.children) stack.push(child);
|
|
42
123
|
}
|
|
43
124
|
}
|
|
44
125
|
return false;
|
|
45
126
|
}
|
|
46
127
|
|
|
47
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* Check if a node with the given ID exists anywhere in the subtree.
|
|
130
|
+
* Iterative (stack-based) DFS to avoid call-stack limits on deep trees.
|
|
131
|
+
*/
|
|
48
132
|
function containsNode(nodes, nodeId) {
|
|
49
|
-
|
|
133
|
+
const stack = [...nodes];
|
|
134
|
+
while (stack.length > 0) {
|
|
135
|
+
const node = stack.pop();
|
|
50
136
|
if (node.id === nodeId) return true;
|
|
51
|
-
if (node.children
|
|
137
|
+
if (node.children) {
|
|
138
|
+
for (const child of node.children) stack.push(child);
|
|
139
|
+
}
|
|
52
140
|
}
|
|
53
141
|
return false;
|
|
54
142
|
}
|
|
55
143
|
|
|
56
|
-
/**
|
|
144
|
+
/**
|
|
145
|
+
* Deep clone a tree structure so mutations don't affect the original.
|
|
146
|
+
* Iterative (stack-based) clone to avoid call-stack limits on deep trees.
|
|
147
|
+
* Preserves the original shape: every node carries a `children` key
|
|
148
|
+
* (`undefined` for leaves, a cloned array - possibly empty - otherwise).
|
|
149
|
+
*/
|
|
57
150
|
function deepCloneTree(nodes) {
|
|
58
|
-
|
|
151
|
+
const root = nodes.map(node => ({
|
|
59
152
|
...node,
|
|
60
|
-
children:
|
|
153
|
+
children: undefined
|
|
61
154
|
}));
|
|
155
|
+
const stack = [{
|
|
156
|
+
src: nodes,
|
|
157
|
+
dst: root
|
|
158
|
+
}];
|
|
159
|
+
while (stack.length > 0) {
|
|
160
|
+
const {
|
|
161
|
+
src,
|
|
162
|
+
dst
|
|
163
|
+
} = stack.pop();
|
|
164
|
+
for (let i = 0; i < src.length; i++) {
|
|
165
|
+
const children = src[i].children;
|
|
166
|
+
if (children) {
|
|
167
|
+
const clonedChildren = children.map(child => ({
|
|
168
|
+
...child,
|
|
169
|
+
children: undefined
|
|
170
|
+
}));
|
|
171
|
+
dst[i].children = clonedChildren;
|
|
172
|
+
stack.push({
|
|
173
|
+
src: children,
|
|
174
|
+
dst: clonedChildren
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return root;
|
|
62
180
|
}
|
|
63
181
|
|
|
64
182
|
/**
|
|
65
183
|
* Remove a node by ID from the tree. Mutates the cloned tree in-place.
|
|
66
184
|
* Returns the removed node, or null if not found.
|
|
185
|
+
* Iterative (stack-based) DFS to avoid call-stack limits on deep trees.
|
|
67
186
|
*/
|
|
68
187
|
function removeNodeById(nodes, nodeId) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
188
|
+
// Each frame carries the array being scanned plus the node that owns it
|
|
189
|
+
// (null at the root) so an emptied children array can be detached.
|
|
190
|
+
const stack = [{
|
|
191
|
+
nodes,
|
|
192
|
+
parent: null
|
|
193
|
+
}];
|
|
194
|
+
while (stack.length > 0) {
|
|
195
|
+
const {
|
|
196
|
+
nodes: level,
|
|
197
|
+
parent
|
|
198
|
+
} = stack.pop();
|
|
199
|
+
for (let i = 0; i < level.length; i++) {
|
|
200
|
+
const node = level[i];
|
|
201
|
+
if (node.id === nodeId) {
|
|
202
|
+
const [removed] = level.splice(i, 1);
|
|
203
|
+
// Clean up an emptied children array on the owning parent
|
|
204
|
+
// (matches the original shape: leaves carry children: undefined).
|
|
205
|
+
if (parent && level.length === 0) {
|
|
206
|
+
parent.children = undefined;
|
|
84
207
|
}
|
|
85
|
-
return removed;
|
|
208
|
+
return removed ?? null;
|
|
209
|
+
}
|
|
210
|
+
if (node.children?.length) {
|
|
211
|
+
stack.push({
|
|
212
|
+
nodes: node.children,
|
|
213
|
+
parent: node
|
|
214
|
+
});
|
|
86
215
|
}
|
|
87
216
|
}
|
|
88
217
|
}
|
|
@@ -92,33 +221,32 @@ function removeNodeById(nodes, nodeId) {
|
|
|
92
221
|
/**
|
|
93
222
|
* Insert a node relative to a target node. Mutates the cloned tree in-place.
|
|
94
223
|
* Returns true if insertion was successful.
|
|
224
|
+
* Iterative (stack-based) DFS to avoid call-stack limits on deep trees.
|
|
95
225
|
*/
|
|
96
226
|
function insertNode(nodes, nodeToInsert, targetId, position) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
target.children.unshift(nodeToInsert);
|
|
227
|
+
const stack = [nodes];
|
|
228
|
+
while (stack.length > 0) {
|
|
229
|
+
const level = stack.pop();
|
|
230
|
+
for (let i = 0; i < level.length; i++) {
|
|
231
|
+
const node = level[i];
|
|
232
|
+
if (node.id === targetId) {
|
|
233
|
+
if (position === "above") {
|
|
234
|
+
level.splice(i, 0, nodeToInsert);
|
|
235
|
+
} else if (position === "below") {
|
|
236
|
+
level.splice(i + 1, 0, nodeToInsert);
|
|
108
237
|
} else {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
children
|
|
112
|
-
}
|
|
238
|
+
// "inside" - add as first child
|
|
239
|
+
if (node.children) {
|
|
240
|
+
node.children.unshift(nodeToInsert);
|
|
241
|
+
} else {
|
|
242
|
+
node.children = [nodeToInsert];
|
|
243
|
+
}
|
|
113
244
|
}
|
|
114
|
-
}
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
const children = nodes[i].children;
|
|
118
|
-
if (children) {
|
|
119
|
-
if (insertNode(children, nodeToInsert, targetId, position)) {
|
|
120
245
|
return true;
|
|
121
246
|
}
|
|
247
|
+
if (node.children?.length) {
|
|
248
|
+
stack.push(node.children);
|
|
249
|
+
}
|
|
122
250
|
}
|
|
123
251
|
}
|
|
124
252
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["moveTreeNode","data","draggedNodeId","targetNodeId","position","isDescendant","cloned","deepCloneTree","removedNode","removeNodeById","inserted","insertNode","nodes","
|
|
1
|
+
{"version":3,"names":["getTreeViewStore","initializeNodeMaps","recalculateCheckedStates","expandNodes","moveTreeNode","data","draggedNodeId","targetNodeId","position","isDescendant","cloned","deepCloneTree","removedNode","removeNodeById","inserted","insertNode","applyMoveToStore","storeId","newData","movedNodeId","store","getState","updateInitialTreeViewData","findNodePosition","nodeId","stack","nodes","parentId","length","pop","i","node","id","index","children","push","findNodePositionFromMaps","nodeMap","childToParentMap","get","siblings","undefined","findIndex","n","ancestorId","candidateDescendantId","containsNode","child","root","map","src","dst","clonedChildren","parent","level","removed","splice","nodeToInsert","targetId","unshift"],"sourceRoot":"../../../src","sources":["helpers/moveTreeNode.helper.ts"],"mappings":";;AAEA,SAASA,gBAAgB,QAAQ,4BAAyB;AAC1D,SAASC,kBAAkB,QAAQ,sBAAmB;AACtD,SAASC,wBAAwB,QAAQ,4BAAyB;AAClE,SAASC,WAAW,QAAQ,4BAAyB;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CACxBC,IAAoB,EACpBC,aAAiB,EACjBC,YAAgB,EAChBC,QAAsB,EACR;EACd,IAAIF,aAAa,KAAKC,YAAY,EAAE,OAAOF,IAAI;;EAE/C;EACA,IAAII,YAAY,CAACJ,IAAI,EAAEC,aAAa,EAAEC,YAAY,CAAC,EAAE,OAAOF,IAAI;;EAEhE;EACA,MAAMK,MAAM,GAAGC,aAAa,CAACN,IAAI,CAAC;;EAElC;EACA,MAAMO,WAAW,GAAGC,cAAc,CAACH,MAAM,EAAEJ,aAAa,CAAC;EACzD,IAAI,CAACM,WAAW,EAAE,OAAOP,IAAI;;EAE7B;EACA,MAAMS,QAAQ,GAAGC,UAAU,CAACL,MAAM,EAAEE,WAAW,EAAEL,YAAY,EAAEC,QAAQ,CAAC;EACxE,IAAI,CAACM,QAAQ,EAAE,OAAOT,IAAI;EAE1B,OAAOK,MAAM;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,gBAAgBA,CAC5BC,OAAe,EACfC,OAAuB,EACvBC,WAAe,EACfZ,YAAgB,EAChBC,QAAsB,EAClB;EACJ,MAAMY,KAAK,GAAGpB,gBAAgB,CAAKiB,OAAO,CAAC;EAC3CG,KAAK,CAACC,QAAQ,CAAC,CAAC,CAACC,yBAAyB,CAACJ,OAAO,CAAC;EACnDjB,kBAAkB,CAACgB,OAAO,EAAEC,OAAO,CAAC;EACpChB,wBAAwB,CAAKe,OAAO,CAAC;EACrC,IAAIT,QAAQ,KAAK,QAAQ,EAAE;IACvBL,WAAW,CAACc,OAAO,EAAE,CAACV,YAAY,CAAC,CAAC;EACxC;EACAJ,WAAW,CAACc,OAAO,EAAE,CAACE,WAAW,CAAC,EAAE,IAAI,CAAC;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,gBAAgBA,CAC5BlB,IAAoB,EACpBmB,MAAU,EACoC;EAC9C,MAAMC,KAA6D,GAAG,CAClE;IAAEC,KAAK,EAAErB,IAAI;IAAEsB,QAAQ,EAAE;EAAK,CAAC,CAClC;EACD,OAAOF,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAM;MAAEF,KAAK;MAAEC;IAAS,CAAC,GAAGF,KAAK,CAACI,GAAG,CAAC,CAAE;IACxC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,KAAK,CAACE,MAAM,EAAEE,CAAC,EAAE,EAAE;MACnC,MAAMC,IAAI,GAAGL,KAAK,CAACI,CAAC,CAAE;MACtB,IAAIC,IAAI,CAACC,EAAE,KAAKR,MAAM,EAAE,OAAO;QAAEG,QAAQ;QAAEM,KAAK,EAAEH;MAAE,CAAC;MACrD,IAAIC,IAAI,CAACG,QAAQ,EAAEN,MAAM,EAAE;QACvBH,KAAK,CAACU,IAAI,CAAC;UAAET,KAAK,EAAEK,IAAI,CAACG,QAAQ;UAAEP,QAAQ,EAAEI,IAAI,CAACC;QAAG,CAAC,CAAC;MAC3D;IACJ;EACJ;EACA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,wBAAwBA,CACpC/B,IAAoB,EACpBgC,OAA8B,EAC9BC,gBAA6B,EAC7Bd,MAAU,EACoC;EAC9C,MAAMG,QAAQ,GAAGW,gBAAgB,CAACC,GAAG,CAACf,MAAM,CAAC;EAC7C,MAAMgB,QAAQ,GAAGb,QAAQ,KAAKc,SAAS,GACjCJ,OAAO,CAACE,GAAG,CAACZ,QAAQ,CAAC,EAAEO,QAAQ,GAC/B7B,IAAI;EACV,IAAI,CAACmC,QAAQ,EAAE,OAAO,IAAI;EAC1B,MAAMP,KAAK,GAAGO,QAAQ,CAACE,SAAS,CAAEC,CAAC,IAAKA,CAAC,CAACX,EAAE,KAAKR,MAAM,CAAC;EACxD,OAAOS,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG;IAAEN,QAAQ,EAAEA,QAAQ,IAAI,IAAI;IAAEM;EAAM,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA,SAASxB,YAAYA,CACjBiB,KAAqB,EACrBkB,UAAc,EACdC,qBAAyB,EAClB;EACP,MAAMpB,KAAqB,GAAG,CAAC,GAAGC,KAAK,CAAC;EACxC,OAAOD,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAMG,IAAI,GAAGN,KAAK,CAACI,GAAG,CAAC,CAAE;IACzB,IAAIE,IAAI,CAACC,EAAE,KAAKY,UAAU,EAAE;MACxB;MACA;MACA,OAAOE,YAAY,CAACf,IAAI,CAACG,QAAQ,IAAI,EAAE,EAAEW,qBAAqB,CAAC;IACnE;IACA,IAAId,IAAI,CAACG,QAAQ,EAAE;MACf,KAAK,MAAMa,KAAK,IAAIhB,IAAI,CAACG,QAAQ,EAAET,KAAK,CAACU,IAAI,CAACY,KAAK,CAAC;IACxD;EACJ;EACA,OAAO,KAAK;AAChB;;AAEA;AACA;AACA;AACA;AACA,SAASD,YAAYA,CAAKpB,KAAqB,EAAEF,MAAU,EAAW;EAClE,MAAMC,KAAqB,GAAG,CAAC,GAAGC,KAAK,CAAC;EACxC,OAAOD,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAMG,IAAI,GAAGN,KAAK,CAACI,GAAG,CAAC,CAAE;IACzB,IAAIE,IAAI,CAACC,EAAE,KAAKR,MAAM,EAAE,OAAO,IAAI;IACnC,IAAIO,IAAI,CAACG,QAAQ,EAAE;MACf,KAAK,MAAMa,KAAK,IAAIhB,IAAI,CAACG,QAAQ,EAAET,KAAK,CAACU,IAAI,CAACY,KAAK,CAAC;IACxD;EACJ;EACA,OAAO,KAAK;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASpC,aAAaA,CAAKe,KAAqB,EAAkB;EAC9D,MAAMsB,IAAoB,GAAGtB,KAAK,CAACuB,GAAG,CAAClB,IAAI,KAAK;IAAE,GAAGA,IAAI;IAAEG,QAAQ,EAAEO;EAAU,CAAC,CAAC,CAAC;EAClF,MAAMhB,KAA2D,GAAG,CAChE;IAAEyB,GAAG,EAAExB,KAAK;IAAEyB,GAAG,EAAEH;EAAK,CAAC,CAC5B;EACD,OAAOvB,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAM;MAAEsB,GAAG;MAAEC;IAAI,CAAC,GAAG1B,KAAK,CAACI,GAAG,CAAC,CAAE;IACjC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoB,GAAG,CAACtB,MAAM,EAAEE,CAAC,EAAE,EAAE;MACjC,MAAMI,QAAQ,GAAGgB,GAAG,CAACpB,CAAC,CAAC,CAAEI,QAAQ;MACjC,IAAIA,QAAQ,EAAE;QACV,MAAMkB,cAA8B,GAChClB,QAAQ,CAACe,GAAG,CAACF,KAAK,KAAK;UAAE,GAAGA,KAAK;UAAEb,QAAQ,EAAEO;QAAU,CAAC,CAAC,CAAC;QAC9DU,GAAG,CAACrB,CAAC,CAAC,CAAEI,QAAQ,GAAGkB,cAAc;QACjC3B,KAAK,CAACU,IAAI,CAAC;UAAEe,GAAG,EAAEhB,QAAQ;UAAEiB,GAAG,EAAEC;QAAe,CAAC,CAAC;MACtD;IACJ;EACJ;EACA,OAAOJ,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASnC,cAAcA,CACnBa,KAAqB,EACrBF,MAAU,EACS;EACnB;EACA;EACA,MAAMC,KAAqE,GAAG,CAC1E;IAAEC,KAAK;IAAE2B,MAAM,EAAE;EAAK,CAAC,CAC1B;EACD,OAAO5B,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAM;MAAEF,KAAK,EAAE4B,KAAK;MAAED;IAAO,CAAC,GAAG5B,KAAK,CAACI,GAAG,CAAC,CAAE;IAC7C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwB,KAAK,CAAC1B,MAAM,EAAEE,CAAC,EAAE,EAAE;MACnC,MAAMC,IAAI,GAAGuB,KAAK,CAACxB,CAAC,CAAE;MACtB,IAAIC,IAAI,CAACC,EAAE,KAAKR,MAAM,EAAE;QACpB,MAAM,CAAC+B,OAAO,CAAC,GAAGD,KAAK,CAACE,MAAM,CAAC1B,CAAC,EAAE,CAAC,CAAC;QACpC;QACA;QACA,IAAIuB,MAAM,IAAIC,KAAK,CAAC1B,MAAM,KAAK,CAAC,EAAE;UAC9ByB,MAAM,CAACnB,QAAQ,GAAGO,SAAS;QAC/B;QACA,OAAOc,OAAO,IAAI,IAAI;MAC1B;MACA,IAAIxB,IAAI,CAACG,QAAQ,EAAEN,MAAM,EAAE;QACvBH,KAAK,CAACU,IAAI,CAAC;UAAET,KAAK,EAAEK,IAAI,CAACG,QAAQ;UAAEmB,MAAM,EAAEtB;QAAK,CAAC,CAAC;MACtD;IACJ;EACJ;EACA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAShB,UAAUA,CACfW,KAAqB,EACrB+B,YAA0B,EAC1BC,QAAY,EACZlD,QAAsB,EACf;EACP,MAAMiB,KAAuB,GAAG,CAACC,KAAK,CAAC;EACvC,OAAOD,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE;IACrB,MAAM0B,KAAK,GAAG7B,KAAK,CAACI,GAAG,CAAC,CAAE;IAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwB,KAAK,CAAC1B,MAAM,EAAEE,CAAC,EAAE,EAAE;MACnC,MAAMC,IAAI,GAAGuB,KAAK,CAACxB,CAAC,CAAE;MACtB,IAAIC,IAAI,CAACC,EAAE,KAAK0B,QAAQ,EAAE;QACtB,IAAIlD,QAAQ,KAAK,OAAO,EAAE;UACtB8C,KAAK,CAACE,MAAM,CAAC1B,CAAC,EAAE,CAAC,EAAE2B,YAAY,CAAC;QACpC,CAAC,MAAM,IAAIjD,QAAQ,KAAK,OAAO,EAAE;UAC7B8C,KAAK,CAACE,MAAM,CAAC1B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE2B,YAAY,CAAC;QACxC,CAAC,MAAM;UACH;UACA,IAAI1B,IAAI,CAACG,QAAQ,EAAE;YACfH,IAAI,CAACG,QAAQ,CAACyB,OAAO,CAACF,YAAY,CAAC;UACvC,CAAC,MAAM;YACH1B,IAAI,CAACG,QAAQ,GAAG,CAACuB,YAAY,CAAC;UAClC;QACJ;QACA,OAAO,IAAI;MACf;MACA,IAAI1B,IAAI,CAACG,QAAQ,EAAEN,MAAM,EAAE;QACvBH,KAAK,CAACU,IAAI,CAACJ,IAAI,CAACG,QAAQ,CAAC;MAC7B;IACJ;EACJ;EACA,OAAO,KAAK;AAChB","ignoreList":[]}
|