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
@@ -2,45 +2,46 @@ import BorderDropHint from './borderDropHint.js';
2
2
  import GhostDropHint from './ghostDropHint.js';
3
3
 
4
4
  class NodeElement {
5
- element;
6
- node;
7
- _classNames;
8
- _getScrollLeft;
9
- _tabIndex;
10
- _treeElement;
11
5
  constructor({
12
- classNames,
13
- getScrollLeft,
14
- node,
15
- tabIndex,
16
- treeElement
6
+ _classNames: classNames,
7
+ _getScrollLeft: getScrollLeft,
8
+ _node: node,
9
+ _tabIndex: tabIndex,
10
+ _treeElement: treeElement
17
11
  }) {
18
12
  this._classNames = classNames;
19
13
  this._getScrollLeft = getScrollLeft;
20
- this.node = node;
14
+ this._node = node;
21
15
  this._tabIndex = tabIndex;
22
16
  this._treeElement = treeElement;
23
- node.element ??= this._treeElement;
24
- this.element = node.element;
17
+
18
+ // The root node has no element of its own; it uses the tree element.
19
+ this._element = node.element ?? this._treeElement;
25
20
  }
26
- addDropHint(position) {
27
- if (this._mustShowBorderDropHint(position)) {
28
- return new BorderDropHint(this.element, this._getScrollLeft(), this._classNames);
29
- } else {
30
- return new GhostDropHint(this.node, this.element, position, this._classNames);
31
- }
21
+ _addDropHint(position) {
22
+ return this._mustShowBorderDropHint(position) ? new BorderDropHint(this._element, this._getScrollLeft(), this._classNames) : new GhostDropHint(this._node, this._element, position, this._classNames);
32
23
  }
33
- deselect() {
34
- this.element.classList.remove(this._classNames.selected);
35
- const titleSpan = this._getTitleSpan();
36
- titleSpan.removeAttribute("tabindex");
24
+ _deselect() {
25
+ if (!this._isRendered()) {
26
+ return;
27
+ }
28
+ this._element.classList.remove(this._classNames.selected);
29
+ let titleSpan = this._getTitleSpan();
30
+
31
+ // Check for null or undefined
32
+ if (this._tabIndex != null) {
33
+ titleSpan.setAttribute("tabindex", "-1");
34
+ }
37
35
  titleSpan.setAttribute("aria-selected", "false");
38
36
  titleSpan.blur();
39
37
  }
40
- select(mustSetFocus) {
41
- this.element.classList.add(this._classNames.selected);
42
- const titleSpan = this._getTitleSpan();
43
- const tabIndex = this._tabIndex;
38
+ _select(mustSetFocus) {
39
+ if (!this._isRendered()) {
40
+ return;
41
+ }
42
+ this._element.classList.add(this._classNames.selected);
43
+ let titleSpan = this._getTitleSpan();
44
+ let tabIndex = this._tabIndex;
44
45
 
45
46
  // Check for null or undefined
46
47
  if (tabIndex != null) {
@@ -52,10 +53,17 @@ class NodeElement {
52
53
  }
53
54
  }
54
55
  _getTitleSpan() {
55
- return this.element.querySelector(`:scope > .${this._classNames.element} > span.${this._classNames.title}`);
56
+ return this._element.querySelector(`:scope > .${this._classNames.element} > span.${this._classNames.title}`);
56
57
  }
57
58
  _getUl() {
58
- return this.element.querySelector(":scope > ul");
59
+ return this._element.querySelector(":scope > ul");
60
+ }
61
+
62
+ /* A node inside a closed folder is not rendered. Its selected and open
63
+ * state is applied when it is rendered.
64
+ */
65
+ _isRendered() {
66
+ return Boolean(this._node.element);
59
67
  }
60
68
  _mustShowBorderDropHint(position) {
61
69
  return position === "inside";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n classNames: ClassNames;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n protected classNames: ClassNames;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n\n constructor({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.classNames = classNames;\n this.getScrollLeft = getScrollLeft;\n this.node = node;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n node.element ??= this.treeElement;\n this.element = node.element;\n\n }\n\n public addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(\n this.element,\n this.getScrollLeft(),\n this.classNames,\n );\n } else {\n return new GhostDropHint(\n this.node,\n this.element,\n position,\n this.classNames,\n );\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > span.${this.classNames.title}`,\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n"],"names":["classNames","getScrollLeft","tabIndex","treeElement","mustShowBorderDropHint","getTitleSpan","getUl"],"mappings":";;;AAgBA,MAAM,WAAW,CAAC;EACP,OAAO;EACP,IAAI;EACDA,WAAU;EACZC,cAAa;EACbC,SAAQ;EACRC,YAAW;AAEnB,EAAA,WAAW,CAAC;IACR,UAAU;IACV,aAAa;IACb,IAAI;IACJ,QAAQ;AACR,IAAA;AACe,GAAC,EAAE;IAClB,IAAI,CAACH,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,cAAa,GAAG,aAAa;IAClC,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;AAE9B,IAAA,IAAI,CAAC,OAAO,KAAK,IAAI,CAACA,YAAW;AACjC,IAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAE/B,EAAA;EAEO,WAAW,CAAC,QAAkB,EAAY;AAC7C,IAAA,IAAI,IAAI,CAACC,uBAAsB,CAAC,QAAQ,CAAC,EAAE;AACvC,MAAA,OAAO,IAAI,cAAc,CACrB,IAAI,CAAC,OAAO,EACZ,IAAI,CAACH,cAAa,EAAE,EACpB,IAAI,CAACD,WACT,CAAC;AACL,IAAA,CAAC,MAAM;AACH,MAAA,OAAO,IAAI,aAAa,CACpB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,IAAI,CAACA,WACT,CAAC;AACL,IAAA;AACJ,EAAA;AAEO,EAAA,QAAQ,GAAS;AACpB,IAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACA,WAAU,CAAC,QAAQ,CAAC;AAEvD,IAAA,MAAM,SAAS,GAAG,IAAI,CAACK,aAAY,EAAE;AACrC,IAAA,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC;AACrC,IAAA,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;IAEhD,SAAS,CAAC,IAAI,EAAE;AACpB,EAAA;EAEO,MAAM,CAAC,YAAqB,EAAQ;AACvC,IAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACL,WAAU,CAAC,QAAQ,CAAC;AAEpD,IAAA,MAAM,SAAS,GAAG,IAAI,CAACK,aAAY,EAAE;AACrC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAACH,SAAQ;;AAE9B;IACA,IAAI,QAAQ,IAAI,IAAI,EAAE;MAClB,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC3D,IAAA;AAEA,IAAA,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AAE/C,IAAA,IAAI,YAAY,EAAE;MACd,SAAS,CAAC,KAAK,EAAE;AACrB,IAAA;AACJ,EAAA;AAEUG,EAAAA,aAAYA,GAAoB;AACtC,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAC7B,aAAa,IAAI,CAACL,WAAU,CAAC,OAAO,WAAW,IAAI,CAACA,WAAU,CAAC,KAAK,EACxE,CAAC;AACL,EAAA;AAEUM,EAAAA,MAAKA,GAAqB;AAChC,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;AACpD,EAAA;EAEUF,uBAAsBA,CAAC,QAAkB,EAAW;IAC1D,OAAO,QAAQ,KAAK,QAAQ;AAChC,EAAA;AACJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n classNames: ClassNames;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n protected classNames: ClassNames;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n\n constructor({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.classNames = classNames;\n this.getScrollLeft = getScrollLeft;\n this.node = node;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n // The root node has no element of its own; it uses the tree element.\n this.element = node.element ?? this.treeElement;\n }\n\n public addDropHint(position: Position): DropHint {\n return this.mustShowBorderDropHint(position)\n ? new BorderDropHint(this.element, this.getScrollLeft(), this.classNames)\n : new GhostDropHint(this.node, this.element, position, this.classNames);\n }\n\n public deselect(): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.remove(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n\n // Check for null or undefined\n if (this.tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", \"-1\");\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public select(mustSetFocus: boolean): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.add(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > span.${this.classNames.title}`,\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement | null {\n return this.element.querySelector(\":scope > ul\");\n }\n\n /* A node inside a closed folder is not rendered. Its selected and open\n * state is applied when it is rendered.\n */\n protected isRendered(): boolean {\n return Boolean(this.node.element);\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n"],"names":["classNames","getScrollLeft","node","tabIndex","treeElement","element","addDropHint","mustShowBorderDropHint","deselect","isRendered","getTitleSpan","select","getUl"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../src/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnD,UAAU,sBAAuB,SAAQ,UAAU;IAC/C,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,wBAAwB,GACjC,MAAM,QAAQ,KACf,IAAI,IAAI,sBAGuB,CAAC"}
1
+ {"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../src/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnD,UAAU,sBAAuB,SAAQ,UAAU;IACjD,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,wBAAwB,GACnC,MAAM,QAAQ,KACb,IAAI,IAAI,sBAGmB,CAAC"}
package/lib/nodeUtils.js CHANGED
@@ -1,4 +1,4 @@
1
- const isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && data.children instanceof Array;
1
+ let isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && Array.isArray(data.children);
2
2
 
3
3
  export { isNodeRecordWithChildren };
4
4
  //# sourceMappingURL=nodeUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeUtils.js","sources":["../src/nodeUtils.ts"],"sourcesContent":["import type { NodeData, NodeRecord } from \"./node\";\n\ninterface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n"],"names":[],"mappings":"MAMa,wBAAwB,GACjC,IAAc,IAEd,OAAO,IAAI,KAAK,QAAQ,IACxB,UAAU,IAAI,IAAI,IAClB,IAAI,CAAC,QAAQ,YAAY;;"}
1
+ {"version":3,"file":"nodeUtils.js","sources":["../src/nodeUtils.ts"],"sourcesContent":["import type { NodeData, NodeRecord } from \"./node\";\n\ninterface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n Array.isArray(data.children);\n"],"names":[],"mappings":"AAMO,IAAM,wBAAwB,GACnC,IAAc,IAEd,OAAO,IAAI,KAAK,QAAQ,IACxB,UAAU,IAAI,IAAI,IAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ;;"}
package/lib/options.d.ts CHANGED
@@ -16,10 +16,25 @@ export interface TreeElementOptions {
16
16
  * The duration of the slide animation: `"fast"` is 200ms, `"slow"` is
17
17
  * 600ms, a number is milliseconds.
18
18
  *
19
- * @defaultValue `"fast"`
19
+ * @defaultValue `"fast"`, or `0` when the user prefers reduced motion
20
+ * (`prefers-reduced-motion: reduce`).
20
21
  * @group Appearance
21
22
  */
22
23
  animationSpeed: AnimationSpeed;
24
+ /**
25
+ * The accessible name of the tree, set as `aria-label` on the root `ul`.
26
+ * Use `ariaLabelledBy` instead when the name is visible on the page.
27
+ *
28
+ * @group Appearance
29
+ */
30
+ ariaLabel?: string;
31
+ /**
32
+ * The id of the element that names the tree, set as `aria-labelledby` on
33
+ * the root `ul`.
34
+ *
35
+ * @group Appearance
36
+ */
37
+ ariaLabelledBy?: string;
23
38
  /**
24
39
  * Escape node names. With `false`, names are inserted as html — only do
25
40
  * that for data you control.
@@ -109,7 +124,7 @@ export interface TreeElementOptions {
109
124
  */
110
125
  dragAndDrop: boolean;
111
126
  /**
112
- * Handle the arrow keys when the focus is on the tree. See
127
+ * Handle the keyboard when the focus is on the tree. See
113
128
  * [Selection](/guide/selection#keyboard-navigation).
114
129
  *
115
130
  * @defaultValue `true`
@@ -282,7 +297,8 @@ export interface TreeElementOptions {
282
297
  startDndDelay?: number;
283
298
  /**
284
299
  * The `tabindex` of the selected node's title, which is what makes the
285
- * tree focusable.
300
+ * tree focusable. When no node is selected, the first node gets it. The
301
+ * other nodes get `-1`.
286
302
  *
287
303
  * @defaultValue `0`
288
304
  * @group Selection
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  // Get the top position of the HTML element.
2
- const getOffsetTop = element => getElementPosition(element).top;
2
+ let getOffsetTop = element => getElementPosition(element).top;
3
3
 
4
4
  // Get the top left position of the HTML element.
5
- const getElementPosition = element => {
6
- const rect = element.getBoundingClientRect();
5
+ let getElementPosition = element => {
6
+ let rect = element.getBoundingClientRect();
7
7
  return {
8
8
  left: rect.x + window.scrollX,
9
9
  top: rect.y + window.scrollY
@@ -1 +1 @@
1
- {"version":3,"file":"positionUtils.js","sources":["../src/positionUtils.ts"],"sourcesContent":["interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n"],"names":[],"mappings":"AAKA;AACO,MAAM,YAAY,GAAI,OAAoB,IAC/C,kBAAkB,CAAC,OAAO,CAAC,CAAC;;AAE9B;AACO,MAAM,kBAAkB,GAAI,OAAoB,IAAsB;AAC3E,EAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;EAE5C,OAAO;AACL,IAAA,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO;AAC7B,IAAA,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;GACtB;AACH;;"}
1
+ {"version":3,"file":"positionUtils.js","sources":["../src/positionUtils.ts"],"sourcesContent":["interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n"],"names":[],"mappings":"AAKA;AACO,IAAM,YAAY,GAAI,OAAoB,IAC/C,kBAAkB,CAAC,OAAO,CAAC,CAAC;;AAE9B;AACO,IAAM,kBAAkB,GAAI,OAAoB,IAAsB;AAC3E,EAAA,IAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;EAE5C,OAAO;AACL,IAAA,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO;AAC7B,IAAA,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;GACtB;AACH;;"}
@@ -3,7 +3,7 @@ declare class RequestUrl {
3
3
  private url;
4
4
  constructor(inputUrl: string);
5
5
  setSearchParam(key: string, value: string): void;
6
- toString(): string;
6
+ value(): string;
7
7
  }
8
8
  export default RequestUrl;
9
9
  //# sourceMappingURL=requestUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requestUrl.d.ts","sourceRoot":"","sources":["../src/requestUrl.ts"],"names":[],"mappings":"AAaA,cAAM,UAAU;IACd,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,GAAG,CAAM;gBAEL,QAAQ,EAAE,MAAM;IAU5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIzC,QAAQ;CAOT;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"requestUrl.d.ts","sourceRoot":"","sources":["../src/requestUrl.ts"],"names":[],"mappings":"AAQA,cAAM,UAAU;IACd,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,GAAG,CAAM;gBAEL,QAAQ,EAAE,MAAM;IAU5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIzC,KAAK;CAKN;AAED,eAAe,UAAU,CAAC"}
package/lib/requestUrl.js CHANGED
@@ -1,17 +1,10 @@
1
1
  // Url class for absolute and relative urls.
2
2
 
3
- const isAbsoluteUrl = inputUrl => {
4
- try {
5
- new URL(inputUrl);
6
- return true;
7
- } catch {
8
- return false;
9
- }
3
+ let isAbsoluteUrl = inputUrl => {
4
+ return URL.canParse(inputUrl);
10
5
  };
11
- const LOCALHOST = "http://localhost";
6
+ let LOCALHOST = "http://localhost";
12
7
  class RequestUrl {
13
- _isAbsolute;
14
- _url;
15
8
  constructor(inputUrl) {
16
9
  if (isAbsoluteUrl(inputUrl)) {
17
10
  this._url = new URL(inputUrl);
@@ -21,15 +14,11 @@ class RequestUrl {
21
14
  this._isAbsolute = false;
22
15
  }
23
16
  }
24
- setSearchParam(key, value) {
17
+ _setSearchParam(key, value) {
25
18
  this._url.searchParams.set(key, value);
26
19
  }
27
- toString() {
28
- if (this._isAbsolute) {
29
- return this._url.href;
30
- } else {
31
- return this._url.href.slice(LOCALHOST.length);
32
- }
20
+ _value() {
21
+ return this._isAbsolute ? this._url.href : this._url.href.slice(LOCALHOST.length);
33
22
  }
34
23
  }
35
24
 
@@ -1 +1 @@
1
- {"version":3,"file":"requestUrl.js","sources":["../src/requestUrl.ts"],"sourcesContent":["// Url class for absolute and relative urls.\n\nconst isAbsoluteUrl = (inputUrl: string) => {\n try {\n new URL(inputUrl);\n return true;\n } catch {\n return false;\n }\n}\n\nconst LOCALHOST = \"http://localhost\";\n\nclass RequestUrl {\n private isAbsolute: boolean;\n private url: URL;\n\n constructor(inputUrl: string) {\n if (isAbsoluteUrl(inputUrl)) {\n this.url = new URL(inputUrl);\n this.isAbsolute = true;\n } else {\n this.url = new URL(inputUrl, LOCALHOST);\n this.isAbsolute = false;\n }\n }\n\n setSearchParam(key: string, value: string) {\n this.url.searchParams.set(key, value);\n }\n\n toString() {\n if (this.isAbsolute) {\n return this.url.href;\n } else {\n return this.url.href.slice(LOCALHOST.length);\n }\n }\n}\n\nexport default RequestUrl;"],"names":["isAbsolute","url"],"mappings":"AAAA;;AAEA,MAAM,aAAa,GAAI,QAAgB,IAAK;EAC1C,IAAI;IACF,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjB,IAAA,OAAO,IAAI;AACb,EAAA,CAAC,CAAC,MAAM;AACN,IAAA,OAAO,KAAK;AACd,EAAA;AACF,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB;AAEpC,MAAM,UAAU,CAAC;EACPA,WAAU;EACVC,IAAG;EAEX,WAAW,CAAC,QAAgB,EAAE;AAC5B,IAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC3B,MAAA,IAAI,CAACA,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;MAC5B,IAAI,CAACD,WAAU,GAAG,IAAI;AACxB,IAAA,CAAC,MAAM;MACL,IAAI,CAACC,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;MACvC,IAAI,CAACD,WAAU,GAAG,KAAK;AACzB,IAAA;AACF,EAAA;AAEA,EAAA,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE;IACzC,IAAI,CAACC,IAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACvC,EAAA;AAEA,EAAA,QAAQ,GAAG;IACT,IAAI,IAAI,CAACD,WAAU,EAAE;AACnB,MAAA,OAAO,IAAI,CAACC,IAAG,CAAC,IAAI;AACtB,IAAA,CAAC,MAAM;MACL,OAAO,IAAI,CAACA,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9C,IAAA;AACF,EAAA;AACF;;"}
1
+ {"version":3,"file":"requestUrl.js","sources":["../src/requestUrl.ts"],"sourcesContent":["// Url class for absolute and relative urls.\n\nconst isAbsoluteUrl = (inputUrl: string) => {\n return URL.canParse(inputUrl);\n};\n\nconst LOCALHOST = \"http://localhost\";\n\nclass RequestUrl {\n private isAbsolute: boolean;\n private url: URL;\n\n constructor(inputUrl: string) {\n if (isAbsoluteUrl(inputUrl)) {\n this.url = new URL(inputUrl);\n this.isAbsolute = true;\n } else {\n this.url = new URL(inputUrl, LOCALHOST);\n this.isAbsolute = false;\n }\n }\n\n setSearchParam(key: string, value: string) {\n this.url.searchParams.set(key, value);\n }\n\n value() {\n return this.isAbsolute\n ? this.url.href\n : this.url.href.slice(LOCALHOST.length);\n }\n}\n\nexport default RequestUrl;\n"],"names":["url","isAbsolute","setSearchParam","value"],"mappings":"AAAA;;AAEA,IAAM,aAAa,GAAI,QAAgB,IAAK;AAC1C,EAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/B,CAAC;AAED,IAAM,SAAS,GAAG,kBAAkB;AAEpC,MAAM,UAAU,CAAC;EAIf,WAAW,CAAC,QAAgB,EAAE;AAC5B,IAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC3B,MAAA,IAAI,CAACA,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;MAC5B,IAAI,CAACC,WAAU,GAAG,IAAI;AACxB,IAAA,CAAC,MAAM;MACL,IAAI,CAACD,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;MACvC,IAAI,CAACC,WAAU,GAAG,KAAK;AACzB,IAAA;AACF,EAAA;AAEAC,EAAAA,eAAcA,CAAC,GAAW,EAAE,KAAa,EAAE;IACzC,IAAI,CAACF,IAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACvC,EAAA;AAEAG,EAAAA,MAAKA,GAAG;IACN,OAAO,IAAI,CAACF,WAAU,GAClB,IAAI,CAACD,IAAG,CAAC,IAAI,GACb,IAAI,CAACA,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAC3C,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"saveStateHandler.d.ts","sourceRoot":"","sources":["../src/saveStateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,eAAe,EACf,mBAAmB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAI9E,MAAM,WAAW,UAAU;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,sBAAsB;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;CAC/B;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAmB;gBAE9B,EACR,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,SAAS,GACZ,EAAE,sBAAsB;IAalB,qBAAqB,IAAI,MAAM,GAAG,IAAI;IActC,QAAQ,IAAI,UAAU;IAgCtB,mBAAmB,IAAI,IAAI,GAAG,UAAU;IAcxC,SAAS,IAAI,IAAI;IAoBjB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAgBrC,uBAAuB,CAChC,KAAK,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC;IA2ChB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,kBAAkB;CAe7B"}
1
+ {"version":3,"file":"saveStateHandler.d.ts","sourceRoot":"","sources":["../src/saveStateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,eAAe,EACf,mBAAmB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAI9E,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,sBAAsB;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAmB;gBAE9B,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,SAAS,GACV,EAAE,sBAAsB;IAalB,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAUtC,QAAQ,IAAI,UAAU;IAgCtB,mBAAmB,IAAI,IAAI,GAAG,UAAU;IAUxC,SAAS,IAAI,IAAI;IAoBjB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAcrC,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,kBAAkB;CAiB3B"}
@@ -1,27 +1,17 @@
1
1
  import { isInt } from './util.js';
2
2
 
3
3
  class SaveStateHandler {
4
- _addToSelection;
5
- _getNodeById;
6
- _getSelectedNodes;
7
- _getTree;
8
- _onGetStateFromStorage;
9
- _onSetStateFromStorage;
10
- _openNode;
11
- _refreshElements;
12
- _removeFromSelection;
13
- _saveStateOption;
14
4
  constructor({
15
- addToSelection,
16
- getNodeById,
17
- getSelectedNodes,
18
- getTree,
19
- onGetStateFromStorage,
20
- onSetStateFromStorage,
21
- openNode,
22
- refreshElements,
23
- removeFromSelection,
24
- saveState
5
+ _addToSelection: addToSelection,
6
+ _getNodeById: getNodeById,
7
+ _getSelectedNodes: getSelectedNodes,
8
+ _getTree: getTree,
9
+ _onGetStateFromStorage: onGetStateFromStorage,
10
+ _onSetStateFromStorage: onSetStateFromStorage,
11
+ _openNode: openNode,
12
+ _refreshElements: refreshElements,
13
+ _removeFromSelection: removeFromSelection,
14
+ _saveState: saveState
25
15
  }) {
26
16
  this._addToSelection = addToSelection;
27
17
  this._getNodeById = getNodeById;
@@ -34,20 +24,16 @@ class SaveStateHandler {
34
24
  this._removeFromSelection = removeFromSelection;
35
25
  this._saveStateOption = saveState;
36
26
  }
37
- getNodeIdToBeSelected() {
27
+ _getNodeIdToBeSelected() {
38
28
  if (!this._saveStateOption) {
39
29
  return null;
40
30
  }
41
- const state = this.getStateFromStorage();
42
- if (state?.selected_node) {
43
- return state.selected_node[0] ?? null;
44
- } else {
45
- return null;
46
- }
31
+ let state = this._getStateFromStorage();
32
+ return state?.selected_node ? state.selected_node[0] ?? null : null;
47
33
  }
48
- getState() {
49
- const getOpenNodeIds = () => {
50
- const openNodes = [];
34
+ _getState() {
35
+ let getOpenNodeIds = () => {
36
+ let openNodes = [];
51
37
  this._getTree()?.iterate(node => {
52
38
  if (node.is_open && node.id && node.hasChildren()) {
53
39
  openNodes.push(node.id);
@@ -56,13 +42,13 @@ class SaveStateHandler {
56
42
  });
57
43
  return openNodes;
58
44
  };
59
- const getSelectedNodeIds = () => {
60
- const selectedNodeIds = [];
61
- this._getSelectedNodes().forEach(node => {
45
+ let getSelectedNodeIds = () => {
46
+ let selectedNodeIds = [];
47
+ for (let node of this._getSelectedNodes()) {
62
48
  if (node.id != null) {
63
49
  selectedNodeIds.push(node.id);
64
50
  }
65
- });
51
+ }
66
52
  return selectedNodeIds;
67
53
  };
68
54
  return {
@@ -70,22 +56,18 @@ class SaveStateHandler {
70
56
  selected_node: getSelectedNodeIds()
71
57
  };
72
58
  }
73
- getStateFromStorage() {
59
+ _getStateFromStorage() {
74
60
  if (!this._saveStateOption) {
75
61
  return null;
76
62
  }
77
- const jsonData = this._loadFromStorage();
78
- if (jsonData) {
79
- return this._parseState(jsonData);
80
- } else {
81
- return null;
82
- }
63
+ let jsonData = this._loadFromStorage();
64
+ return jsonData ? this._parseState(jsonData) : null;
83
65
  }
84
- saveState() {
66
+ _saveState() {
85
67
  if (!this._saveStateOption) {
86
68
  return;
87
69
  }
88
- const state = JSON.stringify(this.getState());
70
+ let state = JSON.stringify(this._getState());
89
71
  if (this._onSetStateFromStorage) {
90
72
  this._onSetStateFromStorage(state);
91
73
  } else {
@@ -94,33 +76,28 @@ class SaveStateHandler {
94
76
  }
95
77
 
96
78
  /*
97
- Set initial state
98
- Don't handle nodes that are loaded on demand
99
- result: must load on demand (boolean)
100
- */
101
- setInitialState(state) {
102
- let mustLoadOnDemand = false;
103
- if (state.open_nodes) {
104
- mustLoadOnDemand = this._openInitialNodes(state.open_nodes);
105
- }
79
+ Set initial state
80
+ Don't handle nodes that are loaded on demand
81
+ result: must load on demand (boolean)
82
+ */
83
+ _setInitialState(state) {
84
+ let mustLoadOnDemand = state.open_nodes ? this._openInitialNodes(state.open_nodes) : false;
106
85
  this._resetSelection();
107
86
  if (state.selected_node) {
108
87
  this._selectInitialNodes(state.selected_node);
109
88
  }
110
89
  return mustLoadOnDemand;
111
90
  }
112
- async setInitialStateOnDemand(state) {
91
+ async _setInitialStateOnDemand(state) {
113
92
  let nodeIds = state.open_nodes;
114
- const openNodes = async () => {
93
+ let openNodes = async () => {
115
94
  if (!nodeIds) {
116
95
  return;
117
96
  }
118
- const newNodesIds = [];
119
- for (const nodeId of nodeIds) {
120
- const node = this._getNodeById(nodeId);
121
- if (!node) {
122
- newNodesIds.push(nodeId);
123
- } else {
97
+ let newNodesIds = [];
98
+ for (let nodeId of nodeIds) {
99
+ let node = this._getNodeById(nodeId);
100
+ if (node) {
124
101
  if (!node.is_loading) {
125
102
  if (node.load_on_demand) {
126
103
  await loadAndOpenNode(node);
@@ -128,51 +105,43 @@ class SaveStateHandler {
128
105
  await this._openNode(node, false);
129
106
  }
130
107
  }
108
+ } else {
109
+ newNodesIds.push(nodeId);
131
110
  }
132
111
  }
133
112
  nodeIds = newNodesIds;
134
- if (state.selected_node) {
135
- if (this._selectInitialNodes(state.selected_node)) {
136
- this._refreshElements(null);
137
- }
113
+ if (state.selected_node && this._selectInitialNodes(state.selected_node)) {
114
+ this._refreshElements(null);
138
115
  }
139
116
  };
140
- const loadAndOpenNode = async node => {
117
+ let loadAndOpenNode = async node => {
141
118
  await this._openNode(node, false);
142
119
  await openNodes();
143
120
  };
144
121
  await openNodes();
145
122
  }
146
123
  _getKeyName() {
147
- if (typeof this._saveStateOption === "string") {
148
- return this._saveStateOption;
149
- } else {
150
- return "tree";
151
- }
124
+ return typeof this._saveStateOption === "string" ? this._saveStateOption : "tree";
152
125
  }
153
126
  _loadFromStorage() {
154
- if (this._onGetStateFromStorage) {
155
- return this._onGetStateFromStorage();
156
- } else {
157
- return localStorage.getItem(this._getKeyName());
158
- }
127
+ return this._onGetStateFromStorage ? this._onGetStateFromStorage() : localStorage.getItem(this._getKeyName());
159
128
  }
160
129
  _openInitialNodes(nodeIds) {
161
130
  let mustLoadOnDemand = false;
162
- for (const nodeId of nodeIds) {
163
- const node = this._getNodeById(nodeId);
131
+ for (let nodeId of nodeIds) {
132
+ let node = this._getNodeById(nodeId);
164
133
  if (node) {
165
- if (!node.load_on_demand) {
166
- node.is_open = true;
167
- } else {
134
+ if (node.load_on_demand) {
168
135
  mustLoadOnDemand = true;
136
+ } else {
137
+ node.is_open = true;
169
138
  }
170
139
  }
171
140
  }
172
141
  return mustLoadOnDemand;
173
142
  }
174
143
  _parseState(jsonData) {
175
- const state = JSON.parse(jsonData);
144
+ let state = JSON.parse(jsonData);
176
145
 
177
146
  // Check if selected_node is an int (instead of an array)
178
147
  if (state.selected_node && isInt(state.selected_node)) {
@@ -182,19 +151,20 @@ class SaveStateHandler {
182
151
  return state;
183
152
  }
184
153
  _resetSelection() {
185
- const selectedNodes = this._getSelectedNodes();
186
- selectedNodes.forEach(node => {
154
+ let selectedNodes = this._getSelectedNodes();
155
+ for (let node of selectedNodes) {
187
156
  this._removeFromSelection(node);
188
- });
157
+ }
189
158
  }
190
159
  _selectInitialNodes(nodeIds) {
191
160
  let selectCount = 0;
192
- for (const nodeId of nodeIds) {
193
- const node = this._getNodeById(nodeId);
194
- if (node) {
195
- selectCount += 1;
196
- this._addToSelection(node);
161
+ for (let nodeId of nodeIds) {
162
+ let node = this._getNodeById(nodeId);
163
+ if (!node) {
164
+ continue;
197
165
  }
166
+ selectCount += 1;
167
+ this._addToSelection(node);
198
168
  }
199
169
  return selectCount !== 0;
200
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(\n state: SavedState,\n ): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","loadFromStorage","parseState","getKeyName","openInitialNodes","resetSelection","selectInitialNodes"],"mappings":"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"}
1
+ {"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n return state?.selected_node ? (state.selected_node[0] ?? null) : null;\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n for (const node of this.getSelectedNodes()) {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n }\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n return jsonData ? this.parseState(jsonData) : null;\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n const mustLoadOnDemand = state.open_nodes\n ? this.openInitialNodes(state.open_nodes)\n : false;\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(state: SavedState): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n } else {\n newNodesIds.push(nodeId);\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node && this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n return typeof this.saveStateOption === \"string\"\n ? this.saveStateOption\n : \"tree\";\n }\n\n private loadFromStorage(): null | string {\n return this.onGetStateFromStorage\n ? this.onGetStateFromStorage()\n : localStorage.getItem(this.getKeyName());\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n } else {\n node.is_open = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n for (const node of selectedNodes) {\n this.removeFromSelection(node);\n }\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n continue;\n }\n\n selectCount += 1;\n\n this.addToSelection(node);\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","getNodeIdToBeSelected","getStateFromStorage","getState","loadFromStorage","parseState","saveState","getKeyName","setInitialState","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand"],"mappings":";;AAgCe,MAAM,gBAAgB,CAAC;AAYpC,EAAA,WAAW,CAAC;IACV,eAAA,EAAA,cAAc;IACd,YAAA,EAAA,WAAW;IACX,iBAAA,EAAA,gBAAgB;IAChB,QAAA,EAAA,OAAO;IACP,sBAAA,EAAA,qBAAqB;IACrB,sBAAA,EAAA,qBAAqB;IACrB,SAAA,EAAA,QAAQ;IACR,gBAAA,EAAA,eAAe;IACf,oBAAA,EAAA,mBAAmB;AACnB,IAAA,UAAA,EAAA;AACsB,GAAC,EAAE;IACzB,IAAI,CAACA,eAAc,GAAG,cAAc;IACpC,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,iBAAgB,GAAG,gBAAgB;IACxC,IAAI,CAACC,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,sBAAqB,GAAG,qBAAqB;IAClD,IAAI,CAACC,sBAAqB,GAAG,qBAAqB;IAClD,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,gBAAe,GAAG,eAAe;IACtC,IAAI,CAACC,oBAAmB,GAAG,mBAAmB;IAC9C,IAAI,CAACC,gBAAe,GAAG,SAAS;AAClC,EAAA;AAEOC,EAAAA,sBAAqBA,GAAkB;AAC5C,IAAA,IAAI,CAAC,IAAI,CAACD,gBAAe,EAAE;AACzB,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,IAAM,KAAK,GAAG,IAAI,CAACE,oBAAmB,EAAE;AAExC,IAAA,OAAO,KAAK,EAAE,aAAa,GAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,GAAI,IAAI;AACvE,EAAA;AAEOC,EAAAA,SAAQA,GAAe;IAC5B,IAAM,cAAc,GAAG,MAAgB;MACrC,IAAM,SAAmB,GAAG,EAAE;MAE9B,IAAI,CAACT,QAAO,EAAE,EAAE,OAAO,CAAE,IAAU,IAAK;AACtC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACjD,UAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA;AACA,QAAA,OAAO,IAAI;AACb,MAAA,CAAC,CAAC;AAEF,MAAA,OAAO,SAAS;IAClB,CAAC;IAED,IAAM,kBAAkB,GAAG,MAAgB;MACzC,IAAM,eAAyB,GAAG,EAAE;MAEpC,KAAK,IAAM,IAAI,IAAI,IAAI,CAACD,iBAAgB,EAAE,EAAE;AAC1C,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACnB,UAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,QAAA;AACF,MAAA;AAEA,MAAA,OAAO,eAAe;IACxB,CAAC;IAED,OAAO;MACL,UAAU,EAAE,cAAc,EAAE;MAC5B,aAAa,EAAE,kBAAkB;KAClC;AACH,EAAA;AAEOS,EAAAA,oBAAmBA,GAAsB;AAC9C,IAAA,IAAI,CAAC,IAAI,CAACF,gBAAe,EAAE;AACzB,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,IAAM,QAAQ,GAAG,IAAI,CAACI,gBAAe,EAAE;IAEvC,OAAO,QAAQ,GAAG,IAAI,CAACC,WAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;AACpD,EAAA;AAEOC,EAAAA,UAASA,GAAS;AACvB,IAAA,IAAI,CAAC,IAAI,CAACN,gBAAe,EAAE;AACzB,MAAA;AACF,IAAA;IAEA,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAACG,SAAQ,EAAE,CAAC;IAE7C,IAAI,IAAI,CAACP,sBAAqB,EAAE;AAC9B,MAAA,IAAI,CAACA,sBAAqB,CAAC,KAAK,CAAC;AACnC,IAAA,CAAC,MAAM;MACL,YAAY,CAAC,OAAO,CAAC,IAAI,CAACW,WAAU,EAAE,EAAE,KAAK,CAAC;AAChD,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EAESC,gBAAeA,CAAC,KAAiB,EAAW;AACjD,IAAA,IAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,GACrC,IAAI,CAACC,iBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,GACvC,KAAK;IAET,IAAI,CAACC,eAAc,EAAE;IAErB,IAAI,KAAK,CAAC,aAAa,EAAE;AACvB,MAAA,IAAI,CAACC,mBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC;AAC9C,IAAA;AAEA,IAAA,OAAO,gBAAgB;AACzB,EAAA;EAEA,MAAaC,wBAAuBA,CAAC,KAAiB,EAAiB;AACrE,IAAA,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU;IAE9B,IAAM,SAAS,GAAG,YAAY;MAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA;AACF,MAAA;MAEA,IAAM,WAAW,GAAG,EAAE;AAEtB,MAAA,KAAK,IAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,QAAA,IAAM,IAAI,GAAG,IAAI,CAACpB,YAAW,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,IAAI,EAAE;AACR,UAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,IAAI,CAAC,cAAc,EAAE;cACvB,MAAM,eAAe,CAAC,IAAI,CAAC;AAC7B,YAAA,CAAC,MAAM;AACL,cAAA,MAAM,IAAI,CAACK,SAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;AAClC,YAAA;AACF,UAAA;AACF,QAAA,CAAC,MAAM;AACL,UAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA;AACF,MAAA;AAEA,MAAA,OAAO,GAAG,WAAW;AAErB,MAAA,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAACc,mBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AACvE,QAAA,IAAI,CAACb,gBAAe,CAAC,IAAI,CAAC;AAC5B,MAAA;IACF,CAAC;AAED,IAAA,IAAM,eAAe,GAAG,MAAO,IAAU,IAAK;AAC5C,MAAA,MAAM,IAAI,CAACD,SAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;MAChC,MAAM,SAAS,EAAE;IACnB,CAAC;IAED,MAAM,SAAS,EAAE;AACnB,EAAA;AAEQU,EAAAA,WAAUA,GAAW;IAC3B,OAAO,OAAO,IAAI,CAACP,gBAAe,KAAK,QAAQ,GAC3C,IAAI,CAACA,gBAAe,GACpB,MAAM;AACZ,EAAA;AAEQI,EAAAA,gBAAeA,GAAkB;AACvC,IAAA,OAAO,IAAI,CAACT,sBAAqB,GAC7B,IAAI,CAACA,sBAAqB,EAAE,GAC5B,YAAY,CAAC,OAAO,CAAC,IAAI,CAACY,WAAU,EAAE,CAAC;AAC7C,EAAA;EAEQE,iBAAgBA,CAAC,OAAiB,EAAW;IACnD,IAAI,gBAAgB,GAAG,KAAK;AAE5B,IAAA,KAAK,IAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,MAAA,IAAM,IAAI,GAAG,IAAI,CAACjB,YAAW,CAAC,MAAM,CAAC;AAErC,MAAA,IAAI,IAAI,EAAE;QACR,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,UAAA,gBAAgB,GAAG,IAAI;AACzB,QAAA,CAAC,MAAM;UACL,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,QAAA;AACF,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,gBAAgB;AACzB,EAAA;EAEQa,WAAUA,CAAC,QAAgB,EAAc;AAC/C,IAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA4B;;AAE7D;IACA,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AACrD;AACA,MAAA,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7C,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;AAEQK,EAAAA,eAAcA,GAAS;AAC7B,IAAA,IAAM,aAAa,GAAG,IAAI,CAACjB,iBAAgB,EAAE;AAE7C,IAAA,KAAK,IAAM,IAAI,IAAI,aAAa,EAAE;AAChC,MAAA,IAAI,CAACM,oBAAmB,CAAC,IAAI,CAAC;AAChC,IAAA;AACF,EAAA;EAEQY,mBAAkBA,CAAC,OAAiB,EAAW;IACrD,IAAI,WAAW,GAAG,CAAC;AAEnB,IAAA,KAAK,IAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,MAAA,IAAM,IAAI,GAAG,IAAI,CAACnB,YAAW,CAAC,MAAM,CAAC;MAErC,IAAI,CAAC,IAAI,EAAE;AACT,QAAA;AACF,MAAA;AAEA,MAAA,WAAW,IAAI,CAAC;AAEhB,MAAA,IAAI,CAACD,eAAc,CAAC,IAAI,CAAC;AAC3B,IAAA;IAEA,OAAO,WAAW,KAAK,CAAC;AAC1B,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,yBAAyB,EACzB,uBAAuB,EAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC3D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACrC,KAAK,EAAE,MAAM,GACd,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACnC,KAAK,EAAE,MAAM,GACd,SAAS,GAAG,uBAAuB;IAYtC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,kBAAkB;CAK7B"}
1
+ {"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC7D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAgBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAQtC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,kBAAkB;CAK3B"}