tree-element 0.1.1 → 0.3.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 (155) hide show
  1. package/README.md +43 -31
  2. package/lib/animation.d.ts +2 -2
  3. package/lib/animation.d.ts.map +1 -1
  4. package/lib/animation.js +16 -12
  5. package/lib/animation.js.map +1 -1
  6. package/lib/classNames.d.ts.map +1 -1
  7. package/lib/classNames.js +2 -2
  8. package/lib/classNames.js.map +1 -1
  9. package/lib/dataLoader.d.ts +1 -0
  10. package/lib/dataLoader.d.ts.map +1 -1
  11. package/lib/dataLoader.js +22 -20
  12. package/lib/dataLoader.js.map +1 -1
  13. package/lib/dragAndDropHandler/binarySearch.js +3 -3
  14. package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
  15. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  16. package/lib/dragAndDropHandler/dragElement.js +11 -13
  17. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  18. package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
  19. package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
  20. package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
  21. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  22. package/lib/dragAndDropHandler/index.js +125 -158
  23. package/lib/dragAndDropHandler/index.js.map +1 -1
  24. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  25. package/lib/dragAndDropHandler/iterateVisibleNodes.js +23 -22
  26. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  27. package/lib/dragAndDropHandler/types.d.ts.map +1 -1
  28. package/lib/elementsRenderer.d.ts +20 -7
  29. package/lib/elementsRenderer.d.ts.map +1 -1
  30. package/lib/elementsRenderer.js +195 -136
  31. package/lib/elementsRenderer.js.map +1 -1
  32. package/lib/events.d.ts +44 -11
  33. package/lib/events.d.ts.map +1 -1
  34. package/lib/index.d.ts +36 -13
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +386 -349
  37. package/lib/index.js.map +1 -1
  38. package/lib/keyHandler.d.ts +13 -8
  39. package/lib/keyHandler.d.ts.map +1 -1
  40. package/lib/keyHandler.js +106 -51
  41. package/lib/keyHandler.js.map +1 -1
  42. package/lib/methodTypes.d.ts +3 -3
  43. package/lib/methodTypes.d.ts.map +1 -1
  44. package/lib/mouseHandler.d.ts +1 -1
  45. package/lib/mouseHandler.d.ts.map +1 -1
  46. package/lib/mouseHandler.js +36 -49
  47. package/lib/mouseHandler.js.map +1 -1
  48. package/lib/mouseUtils.d.ts.map +1 -1
  49. package/lib/mouseUtils.js +2 -2
  50. package/lib/mouseUtils.js.map +1 -1
  51. package/lib/node.d.ts +47 -16
  52. package/lib/node.d.ts.map +1 -1
  53. package/lib/node.js +169 -171
  54. package/lib/node.js.map +1 -1
  55. package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
  56. package/lib/nodeElement/borderDropHint.js +4 -5
  57. package/lib/nodeElement/borderDropHint.js.map +1 -1
  58. package/lib/nodeElement/folderElement.d.ts +8 -5
  59. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  60. package/lib/nodeElement/folderElement.js +75 -67
  61. package/lib/nodeElement/folderElement.js.map +1 -1
  62. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  63. package/lib/nodeElement/ghostDropHint.js +13 -13
  64. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  65. package/lib/nodeElement/index.d.ts +2 -1
  66. package/lib/nodeElement/index.d.ts.map +1 -1
  67. package/lib/nodeElement/index.js +38 -30
  68. package/lib/nodeElement/index.js.map +1 -1
  69. package/lib/nodeUtils.d.ts.map +1 -1
  70. package/lib/nodeUtils.js +1 -1
  71. package/lib/nodeUtils.js.map +1 -1
  72. package/lib/options.d.ts +19 -3
  73. package/lib/options.d.ts.map +1 -1
  74. package/lib/positionUtils.js +3 -3
  75. package/lib/positionUtils.js.map +1 -1
  76. package/lib/requestUrl.d.ts +1 -1
  77. package/lib/requestUrl.d.ts.map +1 -1
  78. package/lib/requestUrl.js +6 -17
  79. package/lib/requestUrl.js.map +1 -1
  80. package/lib/saveStateHandler.d.ts.map +1 -1
  81. package/lib/saveStateHandler.js +59 -89
  82. package/lib/saveStateHandler.js.map +1 -1
  83. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  84. package/lib/scrollHandler/containerScrollParent.js +11 -18
  85. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  86. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  87. package/lib/scrollHandler/createScrollParent.js +12 -13
  88. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  89. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  90. package/lib/scrollHandler/documentScrollParent.js +18 -27
  91. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  92. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  93. package/lib/scrollHandler/scrollParent.js +30 -34
  94. package/lib/scrollHandler/scrollParent.js.map +1 -1
  95. package/lib/scrollHandler.d.ts.map +1 -1
  96. package/lib/scrollHandler.js +11 -14
  97. package/lib/scrollHandler.js.map +1 -1
  98. package/lib/selectNodeHandler.d.ts +4 -2
  99. package/lib/selectNodeHandler.d.ts.map +1 -1
  100. package/lib/selectNodeHandler.js +64 -83
  101. package/lib/selectNodeHandler.js.map +1 -1
  102. package/lib/setDefaultOptions.d.ts.map +1 -1
  103. package/lib/setDefaultOptions.js +34 -38
  104. package/lib/setDefaultOptions.js.map +1 -1
  105. package/lib/triggerCustomEvent.d.ts.map +1 -1
  106. package/lib/triggerCustomEvent.js +2 -2
  107. package/lib/triggerCustomEvent.js.map +1 -1
  108. package/lib/util.d.ts.map +1 -1
  109. package/lib/util.js +2 -2
  110. package/lib/util.js.map +1 -1
  111. package/lib/version.d.ts +1 -1
  112. package/lib/version.js +1 -1
  113. package/lib/version.js.map +1 -1
  114. package/package.json +43 -32
  115. package/src/animation.ts +14 -12
  116. package/src/classNames.ts +52 -52
  117. package/src/dataLoader.ts +79 -71
  118. package/src/dragAndDropHandler/binarySearch.ts +17 -17
  119. package/src/dragAndDropHandler/dragElement.ts +51 -50
  120. package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
  121. package/src/dragAndDropHandler/index.ts +334 -348
  122. package/src/dragAndDropHandler/iterateVisibleNodes.ts +61 -63
  123. package/src/dragAndDropHandler/types.ts +5 -5
  124. package/src/elementsRenderer.ts +377 -294
  125. package/src/events.ts +241 -208
  126. package/src/header.txt +1 -1
  127. package/src/index.ts +259 -229
  128. package/src/keyHandler.ts +179 -115
  129. package/src/methodTypes.ts +7 -10
  130. package/src/mouseHandler.ts +316 -316
  131. package/src/mouseUtils.ts +14 -14
  132. package/src/node.ts +773 -771
  133. package/src/nodeElement/borderDropHint.ts +25 -25
  134. package/src/nodeElement/folderElement.ts +116 -102
  135. package/src/nodeElement/ghostDropHint.ts +64 -62
  136. package/src/nodeElement/index.ts +81 -73
  137. package/src/nodeUtils.ts +5 -5
  138. package/src/options.ts +25 -5
  139. package/src/requestUrl.ts +7 -14
  140. package/src/saveStateHandler.ts +191 -207
  141. package/src/scrollHandler/containerScrollParent.ts +40 -49
  142. package/src/scrollHandler/createScrollParent.ts +26 -27
  143. package/src/scrollHandler/documentScrollParent.ts +66 -72
  144. package/src/scrollHandler/scrollParent.ts +90 -86
  145. package/src/scrollHandler.ts +45 -45
  146. package/src/selectNodeHandler.ts +171 -165
  147. package/src/setDefaultOptions.ts +44 -32
  148. package/src/triggerCustomEvent.ts +7 -3
  149. package/src/util.ts +2 -3
  150. package/src/version.ts +1 -1
  151. package/tree_element.css +87 -69
  152. package/tree_element.debug.js +3866 -3831
  153. package/tree_element.debug.js.map +1 -1
  154. package/tree_element.js +2 -2
  155. package/tree_element.js.map +1 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Html-tree
1
+ # Tree-element
2
2
 
3
3
  Tree widget in plain javascript. No jQuery, no framework, no runtime dependencies.
4
4
 
@@ -11,6 +11,10 @@ Tree widget in plain javascript. No jQuery, no framework, no runtime dependencie
11
11
 
12
12
  Full documentation: https://mbraak.github.io/tree-element/
13
13
 
14
+ npm package: https://www.npmjs.com/package/tree-element
15
+
16
+ ![screenshot](https://raw.github.com/mbraak/tree-element/master/screenshot.png)
17
+
14
18
  ## Install
15
19
 
16
20
  ```sh
@@ -75,32 +79,34 @@ new TreeElement({
75
79
 
76
80
  ## Options
77
81
 
78
- | Option | Default | Description |
79
- | ----------------- | -------------------- | --------------------------------------------------------------------------------- |
80
- | `animationSpeed` | `"fast"` | `"fast"`, `"slow"`, or a number of milliseconds |
81
- | `autoEscape` | `true` | Escape node names. Set to `false` to render html in a name |
82
- | `autoOpen` | `false` | `true` opens everything, a number opens that many levels (`0` is the first level) |
83
- | `buttonLeft` | `true` | Put the open/close button left of the title |
82
+ | Option | Default | Description |
83
+ | ----------------- | ----------------------- | --------------------------------------------------------------------------------- |
84
+ | `animationSpeed` | `"fast"` | `"fast"`, `"slow"`, or a number of milliseconds. `0` for reduced motion |
85
+ | `ariaLabel` | | The accessible name of the tree |
86
+ | `ariaLabelledBy` | | The id of the element that names the tree |
87
+ | `autoEscape` | `true` | Escape node names. Set to `false` to render html in a name |
88
+ | `autoOpen` | `false` | `true` opens everything, a number opens that many levels (`0` is the first level) |
89
+ | `buttonLeft` | `true` | Put the open/close button left of the title |
84
90
  | `classPrefix` | `"tree-element"` | The prefix of all css classes |
85
- | `closedIcon` | `►` (`◄` in rtl) | Html string or element |
91
+ | `closedIcon` | `►` (`◄` in rtl) | Html string or element |
86
92
  | `commonClassName` | `"tree-element-common"` | The class that every element gets |
87
- | `data` | | The nodes to display |
88
- | `dataFilter` | | Transforms the response of `dataUrl` into node data |
89
- | `dataUrl` | `data-url` attribute | Url, or a function returning a url |
90
- | `dragAndDrop` | `false` | Enable drag and drop |
91
- | `keyboardSupport` | `true` | Navigate with the arrow keys |
92
- | `nodeClass` | `Node` | Subclass of `Node` to use for nodes |
93
- | `openFolderDelay` | `500` | Milliseconds before a folder opens while dragging over it. `false` disables it |
94
- | `openedIcon` | `▼` | Html string or element |
95
- | `rtl` | `data-rtl` attribute | Right-to-left rendering |
96
- | `saveState` | `false` | `true`, or a string to use as the storage key |
97
- | `selectable` | `true` | Allow selecting nodes |
98
- | `showEmptyFolder` | `false` | Show the open/close button for nodes without children |
99
- | `slide` | `true` | Animate opening and closing |
100
- | `startDndDelay` | `300` | Milliseconds to hold before a drag starts |
101
- | `tabIndex` | `0` | Tab index of the tree element |
93
+ | `data` | | The nodes to display |
94
+ | `dataFilter` | | Transforms the response of `dataUrl` into node data |
95
+ | `dataUrl` | `data-url` attribute | Url, or a function returning a url |
96
+ | `dragAndDrop` | `false` | Enable drag and drop |
97
+ | `keyboardSupport` | `true` | Navigate with the keyboard |
98
+ | `nodeClass` | `Node` | Subclass of `Node` to use for nodes |
99
+ | `openFolderDelay` | `500` | Milliseconds before a folder opens while dragging over it. `false` disables it |
100
+ | `openedIcon` | `▼` | Html string or element |
101
+ | `rtl` | `data-rtl` attribute | Right-to-left rendering |
102
+ | `saveState` | `false` | `true`, or a string to use as the storage key |
103
+ | `selectable` | `true` | Allow selecting nodes |
104
+ | `showEmptyFolder` | `false` | Show the open/close button for nodes without children |
105
+ | `slide` | `true` | Animate opening and closing |
106
+ | `startDndDelay` | `300` | Milliseconds to hold before a drag starts |
107
+ | `tabIndex` | `0` | Tab index of the tree element |
102
108
  | `treeClassName` | `"tree-element"` | The class of the root `ul` |
103
- | `useContextMenu` | `true` | Fire `tree.contextmenu` on right click |
109
+ | `useContextMenu` | `true` | Fire `tree.contextmenu` on right click |
104
110
 
105
111
  ### Callbacks
106
112
 
@@ -133,6 +139,7 @@ element.addEventListener("tree.select", (e) => {
133
139
  | `tree.click` | `node`, `originalEvent` |
134
140
  | `tree.dblclick` | `node`, `originalEvent` |
135
141
  | `tree.contextmenu` | `node`, `originalEvent` |
142
+ | `tree.activate` | `node`, `originalEvent` |
136
143
  | `tree.select` | `node`, `deselectedNode` |
137
144
  | `tree.deselect` | `node` |
138
145
  | `tree.open` | `node` |
@@ -158,7 +165,8 @@ Nodes are `Node` instances. Get one with `getNodeById`, `getNodeByName`,
158
165
 
159
166
  **Nodes**: `appendNode(data, parentNode)`, `prependNode(data, parentNode)`, `addNodeAfter(data, node)`, `addNodeBefore(data, node)`, `addParentNode(data, node)`, `updateNode(node, data)`, `removeNode(node)`, `moveNode(node, targetNode, position)`
160
167
 
161
- **Opening**: `openNode(node, slide?)`, `closeNode(node, slide?)`, `toggle(node, slide?)`
168
+ **Opening**: `openNode(node, slide?)`, `closeNode(node, slide?)`, `toggle(node, slide?)`.
169
+ `openNode`, `closeNode` and `toggle` return a promise that is resolved when the folder is open or closed.
162
170
 
163
171
  **Selection**: `selectNode(node, options?)`, `getSelectedNode()`, `getSelectedNodes()`, `isNodeSelected(node)`, `addToSelection(node, mustSetFocus?)`, `removeFromSelection(node)`, `moveUp()`, `moveDown()`
164
172
 
@@ -188,11 +196,11 @@ const data: NodeData[] = [{ name: "root", id: 1 }];
188
196
 
189
197
  ## Entry points
190
198
 
191
- | | |
192
- | ------------------------- | ------------------------------------------------------------ |
193
- | `import "tree-element"` | `lib/index.js`, unbundled es modules |
194
- | `require`, script tag | `tree_element.js`, minified iife exposing the global `TreeElement` |
195
- | `tree-element/tree_element.css` | The stylesheet |
199
+ | | |
200
+ | ------------------------------- | ------------------------------------------------------------------ |
201
+ | `import "tree-element"` | `lib/index.js`, unbundled es modules |
202
+ | `require`, script tag | `tree_element.js`, minified iife exposing the global `TreeElement` |
203
+ | `tree-element/tree_element.css` | The stylesheet |
196
204
 
197
205
  `tree_element.debug.js` is the same bundle without minification.
198
206
 
@@ -214,7 +222,11 @@ pnpm docs-check # type-check the code snippets in the docs
214
222
  pnpm ci # lint, typecheck, check the docs and test
215
223
  ```
216
224
 
217
- `pnpm test` runs the vitest unit tests and the playwright browser tests.
225
+ `pnpm test` runs the vitest unit tests and the playwright browser tests. The
226
+ browser tests include accessibility checks: axe scans the rendered tree
227
+ (including color contrast) and keyboard-only tests cover tabbing into the tree,
228
+ the arrow keys, `Home`, `End` and `Enter`. They are in
229
+ `playwright/accessibility.test.ts`.
218
230
 
219
231
  ### Releasing
220
232
 
@@ -1,5 +1,5 @@
1
1
  export type AnimationSpeed = "fast" | "slow" | number;
2
2
  export declare const getAnimationDuration: (duration: AnimationSpeed) => number;
3
- export declare const slideDown: (element: HTMLElement, animationSpeed: AnimationSpeed, onFinished: () => void) => void;
4
- export declare const slideUp: (element: HTMLElement, animationSpeed: AnimationSpeed, onFinished: () => void) => void;
3
+ export declare const slideDown: (element: HTMLElement, animationSpeed: AnimationSpeed) => Promise<void>;
4
+ export declare const slideUp: (element: HTMLElement, animationSpeed: AnimationSpeed) => Promise<void>;
5
5
  //# sourceMappingURL=animation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,oBAAoB,GAAI,UAAU,cAAc,KAAG,MAM/D,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,SAAS,WAAW,EACpB,gBAAgB,cAAc,EAC9B,YAAY,MAAM,IAAI,KACrB,IAcF,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,SAAS,WAAW,EACpB,gBAAgB,cAAc,EAC9B,YAAY,MAAM,IAAI,KACrB,IAaF,CAAC"}
1
+ {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,oBAAoB,GAAI,UAAU,cAAc,KAAG,MAM/D,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,SAAS,WAAW,EACpB,gBAAgB,cAAc,KAC7B,OAAO,CAAC,IAAI,CAgBd,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,SAAS,WAAW,EACpB,gBAAgB,cAAc,KAC7B,OAAO,CAAC,IAAI,CAed,CAAC"}
package/lib/animation.js CHANGED
@@ -1,12 +1,12 @@
1
- const getAnimationDuration = duration => {
1
+ let getAnimationDuration = duration => {
2
2
  if (typeof duration === "number") {
3
3
  return duration;
4
4
  }
5
5
  return duration === "slow" ? 600 : 200;
6
6
  };
7
- const slideDown = (element, animationSpeed, onFinished) => {
7
+ let slideDown = (element, animationSpeed) => {
8
8
  element.style.display = "block";
9
- const animation = element.animate([{
9
+ let animation = element.animate([{
10
10
  height: "0",
11
11
  overflow: "hidden"
12
12
  }, {
@@ -15,12 +15,14 @@ const slideDown = (element, animationSpeed, onFinished) => {
15
15
  }], {
16
16
  duration: getAnimationDuration(animationSpeed)
17
17
  });
18
- animation.onfinish = () => {
19
- onFinished();
20
- };
18
+ return new Promise(resolve => {
19
+ animation.onfinish = () => {
20
+ resolve();
21
+ };
22
+ });
21
23
  };
22
- const slideUp = (element, animationSpeed, onFinished) => {
23
- const animation = element.animate([{
24
+ let slideUp = (element, animationSpeed) => {
25
+ let animation = element.animate([{
24
26
  height: `${element.scrollHeight}px`,
25
27
  overflow: "hidden"
26
28
  }, {
@@ -29,10 +31,12 @@ const slideUp = (element, animationSpeed, onFinished) => {
29
31
  }], {
30
32
  duration: getAnimationDuration(animationSpeed)
31
33
  });
32
- animation.onfinish = () => {
33
- element.style.display = "none";
34
- onFinished();
35
- };
34
+ return new Promise(resolve => {
35
+ animation.onfinish = () => {
36
+ element.style.display = "none";
37
+ resolve();
38
+ };
39
+ });
36
40
  };
37
41
 
38
42
  export { getAnimationDuration, slideDown, slideUp };
@@ -1 +1 @@
1
- {"version":3,"file":"animation.js","sources":["../src/animation.ts"],"sourcesContent":["export type AnimationSpeed = \"fast\" | \"slow\" | number;\n\nexport const getAnimationDuration = (duration: AnimationSpeed): number => {\n if (typeof duration === \"number\") {\n return duration;\n }\n\n return duration === \"slow\" ? 600 : 200;\n};\n\nexport const slideDown = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n element.style.display = \"block\";\n\n const animation = element.animate(\n [\n { height: \"0\", overflow: \"hidden\" },\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n onFinished();\n };\n};\n\nexport const slideUp = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n const animation = element.animate(\n [\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n { height: \"0\", overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n element.style.display = \"none\";\n onFinished();\n };\n};"],"names":[],"mappings":"AAEO,MAAM,oBAAoB,GAAI,QAAwB,IAAa;AACxE,EAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,IAAA,OAAO,QAAQ;AACjB,EAAA;AAEA,EAAA,OAAO,QAAQ,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG;AACxC;AAEO,MAAM,SAAS,GAAG,CACvB,OAAoB,EACpB,cAA8B,EAC9B,UAAsB,KACb;AACT,EAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAE/B,EAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAC/B,CACE;AAAE,IAAA,MAAM,EAAE,GAAG;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,EACnC;AAAE,IAAA,MAAM,EAAE,CAAA,EAAG,OAAO,CAAC,YAAY,CAAA,EAAA,CAAI;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,CAC5D,EACD;IAAE,QAAQ,EAAE,oBAAoB,CAAC,cAAc;AAAE,GACnD,CAAC;EAED,SAAS,CAAC,QAAQ,GAAG,MAAM;AACzB,IAAA,UAAU,EAAE;EACd,CAAC;AACH;AAEO,MAAM,OAAO,GAAG,CACrB,OAAoB,EACpB,cAA8B,EAC9B,UAAsB,KACb;AACT,EAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAC/B,CACE;AAAE,IAAA,MAAM,EAAE,CAAA,EAAG,OAAO,CAAC,YAAY,CAAA,EAAA,CAAI;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,EAC3D;AAAE,IAAA,MAAM,EAAE,GAAG;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,CACpC,EACD;IAAE,QAAQ,EAAE,oBAAoB,CAAC,cAAc;AAAE,GACnD,CAAC;EAED,SAAS,CAAC,QAAQ,GAAG,MAAM;AACzB,IAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,IAAA,UAAU,EAAE;EACd,CAAC;AACH;;"}
1
+ {"version":3,"file":"animation.js","sources":["../src/animation.ts"],"sourcesContent":["export type AnimationSpeed = \"fast\" | \"slow\" | number;\n\nexport const getAnimationDuration = (duration: AnimationSpeed): number => {\n if (typeof duration === \"number\") {\n return duration;\n }\n\n return duration === \"slow\" ? 600 : 200;\n};\n\nexport const slideDown = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n): Promise<void> => {\n element.style.display = \"block\";\n\n const animation = element.animate(\n [\n { height: \"0\", overflow: \"hidden\" },\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n return new Promise((resolve) => {\n animation.onfinish = () => {\n resolve();\n };\n });\n};\n\nexport const slideUp = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n): Promise<void> => {\n const animation = element.animate(\n [\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n { height: \"0\", overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n return new Promise((resolve) => {\n animation.onfinish = () => {\n element.style.display = \"none\";\n resolve();\n };\n });\n};\n"],"names":[],"mappings":"AAEO,IAAM,oBAAoB,GAAI,QAAwB,IAAa;AACxE,EAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,IAAA,OAAO,QAAQ;AACjB,EAAA;AAEA,EAAA,OAAO,QAAQ,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG;AACxC;IAEa,SAAS,GAAG,CACvB,OAAoB,EACpB,cAA8B,KACZ;AAClB,EAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAE/B,EAAA,IAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAC/B,CACE;AAAE,IAAA,MAAM,EAAE,GAAG;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,EACnC;AAAE,IAAA,MAAM,EAAE,CAAA,EAAG,OAAO,CAAC,YAAY,CAAA,EAAA,CAAI;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,CAC5D,EACD;IAAE,QAAQ,EAAE,oBAAoB,CAAC,cAAc;AAAE,GACnD,CAAC;AAED,EAAA,OAAO,IAAI,OAAO,CAAE,OAAO,IAAK;IAC9B,SAAS,CAAC,QAAQ,GAAG,MAAM;AACzB,MAAA,OAAO,EAAE;IACX,CAAC;AACH,EAAA,CAAC,CAAC;AACJ;IAEa,OAAO,GAAG,CACrB,OAAoB,EACpB,cAA8B,KACZ;AAClB,EAAA,IAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAC/B,CACE;AAAE,IAAA,MAAM,EAAE,CAAA,EAAG,OAAO,CAAC,YAAY,CAAA,EAAA,CAAI;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,EAC3D;AAAE,IAAA,MAAM,EAAE,GAAG;AAAE,IAAA,QAAQ,EAAE;AAAS,GAAC,CACpC,EACD;IAAE,QAAQ,EAAE,oBAAoB,CAAC,cAAc;AAAE,GACnD,CAAC;AAED,EAAA,OAAO,IAAI,OAAO,CAAE,OAAO,IAAK;IAC9B,SAAS,CAAC,QAAQ,GAAG,MAAM;AACzB,MAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,MAAA,OAAO,EAAE;IACX,CAAC;AACH,EAAA,CAAC,CAAC;AACJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"classNames.d.ts","sourceRoot":"","sources":["../src/classNames.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAOnD,QAAA,MAAM,gBAAgB,GAAI,kDAIvB,iBAAiB,KAAG,UAwBrB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"classNames.d.ts","sourceRoot":"","sources":["../src/classNames.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAOnD,QAAA,MAAM,gBAAgB,GAAI,kDAIvB,iBAAiB,KAAG,UAwBrB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
package/lib/classNames.js CHANGED
@@ -1,11 +1,11 @@
1
- const DEFAULT_CLASS_PREFIX = "tree-element";
1
+ let DEFAULT_CLASS_PREFIX = "tree-element";
2
2
 
3
3
  /* Create the class names that the widget puts on the elements it creates.
4
4
  * They are all derived from classPrefix, except for the class of the root
5
5
  * element and the class that every element gets, which have an option of
6
6
  * their own.
7
7
  */
8
- const createClassNames = ({
8
+ let createClassNames = ({
9
9
  classPrefix,
10
10
  commonClassName,
11
11
  treeClassName
@@ -1 +1 @@
1
- {"version":3,"file":"classNames.js","sources":["../src/classNames.ts"],"sourcesContent":["export interface ClassNames {\n border: string;\n circle: string;\n closed: string;\n common: string;\n dnd: string;\n dragging: string;\n element: string;\n folder: string;\n ghost: string;\n inside: string;\n line: string;\n loading: string;\n moving: string;\n rtl: string;\n selected: string;\n title: string;\n titleButtonLeft: string;\n titleButtonRight: string;\n titleFolder: string;\n toggler: string;\n togglerLeft: string;\n togglerRight: string;\n tree: string;\n}\n\nexport interface ClassNamesOptions {\n classPrefix: string;\n commonClassName?: string;\n treeClassName?: string;\n}\n\nexport const DEFAULT_CLASS_PREFIX = \"tree-element\";\n\n/* Create the class names that the widget puts on the elements it creates.\n * They are all derived from classPrefix, except for the class of the root\n * element and the class that every element gets, which have an option of\n * their own.\n */\nconst createClassNames = ({\n classPrefix,\n commonClassName,\n treeClassName,\n}: ClassNamesOptions): ClassNames => ({\n border: `${classPrefix}-border`,\n circle: `${classPrefix}-circle`,\n closed: `${classPrefix}-closed`,\n common: commonClassName ?? `${classPrefix}-common`,\n dnd: `${classPrefix}-dnd`,\n dragging: `${classPrefix}-dragging`,\n element: `${classPrefix}-element`,\n folder: `${classPrefix}-folder`,\n ghost: `${classPrefix}-ghost`,\n inside: `${classPrefix}-inside`,\n line: `${classPrefix}-line`,\n loading: `${classPrefix}-loading`,\n moving: `${classPrefix}-moving`,\n rtl: `${classPrefix}-rtl`,\n selected: `${classPrefix}-selected`,\n title: `${classPrefix}-title`,\n titleButtonLeft: `${classPrefix}-title-button-left`,\n titleButtonRight: `${classPrefix}-title-button-right`,\n titleFolder: `${classPrefix}-title-folder`,\n toggler: `${classPrefix}-toggler`,\n togglerLeft: `${classPrefix}-toggler-left`,\n togglerRight: `${classPrefix}-toggler-right`,\n tree: treeClassName ?? classPrefix,\n});\n\nexport default createClassNames;\n"],"names":[],"mappings":"AAgCO,MAAM,oBAAoB,GAAG;;AAEpC;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC;EACtB,WAAW;EACX,eAAe;AACf,EAAA;AACe,CAAC,MAAkB;EAClC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;AAC/B,EAAA,MAAM,EAAE,eAAe,IAAI,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAClD,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,IAAA,CAAM;EACzB,QAAQ,EAAE,CAAA,EAAG,WAAW,CAAA,SAAA,CAAW;EACnC,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ;EAC7B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,IAAI,EAAE,CAAA,EAAG,WAAW,CAAA,KAAA,CAAO;EAC3B,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,IAAA,CAAM;EACzB,QAAQ,EAAE,CAAA,EAAG,WAAW,CAAA,SAAA,CAAW;EACnC,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ;EAC7B,eAAe,EAAE,CAAA,EAAG,WAAW,CAAA,kBAAA,CAAoB;EACnD,gBAAgB,EAAE,CAAA,EAAG,WAAW,CAAA,mBAAA,CAAqB;EACrD,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,aAAA,CAAe;EAC1C,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,aAAA,CAAe;EAC1C,YAAY,EAAE,CAAA,EAAG,WAAW,CAAA,cAAA,CAAgB;EAC5C,IAAI,EAAE,aAAa,IAAI;AAC3B,CAAC;;"}
1
+ {"version":3,"file":"classNames.js","sources":["../src/classNames.ts"],"sourcesContent":["export interface ClassNames {\n border: string;\n circle: string;\n closed: string;\n common: string;\n dnd: string;\n dragging: string;\n element: string;\n folder: string;\n ghost: string;\n inside: string;\n line: string;\n loading: string;\n moving: string;\n rtl: string;\n selected: string;\n title: string;\n titleButtonLeft: string;\n titleButtonRight: string;\n titleFolder: string;\n toggler: string;\n togglerLeft: string;\n togglerRight: string;\n tree: string;\n}\n\nexport interface ClassNamesOptions {\n classPrefix: string;\n commonClassName?: string;\n treeClassName?: string;\n}\n\nexport const DEFAULT_CLASS_PREFIX = \"tree-element\";\n\n/* Create the class names that the widget puts on the elements it creates.\n * They are all derived from classPrefix, except for the class of the root\n * element and the class that every element gets, which have an option of\n * their own.\n */\nconst createClassNames = ({\n classPrefix,\n commonClassName,\n treeClassName,\n}: ClassNamesOptions): ClassNames => ({\n border: `${classPrefix}-border`,\n circle: `${classPrefix}-circle`,\n closed: `${classPrefix}-closed`,\n common: commonClassName ?? `${classPrefix}-common`,\n dnd: `${classPrefix}-dnd`,\n dragging: `${classPrefix}-dragging`,\n element: `${classPrefix}-element`,\n folder: `${classPrefix}-folder`,\n ghost: `${classPrefix}-ghost`,\n inside: `${classPrefix}-inside`,\n line: `${classPrefix}-line`,\n loading: `${classPrefix}-loading`,\n moving: `${classPrefix}-moving`,\n rtl: `${classPrefix}-rtl`,\n selected: `${classPrefix}-selected`,\n title: `${classPrefix}-title`,\n titleButtonLeft: `${classPrefix}-title-button-left`,\n titleButtonRight: `${classPrefix}-title-button-right`,\n titleFolder: `${classPrefix}-title-folder`,\n toggler: `${classPrefix}-toggler`,\n togglerLeft: `${classPrefix}-toggler-left`,\n togglerRight: `${classPrefix}-toggler-right`,\n tree: treeClassName ?? classPrefix,\n});\n\nexport default createClassNames;\n"],"names":[],"mappings":"AAgCO,IAAM,oBAAoB,GAAG;;AAEpC;AACA;AACA;AACA;AACA;AACA,IAAM,gBAAgB,GAAG,CAAC;EACxB,WAAW;EACX,eAAe;AACf,EAAA;AACiB,CAAC,MAAkB;EACpC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;AAC/B,EAAA,MAAM,EAAE,eAAe,IAAI,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAClD,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,IAAA,CAAM;EACzB,QAAQ,EAAE,CAAA,EAAG,WAAW,CAAA,SAAA,CAAW;EACnC,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ;EAC7B,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,IAAI,EAAE,CAAA,EAAG,WAAW,CAAA,KAAA,CAAO;EAC3B,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,CAAS;EAC/B,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,IAAA,CAAM;EACzB,QAAQ,EAAE,CAAA,EAAG,WAAW,CAAA,SAAA,CAAW;EACnC,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ;EAC7B,eAAe,EAAE,CAAA,EAAG,WAAW,CAAA,kBAAA,CAAoB;EACnD,gBAAgB,EAAE,CAAA,EAAG,WAAW,CAAA,mBAAA,CAAqB;EACrD,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,aAAA,CAAe;EAC1C,OAAO,EAAE,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU;EACjC,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,aAAA,CAAe;EAC1C,YAAY,EAAE,CAAA,EAAG,WAAW,CAAA,cAAA,CAAgB;EAC5C,IAAI,EAAE,aAAa,IAAI;AACzB,CAAC;;"}
@@ -20,6 +20,7 @@ export default class DataLoader {
20
20
  constructor({ classNames, dataFilter, loadData, treeElement, triggerEvent, }: DataLoaderParams);
21
21
  deinit(): void;
22
22
  loadFromUrl(url: RequestUrl, node?: Node): Promise<void>;
23
+ private getTitleSpan;
23
24
  }
24
25
  export {};
25
26
  //# sourceMappingURL=dataLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataLoader.d.ts","sourceRoot":"","sources":["../src/dataLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,UAAU,gBAAgB;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,GACf,EAAE,gBAAgB;IASZ,MAAM,IAAI,IAAI;IAIR,WAAW,CACpB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,IAAI,GACZ,OAAO,CAAC,IAAI,CAAC;CAgDnB"}
1
+ {"version":3,"file":"dataLoader.d.ts","sourceRoot":"","sources":["../src/dataLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,UAAU,gBAAgB;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB;IASZ,MAAM,IAAI,IAAI;IAIR,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDrE,OAAO,CAAC,YAAY;CAKrB"}
package/lib/dataLoader.js CHANGED
@@ -1,16 +1,10 @@
1
1
  class DataLoader {
2
- _abortController;
3
- _classNames;
4
- _dataFilter;
5
- _loadData;
6
- _treeElement;
7
- _triggerEvent;
8
2
  constructor({
9
- classNames,
10
- dataFilter,
11
- loadData,
12
- treeElement,
13
- triggerEvent
3
+ _classNames: classNames,
4
+ _dataFilter: dataFilter,
5
+ _loadData: loadData,
6
+ _treeElement: treeElement,
7
+ _triggerEvent: triggerEvent
14
8
  }) {
15
9
  this._abortController = new AbortController();
16
10
  this._classNames = classNames;
@@ -19,26 +13,31 @@ class DataLoader {
19
13
  this._treeElement = treeElement;
20
14
  this._triggerEvent = triggerEvent;
21
15
  }
22
- deinit() {
16
+ _deinit() {
23
17
  this._abortController.abort();
24
18
  }
25
- async loadFromUrl(url, node) {
26
- const element = node?.element ?? this._treeElement;
19
+ async _loadFromUrl(url, node) {
20
+ let element = node?.element ?? this._treeElement;
27
21
  element.classList.add(this._classNames.loading);
22
+
23
+ // Tell screen readers that the children of the folder are loading
24
+ let titleSpan = node ? this._getTitleSpan(element) : null;
25
+ titleSpan?.setAttribute("aria-busy", "true");
28
26
  this._triggerEvent("tree.loading_data", {
29
27
  element,
30
28
  node
31
29
  });
32
- const stopLoading = () => {
30
+ let stopLoading = () => {
33
31
  element.classList.remove(this._classNames.loading);
32
+ titleSpan?.removeAttribute("aria-busy");
34
33
  this._triggerEvent("tree.loaded_data", {
35
34
  element,
36
35
  node
37
36
  });
38
37
  };
39
- const handleResponse = async response => {
38
+ let handleResponse = async response => {
40
39
  if (response.ok) {
41
- const data = await response.json();
40
+ let data = await response.json();
42
41
  stopLoading();
43
42
  this._loadData(this._dataFilter ? this._dataFilter(data) : data, node);
44
43
  } else {
@@ -48,9 +47,9 @@ class DataLoader {
48
47
  });
49
48
  }
50
49
  };
51
- const signal = this._abortController.signal;
52
- url.setSearchParam("_", Date.now().toString());
53
- return fetch(url.toString(), {
50
+ let signal = this._abortController.signal;
51
+ url._setSearchParam("_", Date.now().toString());
52
+ return fetch(url._value(), {
54
53
  headers: {
55
54
  "Content-Type": "application/json"
56
55
  },
@@ -66,6 +65,9 @@ class DataLoader {
66
65
  });
67
66
  });
68
67
  }
68
+ _getTitleSpan(element) {
69
+ return element.querySelector(`:scope > .${this._classNames.element} > .${this._classNames.title}`);
70
+ }
69
71
  }
70
72
 
71
73
  export { DataLoader as default };
@@ -1 +1 @@
1
- {"version":3,"file":"dataLoader.js","sources":["../src/dataLoader.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { LoadData, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeData } from \"./node\";\nimport type { DataFilter } from \"./options\";\nimport type RequestUrl from \"./requestUrl\";\n\ninterface DataLoaderParams {\n classNames: ClassNames;\n dataFilter?: DataFilter;\n loadData: LoadData;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private abortController: AbortController;\n private classNames: ClassNames;\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.abortController = new AbortController();\n this.classNames = classNames;\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public deinit(): void {\n this.abortController.abort();\n }\n\n public async loadFromUrl(\n url: RequestUrl,\n node?: Node,\n ): Promise<void> {\n const element = node?.element ?? this.treeElement;\n element.classList.add(this.classNames.loading);\n\n this.triggerEvent(\"tree.loading_data\", {\n element,\n node,\n });\n\n const stopLoading = (): void => {\n element.classList.remove(this.classNames.loading);\n this.triggerEvent(\"tree.loaded_data\", {\n element,\n node,\n });\n };\n\n const handleResponse = async (response: Response): Promise<void> => {\n if (response.ok) {\n const data = (await response.json()) as NodeData[];\n\n stopLoading();\n this.loadData(\n this.dataFilter ? this.dataFilter(data) : data,\n node\n );\n } else {\n stopLoading();\n\n this.triggerEvent(\"tree.load_failed\", { response });\n }\n };\n\n const signal = this.abortController.signal;\n url.setSearchParam(\"_\", Date.now().toString());\n\n return fetch(url.toString(), { headers: { \"Content-Type\": \"application/json\" }, signal })\n .then(handleResponse)\n .catch((error: unknown) => {\n if (this.abortController.signal.aborted) {\n // The request was aborted by deinit.\n return;\n }\n\n stopLoading();\n this.triggerEvent(\"tree.load_failed\", { error });\n });\n }\n}\n"],"names":["abortController","classNames","dataFilter","loadData","treeElement","triggerEvent"],"mappings":"AAce,MAAM,UAAU,CAAC;EACpBA,gBAAe;EACfC,WAAU;EACVC,WAAU;EACVC,SAAQ;EACRC,YAAW;EACXC,aAAY;AAEpB,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,WAAW;AACX,IAAA;AACc,GAAC,EAAE;AACjB,IAAA,IAAI,CAACL,gBAAe,GAAG,IAAI,eAAe,EAAE;IAC5C,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,aAAY,GAAG,YAAY;AACpC,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACL,gBAAe,CAAC,KAAK,EAAE;AAChC,EAAA;AAEA,EAAA,MAAa,WAAW,CACpB,GAAe,EACf,IAAW,EACE;IACb,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAACI,YAAW;IACjD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,OAAO,CAAC;AAE9C,IAAA,IAAI,CAACI,aAAY,CAAC,mBAAmB,EAAE;MACnC,OAAO;AACP,MAAA;AACJ,KAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAY;MAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACJ,WAAU,CAAC,OAAO,CAAC;AACjD,MAAA,IAAI,CAACI,aAAY,CAAC,kBAAkB,EAAE;QAClC,OAAO;AACP,QAAA;AACJ,OAAC,CAAC;IACN,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,MAAO,QAAkB,IAAoB;MAChE,IAAI,QAAQ,CAAC,EAAE,EAAE;AACb,QAAA,MAAM,IAAI,GAAI,MAAM,QAAQ,CAAC,IAAI,EAAiB;AAElD,QAAA,WAAW,EAAE;AACb,QAAA,IAAI,CAACF,SAAQ,CACT,IAAI,CAACD,WAAU,GAAG,IAAI,CAACA,WAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,IACJ,CAAC;AACL,MAAA,CAAC,MAAM;AACH,QAAA,WAAW,EAAE;AAEb,QAAA,IAAI,CAACG,aAAY,CAAC,kBAAkB,EAAE;AAAE,UAAA;AAAS,SAAC,CAAC;AACvD,MAAA;IACJ,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,IAAI,CAACL,gBAAe,CAAC,MAAM;AAC1C,IAAA,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAAE,MAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE;OAAoB;AAAE,MAAA;KAAQ,CAAC,CACpF,IAAI,CAAC,cAAc,CAAC,CACpB,KAAK,CAAE,KAAc,IAAK;AACvB,MAAA,IAAI,IAAI,CAACA,gBAAe,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC;AACA,QAAA;AACJ,MAAA;AAEA,MAAA,WAAW,EAAE;AACb,MAAA,IAAI,CAACK,aAAY,CAAC,kBAAkB,EAAE;AAAE,QAAA;AAAM,OAAC,CAAC;AACpD,IAAA,CAAC,CAAC;AACV,EAAA;AACJ;;"}
1
+ {"version":3,"file":"dataLoader.js","sources":["../src/dataLoader.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { LoadData, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeData } from \"./node\";\nimport type { DataFilter } from \"./options\";\nimport type RequestUrl from \"./requestUrl\";\n\ninterface DataLoaderParams {\n classNames: ClassNames;\n dataFilter?: DataFilter;\n loadData: LoadData;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private abortController: AbortController;\n private classNames: ClassNames;\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.abortController = new AbortController();\n this.classNames = classNames;\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public deinit(): void {\n this.abortController.abort();\n }\n\n public async loadFromUrl(url: RequestUrl, node?: Node): Promise<void> {\n const element = node?.element ?? this.treeElement;\n element.classList.add(this.classNames.loading);\n\n // Tell screen readers that the children of the folder are loading\n const titleSpan = node ? this.getTitleSpan(element) : null;\n titleSpan?.setAttribute(\"aria-busy\", \"true\");\n\n this.triggerEvent(\"tree.loading_data\", {\n element,\n node,\n });\n\n const stopLoading = (): void => {\n element.classList.remove(this.classNames.loading);\n titleSpan?.removeAttribute(\"aria-busy\");\n this.triggerEvent(\"tree.loaded_data\", {\n element,\n node,\n });\n };\n\n const handleResponse = async (response: Response): Promise<void> => {\n if (response.ok) {\n const data = (await response.json()) as NodeData[];\n\n stopLoading();\n this.loadData(this.dataFilter ? this.dataFilter(data) : data, node);\n } else {\n stopLoading();\n\n this.triggerEvent(\"tree.load_failed\", { response });\n }\n };\n\n const signal = this.abortController.signal;\n url.setSearchParam(\"_\", Date.now().toString());\n\n return fetch(url.value(), {\n headers: { \"Content-Type\": \"application/json\" },\n signal,\n })\n .then(handleResponse)\n .catch((error: unknown) => {\n if (this.abortController.signal.aborted) {\n // The request was aborted by deinit.\n return;\n }\n\n stopLoading();\n this.triggerEvent(\"tree.load_failed\", { error });\n });\n }\n\n private getTitleSpan(element: HTMLElement): HTMLElement | null {\n return element.querySelector<HTMLElement>(\n `:scope > .${this.classNames.element} > .${this.classNames.title}`,\n );\n }\n}\n"],"names":["abortController","classNames","dataFilter","loadData","treeElement","triggerEvent","deinit","loadFromUrl","getTitleSpan","setSearchParam","value"],"mappings":"AAce,MAAM,UAAU,CAAC;AAQ9B,EAAA,WAAW,CAAC;IACV,WAAA,EAAA,UAAU;IACV,WAAA,EAAA,UAAU;IACV,SAAA,EAAA,QAAQ;IACR,YAAA,EAAA,WAAW;AACX,IAAA,aAAA,EAAA;AACgB,GAAC,EAAE;AACnB,IAAA,IAAI,CAACA,gBAAe,GAAG,IAAI,eAAe,EAAE;IAC5C,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,aAAY,GAAG,YAAY;AAClC,EAAA;AAEOC,EAAAA,OAAMA,GAAS;AACpB,IAAA,IAAI,CAACN,gBAAe,CAAC,KAAK,EAAE;AAC9B,EAAA;AAEA,EAAA,MAAaO,YAAWA,CAAC,GAAe,EAAE,IAAW,EAAiB;IACpE,IAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAACH,YAAW;IACjD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,OAAO,CAAC;;AAE9C;IACA,IAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAACO,aAAY,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1D,IAAA,SAAS,EAAE,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AAE5C,IAAA,IAAI,CAACH,aAAY,CAAC,mBAAmB,EAAE;MACrC,OAAO;AACP,MAAA;AACF,KAAC,CAAC;IAEF,IAAM,WAAW,GAAG,MAAY;MAC9B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACJ,WAAU,CAAC,OAAO,CAAC;AACjD,MAAA,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC;AACvC,MAAA,IAAI,CAACI,aAAY,CAAC,kBAAkB,EAAE;QACpC,OAAO;AACP,QAAA;AACF,OAAC,CAAC;IACJ,CAAC;AAED,IAAA,IAAM,cAAc,GAAG,MAAO,QAAkB,IAAoB;MAClE,IAAI,QAAQ,CAAC,EAAE,EAAE;AACf,QAAA,IAAM,IAAI,GAAI,MAAM,QAAQ,CAAC,IAAI,EAAiB;AAElD,QAAA,WAAW,EAAE;AACb,QAAA,IAAI,CAACF,SAAQ,CAAC,IAAI,CAACD,WAAU,GAAG,IAAI,CAACA,WAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC;AACrE,MAAA,CAAC,MAAM;AACL,QAAA,WAAW,EAAE;AAEb,QAAA,IAAI,CAACG,aAAY,CAAC,kBAAkB,EAAE;AAAE,UAAA;AAAS,SAAC,CAAC;AACrD,MAAA;IACF,CAAC;AAED,IAAA,IAAM,MAAM,GAAG,IAAI,CAACL,gBAAe,CAAC,MAAM;AAC1C,IAAA,GAAG,CAACS,eAAc,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C,IAAA,OAAO,KAAK,CAAC,GAAG,CAACC,MAAK,EAAE,EAAE;AACxB,MAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE;OAAoB;AAC/C,MAAA;KACD,CAAC,CACC,IAAI,CAAC,cAAc,CAAC,CACpB,KAAK,CAAE,KAAc,IAAK;AACzB,MAAA,IAAI,IAAI,CAACV,gBAAe,CAAC,MAAM,CAAC,OAAO,EAAE;AACvC;AACA,QAAA;AACF,MAAA;AAEA,MAAA,WAAW,EAAE;AACb,MAAA,IAAI,CAACK,aAAY,CAAC,kBAAkB,EAAE;AAAE,QAAA;AAAM,OAAC,CAAC;AAClD,IAAA,CAAC,CAAC;AACN,EAAA;EAEQG,aAAYA,CAAC,OAAoB,EAAsB;AAC7D,IAAA,OAAO,OAAO,CAAC,aAAa,CAC1B,CAAA,UAAA,EAAa,IAAI,CAACP,WAAU,CAAC,OAAO,OAAO,IAAI,CAACA,WAAU,CAAC,KAAK,EAClE,CAAC;AACH,EAAA;AACF;;"}
@@ -2,12 +2,12 @@ function binarySearch(items, compareFn) {
2
2
  let low = 0;
3
3
  let high = items.length;
4
4
  while (low < high) {
5
- const mid = low + high >> 1;
6
- const item = items[mid];
5
+ let mid = low + high >> 1;
6
+ let item = items[mid];
7
7
  if (item === undefined) {
8
8
  return null;
9
9
  }
10
- const compareResult = compareFn(item);
10
+ let compareResult = compareFn(item);
11
11
  if (compareResult > 0) {
12
12
  high = mid;
13
13
  } else if (compareResult < 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"binarySearch.js","sources":["../../src/dragAndDropHandler/binarySearch.ts"],"sourcesContent":["function binarySearch<T>(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAI,KAAU,EAAE,SAA2B,EAAY;EACxE,IAAI,GAAG,GAAG,CAAC;AACX,EAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM;EAEvB,OAAO,GAAG,GAAG,IAAI,EAAE;AACf,IAAA,MAAM,GAAG,GAAI,GAAG,GAAG,IAAI,IAAK,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;IAEvB,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,MAAA,OAAO,IAAI;AACf,IAAA;AAEA,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;IAErC,IAAI,aAAa,GAAG,CAAC,EAAE;AACnB,MAAA,IAAI,GAAG,GAAG;AACd,IAAA,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,EAAE;MAC1B,GAAG,GAAG,GAAG,GAAG,CAAC;AACjB,IAAA,CAAC,MAAM;AACH,MAAA,OAAO,IAAI;AACf,IAAA;AACJ,EAAA;AAEA,EAAA,OAAO,IAAI;AACf;;"}
1
+ {"version":3,"file":"binarySearch.js","sources":["../../src/dragAndDropHandler/binarySearch.ts"],"sourcesContent":["function binarySearch<T>(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAI,KAAU,EAAE,SAA2B,EAAY;EAC1E,IAAI,GAAG,GAAG,CAAC;AACX,EAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM;EAEvB,OAAO,GAAG,GAAG,IAAI,EAAE;AACjB,IAAA,IAAM,GAAG,GAAI,GAAG,GAAG,IAAI,IAAK,CAAC;AAC7B,IAAA,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;IAEvB,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,IAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;IAErC,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,MAAA,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,EAAE;MAC5B,GAAG,GAAG,GAAG,GAAG,CAAC;AACf,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,IAAI;AACb,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,IAAI;AACb;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"dragElement.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/dragElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,UAAU,iBAAiB;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,cAAM,WAAW;IACb,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,GACd,EAAE,iBAAiB;IASb,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC,MAAM,IAAI,IAAI;IAIrB,OAAO,CAAC,aAAa;CAkBxB;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"dragElement.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/dragElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,UAAU,iBAAiB;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,cAAM,WAAW;IACf,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,GACZ,EAAE,iBAAiB;IASb,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC,MAAM,IAAI,IAAI;IAIrB,OAAO,CAAC,aAAa;CAmBtB;AAED,eAAe,WAAW,CAAC"}
@@ -1,33 +1,31 @@
1
1
  class DragElement {
2
- _element;
3
- _offsetX;
4
- _offsetY;
5
2
  constructor({
6
- autoEscape,
7
- classNames,
8
- nodeName,
9
- offsetX,
10
- offsetY,
11
- treeElement
3
+ _autoEscape: autoEscape,
4
+ _classNames: classNames,
5
+ _nodeName: nodeName,
6
+ _offsetX: offsetX,
7
+ _offsetY: offsetY,
8
+ _treeElement: treeElement
12
9
  }) {
13
10
  this._offsetX = offsetX;
14
11
  this._offsetY = offsetY;
15
12
  this._element = this._createElement(nodeName, autoEscape, classNames);
16
- treeElement.appendChild(this._element);
13
+ treeElement.append(this._element);
17
14
  }
18
- move(pageX, pageY) {
15
+ _move(pageX, pageY) {
19
16
  this._element.style.left = `${pageX - this._offsetX}px`;
20
17
  this._element.style.top = `${pageY - this._offsetY}px`;
21
18
  }
22
- remove() {
19
+ _remove() {
23
20
  this._element.remove();
24
21
  }
25
22
  _createElement(nodeName, autoEscape, classNames) {
26
- const element = document.createElement("span");
23
+ let element = document.createElement("span");
27
24
  element.classList.add(classNames.title, classNames.dragging);
28
25
  if (autoEscape) {
29
26
  element.textContent = nodeName;
30
27
  } else {
28
+ // eslint-disable-next-line no-unsanitized/property -- the user opted out of escaping with autoEscape: false
31
29
  element.innerHTML = nodeName;
32
30
  }
33
31
  element.style.position = "absolute";
@@ -1 +1 @@
1
- {"version":3,"file":"dragElement.js","sources":["../../src/dragAndDropHandler/dragElement.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\n\ninterface DragElementParams {\n autoEscape: boolean;\n classNames: ClassNames;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n classNames,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape, classNames);\n\n treeElement.appendChild(this.element);\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n\n private createElement(\n nodeName: string,\n autoEscape: boolean,\n classNames: ClassNames,\n ) {\n const element = document.createElement(\"span\");\n element.classList.add(classNames.title, classNames.dragging);\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n}\n\nexport default DragElement;\n"],"names":["element","offsetX","offsetY","createElement"],"mappings":"AAWA,MAAM,WAAW,CAAC;EACNA,QAAO;EACPC,QAAO;EACPC,QAAO;AAEf,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;AACP,IAAA;AACe,GAAC,EAAE;IAClB,IAAI,CAACD,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,QAAO,GAAG,OAAO;AAEtB,IAAA,IAAI,CAACF,QAAO,GAAG,IAAI,CAACG,cAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;AAEnE,IAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAACH,QAAO,CAAC;AACzC,EAAA;AAEO,EAAA,IAAI,CAAC,KAAa,EAAE,KAAa,EAAQ;AAC5C,IAAA,IAAI,CAACA,QAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACC,QAAO,CAAA,EAAA,CAAI;AACrD,IAAA,IAAI,CAACD,QAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACE,QAAO,CAAA,EAAA,CAAI;AACxD,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACF,QAAO,CAAC,MAAM,EAAE;AACzB,EAAA;AAEQG,EAAAA,cAAaA,CACjB,QAAgB,EAChB,UAAmB,EACnB,UAAsB,EACxB;AACE,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,IAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;AAE5D,IAAA,IAAI,UAAU,EAAE;MACZ,OAAO,CAAC,WAAW,GAAG,QAAQ;AAClC,IAAA,CAAC,MAAM;MACH,OAAO,CAAC,SAAS,GAAG,QAAQ;AAChC,IAAA;AAEA,IAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAEnC,IAAA,OAAO,OAAO;AAClB,EAAA;AACJ;;"}
1
+ {"version":3,"file":"dragElement.js","sources":["../../src/dragAndDropHandler/dragElement.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\n\ninterface DragElementParams {\n autoEscape: boolean;\n classNames: ClassNames;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n classNames,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape, classNames);\n\n treeElement.append(this.element);\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n\n private createElement(\n nodeName: string,\n autoEscape: boolean,\n classNames: ClassNames,\n ) {\n const element = document.createElement(\"span\");\n element.classList.add(classNames.title, classNames.dragging);\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n // eslint-disable-next-line no-unsanitized/property -- the user opted out of escaping with autoEscape: false\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n}\n\nexport default DragElement;\n"],"names":["offsetX","offsetY","element","createElement","move","remove"],"mappings":"AAWA,MAAM,WAAW,CAAC;AAKhB,EAAA,WAAW,CAAC;IACV,WAAA,EAAA,UAAU;IACV,WAAA,EAAA,UAAU;IACV,SAAA,EAAA,QAAQ;IACR,QAAA,EAAA,OAAO;IACP,QAAA,EAAA,OAAO;AACP,IAAA,YAAA,EAAA;AACiB,GAAC,EAAE;IACpB,IAAI,CAACA,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,QAAO,GAAG,OAAO;AAEtB,IAAA,IAAI,CAACC,QAAO,GAAG,IAAI,CAACC,cAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;AAEnE,IAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAACD,QAAO,CAAC;AAClC,EAAA;AAEOE,EAAAA,KAAIA,CAAC,KAAa,EAAE,KAAa,EAAQ;AAC9C,IAAA,IAAI,CAACF,QAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACF,QAAO,CAAA,EAAA,CAAI;AACrD,IAAA,IAAI,CAACE,QAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACD,QAAO,CAAA,EAAA,CAAI;AACtD,EAAA;AAEOI,EAAAA,OAAMA,GAAS;AACpB,IAAA,IAAI,CAACH,QAAO,CAAC,MAAM,EAAE;AACvB,EAAA;AAEQC,EAAAA,cAAaA,CACnB,QAAgB,EAChB,UAAmB,EACnB,UAAsB,EACtB;AACA,IAAA,IAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,IAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;AAE5D,IAAA,IAAI,UAAU,EAAE;MACd,OAAO,CAAC,WAAW,GAAG,QAAQ;AAChC,IAAA,CAAC,MAAM;AACL;MACA,OAAO,CAAC,SAAS,GAAG,QAAQ;AAC9B,IAAA;AAEA,IAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAEnC,IAAA,OAAO,OAAO;AAChB,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateHitAreas.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/generateHitAreas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC,UAAU,WAAW;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,EACV,aAAa,IAAI,KAClB,WAAW,EA8Gb,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACjC,UAAU,OAAO,EAAE,EACnB,kBAAkB,WAAW,EAAE,EAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,SAsBjB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACtC,cAAc,WAAW,EAAE,EAC3B,YAAY,MAAM,KACnB,OAAO,EA4BT,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,MAAM,IAAI,EAAE,aAAa,IAAI,EAAE,YAAY,MAAM,cAItE,CAAC;AAEN,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"generateHitAreas.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/generateHitAreas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC,UAAU,WAAW;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,EACV,aAAa,IAAI,KAChB,WAAW,EA8Gb,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,UAAU,OAAO,EAAE,EACnB,kBAAkB,WAAW,EAAE,EAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,SAsBf,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,cAAc,WAAW,EAAE,EAC3B,YAAY,MAAM,KACjB,OAAO,EAuBT,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,MAAM,IAAI,EAAE,aAAa,IAAI,EAAE,YAAY,MAAM,cAIxE,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { getOffsetTop } from '../positionUtils.js';
2
2
  import iterateVisibleNodes from './iterateVisibleNodes.js';
3
3
 
4
- const generateHitPositions = (tree, currentNode) => {
5
- const hitPositions = [];
4
+ let generateHitPositions = (tree, currentNode) => {
5
+ let hitPositions = [];
6
6
  let lastTop = 0;
7
- const addHitPosition = (node, position, top) => {
7
+ let addHitPosition = (node, position, top) => {
8
8
  hitPositions.push({
9
9
  node,
10
10
  position,
@@ -12,7 +12,7 @@ const generateHitPositions = (tree, currentNode) => {
12
12
  });
13
13
  lastTop = top;
14
14
  };
15
- const handleAfterOpenFolder = (node, nextNode) => {
15
+ let handleAfterOpenFolder = (node, nextNode) => {
16
16
  if (node === currentNode || nextNode === currentNode) {
17
17
  // Cannot move before or after current item
18
18
  addHitPosition(node, null, lastTop);
@@ -20,8 +20,8 @@ const generateHitPositions = (tree, currentNode) => {
20
20
  addHitPosition(node, "after", lastTop);
21
21
  }
22
22
  };
23
- const handleClosedFolder = (node, nextNode, element) => {
24
- const top = getOffsetTop(element);
23
+ let handleClosedFolder = (node, nextNode, element) => {
24
+ let top = getOffsetTop(element);
25
25
  if (node === currentNode) {
26
26
  // Cannot move after current item
27
27
  addHitPosition(node, null, top);
@@ -34,13 +34,13 @@ const generateHitPositions = (tree, currentNode) => {
34
34
  }
35
35
  }
36
36
  };
37
- const handleFirstNode = node => {
37
+ let handleFirstNode = node => {
38
38
  if (node !== currentNode && node.element) {
39
39
  addHitPosition(node, "before", getOffsetTop(node.element));
40
40
  }
41
41
  };
42
- const handleNode = (node, nextNode, element) => {
43
- const top = getOffsetTop(element);
42
+ let handleNode = (node, nextNode, element) => {
43
+ let top = getOffsetTop(element);
44
44
  if (node === currentNode) {
45
45
  // Cannot move inside current item
46
46
  addHitPosition(node, null, top);
@@ -54,13 +54,13 @@ const generateHitPositions = (tree, currentNode) => {
54
54
  addHitPosition(node, "after", top);
55
55
  }
56
56
  };
57
- const handleOpenFolder = (node, element) => {
57
+ let handleOpenFolder = (node, element) => {
58
58
  if (node === currentNode) {
59
59
  // Cannot move inside current item
60
60
 
61
61
  // Dnd over the current element is not possible: add a position with type None for the top and the bottom.
62
- const top = getOffsetTop(element);
63
- const height = element.clientHeight;
62
+ let top = getOffsetTop(element);
63
+ let height = element.clientHeight;
64
64
  addHitPosition(node, null, top);
65
65
  if (height > 5) {
66
66
  // Subtract 5 pixels to allow more space for the next element.
@@ -80,21 +80,21 @@ const generateHitPositions = (tree, currentNode) => {
80
80
  return true;
81
81
  };
82
82
  iterateVisibleNodes(tree, {
83
- handleAfterOpenFolder,
84
- handleClosedFolder,
85
- handleFirstNode,
86
- handleNode,
87
- handleOpenFolder
83
+ _handleAfterOpenFolder: handleAfterOpenFolder,
84
+ _handleClosedFolder: handleClosedFolder,
85
+ _handleFirstNode: handleFirstNode,
86
+ _handleNode: handleNode,
87
+ _handleOpenFolder: handleOpenFolder
88
88
  });
89
89
  return hitPositions;
90
90
  };
91
- const generateHitAreasForGroup = (hitAreas, positionsInGroup, top, bottom) => {
91
+ let generateHitAreasForGroup = (hitAreas, positionsInGroup, top, bottom) => {
92
92
  // limit positions in group
93
- const positionCount = Math.min(positionsInGroup.length, 4);
94
- const areaHeight = Math.round((bottom - top) / positionCount);
93
+ let positionCount = Math.min(positionsInGroup.length, 4);
94
+ let areaHeight = Math.round((bottom - top) / positionCount);
95
95
  let areaTop = top;
96
96
  for (let i = 0; i < positionCount; i++) {
97
- const position = positionsInGroup[i];
97
+ let position = positionsInGroup[i];
98
98
  if (position.position) {
99
99
  hitAreas.push({
100
100
  bottom: areaTop + areaHeight,
@@ -106,14 +106,14 @@ const generateHitAreasForGroup = (hitAreas, positionsInGroup, top, bottom) => {
106
106
  areaTop += areaHeight;
107
107
  }
108
108
  };
109
- const generateHitAreasFromPositions = (hitPositions, treeBottom) => {
109
+ let generateHitAreasFromPositions = (hitPositions, treeBottom) => {
110
110
  if (!hitPositions.length) {
111
111
  return [];
112
112
  }
113
113
  let previousTop = hitPositions[0].top;
114
114
  let group = [];
115
- const hitAreas = [];
116
- for (const position of hitPositions) {
115
+ let hitAreas = [];
116
+ for (let position of hitPositions) {
117
117
  if (position.top !== previousTop && group.length) {
118
118
  generateHitAreasForGroup(hitAreas, group, previousTop, position.top);
119
119
  previousTop = position.top;
@@ -124,7 +124,7 @@ const generateHitAreasFromPositions = (hitPositions, treeBottom) => {
124
124
  generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);
125
125
  return hitAreas;
126
126
  };
127
- const generateHitAreas = (tree, currentNode, treeBottom) => generateHitAreasFromPositions(generateHitPositions(tree, currentNode), treeBottom);
127
+ let generateHitAreas = (tree, currentNode, treeBottom) => generateHitAreasFromPositions(generateHitPositions(tree, currentNode), treeBottom);
128
128
 
129
129
  export { generateHitAreas as default, generateHitAreasForGroup, generateHitAreasFromPositions, generateHitPositions };
130
130
  //# sourceMappingURL=generateHitAreas.js.map