@alexgorbatchev/shadcn 0.0.46 → 0.0.47

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.
@@ -254,22 +254,2225 @@ function Tree({
254
254
  ]
255
255
  });
256
256
  }
257
+ // node_modules/@headless-tree/react/dist/chunk-FWCSY2DS.mjs
258
+ var __defProp = Object.defineProperty;
259
+ var __defProps = Object.defineProperties;
260
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
261
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
262
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
263
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
264
+ var __defNormalProp = (obj, key, value) => (key in obj) ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
265
+ var __spreadValues = (a, b) => {
266
+ for (var prop in b || (b = {}))
267
+ if (__hasOwnProp.call(b, prop))
268
+ __defNormalProp(a, prop, b[prop]);
269
+ if (__getOwnPropSymbols)
270
+ for (var prop of __getOwnPropSymbols(b)) {
271
+ if (__propIsEnum.call(b, prop))
272
+ __defNormalProp(a, prop, b[prop]);
273
+ }
274
+ return a;
275
+ };
276
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
277
+ var __objRest = (source, exclude) => {
278
+ var target = {};
279
+ for (var prop in source)
280
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
281
+ target[prop] = source[prop];
282
+ if (source != null && __getOwnPropSymbols)
283
+ for (var prop of __getOwnPropSymbols(source)) {
284
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
285
+ target[prop] = source[prop];
286
+ }
287
+ return target;
288
+ };
257
289
 
258
- // src/components/tree/index.ts
259
- import { useTree, AssistiveTreeDescription } from "@headless-tree/react";
260
- import {
261
- syncDataLoaderFeature,
262
- asyncDataLoaderFeature,
263
- hotkeysCoreFeature,
264
- selectionFeature,
265
- checkboxesFeature,
266
- searchFeature,
267
- renamingFeature,
268
- expandAllFeature,
269
- dragAndDropFeature,
270
- keyboardDragAndDropFeature,
271
- isOrderedDragTarget
272
- } from "@headless-tree/core";
290
+ // node_modules/@headless-tree/react/dist/index.mjs
291
+ import React from "react";
292
+
293
+ // node_modules/@headless-tree/core/dist/index.mjs
294
+ var __defProp2 = Object.defineProperty;
295
+ var __defProps2 = Object.defineProperties;
296
+ var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
297
+ var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
298
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
299
+ var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
300
+ var __defNormalProp2 = (obj, key, value) => (key in obj) ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
301
+ var __spreadValues2 = (a, b) => {
302
+ for (var prop in b || (b = {}))
303
+ if (__hasOwnProp2.call(b, prop))
304
+ __defNormalProp2(a, prop, b[prop]);
305
+ if (__getOwnPropSymbols2)
306
+ for (var prop of __getOwnPropSymbols2(b)) {
307
+ if (__propIsEnum2.call(b, prop))
308
+ __defNormalProp2(a, prop, b[prop]);
309
+ }
310
+ return a;
311
+ };
312
+ var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
313
+ var __async = (__this, __arguments, generator) => {
314
+ return new Promise((resolve, reject) => {
315
+ var fulfilled = (value) => {
316
+ try {
317
+ step(generator.next(value));
318
+ } catch (e) {
319
+ reject(e);
320
+ }
321
+ };
322
+ var rejected = (value) => {
323
+ try {
324
+ step(generator.throw(value));
325
+ } catch (e) {
326
+ reject(e);
327
+ }
328
+ };
329
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
330
+ step((generator = generator.apply(__this, __arguments)).next());
331
+ });
332
+ };
333
+ var memo = (deps, fn) => {
334
+ let value;
335
+ let oldDeps = null;
336
+ return (...a) => {
337
+ const newDeps = deps(...a);
338
+ if (!value) {
339
+ value = fn(...newDeps);
340
+ oldDeps = newDeps;
341
+ return value;
342
+ }
343
+ const match = oldDeps && oldDeps.length === newDeps.length && !oldDeps.some((dep, i) => dep !== newDeps[i]);
344
+ if (match) {
345
+ return value;
346
+ }
347
+ value = fn(...newDeps);
348
+ oldDeps = newDeps;
349
+ return value;
350
+ };
351
+ };
352
+ function functionalUpdate(updater, input) {
353
+ return typeof updater === "function" ? updater(input) : updater;
354
+ }
355
+ function makeStateUpdater(key, instance) {
356
+ return (updater) => {
357
+ instance.setState((old) => {
358
+ return __spreadProps2(__spreadValues2({}, old), {
359
+ [key]: functionalUpdate(updater, old[key])
360
+ });
361
+ });
362
+ };
363
+ }
364
+ var poll = (fn, interval = 100, timeout = 1000) => new Promise((resolve) => {
365
+ let clear;
366
+ const i = setInterval(() => {
367
+ if (fn()) {
368
+ resolve();
369
+ clearInterval(i);
370
+ clearTimeout(clear);
371
+ }
372
+ }, interval);
373
+ clear = setTimeout(() => {
374
+ clearInterval(i);
375
+ resolve();
376
+ }, timeout);
377
+ });
378
+ var prefix = "Headless Tree: ";
379
+ var throwError = (message) => Error(prefix + message);
380
+ var logWarning = (message) => console.warn(prefix + message);
381
+ var treeFeature = {
382
+ key: "tree",
383
+ getInitialState: (initialState) => __spreadValues2({
384
+ expandedItems: [],
385
+ focusedItem: null
386
+ }, initialState),
387
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
388
+ setExpandedItems: makeStateUpdater("expandedItems", tree),
389
+ setFocusedItem: makeStateUpdater("focusedItem", tree)
390
+ }, defaultConfig),
391
+ stateHandlerNames: {
392
+ expandedItems: "setExpandedItems",
393
+ focusedItem: "setFocusedItem"
394
+ },
395
+ treeInstance: {
396
+ getItemsMeta: ({ tree }) => {
397
+ const { rootItemId } = tree.getConfig();
398
+ const { expandedItems } = tree.getState();
399
+ const flatItems = [];
400
+ const expandedItemsSet = new Set(expandedItems);
401
+ const recursiveAdd = (itemId, path, level, setSize, posInSet) => {
402
+ var _a;
403
+ if (path.includes(itemId)) {
404
+ logWarning(`Circular reference for ${path.join(".")}`);
405
+ return;
406
+ }
407
+ flatItems.push({
408
+ itemId,
409
+ level,
410
+ index: flatItems.length,
411
+ parentId: path.at(-1),
412
+ setSize,
413
+ posInSet
414
+ });
415
+ if (expandedItemsSet.has(itemId)) {
416
+ const children2 = (_a = tree.retrieveChildrenIds(itemId)) != null ? _a : [];
417
+ let i2 = 0;
418
+ for (const childId of children2) {
419
+ recursiveAdd(childId, path.concat(itemId), level + 1, children2.length, i2++);
420
+ }
421
+ }
422
+ };
423
+ const children = tree.retrieveChildrenIds(rootItemId);
424
+ let i = 0;
425
+ for (const itemId of children) {
426
+ recursiveAdd(itemId, [rootItemId], 0, children.length, i++);
427
+ }
428
+ return flatItems;
429
+ },
430
+ getFocusedItem: ({ tree }) => {
431
+ var _a;
432
+ const focusedItemId = tree.getState().focusedItem;
433
+ return (_a = focusedItemId !== null ? tree.getItemInstance(focusedItemId) : null) != null ? _a : tree.getItems()[0];
434
+ },
435
+ getRootItem: ({ tree }) => {
436
+ const { rootItemId } = tree.getConfig();
437
+ return tree.getItemInstance(rootItemId);
438
+ },
439
+ focusNextItem: ({ tree }) => {
440
+ var _a;
441
+ const focused = tree.getFocusedItem().getItemMeta();
442
+ if (!focused)
443
+ return;
444
+ const nextIndex = Math.min(focused.index + 1, tree.getItems().length - 1);
445
+ (_a = tree.getItems()[nextIndex]) == null || _a.setFocused();
446
+ },
447
+ focusPreviousItem: ({ tree }) => {
448
+ var _a;
449
+ const focused = tree.getFocusedItem().getItemMeta();
450
+ if (!focused)
451
+ return;
452
+ const nextIndex = Math.max(focused.index - 1, 0);
453
+ (_a = tree.getItems()[nextIndex]) == null || _a.setFocused();
454
+ },
455
+ updateDomFocus: ({ tree }) => {
456
+ setTimeout(() => __async(null, null, function* () {
457
+ var _a, _b, _c, _d, _e;
458
+ const focusedItem = tree.getFocusedItem();
459
+ (_b = (_a = tree.getConfig()).scrollToItem) == null || _b.call(_a, focusedItem);
460
+ yield poll(() => focusedItem.getElement() !== null, 20, 500);
461
+ const focusedElement = focusedItem.getElement();
462
+ if (!focusedElement) {
463
+ (_c = tree.getItems()[0]) == null || _c.setFocused();
464
+ (_e = (_d = tree.getItems()[0]) == null ? undefined : _d.getElement()) == null || _e.focus();
465
+ return;
466
+ }
467
+ focusedElement.focus();
468
+ }));
469
+ },
470
+ getContainerProps: ({ prev, tree }, treeLabel) => __spreadProps2(__spreadValues2({}, prev == null ? undefined : prev()), {
471
+ role: "tree",
472
+ "aria-label": treeLabel != null ? treeLabel : "",
473
+ ref: tree.registerElement
474
+ }),
475
+ isSearchOpen: () => false
476
+ },
477
+ itemInstance: {
478
+ scrollTo: (_0, _1) => __async(null, [_0, _1], function* ({ tree, item }, scrollIntoViewArg) {
479
+ var _a, _b, _c;
480
+ (_b = (_a = tree.getConfig()).scrollToItem) == null || _b.call(_a, item);
481
+ yield poll(() => item.getElement() !== null, 20);
482
+ (_c = item.getElement()) == null || _c.scrollIntoView(scrollIntoViewArg);
483
+ }),
484
+ getId: ({ itemId }) => itemId,
485
+ getKey: ({ itemId }) => itemId,
486
+ getProps: ({ item, prev }) => {
487
+ const itemMeta = item.getItemMeta();
488
+ return __spreadProps2(__spreadValues2({}, prev == null ? undefined : prev()), {
489
+ ref: item.registerElement,
490
+ role: "treeitem",
491
+ "aria-setsize": itemMeta.setSize,
492
+ "aria-posinset": itemMeta.posInSet + 1,
493
+ "aria-selected": "false",
494
+ "aria-label": item.getItemName(),
495
+ "aria-level": itemMeta.level + 1,
496
+ "aria-expanded": item.isFolder() ? item.isExpanded() : undefined,
497
+ tabIndex: item.isFocused() ? 0 : -1,
498
+ onClick: (e) => {
499
+ item.setFocused();
500
+ item.primaryAction();
501
+ if (e.ctrlKey || e.shiftKey || e.metaKey) {
502
+ return;
503
+ }
504
+ if (!item.isFolder()) {
505
+ return;
506
+ }
507
+ if (item.isExpanded()) {
508
+ item.collapse();
509
+ } else {
510
+ item.expand();
511
+ }
512
+ }
513
+ });
514
+ },
515
+ expand: ({ tree, item, itemId }) => {
516
+ var _a;
517
+ if (!item.isFolder()) {
518
+ return;
519
+ }
520
+ if ((_a = tree.getState().loadingItemChildrens) == null ? undefined : _a.includes(itemId)) {
521
+ return;
522
+ }
523
+ tree.applySubStateUpdate("expandedItems", (expandedItems) => [
524
+ ...expandedItems,
525
+ itemId
526
+ ]);
527
+ tree.rebuildTree();
528
+ },
529
+ collapse: ({ tree, item, itemId }) => {
530
+ if (!item.isFolder()) {
531
+ return;
532
+ }
533
+ tree.applySubStateUpdate("expandedItems", (expandedItems) => expandedItems.filter((id) => id !== itemId));
534
+ tree.rebuildTree();
535
+ },
536
+ getItemData: ({ tree, itemId }) => tree.retrieveItemData(itemId),
537
+ equals: ({ item }, other) => item.getId() === (other == null ? undefined : other.getId()),
538
+ isExpanded: ({ tree, itemId }) => tree.getState().expandedItems.includes(itemId),
539
+ isDescendentOf: ({ item }, parentId) => {
540
+ const parent = item.getParent();
541
+ return Boolean((parent == null ? undefined : parent.getId()) === parentId || (parent == null ? undefined : parent.isDescendentOf(parentId)));
542
+ },
543
+ isFocused: ({ tree, item, itemId }) => tree.getState().focusedItem === itemId || tree.getState().focusedItem === null && item.getItemMeta().index === 0,
544
+ isFolder: ({ tree, item, itemId }) => itemId === tree.getConfig().rootItemId || tree.getConfig().isItemFolder(item),
545
+ getItemName: ({ tree, item }) => {
546
+ const config = tree.getConfig();
547
+ return config.getItemName(item);
548
+ },
549
+ setFocused: ({ tree, itemId }) => {
550
+ tree.applySubStateUpdate("focusedItem", itemId);
551
+ },
552
+ primaryAction: ({ tree, item }) => {
553
+ var _a, _b;
554
+ return (_b = (_a = tree.getConfig()).onPrimaryAction) == null ? undefined : _b.call(_a, item);
555
+ },
556
+ getParent: ({ tree, item }) => item.getItemMeta().parentId ? tree.getItemInstance(item.getItemMeta().parentId) : undefined,
557
+ getIndexInParent: ({ item }) => item.getItemMeta().posInSet,
558
+ getChildren: ({ tree, itemId }) => tree.retrieveChildrenIds(itemId).map((id) => tree.getItemInstance(id)),
559
+ getTree: ({ tree }) => tree,
560
+ getItemAbove: ({ tree, item }) => tree.getItems()[item.getItemMeta().index - 1],
561
+ getItemBelow: ({ tree, item }) => tree.getItems()[item.getItemMeta().index + 1]
562
+ },
563
+ hotkeys: {
564
+ focusNextItem: {
565
+ hotkey: "ArrowDown",
566
+ canRepeat: true,
567
+ preventDefault: true,
568
+ isEnabled: (tree) => {
569
+ var _a, _b;
570
+ return !((_b = (_a = tree.isSearchOpen) == null ? undefined : _a.call(tree)) != null ? _b : false) && !tree.getState().dnd;
571
+ },
572
+ handler: (e, tree) => {
573
+ tree.focusNextItem();
574
+ tree.updateDomFocus();
575
+ }
576
+ },
577
+ focusPreviousItem: {
578
+ hotkey: "ArrowUp",
579
+ canRepeat: true,
580
+ preventDefault: true,
581
+ isEnabled: (tree) => {
582
+ var _a, _b;
583
+ return !((_b = (_a = tree.isSearchOpen) == null ? undefined : _a.call(tree)) != null ? _b : false) && !tree.getState().dnd;
584
+ },
585
+ handler: (e, tree) => {
586
+ tree.focusPreviousItem();
587
+ tree.updateDomFocus();
588
+ }
589
+ },
590
+ expandOrDown: {
591
+ hotkey: "ArrowRight",
592
+ canRepeat: true,
593
+ handler: (e, tree) => {
594
+ const item = tree.getFocusedItem();
595
+ if (item.isExpanded() || !item.isFolder()) {
596
+ tree.focusNextItem();
597
+ tree.updateDomFocus();
598
+ } else {
599
+ item.expand();
600
+ }
601
+ }
602
+ },
603
+ collapseOrUp: {
604
+ hotkey: "ArrowLeft",
605
+ canRepeat: true,
606
+ handler: (e, tree) => {
607
+ var _a;
608
+ const item = tree.getFocusedItem();
609
+ if ((!item.isExpanded() || !item.isFolder()) && item.getItemMeta().level !== 0) {
610
+ (_a = item.getParent()) == null || _a.setFocused();
611
+ tree.updateDomFocus();
612
+ } else {
613
+ item.collapse();
614
+ }
615
+ }
616
+ },
617
+ focusFirstItem: {
618
+ hotkey: "Home",
619
+ handler: (e, tree) => {
620
+ var _a;
621
+ (_a = tree.getItems()[0]) == null || _a.setFocused();
622
+ tree.updateDomFocus();
623
+ }
624
+ },
625
+ focusLastItem: {
626
+ hotkey: "End",
627
+ handler: (e, tree) => {
628
+ var _a;
629
+ (_a = tree.getItems()[tree.getItems().length - 1]) == null || _a.setFocused();
630
+ tree.updateDomFocus();
631
+ }
632
+ }
633
+ }
634
+ };
635
+ var buildStaticInstance = (features, instanceType, buildOpts) => {
636
+ const instance = {};
637
+ const finalize = () => {
638
+ const opts = buildOpts(instance);
639
+ featureLoop:
640
+ for (let i = 0;i < features.length; i++) {
641
+ const definition = features[i][instanceType];
642
+ if (!definition)
643
+ continue featureLoop;
644
+ methodLoop:
645
+ for (const [key, method] of Object.entries(definition)) {
646
+ if (!method)
647
+ continue methodLoop;
648
+ const prev = instance[key];
649
+ instance[key] = (...args) => {
650
+ return method(__spreadProps2(__spreadValues2({}, opts), { prev }), ...args);
651
+ };
652
+ }
653
+ }
654
+ };
655
+ return [instance, finalize];
656
+ };
657
+ var verifyFeatures = (features) => {
658
+ var _a;
659
+ const loadedFeatures = features == null ? undefined : features.map((feature) => feature.key);
660
+ for (const feature of features != null ? features : []) {
661
+ const missingDependency = (_a = feature.deps) == null ? undefined : _a.find((dep) => !(loadedFeatures == null ? undefined : loadedFeatures.includes(dep)));
662
+ if (missingDependency) {
663
+ throw throwError(`${feature.key} needs ${missingDependency}`);
664
+ }
665
+ }
666
+ };
667
+ var exhaustiveSort = (arr, compareFn) => {
668
+ const n = arr.length;
669
+ for (let i = 0;i < n; i++) {
670
+ for (let j = i + 1;j < n; j++) {
671
+ if (compareFn(arr[j], arr[i]) < 0) {
672
+ [arr[i], arr[j]] = [arr[j], arr[i]];
673
+ }
674
+ }
675
+ }
676
+ return arr;
677
+ };
678
+ var compareFeatures = (originalOrder) => (feature1, feature2) => {
679
+ var _a, _b;
680
+ if (feature2.key && ((_a = feature1.overwrites) == null ? undefined : _a.includes(feature2.key))) {
681
+ return 1;
682
+ }
683
+ if (feature1.key && ((_b = feature2.overwrites) == null ? undefined : _b.includes(feature1.key))) {
684
+ return -1;
685
+ }
686
+ return originalOrder.indexOf(feature1) - originalOrder.indexOf(feature2);
687
+ };
688
+ var sortFeatures = (features = []) => exhaustiveSort(features, compareFeatures(features));
689
+ var createTree = (initialConfig) => {
690
+ var _a, _b, _c, _d;
691
+ const buildInstance = (_a = initialConfig.instanceBuilder) != null ? _a : buildStaticInstance;
692
+ const additionalFeatures = [
693
+ treeFeature,
694
+ ...sortFeatures(initialConfig.features)
695
+ ];
696
+ verifyFeatures(additionalFeatures);
697
+ const features = [...additionalFeatures];
698
+ const [treeInstance, finalizeTree] = buildInstance(features, "treeInstance", (tree) => ({ tree }));
699
+ let state = additionalFeatures.reduce((acc, feature) => {
700
+ var _a2, _b2;
701
+ return (_b2 = (_a2 = feature.getInitialState) == null ? undefined : _a2.call(feature, acc, treeInstance)) != null ? _b2 : acc;
702
+ }, (_c = (_b = initialConfig.initialState) != null ? _b : initialConfig.state) != null ? _c : {});
703
+ let config = additionalFeatures.reduce((acc, feature) => {
704
+ var _a2, _b2;
705
+ return (_b2 = (_a2 = feature.getDefaultConfig) == null ? undefined : _a2.call(feature, acc, treeInstance)) != null ? _b2 : acc;
706
+ }, initialConfig);
707
+ const stateHandlerNames = additionalFeatures.reduce((acc, feature) => __spreadValues2(__spreadValues2({}, acc), feature.stateHandlerNames), {});
708
+ let treeElement;
709
+ const treeDataRef = { current: {} };
710
+ let rebuildScheduled = false;
711
+ const itemInstancesMap = {};
712
+ let itemInstances = [];
713
+ const itemElementsMap = {};
714
+ const itemDataRefs = {};
715
+ let itemMetaMap = {};
716
+ const hotkeyPresets = {};
717
+ const rebuildItemMeta = () => {
718
+ itemInstances = [];
719
+ itemMetaMap = {};
720
+ const [rootInstance, finalizeRootInstance] = buildInstance(features, "itemInstance", (item) => ({ item, tree: treeInstance, itemId: config.rootItemId }));
721
+ finalizeRootInstance();
722
+ itemInstancesMap[config.rootItemId] = rootInstance;
723
+ itemMetaMap[config.rootItemId] = {
724
+ itemId: config.rootItemId,
725
+ index: -1,
726
+ parentId: null,
727
+ level: -1,
728
+ posInSet: 0,
729
+ setSize: 1
730
+ };
731
+ for (const item of treeInstance.getItemsMeta()) {
732
+ itemMetaMap[item.itemId] = item;
733
+ if (!itemInstancesMap[item.itemId]) {
734
+ const [instance, finalizeInstance] = buildInstance(features, "itemInstance", (instance2) => ({
735
+ item: instance2,
736
+ tree: treeInstance,
737
+ itemId: item.itemId
738
+ }));
739
+ finalizeInstance();
740
+ itemInstancesMap[item.itemId] = instance;
741
+ itemInstances.push(instance);
742
+ } else {
743
+ itemInstances.push(itemInstancesMap[item.itemId]);
744
+ }
745
+ }
746
+ rebuildScheduled = false;
747
+ };
748
+ const eachFeature = (fn) => {
749
+ for (const feature of additionalFeatures) {
750
+ fn(feature);
751
+ }
752
+ };
753
+ const mainFeature = {
754
+ key: "main",
755
+ treeInstance: {
756
+ getState: () => state,
757
+ setState: ({}, updater) => {
758
+ var _a2;
759
+ (_a2 = config.setState) == null || _a2.call(config, state);
760
+ },
761
+ setMounted: ({}, isMounted) => {
762
+ var _a2;
763
+ const ref = treeDataRef.current;
764
+ ref.isMounted = isMounted;
765
+ if (isMounted) {
766
+ (_a2 = ref.waitingForMount) == null || _a2.forEach((cb) => cb());
767
+ ref.waitingForMount = [];
768
+ }
769
+ },
770
+ applySubStateUpdate: ({}, stateName, updater) => {
771
+ var _a2;
772
+ const apply = () => {
773
+ state[stateName] = typeof updater === "function" ? updater(state[stateName]) : updater;
774
+ const externalStateSetter = config[stateHandlerNames[stateName]];
775
+ externalStateSetter == null || externalStateSetter(state[stateName]);
776
+ };
777
+ const ref = treeDataRef.current;
778
+ if (ref.isMounted) {
779
+ apply();
780
+ } else {
781
+ (_a2 = ref.waitingForMount) != null || (ref.waitingForMount = []);
782
+ ref.waitingForMount.push(apply);
783
+ }
784
+ },
785
+ rebuildTree: () => {
786
+ var _a2, _b2;
787
+ const ref = treeDataRef.current;
788
+ if (ref.isMounted) {
789
+ rebuildItemMeta();
790
+ (_a2 = config.setState) == null || _a2.call(config, state);
791
+ } else {
792
+ (_b2 = ref.waitingForMount) != null || (ref.waitingForMount = []);
793
+ ref.waitingForMount.push(() => {
794
+ var _a3;
795
+ rebuildItemMeta();
796
+ (_a3 = config.setState) == null || _a3.call(config, state);
797
+ });
798
+ }
799
+ },
800
+ scheduleRebuildTree: () => {
801
+ rebuildScheduled = true;
802
+ },
803
+ getConfig: () => config,
804
+ setConfig: (_, updater) => {
805
+ var _a2, _b2, _c2;
806
+ const newConfig = typeof updater === "function" ? updater(config) : updater;
807
+ const hasChangedExpandedItems = ((_a2 = newConfig.state) == null ? undefined : _a2.expandedItems) && ((_b2 = newConfig.state) == null ? undefined : _b2.expandedItems) !== state.expandedItems;
808
+ config = newConfig;
809
+ if (newConfig.state) {
810
+ state = __spreadValues2(__spreadValues2({}, state), newConfig.state);
811
+ }
812
+ if (hasChangedExpandedItems) {
813
+ rebuildItemMeta();
814
+ (_c2 = config.setState) == null || _c2.call(config, state);
815
+ }
816
+ },
817
+ getItemInstance: ({}, itemId) => {
818
+ const existingInstance = itemInstancesMap[itemId];
819
+ if (!existingInstance) {
820
+ const [instance, finalizeInstance] = buildInstance(features, "itemInstance", (instance2) => ({
821
+ item: instance2,
822
+ tree: treeInstance,
823
+ itemId
824
+ }));
825
+ finalizeInstance();
826
+ return instance;
827
+ }
828
+ return existingInstance;
829
+ },
830
+ getItems: () => {
831
+ if (rebuildScheduled)
832
+ rebuildItemMeta();
833
+ return itemInstances;
834
+ },
835
+ registerElement: ({}, element) => {
836
+ if (treeElement === element) {
837
+ return;
838
+ }
839
+ if (treeElement && !element) {
840
+ eachFeature((feature) => {
841
+ var _a2;
842
+ return (_a2 = feature.onTreeUnmount) == null ? undefined : _a2.call(feature, treeInstance, treeElement);
843
+ });
844
+ } else if (!treeElement && element) {
845
+ eachFeature((feature) => {
846
+ var _a2;
847
+ return (_a2 = feature.onTreeMount) == null ? undefined : _a2.call(feature, treeInstance, element);
848
+ });
849
+ }
850
+ treeElement = element;
851
+ },
852
+ getElement: () => treeElement,
853
+ getDataRef: () => treeDataRef,
854
+ getHotkeyPresets: () => hotkeyPresets
855
+ },
856
+ itemInstance: {
857
+ registerElement: ({ itemId, item }, element) => {
858
+ if (itemElementsMap[itemId] === element) {
859
+ return;
860
+ }
861
+ const oldElement = itemElementsMap[itemId];
862
+ if (oldElement && !element) {
863
+ eachFeature((feature) => {
864
+ var _a2;
865
+ return (_a2 = feature.onItemUnmount) == null ? undefined : _a2.call(feature, item, oldElement, treeInstance);
866
+ });
867
+ } else if (!oldElement && element) {
868
+ eachFeature((feature) => {
869
+ var _a2;
870
+ return (_a2 = feature.onItemMount) == null ? undefined : _a2.call(feature, item, element, treeInstance);
871
+ });
872
+ }
873
+ itemElementsMap[itemId] = element;
874
+ },
875
+ getElement: ({ itemId }) => itemElementsMap[itemId],
876
+ getDataRef: ({ itemId }) => {
877
+ var _a2;
878
+ return (_a2 = itemDataRefs[itemId]) != null ? _a2 : itemDataRefs[itemId] = { current: {} };
879
+ },
880
+ getItemMeta: ({ itemId }) => {
881
+ var _a2;
882
+ return (_a2 = itemMetaMap[itemId]) != null ? _a2 : {
883
+ itemId,
884
+ parentId: null,
885
+ level: -1,
886
+ index: -1,
887
+ posInSet: 0,
888
+ setSize: 1
889
+ };
890
+ }
891
+ }
892
+ };
893
+ features.unshift(mainFeature);
894
+ for (const feature of features) {
895
+ Object.assign(hotkeyPresets, (_d = feature.hotkeys) != null ? _d : {});
896
+ }
897
+ finalizeTree();
898
+ return treeInstance;
899
+ };
900
+ var AssistiveDndState = /* @__PURE__ */ ((AssistiveDndState2) => {
901
+ AssistiveDndState2[AssistiveDndState2["None"] = 0] = "None";
902
+ AssistiveDndState2[AssistiveDndState2["Started"] = 1] = "Started";
903
+ AssistiveDndState2[AssistiveDndState2["Dragging"] = 2] = "Dragging";
904
+ AssistiveDndState2[AssistiveDndState2["Completed"] = 3] = "Completed";
905
+ AssistiveDndState2[AssistiveDndState2["Aborted"] = 4] = "Aborted";
906
+ return AssistiveDndState2;
907
+ })(AssistiveDndState || {});
908
+ var selectionFeature = {
909
+ key: "selection",
910
+ getInitialState: (initialState) => __spreadValues2({
911
+ selectedItems: []
912
+ }, initialState),
913
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
914
+ setSelectedItems: makeStateUpdater("selectedItems", tree)
915
+ }, defaultConfig),
916
+ stateHandlerNames: {
917
+ selectedItems: "setSelectedItems"
918
+ },
919
+ treeInstance: {
920
+ setSelectedItems: ({ tree }, selectedItems) => {
921
+ tree.applySubStateUpdate("selectedItems", selectedItems);
922
+ },
923
+ getSelectedItems: ({ tree }) => {
924
+ return tree.getState().selectedItems.map(tree.getItemInstance);
925
+ }
926
+ },
927
+ itemInstance: {
928
+ select: ({ tree, itemId }) => {
929
+ const { selectedItems } = tree.getState();
930
+ tree.setSelectedItems(selectedItems.includes(itemId) ? selectedItems : [...selectedItems, itemId]);
931
+ },
932
+ deselect: ({ tree, itemId }) => {
933
+ const { selectedItems } = tree.getState();
934
+ tree.setSelectedItems(selectedItems.filter((id) => id !== itemId));
935
+ },
936
+ isSelected: ({ tree, itemId }) => {
937
+ const { selectedItems } = tree.getState();
938
+ return selectedItems.includes(itemId);
939
+ },
940
+ selectUpTo: ({ tree, item, itemId }, ctrl) => {
941
+ const indexA = item.getItemMeta().index;
942
+ const dataRef = tree.getDataRef();
943
+ if (!dataRef.current.selectUpToAnchorId) {
944
+ dataRef.current.selectUpToAnchorId = itemId;
945
+ tree.setSelectedItems([itemId]);
946
+ return;
947
+ }
948
+ const itemB = tree.getItemInstance(dataRef.current.selectUpToAnchorId);
949
+ const indexB = itemB.getItemMeta().index;
950
+ const [a, b] = indexA < indexB ? [indexA, indexB] : [indexB, indexA];
951
+ const newSelectedItems = tree.getItems().slice(a, b + 1).map((treeItem) => treeItem.getItemMeta().itemId);
952
+ if (!ctrl) {
953
+ tree.setSelectedItems(newSelectedItems);
954
+ return;
955
+ }
956
+ const { selectedItems } = tree.getState();
957
+ const uniqueSelectedItems = [
958
+ .../* @__PURE__ */ new Set([...selectedItems, ...newSelectedItems])
959
+ ];
960
+ tree.setSelectedItems(uniqueSelectedItems);
961
+ },
962
+ toggleSelect: ({ item }) => {
963
+ if (item.isSelected()) {
964
+ item.deselect();
965
+ } else {
966
+ item.select();
967
+ }
968
+ },
969
+ getProps: ({ tree, item, itemId, prev }) => __spreadProps2(__spreadValues2({}, prev == null ? undefined : prev()), {
970
+ "aria-selected": item.isSelected() ? "true" : "false",
971
+ onClick: (e) => {
972
+ var _a, _b;
973
+ if (e.shiftKey) {
974
+ item.selectUpTo(e.ctrlKey || e.metaKey);
975
+ } else if (e.ctrlKey || e.metaKey) {
976
+ item.toggleSelect();
977
+ } else {
978
+ tree.setSelectedItems([itemId]);
979
+ }
980
+ if (!e.shiftKey) {
981
+ tree.getDataRef().current.selectUpToAnchorId = itemId;
982
+ }
983
+ (_b = (_a = prev == null ? undefined : prev()) == null ? undefined : _a.onClick) == null || _b.call(_a, e);
984
+ }
985
+ })
986
+ },
987
+ hotkeys: {
988
+ toggleSelectedItem: {
989
+ hotkey: "Control+Space",
990
+ preventDefault: true,
991
+ handler: (_, tree) => {
992
+ tree.getFocusedItem().toggleSelect();
993
+ }
994
+ },
995
+ selectUpwards: {
996
+ hotkey: "Shift+ArrowUp",
997
+ handler: (e, tree) => {
998
+ const focused = tree.getFocusedItem();
999
+ const above = focused.getItemAbove();
1000
+ if (!above)
1001
+ return;
1002
+ if (focused.isSelected() && above.isSelected()) {
1003
+ focused.deselect();
1004
+ } else {
1005
+ above.select();
1006
+ }
1007
+ above.setFocused();
1008
+ tree.updateDomFocus();
1009
+ }
1010
+ },
1011
+ selectDownwards: {
1012
+ hotkey: "Shift+ArrowDown",
1013
+ handler: (e, tree) => {
1014
+ const focused = tree.getFocusedItem();
1015
+ const below = focused.getItemBelow();
1016
+ if (!below)
1017
+ return;
1018
+ if (focused.isSelected() && below.isSelected()) {
1019
+ focused.deselect();
1020
+ } else {
1021
+ below.select();
1022
+ }
1023
+ below.setFocused();
1024
+ tree.updateDomFocus();
1025
+ }
1026
+ },
1027
+ selectAll: {
1028
+ hotkey: "Control+KeyA",
1029
+ preventDefault: true,
1030
+ handler: (e, tree) => {
1031
+ tree.setSelectedItems(tree.getItems().map((item) => item.getId()));
1032
+ }
1033
+ }
1034
+ }
1035
+ };
1036
+ var getAllLoadedDescendants = (tree, itemId, includeFolders = false) => {
1037
+ if (!tree.getConfig().isItemFolder(tree.getItemInstance(itemId))) {
1038
+ return [itemId];
1039
+ }
1040
+ const descendants = tree.retrieveChildrenIds(itemId, true).map((child) => getAllLoadedDescendants(tree, child, includeFolders)).flat();
1041
+ return includeFolders ? [itemId, ...descendants] : descendants;
1042
+ };
1043
+ var getAllDescendants = (tree, itemId, includeFolders = false) => __async(null, null, function* () {
1044
+ const item = tree.getItemInstance(itemId);
1045
+ if (!item.hasLoadedData()) {
1046
+ yield tree.loadItemData(itemId);
1047
+ }
1048
+ if (!tree.getConfig().isItemFolder(item)) {
1049
+ return [itemId];
1050
+ }
1051
+ const childrenIds = yield tree.loadChildrenIds(itemId);
1052
+ const descendants = (yield Promise.all(childrenIds.map((child) => getAllDescendants(tree, child, includeFolders)))).flat();
1053
+ return includeFolders ? [itemId, ...descendants] : descendants;
1054
+ });
1055
+ var withLoadingState = (tree, itemId, callback) => __async(null, null, function* () {
1056
+ const prom = callback();
1057
+ const immediate = {};
1058
+ const firstCompleted = yield Promise.race([prom, immediate]);
1059
+ if (firstCompleted !== immediate) {
1060
+ tree.applySubStateUpdate("loadingCheckPropagationItems", (items) => [
1061
+ ...items,
1062
+ itemId
1063
+ ]);
1064
+ try {
1065
+ yield prom;
1066
+ } finally {
1067
+ tree.applySubStateUpdate("loadingCheckPropagationItems", (items) => items.filter((id) => id !== itemId));
1068
+ }
1069
+ } else {
1070
+ yield prom;
1071
+ }
1072
+ });
1073
+ var checkboxesFeature = {
1074
+ key: "checkboxes",
1075
+ overwrites: ["selection"],
1076
+ getInitialState: (initialState) => __spreadValues2({
1077
+ checkedItems: [],
1078
+ loadingCheckPropagationItems: []
1079
+ }, initialState),
1080
+ getDefaultConfig: (defaultConfig, tree) => {
1081
+ var _a, _b;
1082
+ const propagateCheckedState = (_a = defaultConfig.propagateCheckedState) != null ? _a : true;
1083
+ const canCheckFolders = (_b = defaultConfig.canCheckFolders) != null ? _b : !propagateCheckedState;
1084
+ return __spreadValues2({
1085
+ setCheckedItems: makeStateUpdater("checkedItems", tree),
1086
+ setLoadingCheckPropagationItems: makeStateUpdater("loadingCheckPropagationItems", tree),
1087
+ propagateCheckedState,
1088
+ canCheckFolders
1089
+ }, defaultConfig);
1090
+ },
1091
+ stateHandlerNames: {
1092
+ checkedItems: "setCheckedItems",
1093
+ loadingCheckPropagationItems: "setLoadingCheckPropagationItems"
1094
+ },
1095
+ treeInstance: {
1096
+ setCheckedItems: ({ tree }, checkedItems) => {
1097
+ tree.applySubStateUpdate("checkedItems", checkedItems);
1098
+ }
1099
+ },
1100
+ itemInstance: {
1101
+ getCheckboxProps: ({ item }) => {
1102
+ const checkedState = item.getCheckedState();
1103
+ return {
1104
+ onChange: item.toggleCheckedState,
1105
+ checked: checkedState === "checked",
1106
+ ref: (r) => {
1107
+ if (r) {
1108
+ r.indeterminate = checkedState === "indeterminate";
1109
+ }
1110
+ }
1111
+ };
1112
+ },
1113
+ toggleCheckedState: (_0) => __async(null, [_0], function* ({ item }) {
1114
+ if (item.getCheckedState() === "checked") {
1115
+ yield item.setUnchecked();
1116
+ } else {
1117
+ yield item.setChecked();
1118
+ }
1119
+ }),
1120
+ getCheckedState: ({ item, tree }) => {
1121
+ const { checkedItems } = tree.getState();
1122
+ const { propagateCheckedState } = tree.getConfig();
1123
+ const itemId = item.getId();
1124
+ if (checkedItems.includes(itemId)) {
1125
+ return "checked";
1126
+ }
1127
+ if (item.isFolder() && propagateCheckedState) {
1128
+ const descendants = getAllLoadedDescendants(tree, itemId);
1129
+ if (descendants.length === 0)
1130
+ return "unchecked";
1131
+ if (descendants.every((d) => checkedItems.includes(d))) {
1132
+ return "checked";
1133
+ }
1134
+ if (descendants.some((d) => checkedItems.includes(d))) {
1135
+ return "indeterminate";
1136
+ }
1137
+ }
1138
+ return "unchecked";
1139
+ },
1140
+ setChecked: (_0) => __async(null, [_0], function* ({ item, tree, itemId }) {
1141
+ yield withLoadingState(tree, itemId, () => __async(null, null, function* () {
1142
+ const { propagateCheckedState, canCheckFolders } = tree.getConfig();
1143
+ if (item.isFolder() && propagateCheckedState) {
1144
+ const descendants = yield getAllDescendants(tree, itemId, canCheckFolders);
1145
+ tree.applySubStateUpdate("checkedItems", (items) => [
1146
+ ...items,
1147
+ ...descendants
1148
+ ]);
1149
+ } else if (!item.isFolder() || canCheckFolders) {
1150
+ tree.applySubStateUpdate("checkedItems", (items) => [
1151
+ ...items,
1152
+ itemId
1153
+ ]);
1154
+ }
1155
+ }));
1156
+ }),
1157
+ setUnchecked: (_0) => __async(null, [_0], function* ({ item, tree, itemId }) {
1158
+ yield withLoadingState(tree, itemId, () => __async(null, null, function* () {
1159
+ const { propagateCheckedState, canCheckFolders } = tree.getConfig();
1160
+ if (item.isFolder() && propagateCheckedState) {
1161
+ const descendants = yield getAllDescendants(tree, itemId, canCheckFolders);
1162
+ tree.applySubStateUpdate("checkedItems", (items) => items.filter((id) => !descendants.includes(id) && id !== itemId));
1163
+ } else {
1164
+ tree.applySubStateUpdate("checkedItems", (items) => items.filter((id) => id !== itemId));
1165
+ }
1166
+ }));
1167
+ })
1168
+ }
1169
+ };
1170
+ var resolveKeyCode = (event) => event.code !== "" && event.code !== "Unidentified" ? event.code : event.key;
1171
+ var specialKeys = {
1172
+ letter: /^Key[A-Z]$/,
1173
+ letterornumber: /^(Key[A-Z]|Digit[0-9])$/,
1174
+ plus: /^(NumpadAdd|Plus)$/,
1175
+ minus: /^(NumpadSubtract|Minus)$/,
1176
+ control: /^(ControlLeft|ControlRight)$/,
1177
+ shift: /^(ShiftLeft|ShiftRight)$/,
1178
+ metaorcontrol: /^(MetaLeft|MetaRight|ControlLeft|ControlRight)$/,
1179
+ enter: /^(Enter|NumpadEnter)$/
1180
+ };
1181
+ var modifierKeyCodes = /* @__PURE__ */ new Set([
1182
+ "MetaLeft",
1183
+ "MetaRight",
1184
+ "Meta",
1185
+ "ControlLeft",
1186
+ "ControlRight",
1187
+ "Control",
1188
+ "AltLeft",
1189
+ "AltRight",
1190
+ "Alt",
1191
+ "ShiftLeft",
1192
+ "ShiftRight",
1193
+ "Shift"
1194
+ ]);
1195
+ var testHotkeyMatch = (pressedKeys, tree, hotkey) => {
1196
+ const supposedKeys = hotkey.hotkey.toLowerCase().split("+");
1197
+ const doKeysMatch = supposedKeys.every((key) => {
1198
+ if (key in specialKeys) {
1199
+ return [...pressedKeys].some((pressedKey) => specialKeys[key].test(pressedKey));
1200
+ }
1201
+ const pressedKeysLowerCase = [...pressedKeys].map((pressedKey) => pressedKey.toLowerCase());
1202
+ return pressedKeysLowerCase.includes(key.toLowerCase()) || pressedKeysLowerCase.includes(`key${key.toLowerCase()}`);
1203
+ });
1204
+ const isEnabled = !hotkey.isEnabled || hotkey.isEnabled(tree);
1205
+ return doKeysMatch && isEnabled && pressedKeys.size === supposedKeys.length;
1206
+ };
1207
+ var findHotkeyMatch = (pressedKeys, tree, config1, config2) => {
1208
+ var _a;
1209
+ return (_a = Object.entries(__spreadValues2(__spreadValues2({}, config1), config2)).find(([, hotkey]) => testHotkeyMatch(pressedKeys, tree, hotkey))) == null ? undefined : _a[0];
1210
+ };
1211
+ var hotkeysCoreController = {
1212
+ clearPressedKeys: (dataRef) => {
1213
+ dataRef.current.pressedKeys = /* @__PURE__ */ new Set;
1214
+ },
1215
+ dispatchKeyDown: (tree, dataRef, eventLike, options = {}) => {
1216
+ if (eventLike.defaultPrevented)
1217
+ return;
1218
+ var _a, _b, _c, _d, _e;
1219
+ const { isInputFocused = false, releaseAfterDispatch = false } = options;
1220
+ const { ignoreHotkeysOnInputs, onTreeHotkey, hotkeys } = tree.getConfig();
1221
+ if (isInputFocused && ignoreHotkeysOnInputs) {
1222
+ return;
1223
+ }
1224
+ const resolvedCode = resolveKeyCode({
1225
+ code: (_a = eventLike.code) != null ? _a : "",
1226
+ key: (_b = eventLike.key) != null ? _b : ""
1227
+ });
1228
+ (_d = (_c = dataRef.current).pressedKeys) != null || (_c.pressedKeys = /* @__PURE__ */ new Set);
1229
+ const isNewKey = !dataRef.current.pressedKeys.has(resolvedCode);
1230
+ for (const [flag, codes] of [
1231
+ ["ctrlKey", ["ControlLeft", "ControlRight", "Control"]],
1232
+ ["shiftKey", ["ShiftLeft", "ShiftRight", "Shift"]],
1233
+ ["altKey", ["AltLeft", "AltRight", "Alt"]],
1234
+ ["metaKey", ["MetaLeft", "MetaRight", "Meta"]]
1235
+ ]) {
1236
+ if (eventLike[flag] === false) {
1237
+ for (const code of codes)
1238
+ dataRef.current.pressedKeys.delete(code);
1239
+ } else if (eventLike[flag] === true && !codes.some((code) => dataRef.current.pressedKeys.has(code))) {
1240
+ dataRef.current.pressedKeys.add(codes.some((code) => code === resolvedCode) ? resolvedCode : codes[0]);
1241
+ }
1242
+ }
1243
+ if (resolvedCode) {
1244
+ dataRef.current.pressedKeys.add(resolvedCode);
1245
+ }
1246
+ const hotkeyName = findHotkeyMatch(dataRef.current.pressedKeys, tree, tree.getHotkeyPresets(), hotkeys);
1247
+ if (releaseAfterDispatch && resolvedCode) {
1248
+ dataRef.current.pressedKeys.delete(resolvedCode);
1249
+ }
1250
+ if (!hotkeyName) {
1251
+ return;
1252
+ }
1253
+ const hotkeyConfig = __spreadValues2(__spreadValues2({}, tree.getHotkeyPresets()[hotkeyName]), hotkeys == null ? undefined : hotkeys[hotkeyName]);
1254
+ if (!hotkeyConfig) {
1255
+ return;
1256
+ }
1257
+ if (!hotkeyConfig.allowWhenInputFocused && isInputFocused) {
1258
+ return;
1259
+ }
1260
+ if (!hotkeyConfig.canRepeat && !isNewKey) {
1261
+ return;
1262
+ }
1263
+ if (hotkeyConfig.preventDefault) {
1264
+ (_e = eventLike.preventDefault) == null || _e.call(eventLike);
1265
+ }
1266
+ hotkeyConfig.handler(eventLike, tree);
1267
+ onTreeHotkey == null || onTreeHotkey(hotkeyName, eventLike);
1268
+ },
1269
+ dispatchKeyUp: (dataRef, eventLike) => {
1270
+ var _a, _b, _c, _d;
1271
+ const resolvedCode = resolveKeyCode({
1272
+ code: (_a = eventLike.code) != null ? _a : "",
1273
+ key: (_b = eventLike.key) != null ? _b : ""
1274
+ });
1275
+ if (!resolvedCode) {
1276
+ return;
1277
+ }
1278
+ (_d = (_c = dataRef.current).pressedKeys) != null || (_c.pressedKeys = /* @__PURE__ */ new Set);
1279
+ if (modifierKeyCodes.has(resolvedCode)) {
1280
+ dataRef.current.pressedKeys = new Set([...dataRef.current.pressedKeys].filter((pressedKey) => modifierKeyCodes.has(pressedKey)));
1281
+ }
1282
+ dataRef.current.pressedKeys.delete(resolvedCode);
1283
+ }
1284
+ };
1285
+ var hotkeysCoreFeature = {
1286
+ key: "hotkeys-core",
1287
+ onTreeMount: (tree, element) => {
1288
+ const data = tree.getDataRef();
1289
+ const keydown = (e) => {
1290
+ if (e.defaultPrevented)
1291
+ return;
1292
+ const path = e.composedPath();
1293
+ const owner = path.find((node) => node instanceof Element && node.getAttribute("role") === "tree");
1294
+ if (owner && owner !== element)
1295
+ return;
1296
+ let isInputFocused = false;
1297
+ for (const node of path) {
1298
+ if (node === element)
1299
+ break;
1300
+ if (!(node instanceof Element))
1301
+ continue;
1302
+ if (node.matches("input, textarea, select") || node instanceof HTMLElement && node.isContentEditable) {
1303
+ isInputFocused = true;
1304
+ break;
1305
+ }
1306
+ if (node.getAttribute("role") === "treeitem")
1307
+ break;
1308
+ if (node.matches('button, a, summary, audio[controls], video[controls], [tabindex], [role="button"], [role="link"], [role="menu"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="textbox"], [role="combobox"], [role="listbox"], [role="option"], [role="slider"], [role="spinbutton"], [role="checkbox"], [role="radio"], [role="switch"], [role="tab"]'))
1309
+ return;
1310
+ }
1311
+ hotkeysCoreController.dispatchKeyDown(tree, data, e, {
1312
+ isInputFocused,
1313
+ releaseAfterDispatch: isInputFocused
1314
+ });
1315
+ };
1316
+ const keyup = (e) => {
1317
+ hotkeysCoreController.dispatchKeyUp(data, e);
1318
+ };
1319
+ const reset = () => {
1320
+ hotkeysCoreController.clearPressedKeys(data);
1321
+ };
1322
+ element.addEventListener("keydown", keydown);
1323
+ document.addEventListener("keyup", keyup);
1324
+ window.addEventListener("focus", reset);
1325
+ data.current.keydownHandler = keydown;
1326
+ data.current.keyupHandler = keyup;
1327
+ data.current.resetHandler = reset;
1328
+ },
1329
+ onTreeUnmount: (tree, element) => {
1330
+ const data = tree.getDataRef();
1331
+ if (data.current.keyupHandler) {
1332
+ document.removeEventListener("keyup", data.current.keyupHandler);
1333
+ delete data.current.keyupHandler;
1334
+ }
1335
+ if (data.current.keydownHandler) {
1336
+ element.removeEventListener("keydown", data.current.keydownHandler);
1337
+ delete data.current.keydownHandler;
1338
+ }
1339
+ if (data.current.resetHandler) {
1340
+ window.removeEventListener("focus", data.current.resetHandler);
1341
+ delete data.current.resetHandler;
1342
+ }
1343
+ }
1344
+ };
1345
+ var getDataRef = (tree) => {
1346
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1347
+ const dataRef = tree.getDataRef();
1348
+ (_b = (_a = dataRef.current).itemData) != null || (_a.itemData = {});
1349
+ (_d = (_c = dataRef.current).childrenIds) != null || (_c.childrenIds = {});
1350
+ (_f = (_e = dataRef.current).loadingDataSubs) != null || (_e.loadingDataSubs = {});
1351
+ (_h = (_g = dataRef.current).loadingChildrenSubs) != null || (_g.loadingChildrenSubs = {});
1352
+ return dataRef;
1353
+ };
1354
+ var loadItemData = (tree, itemId) => __async(null, null, function* () {
1355
+ var _a, _b;
1356
+ const config = tree.getConfig();
1357
+ const dataRef = getDataRef(tree);
1358
+ if (tree.getState().loadingItemData.includes(itemId)) {
1359
+ return new Promise((resolve) => {
1360
+ var _a2, _b2;
1361
+ (_b2 = (_a2 = dataRef.current.loadingDataSubs)[itemId]) != null || (_a2[itemId] = []);
1362
+ dataRef.current.loadingDataSubs[itemId].push(() => {
1363
+ resolve(dataRef.current.itemData[itemId]);
1364
+ });
1365
+ });
1366
+ }
1367
+ if (!dataRef.current.itemData[itemId]) {
1368
+ tree.applySubStateUpdate("loadingItemData", (loadingItemData) => [
1369
+ ...loadingItemData,
1370
+ itemId
1371
+ ]);
1372
+ }
1373
+ const item = yield config.dataLoader.getItem(itemId);
1374
+ dataRef.current.itemData[itemId] = item;
1375
+ (_a = config.onLoadedItem) == null || _a.call(config, itemId, item);
1376
+ tree.applySubStateUpdate("loadingItemData", (loadingItemData) => loadingItemData.filter((id) => id !== itemId));
1377
+ (_b = dataRef.current.loadingDataSubs[itemId]) == null || _b.forEach((cb) => cb());
1378
+ return item;
1379
+ });
1380
+ var loadChildrenIds = (tree, itemId) => __async(null, null, function* () {
1381
+ var _a, _b, _c;
1382
+ const config = tree.getConfig();
1383
+ const dataRef = getDataRef(tree);
1384
+ let childrenIds;
1385
+ if (tree.getState().loadingItemChildrens.includes(itemId)) {
1386
+ return new Promise((resolve) => {
1387
+ var _a2, _b2;
1388
+ (_b2 = (_a2 = dataRef.current.loadingChildrenSubs)[itemId]) != null || (_a2[itemId] = []);
1389
+ dataRef.current.loadingChildrenSubs[itemId].push(() => {
1390
+ resolve(dataRef.current.childrenIds[itemId]);
1391
+ });
1392
+ });
1393
+ }
1394
+ if (!dataRef.current.childrenIds[itemId]) {
1395
+ tree.applySubStateUpdate("loadingItemChildrens", (loadingItemChildrens) => [
1396
+ ...loadingItemChildrens,
1397
+ itemId
1398
+ ]);
1399
+ }
1400
+ if ("getChildrenWithData" in config.dataLoader) {
1401
+ const children = yield config.dataLoader.getChildrenWithData(itemId);
1402
+ childrenIds = children.map((c) => c.id);
1403
+ dataRef.current.childrenIds[itemId] = childrenIds;
1404
+ children.forEach(({ id, data }) => {
1405
+ var _a2;
1406
+ dataRef.current.itemData[id] = data;
1407
+ (_a2 = config.onLoadedItem) == null || _a2.call(config, id, data);
1408
+ });
1409
+ (_a = config.onLoadedChildren) == null || _a.call(config, itemId, childrenIds);
1410
+ tree.rebuildTree();
1411
+ tree.applySubStateUpdate("loadingItemData", (loadingItemData) => loadingItemData.filter((id) => !childrenIds.includes(id)));
1412
+ } else {
1413
+ childrenIds = yield config.dataLoader.getChildren(itemId);
1414
+ dataRef.current.childrenIds[itemId] = childrenIds;
1415
+ (_b = config.onLoadedChildren) == null || _b.call(config, itemId, childrenIds);
1416
+ tree.rebuildTree();
1417
+ }
1418
+ tree.applySubStateUpdate("loadingItemChildrens", (loadingItemChildrens) => loadingItemChildrens.filter((id) => id !== itemId));
1419
+ (_c = dataRef.current.loadingChildrenSubs[itemId]) == null || _c.forEach((cb) => cb());
1420
+ return childrenIds;
1421
+ });
1422
+ var asyncDataLoaderFeature = {
1423
+ key: "async-data-loader",
1424
+ getInitialState: (initialState) => __spreadValues2({
1425
+ loadingItemData: [],
1426
+ loadingItemChildrens: []
1427
+ }, initialState),
1428
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
1429
+ setLoadingItemData: makeStateUpdater("loadingItemData", tree),
1430
+ setLoadingItemChildrens: makeStateUpdater("loadingItemChildrens", tree)
1431
+ }, defaultConfig),
1432
+ stateHandlerNames: {
1433
+ loadingItemData: "setLoadingItemData",
1434
+ loadingItemChildrens: "setLoadingItemChildrens"
1435
+ },
1436
+ treeInstance: {
1437
+ waitForItemDataLoaded: ({ tree }, itemId) => tree.loadItemData(itemId),
1438
+ waitForItemChildrenLoaded: ({ tree }, itemId) => tree.loadChildrenIds(itemId),
1439
+ loadItemData: (_0, _1) => __async(null, [_0, _1], function* ({ tree }, itemId) {
1440
+ var _a;
1441
+ return (_a = getDataRef(tree).current.itemData[itemId]) != null ? _a : yield loadItemData(tree, itemId);
1442
+ }),
1443
+ loadChildrenIds: (_0, _1) => __async(null, [_0, _1], function* ({ tree }, itemId) {
1444
+ var _a;
1445
+ return (_a = getDataRef(tree).current.childrenIds[itemId]) != null ? _a : yield loadChildrenIds(tree, itemId);
1446
+ }),
1447
+ retrieveItemData: ({ tree }, itemId, skipFetch = false) => {
1448
+ var _a, _b;
1449
+ const config = tree.getConfig();
1450
+ const dataRef = getDataRef(tree);
1451
+ if (dataRef.current.itemData[itemId]) {
1452
+ return dataRef.current.itemData[itemId];
1453
+ }
1454
+ if (!tree.getState().loadingItemData.includes(itemId) && !skipFetch) {
1455
+ setTimeout(() => loadItemData(tree, itemId));
1456
+ }
1457
+ return (_b = (_a = config.createLoadingItemData) == null ? undefined : _a.call(config)) != null ? _b : null;
1458
+ },
1459
+ retrieveChildrenIds: ({ tree }, itemId, skipFetch = false) => {
1460
+ const dataRef = getDataRef(tree);
1461
+ if (dataRef.current.childrenIds[itemId]) {
1462
+ return dataRef.current.childrenIds[itemId];
1463
+ }
1464
+ if (tree.getState().loadingItemChildrens.includes(itemId) || skipFetch) {
1465
+ return [];
1466
+ }
1467
+ setTimeout(() => loadChildrenIds(tree, itemId));
1468
+ return [];
1469
+ }
1470
+ },
1471
+ itemInstance: {
1472
+ isLoading: ({ tree, item }) => tree.getState().loadingItemData.includes(item.getItemMeta().itemId) || tree.getState().loadingItemChildrens.includes(item.getItemMeta().itemId),
1473
+ invalidateItemData: (_0, _1) => __async(null, [_0, _1], function* ({ tree, itemId }, optimistic) {
1474
+ var _a;
1475
+ if (!optimistic) {
1476
+ (_a = getDataRef(tree).current.itemData) == null || delete _a[itemId];
1477
+ }
1478
+ yield loadItemData(tree, itemId);
1479
+ }),
1480
+ invalidateChildrenIds: (_0, _1) => __async(null, [_0, _1], function* ({ tree, itemId }, optimistic) {
1481
+ var _a;
1482
+ if (!optimistic) {
1483
+ (_a = getDataRef(tree).current.childrenIds) == null || delete _a[itemId];
1484
+ }
1485
+ yield loadChildrenIds(tree, itemId);
1486
+ }),
1487
+ updateCachedChildrenIds: ({ tree, itemId }, childrenIds, skipUpdateTree) => {
1488
+ getDataRef(tree).current.childrenIds[itemId] = childrenIds;
1489
+ if (!skipUpdateTree) {
1490
+ tree.rebuildTree();
1491
+ }
1492
+ },
1493
+ updateCachedData: ({ tree, itemId }, data, skipUpdateTree) => {
1494
+ getDataRef(tree).current.itemData[itemId] = data;
1495
+ if (!skipUpdateTree) {
1496
+ tree.rebuildTree();
1497
+ }
1498
+ },
1499
+ hasLoadedData: ({ tree, itemId }) => {
1500
+ const dataRef = tree.getDataRef();
1501
+ return dataRef.current.itemData[itemId] !== undefined;
1502
+ }
1503
+ }
1504
+ };
1505
+ var undefErrorMessage = "sync dataLoader returned undefined";
1506
+ var promiseErrorMessage = "sync dataLoader returned promise";
1507
+ var unpromise = (data) => {
1508
+ if (!data) {
1509
+ throw throwError(undefErrorMessage);
1510
+ }
1511
+ if (typeof data === "object" && "then" in data) {
1512
+ throw throwError(promiseErrorMessage);
1513
+ }
1514
+ return data;
1515
+ };
1516
+ var syncDataLoaderFeature = {
1517
+ key: "sync-data-loader",
1518
+ getInitialState: (initialState) => __spreadValues2({
1519
+ loadingItemData: [],
1520
+ loadingItemChildrens: []
1521
+ }, initialState),
1522
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
1523
+ setLoadingItemData: makeStateUpdater("loadingItemData", tree),
1524
+ setLoadingItemChildrens: makeStateUpdater("loadingItemChildrens", tree)
1525
+ }, defaultConfig),
1526
+ stateHandlerNames: {
1527
+ loadingItemData: "setLoadingItemData",
1528
+ loadingItemChildrens: "setLoadingItemChildrens"
1529
+ },
1530
+ treeInstance: {
1531
+ waitForItemDataLoaded: () => __async(null, null, function* () {}),
1532
+ waitForItemChildrenLoaded: () => __async(null, null, function* () {}),
1533
+ retrieveItemData: ({ tree }, itemId) => {
1534
+ return unpromise(tree.getConfig().dataLoader.getItem(itemId));
1535
+ },
1536
+ retrieveChildrenIds: ({ tree }, itemId) => {
1537
+ const { dataLoader } = tree.getConfig();
1538
+ if ("getChildren" in dataLoader) {
1539
+ return unpromise(dataLoader.getChildren(itemId));
1540
+ }
1541
+ return unpromise(dataLoader.getChildrenWithData(itemId)).map((c) => c.data);
1542
+ },
1543
+ loadItemData: ({ tree }, itemId) => tree.retrieveItemData(itemId),
1544
+ loadChildrenIds: ({ tree }, itemId) => tree.retrieveChildrenIds(itemId)
1545
+ },
1546
+ itemInstance: {
1547
+ isLoading: () => false,
1548
+ hasLoadedData: () => true
1549
+ }
1550
+ };
1551
+ var isOrderedDragTarget = (dragTarget) => ("childIndex" in dragTarget);
1552
+ var canDrop = (dataTransfer, target, tree) => {
1553
+ var _a, _b, _c;
1554
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1555
+ const config = tree.getConfig();
1556
+ if (draggedItems && !((_c = (_b = config.canDrop) == null ? undefined : _b.call(config, draggedItems, target)) != null ? _c : true)) {
1557
+ return false;
1558
+ }
1559
+ if (draggedItems && draggedItems.some((draggedItem) => target.item.getId() === draggedItem.getId() || target.item.isDescendentOf(draggedItem.getId()))) {
1560
+ return false;
1561
+ }
1562
+ if (!draggedItems && dataTransfer && config.canDropForeignDragObject && !config.canDropForeignDragObject(dataTransfer, target)) {
1563
+ return false;
1564
+ }
1565
+ return true;
1566
+ };
1567
+ var getItemDropCategory = (item) => {
1568
+ if (item.isExpanded()) {
1569
+ return 1;
1570
+ }
1571
+ const parent = item.getParent();
1572
+ if (parent && item.getIndexInParent() === item.getItemMeta().setSize - 1) {
1573
+ return 2;
1574
+ }
1575
+ return 0;
1576
+ };
1577
+ var getInsertionIndex = (children, childIndex, draggedItems) => {
1578
+ var _a;
1579
+ const numberOfDragItemsBeforeTarget = (_a = children.slice(0, childIndex).reduce((counter, child) => child && (draggedItems == null ? undefined : draggedItems.some((i) => i.getId() === child.getId())) ? ++counter : counter, 0)) != null ? _a : 0;
1580
+ return childIndex - numberOfDragItemsBeforeTarget;
1581
+ };
1582
+ var getTargetPlacement = (e, item, tree, canMakeChild) => {
1583
+ var _a, _b, _c, _d, _e;
1584
+ const config = tree.getConfig();
1585
+ if (!config.canReorder) {
1586
+ return canMakeChild ? { type: 2 } : { type: 1 };
1587
+ }
1588
+ const bb = (_a = item.getElement()) == null ? undefined : _a.getBoundingClientRect();
1589
+ const topPercent = bb ? (e.clientY - bb.top) / bb.height : 0.5;
1590
+ const leftPixels = bb ? e.clientX - bb.left : 0;
1591
+ const targetDropCategory = getItemDropCategory(item);
1592
+ const reorderAreaPercentage = !canMakeChild ? 0.5 : (_b = config.reorderAreaPercentage) != null ? _b : 0.3;
1593
+ const indent = (_c = config.indent) != null ? _c : 20;
1594
+ const makeChildType = canMakeChild ? 2 : 1;
1595
+ if (targetDropCategory === 1) {
1596
+ if (topPercent < reorderAreaPercentage) {
1597
+ return { type: 0 };
1598
+ }
1599
+ return { type: makeChildType };
1600
+ }
1601
+ if (targetDropCategory === 2) {
1602
+ if (leftPixels < item.getItemMeta().level * indent) {
1603
+ if (topPercent < 0.5) {
1604
+ return { type: 0 };
1605
+ }
1606
+ const minLevel = (_e = (_d = item.getItemBelow()) == null ? undefined : _d.getItemMeta().level) != null ? _e : 0;
1607
+ return {
1608
+ type: 3,
1609
+ reparentLevel: Math.max(minLevel, Math.floor(leftPixels / indent))
1610
+ };
1611
+ }
1612
+ }
1613
+ if (topPercent < reorderAreaPercentage) {
1614
+ return { type: 0 };
1615
+ }
1616
+ if (topPercent > 1 - reorderAreaPercentage) {
1617
+ return { type: 1 };
1618
+ }
1619
+ return { type: makeChildType };
1620
+ };
1621
+ var getDragCode = (item, placement) => {
1622
+ return [
1623
+ item.getId(),
1624
+ placement.type,
1625
+ placement.type === 3 ? placement.reparentLevel : 0
1626
+ ].join("__");
1627
+ };
1628
+ var getNthParent = (item, n) => {
1629
+ if (n === item.getItemMeta().level) {
1630
+ return item;
1631
+ }
1632
+ return getNthParent(item.getParent(), n);
1633
+ };
1634
+ var getReparentTarget = (item, reparentLevel, draggedItems) => {
1635
+ const itemMeta = item.getItemMeta();
1636
+ const reparentedTarget = getNthParent(item, reparentLevel - 1);
1637
+ const targetItemAbove = getNthParent(item, reparentLevel);
1638
+ const targetIndex = targetItemAbove.getIndexInParent() + 1;
1639
+ return {
1640
+ item: reparentedTarget,
1641
+ childIndex: targetIndex,
1642
+ insertionIndex: getInsertionIndex(reparentedTarget.getChildren(), targetIndex, draggedItems),
1643
+ dragLineIndex: itemMeta.index + 1,
1644
+ dragLineLevel: reparentLevel
1645
+ };
1646
+ };
1647
+ var getDragTarget = (e, item, tree, hasDataTransferPayload, canReorder = tree.getConfig().canReorder) => {
1648
+ var _a;
1649
+ const dataTransfer = hasDataTransferPayload ? e.dataTransfer : null;
1650
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1651
+ const itemMeta = item.getItemMeta();
1652
+ const parent = item.getParent();
1653
+ const itemTarget = { item };
1654
+ const parentTarget = parent ? { item: parent } : null;
1655
+ const canBecomeSibling = parentTarget && canDrop(dataTransfer, parentTarget, tree);
1656
+ const canMakeChild = canDrop(dataTransfer, itemTarget, tree);
1657
+ const placement = getTargetPlacement(e, item, tree, canMakeChild);
1658
+ if (!canReorder && parent && canBecomeSibling && placement.type !== 2) {
1659
+ if (draggedItems == null ? undefined : draggedItems.some((item2) => item2.isDescendentOf(parent.getId()))) {
1660
+ return itemTarget;
1661
+ }
1662
+ return parentTarget;
1663
+ }
1664
+ if (placement.type === 2) {
1665
+ return itemTarget;
1666
+ }
1667
+ if (!canReorder && parent && !canBecomeSibling) {
1668
+ return getDragTarget(e, parent, tree, hasDataTransferPayload, false);
1669
+ }
1670
+ if (!parent) {
1671
+ return itemTarget;
1672
+ }
1673
+ if (!canBecomeSibling) {
1674
+ return getDragTarget(e, parent, tree, hasDataTransferPayload, false);
1675
+ }
1676
+ if (placement.type === 3) {
1677
+ return getReparentTarget(item, placement.reparentLevel, draggedItems);
1678
+ }
1679
+ const maybeAddOneForBelow = placement.type === 0 ? 0 : 1;
1680
+ const childIndex = item.getIndexInParent() + maybeAddOneForBelow;
1681
+ return {
1682
+ item: parent,
1683
+ dragLineIndex: itemMeta.index + maybeAddOneForBelow,
1684
+ dragLineLevel: itemMeta.level,
1685
+ childIndex,
1686
+ insertionIndex: getInsertionIndex(parent.getChildren(), childIndex, draggedItems)
1687
+ };
1688
+ };
1689
+ var handleAutoOpenFolder = (dataRef, tree, item, placement) => {
1690
+ const { openOnDropDelay } = tree.getConfig();
1691
+ const dragCode = dataRef.current.lastDragCode;
1692
+ if (!openOnDropDelay || !item.isFolder() || item.isExpanded() || placement.type !== 2) {
1693
+ return;
1694
+ }
1695
+ clearTimeout(dataRef.current.autoExpandTimeout);
1696
+ dataRef.current.autoExpandTimeout = setTimeout(() => {
1697
+ if (dragCode !== dataRef.current.lastDragCode || !dataRef.current.lastAllowDrop)
1698
+ return;
1699
+ item.expand();
1700
+ }, openOnDropDelay);
1701
+ };
1702
+ var defaultCanDropForeignDragObject = () => false;
1703
+ var dragAndDropFeature = {
1704
+ key: "drag-and-drop",
1705
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
1706
+ canDrop: (_, target) => target.item.isFolder(),
1707
+ canDropForeignDragObject: defaultCanDropForeignDragObject,
1708
+ canDragForeignDragObjectOver: defaultConfig.canDropForeignDragObject !== defaultCanDropForeignDragObject ? (dataTransfer) => dataTransfer.effectAllowed !== "none" : () => false,
1709
+ setDndState: makeStateUpdater("dnd", tree),
1710
+ canReorder: true,
1711
+ openOnDropDelay: 800,
1712
+ draggedItemOverwritesSelection: true
1713
+ }, defaultConfig),
1714
+ stateHandlerNames: {
1715
+ dnd: "setDndState"
1716
+ },
1717
+ onTreeMount: (tree) => {
1718
+ const listener = () => {
1719
+ tree.applySubStateUpdate("dnd", null);
1720
+ };
1721
+ tree.getDataRef().current.windowDragEndListener = listener;
1722
+ window.addEventListener("dragend", listener);
1723
+ },
1724
+ onTreeUnmount: (tree) => {
1725
+ const { windowDragEndListener } = tree.getDataRef().current;
1726
+ if (!windowDragEndListener)
1727
+ return;
1728
+ window.removeEventListener("dragend", windowDragEndListener);
1729
+ },
1730
+ treeInstance: {
1731
+ getDragTarget: ({ tree }) => {
1732
+ var _a, _b;
1733
+ return (_b = (_a = tree.getState().dnd) == null ? undefined : _a.dragTarget) != null ? _b : null;
1734
+ },
1735
+ getDragLineData: ({ tree }) => {
1736
+ var _a, _b, _c, _d, _e, _f;
1737
+ const target = tree.getDragTarget();
1738
+ const indent = ((_a = target == null ? undefined : target.item.getItemMeta().level) != null ? _a : 0) + 1;
1739
+ const treeBb = (_b = tree.getElement()) == null ? undefined : _b.getBoundingClientRect();
1740
+ if (!target || !treeBb || !isOrderedDragTarget(target))
1741
+ return null;
1742
+ const leftOffset = target.dragLineLevel * ((_c = tree.getConfig().indent) != null ? _c : 1);
1743
+ const targetItem = tree.getItems()[target.dragLineIndex];
1744
+ if (!targetItem) {
1745
+ const bb2 = (_e = (_d = tree.getItems()[target.dragLineIndex - 1]) == null ? undefined : _d.getElement()) == null ? undefined : _e.getBoundingClientRect();
1746
+ if (bb2) {
1747
+ return {
1748
+ indent,
1749
+ top: bb2.bottom - treeBb.top,
1750
+ left: bb2.left + leftOffset - treeBb.left,
1751
+ width: bb2.width - leftOffset
1752
+ };
1753
+ }
1754
+ }
1755
+ const bb = (_f = targetItem == null ? undefined : targetItem.getElement()) == null ? undefined : _f.getBoundingClientRect();
1756
+ if (bb) {
1757
+ return {
1758
+ indent,
1759
+ top: bb.top - treeBb.top,
1760
+ left: bb.left + leftOffset - treeBb.left,
1761
+ width: bb.width - leftOffset
1762
+ };
1763
+ }
1764
+ return null;
1765
+ },
1766
+ getDragLineStyle: ({ tree }, topOffset = -1, leftOffset = -8) => {
1767
+ const dragLine = tree.getDragLineData();
1768
+ return dragLine ? {
1769
+ position: "absolute",
1770
+ top: `${dragLine.top + topOffset}px`,
1771
+ left: `${dragLine.left + leftOffset}px`,
1772
+ width: `${dragLine.width - leftOffset}px`,
1773
+ pointerEvents: "none"
1774
+ } : { display: "none" };
1775
+ },
1776
+ getContainerProps: ({ prev, tree }, treeLabel) => {
1777
+ const prevProps = prev == null ? undefined : prev(treeLabel);
1778
+ return __spreadProps2(__spreadValues2({}, prevProps), {
1779
+ onDragOver: (e) => {
1780
+ e.preventDefault();
1781
+ },
1782
+ onDrop: (e) => __async(null, null, function* () {
1783
+ var _a, _b, _c;
1784
+ const dataRef = tree.getDataRef();
1785
+ const target = { item: tree.getRootItem() };
1786
+ if (!canDrop(e.dataTransfer, target, tree)) {
1787
+ return;
1788
+ }
1789
+ e.preventDefault();
1790
+ const config = tree.getConfig();
1791
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1792
+ dataRef.current.lastDragCode = undefined;
1793
+ if (draggedItems) {
1794
+ yield (_b = config.onDrop) == null ? undefined : _b.call(config, draggedItems, target);
1795
+ } else if (e.dataTransfer) {
1796
+ yield (_c = config.onDropForeignDragObject) == null ? undefined : _c.call(config, e.dataTransfer, target);
1797
+ }
1798
+ }),
1799
+ style: __spreadProps2(__spreadValues2({}, prevProps == null ? undefined : prevProps.style), {
1800
+ position: "relative"
1801
+ })
1802
+ });
1803
+ }
1804
+ },
1805
+ itemInstance: {
1806
+ getProps: ({ tree, item, prev }) => __spreadProps2(__spreadValues2(__spreadValues2({}, prev == null ? undefined : prev()), tree.getConfig().seperateDragHandle ? {} : item.getDragHandleProps()), {
1807
+ onDragEnter: (e) => e.preventDefault(),
1808
+ onDragOver: (e) => {
1809
+ var _a, _b, _c;
1810
+ e.stopPropagation();
1811
+ const dataRef = tree.getDataRef();
1812
+ const placement = getTargetPlacement(e, item, tree, true);
1813
+ const nextDragCode = getDragCode(item, placement);
1814
+ if (nextDragCode === dataRef.current.lastDragCode) {
1815
+ if (dataRef.current.lastAllowDrop) {
1816
+ e.preventDefault();
1817
+ }
1818
+ return;
1819
+ }
1820
+ dataRef.current.lastDragCode = nextDragCode;
1821
+ dataRef.current.lastDragEnter = Date.now();
1822
+ handleAutoOpenFolder(dataRef, tree, item, placement);
1823
+ const target = getDragTarget(e, item, tree, false);
1824
+ if (!((_a = tree.getState().dnd) == null ? undefined : _a.draggedItems) && (!e.dataTransfer || !((_c = (_b = tree.getConfig()).canDragForeignDragObjectOver) == null ? undefined : _c.call(_b, e.dataTransfer, target)))) {
1825
+ dataRef.current.lastAllowDrop = false;
1826
+ return;
1827
+ }
1828
+ if (!canDrop(null, target, tree)) {
1829
+ dataRef.current.lastAllowDrop = false;
1830
+ return;
1831
+ }
1832
+ tree.applySubStateUpdate("dnd", (state) => __spreadProps2(__spreadValues2({}, state), {
1833
+ dragTarget: target,
1834
+ draggingOverItem: item
1835
+ }));
1836
+ dataRef.current.lastAllowDrop = true;
1837
+ e.preventDefault();
1838
+ },
1839
+ onDragLeave: () => {
1840
+ setTimeout(() => {
1841
+ var _a;
1842
+ const dataRef = tree.getDataRef();
1843
+ if (((_a = dataRef.current.lastDragEnter) != null ? _a : 0) + 100 >= Date.now())
1844
+ return;
1845
+ dataRef.current.lastDragCode = "no-drag";
1846
+ tree.applySubStateUpdate("dnd", (state) => __spreadProps2(__spreadValues2({}, state), {
1847
+ draggingOverItem: undefined,
1848
+ dragTarget: undefined
1849
+ }));
1850
+ }, 100);
1851
+ },
1852
+ onDrop: (e) => __async(null, null, function* () {
1853
+ var _a, _b, _c;
1854
+ e.stopPropagation();
1855
+ const dataRef = tree.getDataRef();
1856
+ const target = getDragTarget(e, item, tree, true);
1857
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1858
+ const isValidDrop = canDrop(e.dataTransfer, target, tree);
1859
+ tree.applySubStateUpdate("dnd", {
1860
+ draggedItems: undefined,
1861
+ draggingOverItem: undefined,
1862
+ dragTarget: undefined
1863
+ });
1864
+ if (!isValidDrop) {
1865
+ return;
1866
+ }
1867
+ e.preventDefault();
1868
+ const config = tree.getConfig();
1869
+ dataRef.current.lastDragCode = undefined;
1870
+ if (draggedItems) {
1871
+ yield (_b = config.onDrop) == null ? undefined : _b.call(config, draggedItems, target);
1872
+ draggedItems[0].setFocused();
1873
+ } else if (e.dataTransfer) {
1874
+ yield (_c = config.onDropForeignDragObject) == null ? undefined : _c.call(config, e.dataTransfer, target);
1875
+ }
1876
+ tree.applySubStateUpdate("dnd", null);
1877
+ tree.updateDomFocus();
1878
+ })
1879
+ }),
1880
+ getDragHandleProps: ({ tree, item, prev }) => __spreadProps2(__spreadValues2({}, prev == null ? undefined : prev()), {
1881
+ draggable: true,
1882
+ onDragStart: (e) => {
1883
+ var _a, _b, _c, _d;
1884
+ const { draggedItemOverwritesSelection } = tree.getConfig();
1885
+ const selectedItems = tree.getSelectedItems ? tree.getSelectedItems() : [tree.getFocusedItem()];
1886
+ const overwriteSelection = !selectedItems.includes(item) && draggedItemOverwritesSelection;
1887
+ const items = overwriteSelection ? [item] : selectedItems;
1888
+ const config = tree.getConfig();
1889
+ if (overwriteSelection) {
1890
+ (_a = tree.setSelectedItems) == null || _a.call(tree, [item.getItemMeta().itemId]);
1891
+ }
1892
+ if (!((_c = (_b = config.canDrag) == null ? undefined : _b.call(config, items)) != null ? _c : true)) {
1893
+ e.preventDefault();
1894
+ return;
1895
+ }
1896
+ if (config.setDragImage) {
1897
+ const { imgElement, xOffset, yOffset } = config.setDragImage(items);
1898
+ (_d = e.dataTransfer) == null || _d.setDragImage(imgElement, xOffset != null ? xOffset : 0, yOffset != null ? yOffset : 0);
1899
+ }
1900
+ if (config.createForeignDragObject && e.dataTransfer) {
1901
+ const { format, data, dropEffect, effectAllowed } = config.createForeignDragObject(items);
1902
+ e.dataTransfer.setData(format, data);
1903
+ if (dropEffect)
1904
+ e.dataTransfer.dropEffect = dropEffect;
1905
+ if (effectAllowed)
1906
+ e.dataTransfer.effectAllowed = effectAllowed;
1907
+ }
1908
+ tree.applySubStateUpdate("dnd", {
1909
+ draggedItems: items,
1910
+ draggingOverItem: tree.getFocusedItem()
1911
+ });
1912
+ },
1913
+ onDragEnd: (e) => {
1914
+ var _a, _b;
1915
+ const { onCompleteForeignDrop, canDragForeignDragObjectOver } = tree.getConfig();
1916
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1917
+ if (((_b = e.dataTransfer) == null ? undefined : _b.dropEffect) === "none" || !draggedItems) {
1918
+ return;
1919
+ }
1920
+ const target = getDragTarget(e, item, tree, false);
1921
+ if (canDragForeignDragObjectOver && e.dataTransfer && !canDragForeignDragObjectOver(e.dataTransfer, target)) {
1922
+ return;
1923
+ }
1924
+ onCompleteForeignDrop == null || onCompleteForeignDrop(draggedItems);
1925
+ }
1926
+ }),
1927
+ isDragTarget: ({ tree, item }) => {
1928
+ const target = tree.getDragTarget();
1929
+ return target ? target.item.getId() === item.getId() : false;
1930
+ },
1931
+ isUnorderedDragTarget: ({ tree, item }) => {
1932
+ const target = tree.getDragTarget();
1933
+ return target ? !isOrderedDragTarget(target) && target.item.getId() === item.getId() : false;
1934
+ },
1935
+ isDragTargetAbove: ({ tree, item }) => {
1936
+ const target = tree.getDragTarget();
1937
+ if (!target || !isOrderedDragTarget(target) || target.item !== item.getParent())
1938
+ return false;
1939
+ return target.childIndex === item.getItemMeta().posInSet;
1940
+ },
1941
+ isDragTargetBelow: ({ tree, item }) => {
1942
+ const target = tree.getDragTarget();
1943
+ if (!target || !isOrderedDragTarget(target) || target.item !== item.getParent())
1944
+ return false;
1945
+ return target.childIndex - 1 === item.getItemMeta().posInSet;
1946
+ },
1947
+ isDraggingOver: ({ tree, item }) => {
1948
+ var _a, _b;
1949
+ return ((_b = (_a = tree.getState().dnd) == null ? undefined : _a.draggingOverItem) == null ? undefined : _b.getId()) === item.getId();
1950
+ }
1951
+ }
1952
+ };
1953
+ var getNextDragTarget = (tree, isUp, dragTarget) => {
1954
+ var _a, _b, _c, _d;
1955
+ const direction = isUp ? 0 : 1;
1956
+ const draggedItems = (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems;
1957
+ if (isOrderedDragTarget(dragTarget)) {
1958
+ const parent = dragTarget.item.getParent();
1959
+ const targetedItem = tree.getItems()[dragTarget.dragLineIndex - 1];
1960
+ const targetCategory = targetedItem ? getItemDropCategory(targetedItem) : 0;
1961
+ const maxLevel = (_b = targetedItem == null ? undefined : targetedItem.getItemMeta().level) != null ? _b : 0;
1962
+ const minLevel = (_d = (_c = targetedItem == null ? undefined : targetedItem.getItemBelow()) == null ? undefined : _c.getItemMeta().level) != null ? _d : 0;
1963
+ if (targetCategory === 2) {
1964
+ if (isUp && dragTarget.dragLineLevel < maxLevel) {
1965
+ return getReparentTarget(targetedItem, dragTarget.dragLineLevel + 1, draggedItems);
1966
+ }
1967
+ if (!isUp && dragTarget.dragLineLevel > minLevel && parent) {
1968
+ return getReparentTarget(targetedItem, dragTarget.dragLineLevel - 1, draggedItems);
1969
+ }
1970
+ }
1971
+ const newIndex = dragTarget.dragLineIndex - 1 + direction;
1972
+ const item = tree.getItems()[newIndex];
1973
+ return item ? { item } : undefined;
1974
+ }
1975
+ const targetingExpandedFolder = getItemDropCategory(dragTarget.item) === 1;
1976
+ if (targetingExpandedFolder && !isUp) {
1977
+ return {
1978
+ item: dragTarget.item,
1979
+ childIndex: 0,
1980
+ insertionIndex: getInsertionIndex(dragTarget.item.getChildren(), 0, draggedItems),
1981
+ dragLineIndex: dragTarget.item.getItemMeta().index + direction,
1982
+ dragLineLevel: dragTarget.item.getItemMeta().level + 1
1983
+ };
1984
+ }
1985
+ const childIndex = dragTarget.item.getIndexInParent() + direction;
1986
+ return {
1987
+ item: dragTarget.item.getParent(),
1988
+ childIndex,
1989
+ insertionIndex: getInsertionIndex(dragTarget.item.getParent().getChildren(), childIndex, draggedItems),
1990
+ dragLineIndex: dragTarget.item.getItemMeta().index + direction,
1991
+ dragLineLevel: dragTarget.item.getItemMeta().level
1992
+ };
1993
+ };
1994
+ var getNextValidDragTarget = (tree, isUp, previousTarget = ((_a) => (_a = tree.getState().dnd) == null ? undefined : _a.dragTarget)()) => {
1995
+ var _a2;
1996
+ if (!previousTarget)
1997
+ return;
1998
+ const nextTarget = getNextDragTarget(tree, isUp, previousTarget);
1999
+ const dataTransfer = (_a2 = tree.getDataRef().current.kDndDataTransfer) != null ? _a2 : null;
2000
+ if (!nextTarget)
2001
+ return;
2002
+ if (!tree.getConfig().canReorder && isOrderedDragTarget(nextTarget)) {
2003
+ return getNextValidDragTarget(tree, isUp, nextTarget);
2004
+ }
2005
+ if (canDrop(dataTransfer, nextTarget, tree)) {
2006
+ return nextTarget;
2007
+ }
2008
+ return getNextValidDragTarget(tree, isUp, nextTarget);
2009
+ };
2010
+ var updateScroll = (tree) => {
2011
+ const state = tree.getState().dnd;
2012
+ if (!(state == null ? undefined : state.dragTarget) || isOrderedDragTarget(state.dragTarget))
2013
+ return;
2014
+ state.dragTarget.item.scrollTo({ block: "nearest", inline: "nearest" });
2015
+ };
2016
+ var initiateDrag = (tree, draggedItems, dataTransfer) => {
2017
+ var _a, _b;
2018
+ const focusedItem = tree.getFocusedItem();
2019
+ const { canDrag } = tree.getConfig();
2020
+ if (draggedItems && canDrag && !canDrag(draggedItems)) {
2021
+ return;
2022
+ }
2023
+ if (draggedItems) {
2024
+ tree.applySubStateUpdate("dnd", { draggedItems });
2025
+ (_b = (_a = tree.getConfig()).onStartKeyboardDrag) == null || _b.call(_a, draggedItems);
2026
+ } else if (dataTransfer) {
2027
+ tree.getDataRef().current.kDndDataTransfer = dataTransfer;
2028
+ }
2029
+ const dragTarget = getNextValidDragTarget(tree, false, {
2030
+ item: focusedItem
2031
+ });
2032
+ if (!dragTarget)
2033
+ return;
2034
+ tree.applySubStateUpdate("dnd", {
2035
+ draggedItems,
2036
+ dragTarget
2037
+ });
2038
+ tree.applySubStateUpdate("assistiveDndState", 1);
2039
+ updateScroll(tree);
2040
+ };
2041
+ var moveDragPosition = (tree, isUp) => {
2042
+ var _a;
2043
+ const dragTarget = getNextValidDragTarget(tree, isUp);
2044
+ if (!dragTarget)
2045
+ return;
2046
+ tree.applySubStateUpdate("dnd", {
2047
+ draggedItems: (_a = tree.getState().dnd) == null ? undefined : _a.draggedItems,
2048
+ dragTarget
2049
+ });
2050
+ tree.applySubStateUpdate("assistiveDndState", 2);
2051
+ if (!isOrderedDragTarget(dragTarget)) {
2052
+ dragTarget.item.setFocused();
2053
+ }
2054
+ updateScroll(tree);
2055
+ };
2056
+ var keyboardDragAndDropFeature = {
2057
+ key: "keyboard-drag-and-drop",
2058
+ deps: ["drag-and-drop"],
2059
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
2060
+ setAssistiveDndState: makeStateUpdater("assistiveDndState", tree)
2061
+ }, defaultConfig),
2062
+ stateHandlerNames: {
2063
+ assistiveDndState: "setAssistiveDndState"
2064
+ },
2065
+ treeInstance: {
2066
+ startKeyboardDrag: ({ tree }, draggedItems) => {
2067
+ initiateDrag(tree, draggedItems, undefined);
2068
+ },
2069
+ startKeyboardDragOnForeignObject: ({ tree }, dataTransfer) => {
2070
+ initiateDrag(tree, undefined, dataTransfer);
2071
+ },
2072
+ stopKeyboardDrag: ({ tree }) => {
2073
+ tree.getDataRef().current.kDndDataTransfer = undefined;
2074
+ tree.applySubStateUpdate("dnd", null);
2075
+ tree.applySubStateUpdate("assistiveDndState", 0);
2076
+ }
2077
+ },
2078
+ hotkeys: {
2079
+ startDrag: {
2080
+ hotkey: "Control+Shift+KeyD",
2081
+ preventDefault: true,
2082
+ isEnabled: (tree) => !tree.getState().dnd,
2083
+ handler: (_, tree) => {
2084
+ var _a, _b;
2085
+ const selectedItems = (_b = (_a = tree.getSelectedItems) == null ? undefined : _a.call(tree)) != null ? _b : [
2086
+ tree.getFocusedItem()
2087
+ ];
2088
+ const focusedItem = tree.getFocusedItem();
2089
+ tree.startKeyboardDrag(selectedItems.includes(focusedItem) ? selectedItems : selectedItems.concat(focusedItem));
2090
+ }
2091
+ },
2092
+ dragUp: {
2093
+ hotkey: "ArrowUp",
2094
+ preventDefault: true,
2095
+ isEnabled: (tree) => !!tree.getState().dnd,
2096
+ handler: (_, tree) => {
2097
+ moveDragPosition(tree, true);
2098
+ }
2099
+ },
2100
+ dragDown: {
2101
+ hotkey: "ArrowDown",
2102
+ preventDefault: true,
2103
+ isEnabled: (tree) => !!tree.getState().dnd,
2104
+ handler: (_, tree) => {
2105
+ moveDragPosition(tree, false);
2106
+ }
2107
+ },
2108
+ cancelDrag: {
2109
+ hotkey: "Escape",
2110
+ isEnabled: (tree) => !!tree.getState().dnd,
2111
+ handler: (_, tree) => {
2112
+ tree.stopKeyboardDrag();
2113
+ }
2114
+ },
2115
+ completeDrag: {
2116
+ hotkey: "Enter",
2117
+ preventDefault: true,
2118
+ isEnabled: (tree) => !!tree.getState().dnd,
2119
+ handler: (e, tree) => __async(null, null, function* () {
2120
+ var _a, _b, _c, _d;
2121
+ e.stopPropagation();
2122
+ const dataRef = tree.getDataRef();
2123
+ const target = tree.getDragTarget();
2124
+ const dataTransfer = (_a = dataRef.current.kDndDataTransfer) != null ? _a : null;
2125
+ if (!target || !canDrop(dataTransfer, target, tree)) {
2126
+ return;
2127
+ }
2128
+ const config = tree.getConfig();
2129
+ const draggedItems = (_b = tree.getState().dnd) == null ? undefined : _b.draggedItems;
2130
+ dataRef.current.lastDragCode = undefined;
2131
+ tree.applySubStateUpdate("dnd", null);
2132
+ if (draggedItems) {
2133
+ yield (_c = config.onDrop) == null ? undefined : _c.call(config, draggedItems, target);
2134
+ tree.getItemInstance(draggedItems[0].getId()).setFocused();
2135
+ } else if (dataTransfer) {
2136
+ yield (_d = config.onDropForeignDragObject) == null ? undefined : _d.call(config, dataTransfer, target);
2137
+ }
2138
+ tree.updateDomFocus();
2139
+ tree.applySubStateUpdate("assistiveDndState", 3);
2140
+ })
2141
+ }
2142
+ }
2143
+ };
2144
+ var searchFeature = {
2145
+ key: "search",
2146
+ getInitialState: (initialState) => __spreadValues2({
2147
+ search: null
2148
+ }, initialState),
2149
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
2150
+ setSearch: makeStateUpdater("search", tree),
2151
+ isSearchMatchingItem: (search, item) => search.length > 0 && item.getItemName().toLowerCase().includes(search.toLowerCase())
2152
+ }, defaultConfig),
2153
+ stateHandlerNames: {
2154
+ search: "setSearch"
2155
+ },
2156
+ treeInstance: {
2157
+ setSearch: ({ tree }, search) => {
2158
+ var _a;
2159
+ tree.applySubStateUpdate("search", search);
2160
+ (_a = tree.getItems().find((item) => {
2161
+ var _a2, _b;
2162
+ return (_b = (_a2 = tree.getConfig()).isSearchMatchingItem) == null ? undefined : _b.call(_a2, tree.getSearchValue(), item);
2163
+ })) == null || _a.setFocused();
2164
+ },
2165
+ openSearch: ({ tree }, initialValue = "") => {
2166
+ var _a, _b;
2167
+ tree.setSearch(initialValue);
2168
+ (_b = (_a = tree.getConfig()).onOpenSearch) == null || _b.call(_a);
2169
+ setTimeout(() => {
2170
+ var _a2;
2171
+ (_a2 = tree.getDataRef().current.searchInput) == null || _a2.focus();
2172
+ });
2173
+ },
2174
+ closeSearch: ({ tree }) => {
2175
+ var _a, _b;
2176
+ tree.setSearch(null);
2177
+ (_b = (_a = tree.getConfig()).onCloseSearch) == null || _b.call(_a);
2178
+ tree.updateDomFocus();
2179
+ },
2180
+ isSearchOpen: ({ tree }) => tree.getState().search !== null,
2181
+ getSearchValue: ({ tree }) => tree.getState().search || "",
2182
+ registerSearchInputElement: ({ tree }, element) => {
2183
+ const dataRef = tree.getDataRef();
2184
+ dataRef.current.searchInput = element;
2185
+ if (element && dataRef.current.keydownHandler) {
2186
+ element.addEventListener("keydown", dataRef.current.keydownHandler);
2187
+ }
2188
+ },
2189
+ getSearchInputElement: ({ tree }) => {
2190
+ var _a;
2191
+ return (_a = tree.getDataRef().current.searchInput) != null ? _a : null;
2192
+ },
2193
+ getSearchInputElementProps: ({ tree }) => ({
2194
+ value: tree.getSearchValue(),
2195
+ onChange: (e) => tree.setSearch(e.target.value),
2196
+ onBlur: () => tree.closeSearch(),
2197
+ ref: tree.registerSearchInputElement
2198
+ }),
2199
+ getSearchMatchingItems: memo(({ tree }) => [
2200
+ tree.getSearchValue(),
2201
+ tree.getItems(),
2202
+ tree.getConfig().isSearchMatchingItem
2203
+ ], (search, items, isSearchMatchingItem) => items.filter((item) => search && (isSearchMatchingItem == null ? undefined : isSearchMatchingItem(search, item))))
2204
+ },
2205
+ itemInstance: {
2206
+ isMatchingSearch: ({ tree, item }) => tree.getSearchMatchingItems().some((i) => i.getId() === item.getId())
2207
+ },
2208
+ hotkeys: {
2209
+ openSearch: {
2210
+ hotkey: "LetterOrNumber",
2211
+ preventDefault: true,
2212
+ isEnabled: (tree) => !tree.isSearchOpen(),
2213
+ handler: (e, tree) => {
2214
+ e.stopPropagation();
2215
+ tree.openSearch(e.key);
2216
+ }
2217
+ },
2218
+ closeSearch: {
2219
+ hotkey: "Escape",
2220
+ allowWhenInputFocused: true,
2221
+ isEnabled: (tree) => tree.isSearchOpen(),
2222
+ handler: (e, tree) => {
2223
+ tree.closeSearch();
2224
+ }
2225
+ },
2226
+ submitSearch: {
2227
+ hotkey: "Enter",
2228
+ allowWhenInputFocused: true,
2229
+ isEnabled: (tree) => tree.isSearchOpen(),
2230
+ handler: (e, tree) => {
2231
+ tree.closeSearch();
2232
+ tree.setSelectedItems([tree.getFocusedItem().getId()]);
2233
+ }
2234
+ },
2235
+ nextSearchItem: {
2236
+ hotkey: "ArrowDown",
2237
+ allowWhenInputFocused: true,
2238
+ canRepeat: true,
2239
+ isEnabled: (tree) => tree.isSearchOpen(),
2240
+ handler: (e, tree) => {
2241
+ const focusItem = tree.getSearchMatchingItems().find((item) => item.getItemMeta().index > tree.getFocusedItem().getItemMeta().index);
2242
+ focusItem == null || focusItem.setFocused();
2243
+ focusItem == null || focusItem.scrollTo({ block: "nearest", inline: "nearest" });
2244
+ }
2245
+ },
2246
+ previousSearchItem: {
2247
+ hotkey: "ArrowUp",
2248
+ allowWhenInputFocused: true,
2249
+ canRepeat: true,
2250
+ isEnabled: (tree) => tree.isSearchOpen(),
2251
+ handler: (e, tree) => {
2252
+ const focusItem = [...tree.getSearchMatchingItems()].reverse().find((item) => item.getItemMeta().index < tree.getFocusedItem().getItemMeta().index);
2253
+ focusItem == null || focusItem.setFocused();
2254
+ focusItem == null || focusItem.scrollTo({ block: "nearest", inline: "nearest" });
2255
+ }
2256
+ }
2257
+ }
2258
+ };
2259
+ var renamingFeature = {
2260
+ key: "renaming",
2261
+ overwrites: ["drag-and-drop"],
2262
+ getDefaultConfig: (defaultConfig, tree) => __spreadValues2({
2263
+ setRenamingItem: makeStateUpdater("renamingItem", tree),
2264
+ setRenamingValue: makeStateUpdater("renamingValue", tree),
2265
+ canRename: () => true
2266
+ }, defaultConfig),
2267
+ stateHandlerNames: {
2268
+ renamingItem: "setRenamingItem",
2269
+ renamingValue: "setRenamingValue"
2270
+ },
2271
+ treeInstance: {
2272
+ getRenamingItem: ({ tree }) => {
2273
+ const itemId = tree.getState().renamingItem;
2274
+ return itemId ? tree.getItemInstance(itemId) : null;
2275
+ },
2276
+ getRenamingValue: ({ tree }) => tree.getState().renamingValue || "",
2277
+ abortRenaming: ({ tree }) => {
2278
+ tree.applySubStateUpdate("renamingItem", null);
2279
+ tree.updateDomFocus();
2280
+ },
2281
+ completeRenaming: ({ tree }) => {
2282
+ var _a;
2283
+ const config = tree.getConfig();
2284
+ const item = tree.getRenamingItem();
2285
+ if (item) {
2286
+ (_a = config.onRename) == null || _a.call(config, item, tree.getState().renamingValue || "");
2287
+ }
2288
+ tree.applySubStateUpdate("renamingItem", null);
2289
+ tree.updateDomFocus();
2290
+ },
2291
+ isRenamingItem: ({ tree }) => !!tree.getState().renamingItem
2292
+ },
2293
+ itemInstance: {
2294
+ startRenaming: ({ tree, item, itemId }) => {
2295
+ if (!item.canRename()) {
2296
+ return;
2297
+ }
2298
+ tree.applySubStateUpdate("renamingItem", itemId);
2299
+ tree.applySubStateUpdate("renamingValue", item.getItemName());
2300
+ },
2301
+ getRenameInputProps: ({ tree }) => ({
2302
+ ref: (r) => r == null ? undefined : r.focus(),
2303
+ onBlur: () => tree.abortRenaming(),
2304
+ value: tree.getRenamingValue(),
2305
+ onChange: (e) => {
2306
+ var _a;
2307
+ tree.applySubStateUpdate("renamingValue", (_a = e.target) == null ? undefined : _a.value);
2308
+ }
2309
+ }),
2310
+ canRename: ({ tree, item }) => {
2311
+ var _a, _b, _c;
2312
+ return (_c = (_b = (_a = tree.getConfig()).canRename) == null ? undefined : _b.call(_a, item)) != null ? _c : true;
2313
+ },
2314
+ isRenaming: ({ tree, item }) => item.getId() === tree.getState().renamingItem,
2315
+ getProps: ({ prev, item }) => {
2316
+ var _a;
2317
+ const isRenaming = item.isRenaming();
2318
+ const prevProps = (_a = prev == null ? undefined : prev()) != null ? _a : {};
2319
+ return isRenaming ? __spreadProps2(__spreadValues2({}, prevProps), {
2320
+ draggable: false,
2321
+ onDragStart: () => {}
2322
+ }) : prevProps;
2323
+ }
2324
+ },
2325
+ hotkeys: {
2326
+ renameItem: {
2327
+ hotkey: "F2",
2328
+ handler: (e, tree) => {
2329
+ tree.getFocusedItem().startRenaming();
2330
+ }
2331
+ },
2332
+ abortRenaming: {
2333
+ hotkey: "Escape",
2334
+ allowWhenInputFocused: true,
2335
+ isEnabled: (tree) => tree.isRenamingItem(),
2336
+ handler: (e, tree) => {
2337
+ tree.abortRenaming();
2338
+ }
2339
+ },
2340
+ completeRenaming: {
2341
+ hotkey: "Enter",
2342
+ allowWhenInputFocused: true,
2343
+ isEnabled: (tree) => tree.isRenamingItem(),
2344
+ handler: (e, tree) => {
2345
+ tree.completeRenaming();
2346
+ }
2347
+ }
2348
+ }
2349
+ };
2350
+ var expandAllFeature = {
2351
+ key: "expand-all",
2352
+ treeInstance: {
2353
+ expandAll: (_0, _1) => __async(null, [_0, _1], function* ({ tree }, cancelToken) {
2354
+ yield Promise.all(tree.getItems().map((item) => item.expandAll(cancelToken)));
2355
+ }),
2356
+ collapseAll: ({ tree }) => {
2357
+ tree.applySubStateUpdate("expandedItems", []);
2358
+ tree.rebuildTree();
2359
+ }
2360
+ },
2361
+ itemInstance: {
2362
+ expandAll: (_0, _1) => __async(null, [_0, _1], function* ({ tree, item }, cancelToken) {
2363
+ if (cancelToken == null ? undefined : cancelToken.current) {
2364
+ return;
2365
+ }
2366
+ if (!item.isFolder()) {
2367
+ return;
2368
+ }
2369
+ item.expand();
2370
+ yield tree.waitForItemChildrenLoaded(item.getId());
2371
+ yield Promise.all(item.getChildren().map((child) => __async(null, null, function* () {
2372
+ yield tree.waitForItemChildrenLoaded(item.getId());
2373
+ yield child == null ? undefined : child.expandAll(cancelToken);
2374
+ })));
2375
+ }),
2376
+ collapseAll: ({ item }) => {
2377
+ if (!item.isExpanded())
2378
+ return;
2379
+ for (const child of item.getChildren()) {
2380
+ child == null || child.collapseAll();
2381
+ }
2382
+ item.collapse();
2383
+ }
2384
+ },
2385
+ hotkeys: {
2386
+ expandSelected: {
2387
+ hotkey: "Control+Shift+Plus",
2388
+ handler: (_, tree) => __async(null, null, function* () {
2389
+ const cancelToken = { current: false };
2390
+ const cancelHandler = (e) => {
2391
+ if (e.code === "Escape") {
2392
+ cancelToken.current = true;
2393
+ }
2394
+ };
2395
+ document.addEventListener("keydown", cancelHandler);
2396
+ yield Promise.all(tree.getSelectedItems().map((item) => item.expandAll(cancelToken)));
2397
+ document.removeEventListener("keydown", cancelHandler);
2398
+ })
2399
+ },
2400
+ collapseSelected: {
2401
+ hotkey: "Control+Shift+Minus",
2402
+ handler: (_, tree) => {
2403
+ tree.getSelectedItems().forEach((item) => item.collapseAll());
2404
+ }
2405
+ }
2406
+ }
2407
+ };
2408
+
2409
+ // node_modules/@headless-tree/react/dist/index.mjs
2410
+ import { useEffect, useState } from "react";
2411
+ var styles = {
2412
+ position: "absolute",
2413
+ margin: "-1px",
2414
+ width: "1px",
2415
+ height: "1px",
2416
+ overflow: "hidden",
2417
+ clip: "rect(0 0 0 0)"
2418
+ };
2419
+ var getDefaultLabel = (dnd, assistiveState, hotkeys) => {
2420
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
2421
+ if (!hotkeys.startDrag)
2422
+ return "";
2423
+ const itemNames = (_b = (_a = dnd == null ? undefined : dnd.draggedItems) == null ? undefined : _a.map((item) => item.getItemName()).join(", ")) != null ? _b : "";
2424
+ const position = !(dnd == null ? undefined : dnd.dragTarget) ? "None" : ("childIndex" in dnd.dragTarget) ? `${dnd.dragTarget.childIndex} of ${dnd.dragTarget.item.getChildren().length} in ${dnd.dragTarget.item.getItemName()}` : `in ${dnd.dragTarget.item.getItemName()}`;
2425
+ const navGuide = `Press ${(_c = hotkeys.dragUp) == null ? undefined : _c.hotkey} and ${(_d = hotkeys.dragDown) == null ? undefined : _d.hotkey} to move up or down, ${(_e = hotkeys.completeDrag) == null ? undefined : _e.hotkey} to drop, ${(_f = hotkeys.cancelDrag) == null ? undefined : _f.hotkey} to abort.`;
2426
+ switch (assistiveState) {
2427
+ case AssistiveDndState.Started:
2428
+ return itemNames ? `Dragging ${itemNames}. Current position: ${position}. ${navGuide}` : `Current position: ${position}. ${navGuide}`;
2429
+ case AssistiveDndState.Dragging:
2430
+ return itemNames ? `${itemNames}, ${position}` : position;
2431
+ case AssistiveDndState.Completed:
2432
+ return `Drag completed. Press ${(_g = hotkeys.startDrag) == null ? undefined : _g.hotkey} to move selected items`;
2433
+ case AssistiveDndState.Aborted:
2434
+ return `Drag cancelled. Press ${(_h = hotkeys.startDrag) == null ? undefined : _h.hotkey} to move selected items`;
2435
+ case AssistiveDndState.None:
2436
+ default:
2437
+ return `Press ${(_i = hotkeys.startDrag) == null ? undefined : _i.hotkey} to move selected items`;
2438
+ }
2439
+ };
2440
+ var AssistiveTreeDescription = (_a) => {
2441
+ var _b = _a, {
2442
+ tree,
2443
+ getLabel = getDefaultLabel
2444
+ } = _b, props = __objRest(_b, [
2445
+ "tree",
2446
+ "getLabel"
2447
+ ]);
2448
+ var _a2;
2449
+ const state = tree.getState();
2450
+ return /* @__PURE__ */ React.createElement("span", __spreadProps(__spreadValues({
2451
+ "aria-live": "assertive"
2452
+ }, props), {
2453
+ style: __spreadValues(__spreadValues({}, styles), props.style)
2454
+ }), getLabel(state.dnd, (_a2 = state.assistiveDndState) != null ? _a2 : AssistiveDndState.None, tree.getHotkeyPresets()));
2455
+ };
2456
+ var useTree = (config) => {
2457
+ const [tree] = useState(() => ({ current: createTree(config) }));
2458
+ const [state, setState] = useState(() => tree.current.getState());
2459
+ useEffect(() => {
2460
+ tree.current.setMounted(true);
2461
+ tree.current.rebuildTree();
2462
+ return () => {
2463
+ tree.current.setMounted(false);
2464
+ };
2465
+ }, [tree]);
2466
+ tree.current.setConfig((prev) => __spreadProps(__spreadValues(__spreadValues({}, prev), config), {
2467
+ state: __spreadValues(__spreadValues({}, state), config.state),
2468
+ setState: (state2) => {
2469
+ var _a;
2470
+ setState(state2);
2471
+ (_a = config.setState) == null || _a.call(config, state2);
2472
+ }
2473
+ }));
2474
+ return tree.current;
2475
+ };
273
2476
  export {
274
2477
  AssistiveTreeDescription,
275
2478
  Tree,