@multiplatform.one/components 7.10.0 → 7.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -0
- package/dist/cjs/SheetModal/index.cjs +22 -3
- package/dist/cjs/SheetModal/index.native.js +50 -10
- package/dist/cjs/SheetModal/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +33 -12
- package/dist/cjs/Tabs/index.native.js +37 -12
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/views/TreeView.cjs +175 -43
- package/dist/cjs/views/TreeView.native.js +181 -46
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/esm/SheetModal/index.mjs +22 -3
- package/dist/esm/SheetModal/index.mjs.map +1 -1
- package/dist/esm/SheetModal/index.native.js +51 -11
- package/dist/esm/SheetModal/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +33 -12
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +37 -12
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/layouts/tags.mjs.map +1 -1
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/views/TreeView.mjs +175 -43
- package/dist/esm/views/TreeView.mjs.map +1 -1
- package/dist/esm/views/TreeView.native.js +181 -46
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/jsx/SheetModal/index.mjs +22 -3
- package/dist/jsx/SheetModal/index.mjs.map +1 -1
- package/dist/jsx/SheetModal/index.native.js +50 -10
- package/dist/jsx/SheetModal/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +33 -12
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +37 -12
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/layouts/tags.mjs.map +1 -1
- package/dist/jsx/layouts/tags.native.js.map +1 -1
- package/dist/jsx/views/TreeView.mjs +175 -43
- package/dist/jsx/views/TreeView.mjs.map +1 -1
- package/dist/jsx/views/TreeView.native.js +181 -46
- package/dist/jsx/views/TreeView.native.js.map +1 -1
- package/package.json +11 -11
- package/src/Accordion/index.tsx +1 -1
- package/src/SheetModal/SheetModal.fill.spec.tsx +147 -0
- package/src/SheetModal/SheetModal.ownedBody.spec.tsx +200 -0
- package/src/SheetModal/SheetModal.stories.spec.tsx +23 -2
- package/src/SheetModal/SheetModal.stories.tsx +275 -2
- package/src/SheetModal/index.native.tsx +50 -6
- package/src/SheetModal/index.tsx +40 -3
- package/src/Tabs/Tabs.lifecycle.spec.tsx +123 -0
- package/src/Tabs/Tabs.measurement.spec.tsx +186 -0
- package/src/Tabs/Tabs.stories.tsx +43 -0
- package/src/Tabs/index.tsx +42 -13
- package/src/layouts/tags.tsx +2 -1
- package/src/views/TreeView.reveal.spec.tsx +7 -0
- package/src/views/TreeView.reveal.stories.tsx +134 -0
- package/src/views/TreeView.scroll-index.spec.tsx +246 -0
- package/src/views/TreeView.scroll.spec.tsx +711 -50
- package/src/views/TreeView.tsx +230 -49
- package/types/SheetModal/index.d.ts +8 -1
- package/types/SheetModal/index.d.ts.map +1 -1
- package/types/SheetModal/index.native.d.ts +1 -1
- package/types/SheetModal/index.native.d.ts.map +1 -1
- package/types/Tabs/index.d.ts.map +1 -1
- package/types/layouts/tags.d.ts.map +1 -1
- package/types/views/TreeView.d.ts +10 -1
- package/types/views/TreeView.d.ts.map +1 -1
package/src/views/TreeView.tsx
CHANGED
|
@@ -134,6 +134,10 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
134
134
|
overscan?: number;
|
|
135
135
|
/** Height of the scrollable container in pixels */
|
|
136
136
|
height?: number;
|
|
137
|
+
/** Initial vertical offset in layout pixels, restored once after usable list layout. */
|
|
138
|
+
initialScrollOffset?: number;
|
|
139
|
+
/** Observed, bounded vertical offset. Does not report unacknowledged scroll commands. */
|
|
140
|
+
onScrollOffsetChange?: (offset: number) => void;
|
|
137
141
|
/** Message shown when there are no nodes */
|
|
138
142
|
emptyMessage?: string;
|
|
139
143
|
/** Controlled expansion; takes precedence over initial expansion props. */
|
|
@@ -142,6 +146,8 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
142
146
|
onExpandedIdsChange?: (ids: string[]) => void;
|
|
143
147
|
/** Expand ancestors and reveal this row. Change requestId to reveal the same ID again. */
|
|
144
148
|
revealRequest?: { id: string; requestId: number };
|
|
149
|
+
/** Called once when the current reveal target is measured, mounted and visible. */
|
|
150
|
+
onRevealComplete?: (request: { id: string; requestId: number }) => void;
|
|
145
151
|
/** Initially expanded node IDs (wins over expandByDefault when provided) */
|
|
146
152
|
defaultExpandedIds?: string[];
|
|
147
153
|
/** Expand every branch on initial load */
|
|
@@ -298,11 +304,14 @@ export function TreeView<T = unknown>({
|
|
|
298
304
|
estimateSize: estimateSizeProp,
|
|
299
305
|
overscan = 10,
|
|
300
306
|
height: heightProp,
|
|
307
|
+
initialScrollOffset,
|
|
308
|
+
onScrollOffsetChange,
|
|
301
309
|
emptyMessage: emptyMessageProp,
|
|
302
310
|
defaultExpandedIds,
|
|
303
311
|
expandedIds: controlledExpandedIds,
|
|
304
312
|
onExpandedIdsChange,
|
|
305
313
|
revealRequest,
|
|
314
|
+
onRevealComplete,
|
|
306
315
|
expandByDefault = false,
|
|
307
316
|
display = "default",
|
|
308
317
|
showExpansionArrows = true,
|
|
@@ -349,6 +358,31 @@ export function TreeView<T = unknown>({
|
|
|
349
358
|
const treeId = useId();
|
|
350
359
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
351
360
|
const flashListRef = useRef<FlashListRef<FlatNode<T>>>(null);
|
|
361
|
+
const initialScroll = useRef<
|
|
362
|
+
| {
|
|
363
|
+
offset: number;
|
|
364
|
+
attempted?: { target: number; width: number; height: number; contentHeight: number };
|
|
365
|
+
}
|
|
366
|
+
| undefined
|
|
367
|
+
>(
|
|
368
|
+
initialScrollOffset === undefined
|
|
369
|
+
? undefined
|
|
370
|
+
: { offset: Number.isFinite(initialScrollOffset) ? Math.max(0, initialScrollOffset) : 0 },
|
|
371
|
+
);
|
|
372
|
+
const cancelInitialScroll = useCallback(() => {
|
|
373
|
+
initialScroll.current = undefined;
|
|
374
|
+
}, []);
|
|
375
|
+
const hasNodes = nodes.length > 0;
|
|
376
|
+
const listInstance = useMemo(
|
|
377
|
+
() => ({ hasNodes, attached: false, loaded: false, indexScrollRequested: false, offset: 0 }),
|
|
378
|
+
[hasNodes],
|
|
379
|
+
);
|
|
380
|
+
const scrollActive = useRef(true);
|
|
381
|
+
const lastReportedOffset = useRef<number | undefined>(undefined);
|
|
382
|
+
const offsetCallback = useRef(onScrollOffsetChange);
|
|
383
|
+
useLayoutEffect(() => {
|
|
384
|
+
offsetCallback.current = onScrollOffsetChange;
|
|
385
|
+
}, [onScrollOffsetChange]);
|
|
352
386
|
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
353
387
|
// LC-71: ring is a React flag, not a render-time wasKeyboardFocus() read —
|
|
354
388
|
// Tab-away/Tab-back with the same activedescendant must still re-paint.
|
|
@@ -396,6 +430,7 @@ export function TreeView<T = unknown>({
|
|
|
396
430
|
|
|
397
431
|
const toggleNode = useCallback(
|
|
398
432
|
(node: TreeNode<T>) => {
|
|
433
|
+
cancelInitialScroll();
|
|
399
434
|
const next = new Set(expandedIds);
|
|
400
435
|
if (next.has(node.id)) {
|
|
401
436
|
next.delete(node.id);
|
|
@@ -405,7 +440,7 @@ export function TreeView<T = unknown>({
|
|
|
405
440
|
setExpandedIds(next);
|
|
406
441
|
onNodeToggle?.(node);
|
|
407
442
|
},
|
|
408
|
-
[expandedIds, setExpandedIds, onNodeToggle],
|
|
443
|
+
[expandedIds, setExpandedIds, onNodeToggle, cancelInitialScroll],
|
|
409
444
|
);
|
|
410
445
|
|
|
411
446
|
const previousExpandedIds = useRef(expandedIds);
|
|
@@ -470,16 +505,98 @@ export function TreeView<T = unknown>({
|
|
|
470
505
|
}
|
|
471
506
|
| undefined
|
|
472
507
|
>(undefined);
|
|
473
|
-
const
|
|
474
|
-
const
|
|
508
|
+
const scrollFrame = useRef<number | undefined>(undefined);
|
|
509
|
+
const scrollStep = useRef<() => void>(() => {});
|
|
475
510
|
const renderedRows = useRef(new Set<string>());
|
|
476
|
-
const
|
|
477
|
-
|
|
511
|
+
const scrollBounds = useCallback(() => {
|
|
512
|
+
const list = flashListRef.current;
|
|
513
|
+
if (!scrollActive.current || !listInstance.attached || !listInstance.loaded || !list) return;
|
|
514
|
+
if (isWeb) {
|
|
515
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
516
|
+
if (!rect || !(rect.width > 0) || !(rect.height > 0)) return;
|
|
517
|
+
}
|
|
518
|
+
const viewport = list.getWindowSize();
|
|
519
|
+
const contentHeight = list.getChildContainerDimensions().height + list.getFirstItemOffset();
|
|
520
|
+
if (
|
|
521
|
+
!Number.isFinite(viewport.width) ||
|
|
522
|
+
viewport.width <= 0 ||
|
|
523
|
+
!Number.isFinite(viewport.height) ||
|
|
524
|
+
viewport.height <= 0 ||
|
|
525
|
+
!Number.isFinite(contentHeight) ||
|
|
526
|
+
contentHeight <= 0
|
|
527
|
+
)
|
|
528
|
+
return;
|
|
529
|
+
return {
|
|
530
|
+
list,
|
|
531
|
+
width: viewport.width,
|
|
532
|
+
height: viewport.height,
|
|
533
|
+
contentHeight,
|
|
534
|
+
maxOffset: Math.max(0, contentHeight - viewport.height),
|
|
535
|
+
};
|
|
536
|
+
}, [listInstance]);
|
|
537
|
+
const observeOffset = useCallback(
|
|
538
|
+
(offset: number, fromEvent = false) => {
|
|
539
|
+
if (!scrollActive.current || !listInstance.attached || !Number.isFinite(offset)) return;
|
|
540
|
+
if (
|
|
541
|
+
fromEvent &&
|
|
542
|
+
initialScroll.current?.attempted === undefined &&
|
|
543
|
+
offset !== listInstance.offset
|
|
544
|
+
) {
|
|
545
|
+
cancelInitialScroll();
|
|
546
|
+
}
|
|
547
|
+
listInstance.offset = offset;
|
|
548
|
+
const bounds = scrollBounds();
|
|
549
|
+
if (!bounds) return;
|
|
550
|
+
const bounded = Math.max(0, Math.min(offset, bounds.maxOffset));
|
|
551
|
+
const initial = initialScroll.current;
|
|
552
|
+
if (initial) {
|
|
553
|
+
const target = Math.min(initial.offset, bounds.maxOffset);
|
|
554
|
+
if (initial.attempted ? Math.abs(bounded - target) >= 1 : bounded !== target) return;
|
|
555
|
+
initialScroll.current = undefined;
|
|
556
|
+
}
|
|
557
|
+
if (offsetCallback.current && lastReportedOffset.current !== bounded) {
|
|
558
|
+
lastReportedOffset.current = bounded;
|
|
559
|
+
offsetCallback.current(bounded);
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
[cancelInitialScroll, scrollBounds, listInstance],
|
|
563
|
+
);
|
|
564
|
+
const scheduleScroll = useCallback(() => {
|
|
565
|
+
if (!scrollActive.current || !listInstance.attached || scrollFrame.current !== undefined)
|
|
478
566
|
return;
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
567
|
+
if (
|
|
568
|
+
!initialScroll.current &&
|
|
569
|
+
(!revealIntent.current || revealIntent.current.complete) &&
|
|
570
|
+
!offsetCallback.current
|
|
571
|
+
)
|
|
572
|
+
return;
|
|
573
|
+
scrollFrame.current = requestAnimationFrame(() => {
|
|
574
|
+
scrollFrame.current = undefined;
|
|
575
|
+
if (listInstance.attached) scrollStep.current();
|
|
482
576
|
});
|
|
577
|
+
}, [listInstance]);
|
|
578
|
+
const attachList = useCallback(
|
|
579
|
+
(list: FlashListRef<FlatNode<T>> | null) => {
|
|
580
|
+
flashListRef.current = list;
|
|
581
|
+
listInstance.attached = list !== null;
|
|
582
|
+
if (!list) {
|
|
583
|
+
listInstance.loaded = false;
|
|
584
|
+
if (initialScroll.current) initialScroll.current.attempted = undefined;
|
|
585
|
+
if (scrollFrame.current !== undefined) cancelAnimationFrame(scrollFrame.current);
|
|
586
|
+
scrollFrame.current = undefined;
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
[listInstance],
|
|
590
|
+
);
|
|
591
|
+
|
|
592
|
+
useLayoutEffect(() => {
|
|
593
|
+
scrollActive.current = true;
|
|
594
|
+
return () => {
|
|
595
|
+
scrollActive.current = false;
|
|
596
|
+
revealIntent.current = undefined;
|
|
597
|
+
if (scrollFrame.current !== undefined) cancelAnimationFrame(scrollFrame.current);
|
|
598
|
+
scrollFrame.current = undefined;
|
|
599
|
+
};
|
|
483
600
|
}, []);
|
|
484
601
|
|
|
485
602
|
useLayoutEffect(() => {
|
|
@@ -489,11 +606,49 @@ export function TreeView<T = unknown>({
|
|
|
489
606
|
revealIntent.current?.id !== revealRequest.id ||
|
|
490
607
|
revealIntent.current?.requestId !== revealRequest.requestId
|
|
491
608
|
) {
|
|
609
|
+
cancelInitialScroll();
|
|
492
610
|
revealIntent.current = { ...revealRequest, complete: false };
|
|
493
611
|
}
|
|
494
|
-
|
|
612
|
+
const step = () => {
|
|
613
|
+
const currentList = flashListRef.current;
|
|
614
|
+
if (currentList) {
|
|
615
|
+
// Index preparation changes FlashList's getter before transport completes.
|
|
616
|
+
// Once requested, only delivered events can advance this list's observation.
|
|
617
|
+
observeOffset(
|
|
618
|
+
listInstance.indexScrollRequested
|
|
619
|
+
? listInstance.offset
|
|
620
|
+
: currentList.getAbsoluteLastScrollOffset(),
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
if (!scrollActive.current) return;
|
|
624
|
+
if (scrollStep.current !== step) {
|
|
625
|
+
scheduleScroll();
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
495
628
|
const intent = revealIntent.current;
|
|
496
|
-
if (!intent || intent.complete)
|
|
629
|
+
if (!intent || intent.complete) {
|
|
630
|
+
const initial = initialScroll.current;
|
|
631
|
+
const bounds = scrollBounds();
|
|
632
|
+
if (!initial || !bounds || flatNodes.length === 0) return;
|
|
633
|
+
const target = Math.min(initial.offset, bounds.maxOffset);
|
|
634
|
+
const attempted = initial.attempted;
|
|
635
|
+
if (
|
|
636
|
+
!attempted ||
|
|
637
|
+
attempted.target !== target ||
|
|
638
|
+
attempted.width !== bounds.width ||
|
|
639
|
+
attempted.height !== bounds.height ||
|
|
640
|
+
attempted.contentHeight !== bounds.contentHeight
|
|
641
|
+
) {
|
|
642
|
+
initial.attempted = {
|
|
643
|
+
target,
|
|
644
|
+
width: bounds.width,
|
|
645
|
+
height: bounds.height,
|
|
646
|
+
contentHeight: bounds.contentHeight,
|
|
647
|
+
};
|
|
648
|
+
bounds.list.scrollToOffset({ offset: target, animated: false });
|
|
649
|
+
}
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
497
652
|
const next = treeRevealExpansion(nodes, expandedIds, intent.id);
|
|
498
653
|
if (!next) return;
|
|
499
654
|
if (next !== expandedIds) {
|
|
@@ -519,29 +674,39 @@ export function TreeView<T = unknown>({
|
|
|
519
674
|
if (viewport.width <= 0) return;
|
|
520
675
|
const layout = list.getLayout(index);
|
|
521
676
|
if (!layout) return;
|
|
522
|
-
const offset =
|
|
677
|
+
const offset = listInstance.indexScrollRequested
|
|
678
|
+
? listInstance.offset
|
|
679
|
+
: list.getAbsoluteLastScrollOffset();
|
|
680
|
+
const top = layout.y + list.getFirstItemOffset();
|
|
523
681
|
const nextOffset = treeRevealOffset(
|
|
524
|
-
{ y:
|
|
682
|
+
{ y: top, height: layout.height },
|
|
525
683
|
offset,
|
|
526
684
|
viewport.height,
|
|
527
685
|
);
|
|
528
686
|
if (nextOffset === undefined) return;
|
|
529
687
|
if (Math.abs(nextOffset - offset) < 1) {
|
|
530
|
-
|
|
688
|
+
let visible = top < offset + viewport.height && top + layout.height > offset;
|
|
689
|
+
if (!listInstance.indexScrollRequested) {
|
|
690
|
+
const range = list.computeVisibleIndices();
|
|
691
|
+
visible = visible && index >= range.startIndex && index <= range.endIndex;
|
|
692
|
+
}
|
|
531
693
|
if (
|
|
694
|
+
revealIntent.current === intent &&
|
|
532
695
|
layout.isHeightMeasured &&
|
|
533
696
|
renderedRows.current.has(intent.id) &&
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
)
|
|
697
|
+
visible
|
|
698
|
+
) {
|
|
537
699
|
intent.complete = true;
|
|
700
|
+
onRevealComplete?.({ id: intent.id, requestId: intent.requestId });
|
|
701
|
+
}
|
|
538
702
|
return;
|
|
539
703
|
}
|
|
540
704
|
// FlashList's scrollToIndex has uncancellable delayed steps. Immediate offsets
|
|
541
705
|
// let the next layout/scroll event correct estimates using only the latest intent.
|
|
542
706
|
list.scrollToOffset({ offset: nextOffset, animated: false });
|
|
543
707
|
};
|
|
544
|
-
|
|
708
|
+
scrollStep.current = step;
|
|
709
|
+
scheduleScroll();
|
|
545
710
|
}, [
|
|
546
711
|
nodes,
|
|
547
712
|
expandedIds,
|
|
@@ -549,27 +714,25 @@ export function TreeView<T = unknown>({
|
|
|
549
714
|
flatNodes,
|
|
550
715
|
revealRequest?.id,
|
|
551
716
|
revealRequest?.requestId,
|
|
717
|
+
onRevealComplete,
|
|
552
718
|
height,
|
|
553
719
|
motion,
|
|
554
|
-
|
|
720
|
+
scheduleScroll,
|
|
721
|
+
cancelInitialScroll,
|
|
722
|
+
observeOffset,
|
|
723
|
+
scrollBounds,
|
|
724
|
+
listInstance,
|
|
555
725
|
]);
|
|
556
726
|
|
|
557
|
-
useLayoutEffect(
|
|
558
|
-
() => () => {
|
|
559
|
-
revealIntent.current = undefined;
|
|
560
|
-
if (revealFrame.current !== undefined) cancelAnimationFrame(revealFrame.current);
|
|
561
|
-
revealFrame.current = undefined;
|
|
562
|
-
},
|
|
563
|
-
[],
|
|
564
|
-
);
|
|
565
|
-
|
|
566
727
|
const scrollToIndex = useCallback(
|
|
567
728
|
(index: number) => {
|
|
568
729
|
if (index >= 0 && index < flatNodes.length) {
|
|
730
|
+
cancelInitialScroll();
|
|
731
|
+
listInstance.indexScrollRequested = true;
|
|
569
732
|
flashListRef.current?.scrollToIndex({ index, animated: true });
|
|
570
733
|
}
|
|
571
734
|
},
|
|
572
|
-
[flatNodes.length],
|
|
735
|
+
[flatNodes.length, cancelInitialScroll, listInstance],
|
|
573
736
|
);
|
|
574
737
|
|
|
575
738
|
const focusRow = useCallback(
|
|
@@ -863,6 +1026,7 @@ export function TreeView<T = unknown>({
|
|
|
863
1026
|
if (!container?.getBoundingClientRect) return false;
|
|
864
1027
|
const session = treeKeyboardLift(nodes, flat.node.id);
|
|
865
1028
|
if (!session) return false;
|
|
1029
|
+
cancelInitialScroll();
|
|
866
1030
|
const rowRect = rowEl.getBoundingClientRect();
|
|
867
1031
|
const containerRect = container.getBoundingClientRect();
|
|
868
1032
|
grabOffsetRef.current = { x: clientX - rowRect.left, y: clientY - rowRect.top };
|
|
@@ -890,7 +1054,7 @@ export function TreeView<T = unknown>({
|
|
|
890
1054
|
startAutoScroll();
|
|
891
1055
|
return true;
|
|
892
1056
|
},
|
|
893
|
-
[announce, nodes, startAutoScroll],
|
|
1057
|
+
[announce, nodes, startAutoScroll, cancelInitialScroll],
|
|
894
1058
|
);
|
|
895
1059
|
|
|
896
1060
|
const handleDragHandlePointerDown = useCallback(
|
|
@@ -1037,6 +1201,7 @@ export function TreeView<T = unknown>({
|
|
|
1037
1201
|
if (!flat) return false;
|
|
1038
1202
|
const session = treeKeyboardLift(nodes, flat.node.id);
|
|
1039
1203
|
if (!session) return false;
|
|
1204
|
+
cancelInitialScroll();
|
|
1040
1205
|
const ui: TreeDragUi<T> = {
|
|
1041
1206
|
mode: "keyboard",
|
|
1042
1207
|
node: flat.node,
|
|
@@ -1054,7 +1219,16 @@ export function TreeView<T = unknown>({
|
|
|
1054
1219
|
dragUiRef.current = ui;
|
|
1055
1220
|
announce(describeTreeDragState("lift", session, nodes, flat.node.label));
|
|
1056
1221
|
return true;
|
|
1057
|
-
}, [
|
|
1222
|
+
}, [
|
|
1223
|
+
announce,
|
|
1224
|
+
canReorder,
|
|
1225
|
+
dndRows,
|
|
1226
|
+
flatNodes,
|
|
1227
|
+
focusedIndex,
|
|
1228
|
+
getRowHeight,
|
|
1229
|
+
nodes,
|
|
1230
|
+
cancelInitialScroll,
|
|
1231
|
+
]);
|
|
1058
1232
|
|
|
1059
1233
|
const moveKeyboardDrag = useCallback(
|
|
1060
1234
|
(direction: "up" | "down" | "left" | "right"): boolean => {
|
|
@@ -1284,21 +1458,28 @@ export function TreeView<T = unknown>({
|
|
|
1284
1458
|
onFocus={handleContainerFocus}
|
|
1285
1459
|
onBlur={handleContainerBlur}
|
|
1286
1460
|
onKeyDown={handleTreeKeyDown}
|
|
1287
|
-
onLayout={
|
|
1461
|
+
onLayout={scheduleScroll}
|
|
1462
|
+
{...(isWeb && { onWheel: cancelInitialScroll, onPointerDown: cancelInitialScroll })}
|
|
1288
1463
|
position="relative"
|
|
1289
1464
|
style={{
|
|
1290
1465
|
height,
|
|
1291
1466
|
}}
|
|
1292
1467
|
>
|
|
1293
1468
|
<FlashList
|
|
1294
|
-
ref={
|
|
1469
|
+
ref={attachList}
|
|
1295
1470
|
data={flatNodes}
|
|
1296
1471
|
drawDistance={overscan * estimateSize}
|
|
1297
1472
|
keyExtractor={(item) => item.node.id}
|
|
1298
|
-
{
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1473
|
+
onLoad={() => {
|
|
1474
|
+
if (!scrollActive.current || !listInstance.attached) return;
|
|
1475
|
+
listInstance.loaded = true;
|
|
1476
|
+
scheduleScroll();
|
|
1477
|
+
}}
|
|
1478
|
+
onCommitLayoutEffect={scheduleScroll}
|
|
1479
|
+
onContentSizeChange={scheduleScroll}
|
|
1480
|
+
onScrollBeginDrag={() => {
|
|
1481
|
+
if (scrollActive.current && listInstance.attached) cancelInitialScroll();
|
|
1482
|
+
}}
|
|
1302
1483
|
extraData={{
|
|
1303
1484
|
focused: effectiveFocused,
|
|
1304
1485
|
selectedId,
|
|
@@ -1309,17 +1490,17 @@ export function TreeView<T = unknown>({
|
|
|
1309
1490
|
keyboardRing,
|
|
1310
1491
|
collapsedSelectedAncestors,
|
|
1311
1492
|
}}
|
|
1312
|
-
{
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
}
|
|
1493
|
+
onScroll={(e: any) => {
|
|
1494
|
+
if (!scrollActive.current || !listInstance.attached) return;
|
|
1495
|
+
const y = e?.nativeEvent?.contentOffset?.y;
|
|
1496
|
+
if (typeof y === "number" && Number.isFinite(y)) {
|
|
1497
|
+
scrollOffsetRef.current = y;
|
|
1498
|
+
if (dragUiRef.current) setDragScrollY(y);
|
|
1499
|
+
observeOffset(y, true);
|
|
1500
|
+
}
|
|
1501
|
+
scheduleScroll();
|
|
1502
|
+
}}
|
|
1503
|
+
scrollEventThrottle={16}
|
|
1323
1504
|
renderItem={({ item, index }) => {
|
|
1324
1505
|
const { node, depth, hasChildren, isExpanded } = item;
|
|
1325
1506
|
const isFocused = effectiveFocused === index;
|
|
@@ -1379,7 +1560,7 @@ export function TreeView<T = unknown>({
|
|
|
1379
1560
|
ref={(row) => {
|
|
1380
1561
|
if (row) renderedRows.current.add(node.id);
|
|
1381
1562
|
else renderedRows.current.delete(node.id);
|
|
1382
|
-
|
|
1563
|
+
scheduleScroll();
|
|
1383
1564
|
}}
|
|
1384
1565
|
id={`${treeId}-node-${index}`}
|
|
1385
1566
|
{...{ "data-treeview-row": node.id }}
|
|
@@ -1407,7 +1588,7 @@ export function TreeView<T = unknown>({
|
|
|
1407
1588
|
onLayout={(e: any) => {
|
|
1408
1589
|
const h = e?.nativeEvent?.layout?.height;
|
|
1409
1590
|
if (typeof h === "number" && h > 0) rowHeights.current.set(node.id, h);
|
|
1410
|
-
|
|
1591
|
+
scheduleScroll();
|
|
1411
1592
|
}}
|
|
1412
1593
|
backgroundColor={
|
|
1413
1594
|
// Nest-into parent highlight wins while a drag is active
|
|
@@ -19,6 +19,13 @@ export interface SheetModalProps {
|
|
|
19
19
|
snapPoint?: number;
|
|
20
20
|
/** Wrap children in the sheet's scroll container. */
|
|
21
21
|
scrollable?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Opt the body into the sheet's remaining height instead of sizing it to
|
|
24
|
+
* its content. A consumer-owned viewport (a virtualized list, a measured
|
|
25
|
+
* workspace) cannot bootstrap from an intrinsic host: it reports zero and
|
|
26
|
+
* then mounts nothing. Off by default, so existing sheets are unchanged.
|
|
27
|
+
*/
|
|
28
|
+
fill?: boolean;
|
|
22
29
|
}
|
|
23
|
-
export declare function SheetModal({ open, onOpenChange, children, header, snapPoint, scrollable, }: SheetModalProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function SheetModal({ open, onOpenChange, children, header, snapPoint, scrollable, fill, }: SheetModalProps): import("react/jsx-runtime").JSX.Element;
|
|
24
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SheetModal/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAA4B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AAIjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SheetModal/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAA4B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AAIjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAoHD,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,SAAc,EACd,UAAU,EACV,IAAY,GACb,EAAE,eAAe,2CA8EjB"}
|
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { SheetModalProps } from "./index";
|
|
13
13
|
export type { SheetModalProps } from "./index";
|
|
14
|
-
export declare function SheetModal({ open, onOpenChange, children, header, snapPoint, scrollable, }: SheetModalProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function SheetModal({ open, onOpenChange, children, header, snapPoint, scrollable, fill, }: SheetModalProps): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
//# sourceMappingURL=index.native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../src/SheetModal/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../src/SheetModal/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkB/C,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,UAAU,EACV,IAAY,GACb,EAAE,eAAe,2CAoVjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Tabs/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Tabs/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/layouts/tags.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAExF,OAAO,
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/layouts/tags.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAExF,OAAO,EAWL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAQjB;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,sBAAsB;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAEhB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAExB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAElC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,OAAO,EACZ,cAAc,EAAE,KAAK,CAAC,SAAS,EAC/B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,KAC9B,KAAK,CAAC,SAAS,CAAC;IAErB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qEAAqE;IACrE,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QACtC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;KAC9C,CAAC;IACF,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAUD;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,WAAgB,EAChB,KAAK,EACL,QAAgB,EAChB,OAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAgB,EAChB,YAAmB,EACnB,OAAO,EACP,OAAkB,EAClB,KAAK,EAAE,SAAS,EAChB,MAAW,EACX,WAAW,EAAE,eAAe,EAC5B,GAAG,UAAU,EACd,EAAE,SAAS,2CA4hBX"}
|
|
@@ -71,6 +71,10 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
71
71
|
overscan?: number;
|
|
72
72
|
/** Height of the scrollable container in pixels */
|
|
73
73
|
height?: number;
|
|
74
|
+
/** Initial vertical offset in layout pixels, restored once after usable list layout. */
|
|
75
|
+
initialScrollOffset?: number;
|
|
76
|
+
/** Observed, bounded vertical offset. Does not report unacknowledged scroll commands. */
|
|
77
|
+
onScrollOffsetChange?: (offset: number) => void;
|
|
74
78
|
/** Message shown when there are no nodes */
|
|
75
79
|
emptyMessage?: string;
|
|
76
80
|
/** Controlled expansion; takes precedence over initial expansion props. */
|
|
@@ -82,6 +86,11 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
82
86
|
id: string;
|
|
83
87
|
requestId: number;
|
|
84
88
|
};
|
|
89
|
+
/** Called once when the current reveal target is measured, mounted and visible. */
|
|
90
|
+
onRevealComplete?: (request: {
|
|
91
|
+
id: string;
|
|
92
|
+
requestId: number;
|
|
93
|
+
}) => void;
|
|
85
94
|
/** Initially expanded node IDs (wins over expandByDefault when provided) */
|
|
86
95
|
defaultExpandedIds?: string[];
|
|
87
96
|
/** Expand every branch on initial load */
|
|
@@ -117,5 +126,5 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
117
126
|
*
|
|
118
127
|
* @typeParam T - Additional data type stored on the nodes
|
|
119
128
|
*/
|
|
120
|
-
export declare function TreeView<T = unknown>({ nodes, renderNode, onNodeToggle, onNodeSelect, onNodeMove, estimateSize: estimateSizeProp, overscan, height: heightProp, emptyMessage: emptyMessageProp, defaultExpandedIds, expandedIds: controlledExpandedIds, onExpandedIdsChange, revealRequest, expandByDefault, display, showExpansionArrows, selectedId, ariaLabel, hotkeys: hotkeyOverrides, ...stackProps }: TreeViewProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
129
|
+
export declare function TreeView<T = unknown>({ nodes, renderNode, onNodeToggle, onNodeSelect, onNodeMove, estimateSize: estimateSizeProp, overscan, height: heightProp, initialScrollOffset, onScrollOffsetChange, emptyMessage: emptyMessageProp, defaultExpandedIds, expandedIds: controlledExpandedIds, onExpandedIdsChange, revealRequest, onRevealComplete, expandByDefault, display, showExpansionArrows, selectedId, ariaLabel, hotkeys: hotkeyOverrides, ...stackProps }: TreeViewProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
121
130
|
//# sourceMappingURL=TreeView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/views/TreeView.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,EAQZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9E,OAAO,EAcL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAUvB;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,sBAAsB;IACtB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,gEAAgE;IAChE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uDAAuD;IACvD,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,qDAAqD;IACrD,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,SAAS,CAAC;IAC3F,2BAA2B;IAC3B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACnE,+CAA+C;IAC/C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3C,6CAA6C;IAC7C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3C;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9D,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,0FAA0F;IAC1F,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wEAAwE;IACxE,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAiHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,EACpC,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EAAE,gBAAgB,EAC9B,QAAa,EACb,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,gBAAgB,EAC9B,kBAAkB,EAClB,WAAW,EAAE,qBAAqB,EAClC,mBAAmB,EACnB,aAAa,EACb,eAAuB,EACvB,OAAmB,EACnB,mBAA0B,EAC1B,UAAU,EACV,SAAS,EACT,OAAO,EAAE,eAAe,EACxB,GAAG,UAAU,EACd,EAAE,aAAa,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/views/TreeView.tsx"],"names":[],"mappings":"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"}
|