tree-element 0.2.0 → 0.3.1

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 (123) hide show
  1. package/README.md +14 -6
  2. package/lib/animation.d.ts +2 -2
  3. package/lib/animation.d.ts.map +1 -1
  4. package/lib/animation.js +13 -9
  5. package/lib/animation.js.map +1 -1
  6. package/lib/dataLoader.d.ts +1 -0
  7. package/lib/dataLoader.d.ts.map +1 -1
  8. package/lib/dataLoader.js +8 -0
  9. package/lib/dataLoader.js.map +1 -1
  10. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  11. package/lib/dragAndDropHandler/dragElement.js +2 -1
  12. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  13. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  14. package/lib/dragAndDropHandler/index.js +56 -65
  15. package/lib/dragAndDropHandler/index.js.map +1 -1
  16. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  17. package/lib/dragAndDropHandler/iterateVisibleNodes.js +16 -15
  18. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  19. package/lib/elementsRenderer.d.ts +5 -1
  20. package/lib/elementsRenderer.d.ts.map +1 -1
  21. package/lib/elementsRenderer.js +62 -39
  22. package/lib/elementsRenderer.js.map +1 -1
  23. package/lib/events.d.ts +44 -11
  24. package/lib/events.d.ts.map +1 -1
  25. package/lib/index.d.ts +31 -8
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +162 -122
  28. package/lib/index.js.map +1 -1
  29. package/lib/keyHandler.d.ts +11 -5
  30. package/lib/keyHandler.d.ts.map +1 -1
  31. package/lib/keyHandler.js +87 -33
  32. package/lib/keyHandler.js.map +1 -1
  33. package/lib/methodTypes.d.ts +2 -2
  34. package/lib/methodTypes.d.ts.map +1 -1
  35. package/lib/mouseHandler.d.ts +1 -1
  36. package/lib/mouseHandler.d.ts.map +1 -1
  37. package/lib/mouseHandler.js +10 -7
  38. package/lib/mouseHandler.js.map +1 -1
  39. package/lib/node.d.ts +45 -15
  40. package/lib/node.d.ts.map +1 -1
  41. package/lib/node.js +136 -139
  42. package/lib/node.js.map +1 -1
  43. package/lib/nodeElement/folderElement.d.ts +1 -1
  44. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  45. package/lib/nodeElement/folderElement.js +46 -57
  46. package/lib/nodeElement/folderElement.js.map +1 -1
  47. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  48. package/lib/nodeElement/ghostDropHint.js +8 -4
  49. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  50. package/lib/nodeElement/index.d.ts.map +1 -1
  51. package/lib/nodeElement/index.js +6 -6
  52. package/lib/nodeElement/index.js.map +1 -1
  53. package/lib/nodeUtils.d.ts.map +1 -1
  54. package/lib/nodeUtils.js +1 -1
  55. package/lib/nodeUtils.js.map +1 -1
  56. package/lib/options.d.ts +23 -6
  57. package/lib/options.d.ts.map +1 -1
  58. package/lib/requestUrl.d.ts +0 -1
  59. package/lib/requestUrl.d.ts.map +1 -1
  60. package/lib/requestUrl.js +4 -22
  61. package/lib/requestUrl.js.map +1 -1
  62. package/lib/saveStateHandler.d.ts.map +1 -1
  63. package/lib/saveStateHandler.js +21 -41
  64. package/lib/saveStateHandler.js.map +1 -1
  65. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  66. package/lib/scrollHandler/containerScrollParent.js +3 -8
  67. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  68. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  69. package/lib/scrollHandler/createScrollParent.js +4 -5
  70. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  71. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  72. package/lib/scrollHandler/documentScrollParent.js +3 -9
  73. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  74. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  75. package/lib/scrollHandler/scrollParent.js +19 -17
  76. package/lib/scrollHandler/scrollParent.js.map +1 -1
  77. package/lib/selectNodeHandler.d.ts +3 -1
  78. package/lib/selectNodeHandler.d.ts.map +1 -1
  79. package/lib/selectNodeHandler.js +27 -37
  80. package/lib/selectNodeHandler.js.map +1 -1
  81. package/lib/setDefaultOptions.d.ts +3 -0
  82. package/lib/setDefaultOptions.d.ts.map +1 -1
  83. package/lib/setDefaultOptions.js +21 -20
  84. package/lib/setDefaultOptions.js.map +1 -1
  85. package/lib/util.d.ts.map +1 -1
  86. package/lib/util.js +1 -1
  87. package/lib/util.js.map +1 -1
  88. package/lib/version.d.ts +1 -1
  89. package/lib/version.js +1 -1
  90. package/lib/version.js.map +1 -1
  91. package/package.json +44 -35
  92. package/src/animation.ts +13 -11
  93. package/src/dataLoader.ts +11 -0
  94. package/src/dragAndDropHandler/dragElement.ts +2 -1
  95. package/src/dragAndDropHandler/index.ts +70 -75
  96. package/src/dragAndDropHandler/iterateVisibleNodes.ts +18 -16
  97. package/src/elementsRenderer.ts +76 -46
  98. package/src/events.ts +44 -11
  99. package/src/index.ts +210 -150
  100. package/src/keyHandler.ts +95 -41
  101. package/src/methodTypes.ts +3 -3
  102. package/src/mouseHandler.ts +10 -7
  103. package/src/node.ts +155 -148
  104. package/src/nodeElement/folderElement.ts +54 -63
  105. package/src/nodeElement/ghostDropHint.ts +4 -2
  106. package/src/nodeElement/index.ts +9 -15
  107. package/src/nodeUtils.ts +1 -1
  108. package/src/options.ts +23 -6
  109. package/src/requestUrl.ts +4 -25
  110. package/src/saveStateHandler.ts +29 -43
  111. package/src/scrollHandler/containerScrollParent.ts +3 -9
  112. package/src/scrollHandler/createScrollParent.ts +1 -2
  113. package/src/scrollHandler/documentScrollParent.ts +5 -11
  114. package/src/scrollHandler/scrollParent.ts +29 -25
  115. package/src/selectNodeHandler.ts +34 -38
  116. package/src/setDefaultOptions.ts +31 -19
  117. package/src/util.ts +1 -2
  118. package/src/version.ts +1 -1
  119. package/tree_element.css +87 -69
  120. package/tree_element.debug.js +717 -659
  121. package/tree_element.debug.js.map +1 -1
  122. package/tree_element.js +2 -2
  123. package/tree_element.js.map +1 -1
@@ -25,7 +25,7 @@ class FolderElement extends NodeElement {
25
25
  this._renderChildren = renderChildren;
26
26
  this._triggerEvent = triggerEvent;
27
27
  }
28
- _close(slide, animationSpeed) {
28
+ async _close(slide, animationSpeed) {
29
29
  if (!this._node.is_open) {
30
30
  return;
31
31
  }
@@ -38,80 +38,69 @@ class FolderElement extends NodeElement {
38
38
  }
39
39
  let button = this._getButton();
40
40
  button.classList.add(this._classNames.closed);
41
- button.innerHTML = "";
41
+ button.replaceChildren();
42
42
  let closedIconElement = this._closedIconElement;
43
43
  if (closedIconElement) {
44
44
  let icon = closedIconElement.cloneNode(true);
45
- button.appendChild(icon);
45
+ button.append(icon);
46
46
  }
47
- let doClose = () => {
48
- this._element.classList.add(this._classNames.closed);
49
- let titleSpan = this._getTitleSpan();
50
- titleSpan.setAttribute("aria-expanded", "false");
51
- this._triggerEvent("tree.close", {
52
- node: this._node
53
- });
54
- };
55
47
  let ul = this._getUl();
56
- if (!ul) {
57
- doClose();
58
- } else if (slide) {
59
- slideUp(ul, animationSpeed, doClose);
60
- } else {
61
- ul.style.display = "none";
62
- doClose();
48
+ if (ul) {
49
+ if (slide) {
50
+ await slideUp(ul, animationSpeed);
51
+ } else {
52
+ ul.style.display = "none";
53
+ }
63
54
  }
55
+ this._element.classList.add(this._classNames.closed);
56
+ let titleSpan = this._getTitleSpan();
57
+ titleSpan.setAttribute("aria-expanded", "false");
58
+ this._triggerEvent("tree.close", {
59
+ node: this._node
60
+ });
64
61
  }
65
62
  async _open(slide, animationSpeed) {
66
- return new Promise(resolve => {
67
- if (this._node.is_open) {
68
- resolve();
69
- return;
70
- }
71
- this._node.is_open = true;
72
- if (!this._isRendered()) {
73
- // The folder is rendered open when its parent is opened
74
- this._triggerEvent("tree.open", {
75
- node: this._node
76
- });
77
- resolve();
78
- return;
79
- }
80
- let button = this._getButton();
81
- button.classList.remove(this._classNames.closed);
82
- button.innerHTML = "";
83
- let openedIconElement = this._openedIconElement;
84
- if (openedIconElement) {
85
- let icon = openedIconElement.cloneNode(true);
86
- button.appendChild(icon);
87
- }
88
- let doOpen = () => {
89
- this._element.classList.remove(this._classNames.closed);
90
- let titleSpan = this._getTitleSpan();
91
- titleSpan.setAttribute("aria-expanded", "true");
92
- this._triggerEvent("tree.open", {
93
- node: this._node
94
- });
95
- resolve();
96
- };
63
+ if (this._node.is_open) {
64
+ return;
65
+ }
66
+ this._node.is_open = true;
67
+ if (!this._isRendered()) {
68
+ // The folder is rendered open when its parent is opened
69
+ this._triggerEvent("tree.open", {
70
+ node: this._node
71
+ });
72
+ return;
73
+ }
74
+ let button = this._getButton();
75
+ button.classList.remove(this._classNames.closed);
76
+ button.replaceChildren();
77
+ let openedIconElement = this._openedIconElement;
78
+ if (openedIconElement) {
79
+ let icon = openedIconElement.cloneNode(true);
80
+ button.append(icon);
81
+ }
97
82
 
98
- // The children are rendered the first time the folder is opened
99
- let ul = this._getUl() ?? this._renderChildren(this._node);
100
- if (!ul) {
101
- doOpen();
102
- } else if (slide) {
103
- slideDown(ul, animationSpeed, doOpen);
83
+ // The children are rendered the first time the folder is opened
84
+ let ul = this._getUl() ?? this._renderChildren(this._node);
85
+ if (ul) {
86
+ if (slide) {
87
+ await slideDown(ul, animationSpeed);
104
88
  } else {
105
89
  ul.style.display = "block";
106
- doOpen();
107
90
  }
91
+ }
92
+ this._element.classList.remove(this._classNames.closed);
93
+ let titleSpan = this._getTitleSpan();
94
+ titleSpan.setAttribute("aria-expanded", "true");
95
+ this._triggerEvent("tree.open", {
96
+ node: this._node
108
97
  });
109
98
  }
110
99
  _mustShowBorderDropHint(position) {
111
100
  return !this._node.is_open && position === "inside";
112
101
  }
113
102
  _getButton() {
114
- return this._element.querySelector(`:scope > .${this._classNames.element} > a.${this._classNames.toggler}`);
103
+ return this._element.querySelector(`:scope > .${this._classNames.element} > .${this._classNames.toggler}`);
115
104
  }
116
105
  }
117
106
 
@@ -1 +1 @@
1
- {"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: globalThis.Node;\n openedIconElement?: globalThis.Node;\n renderChildren: RenderChildren;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: globalThis.Node;\n private openedIconElement?: globalThis.Node;\n private renderChildren: RenderChildren;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.renderChildren = renderChildren;\n this.triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: AnimationSpeed): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n if (!this.isRendered()) {\n this.triggerEvent(\"tree.close\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.add(this.classNames.closed);\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(this.classNames.closed);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n const ul = this.getUl();\n\n if (!ul) {\n doClose();\n } else if (slide) {\n slideUp(ul, animationSpeed, doClose);\n } else {\n ul.style.display = \"none\";\n doClose();\n }\n }\n\n public async open(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n return new Promise((resolve) => {\n if (this.node.is_open) {\n resolve();\n return;\n }\n\n this.node.is_open = true;\n\n if (!this.isRendered()) {\n // The folder is rendered open when its parent is opened\n this.triggerEvent(\"tree.open\", { node: this.node });\n resolve();\n return;\n }\n\n const button = this.getButton();\n button.classList.remove(this.classNames.closed);\n button.innerHTML = \"\";\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(this.classNames.closed);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n\n resolve();\n };\n\n // The children are rendered the first time the folder is opened\n const ul = this.getUl() ?? this.renderChildren(this.node);\n\n if (!ul) {\n doOpen();\n } else if (slide) {\n slideDown(ul, animationSpeed, doOpen);\n } else {\n ul.style.display = \"block\";\n doOpen();\n }\n });\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private getButton(): HTMLLinkElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > a.${this.classNames.toggler}`,\n ) as HTMLLinkElement;\n }\n}\n\nexport default FolderElement;\n"],"names":["closedIconElement","openedIconElement","renderChildren","triggerEvent","close","node","isRendered","getButton","classNames","element","getTitleSpan","getUl","open","mustShowBorderDropHint"],"mappings":"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"}
1
+ {"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: globalThis.Node;\n openedIconElement?: globalThis.Node;\n renderChildren: RenderChildren;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: globalThis.Node;\n private openedIconElement?: globalThis.Node;\n private renderChildren: RenderChildren;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.renderChildren = renderChildren;\n this.triggerEvent = triggerEvent;\n }\n\n public async close(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n if (!this.isRendered()) {\n this.triggerEvent(\"tree.close\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.add(this.classNames.closed);\n button.replaceChildren();\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.append(icon);\n }\n\n const ul = this.getUl();\n\n if (ul) {\n if (slide) {\n await slideUp(ul, animationSpeed);\n } else {\n ul.style.display = \"none\";\n }\n }\n\n this.element.classList.add(this.classNames.closed);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n }\n\n public async open(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n if (!this.isRendered()) {\n // The folder is rendered open when its parent is opened\n this.triggerEvent(\"tree.open\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.remove(this.classNames.closed);\n button.replaceChildren();\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.append(icon);\n }\n\n // The children are rendered the first time the folder is opened\n const ul = this.getUl() ?? this.renderChildren(this.node);\n\n if (ul) {\n if (slide) {\n await slideDown(ul, animationSpeed);\n } else {\n ul.style.display = \"block\";\n }\n }\n\n this.element.classList.remove(this.classNames.closed);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private getButton(): HTMLElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > .${this.classNames.toggler}`,\n ) as HTMLElement;\n }\n}\n\nexport default FolderElement;\n"],"names":["closedIconElement","openedIconElement","renderChildren","triggerEvent","close","node","isRendered","getButton","classNames","getUl","element","getTitleSpan","open","mustShowBorderDropHint"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ghostDropHint.d.ts","sourceRoot":"","sources":["../../src/nodeElement/ghostDropHint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAM,aAAc,YAAW,QAAQ;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,IAAI,CAAO;gBAGjB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU;IA0BjB,MAAM,IAAI,IAAI;IAIrB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,oBAAoB;CAO7B;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ghostDropHint.d.ts","sourceRoot":"","sources":["../../src/nodeElement/ghostDropHint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAM,aAAc,YAAW,QAAQ;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,IAAI,CAAO;gBAGjB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU;IA4BjB,MAAM,IAAI,IAAI;IAIrB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,oBAAoB;CAO7B;AAED,eAAe,aAAa,CAAC"}
@@ -6,11 +6,15 @@ class GhostDropHint {
6
6
  this._ghost = this._createGhostElement();
7
7
  switch (position) {
8
8
  case "after":
9
- this._moveAfter();
10
- break;
9
+ {
10
+ this._moveAfter();
11
+ break;
12
+ }
11
13
  case "before":
12
- this._moveBefore();
13
- break;
14
+ {
15
+ this._moveBefore();
16
+ break;
17
+ }
14
18
  case "inside":
15
19
  {
16
20
  if (node.isFolder() && node.is_open) {
@@ -1 +1 @@
1
- {"version":3,"file":"ghostDropHint.js","sources":["../../src/nodeElement/ghostDropHint.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private classNames: ClassNames;\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(\n node: Node,\n element: HTMLElement,\n position: Position,\n classNames: ClassNames,\n ) {\n this.classNames = classNames;\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\":\n this.moveAfter();\n break;\n\n case \"before\":\n this.moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n\n private createGhostElement() {\n const { circle, common, ghost: ghostClass, line } = this.classNames;\n\n const ghost = document.createElement(\"li\");\n ghost.className = `${common} ${ghostClass}`;\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = `${common} ${circle}`;\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = `${common} ${line}`;\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(this.classNames.inside);\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n"],"names":["classNames","element","node","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside"],"mappings":"AAIA,MAAM,aAAa,CAAqB;EAMtC,WAAW,CACT,IAAU,EACV,OAAoB,EACpB,QAAkB,EAClB,UAAsB,EACtB;IACA,IAAI,CAACA,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,KAAI,GAAG,IAAI;AAChB,IAAA,IAAI,CAACC,MAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE;AAEtC,IAAA,QAAQ,QAAQ;AACd,MAAA,KAAK,OAAO;QACV,IAAI,CAACC,UAAS,EAAE;AAChB,QAAA;AAEF,MAAA,KAAK,QAAQ;QACX,IAAI,CAACC,WAAU,EAAE;AACjB,QAAA;AAEF,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACnC,IAAI,CAACC,qBAAoB,EAAE;AAC7B,UAAA,CAAC,MAAM;YACL,IAAI,CAACC,WAAU,EAAE;AACnB,UAAA;AACF,QAAA;AACF;AACF,EAAA;AAEO,EAAA,MAAM,GAAS;AACpB,IAAA,IAAI,CAACL,MAAK,CAAC,MAAM,EAAE;AACrB,EAAA;AAEQC,EAAAA,mBAAkBA,GAAG;IAC3B,IAAM;MAAE,MAAM;MAAE,MAAM;AAAE,MAAA,KAAK,EAAE,UAAU;AAAE,MAAA;KAAM,GAAG,IAAI,CAACJ,WAAU;AAEnE,IAAA,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,IAAA,KAAK,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AAE3C,IAAA,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACjD,IAAA,UAAU,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AAC5C,IAAA,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AAExB,IAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAA,QAAQ,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AACxC,IAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAEtB,IAAA,OAAO,KAAK;AACd,EAAA;AAEQK,EAAAA,UAASA,GAAS;IACxB,IAAI,CAACJ,QAAO,CAAC,KAAK,CAAC,IAAI,CAACE,MAAK,CAAC;AAChC,EAAA;AAEQG,EAAAA,WAAUA,GAAS;IACzB,IAAI,CAACL,QAAO,CAAC,MAAM,CAAC,IAAI,CAACE,MAAK,CAAC;AACjC,EAAA;AAEQK,EAAAA,WAAUA,GAAS;IACzB,IAAI,CAACP,QAAO,CAAC,KAAK,CAAC,IAAI,CAACE,MAAK,CAAC;AAC9B,IAAA,IAAI,CAACA,MAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,MAAM,CAAC;AAClD,EAAA;AAEQO,EAAAA,qBAAoBA,GAAS;IACnC,IAAM,YAAY,GAAG,IAAI,CAACL,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO;AAEnD,IAAA,IAAI,YAAY,EAAE;AAChB,MAAA,YAAY,CAAC,MAAM,CAAC,IAAI,CAACC,MAAK,CAAC;AACjC,IAAA;AACF,EAAA;AACF;;"}
1
+ {"version":3,"file":"ghostDropHint.js","sources":["../../src/nodeElement/ghostDropHint.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private classNames: ClassNames;\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(\n node: Node,\n element: HTMLElement,\n position: Position,\n classNames: ClassNames,\n ) {\n this.classNames = classNames;\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\": {\n this.moveAfter();\n break;\n }\n\n case \"before\": {\n this.moveBefore();\n break;\n }\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n\n private createGhostElement() {\n const { circle, common, ghost: ghostClass, line } = this.classNames;\n\n const ghost = document.createElement(\"li\");\n ghost.className = `${common} ${ghostClass}`;\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = `${common} ${circle}`;\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = `${common} ${line}`;\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(this.classNames.inside);\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n"],"names":["classNames","element","node","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside"],"mappings":"AAIA,MAAM,aAAa,CAAqB;EAMtC,WAAW,CACT,IAAU,EACV,OAAoB,EACpB,QAAkB,EAClB,UAAsB,EACtB;IACA,IAAI,CAACA,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,KAAI,GAAG,IAAI;AAChB,IAAA,IAAI,CAACC,MAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE;AAEtC,IAAA,QAAQ,QAAQ;AACd,MAAA,KAAK,OAAO;AAAE,QAAA;UACZ,IAAI,CAACC,UAAS,EAAE;AAChB,UAAA;AACF,QAAA;AAEA,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAI,CAACC,WAAU,EAAE;AACjB,UAAA;AACF,QAAA;AAEA,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACnC,IAAI,CAACC,qBAAoB,EAAE;AAC7B,UAAA,CAAC,MAAM;YACL,IAAI,CAACC,WAAU,EAAE;AACnB,UAAA;AACF,QAAA;AACF;AACF,EAAA;AAEO,EAAA,MAAM,GAAS;AACpB,IAAA,IAAI,CAACL,MAAK,CAAC,MAAM,EAAE;AACrB,EAAA;AAEQC,EAAAA,mBAAkBA,GAAG;IAC3B,IAAM;MAAE,MAAM;MAAE,MAAM;AAAE,MAAA,KAAK,EAAE,UAAU;AAAE,MAAA;KAAM,GAAG,IAAI,CAACJ,WAAU;AAEnE,IAAA,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,IAAA,KAAK,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AAE3C,IAAA,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACjD,IAAA,UAAU,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AAC5C,IAAA,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AAExB,IAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAA,QAAQ,CAAC,SAAS,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AACxC,IAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAEtB,IAAA,OAAO,KAAK;AACd,EAAA;AAEQK,EAAAA,UAASA,GAAS;IACxB,IAAI,CAACJ,QAAO,CAAC,KAAK,CAAC,IAAI,CAACE,MAAK,CAAC;AAChC,EAAA;AAEQG,EAAAA,WAAUA,GAAS;IACzB,IAAI,CAACL,QAAO,CAAC,MAAM,CAAC,IAAI,CAACE,MAAK,CAAC;AACjC,EAAA;AAEQK,EAAAA,WAAUA,GAAS;IACzB,IAAI,CAACP,QAAO,CAAC,KAAK,CAAC,IAAI,CAACE,MAAK,CAAC;AAC9B,IAAA,IAAI,CAACA,MAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,MAAM,CAAC;AAClD,EAAA;AAEQO,EAAAA,qBAAoBA,GAAS;IACnC,IAAM,YAAY,GAAG,IAAI,CAACL,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO;AAEnD,IAAA,IAAI,YAAY,EAAE;AAChB,MAAA,YAAY,CAAC,MAAM,CAAC,IAAI,CAACC,MAAK,CAAC;AACjC,IAAA;AACF,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodeElement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,cAAM,WAAW;IACR,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAc;gBAErB,EACV,UAAU,EACV,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,iBAAiB;IAWb,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAiBzC,QAAQ,IAAI,IAAI;IAchB,MAAM,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAsB1C,SAAS,CAAC,YAAY,IAAI,eAAe;IAMzC,SAAS,CAAC,KAAK,IAAI,gBAAgB,GAAG,IAAI;IAO1C,SAAS,CAAC,UAAU,IAAI,OAAO;IAI/B,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAG9D;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodeElement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,cAAM,WAAW;IACR,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAc;gBAErB,EACV,UAAU,EACV,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,iBAAiB;IAWb,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAMzC,QAAQ,IAAI,IAAI;IAmBhB,MAAM,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAsB1C,SAAS,CAAC,YAAY,IAAI,eAAe;IAMzC,SAAS,CAAC,KAAK,IAAI,gBAAgB,GAAG,IAAI;IAO1C,SAAS,CAAC,UAAU,IAAI,OAAO;IAI/B,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAG9D;AAED,eAAe,WAAW,CAAC"}
@@ -19,11 +19,7 @@ class NodeElement {
19
19
  this._element = node.element ?? this._treeElement;
20
20
  }
21
21
  _addDropHint(position) {
22
- if (this._mustShowBorderDropHint(position)) {
23
- return new BorderDropHint(this._element, this._getScrollLeft(), this._classNames);
24
- } else {
25
- return new GhostDropHint(this._node, this._element, position, this._classNames);
26
- }
22
+ return this._mustShowBorderDropHint(position) ? new BorderDropHint(this._element, this._getScrollLeft(), this._classNames) : new GhostDropHint(this._node, this._element, position, this._classNames);
27
23
  }
28
24
  _deselect() {
29
25
  if (!this._isRendered()) {
@@ -31,7 +27,11 @@ class NodeElement {
31
27
  }
32
28
  this._element.classList.remove(this._classNames.selected);
33
29
  let titleSpan = this._getTitleSpan();
34
- titleSpan.removeAttribute("tabindex");
30
+
31
+ // Check for null or undefined
32
+ if (this._tabIndex != null) {
33
+ titleSpan.setAttribute("tabindex", "-1");
34
+ }
35
35
  titleSpan.setAttribute("aria-selected", "false");
36
36
  titleSpan.blur();
37
37
  }
@@ -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 // 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 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 if (!this.isRendered()) {\n return;\n }\n\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 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
+ {"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;IACjD,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,wBAAwB,GACnC,MAAM,QAAQ,KACb,IAAI,IAAI,sBAGqB,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
- let 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":"IAMa,wBAAwB,GACnC,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.
@@ -62,8 +77,8 @@ export interface TreeElementOptions {
62
77
  *
63
78
  * Type: `HTMLElement | string`
64
79
  *
65
- * @defaultValue `"&#x25ba;"` (`►`), or `"&#x25c0;"` (`◀`) when `rtl` is
66
- * true.
80
+ * @defaultValue An svg triangle pointing right, or left when `rtl` is
81
+ * true. It is sized in em and filled with `currentColor`.
67
82
  * @group Appearance
68
83
  */
69
84
  closedIcon?: IconElement;
@@ -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`
@@ -223,7 +238,8 @@ export interface TreeElementOptions {
223
238
  *
224
239
  * Type: `HTMLElement | string`
225
240
  *
226
- * @defaultValue `"&#x25bc;"` (`▼`)
241
+ * @defaultValue An svg triangle pointing down, sized in em and filled with
242
+ * `currentColor`.
227
243
  * @group Appearance
228
244
  */
229
245
  openedIcon?: IconElement;
@@ -282,7 +298,8 @@ export interface TreeElementOptions {
282
298
  startDndDelay?: number;
283
299
  /**
284
300
  * The `tabindex` of the selected node's title, which is what makes the
285
- * tree focusable.
301
+ * tree focusable. When no node is selected, the first node gets it. The
302
+ * other nodes get `-1`.
286
303
  *
287
304
  * @defaultValue `0`
288
305
  * @group Selection
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,IAAI,EAChB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;AAEb,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,OAAO,KAChB,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,EAAE,OAAO,IAAI,CAAC;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,IAAI,EAChB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;AAEb,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,OAAO,KAChB,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,EAAE,OAAO,IAAI,CAAC;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC"}
@@ -1,5 +1,4 @@
1
1
  declare class RequestUrl {
2
- private isAbsolute;
3
2
  private url;
4
3
  constructor(inputUrl: string);
5
4
  setSearchParam(key: string, value: string): void;
@@ -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,KAAK;CAON;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"requestUrl.d.ts","sourceRoot":"","sources":["../src/requestUrl.ts"],"names":[],"mappings":"AAGA,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAAM;gBAEL,QAAQ,EAAE,MAAM;IAI5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIzC,KAAK;CAGN;AAED,eAAe,UAAU,CAAC"}
package/lib/requestUrl.js CHANGED
@@ -1,33 +1,15 @@
1
- // Url class for absolute and relative urls.
1
+ // Url of a request. A relative url is resolved against the page, like a link
2
+ // or `fetch` would, so it also works when the page is in a subdirectory.
2
3
 
3
- let isAbsoluteUrl = inputUrl => {
4
- try {
5
- new URL(inputUrl);
6
- return true;
7
- } catch {
8
- return false;
9
- }
10
- };
11
- let LOCALHOST = "http://localhost";
12
4
  class RequestUrl {
13
5
  constructor(inputUrl) {
14
- if (isAbsoluteUrl(inputUrl)) {
15
- this._url = new URL(inputUrl);
16
- this._isAbsolute = true;
17
- } else {
18
- this._url = new URL(inputUrl, LOCALHOST);
19
- this._isAbsolute = false;
20
- }
6
+ this._url = new URL(inputUrl, document.baseURI);
21
7
  }
22
8
  _setSearchParam(key, value) {
23
9
  this._url.searchParams.set(key, value);
24
10
  }
25
11
  _value() {
26
- if (this._isAbsolute) {
27
- return this._url.href;
28
- } else {
29
- return this._url.href.slice(LOCALHOST.length);
30
- }
12
+ return this._url.href;
31
13
  }
32
14
  }
33
15
 
@@ -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 value() {\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;\n"],"names":["url","isAbsolute","setSearchParam","value"],"mappings":"AAAA;;AAEA,IAAM,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,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,IAAI,IAAI,CAACF,WAAU,EAAE;AACnB,MAAA,OAAO,IAAI,CAACD,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 of a request. A relative url is resolved against the page, like a link\n// or `fetch` would, so it also works when the page is in a subdirectory.\n\nclass RequestUrl {\n private url: URL;\n\n constructor(inputUrl: string) {\n this.url = new URL(inputUrl, document.baseURI);\n }\n\n setSearchParam(key: string, value: string) {\n this.url.searchParams.set(key, value);\n }\n\n value() {\n return this.url.href;\n }\n}\n\nexport default RequestUrl;\n"],"names":["url","setSearchParam","value"],"mappings":"AAAA;AACA;;AAEA,MAAM,UAAU,CAAC;EAGf,WAAW,CAAC,QAAgB,EAAE;IAC5B,IAAI,CAACA,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;AAChD,EAAA;AAEAC,EAAAA,eAAcA,CAAC,GAAW,EAAE,KAAa,EAAE;IACzC,IAAI,CAACD,IAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACvC,EAAA;AAEAE,EAAAA,MAAKA,GAAG;AACN,IAAA,OAAO,IAAI,CAACF,IAAG,CAAC,IAAI;AACtB,EAAA;AACF;;"}
@@ -1 +1 @@
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;IActC,QAAQ,IAAI,UAAU;IAgCtB,mBAAmB,IAAI,IAAI,GAAG,UAAU;IAcxC,SAAS,IAAI,IAAI;IAoBjB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAgBrC,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,kBAAkB;CAe3B"}
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"}
@@ -29,11 +29,7 @@ class SaveStateHandler {
29
29
  return null;
30
30
  }
31
31
  let state = this._getStateFromStorage();
32
- if (state?.selected_node) {
33
- return state.selected_node[0] ?? null;
34
- } else {
35
- return null;
36
- }
32
+ return state?.selected_node ? state.selected_node[0] ?? null : null;
37
33
  }
38
34
  _getState() {
39
35
  let getOpenNodeIds = () => {
@@ -48,11 +44,11 @@ class SaveStateHandler {
48
44
  };
49
45
  let getSelectedNodeIds = () => {
50
46
  let selectedNodeIds = [];
51
- this._getSelectedNodes().forEach(node => {
47
+ for (let node of this._getSelectedNodes()) {
52
48
  if (node.id != null) {
53
49
  selectedNodeIds.push(node.id);
54
50
  }
55
- });
51
+ }
56
52
  return selectedNodeIds;
57
53
  };
58
54
  return {
@@ -65,11 +61,7 @@ class SaveStateHandler {
65
61
  return null;
66
62
  }
67
63
  let jsonData = this._loadFromStorage();
68
- if (jsonData) {
69
- return this._parseState(jsonData);
70
- } else {
71
- return null;
72
- }
64
+ return jsonData ? this._parseState(jsonData) : null;
73
65
  }
74
66
  _saveState() {
75
67
  if (!this._saveStateOption) {
@@ -89,10 +81,7 @@ class SaveStateHandler {
89
81
  result: must load on demand (boolean)
90
82
  */
91
83
  _setInitialState(state) {
92
- let mustLoadOnDemand = false;
93
- if (state.open_nodes) {
94
- mustLoadOnDemand = this._openInitialNodes(state.open_nodes);
95
- }
84
+ let mustLoadOnDemand = state.open_nodes ? this._openInitialNodes(state.open_nodes) : false;
96
85
  this._resetSelection();
97
86
  if (state.selected_node) {
98
87
  this._selectInitialNodes(state.selected_node);
@@ -108,9 +97,7 @@ class SaveStateHandler {
108
97
  let newNodesIds = [];
109
98
  for (let nodeId of nodeIds) {
110
99
  let node = this._getNodeById(nodeId);
111
- if (!node) {
112
- newNodesIds.push(nodeId);
113
- } else {
100
+ if (node) {
114
101
  if (!node.is_loading) {
115
102
  if (node.load_on_demand) {
116
103
  await loadAndOpenNode(node);
@@ -118,13 +105,13 @@ class SaveStateHandler {
118
105
  await this._openNode(node, false);
119
106
  }
120
107
  }
108
+ } else {
109
+ newNodesIds.push(nodeId);
121
110
  }
122
111
  }
123
112
  nodeIds = newNodesIds;
124
- if (state.selected_node) {
125
- if (this._selectInitialNodes(state.selected_node)) {
126
- this._refreshElements(null);
127
- }
113
+ if (state.selected_node && this._selectInitialNodes(state.selected_node)) {
114
+ this._refreshElements(null);
128
115
  }
129
116
  };
130
117
  let loadAndOpenNode = async node => {
@@ -134,28 +121,20 @@ class SaveStateHandler {
134
121
  await openNodes();
135
122
  }
136
123
  _getKeyName() {
137
- if (typeof this._saveStateOption === "string") {
138
- return this._saveStateOption;
139
- } else {
140
- return "tree";
141
- }
124
+ return typeof this._saveStateOption === "string" ? this._saveStateOption : "tree";
142
125
  }
143
126
  _loadFromStorage() {
144
- if (this._onGetStateFromStorage) {
145
- return this._onGetStateFromStorage();
146
- } else {
147
- return localStorage.getItem(this._getKeyName());
148
- }
127
+ return this._onGetStateFromStorage ? this._onGetStateFromStorage() : localStorage.getItem(this._getKeyName());
149
128
  }
150
129
  _openInitialNodes(nodeIds) {
151
130
  let mustLoadOnDemand = false;
152
131
  for (let nodeId of nodeIds) {
153
132
  let node = this._getNodeById(nodeId);
154
133
  if (node) {
155
- if (!node.load_on_demand) {
156
- node.is_open = true;
157
- } else {
134
+ if (node.load_on_demand) {
158
135
  mustLoadOnDemand = true;
136
+ } else {
137
+ node.is_open = true;
159
138
  }
160
139
  }
161
140
  }
@@ -173,18 +152,19 @@ class SaveStateHandler {
173
152
  }
174
153
  _resetSelection() {
175
154
  let selectedNodes = this._getSelectedNodes();
176
- selectedNodes.forEach(node => {
155
+ for (let node of selectedNodes) {
177
156
  this._removeFromSelection(node);
178
- });
157
+ }
179
158
  }
180
159
  _selectInitialNodes(nodeIds) {
181
160
  let selectCount = 0;
182
161
  for (let nodeId of nodeIds) {
183
162
  let node = this._getNodeById(nodeId);
184
- if (node) {
185
- selectCount += 1;
186
- this._addToSelection(node);
163
+ if (!node) {
164
+ continue;
187
165
  }
166
+ selectCount += 1;
167
+ this._addToSelection(node);
188
168
  }
189
169
  return selectCount !== 0;
190
170
  }