tree-element 0.4.0 → 0.4.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 (74) hide show
  1. package/README.md +22 -20
  2. package/lib/dataLoader.d.ts.map +1 -1
  3. package/lib/dataLoader.js +4 -1
  4. package/lib/dataLoader.js.map +1 -1
  5. package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
  6. package/lib/dragAndDropHandler/generateHitAreas.js +3 -2
  7. package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
  8. package/lib/dragAndDropHandler/index.d.ts +2 -4
  9. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  10. package/lib/dragAndDropHandler/index.js +2 -9
  11. package/lib/dragAndDropHandler/index.js.map +1 -1
  12. package/lib/elementsRenderer.d.ts +7 -2
  13. package/lib/elementsRenderer.d.ts.map +1 -1
  14. package/lib/elementsRenderer.js +70 -23
  15. package/lib/elementsRenderer.js.map +1 -1
  16. package/lib/events.d.ts +13 -7
  17. package/lib/events.d.ts.map +1 -1
  18. package/lib/folderOpenState.d.ts +8 -0
  19. package/lib/folderOpenState.d.ts.map +1 -0
  20. package/lib/folderOpenState.js +22 -0
  21. package/lib/folderOpenState.js.map +1 -0
  22. package/lib/index.d.ts +17 -16
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +93 -49
  25. package/lib/index.js.map +1 -1
  26. package/lib/keyHandler.d.ts +2 -0
  27. package/lib/keyHandler.d.ts.map +1 -1
  28. package/lib/keyHandler.js +18 -0
  29. package/lib/keyHandler.js.map +1 -1
  30. package/lib/mouseHandler.d.ts.map +1 -1
  31. package/lib/mouseHandler.js +12 -12
  32. package/lib/mouseHandler.js.map +1 -1
  33. package/lib/node.d.ts +12 -10
  34. package/lib/node.d.ts.map +1 -1
  35. package/lib/node.js +12 -10
  36. package/lib/node.js.map +1 -1
  37. package/lib/nodeElement/folderElement.d.ts +7 -5
  38. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  39. package/lib/nodeElement/folderElement.js +33 -53
  40. package/lib/nodeElement/folderElement.js.map +1 -1
  41. package/lib/options.d.ts +19 -17
  42. package/lib/options.d.ts.map +1 -1
  43. package/lib/options.js +12 -0
  44. package/lib/options.js.map +1 -0
  45. package/lib/saveStateHandler.d.ts.map +1 -1
  46. package/lib/saveStateHandler.js +6 -6
  47. package/lib/saveStateHandler.js.map +1 -1
  48. package/lib/selectNodeHandler.d.ts.map +1 -1
  49. package/lib/selectNodeHandler.js +13 -1
  50. package/lib/selectNodeHandler.js.map +1 -1
  51. package/lib/version.d.ts +1 -1
  52. package/lib/version.js +1 -1
  53. package/lib/version.js.map +1 -1
  54. package/package.json +35 -29
  55. package/src/dataLoader.ts +3 -1
  56. package/src/dragAndDropHandler/generateHitAreas.ts +3 -2
  57. package/src/dragAndDropHandler/index.ts +3 -17
  58. package/src/elementsRenderer.ts +84 -33
  59. package/src/events.ts +13 -7
  60. package/src/folderOpenState.ts +38 -0
  61. package/src/index.ts +109 -59
  62. package/src/keyHandler.ts +20 -0
  63. package/src/mouseHandler.ts +15 -13
  64. package/src/node.ts +12 -10
  65. package/src/nodeElement/folderElement.ts +45 -70
  66. package/src/options.ts +36 -17
  67. package/src/saveStateHandler.ts +5 -8
  68. package/src/selectNodeHandler.ts +12 -1
  69. package/src/version.ts +1 -1
  70. package/tree_element.css +32 -5
  71. package/tree_element.debug.js +291 -165
  72. package/tree_element.debug.js.map +1 -1
  73. package/tree_element.js +2 -2
  74. package/tree_element.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import { getBoolString } from './util.js';
1
+ import { setFolderLiOpenState, setTogglerOpenState } from './folderOpenState.js';
2
2
 
3
3
  /* Renders the tree to html.
4
4
  *
@@ -46,13 +46,16 @@ class ElementsRenderer {
46
46
  this._setNodeElement = setNodeElement;
47
47
  this._showEmptyFolder = showEmptyFolder;
48
48
  this._tabIndex = tabIndex;
49
- this._openedIconElement = this._createButtonElement(openedIcon);
50
- this._closedIconElement = this._createButtonElement(closedIcon);
51
- this._rootUlTemplate = this._createUlTemplate(true);
52
- this._groupUlTemplate = this._createUlTemplate(false);
53
- this._nodeTemplate = this._createNodeTemplate();
54
- this._openedFolderTemplate = this._createFolderTemplate(true);
55
- this._closedFolderTemplate = this._createFolderTemplate(false);
49
+ this._icons = {
50
+ closed: this._createButtonElement(closedIcon),
51
+ opened: this._createButtonElement(openedIcon)
52
+ };
53
+ let templates = this._createTemplates();
54
+ this._closedFolderTemplate = templates.closedFolderTemplate;
55
+ this._groupUlTemplate = templates.groupUlTemplate;
56
+ this._nodeTemplate = templates.nodeTemplate;
57
+ this._openedFolderTemplate = templates.openedFolderTemplate;
58
+ this._rootUlTemplate = templates.rootUlTemplate;
56
59
  }
57
60
  _render(fromNode) {
58
61
  if (fromNode?.parent) {
@@ -86,6 +89,43 @@ class ElementsRenderer {
86
89
  this._createDomElements(this._htmlElement, tree.children, true, 1);
87
90
  }
88
91
  }
92
+
93
+ /* Change dragAndDrop after construction. The rendered lists and the
94
+ * templates for new lists get or lose the dnd class.
95
+ */
96
+ _setDragAndDrop(dragAndDrop) {
97
+ this._dragAndDrop = dragAndDrop;
98
+ this._updateTemplates();
99
+ for (let ul of this._htmlElement.querySelectorAll(`ul.${this._classNames.common}`)) {
100
+ ul.classList.toggle(this._classNames.dnd, dragAndDrop);
101
+ }
102
+ }
103
+
104
+ /* Change multiSelect after construction. Only the templates are updated;
105
+ * the tree must be rendered again.
106
+ */
107
+ _setMultiSelect(multiSelect) {
108
+ this._multiSelect = multiSelect;
109
+ this._updateTemplates();
110
+ }
111
+
112
+ /* Change tabIndex after construction. The rendered nodes and the
113
+ * templates for new nodes get the new tabindex. The tab stop is updated by
114
+ * TreeElement.updateTabStop.
115
+ */
116
+ _setTabIndex(tabIndex) {
117
+ this._tabIndex = tabIndex;
118
+ this._updateTemplates();
119
+ for (let li of this._htmlElement.querySelectorAll("li[role=treeitem]")) {
120
+ if (tabIndex === undefined) {
121
+ li.removeAttribute("tabindex");
122
+ } else if (!this._multiSelect && li.getAttribute("aria-selected") === "true") {
123
+ li.setAttribute("tabindex", String(tabIndex));
124
+ } else {
125
+ li.setAttribute("tabindex", "-1");
126
+ }
127
+ }
128
+ }
89
129
  _attachNodeData(node, li) {
90
130
  node.element = li;
91
131
  this._setNodeElement(li, node);
@@ -141,26 +181,19 @@ class ElementsRenderer {
141
181
  * state, so there is a template for each.
142
182
  */
143
183
  _createFolderTemplate(isOpen) {
144
- let liClasses = [this._classNames.common, this._classNames.folder];
145
- if (!isOpen) {
146
- liClasses.push(this._classNames.closed);
147
- }
148
- let li = this._createLiTemplate(liClasses.join(" "));
184
+ let li = this._createLiTemplate(`${this._classNames.common} ${this._classNames.folder}`);
185
+ setFolderLiOpenState(li, isOpen, this._classNames);
149
186
  let div = li.firstChild;
150
187
 
151
188
  // The toggler is hidden from screen readers: the icon is decoration, and
152
189
  // aria-expanded on the treeitem has the open state.
153
190
  let toggler = document.createElement("span");
154
- toggler.className = this._getButtonClasses(isOpen);
191
+ toggler.className = this._getButtonClasses();
155
192
  toggler.setAttribute("aria-hidden", "true");
156
- let iconElement = isOpen ? this._openedIconElement : this._closedIconElement;
157
- if (iconElement) {
158
- toggler.append(iconElement.cloneNode(true));
159
- }
193
+ setTogglerOpenState(toggler, isOpen, this._classNames, this._icons);
160
194
  if (this._buttonLeft) {
161
195
  div.append(toggler);
162
196
  }
163
- li.setAttribute("aria-expanded", getBoolString(isOpen));
164
197
 
165
198
  // title span
166
199
  div.append(this._createTitleSpanTemplate(true));
@@ -231,6 +264,15 @@ class ElementsRenderer {
231
264
  div.append(this._createTitleSpanTemplate(false));
232
265
  return li;
233
266
  }
267
+ _createTemplates() {
268
+ return {
269
+ closedFolderTemplate: this._createFolderTemplate(false),
270
+ groupUlTemplate: this._createUlTemplate(false),
271
+ nodeTemplate: this._createNodeTemplate(),
272
+ openedFolderTemplate: this._createFolderTemplate(true),
273
+ rootUlTemplate: this._createUlTemplate(true)
274
+ };
275
+ }
234
276
  _createTitleSpanTemplate(isFolder) {
235
277
  let titleSpan = document.createElement("span");
236
278
  let classes = `${this._classNames.title} ${this._classNames.common}`;
@@ -299,11 +341,8 @@ class ElementsRenderer {
299
341
  // is false. Otherwise the name would contain everything in the row.
300
342
  li.setAttribute("aria-label", titleSpan.textContent);
301
343
  }
302
- _getButtonClasses(isOpen) {
344
+ _getButtonClasses() {
303
345
  let classes = [this._classNames.toggler, this._classNames.common];
304
- if (!isOpen) {
305
- classes.push(this._classNames.closed);
306
- }
307
346
  if (this._buttonLeft) {
308
347
  classes.push(this._classNames.togglerLeft);
309
348
  } else {
@@ -318,6 +357,14 @@ class ElementsRenderer {
318
357
  _mustRenderChildren(node) {
319
358
  return node.hasChildren() && node.is_open === true;
320
359
  }
360
+ _updateTemplates() {
361
+ let templates = this._createTemplates();
362
+ this._closedFolderTemplate = templates.closedFolderTemplate;
363
+ this._groupUlTemplate = templates.groupUlTemplate;
364
+ this._nodeTemplate = templates.nodeTemplate;
365
+ this._openedFolderTemplate = templates.openedFolderTemplate;
366
+ this._rootUlTemplate = templates.rootUlTemplate;
367
+ }
321
368
  }
322
369
 
323
370
  export { ElementsRenderer as default };
@@ -1 +1 @@
1
- {"version":3,"file":"elementsRenderer.js","sources":["../src/elementsRenderer.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { GetTree, IsNodeSelected } from \"./methodTypes\";\nimport type { Node } from \"./node\";\nimport type { IconElement, OnCreateLi } from \"./options\";\n\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n autoEscape: boolean;\n buttonLeft: boolean;\n classNames: ClassNames;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n htmlElement: HTMLElement;\n isNodeSelected: IsNodeSelected;\n multiSelect: boolean;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n setNodeElement: (element: HTMLElement, node: Node) => void;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\n/* Renders the tree to html.\n *\n * The children of a closed folder are not rendered. They are rendered when\n * the folder is opened, see renderChildren.\n *\n * The elements are created by cloning templates. A template is a fully\n * built <li> or <ul> with everything that is the same for every node\n * (structure, roles, static classes, the toggler icon). Per node only the\n * parts that differ are set: the title, the aria attributes and the\n * selected and loading classes.\n */\nexport default class ElementsRenderer {\n public closedIconElement?: globalThis.Node;\n public openedIconElement?: globalThis.Node;\n private ariaLabel?: string;\n private ariaLabelledBy?: string;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private classNames: ClassNames;\n private closedFolderTemplate: HTMLLIElement;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private groupUlTemplate: HTMLUListElement;\n private htmlElement: HTMLElement;\n private isNodeSelected: IsNodeSelected;\n private multiSelect: boolean;\n private nodeTemplate: HTMLLIElement;\n private onCreateLi?: OnCreateLi;\n private openedFolderTemplate: HTMLLIElement;\n private rootUlTemplate: HTMLUListElement;\n private rtl?: boolean;\n private setNodeElement: (element: HTMLElement, node: Node) => void;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n classNames,\n closedIcon = \"-\",\n dragAndDrop,\n getTree,\n htmlElement,\n isNodeSelected,\n multiSelect,\n onCreateLi,\n openedIcon = \"+\",\n rtl,\n setNodeElement,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.ariaLabel = ariaLabel;\n this.ariaLabelledBy = ariaLabelledBy;\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.classNames = classNames;\n this.dragAndDrop = dragAndDrop;\n this.getTree = getTree;\n this.htmlElement = htmlElement;\n this.isNodeSelected = isNodeSelected;\n this.multiSelect = multiSelect;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.setNodeElement = setNodeElement;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon);\n this.closedIconElement = this.createButtonElement(closedIcon);\n\n this.rootUlTemplate = this.createUlTemplate(true);\n this.groupUlTemplate = this.createUlTemplate(false);\n this.nodeTemplate = this.createNodeTemplate();\n this.openedFolderTemplate = this.createFolderTemplate(true);\n this.closedFolderTemplate = this.createFolderTemplate(false);\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n /* Render the children of a rendered folder. Returns the new <ul>, or\n * null when the folder is not rendered or has no children.\n */\n public renderChildren(node: Node): HTMLUListElement | null {\n return node.element && node.hasChildren()\n ? this.createDomElements(\n node.element,\n node.children,\n false,\n node.getLevel() + 1,\n )\n : null;\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n const currentLi = node.element;\n const newLi = this.createLi(node, node.getLevel());\n currentLi.replaceWith(newLi);\n\n if (this.mustRenderChildren(node)) {\n this.createDomElements(newLi, node.children, false, node.getLevel() + 1);\n }\n }\n\n public renderFromRoot(): void {\n this.htmlElement.textContent = \"\";\n\n const tree = this.getTree();\n\n if (tree) {\n this.createDomElements(this.htmlElement, tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n this.setNodeElement(li, node);\n }\n\n /* Returns the template of a toggler icon; it is cloned for every folder.\n * A string is parsed as html and becomes a fragment, so it can hold\n * entities, text and elements.\n */\n private createButtonElement(value: IconElement): globalThis.Node | undefined {\n if (typeof value === \"string\") {\n const template = document.createElement(\"template\");\n // eslint-disable-next-line no-unsanitized/property -- icon options are documented to accept html\n template.innerHTML = value;\n\n return template.content;\n }\n return value.nodeType ? value : undefined;\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): HTMLUListElement {\n const template = isRootNode ? this.rootUlTemplate : this.groupUlTemplate;\n const ul = template.cloneNode() as HTMLUListElement;\n element.append(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.append(li);\n\n if (this.mustRenderChildren(child)) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n\n return ul;\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const template = node.is_open\n ? this.openedFolderTemplate\n : this.closedFolderTemplate;\n const li = template.cloneNode(true) as HTMLLIElement;\n\n if (isSelected) {\n li.classList.add(this.classNames.selected);\n }\n\n // li > div > [toggler], title span, [toggler]\n const div = li.firstChild as HTMLDivElement;\n const titleSpan = div.childNodes[\n this.buttonLeft ? 1 : 0\n ] as HTMLSpanElement;\n\n this.fillNode(li, titleSpan, node.name, isSelected, level);\n\n if (node.is_loading) {\n li.classList.add(this.classNames.loading);\n li.setAttribute(\"aria-busy\", \"true\");\n }\n\n return li;\n }\n\n /* Template for a folder <li>:\n * li > div > [toggler], title span, [toggler]\n * The toggler icon and the aria-expanded attribute depend on the open\n * state, so there is a template for each.\n */\n private createFolderTemplate(isOpen: boolean): HTMLLIElement {\n const liClasses = [this.classNames.common, this.classNames.folder];\n\n if (!isOpen) {\n liClasses.push(this.classNames.closed);\n }\n\n const li = this.createLiTemplate(liClasses.join(\" \"));\n const div = li.firstChild as HTMLDivElement;\n\n // The toggler is hidden from screen readers: the icon is decoration, and\n // aria-expanded on the treeitem has the open state.\n const toggler = document.createElement(\"span\");\n toggler.className = this.getButtonClasses(isOpen);\n toggler.setAttribute(\"aria-hidden\", \"true\");\n\n const iconElement = isOpen\n ? this.openedIconElement\n : this.closedIconElement;\n\n if (iconElement) {\n toggler.append(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.append(toggler);\n }\n\n li.setAttribute(\"aria-expanded\", getBoolString(isOpen));\n\n // title span\n div.append(this.createTitleSpanTemplate(true));\n\n if (!this.buttonLeft) {\n div.append(toggler);\n }\n\n return li;\n }\n\n /* Create the <li> element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = this.isNodeSelected(node);\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, li, isSelected);\n }\n\n return li;\n }\n\n /*\n Create the outer part of a <li> template: li > div\n The li is the treeitem, so the ul of its children is inside the treeitem.\n */\n private createLiTemplate(liClasses: string): HTMLLIElement {\n const li = document.createElement(\"li\");\n li.className = liClasses;\n li.setAttribute(\"role\", \"treeitem\");\n\n // Only a multiselect tree marks the nodes that are not selected\n if (this.multiSelect) {\n li.setAttribute(\"aria-selected\", \"false\");\n }\n\n // Every node is focusable, but only the tab stop is in the tab order\n if (this.tabIndex !== undefined) {\n li.setAttribute(\"tabindex\", \"-1\");\n }\n\n const div = document.createElement(\"div\");\n div.className = `${this.classNames.element} ${this.classNames.common}`;\n div.setAttribute(\"role\", \"none\");\n\n li.append(div);\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const li = this.nodeTemplate.cloneNode(true) as HTMLLIElement;\n\n if (isSelected) {\n li.classList.add(this.classNames.selected);\n }\n\n // li > div > title span\n const div = li.firstChild as HTMLDivElement;\n const titleSpan = div.firstChild as HTMLSpanElement;\n\n this.fillNode(li, titleSpan, node.name, isSelected, level);\n\n return li;\n }\n\n /*\n Template for a <li> without children: li > div > title span\n */\n private createNodeTemplate(): HTMLLIElement {\n const li = this.createLiTemplate(this.classNames.common);\n const div = li.firstChild as HTMLDivElement;\n\n div.append(this.createTitleSpanTemplate(false));\n\n return li;\n }\n\n private createTitleSpanTemplate(isFolder: boolean): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = `${this.classNames.title} ${this.classNames.common}`;\n\n if (isFolder) {\n classes += ` ${this.classNames.titleFolder}`;\n }\n\n classes += ` ${this.buttonLeft ? this.classNames.titleButtonLeft : this.classNames.titleButtonRight}`;\n\n titleSpan.className = classes;\n\n return titleSpan;\n }\n\n private createUlTemplate(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (isRootNode) {\n classString = this.classNames.tree;\n role = \"tree\";\n\n if (this.rtl) {\n classString += ` ${this.classNames.rtl}`;\n }\n } else {\n classString = \"\";\n role = \"group\";\n }\n\n if (this.dragAndDrop) {\n classString += ` ${this.classNames.dnd}`;\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `${this.classNames.common} ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n if (isRootNode) {\n if (this.ariaLabel !== undefined) {\n ul.setAttribute(\"aria-label\", this.ariaLabel);\n }\n\n if (this.ariaLabelledBy !== undefined) {\n ul.setAttribute(\"aria-labelledby\", this.ariaLabelledBy);\n }\n\n if (this.multiSelect) {\n ul.setAttribute(\"aria-multiselectable\", \"true\");\n }\n }\n\n return ul;\n }\n\n /*\n Set the parts of a cloned li and title span that differ per node\n */\n private fillNode(\n li: HTMLLIElement,\n titleSpan: HTMLSpanElement,\n nodeName: string,\n isSelected: boolean,\n level: number,\n ): void {\n li.setAttribute(\"aria-level\", String(level));\n\n if (isSelected) {\n li.setAttribute(\"aria-selected\", \"true\");\n\n const tabIndex = this.tabIndex;\n\n // With multiSelect the tab stop is the active node, see updateTabStop\n if (tabIndex !== undefined && !this.multiSelect) {\n li.setAttribute(\"tabindex\", String(tabIndex));\n }\n }\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n // eslint-disable-next-line no-unsanitized/property -- the user opted out of escaping with autoEscape: false\n titleSpan.innerHTML = nodeName;\n }\n\n // The treeitem is named by its title, without the html when autoEscape\n // is false. Otherwise the name would contain everything in the row.\n li.setAttribute(\"aria-label\", titleSpan.textContent);\n }\n\n private getButtonClasses(isOpen: boolean): string {\n const classes = [this.classNames.toggler, this.classNames.common];\n\n if (!isOpen) {\n classes.push(this.classNames.closed);\n }\n\n if (this.buttonLeft) {\n classes.push(this.classNames.togglerLeft);\n } else {\n classes.push(this.classNames.togglerRight);\n }\n\n return classes.join(\" \");\n }\n\n /*\n The children of a closed folder are rendered when it is opened\n */\n private mustRenderChildren(node: Node): boolean {\n return node.hasChildren() && node.is_open === true;\n }\n}\n"],"names":["ariaLabel","ariaLabelledBy","autoEscape","buttonLeft","classNames","dragAndDrop","getTree","htmlElement","isNodeSelected","multiSelect","onCreateLi","rtl","setNodeElement","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","rootUlTemplate","createUlTemplate","groupUlTemplate","nodeTemplate","createNodeTemplate","openedFolderTemplate","createFolderTemplate","closedFolderTemplate","render","renderFromNode","renderFromRoot","renderChildren","createDomElements","createLi","mustRenderChildren","attachNodeData","createFolderLi","fillNode","createLiTemplate","getButtonClasses","createTitleSpanTemplate","createNodeLi"],"mappings":"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"}
1
+ {"version":3,"file":"elementsRenderer.js","sources":["../src/elementsRenderer.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { FolderIcons } from \"./folderOpenState\";\nimport type { GetTree, IsNodeSelected } from \"./methodTypes\";\nimport type { Node } from \"./node\";\nimport type { IconElement, OnCreateLi } from \"./options\";\n\nimport { setFolderLiOpenState, setTogglerOpenState } from \"./folderOpenState\";\n\ninterface ElementsRendererParams {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n autoEscape: boolean;\n buttonLeft: boolean;\n classNames: ClassNames;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n htmlElement: HTMLElement;\n isNodeSelected: IsNodeSelected;\n multiSelect: boolean;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n setNodeElement: (element: HTMLElement, node: Node) => void;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\n/* Renders the tree to html.\n *\n * The children of a closed folder are not rendered. They are rendered when\n * the folder is opened, see renderChildren.\n *\n * The elements are created by cloning templates. A template is a fully\n * built <li> or <ul> with everything that is the same for every node\n * (structure, roles, static classes, the toggler icon). Per node only the\n * parts that differ are set: the title, the aria attributes and the\n * selected and loading classes.\n */\nexport default class ElementsRenderer {\n public icons: FolderIcons;\n private ariaLabel?: string;\n private ariaLabelledBy?: string;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private classNames: ClassNames;\n private closedFolderTemplate: HTMLLIElement;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private groupUlTemplate: HTMLUListElement;\n private htmlElement: HTMLElement;\n private isNodeSelected: IsNodeSelected;\n private multiSelect: boolean;\n private nodeTemplate: HTMLLIElement;\n private onCreateLi?: OnCreateLi;\n private openedFolderTemplate: HTMLLIElement;\n private rootUlTemplate: HTMLUListElement;\n private rtl?: boolean;\n private setNodeElement: (element: HTMLElement, node: Node) => void;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n classNames,\n closedIcon = \"-\",\n dragAndDrop,\n getTree,\n htmlElement,\n isNodeSelected,\n multiSelect,\n onCreateLi,\n openedIcon = \"+\",\n rtl,\n setNodeElement,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.ariaLabel = ariaLabel;\n this.ariaLabelledBy = ariaLabelledBy;\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.classNames = classNames;\n this.dragAndDrop = dragAndDrop;\n this.getTree = getTree;\n this.htmlElement = htmlElement;\n this.isNodeSelected = isNodeSelected;\n this.multiSelect = multiSelect;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.setNodeElement = setNodeElement;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.icons = {\n closed: this.createButtonElement(closedIcon),\n opened: this.createButtonElement(openedIcon),\n };\n\n const templates = this.createTemplates();\n this.closedFolderTemplate = templates.closedFolderTemplate;\n this.groupUlTemplate = templates.groupUlTemplate;\n this.nodeTemplate = templates.nodeTemplate;\n this.openedFolderTemplate = templates.openedFolderTemplate;\n this.rootUlTemplate = templates.rootUlTemplate;\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n /* Render the children of a rendered folder. Returns the new <ul>, or\n * null when the folder is not rendered or has no children.\n */\n public renderChildren(node: Node): HTMLUListElement | null {\n return node.element && node.hasChildren()\n ? this.createDomElements(\n node.element,\n node.children,\n false,\n node.getLevel() + 1,\n )\n : null;\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n const currentLi = node.element;\n const newLi = this.createLi(node, node.getLevel());\n currentLi.replaceWith(newLi);\n\n if (this.mustRenderChildren(node)) {\n this.createDomElements(newLi, node.children, false, node.getLevel() + 1);\n }\n }\n\n public renderFromRoot(): void {\n this.htmlElement.textContent = \"\";\n\n const tree = this.getTree();\n\n if (tree) {\n this.createDomElements(this.htmlElement, tree.children, true, 1);\n }\n }\n\n /* Change dragAndDrop after construction. The rendered lists and the\n * templates for new lists get or lose the dnd class.\n */\n public setDragAndDrop(dragAndDrop: boolean): void {\n this.dragAndDrop = dragAndDrop;\n this.updateTemplates();\n\n for (const ul of this.htmlElement.querySelectorAll(\n `ul.${this.classNames.common}`,\n )) {\n ul.classList.toggle(this.classNames.dnd, dragAndDrop);\n }\n }\n\n /* Change multiSelect after construction. Only the templates are updated;\n * the tree must be rendered again.\n */\n public setMultiSelect(multiSelect: boolean): void {\n this.multiSelect = multiSelect;\n this.updateTemplates();\n }\n\n /* Change tabIndex after construction. The rendered nodes and the\n * templates for new nodes get the new tabindex. The tab stop is updated by\n * TreeElement.updateTabStop.\n */\n public setTabIndex(tabIndex: number | undefined): void {\n this.tabIndex = tabIndex;\n this.updateTemplates();\n\n for (const li of this.htmlElement.querySelectorAll(\"li[role=treeitem]\")) {\n if (tabIndex === undefined) {\n li.removeAttribute(\"tabindex\");\n } else if (\n !this.multiSelect &&\n li.getAttribute(\"aria-selected\") === \"true\"\n ) {\n li.setAttribute(\"tabindex\", String(tabIndex));\n } else {\n li.setAttribute(\"tabindex\", \"-1\");\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n this.setNodeElement(li, node);\n }\n\n /* Returns the template of a toggler icon; it is cloned for every folder.\n * A string is parsed as html and becomes a fragment, so it can hold\n * entities, text and elements.\n */\n private createButtonElement(value: IconElement): globalThis.Node | undefined {\n if (typeof value === \"string\") {\n const template = document.createElement(\"template\");\n // eslint-disable-next-line no-unsanitized/property -- icon options are documented to accept html\n template.innerHTML = value;\n\n return template.content;\n }\n return value.nodeType ? value : undefined;\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): HTMLUListElement {\n const template = isRootNode ? this.rootUlTemplate : this.groupUlTemplate;\n const ul = template.cloneNode() as HTMLUListElement;\n element.append(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.append(li);\n\n if (this.mustRenderChildren(child)) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n\n return ul;\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const template = node.is_open\n ? this.openedFolderTemplate\n : this.closedFolderTemplate;\n const li = template.cloneNode(true) as HTMLLIElement;\n\n if (isSelected) {\n li.classList.add(this.classNames.selected);\n }\n\n // li > div > [toggler], title span, [toggler]\n const div = li.firstChild as HTMLDivElement;\n const titleSpan = div.childNodes[\n this.buttonLeft ? 1 : 0\n ] as HTMLSpanElement;\n\n this.fillNode(li, titleSpan, node.name, isSelected, level);\n\n if (node.is_loading) {\n li.classList.add(this.classNames.loading);\n li.setAttribute(\"aria-busy\", \"true\");\n }\n\n return li;\n }\n\n /* Template for a folder <li>:\n * li > div > [toggler], title span, [toggler]\n * The toggler icon and the aria-expanded attribute depend on the open\n * state, so there is a template for each.\n */\n private createFolderTemplate(isOpen: boolean): HTMLLIElement {\n const li = this.createLiTemplate(\n `${this.classNames.common} ${this.classNames.folder}`,\n );\n setFolderLiOpenState(li, isOpen, this.classNames);\n\n const div = li.firstChild as HTMLDivElement;\n\n // The toggler is hidden from screen readers: the icon is decoration, and\n // aria-expanded on the treeitem has the open state.\n const toggler = document.createElement(\"span\");\n toggler.className = this.getButtonClasses();\n toggler.setAttribute(\"aria-hidden\", \"true\");\n setTogglerOpenState(toggler, isOpen, this.classNames, this.icons);\n\n if (this.buttonLeft) {\n div.append(toggler);\n }\n\n // title span\n div.append(this.createTitleSpanTemplate(true));\n\n if (!this.buttonLeft) {\n div.append(toggler);\n }\n\n return li;\n }\n\n /* Create the <li> element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = this.isNodeSelected(node);\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, li, isSelected);\n }\n\n return li;\n }\n\n /*\n Create the outer part of a <li> template: li > div\n The li is the treeitem, so the ul of its children is inside the treeitem.\n */\n private createLiTemplate(liClasses: string): HTMLLIElement {\n const li = document.createElement(\"li\");\n li.className = liClasses;\n li.setAttribute(\"role\", \"treeitem\");\n\n // Only a multiselect tree marks the nodes that are not selected\n if (this.multiSelect) {\n li.setAttribute(\"aria-selected\", \"false\");\n }\n\n // Every node is focusable, but only the tab stop is in the tab order\n if (this.tabIndex !== undefined) {\n li.setAttribute(\"tabindex\", \"-1\");\n }\n\n const div = document.createElement(\"div\");\n div.className = `${this.classNames.element} ${this.classNames.common}`;\n div.setAttribute(\"role\", \"none\");\n\n li.append(div);\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const li = this.nodeTemplate.cloneNode(true) as HTMLLIElement;\n\n if (isSelected) {\n li.classList.add(this.classNames.selected);\n }\n\n // li > div > title span\n const div = li.firstChild as HTMLDivElement;\n const titleSpan = div.firstChild as HTMLSpanElement;\n\n this.fillNode(li, titleSpan, node.name, isSelected, level);\n\n return li;\n }\n\n /*\n Template for a <li> without children: li > div > title span\n */\n private createNodeTemplate(): HTMLLIElement {\n const li = this.createLiTemplate(this.classNames.common);\n const div = li.firstChild as HTMLDivElement;\n\n div.append(this.createTitleSpanTemplate(false));\n\n return li;\n }\n\n private createTemplates() {\n return {\n closedFolderTemplate: this.createFolderTemplate(false),\n groupUlTemplate: this.createUlTemplate(false),\n nodeTemplate: this.createNodeTemplate(),\n openedFolderTemplate: this.createFolderTemplate(true),\n rootUlTemplate: this.createUlTemplate(true),\n };\n }\n\n private createTitleSpanTemplate(isFolder: boolean): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = `${this.classNames.title} ${this.classNames.common}`;\n\n if (isFolder) {\n classes += ` ${this.classNames.titleFolder}`;\n }\n\n classes += ` ${this.buttonLeft ? this.classNames.titleButtonLeft : this.classNames.titleButtonRight}`;\n\n titleSpan.className = classes;\n\n return titleSpan;\n }\n\n private createUlTemplate(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (isRootNode) {\n classString = this.classNames.tree;\n role = \"tree\";\n\n if (this.rtl) {\n classString += ` ${this.classNames.rtl}`;\n }\n } else {\n classString = \"\";\n role = \"group\";\n }\n\n if (this.dragAndDrop) {\n classString += ` ${this.classNames.dnd}`;\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `${this.classNames.common} ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n if (isRootNode) {\n if (this.ariaLabel !== undefined) {\n ul.setAttribute(\"aria-label\", this.ariaLabel);\n }\n\n if (this.ariaLabelledBy !== undefined) {\n ul.setAttribute(\"aria-labelledby\", this.ariaLabelledBy);\n }\n\n if (this.multiSelect) {\n ul.setAttribute(\"aria-multiselectable\", \"true\");\n }\n }\n\n return ul;\n }\n\n /*\n Set the parts of a cloned li and title span that differ per node\n */\n private fillNode(\n li: HTMLLIElement,\n titleSpan: HTMLSpanElement,\n nodeName: string,\n isSelected: boolean,\n level: number,\n ): void {\n li.setAttribute(\"aria-level\", String(level));\n\n if (isSelected) {\n li.setAttribute(\"aria-selected\", \"true\");\n\n const tabIndex = this.tabIndex;\n\n // With multiSelect the tab stop is the active node, see updateTabStop\n if (tabIndex !== undefined && !this.multiSelect) {\n li.setAttribute(\"tabindex\", String(tabIndex));\n }\n }\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n // eslint-disable-next-line no-unsanitized/property -- the user opted out of escaping with autoEscape: false\n titleSpan.innerHTML = nodeName;\n }\n\n // The treeitem is named by its title, without the html when autoEscape\n // is false. Otherwise the name would contain everything in the row.\n li.setAttribute(\"aria-label\", titleSpan.textContent);\n }\n\n private getButtonClasses(): string {\n const classes = [this.classNames.toggler, this.classNames.common];\n\n if (this.buttonLeft) {\n classes.push(this.classNames.togglerLeft);\n } else {\n classes.push(this.classNames.togglerRight);\n }\n\n return classes.join(\" \");\n }\n\n /*\n The children of a closed folder are rendered when it is opened\n */\n private mustRenderChildren(node: Node): boolean {\n return node.hasChildren() && node.is_open === true;\n }\n\n private updateTemplates(): void {\n const templates = this.createTemplates();\n this.closedFolderTemplate = templates.closedFolderTemplate;\n this.groupUlTemplate = templates.groupUlTemplate;\n this.nodeTemplate = templates.nodeTemplate;\n this.openedFolderTemplate = templates.openedFolderTemplate;\n this.rootUlTemplate = templates.rootUlTemplate;\n }\n}\n"],"names":["ariaLabel","ariaLabelledBy","autoEscape","buttonLeft","classNames","dragAndDrop","getTree","htmlElement","isNodeSelected","multiSelect","onCreateLi","rtl","setNodeElement","showEmptyFolder","tabIndex","icons","createButtonElement","createTemplates","closedFolderTemplate","groupUlTemplate","nodeTemplate","openedFolderTemplate","rootUlTemplate","render","renderFromNode","renderFromRoot","renderChildren","createDomElements","createLi","mustRenderChildren","setDragAndDrop","updateTemplates","setMultiSelect","setTabIndex","attachNodeData","createFolderLi","fillNode","createFolderTemplate","createLiTemplate","getButtonClasses","createTitleSpanTemplate","createNodeLi","createNodeTemplate","createUlTemplate"],"mappings":"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"}
package/lib/events.d.ts CHANGED
@@ -13,7 +13,7 @@ export interface TreeEvents {
13
13
  /**
14
14
  * Dispatched once, after the tree is rendered for the first time. With
15
15
  * `dataUrl` this is after the data has arrived, so it is the moment the
16
- * api is safe to use:
16
+ * API is safe to use:
17
17
  *
18
18
  * ```js
19
19
  * element.addEventListener("tree.init", () => {
@@ -73,7 +73,7 @@ export interface TreeEvents {
73
73
  originalEvent: MouseEvent;
74
74
  };
75
75
  /**
76
- * Dispatched on a right click on a node, unless `useContextMenu` is
76
+ * Dispatched when a node is right-clicked, unless `useContextMenu` is
77
77
  * `false`. The browser's own menu is suppressed.
78
78
  *
79
79
  * @group Mouse
@@ -84,7 +84,7 @@ export interface TreeEvents {
84
84
  };
85
85
  /**
86
86
  * Dispatched when `Enter` is pressed on the selected node, or on the
87
- * focused node when no node is selected. Use it for what a click on a
87
+ * focused node when no node is selected. Use it for what clicking a
88
88
  * link would do, like opening the edit page of the node:
89
89
  *
90
90
  * ```js
@@ -130,7 +130,9 @@ export interface TreeEvents {
130
130
  */
131
131
  "tree.select": {
132
132
  /**
133
- The node that was selected before, if any.
133
+ The node that was selected before, if any. When several nodes were
134
+ selected, this is the first, and the others get a `tree.deselect`,
135
+ dispatched before this event.
134
136
  */
135
137
  deselectedNode: Node | null;
136
138
  /**
@@ -143,13 +145,17 @@ export interface TreeEvents {
143
145
  * is clicked again or passed to `selectNode` again with
144
146
  * `mustToggle: true`. No `tree.select` is dispatched for it.
145
147
  *
148
+ * When several nodes are selected and a click or `selectNode` selects just
149
+ * one node, it is dispatched for each node that loses the selection, except
150
+ * the one in the `deselectedNode` of `tree.select`.
151
+ *
146
152
  * ```js
147
153
  * element.addEventListener("tree.deselect", (e) => {
148
154
  * console.log("deselected", e.detail.node.name);
149
155
  * });
150
156
  * ```
151
157
  *
152
- * Selecting another node does not dispatch it — that is a `tree.select`
158
+ * Selecting another node does not dispatch it—that is a `tree.select`
153
159
  * with the previous node in `deselectedNode`. It is also not dispatched
154
160
  * by `selectNode` without `mustToggle: true`, `selectNode(null)`,
155
161
  * `removeFromSelection`, `removeNode`, `loadData` and restoring a saved
@@ -186,7 +192,7 @@ export interface TreeEvents {
186
192
  };
187
193
  /**
188
194
  * Dispatched when data is set on the tree, both from the `data` option
189
- * and from a url.
195
+ * and from a URL.
190
196
  *
191
197
  * @group Loading data
192
198
  */
@@ -211,7 +217,7 @@ export interface TreeEvents {
211
217
  };
212
218
  /**
213
219
  * Dispatched when a request finishes. It is dispatched when the request
214
- * fails too; a [`tree.load_failed`](#tree-load-failed) follows it.
220
+ * fails too, and a [`tree.load_failed`](#tree-load-failed) follows it.
215
221
  *
216
222
  * @group Loading data
217
223
  */
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,IAAI,CAAC;CAClB;AAGD,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa,IAAI,WAAW,CAC7E,UAAU,CAAC,IAAI,CAAC,CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;AAO7C,MAAM,WAAW,UAAU;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,WAAW,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,SAAS,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC3B,CAAC;IACF;;;;OAIG;IACH,eAAe,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC3B,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAClB,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC3B,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,eAAe,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,aAAa,CAAC;KAC9B,CAAC;IACF;;;;OAIG;IACH,WAAW,EAAE;QACX,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;OAIG;IACH,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE;QACb;;;;UAIE;QACF,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;QAC5B;;UAEE;QACF,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,EAAE;QACX;;UAEE;QACF,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;IACF;;;;;OAKG;IACH,eAAe,EAAE;QACf;;UAEE;QACF,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;KACvB,CAAC;IACF;;;;OAIG;IACH,mBAAmB,EAAE;QACnB,OAAO,EAAE,WAAW,CAAC;QACrB;;UAEE;QACF,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAClB,OAAO,EAAE,WAAW,CAAC;QACrB;;UAEE;QACF,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;IACF;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,EAAE;QAClB;;UAEE;QACF,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB;;UAEE;QACF,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,CAAC;CACH;AAGD,KAAK,YAAY,GAAG;KACjB,IAAI,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;CACzC,CAAC;AAGF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAiB,SAAQ,YAAY;KAAG;IAElD,UAAU,mBAAoB,SAAQ,YAAY;KAAG;IAErD,UAAU,cAAe,SAAQ,YAAY;KAAG;CACjD"}
@@ -0,0 +1,8 @@
1
+ import type { ClassNames } from "./classNames.js";
2
+ export interface FolderIcons {
3
+ closed?: globalThis.Node;
4
+ opened?: globalThis.Node;
5
+ }
6
+ export declare const setTogglerOpenState: (toggler: HTMLElement, isOpen: boolean, classNames: ClassNames, icons: FolderIcons) => void;
7
+ export declare const setFolderLiOpenState: (li: HTMLElement, isOpen: boolean, classNames: ClassNames) => void;
8
+ //# sourceMappingURL=folderOpenState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderOpenState.d.ts","sourceRoot":"","sources":["../src/folderOpenState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;CAC1B;AAOD,eAAO,MAAM,mBAAmB,GAC9B,SAAS,WAAW,EACpB,QAAQ,OAAO,EACf,YAAY,UAAU,EACtB,OAAO,WAAW,KACjB,IASF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,IAAI,WAAW,EACf,QAAQ,OAAO,EACf,YAAY,UAAU,KACrB,IAGF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { getBoolString } from './util.js';
2
+
3
+ /* The open state of a folder is shown on the toggler and on the <li>.
4
+ * These are used both when a folder is rendered and when it is opened or
5
+ * closed, so a rendered folder looks the same as a toggled one.
6
+ */
7
+
8
+ let setTogglerOpenState = (toggler, isOpen, classNames, icons) => {
9
+ toggler.classList.toggle(classNames.closed, !isOpen);
10
+ toggler.replaceChildren();
11
+ let iconElement = isOpen ? icons.opened : icons.closed;
12
+ if (iconElement) {
13
+ toggler.append(iconElement.cloneNode(true));
14
+ }
15
+ };
16
+ let setFolderLiOpenState = (li, isOpen, classNames) => {
17
+ li.classList.toggle(classNames.closed, !isOpen);
18
+ li.setAttribute("aria-expanded", getBoolString(isOpen));
19
+ };
20
+
21
+ export { setFolderLiOpenState, setTogglerOpenState };
22
+ //# sourceMappingURL=folderOpenState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderOpenState.js","sources":["../src/folderOpenState.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\n\nimport { getBoolString } from \"./util\";\n\nexport interface FolderIcons {\n closed?: globalThis.Node;\n opened?: globalThis.Node;\n}\n\n/* The open state of a folder is shown on the toggler and on the <li>.\n * These are used both when a folder is rendered and when it is opened or\n * closed, so a rendered folder looks the same as a toggled one.\n */\n\nexport const setTogglerOpenState = (\n toggler: HTMLElement,\n isOpen: boolean,\n classNames: ClassNames,\n icons: FolderIcons,\n): void => {\n toggler.classList.toggle(classNames.closed, !isOpen);\n toggler.replaceChildren();\n\n const iconElement = isOpen ? icons.opened : icons.closed;\n\n if (iconElement) {\n toggler.append(iconElement.cloneNode(true));\n }\n};\n\nexport const setFolderLiOpenState = (\n li: HTMLElement,\n isOpen: boolean,\n classNames: ClassNames,\n): void => {\n li.classList.toggle(classNames.closed, !isOpen);\n li.setAttribute(\"aria-expanded\", getBoolString(isOpen));\n};\n"],"names":[],"mappings":";;AASA;AACA;AACA;AACA;;AAEO,IAAM,mBAAmB,GAAG,CACjC,OAAoB,EACpB,MAAe,EACf,UAAsB,EACtB,KAAkB,KACT;EACT,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;EACpD,OAAO,CAAC,eAAe,EAAE;EAEzB,IAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAExD,EAAA,IAAI,WAAW,EAAE;IACf,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAA;AACF;AAEO,IAAM,oBAAoB,GAAG,CAClC,EAAe,EACf,MAAe,EACf,UAAsB,KACb;EACT,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;EAC/C,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AACzD;;"}
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { TreeEventName, TreeEvents } from "./events.js";
2
2
  import type { NodeData, NodeId, Position } from "./node.js";
3
- import type { TreeElementOptions } from "./options.js";
3
+ import type { ChangeableOption, TreeElementOptions } from "./options.js";
4
4
  import type { SavedState } from "./saveStateHandler.js";
5
5
  import type { SelectNodeOptions } from "./selectNodeHandler.js";
6
6
  import { Node } from "./node.js";
@@ -52,8 +52,9 @@ export default class TreeElement {
52
52
  */
53
53
  addNodeBefore(nodeData: NodeData, existingNode: Node): Node | null;
54
54
  /**
55
- * Inserts a new node between a node and its parent, taking the node as its
56
- * child.
55
+ * Inserts a new node between a node and its parent. The siblings of the node
56
+ * move along: the new node takes all children of the parent, and becomes its
57
+ * only child.
57
58
  *
58
59
  * @returns The new node, or `null` when the node has no parent.
59
60
  * @group Changing the tree
@@ -164,7 +165,7 @@ export default class TreeElement {
164
165
  */
165
166
  getSelectedNodes(): Node[];
166
167
  /**
167
- * Returns the current state — `open_nodes` and `selected_node` — whether or
168
+ * Returns the current state—`open_nodes` and `selected_node`—whether or
168
169
  * not `saveState` is enabled.
169
170
  *
170
171
  * @group State
@@ -177,7 +178,7 @@ export default class TreeElement {
177
178
  */
178
179
  getStateFromStorage(): null | SavedState;
179
180
  /**
180
- * Returns the root node. It is not rendered; its `children` are the
181
+ * Returns the root node. It is not rendered, and its `children` are the
181
182
  * top-level nodes. Also available as the `tree` property.
182
183
  *
183
184
  * @group Finding nodes
@@ -243,7 +244,7 @@ export default class TreeElement {
243
244
  */
244
245
  moveUp(): void;
245
246
  /**
246
- * Opens a folder, and the folders above it. A node marked `load_on_demand`
247
+ * Opens a folder, and the folders that contain it. A node marked `load_on_demand`
247
248
  * is fetched first, so await the promise when you need to know it is really
248
249
  * open.
249
250
  *
@@ -307,12 +308,13 @@ export default class TreeElement {
307
308
  */
308
309
  selectNode(node: Node | null, options?: SelectNodeOptions): void;
309
310
  /**
310
- * Changes an option after construction. See
311
- * [Options](/reference/options#changing-an-option-later) for the caveats.
311
+ * Changes an option after construction. Only some options can be changed:
312
+ * the others throw an error. See
313
+ * [Options](/reference/options#changing-an-option-later).
312
314
  *
313
315
  * @group Other
314
316
  */
315
- setOption(option: string, value: unknown): void;
317
+ setOption(option: ChangeableOption, value: unknown): void;
316
318
  /**
317
319
  * Applies a state to the tree, and saves it to storage when `saveState` is
318
320
  * enabled.
@@ -330,8 +332,8 @@ export default class TreeElement {
330
332
  */
331
333
  toggle(node: Node, slide?: boolean | null): Promise<void>;
332
334
  /**
333
- * Returns the tree as a json string, including changes made through the
334
- * api.
335
+ * Returns the tree as a JSON string, including changes made through the
336
+ * API.
335
337
  *
336
338
  * @group Other
337
339
  */
@@ -341,7 +343,7 @@ export default class TreeElement {
341
343
  * name.
342
344
  *
343
345
  * Changing the `id` re-indexes the node. `children` and `parent` are
344
- * ignored — use `loadData` or `moveNode` for those.
346
+ * ignored—use `loadData` or `moveNode` for those.
345
347
  *
346
348
  * @example
347
349
  * ```js
@@ -370,8 +372,6 @@ export default class TreeElement {
370
372
  private hasRenderedSelectedNode;
371
373
  private initData;
372
374
  private initTree;
373
- private isFocusOnTree;
374
- private isSelectedNodeInSubtree;
375
375
  private loadFolderOnDemand;
376
376
  private loadSubtree;
377
377
  private mouseCapture;
@@ -380,17 +380,18 @@ export default class TreeElement {
380
380
  private mouseStop;
381
381
  private openParents;
382
382
  private refreshElements;
383
+ private restoreFocus;
383
384
  private saveState;
384
- private selectCurrentNode;
385
385
  private setInitialState;
386
386
  private setInitialStateOnDemand;
387
+ private setMultiSelect;
387
388
  private setNodeElement;
388
389
  private triggerEvent;
389
390
  private updateTabStop;
390
391
  }
391
392
  export { type MoveInfo, type TreeEvent, type TreeEventName, type TreeEvents, } from "./events.js";
392
393
  export { type Node, type NodeData, type NodeId, type Position } from "./node.js";
393
- export { type TreeElementOptions } from "./options.js";
394
+ export { type ChangeableOption, type TreeElementOptions } from "./options.js";
394
395
  export { type SavedState } from "./saveStateHandler.js";
395
396
  export { type SelectNodeOptions } from "./selectNodeHandler.js";
396
397
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}