@limble/limble-tree 2.0.0 → 4.0.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.
Files changed (92) hide show
  1. package/README.md +2 -0
  2. package/esm2022/lib/components/branch/branch.component.mjs +79 -0
  3. package/esm2022/lib/components/dragover-no-change-detect.mjs +39 -0
  4. package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/root/root.component.mjs +5 -5
  6. package/esm2022/lib/core/tree-branch/branch-controller.mjs +99 -0
  7. package/esm2022/lib/core/tree-branch/tree-branch.mjs +429 -0
  8. package/esm2022/lib/core/tree-node-base.mjs +77 -0
  9. package/esm2022/lib/core/tree-root/tree-root.mjs +193 -0
  10. package/{esm2020 → esm2022}/lib/core/tree-service/tree.service.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.module.mjs +5 -5
  12. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.service.mjs +4 -4
  13. package/esm2022/lib/extras/drag-and-drop/drag-and-drop.mjs +83 -0
  14. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.module.mjs +5 -5
  15. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.service.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/draggable.directive.mjs +5 -5
  17. package/esm2022/lib/extras/drag-and-drop/dropzone-renderer.mjs +176 -0
  18. package/esm2022/lib/legacy/legacy-tree.mjs +73 -0
  19. package/esm2022/lib/legacy/limble-tree-legacy.module.mjs +20 -0
  20. package/esm2022/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +78 -0
  21. package/{esm2020 → esm2022}/lib/limble-tree.module.mjs +5 -5
  22. package/esm2022/shared/assert.mjs +7 -0
  23. package/{fesm2020 → fesm2022}/limble-limble-tree.mjs +72 -75
  24. package/fesm2022/limble-limble-tree.mjs.map +1 -0
  25. package/lib/components/branch/branch.component.d.ts +1 -1
  26. package/lib/components/dropzone/dropzone.component.d.ts +1 -1
  27. package/lib/core/tree-node-base.d.ts +2 -1
  28. package/lib/extras/drag-and-drop/draggable.directive.d.ts +1 -1
  29. package/lib/legacy/limble-tree-root/limble-tree-root.component.d.ts +2 -2
  30. package/package.json +7 -13
  31. package/esm2020/lib/components/branch/branch.component.mjs +0 -79
  32. package/esm2020/lib/components/dragover-no-change-detect.mjs +0 -39
  33. package/esm2020/lib/core/tree-branch/branch-controller.mjs +0 -99
  34. package/esm2020/lib/core/tree-branch/tree-branch.mjs +0 -429
  35. package/esm2020/lib/core/tree-node-base.mjs +0 -80
  36. package/esm2020/lib/core/tree-root/tree-root.mjs +0 -193
  37. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +0 -83
  38. package/esm2020/lib/extras/drag-and-drop/dropzone-renderer.mjs +0 -176
  39. package/esm2020/lib/legacy/legacy-tree.mjs +0 -73
  40. package/esm2020/lib/legacy/limble-tree-legacy.module.mjs +0 -20
  41. package/esm2020/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +0 -78
  42. package/esm2020/shared/assert.mjs +0 -7
  43. package/fesm2015/limble-limble-tree.mjs +0 -1812
  44. package/fesm2015/limble-limble-tree.mjs.map +0 -1
  45. package/fesm2020/limble-limble-tree.mjs.map +0 -1
  46. /package/{esm2020 → esm2022}/lib/components/branch/index.mjs +0 -0
  47. /package/{esm2020 → esm2022}/lib/components/dropzone/index.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/components/host-component.interface.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/components/node-component.interface.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/components/root/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/core/branch-options.interface.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/core/branchable.interface.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/core/component-container.interface.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/core/configuration/configuration.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/core/configuration/index.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/core/configuration/tree-options.interface.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/core/index.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/core/tree-branch/graftable.interface.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/core/tree-branch/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/core/tree-node.interface.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/core/tree-plot.interface.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/core/tree-root/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/core/tree-root/root-controller.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/core/tree-service/index.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/errors/index.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/errors/tree-error.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/events/drag/drag-end-event.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/events/drag/drag-start-event.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/events/drag/drop-event.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/events/drag/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/events/general/destruction-event.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/events/general/index.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/events/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/events/relational/graft-event.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/events/relational/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/events/relational/prune-event.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/events/relational/relational-tree-event.interface.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/events/relational/tree-relationship.interface.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/events/tree-event.interface.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/extras/collapse/collapse.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/extras/collapse/index.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-state.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/index.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/legacy/index.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/legacy/legacy-component-obj.interface.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-data.interface.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-options.interface.mjs +0 -0
  89. /package/{esm2020 → esm2022}/limble-limble-tree.mjs +0 -0
  90. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  91. /package/{esm2020 → esm2022}/shared/has-property.mjs +0 -0
  92. /package/{esm2020 → esm2022}/shared/index.mjs +0 -0
@@ -0,0 +1,176 @@
1
+ import { assert } from "../../../shared";
2
+ import { BranchComponent } from "../../components";
3
+ import { dragState, DragStates } from "./drag-state";
4
+ import { dragAndDrop } from "./drag-and-drop";
5
+ import { TreeBranch, TreeRoot, config } from "../../core";
6
+ import { filter, first } from "rxjs";
7
+ import { PruneEvent } from "../../events";
8
+ class DropzoneRenderer {
9
+ constructor() {
10
+ this.registry = new Map();
11
+ this.currentDisplay = null;
12
+ dragAndDrop.dragAborted$.subscribe(() => {
13
+ this.clearCurrentDisplay();
14
+ });
15
+ dragState
16
+ .events()
17
+ .pipe(filter((event) => event === DragStates.Starting))
18
+ .subscribe(() => {
19
+ const branch = dragState.getDragData();
20
+ assert(branch !== undefined);
21
+ let cursor = branch.parent()?.getBranch((branch.index() ?? 0) - 1);
22
+ let final = branch.parent();
23
+ while (cursor !== undefined) {
24
+ final = cursor;
25
+ cursor = cursor.branches().at(-1);
26
+ }
27
+ branch
28
+ .events()
29
+ .pipe(filter((event) => event instanceof PruneEvent), first())
30
+ .subscribe(() => {
31
+ assert(final !== undefined);
32
+ this.showLowerZones(final);
33
+ });
34
+ });
35
+ }
36
+ clearCurrentDisplay() {
37
+ if (this.currentDisplay === null)
38
+ return;
39
+ for (const branch of this.registry.values()) {
40
+ const instance = branch.getComponentInstance();
41
+ instance.showInnerDropzone = false;
42
+ if (instance instanceof BranchComponent) {
43
+ instance.showLateralDropzone = false;
44
+ }
45
+ }
46
+ this.currentDisplay = null;
47
+ }
48
+ clearTreeFromRegistry(tree) {
49
+ const nodes = [];
50
+ tree.traverse((node) => nodes.push(node));
51
+ for (const [dropzoneComponent, treeNode] of this.registry) {
52
+ if (nodes.includes(treeNode)) {
53
+ this.registry.delete(dropzoneComponent);
54
+ }
55
+ }
56
+ }
57
+ getCurrentDisplay() {
58
+ if (this.currentDisplay === null)
59
+ return null;
60
+ return { ...this.currentDisplay };
61
+ }
62
+ getDropzoneLocation(dropzone) {
63
+ const branch = this.registry.get(dropzone);
64
+ const placement = dropzone.placement;
65
+ if (branch === undefined) {
66
+ throw new Error("dropzone not found in registry");
67
+ }
68
+ if (placement === undefined) {
69
+ throw new Error("dropzone has an undefined placement");
70
+ }
71
+ return [branch, placement];
72
+ }
73
+ handleDrop(treeNode, placement) {
74
+ if (placement === "inner") {
75
+ dragAndDrop.drop(treeNode, 0);
76
+ }
77
+ else if (treeNode instanceof TreeBranch && placement === "lateral") {
78
+ const currentParent = treeNode.parent();
79
+ const index = treeNode.index();
80
+ if (currentParent === undefined || index === undefined) {
81
+ throw new Error("branch must have a parent");
82
+ }
83
+ dragAndDrop.drop(currentParent, index + 1);
84
+ }
85
+ this.clearCurrentDisplay();
86
+ }
87
+ registerDropzone(dropzone, treeNode) {
88
+ this.registry.set(dropzone, treeNode);
89
+ }
90
+ registerDropzones(dropzones, treeBranch) {
91
+ for (const dropzone of dropzones) {
92
+ this.registry.set(dropzone, treeBranch);
93
+ }
94
+ }
95
+ showLowerZones(treeNode) {
96
+ this.clearCurrentDisplay();
97
+ this.showInnerZone(treeNode);
98
+ if (treeNode.branches().length === 0) {
99
+ this.loopThroughLowerZones(treeNode);
100
+ }
101
+ this.currentDisplay = { treeBranch: treeNode, direction: "lower" };
102
+ }
103
+ showUpperZones(treeBranch) {
104
+ this.clearCurrentDisplay();
105
+ this.loopThroughUpperZones(treeBranch);
106
+ this.currentDisplay = { treeBranch, direction: "upper" };
107
+ }
108
+ loopThroughLowerZones(treeNode) {
109
+ let cursor = treeNode;
110
+ while (cursor instanceof TreeBranch) {
111
+ this.showLateralZone(cursor);
112
+ const parent = cursor.parent();
113
+ const index = cursor.index();
114
+ assert(parent !== undefined && index !== undefined);
115
+ if (parent.branches().length > index + 1) {
116
+ return;
117
+ }
118
+ cursor = cursor.parent();
119
+ }
120
+ }
121
+ loopThroughUpperZones(treeBranch) {
122
+ let cursor = treeBranch
123
+ .parent()
124
+ ?.getBranch((treeBranch.index() ?? 0) - 1);
125
+ let final = treeBranch.parent();
126
+ while (cursor !== undefined) {
127
+ this.showLateralZone(cursor);
128
+ final = cursor;
129
+ cursor = cursor.branches().at(-1);
130
+ }
131
+ if (final !== undefined &&
132
+ (final instanceof TreeRoot || final instanceof TreeBranch)) {
133
+ this.showInnerZone(final);
134
+ }
135
+ }
136
+ nestingAllowed(treeNode) {
137
+ if (treeNode instanceof TreeRoot) {
138
+ return true;
139
+ }
140
+ if (treeNode instanceof TreeBranch) {
141
+ const allowNesting = config.getConfig(treeNode.root())?.dragAndDrop?.allowNesting ??
142
+ (() => true);
143
+ return allowNesting(treeNode);
144
+ }
145
+ throw new Error("unsupported treeNode type");
146
+ }
147
+ dropAllowed(parent, index) {
148
+ const sourceNode = dragState.getDragData();
149
+ assert(sourceNode instanceof TreeBranch);
150
+ if (parent instanceof TreeRoot) {
151
+ const allowDrop = config.getConfig(parent)?.dragAndDrop?.allowDrop ??
152
+ (() => true);
153
+ return allowDrop(sourceNode, parent, index);
154
+ }
155
+ if (parent instanceof TreeBranch) {
156
+ const allowDrop = config.getConfig(parent.root())?.dragAndDrop?.allowDrop ??
157
+ (() => true);
158
+ return allowDrop(sourceNode, parent, index);
159
+ }
160
+ throw new Error("unsupported treeNode type");
161
+ }
162
+ showInnerZone(treeNode) {
163
+ if (!this.nestingAllowed(treeNode) || !this.dropAllowed(treeNode, 0))
164
+ return;
165
+ treeNode.getComponentInstance().showInnerDropzone = true;
166
+ }
167
+ showLateralZone(treeBranch) {
168
+ const index = treeBranch.index();
169
+ assert(index !== undefined);
170
+ if (!this.dropAllowed(treeBranch.parent(), index + 1))
171
+ return;
172
+ treeBranch.getComponentInstance().showLateralDropzone = true;
173
+ }
174
+ }
175
+ export const dropzoneRenderer = new DropzoneRenderer();
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V4dHJhcy9kcmFnLWFuZC1kcm9wL2Ryb3B6b25lLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFpQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsTUFBTSxnQkFBZ0I7SUFPbkI7UUFDRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUzthQUNMLE1BQU0sRUFBRTthQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUs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LG9CQUFvQixFQUFFLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ2hFLENBQUM7Q0FDSDtBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydCB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWRcIjtcbmltcG9ydCB7IEJyYW5jaENvbXBvbmVudCwgdHlwZSBEcm9wem9uZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBkcmFnU3RhdGUsIERyYWdTdGF0ZXMgfSBmcm9tIFwiLi9kcmFnLXN0YXRlXCI7XG5pbXBvcnQgeyBkcmFnQW5kRHJvcCB9IGZyb20gXCIuL2RyYWctYW5kLWRyb3BcIjtcbmltcG9ydCB7IFRyZWVCcmFuY2gsIHR5cGUgVHJlZU5vZGUsIFRyZWVSb290LCBjb25maWcgfSBmcm9tIFwiLi4vLi4vY29yZVwiO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBQcnVuZUV2ZW50IH0gZnJvbSBcIi4uLy4uL2V2ZW50c1wiO1xuXG5jbGFzcyBEcm9wem9uZVJlbmRlcmVyIHtcbiAgIHByaXZhdGUgY3VycmVudERpc3BsYXk6IHtcbiAgICAgIHRyZWVCcmFuY2g6IFRyZWVOb2RlPGFueT47XG4gICAgICBkaXJlY3Rpb246IFwidXBwZXJcIiB8IFwibG93ZXJcIjtcbiAgIH0gfCBudWxsO1xuICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyeTogTWFwPERyb3B6b25lQ29tcG9uZW50LCBUcmVlTm9kZTxhbnk+PjtcblxuICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuY3VycmVudERpc3BsYXkgPSBudWxsO1xuICAgICAgZHJhZ0FuZERyb3AuZHJhZ0Fib3J0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICB0aGlzLmNsZWFyQ3VycmVudERpc3BsYXkoKTtcbiAgICAgIH0pO1xuICAgICAgZHJhZ1N0YXRlXG4gICAgICAgICAuZXZlbnRzKClcbiAgICAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50ID09PSBEcmFnU3RhdGVzLlN0YXJ0aW5nKSlcbiAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gZHJhZ1N0YXRlLmdldERyYWdEYXRhKCk7XG4gICAgICAgICAgICBhc3NlcnQoYnJhbmNoICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgbGV0IGN1cnNvciA9IGJyYW5jaC5wYXJlbnQoKT8uZ2V0QnJhbmNoKChicmFuY2guaW5kZXgoKSA/PyAwKSAtIDEpO1xuICAgICAgICAgICAgbGV0IGZpbmFsID0gYnJhbmNoLnBhcmVudCgpO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICBmaW5hbCA9IGN1cnNvcjtcbiAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnNvci5icmFuY2hlcygpLmF0KC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyYW5jaFxuICAgICAgICAgICAgICAgLmV2ZW50cygpXG4gICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgUHJ1bmVFdmVudCksXG4gICAgICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGFzc2VydChmaW5hbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvd2VyWm9uZXMoZmluYWwpO1xuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICB9KTtcbiAgIH1cblxuICAgcHVibGljIGNsZWFyQ3VycmVudERpc3BsYXkoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50RGlzcGxheSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgdGhpcy5yZWdpc3RyeS52YWx1ZXMoKSkge1xuICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBicmFuY2guZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcbiAgICAgICAgIGluc3RhbmNlLnNob3dJbm5lckRyb3B6b25lID0gZmFsc2U7XG4gICAgICAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBCcmFuY2hDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnNob3dMYXRlcmFsRHJvcHpvbmUgPSBmYWxzZTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudERpc3BsYXkgPSBudWxsO1xuICAgfVxuXG4gICBwdWJsaWMgY2xlYXJUcmVlRnJvbVJlZ2lzdHJ5KHRyZWU6IFRyZWVOb2RlPGFueT4pOiB2b2lkIHtcbiAgICAgIGNvbnN0IG5vZGVzOiBBcnJheTxUcmVlTm9kZTxhbnk+PiA9IFtdO1xuICAgICAgdHJlZS50cmF2ZXJzZSgobm9kZSkgPT4gbm9kZXMucHVzaChub2RlKSk7XG4gICAgICBmb3IgKGNvbnN0IFtkcm9wem9uZUNvbXBvbmVudCwgdHJlZU5vZGVdIG9mIHRoaXMucmVnaXN0cnkpIHtcbiAgICAgICAgIGlmIChub2Rlcy5pbmNsdWRlcyh0cmVlTm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0cnkuZGVsZXRlKGRyb3B6b25lQ29tcG9uZW50KTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldEN1cnJlbnREaXNwbGF5KCk6IHtcbiAgICAgIHRyZWVCcmFuY2g6IFRyZWVOb2RlPGFueT47XG4gICAgICBkaXJlY3Rpb246IFwidXBwZXJcIiB8IFwibG93ZXJcIjtcbiAgIH0gfCBudWxsIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnREaXNwbGF5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB7IC4uLnRoaXMuY3VycmVudERpc3BsYXkgfTtcbiAgIH1cblxuICAgcHVibGljIGdldERyb3B6b25lTG9jYXRpb248VD4oXG4gICAgICBkcm9wem9uZTogRHJvcHpvbmVDb21wb25lbnRcbiAgICk6IFtUcmVlTm9kZTxUPiwgXCJpbm5lclwiIHwgXCJsYXRlcmFsXCJdIHtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IHRoaXMucmVnaXN0cnkuZ2V0KGRyb3B6b25lKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudCA9IGRyb3B6b25lLnBsYWNlbWVudDtcbiAgICAgIGlmIChicmFuY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcHpvbmUgbm90IGZvdW5kIGluIHJlZ2lzdHJ5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wem9uZSBoYXMgYW4gdW5kZWZpbmVkIHBsYWNlbWVudFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbYnJhbmNoLCBwbGFjZW1lbnRdO1xuICAgfVxuXG4gICBwdWJsaWMgaGFuZGxlRHJvcDxUPihcbiAgICAgIHRyZWVOb2RlOiBUcmVlTm9kZTxUPixcbiAgICAgIHBsYWNlbWVudDogXCJpbm5lclwiIHwgXCJsYXRlcmFsXCJcbiAgICk6IHZvaWQge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gXCJpbm5lclwiKSB7XG4gICAgICAgICBkcmFnQW5kRHJvcC5kcm9wKHRyZWVOb2RlLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAodHJlZU5vZGUgaW5zdGFuY2VvZiBUcmVlQnJhbmNoICYmIHBsYWNlbWVudCA9PT0gXCJsYXRlcmFsXCIpIHtcbiAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXJlbnQgPSB0cmVlTm9kZS5wYXJlbnQoKTtcbiAgICAgICAgIGNvbnN0IGluZGV4ID0gdHJlZU5vZGUuaW5kZXgoKTtcbiAgICAgICAgIGlmIChjdXJyZW50UGFyZW50ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYnJhbmNoIG11c3QgaGF2ZSBhIHBhcmVudFwiKTtcbiAgICAgICAgIH1cbiAgICAgICAgIGRyYWdBbmREcm9wLmRyb3AoY3VycmVudFBhcmVudCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xlYXJDdXJyZW50RGlzcGxheSgpO1xuICAgfVxuXG4gICBwdWJsaWMgcmVnaXN0ZXJEcm9wem9uZTxUPihcbiAgICAgIGRyb3B6b25lOiBEcm9wem9uZUNvbXBvbmVudCxcbiAgICAgIHRyZWVOb2RlOiBUcmVlTm9kZTxUPlxuICAgKTogdm9pZCB7XG4gICAgICB0aGlzLnJlZ2lzdHJ5LnNldChkcm9wem9uZSwgdHJlZU5vZGUpO1xuICAgfVxuXG4gICBwdWJsaWMgcmVnaXN0ZXJEcm9wem9uZXM8VD4oXG4gICAgICBkcm9wem9uZXM6IEl0ZXJhYmxlPERyb3B6b25lQ29tcG9uZW50PixcbiAgICAgIHRyZWVCcmFuY2g6IFRyZWVCcmFuY2g8VD5cbiAgICk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBkcm9wem9uZSBvZiBkcm9wem9uZXMpIHtcbiAgICAgICAgIHRoaXMucmVnaXN0cnkuc2V0KGRyb3B6b25lLCB0cmVlQnJhbmNoKTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHVibGljIHNob3dMb3dlclpvbmVzPFQ+KHRyZWVOb2RlOiBUcmVlTm9kZTxUPik6IHZvaWQge1xuICAgICAgdGhpcy5jbGVhckN1cnJlbnREaXNwbGF5KCk7XG4gICAgICB0aGlzLnNob3dJbm5lclpvbmUodHJlZU5vZGUpO1xuICAgICAgaWYgKHRyZWVOb2RlLmJyYW5jaGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICB0aGlzLmxvb3BUaHJvdWdoTG93ZXJab25lcyh0cmVlTm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ID0geyB0cmVlQnJhbmNoOiB0cmVlTm9kZSwgZGlyZWN0aW9uOiBcImxvd2VyXCIgfTtcbiAgIH1cblxuICAgcHVibGljIHNob3dVcHBlclpvbmVzPFQ+KHRyZWVCcmFuY2g6IFRyZWVCcmFuY2g8VD4pOiB2b2lkIHtcbiAgICAgIHRoaXMuY2xlYXJDdXJyZW50RGlzcGxheSgpO1xuICAgICAgdGhpcy5sb29wVGhyb3VnaFVwcGVyWm9uZXModHJlZUJyYW5jaCk7XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ID0geyB0cmVlQnJhbmNoLCBkaXJlY3Rpb246IFwidXBwZXJcIiB9O1xuICAgfVxuXG4gICBwcml2YXRlIGxvb3BUaHJvdWdoTG93ZXJab25lczxUPih0cmVlTm9kZTogVHJlZU5vZGU8VD4pOiB2b2lkIHtcbiAgICAgIGxldCBjdXJzb3I6IFRyZWVOb2RlPFQ+IHwgdW5kZWZpbmVkID0gdHJlZU5vZGU7XG4gICAgICB3aGlsZSAoY3Vyc29yIGluc3RhbmNlb2YgVHJlZUJyYW5jaCkge1xuICAgICAgICAgdGhpcy5zaG93TGF0ZXJhbFpvbmUoY3Vyc29yKTtcbiAgICAgICAgIGNvbnN0IHBhcmVudCA9IGN1cnNvci5wYXJlbnQoKTtcbiAgICAgICAgIGNvbnN0IGluZGV4ID0gY3Vyc29yLmluZGV4KCk7XG4gICAgICAgICBhc3NlcnQocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICBpZiAocGFyZW50LmJyYW5jaGVzKCkubGVuZ3RoID4gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGFyZW50KCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgbG9vcFRocm91Z2hVcHBlclpvbmVzPFQ+KHRyZWVCcmFuY2g6IFRyZWVCcmFuY2g8VD4pOiB2b2lkIHtcbiAgICAgIGxldCBjdXJzb3IgPSB0cmVlQnJhbmNoXG4gICAgICAgICAucGFyZW50KClcbiAgICAgICAgID8uZ2V0QnJhbmNoKCh0cmVlQnJhbmNoLmluZGV4KCkgPz8gMCkgLSAxKTtcbiAgICAgIGxldCBmaW5hbCA9IHRyZWVCcmFuY2gucGFyZW50KCk7XG4gICAgICB3aGlsZSAoY3Vyc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRoaXMuc2hvd0xhdGVyYWxab25lKGN1cnNvcik7XG4gICAgICAgICBmaW5hbCA9IGN1cnNvcjtcbiAgICAgICAgIGN1cnNvciA9IGN1cnNvci5icmFuY2hlcygpLmF0KC0xKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIGZpbmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIChmaW5hbCBpbnN0YW5jZW9mIFRyZWVSb290IHx8IGZpbmFsIGluc3RhbmNlb2YgVHJlZUJyYW5jaClcbiAgICAgICkge1xuICAgICAgICAgdGhpcy5zaG93SW5uZXJab25lKGZpbmFsKTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBuZXN0aW5nQWxsb3dlZDxUPih0cmVlTm9kZTogVHJlZU5vZGU8VD4pOiBib29sZWFuIHtcbiAgICAgIGlmICh0cmVlTm9kZSBpbnN0YW5jZW9mIFRyZWVSb290KSB7XG4gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmVlTm9kZSBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIGNvbnN0IGFsbG93TmVzdGluZyA9XG4gICAgICAgICAgICBjb25maWcuZ2V0Q29uZmlnKHRyZWVOb2RlLnJvb3QoKSk/LmRyYWdBbmREcm9wPy5hbGxvd05lc3RpbmcgPz9cbiAgICAgICAgICAgICgoKTogdHJ1ZSA9PiB0cnVlKTtcbiAgICAgICAgIHJldHVybiBhbGxvd05lc3RpbmcodHJlZU5vZGUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHJlZU5vZGUgdHlwZVwiKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBkcm9wQWxsb3dlZChwYXJlbnQ6IHVua25vd24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBkcmFnU3RhdGUuZ2V0RHJhZ0RhdGEoKTtcbiAgICAgIGFzc2VydChzb3VyY2VOb2RlIGluc3RhbmNlb2YgVHJlZUJyYW5jaCk7XG4gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVHJlZVJvb3QpIHtcbiAgICAgICAgIGNvbnN0IGFsbG93RHJvcCA9XG4gICAgICAgICAgICBjb25maWcuZ2V0Q29uZmlnKHBhcmVudCk/LmRyYWdBbmREcm9wPy5hbGxvd0Ryb3AgPz9cbiAgICAgICAgICAgICgoKTogdHJ1ZSA9PiB0cnVlKTtcbiAgICAgICAgIHJldHVybiBhbGxvd0Ryb3Aoc291cmNlTm9kZSwgcGFyZW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVHJlZUJyYW5jaCkge1xuICAgICAgICAgY29uc3QgYWxsb3dEcm9wID1cbiAgICAgICAgICAgIGNvbmZpZy5nZXRDb25maWcocGFyZW50LnJvb3QoKSk/LmRyYWdBbmREcm9wPy5hbGxvd0Ryb3AgPz9cbiAgICAgICAgICAgICgoKTogdHJ1ZSA9PiB0cnVlKTtcbiAgICAgICAgIHJldHVybiBhbGxvd0Ryb3Aoc291cmNlTm9kZSwgcGFyZW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB0cmVlTm9kZSB0eXBlXCIpO1xuICAgfVxuXG4gICBwcml2YXRlIHNob3dJbm5lclpvbmU8VD4odHJlZU5vZGU6IFRyZWVOb2RlPFQ+KTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMubmVzdGluZ0FsbG93ZWQodHJlZU5vZGUpIHx8ICF0aGlzLmRyb3BBbGxvd2VkKHRyZWVOb2RlLCAwKSlcbiAgICAgICAgIHJldHVybjtcbiAgICAgIHRyZWVOb2RlLmdldENvbXBvbmVudEluc3RhbmNlKCkuc2hvd0lubmVyRHJvcHpvbmUgPSB0cnVlO1xuICAgfVxuXG4gICBwcml2YXRlIHNob3dMYXRlcmFsWm9uZTxUPih0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+KTogdm9pZCB7XG4gICAgICBjb25zdCBpbmRleCA9IHRyZWVCcmFuY2guaW5kZXgoKTtcbiAgICAgIGFzc2VydChpbmRleCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGlmICghdGhpcy5kcm9wQWxsb3dlZCh0cmVlQnJhbmNoLnBhcmVudCgpLCBpbmRleCArIDEpKSByZXR1cm47XG4gICAgICB0cmVlQnJhbmNoLmdldENvbXBvbmVudEluc3RhbmNlKCkuc2hvd0xhdGVyYWxEcm9wem9uZSA9IHRydWU7XG4gICB9XG59XG5cbmV4cG9ydCBjb25zdCBkcm9wem9uZVJlbmRlcmVyID0gbmV3IERyb3B6b25lUmVuZGVyZXIoKTtcbiJdfQ==
@@ -0,0 +1,73 @@
1
+ import { TreeRoot, config } from "../core";
2
+ import { TreeError } from "../errors";
3
+ import { treeCollapser } from "../extras/collapse";
4
+ /**
5
+ * A shim to help with the transition from v0 to v1.
6
+ * @deprecated
7
+ */
8
+ export class LegacyTree {
9
+ /** Creates a v1 tree structure from a v0 data array and v0 tree options. */
10
+ createTreeFromLegacyArray(container, data, treeOptions = {}) {
11
+ const root = new TreeRoot(container);
12
+ config.setConfig(root, this.upgradeOptions(treeOptions));
13
+ for (const node of data) {
14
+ this.renderTreeNode(root, node, treeOptions);
15
+ }
16
+ return root;
17
+ }
18
+ upgradeOptions(legacyOptions) {
19
+ return {
20
+ indentation: legacyOptions.indent,
21
+ dragAndDrop: {
22
+ allowNesting: (branch) => {
23
+ if (legacyOptions.listMode === true) {
24
+ return false;
25
+ }
26
+ if (legacyOptions.allowNesting === undefined) {
27
+ return true;
28
+ }
29
+ if (typeof legacyOptions.allowNesting === "boolean") {
30
+ return legacyOptions.allowNesting;
31
+ }
32
+ return legacyOptions.allowNesting(branch);
33
+ },
34
+ allowDragging: (branch) => {
35
+ if (legacyOptions.allowDragging === undefined) {
36
+ return true;
37
+ }
38
+ if (typeof legacyOptions.allowDragging === "boolean") {
39
+ return legacyOptions.allowDragging;
40
+ }
41
+ return legacyOptions.allowDragging(branch);
42
+ },
43
+ allowDrop: (source, parent, index) => {
44
+ if (legacyOptions.allowDrop === undefined) {
45
+ return true;
46
+ }
47
+ return legacyOptions.allowDrop(source, parent, index);
48
+ }
49
+ }
50
+ };
51
+ }
52
+ renderTreeNode(parent, node, options) {
53
+ const component = node.component?.class ?? options.defaultComponent?.class;
54
+ if (component === undefined) {
55
+ throw new TreeError("A component must be provided");
56
+ }
57
+ const bindings = (node.component?.bindings ??
58
+ options.defaultComponent?.bindings ??
59
+ {});
60
+ const nodeData = node;
61
+ const branch = parent.grow(component, {
62
+ inputBindings: bindings,
63
+ meta: { nodeData }
64
+ });
65
+ for (const childNode of node.nodes ?? []) {
66
+ this.renderTreeNode(branch, childNode, options);
67
+ }
68
+ if (node.collapsed === true) {
69
+ treeCollapser.collapse(branch);
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xlZ2FjeS9sZWdhY3ktdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFxQyxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFNOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDcEIsNEVBQTRFO0lBQ3JFLHlCQUF5QixDQUM3QixTQUEyQixFQUMzQixJQUFvQixFQUNwQixjQUF1QyxFQUFFO1FBRXpDLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFZLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN6RCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZixDQUFDO0lBRU0sY0FBYyxDQUFDLGFBQXNDO1FBQ3pELE9BQU87WUFDSixXQUFXLEVBQUUsYUFBYSxDQUFDLE1BQU07WUFDakMsV0FBVyxFQUFFO2dCQUNWLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBVyxFQUFFO29CQUMvQixJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ25DLE9BQU8sS0FBSyxDQUFDO29CQUNoQixDQUFDO29CQUNELElBQUksYUFBYSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDNUMsT0FBTyxJQUFJLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxJQUFJLE9BQU8sYUFBYSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDbkQsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDO29CQUNyQyxDQUFDO29CQUNELE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFhLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQVcsRUFBRTtvQkFDaEMsSUFBSSxhQUFhLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM3QyxPQUFPLElBQUksQ0FBQztvQkFDZixDQUFDO29CQUNELElBQUksT0FBTyxhQUFhLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNwRCxPQUFPLGFBQWEsQ0FBQyxhQUFhLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQWEsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO2dCQUNELFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLEVBQUU7b0JBQzNDLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekMsT0FBTyxJQUFJLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQzNCLE1BQWEsRUFDYixNQUFhLEVBQ2IsS0FBSyxDQUNQLENBQUM7Z0JBQ0wsQ0FBQzthQUNIO1NBQ0gsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQ25CLE1BQW1DLEVBQ25DLElBQW9CLEVBQ3BCLE9BQWdDO1FBRWhDLE1BQU0sU0FBUyxHQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7UUFDNUQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUTtZQUN2QyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsUUFBUTtZQUNsQyxFQUFFLENBQTBDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBb0IsRUFBRTtZQUM5QyxhQUFhLEVBQUUsUUFBUTtZQUN2QixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNKLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmVlUm9vdCwgdHlwZSBUcmVlQnJhbmNoLCB0eXBlIFRyZWVPcHRpb25zLCBjb25maWcgfSBmcm9tIFwiLi4vY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBMaW1ibGVUcmVlT3B0aW9ucyBhcyBMZWdhY3lMaW1ibGVUcmVlT3B0aW9ucyB9IGZyb20gXCIuL2xlZ2FjeS10cmVlLW9wdGlvbnMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gICBMaW1ibGVUcmVlRGF0YSxcbiAgIExpbWJsZVRyZWVOb2RlXG59IGZyb20gXCIuL2xlZ2FjeS10cmVlLWRhdGEuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyB0cmVlQ29sbGFwc2VyIH0gZnJvbSBcIi4uL2V4dHJhcy9jb2xsYXBzZVwiO1xuXG4vKipcbiAqIEEgc2hpbSB0byBoZWxwIHdpdGggdGhlIHRyYW5zaXRpb24gZnJvbSB2MCB0byB2MS5cbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWdhY3lUcmVlIHtcbiAgIC8qKiBDcmVhdGVzIGEgdjEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIHYwIGRhdGEgYXJyYXkgYW5kIHYwIHRyZWUgb3B0aW9ucy4gKi9cbiAgIHB1YmxpYyBjcmVhdGVUcmVlRnJvbUxlZ2FjeUFycmF5PENvbXBvbmVudD4oXG4gICAgICBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICBkYXRhOiBMaW1ibGVUcmVlRGF0YSxcbiAgICAgIHRyZWVPcHRpb25zOiBMZWdhY3lMaW1ibGVUcmVlT3B0aW9ucyA9IHt9XG4gICApOiBUcmVlUm9vdDxDb21wb25lbnQ+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBuZXcgVHJlZVJvb3Q8Q29tcG9uZW50Pihjb250YWluZXIpO1xuICAgICAgY29uZmlnLnNldENvbmZpZyhyb290LCB0aGlzLnVwZ3JhZGVPcHRpb25zKHRyZWVPcHRpb25zKSk7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZGF0YSkge1xuICAgICAgICAgdGhpcy5yZW5kZXJUcmVlTm9kZShyb290LCBub2RlLCB0cmVlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcm9vdDtcbiAgIH1cblxuICAgcHVibGljIHVwZ3JhZGVPcHRpb25zKGxlZ2FjeU9wdGlvbnM6IExlZ2FjeUxpbWJsZVRyZWVPcHRpb25zKTogVHJlZU9wdGlvbnMge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgIGluZGVudGF0aW9uOiBsZWdhY3lPcHRpb25zLmluZGVudCxcbiAgICAgICAgIGRyYWdBbmREcm9wOiB7XG4gICAgICAgICAgICBhbGxvd05lc3Rpbmc6IChicmFuY2gpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgIGlmIChsZWdhY3lPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBpZiAobGVnYWN5T3B0aW9ucy5hbGxvd05lc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBpZiAodHlwZW9mIGxlZ2FjeU9wdGlvbnMuYWxsb3dOZXN0aW5nID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FjeU9wdGlvbnMuYWxsb3dOZXN0aW5nO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FjeU9wdGlvbnMuYWxsb3dOZXN0aW5nKGJyYW5jaCBhcyBhbnkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsbG93RHJhZ2dpbmc6IChicmFuY2gpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgIGlmIChsZWdhY3lPcHRpb25zLmFsbG93RHJhZ2dpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBpZiAodHlwZW9mIGxlZ2FjeU9wdGlvbnMuYWxsb3dEcmFnZ2luZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsZWdhY3lPcHRpb25zLmFsbG93RHJhZ2dpbmc7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICByZXR1cm4gbGVnYWN5T3B0aW9ucy5hbGxvd0RyYWdnaW5nKGJyYW5jaCBhcyBhbnkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsbG93RHJvcDogKHNvdXJjZSwgcGFyZW50LCBpbmRleCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICAgaWYgKGxlZ2FjeU9wdGlvbnMuYWxsb3dEcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FjeU9wdGlvbnMuYWxsb3dEcm9wKFxuICAgICAgICAgICAgICAgICAgc291cmNlIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgIHBhcmVudCBhcyBhbnksXG4gICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgIH07XG4gICB9XG5cbiAgIHByaXZhdGUgcmVuZGVyVHJlZU5vZGU8VD4oXG4gICAgICBwYXJlbnQ6IFRyZWVSb290PFQ+IHwgVHJlZUJyYW5jaDxUPixcbiAgICAgIG5vZGU6IExpbWJsZVRyZWVOb2RlLFxuICAgICAgb3B0aW9uczogTGVnYWN5TGltYmxlVHJlZU9wdGlvbnNcbiAgICk6IHZvaWQge1xuICAgICAgY29uc3QgY29tcG9uZW50ID1cbiAgICAgICAgIG5vZGUuY29tcG9uZW50Py5jbGFzcyA/PyBvcHRpb25zLmRlZmF1bHRDb21wb25lbnQ/LmNsYXNzO1xuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQSBjb21wb25lbnQgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRpbmdzID0gKG5vZGUuY29tcG9uZW50Py5iaW5kaW5ncyA/P1xuICAgICAgICAgb3B0aW9ucy5kZWZhdWx0Q29tcG9uZW50Py5iaW5kaW5ncyA/P1xuICAgICAgICAge30pIGFzIHsgW0sgaW4ga2V5b2YgVF0/OiBUW0tdIHwgdW5kZWZpbmVkIH07XG4gICAgICBjb25zdCBub2RlRGF0YSA9IG5vZGU7XG4gICAgICBjb25zdCBicmFuY2ggPSBwYXJlbnQuZ3Jvdyhjb21wb25lbnQgYXMgVHlwZTxUPiwge1xuICAgICAgICAgaW5wdXRCaW5kaW5nczogYmluZGluZ3MsXG4gICAgICAgICBtZXRhOiB7IG5vZGVEYXRhIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5ub2RlcyA/PyBbXSkge1xuICAgICAgICAgdGhpcy5yZW5kZXJUcmVlTm9kZShicmFuY2gsIGNoaWxkTm9kZSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jb2xsYXBzZWQgPT09IHRydWUpIHtcbiAgICAgICAgIHRyZWVDb2xsYXBzZXIuY29sbGFwc2UoYnJhbmNoKTtcbiAgICAgIH1cbiAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { LimbleTreeRootComponent } from "./limble-tree-root/limble-tree-root.component";
3
+ import { LegacyTree } from "./legacy-tree";
4
+ import * as i0 from "@angular/core";
5
+ /** @deprecated */
6
+ export class LimbleTreeLegacyModule {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeLegacyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeLegacyModule, imports: [LimbleTreeRootComponent], exports: [LimbleTreeRootComponent] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeLegacyModule, providers: [LegacyTree] }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeLegacyModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ declarations: [],
15
+ imports: [LimbleTreeRootComponent],
16
+ providers: [LegacyTree],
17
+ exports: [LimbleTreeRootComponent]
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbGVnYWN5Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGVnYWN5L2xpbWJsZS10cmVlLWxlZ2FjeS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQyxrQkFBa0I7QUFPbEIsTUFBTSxPQUFPLHNCQUFzQjs4R0FBdEIsc0JBQXNCOytHQUF0QixzQkFBc0IsWUFKdEIsdUJBQXVCLGFBRXZCLHVCQUF1QjsrR0FFdkIsc0JBQXNCLGFBSHJCLENBQUMsVUFBVSxDQUFDOzsyRkFHYixzQkFBc0I7a0JBTmxDLFFBQVE7bUJBQUM7b0JBQ1AsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IExpbWJsZVRyZWVSb290Q29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtcm9vdC9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTGVnYWN5VHJlZSB9IGZyb20gXCIuL2xlZ2FjeS10cmVlXCI7XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuQE5nTW9kdWxlKHtcbiAgIGRlY2xhcmF0aW9uczogW10sXG4gICBpbXBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxuICAgcHJvdmlkZXJzOiBbTGVnYWN5VHJlZV0sXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVMZWdhY3lNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,78 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";
2
+ import { LegacyTree } from "../legacy-tree";
3
+ import { TreeError } from "../../errors";
4
+ import { filter } from "rxjs";
5
+ import { DragEndEvent } from "../../events";
6
+ import { assert } from "../../../shared";
7
+ import * as i0 from "@angular/core";
8
+ /** @deprecated */
9
+ export class LimbleTreeRootComponent {
10
+ constructor() {
11
+ this.itemsPerPage = Infinity;
12
+ this.page = 1;
13
+ this.treeChange = new EventEmitter();
14
+ this.treeDrop = new EventEmitter();
15
+ this.legacyTree = new LegacyTree();
16
+ }
17
+ ngOnChanges() {
18
+ if (this.host !== undefined && this.data !== undefined) {
19
+ this.update();
20
+ }
21
+ }
22
+ ngAfterViewInit() {
23
+ this.update();
24
+ }
25
+ ngOnDestroy() {
26
+ this.dropSubscription?.unsubscribe();
27
+ this.root?.destroy();
28
+ }
29
+ getRoot() {
30
+ return this.root;
31
+ }
32
+ update() {
33
+ if (this.data === undefined) {
34
+ throw new TreeError("LimbleTreeRootComponent's `data` input is required");
35
+ }
36
+ if (this.host === undefined) {
37
+ throw new TreeError("LimbleTreeRootComponent's `host` property is not defined");
38
+ }
39
+ this.root?.destroy();
40
+ this.dropSubscription?.unsubscribe();
41
+ const dataSlice = this.paginatedData();
42
+ this.root = this.legacyTree.createTreeFromLegacyArray(this.host, dataSlice, this.options);
43
+ this.dropSubscription = this.root
44
+ .events()
45
+ .pipe(filter((event) => event instanceof DragEndEvent))
46
+ .subscribe(this.treeDrop);
47
+ this.treeChange.emit(this.root);
48
+ }
49
+ paginatedData() {
50
+ assert(this.data !== undefined);
51
+ if (this.options?.listMode !== true) {
52
+ return this.data;
53
+ }
54
+ return this.data.slice((this.page - 1) * this.itemsPerPage, this.page * this.itemsPerPage);
55
+ }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: LimbleTreeRootComponent, isStandalone: true, selector: "limble-tree-root", inputs: { data: "data", options: "options", itemsPerPage: "itemsPerPage", page: "page" }, outputs: { treeChange: "treeChange", treeDrop: "treeDrop" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div #host></div>\n" }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeRootComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: "limble-tree-root", standalone: true, template: "<div #host></div>\n" }]
62
+ }], ctorParameters: () => [], propDecorators: { data: [{
63
+ type: Input
64
+ }], options: [{
65
+ type: Input
66
+ }], itemsPerPage: [{
67
+ type: Input
68
+ }], page: [{
69
+ type: Input
70
+ }], host: [{
71
+ type: ViewChild,
72
+ args: ["host", { read: ViewContainerRef }]
73
+ }], treeChange: [{
74
+ type: Output
75
+ }], treeDrop: [{
76
+ type: Output
77
+ }] } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xlZ2FjeS9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9sZWdhY3kvbGltYmxlLXRyZWUtcm9vdC9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUl6QyxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFekMsa0JBQWtCO0FBTWxCLE1BQU0sT0FBTyx1QkFBdUI7SUFpQmpDO1FBWlMsaUJBQVksR0FBVyxRQUFRLENBQUM7UUFDaEMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUlQLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUMvQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFPakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWU7UUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxXQUFXO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU87UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVNLE1BQU07UUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLFNBQVMsQ0FDaEIsb0RBQW9ELENBQ3RELENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDBEQUEwRCxDQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQ2xELElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxFQUNULElBQUksQ0FBQyxPQUFPLENBQ2QsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSTthQUM3QixNQUFNLEVBQUU7YUFDUixJQUFJLENBQ0YsTUFBTSxDQUNILENBQUMsS0FBSyxFQUE4QixFQUFFLENBQ25DLEtBQUssWUFBWSxZQUFZLENBQ2xDLENBQ0g7YUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sYUFBYTtRQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDbkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDL0IsQ0FBQztJQUNMLENBQUM7OEdBaEZTLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDRTQVFOLGdCQUFnQixrRENsQzlDLHFCQUNBOzsyRkR5QmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNHLGtCQUFrQixjQUVoQixJQUFJO3dEQUtQLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRXlDLElBQUk7c0JBQWxELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUUxQixVQUFVO3NCQUE1QixNQUFNO2dCQUNZLFFBQVE7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgdHlwZSBBZnRlclZpZXdJbml0LFxuICAgQ29tcG9uZW50LFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSW5wdXQsXG4gICB0eXBlIE9uQ2hhbmdlcyxcbiAgIHR5cGUgT25EZXN0cm95LFxuICAgT3V0cHV0LFxuICAgVmlld0NoaWxkLFxuICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGVnYWN5VHJlZSB9IGZyb20gXCIuLi9sZWdhY3ktdHJlZVwiO1xuaW1wb3J0IHsgVHJlZUVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBMaW1ibGVUcmVlRGF0YSB9IGZyb20gXCIuLi9sZWdhY3ktdHJlZS1kYXRhLmludGVyZmFjZVwiO1xuaW1wb3J0IHR5cGUgeyBMaW1ibGVUcmVlT3B0aW9ucyB9IGZyb20gXCIuLi9sZWdhY3ktdHJlZS1vcHRpb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHR5cGUgeyBUcmVlUm9vdCB9IGZyb20gXCIuLi8uLi9jb3JlXCI7XG5pbXBvcnQgeyBmaWx0ZXIsIHR5cGUgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IERyYWdFbmRFdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWRcIjtcblxuLyoqIEBkZXByZWNhdGVkICovXG5AQ29tcG9uZW50KHtcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLXJvb3RcIixcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbFwiLFxuICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudFxuICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICAgQElucHV0KCkgZGF0YT86IExpbWJsZVRyZWVEYXRhO1xuICAgQElucHV0KCkgb3B0aW9ucz86IExpbWJsZVRyZWVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgQElucHV0KCkgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBJbmZpbml0eTtcbiAgIEBJbnB1dCgpIHBhZ2U6IG51bWJlciA9IDE7XG5cbiAgIEBWaWV3Q2hpbGQoXCJob3N0XCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBob3N0PzogVmlld0NvbnRhaW5lclJlZjtcblxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVSb290PGFueT4+KCk7XG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZURyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPERyYWdFbmRFdmVudDxhbnk+PigpO1xuXG4gICBwcml2YXRlIGRyb3BTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVRyZWU6IExlZ2FjeVRyZWU7XG4gICBwcml2YXRlIHJvb3Q/OiBUcmVlUm9vdDxhbnk+O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmxlZ2FjeVRyZWUgPSBuZXcgTGVnYWN5VHJlZSgpO1xuICAgfVxuXG4gICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgfVxuXG4gICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnJvb3Q/LmRlc3Ryb3koKTtcbiAgIH1cblxuICAgcHVibGljIGdldFJvb3QoKTogVHJlZVJvb3Q8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgfVxuXG4gICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJMaW1ibGVUcmVlUm9vdENvbXBvbmVudCdzIGBkYXRhYCBpbnB1dCBpcyByZXF1aXJlZFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJMaW1ibGVUcmVlUm9vdENvbXBvbmVudCdzIGBob3N0YCBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5yb290Py5kZXN0cm95KCk7XG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBkYXRhU2xpY2UgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICAgIHRoaXMucm9vdCA9IHRoaXMubGVnYWN5VHJlZS5jcmVhdGVUcmVlRnJvbUxlZ2FjeUFycmF5KFxuICAgICAgICAgdGhpcy5ob3N0LFxuICAgICAgICAgZGF0YVNsaWNlLFxuICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5kcm9wU3Vic2NyaXB0aW9uID0gdGhpcy5yb290XG4gICAgICAgICAuZXZlbnRzKClcbiAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgRHJhZ0VuZEV2ZW50PGFueT4gPT5cbiAgICAgICAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgRHJhZ0VuZEV2ZW50XG4gICAgICAgICAgICApXG4gICAgICAgICApXG4gICAgICAgICAuc3Vic2NyaWJlKHRoaXMudHJlZURyb3ApO1xuICAgICAgdGhpcy50cmVlQ2hhbmdlLmVtaXQodGhpcy5yb290KTtcbiAgIH1cblxuICAgcHJpdmF0ZSBwYWdpbmF0ZWREYXRhKCk6IExpbWJsZVRyZWVEYXRhIHtcbiAgICAgIGFzc2VydCh0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zPy5saXN0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRhdGEuc2xpY2UoXG4gICAgICAgICAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLml0ZW1zUGVyUGFnZSxcbiAgICAgICAgIHRoaXMucGFnZSAqIHRoaXMuaXRlbXNQZXJQYWdlXG4gICAgICApO1xuICAgfVxufVxuIiwiPGRpdiAjaG9zdD48L2Rpdj5cbiJdfQ==
@@ -9,11 +9,11 @@ import * as i0 from "@angular/core";
9
9
  * components, directives, and services provided by Limble Tree.
10
10
  */
11
11
  export class LimbleTreeModule {
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeModule, imports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule], exports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeModule, providers: [TreeService], imports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule, LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule] }); }
12
15
  }
13
- LimbleTreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- LimbleTreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeModule, imports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule], exports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule] });
15
- LimbleTreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeModule, providers: [TreeService], imports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule, LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LimbleTreeModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  declarations: [],
@@ -22,4 +22,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
22
22
  exports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule]
23
23
  }]
24
24
  }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjs7NkdBQWhCLGdCQUFnQjs4R0FBaEIsZ0JBQWdCLFlBSmhCLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixhQUVqRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUI7OEdBRWpFLGdCQUFnQixhQUhmLENBQUMsV0FBVyxDQUFDLFlBRGQsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBRWpFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQjsyRkFFakUsZ0JBQWdCO2tCQU41QixRQUFRO21CQUFDO29CQUNQLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztvQkFDNUUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztpQkFDOUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmVlQ29sbGFwc2VNb2R1bGUgfSBmcm9tIFwiLi9leHRyYXMvY29sbGFwc2VcIjtcbmltcG9ydCB7IFRyZWVEcmFnQW5kRHJvcE1vZHVsZSB9IGZyb20gXCIuL2V4dHJhcy9kcmFnLWFuZC1kcm9wXCI7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuL2NvcmVcIjtcbmltcG9ydCB7IExpbWJsZVRyZWVMZWdhY3lNb2R1bGUgfSBmcm9tIFwiLi9sZWdhY3lcIjtcblxuLyoqXG4gKiBJbXBvcnQgdGhpcyBBbmd1bGFyIG1vZHVsZSBpbnRvIHlvdXIgYXBwbGljYXRpb24gdG8gZ2FpbiBhY2Nlc3MgdG8gdGhlXG4gKiBjb21wb25lbnRzLCBkaXJlY3RpdmVzLCBhbmQgc2VydmljZXMgcHJvdmlkZWQgYnkgTGltYmxlIFRyZWUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgaW1wb3J0czogW0xpbWJsZVRyZWVMZWdhY3lNb2R1bGUsIFRyZWVDb2xsYXBzZU1vZHVsZSwgVHJlZURyYWdBbmREcm9wTW9kdWxlXSxcbiAgIHByb3ZpZGVyczogW1RyZWVTZXJ2aWNlXSxcbiAgIGV4cG9ydHM6IFtMaW1ibGVUcmVlTGVnYWN5TW9kdWxlLCBUcmVlQ29sbGFwc2VNb2R1bGUsIFRyZWVEcmFnQW5kRHJvcE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZU1vZHVsZSB7fVxuIl19
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsWUFKaEIsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLGFBRWpFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQjsrR0FFakUsZ0JBQWdCLGFBSGYsQ0FBQyxXQUFXLENBQUMsWUFEZCxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFFakUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCOzsyRkFFakUsZ0JBQWdCO2tCQU41QixRQUFRO21CQUFDO29CQUNQLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztvQkFDNUUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztpQkFDOUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmVlQ29sbGFwc2VNb2R1bGUgfSBmcm9tIFwiLi9leHRyYXMvY29sbGFwc2VcIjtcbmltcG9ydCB7IFRyZWVEcmFnQW5kRHJvcE1vZHVsZSB9IGZyb20gXCIuL2V4dHJhcy9kcmFnLWFuZC1kcm9wXCI7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuL2NvcmVcIjtcbmltcG9ydCB7IExpbWJsZVRyZWVMZWdhY3lNb2R1bGUgfSBmcm9tIFwiLi9sZWdhY3lcIjtcblxuLyoqXG4gKiBJbXBvcnQgdGhpcyBBbmd1bGFyIG1vZHVsZSBpbnRvIHlvdXIgYXBwbGljYXRpb24gdG8gZ2FpbiBhY2Nlc3MgdG8gdGhlXG4gKiBjb21wb25lbnRzLCBkaXJlY3RpdmVzLCBhbmQgc2VydmljZXMgcHJvdmlkZWQgYnkgTGltYmxlIFRyZWUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgaW1wb3J0czogW0xpbWJsZVRyZWVMZWdhY3lNb2R1bGUsIFRyZWVDb2xsYXBzZU1vZHVsZSwgVHJlZURyYWdBbmREcm9wTW9kdWxlXSxcbiAgIHByb3ZpZGVyczogW1RyZWVTZXJ2aWNlXSxcbiAgIGV4cG9ydHM6IFtMaW1ibGVUcmVlTGVnYWN5TW9kdWxlLCBUcmVlQ29sbGFwc2VNb2R1bGUsIFRyZWVEcmFnQW5kRHJvcE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZU1vZHVsZSB7fVxuIl19
@@ -0,0 +1,7 @@
1
+ export function assert(condition) {
2
+ if (condition) {
3
+ return;
4
+ }
5
+ throw new Error("Assertion Failed!");
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL3NoYXJlZC9hc3NlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLE1BQU0sQ0FBQyxTQUFrQjtJQUN0QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2IsT0FBTztJQUNWLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uOiB1bmtub3duKTogYXNzZXJ0cyBjb25kaXRpb24ge1xuICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgfVxuICAgdGhyb3cgbmV3IEVycm9yKFwiQXNzZXJ0aW9uIEZhaWxlZCFcIik7XG59XG4iXX0=