wj-elements 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animations.js +28 -51
- package/dist/animations.js.map +1 -1
- package/dist/base-path.js +19 -31
- package/dist/base-path.js.map +1 -1
- package/dist/custom-elements.json +11504 -11499
- package/dist/dark.css +1 -302
- package/dist/date.js +16 -36
- package/dist/date.js.map +1 -1
- package/dist/element-utils.js +20 -81
- package/dist/element-utils.js.map +1 -1
- package/dist/event.js +49 -165
- package/dist/event.js.map +1 -1
- package/dist/form-associated-element-BjeJn7j8.js +101 -0
- package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
- package/dist/icon-DmsqtDpL.js +102 -0
- package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
- package/dist/light.css +1 -731
- package/dist/localize.js +36 -111
- package/dist/localize.js.map +1 -1
- package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
- package/dist/permissions.js +14 -41
- package/dist/permissions.js.map +1 -1
- package/dist/popup.element-CbkhthPP.js +806 -0
- package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
- package/dist/router-links-CNsJ-elb.js +105 -0
- package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
- package/dist/skeleton.css +1 -197
- package/dist/styles.css +1 -866
- package/dist/universal-service.js +48 -109
- package/dist/universal-service.js.map +1 -1
- package/dist/utils.js +11 -18
- package/dist/utils.js.map +1 -1
- package/dist/web-types.json +760 -760
- package/dist/wje-accordion-item.js +33 -106
- package/dist/wje-accordion-item.js.map +1 -1
- package/dist/wje-accordion.js +19 -84
- package/dist/wje-accordion.js.map +1 -1
- package/dist/wje-animation.js +37 -4258
- package/dist/wje-animation.js.map +1 -1
- package/dist/wje-aside.js +9 -34
- package/dist/wje-aside.js.map +1 -1
- package/dist/wje-avatar.js +36 -126
- package/dist/wje-avatar.js.map +1 -1
- package/dist/wje-badge.js +10 -52
- package/dist/wje-badge.js.map +1 -1
- package/dist/wje-breadcrumb.js +205 -672
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-breadcrumbs.js +177 -633
- package/dist/wje-breadcrumbs.js.map +1 -1
- package/dist/wje-button-group.js +48 -153
- package/dist/wje-button-group.js.map +1 -1
- package/dist/wje-button.js +92 -413
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-card-content.js +7 -30
- package/dist/wje-card-content.js.map +1 -1
- package/dist/wje-card-controls.js +7 -30
- package/dist/wje-card-controls.js.map +1 -1
- package/dist/wje-card-header.js +7 -30
- package/dist/wje-card-header.js.map +1 -1
- package/dist/wje-card-subtitle.js +7 -34
- package/dist/wje-card-subtitle.js.map +1 -1
- package/dist/wje-card-title.js +7 -34
- package/dist/wje-card-title.js.map +1 -1
- package/dist/wje-card.js +15 -71
- package/dist/wje-card.js.map +1 -1
- package/dist/wje-carousel-item.js +12 -56
- package/dist/wje-carousel-item.js.map +1 -1
- package/dist/wje-carousel.js +154 -509
- package/dist/wje-carousel.js.map +1 -1
- package/dist/wje-checkbox.js +50 -227
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-chip.js +43 -160
- package/dist/wje-chip.js.map +1 -1
- package/dist/wje-col.js +7 -20
- package/dist/wje-col.js.map +1 -1
- package/dist/wje-color-picker.js +445 -1464
- package/dist/wje-color-picker.js.map +1 -1
- package/dist/wje-container.js +9 -35
- package/dist/wje-container.js.map +1 -1
- package/dist/wje-copy-button.js +64 -204
- package/dist/wje-copy-button.js.map +1 -1
- package/dist/wje-dialog.js +85 -553
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-divider.js +7 -34
- package/dist/wje-divider.js.map +1 -1
- package/dist/wje-dropdown.js +78 -305
- package/dist/wje-dropdown.js.map +1 -1
- package/dist/wje-element.js +191 -700
- package/dist/wje-element.js.map +1 -1
- package/dist/wje-file-upload-item.js +51 -156
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +181 -619
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/wje-footer.js +7 -31
- package/dist/wje-footer.js.map +1 -1
- package/dist/wje-form.js +7 -32
- package/dist/wje-form.js.map +1 -1
- package/dist/wje-format-digital.js +26 -118
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/wje-grid.js +7 -33
- package/dist/wje-grid.js.map +1 -1
- package/dist/wje-header.js +9 -35
- package/dist/wje-header.js.map +1 -1
- package/dist/wje-icon-library.js +12 -18
- package/dist/wje-icon-library.js.map +1 -1
- package/dist/wje-icon-picker.js +65 -320
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-icon.js +1 -1
- package/dist/wje-img-comparer.js +37 -114
- package/dist/wje-img-comparer.js.map +1 -1
- package/dist/wje-img.js +50 -198
- package/dist/wje-img.js.map +1 -1
- package/dist/wje-infinite-scroll.js +94 -346
- package/dist/wje-infinite-scroll.js.map +1 -1
- package/dist/wje-input-file.js +23 -84
- package/dist/wje-input-file.js.map +1 -1
- package/dist/wje-input.js +78 -392
- package/dist/wje-input.js.map +1 -1
- package/dist/wje-item.js +11 -64
- package/dist/wje-item.js.map +1 -1
- package/dist/wje-kanban.js +124 -401
- package/dist/wje-kanban.js.map +1 -1
- package/dist/wje-label.js +9 -32
- package/dist/wje-label.js.map +1 -1
- package/dist/wje-level-indicator.js +38 -157
- package/dist/wje-level-indicator.js.map +1 -1
- package/dist/wje-list.js +10 -40
- package/dist/wje-list.js.map +1 -1
- package/dist/wje-main.js +7 -31
- package/dist/wje-main.js.map +1 -1
- package/dist/wje-masonry.js +66 -211
- package/dist/wje-masonry.js.map +1 -1
- package/dist/wje-master.js +45 -161
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-menu-button.js +10 -38
- package/dist/wje-menu-button.js.map +1 -1
- package/dist/wje-menu-item.js +127 -577
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-menu-label.js +9 -35
- package/dist/wje-menu-label.js.map +1 -1
- package/dist/wje-menu.js +14 -49
- package/dist/wje-menu.js.map +1 -1
- package/dist/wje-option.js +48 -279
- package/dist/wje-option.js.map +1 -1
- package/dist/wje-options.js +130 -384
- package/dist/wje-options.js.map +1 -1
- package/dist/wje-orgchart-group.js +16 -52
- package/dist/wje-orgchart-group.js.map +1 -1
- package/dist/wje-orgchart-item.js +24 -93
- package/dist/wje-orgchart-item.js.map +1 -1
- package/dist/wje-orgchart.js +18 -68
- package/dist/wje-orgchart.js.map +1 -1
- package/dist/wje-pagination.js +113 -397
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-popup.js +3 -3
- package/dist/wje-popup.js.map +1 -1
- package/dist/wje-progress-bar.js +53 -205
- package/dist/wje-progress-bar.js.map +1 -1
- package/dist/wje-qr-code.js +398 -2980
- package/dist/wje-qr-code.js.map +1 -1
- package/dist/wje-radio-group.js +52 -190
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +24 -118
- package/dist/wje-radio.js.map +1 -1
- package/dist/wje-rate.js +62 -266
- package/dist/wje-rate.js.map +1 -1
- package/dist/wje-relative-time.js +24 -99
- package/dist/wje-relative-time.js.map +1 -1
- package/dist/wje-reorder-dropzone.js +9 -31
- package/dist/wje-reorder-dropzone.js.map +1 -1
- package/dist/wje-reorder-handle.js +67 -204
- package/dist/wje-reorder-handle.js.map +1 -1
- package/dist/wje-reorder-item.js +14 -44
- package/dist/wje-reorder-item.js.map +1 -1
- package/dist/wje-reorder.js +61 -246
- package/dist/wje-reorder.js.map +1 -1
- package/dist/wje-route.js +6 -24
- package/dist/wje-route.js.map +1 -1
- package/dist/wje-router-link.js +11 -39
- package/dist/wje-router-link.js.map +1 -1
- package/dist/wje-router-outlet.js +76 -172
- package/dist/wje-router-outlet.js.map +1 -1
- package/dist/wje-routerx.js +537 -1331
- package/dist/wje-routerx.js.map +1 -1
- package/dist/wje-row.js +9 -31
- package/dist/wje-row.js.map +1 -1
- package/dist/wje-select.js +326 -1152
- package/dist/wje-select.js.map +1 -1
- package/dist/wje-slider.js +44 -225
- package/dist/wje-slider.js.map +1 -1
- package/dist/wje-sliding-container.js +295 -1319
- package/dist/wje-sliding-container.js.map +1 -1
- package/dist/wje-split-view.js +35 -121
- package/dist/wje-split-view.js.map +1 -1
- package/dist/wje-status.js +14 -45
- package/dist/wje-status.js.map +1 -1
- package/dist/wje-step.js +9 -32
- package/dist/wje-step.js.map +1 -1
- package/dist/wje-stepper.js +109 -357
- package/dist/wje-stepper.js.map +1 -1
- package/dist/wje-store.js +67 -360
- package/dist/wje-store.js.map +1 -1
- package/dist/wje-tab-group.js +85 -314
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab-panel.js +7 -28
- package/dist/wje-tab-panel.js.map +1 -1
- package/dist/wje-tab.js +21 -198
- package/dist/wje-tab.js.map +1 -1
- package/dist/wje-textarea.js +64 -264
- package/dist/wje-textarea.js.map +1 -1
- package/dist/wje-thumbnail.js +10 -51
- package/dist/wje-thumbnail.js.map +1 -1
- package/dist/wje-toast.js +127 -632
- package/dist/wje-toast.js.map +1 -1
- package/dist/wje-toggle.js +52 -177
- package/dist/wje-toggle.js.map +1 -1
- package/dist/wje-toolbar-action.js +128 -456
- package/dist/wje-toolbar-action.js.map +1 -1
- package/dist/wje-toolbar.js +75 -270
- package/dist/wje-toolbar.js.map +1 -1
- package/dist/wje-tooltip.js +50 -161
- package/dist/wje-tooltip.js.map +1 -1
- package/dist/wje-tree-item.js +70 -301
- package/dist/wje-tree-item.js.map +1 -1
- package/dist/wje-tree.js +145 -489
- package/dist/wje-tree.js.map +1 -1
- package/dist/wje-visually-hidden.js +7 -34
- package/dist/wje-visually-hidden.js.map +1 -1
- package/package.json +3 -2
- package/dist/form-associated-element-DEQ4y-jn.js +0 -245
- package/dist/icon-CReYMzAK.js +0 -245
- package/dist/popup.element-CwXvVFK7.js +0 -2133
- package/dist/router-links-wjqCnncc.js +0 -156
package/dist/wje-tree-item.js
CHANGED
|
@@ -1,369 +1,138 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
class TreeItem extends WJElement {
|
|
7
|
-
/**
|
|
8
|
-
* Creates an instance of TreeItem.
|
|
9
|
-
*/
|
|
4
|
+
import e from "./wje-element.js";
|
|
5
|
+
class t extends e {
|
|
10
6
|
constructor() {
|
|
11
7
|
super();
|
|
12
|
-
/**
|
|
13
|
-
* The class name for the component.
|
|
14
|
-
* @type {string}
|
|
15
|
-
*/
|
|
16
8
|
__publicField(this, "className", "TreeItem");
|
|
17
9
|
this._selection = "single";
|
|
18
10
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* the 'expanded' attribute will be added to the element. When set to a falsy
|
|
22
|
-
* value, the 'expanded' attribute will be removed.
|
|
23
|
-
* @param {boolean} value A boolean value indicating whether the
|
|
24
|
-
* element should be expanded (true) or collapsed (false).
|
|
25
|
-
*/
|
|
26
|
-
set expanded(value) {
|
|
27
|
-
if (value) {
|
|
28
|
-
this.setAttribute("expanded", "");
|
|
29
|
-
} else {
|
|
30
|
-
this.removeAttribute("expanded");
|
|
31
|
-
}
|
|
11
|
+
set expanded(e2) {
|
|
12
|
+
e2 ? this.setAttribute("expanded", "") : this.removeAttribute("expanded");
|
|
32
13
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Retrieves the value of the 'expanded' state for the current element.
|
|
35
|
-
* This getter checks whether the 'expanded' attribute is present on the element.
|
|
36
|
-
* If the attribute exists, it returns true, representing that the element is expanded.
|
|
37
|
-
* Otherwise, it returns false, indicating that the element is not expanded.
|
|
38
|
-
* @returns {boolean} True if the 'expanded' attribute is present, false otherwise.
|
|
39
|
-
*/
|
|
40
14
|
get expanded() {
|
|
41
15
|
return this.hasAttribute("expanded");
|
|
42
16
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
* @param {boolean} value The value indicating whether the element should have the 'selected' attribute.
|
|
46
|
-
*/
|
|
47
|
-
set selected(value) {
|
|
48
|
-
this.removeAttribute("selected");
|
|
49
|
-
if (value) this.setAttribute("selected", "");
|
|
17
|
+
set selected(e2) {
|
|
18
|
+
this.removeAttribute("selected"), e2 && this.setAttribute("selected", "");
|
|
50
19
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Getter method for determining if the 'selected' attribute is present on the element.
|
|
53
|
-
* @returns {boolean} Returns true if the 'selected' attribute is present, otherwise false.
|
|
54
|
-
*/
|
|
55
20
|
get selected() {
|
|
56
21
|
return this.hasAttribute("selected");
|
|
57
22
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
* @param {string} value The selection mode to apply. Defaults to 'single'
|
|
61
|
-
* if no value is provided. Possible options may be
|
|
62
|
-
* specific to the implementation of the component
|
|
63
|
-
* (e.g., 'single', 'multiple').
|
|
64
|
-
*/
|
|
65
|
-
set selection(value) {
|
|
66
|
-
this._selection = value || "single";
|
|
23
|
+
set selection(e2) {
|
|
24
|
+
this._selection = e2 || "single";
|
|
67
25
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Retrieves the current selection.
|
|
70
|
-
* @returns {*} The value of the current selection.
|
|
71
|
-
*/
|
|
72
26
|
get selection() {
|
|
73
27
|
return this._selection;
|
|
74
28
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* This can be used to visually indicate an indeterminate state for elements like checkboxes.
|
|
78
|
-
* @param {boolean} value A boolean indicating whether to set the element to an indeterminate state.
|
|
79
|
-
* If true, the 'indeterminate' attribute is added to the element; if false, the attribute is removed.
|
|
80
|
-
*/
|
|
81
|
-
set indeterminate(value) {
|
|
82
|
-
this.removeAttribute("indeterminate");
|
|
83
|
-
if (value) this.setAttribute("indeterminate", "");
|
|
29
|
+
set indeterminate(e2) {
|
|
30
|
+
this.removeAttribute("indeterminate"), e2 && this.setAttribute("indeterminate", "");
|
|
84
31
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Retrieves the state of the indeterminate attribute.
|
|
87
|
-
* @returns {boolean} True if the indeterminate attribute is present, otherwise false.
|
|
88
|
-
*/
|
|
89
32
|
get indeterminate() {
|
|
90
33
|
return this.hasAttribute("indeterminate");
|
|
91
34
|
}
|
|
92
|
-
/**
|
|
93
|
-
* Returns the CSS stylesheet for the component.
|
|
94
|
-
* @static
|
|
95
|
-
* @returns {CSSStyleSheet} The CSS stylesheet
|
|
96
|
-
*/
|
|
97
35
|
static get cssStyleSheet() {
|
|
98
|
-
return
|
|
36
|
+
return ':host .native-tree-item{position:relative;display:flex;align-items:stretch;flex-direction:column}:host .native-tree-item.multiple .item{border-radius:0!important}:host .native-tree-item .item{position:relative;display:flex;align-items:center;padding-inline:var(--wje-tree-item-padding-inline);padding-block:var(--wje-tree-item-padding-block);border-radius:var(--wje-tree-item-border-radius);border-width:var(--wje-tree-item-border-width);border-style:var(--wje-tree-item-border-style);border-color:var(--wje-tree-item-border-color);background-color:var(--wje-tree-item-background);color:var(--wje-tree-item-color)}:host .native-tree-item .item:before,:host .native-tree-item .item:after{content:"";position:absolute;box-sizing:border-box;pointer-events:none;opacity:0;z-index:2}:host .native-tree-item .item:hover{border-color:var(--wje-tree-item-border-color-hover);background-color:var(--wje-tree-item-background-hover);color:var(--wje-tree-item-color-hover)}:host .native-tree-item .item .indent{display:block;width:calc(var(--wje-tree-item-indent) * var(--wje-tree-item-depth));flex-shrink:0}:host .native-tree-item .item .toggle{font-size:var(--wje-tree-item-font-size);display:flex;align-items:center;justify-content:center;box-sizing:content-box;width:var(--wje-tree-item-indent);height:var(--wje-tree-item-indent);flex-shrink:0}:host .native-tree-item .item wje-checkbox{font-size:var(--wje-tree-item-font-size);margin:0}:host .native-tree-item .item .content{font-size:var(--wje-tree-item-font-size)}:host .native-tree-item .item slot{display:flex;align-items:center}:host .native-tree-item .item slot:not([name])::slotted(wje-icon){margin-right:var(--wje-spacing-2x-small)}:host .native-tree-item .item slot[name=end]{margin-inline-start:auto}:host .native-tree-item .item slot[name=start]::slotted(.wje-tree-drag-handle){cursor:grab}:host .native-tree-item .children{display:none}:host .native-tree-item .children.open{font-size:var(--wje-tree-item-font-size);display:block}:host .native-tree-item .children.open :before{content:"";position:absolute;top:var(--wje-tree-item-indent);bottom:5px;left:calc((var(--wje-tree-item-indent) * var(--wje-tree-item-depth)) + 1em - (var(--wje-spacing-3x-small) * 2) - (var(--wje-tree-item-indent-guid-width) / 2));border-inline-end-width:var(--wje-tree-item-indent-guid-width);border-inline-end-style:var(--wje-tree-item-indent-guid-style);border-inline-end-color:var(--wje-tree-item-indent-guid-color);z-index:1}:host .native-tree-item.expanded .item slot[name=expand],:host .native-tree-item:not(.expanded) slot[name=collapse]{display:none}:host([selected]) .item{border-color:var(--wje-tree-item-border-color-selected);background-color:var(--wje-tree-item-background-selected);color:var(--wje-tree-item-color-selected)}:host(.wje-tree-dragging){opacity:.35}:host(.wje-tree-dragging) .item slot[name=start]::slotted(.wje-tree-drag-handle){cursor:grabbing}:host(.wje-tree-drop-before) .item:before{inset-inline:0;top:-1px;height:var(--wje-tree-item-drop-line-width);background-color:var(--wje-tree-item-drop-color);border-radius:var(--wje-tree-item-drop-line-border-radius);opacity:1}:host(.wje-tree-drop-after) .item:after{inset-inline:0;bottom:-1px;height:var(--wje-tree-item-drop-line-width);background-color:var(--wje-tree-item-drop-color);border-radius:var(--wje-tree-item-drop-line-border-radius);opacity:1}:host(.wje-tree-drop-inside) .item:before{top:0;right:0;bottom:0;left:0;border-width:var(--wje-tree-item-drop-border-width);border-style:var(--wje-tree-item-drop-border-style);border-color:var(--wje-tree-item-drop-border-color);border-radius:var(--wje-tree-item-drop-border-radius);opacity:1}:host([slot-hover-visible]) .item:hover slot[name=start],:host([slot-hover-visible]) .item:hover slot[name=end]{visibility:visible}:host([slot-hover-visible]) .item slot[name=start],:host([slot-hover-visible]) .item slot[name=end]{visibility:hidden}';
|
|
99
37
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Setup attributes for the Button element.
|
|
102
|
-
*/
|
|
103
38
|
setupAttributes() {
|
|
104
|
-
this.isShadowRoot = "open";
|
|
105
|
-
this.syncAria();
|
|
39
|
+
this.isShadowRoot = "open", this.syncAria();
|
|
106
40
|
}
|
|
107
41
|
connectedCallback() {
|
|
108
42
|
var _a;
|
|
109
|
-
(_a = super.connectedCallback) == null ? void 0 : _a.call(this);
|
|
110
|
-
this.syncNestingState();
|
|
43
|
+
(_a = super.connectedCallback) == null ? void 0 : _a.call(this), this.syncNestingState();
|
|
111
44
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Returns the list of attributes to observe for changes.
|
|
114
|
-
* @static
|
|
115
|
-
* @returns {Array<string>}
|
|
116
|
-
*/
|
|
117
45
|
static get observedAttributes() {
|
|
118
46
|
return ["selected", "indeterminate", "expanded"];
|
|
119
47
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
* Updates the checkbox state based on changes to the "selected" or "indeterminate" attributes.
|
|
123
|
-
* @param {string} name The name of the attribute that was changed.
|
|
124
|
-
* @param {string|null} oldValue The previous value of the attribute before the change.
|
|
125
|
-
* @param {string|null} newValue The new value of the attribute after the change.
|
|
126
|
-
* @returns {void}
|
|
127
|
-
*/
|
|
128
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
129
|
-
if (name === "expanded") {
|
|
130
|
-
this.setChildrenExpanded(this.expanded, { syncAttribute: false });
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (!this.checkbox) {
|
|
134
|
-
this.syncAria();
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
if (name === "selected") {
|
|
138
|
-
if (this.selected) {
|
|
139
|
-
this.checkbox.checked = true;
|
|
140
|
-
} else {
|
|
141
|
-
this.checkbox.checked = false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (name === "indeterminate" && !this.selected) {
|
|
145
|
-
this.checkbox.removeAttribute("indeterminate");
|
|
146
|
-
this.checkbox.removeAttribute("checked");
|
|
147
|
-
if (this.indeterminate) this.checkbox.setAttribute("indeterminate", "");
|
|
148
|
-
}
|
|
149
|
-
this.syncAria();
|
|
48
|
+
attributeChangedCallback(e2, t2, i) {
|
|
49
|
+
"expanded" !== e2 ? this.checkbox ? ("selected" === e2 && (this.selected ? this.checkbox.checked = true : this.checkbox.checked = false), "indeterminate" !== e2 || this.selected || (this.checkbox.removeAttribute("indeterminate"), this.checkbox.removeAttribute("checked"), this.indeterminate && this.checkbox.setAttribute("indeterminate", "")), this.syncAria()) : this.syncAria() : this.setChildrenExpanded(this.expanded, { syncAttribute: false });
|
|
150
50
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Custom logic executed before the draw process begins.
|
|
153
|
-
* Determines and sets the appropriate slot if the current item is nested.
|
|
154
|
-
* @returns {void} No return value.
|
|
155
|
-
*/
|
|
156
51
|
beforeDraw() {
|
|
157
52
|
var _a;
|
|
158
|
-
this.syncNestingState();
|
|
159
|
-
if ((_a = this.closest("wje-tree")) == null ? void 0 : _a.hasAttribute("slot-hover-visible"))
|
|
160
|
-
this.setAttribute("slot-hover-visible", "");
|
|
53
|
+
this.syncNestingState(), ((_a = this.closest("wje-tree")) == null ? void 0 : _a.hasAttribute("slot-hover-visible")) && this.setAttribute("slot-hover-visible", "");
|
|
161
54
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Synchronizes the nesting-related state on the host element.
|
|
164
|
-
* Sets the "slot" to children for nested items and updates
|
|
165
|
-
* the nesting depth used to compute visual indentation.
|
|
166
|
-
* @returns {void}
|
|
167
|
-
*/
|
|
168
55
|
syncNestingState() {
|
|
169
|
-
const
|
|
170
|
-
this.style.setProperty("--wje-tree-item-depth", String(
|
|
171
|
-
if (depth > 0) {
|
|
172
|
-
this.slot = "children";
|
|
173
|
-
} else if (this.getAttribute("slot") === "children") {
|
|
174
|
-
this.removeAttribute("slot");
|
|
175
|
-
}
|
|
56
|
+
const e2 = this.getNestingDepth();
|
|
57
|
+
this.style.setProperty("--wje-tree-item-depth", String(e2)), e2 > 0 ? this.slot = "children" : "children" === this.getAttribute("slot") && this.removeAttribute("slot");
|
|
176
58
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Creates and returns a document fragment representing the structure of a tree item component.
|
|
179
|
-
* The method constructs the DOM elements including the native container, indentation, toggle button,
|
|
180
|
-
* selection checkbox, label, and children container, along with their respective slots and attributes.
|
|
181
|
-
* It dynamically handles the creation of expand and collapse icons, as well as appending slots for
|
|
182
|
-
* child components.
|
|
183
|
-
* @returns {DocumentFragment} A fragment containing the complete tree item structure to be rendered.
|
|
184
|
-
*/
|
|
185
59
|
draw() {
|
|
186
|
-
let
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
let
|
|
191
|
-
|
|
192
|
-
let
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
let
|
|
205
|
-
|
|
206
|
-
children.classList.add("children");
|
|
207
|
-
let slot = document.createElement("slot");
|
|
208
|
-
slot.setAttribute("name", "children");
|
|
209
|
-
children.appendChild(slot);
|
|
210
|
-
let slotEnd = document.createElement("slot");
|
|
211
|
-
slotEnd.setAttribute("name", "end");
|
|
212
|
-
item.appendChild(slotStart);
|
|
213
|
-
item.appendChild(indent);
|
|
214
|
-
if (this.querySelectorAll(":scope > wje-tree-item").length > 0) {
|
|
60
|
+
let e2 = document.createDocumentFragment(), t2 = document.createElement("div");
|
|
61
|
+
t2.setAttribute("part", "native"), t2.classList.add("native-tree-item", "multiple" === this.selection ? "multiple" : "single");
|
|
62
|
+
let i = document.createElement("slot");
|
|
63
|
+
i.setAttribute("name", "start");
|
|
64
|
+
let r = document.createElement("div");
|
|
65
|
+
r.setAttribute("part", "item"), r.classList.add("item");
|
|
66
|
+
let n = document.createElement("div");
|
|
67
|
+
n.classList.add("indent");
|
|
68
|
+
let s = document.createElement("div");
|
|
69
|
+
s.classList.add("toggle");
|
|
70
|
+
let o = document.createElement("wje-checkbox");
|
|
71
|
+
this.selected && o.setAttribute("checked", "");
|
|
72
|
+
let l = document.createElement("div");
|
|
73
|
+
l.setAttribute("part", "label"), l.classList.add("content");
|
|
74
|
+
let d = document.createElement("slot"), a = document.createElement("div");
|
|
75
|
+
a.classList.add("children");
|
|
76
|
+
let c = document.createElement("slot");
|
|
77
|
+
c.setAttribute("name", "children"), a.appendChild(c);
|
|
78
|
+
let h = document.createElement("slot");
|
|
79
|
+
if (h.setAttribute("name", "end"), r.appendChild(i), r.appendChild(n), this.querySelectorAll(":scope > wje-tree-item").length > 0) {
|
|
215
80
|
if (this.querySelectorAll('[slot="expand"]').length < 1) {
|
|
216
|
-
let
|
|
217
|
-
|
|
218
|
-
expandIcon.setAttribute("slot", "expand");
|
|
219
|
-
this.appendChild(expandIcon);
|
|
81
|
+
let e4 = document.createElement("wje-icon");
|
|
82
|
+
e4.setAttribute("name", "chevron-right"), e4.setAttribute("slot", "expand"), this.appendChild(e4);
|
|
220
83
|
}
|
|
221
84
|
if (this.querySelectorAll('[slot="collapse"]').length < 1) {
|
|
222
|
-
let
|
|
223
|
-
|
|
224
|
-
collapseIcon.setAttribute("slot", "collapse");
|
|
225
|
-
this.appendChild(collapseIcon);
|
|
85
|
+
let e4 = document.createElement("wje-icon");
|
|
86
|
+
e4.setAttribute("name", "chevron-down"), e4.setAttribute("slot", "collapse"), this.appendChild(e4);
|
|
226
87
|
}
|
|
227
|
-
let
|
|
228
|
-
|
|
229
|
-
let
|
|
230
|
-
|
|
231
|
-
button.appendChild(expandSlot);
|
|
232
|
-
button.appendChild(collapseSlot);
|
|
88
|
+
let e3 = document.createElement("slot");
|
|
89
|
+
e3.setAttribute("name", "expand");
|
|
90
|
+
let t3 = document.createElement("slot");
|
|
91
|
+
t3.setAttribute("name", "collapse"), s.appendChild(e3), s.appendChild(t3);
|
|
233
92
|
}
|
|
234
|
-
|
|
235
|
-
if (this.selection === "multiple") item.appendChild(checkbox);
|
|
236
|
-
label.appendChild(slotElement);
|
|
237
|
-
item.appendChild(label);
|
|
238
|
-
item.appendChild(slotEnd);
|
|
239
|
-
native.appendChild(item);
|
|
240
|
-
native.appendChild(children);
|
|
241
|
-
fragment.appendChild(native);
|
|
242
|
-
this.checkbox = checkbox;
|
|
243
|
-
this.native = native;
|
|
244
|
-
this.button = button;
|
|
245
|
-
this.childrenElement = children;
|
|
246
|
-
this.childrenSlot = slot;
|
|
247
|
-
return fragment;
|
|
93
|
+
return r.appendChild(s), "multiple" === this.selection && r.appendChild(o), l.appendChild(d), r.appendChild(l), r.appendChild(h), t2.appendChild(r), t2.appendChild(a), e2.appendChild(t2), this.checkbox = o, this.native = t2, this.button = s, this.childrenElement = a, this.childrenSlot = c, e2;
|
|
248
94
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Executes operations to be performed after the draw action is completed.
|
|
251
|
-
* If the state indicates it is expanded, toggles its children.
|
|
252
|
-
* Additionally, sets up an event listener on the button element to handle toggling children upon click.
|
|
253
|
-
* @returns {void} Does not return a value.
|
|
254
|
-
*/
|
|
255
95
|
afterDraw() {
|
|
256
|
-
this.setChildrenExpanded(this.expanded, { syncAttribute: false });
|
|
257
|
-
this.button.addEventListener("click", this.toggleChildren.bind(this));
|
|
258
|
-
this.setAttribute("tabindex", "0");
|
|
259
|
-
this.syncAria();
|
|
96
|
+
this.setChildrenExpanded(this.expanded, { syncAttribute: false }), this.button.addEventListener("click", this.toggleChildren.bind(this)), this.setAttribute("tabindex", "0"), this.syncAria();
|
|
260
97
|
}
|
|
261
|
-
/**
|
|
262
|
-
* Determines if the current item is a nested item within a tree structure.
|
|
263
|
-
* Checks if the item's parent element exists and is also a tree item.
|
|
264
|
-
* @returns {boolean} Returns true if the current item is a nested tree item; otherwise, false.
|
|
265
|
-
*/
|
|
266
98
|
isNestedItem() {
|
|
267
|
-
const
|
|
268
|
-
return !!
|
|
99
|
+
const e2 = this.parentElement;
|
|
100
|
+
return !!e2 && this.isTreeItem(e2);
|
|
269
101
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Calculates nesting depth based on ancestor tree items.
|
|
272
|
-
* Root items have depth 0, direct children depth 1, etc.
|
|
273
|
-
* @returns {number}
|
|
274
|
-
*/
|
|
275
102
|
getNestingDepth() {
|
|
276
|
-
let
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if (this.isTreeItem(current)) depth += 1;
|
|
280
|
-
current = current.parentElement;
|
|
281
|
-
}
|
|
282
|
-
return depth;
|
|
103
|
+
let e2 = 0, t2 = this.parentElement;
|
|
104
|
+
for (; t2; ) this.isTreeItem(t2) && (e2 += 1), t2 = t2.parentElement;
|
|
105
|
+
return e2;
|
|
283
106
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
* @param {object} node The node to check.
|
|
287
|
-
* @returns {boolean} Returns true when the node is a tree item element.
|
|
288
|
-
*/
|
|
289
|
-
isTreeItem(node) {
|
|
290
|
-
return node instanceof Element && node.localName === "wje-tree-item";
|
|
107
|
+
isTreeItem(e2) {
|
|
108
|
+
return e2 instanceof Element && "wje-tree-item" === e2.localName;
|
|
291
109
|
}
|
|
292
|
-
/**
|
|
293
|
-
* Toggles the visibility state of the children element and updates the class of the parent element.
|
|
294
|
-
* The method toggles the 'open' class on the children elements and the 'expanded' class on the parent element,
|
|
295
|
-
* effectively showing or hiding the children and indicating the expanded state.
|
|
296
|
-
* @returns {void} Does not return a value.
|
|
297
|
-
*/
|
|
298
110
|
toggleChildren() {
|
|
299
111
|
this.setChildrenExpanded(!this.childrenElement.classList.contains("open"));
|
|
300
112
|
}
|
|
301
|
-
|
|
302
|
-
* Sets the rendered children visibility and optionally mirrors it to the expanded attribute.
|
|
303
|
-
* @param {boolean} expanded Whether child items should be visible.
|
|
304
|
-
* @param {object} [options] Configuration for attribute syncing.
|
|
305
|
-
* @param {boolean} [options.syncAttribute] Mirrors the visual state to the host attribute when true.
|
|
306
|
-
* @returns {void}
|
|
307
|
-
*/
|
|
308
|
-
setChildrenExpanded(expanded, options = {}) {
|
|
113
|
+
setChildrenExpanded(e2, t2 = {}) {
|
|
309
114
|
var _a, _b;
|
|
310
|
-
const
|
|
311
|
-
(_a = this.childrenElement) == null ? void 0 : _a.classList.toggle("open", expanded);
|
|
312
|
-
(_b = this.native) == null ? void 0 : _b.classList.toggle("expanded", expanded);
|
|
313
|
-
if (syncAttribute) {
|
|
314
|
-
if (expanded) this.setAttribute("expanded", "");
|
|
315
|
-
else this.removeAttribute("expanded");
|
|
316
|
-
}
|
|
317
|
-
this.syncAria();
|
|
115
|
+
const i = t2.syncAttribute ?? true;
|
|
116
|
+
(_a = this.childrenElement) == null ? void 0 : _a.classList.toggle("open", e2), (_b = this.native) == null ? void 0 : _b.classList.toggle("expanded", e2), i && (e2 ? this.setAttribute("expanded", "") : this.removeAttribute("expanded")), this.syncAria();
|
|
318
117
|
}
|
|
319
|
-
/**
|
|
320
|
-
* Syncs ARIA attributes on the host element.
|
|
321
|
-
*/
|
|
322
118
|
syncAria() {
|
|
323
119
|
var _a, _b;
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
role: "treeitem",
|
|
330
|
-
checked,
|
|
331
|
-
expanded
|
|
332
|
-
});
|
|
333
|
-
} else {
|
|
334
|
-
this.setAriaState({
|
|
335
|
-
role: "treeitem",
|
|
336
|
-
selected: this.selected,
|
|
337
|
-
expanded
|
|
338
|
-
});
|
|
339
|
-
}
|
|
120
|
+
const e2 = this.querySelectorAll(":scope > wje-tree-item").length > 0 ? (_b = (_a = this.native) == null ? void 0 : _a.classList) == null ? void 0 : _b.contains("expanded") : void 0;
|
|
121
|
+
if ("multiple" === this.selection) {
|
|
122
|
+
const t2 = this.indeterminate ? "mixed" : this.selected ? "true" : "false";
|
|
123
|
+
this.setAriaState({ role: "treeitem", checked: t2, expanded: e2 });
|
|
124
|
+
} else this.setAriaState({ role: "treeitem", selected: this.selected, expanded: e2 });
|
|
340
125
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
* @param {boolean} [options.includeDisabled] Determines whether disabled items should be included in the result. Defaults to true.
|
|
345
|
-
* @returns {Array} An array of child items that are valid tree items and meet the criteria specified in the options.
|
|
346
|
-
*/
|
|
347
|
-
getChildrenItems(options = {}) {
|
|
348
|
-
const includeDisabled = options.includeDisabled ?? true;
|
|
349
|
-
const assigned = this.childrenSlot ? this.childrenSlot.assignedElements({ flatten: true }) : [];
|
|
350
|
-
const direct = assigned.length ? assigned : Array.from(this.querySelectorAll(":scope > wje-tree-item"));
|
|
351
|
-
return direct.filter(
|
|
352
|
-
(item) => this.isTreeItem(item) && (includeDisabled || !item.disabled)
|
|
353
|
-
);
|
|
126
|
+
getChildrenItems(e2 = {}) {
|
|
127
|
+
const t2 = e2.includeDisabled ?? true, i = this.childrenSlot ? this.childrenSlot.assignedElements({ flatten: true }) : [];
|
|
128
|
+
return (i.length ? i : Array.from(this.querySelectorAll(":scope > wje-tree-item"))).filter((e3) => this.isTreeItem(e3) && (t2 || !e3.disabled));
|
|
354
129
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
* @param {object} [options] An optional object specifying filters or configurations for retrieving children.
|
|
358
|
-
* @returns {Array} An array containing all children and their descendants in a flat structure.
|
|
359
|
-
*/
|
|
360
|
-
getAllChildrenFlat(options = {}) {
|
|
361
|
-
const directChildren = this.getChildrenItems(options);
|
|
362
|
-
return directChildren.flatMap((child) => [child, ...child.getAllChildrenFlat(options)]);
|
|
130
|
+
getAllChildrenFlat(e2 = {}) {
|
|
131
|
+
return this.getChildrenItems(e2).flatMap((t2) => [t2, ...t2.getAllChildrenFlat(e2)]);
|
|
363
132
|
}
|
|
364
133
|
}
|
|
365
|
-
|
|
134
|
+
t.define("wje-tree-item", t);
|
|
366
135
|
export {
|
|
367
|
-
|
|
136
|
+
t as default
|
|
368
137
|
};
|
|
369
138
|
//# sourceMappingURL=wje-tree-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-tree-item.js","sources":["../packages/wje-tree-item/tree-item.element.js","../packages/wje-tree-item/tree-item.js"],"sourcesContent":["import { default as WJElement, WjElementUtils, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `wje-tree-item` is a custom web component used as a child of the `wje-tree`.\n * It represents a node within a tree structure, capable of nesting other items.\n * @summary Represents a single item in a tree structure.\n * @documentation https://elements.webjet.sk/components/tree-item\n * @status stable\n * @augments {HTMLElement}\n * @slot - Default slot for rendering the tree item's content (e.g., text or custom elements).\n * @csspart native - The native container of the tree item.\n * @cssproperty [--wje-tree-item-indent=var(--wje-spacing-large)] - Defines the indentation for nested tree items.\n * @cssproperty [--wje-tree-item-indent-guid-width=0px] - Specifies the width of the guide element shown next to a tree item.\n * @cssproperty [--wje-tree-item-indent-guid-style=solid] - Defines the guide border style for nested tree items.\n * @cssproperty [--wje-tree-item-indent-guid-color=var(--wje-border-color)] - Defines the guide border color for nested tree items.\n * @cssproperty [--wje-tree-item-border-radius=var(--wje-border-radius-medium)] - Sets the border radius of the tree item's container.\n * @cssproperty [--wje-tree-item-border-width=0px] - Sets the border width of the tree item row.\n * @cssproperty [--wje-tree-item-border-style=solid] - Sets the border style of the tree item row.\n * @cssproperty [--wje-tree-item-border-color=transparent] - Sets the border color of the tree item row.\n * @cssproperty [--wje-tree-item-border-color-hover=transparent] - Sets the border color of the hovered tree item row.\n * @cssproperty [--wje-tree-item-border-color-selected=transparent] - Sets the border color of the selected tree item row.\n * @cssproperty [--wje-tree-item-drop-color=var(--wje-color-primary)] - Sets the color of reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-line-width=2px] - Sets the thickness of before/after reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-line-border-radius=var(--wje-border-radius-pill)] - Sets the radius of before/after reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-border-width=1px] - Sets the width of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-style=solid] - Sets the style of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-color=var(--wje-tree-item-drop-color)] - Sets the color of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-radius=inherit] - Sets the radius of the inside reorder drop border.\n * @tag wje-tree-item\n */\n\nexport default class TreeItem extends WJElement {\n /**\n * Creates an instance of TreeItem.\n */\n constructor() {\n super();\n\n this._selection = 'single';\n }\n\n /**\n * Sets the expanded state of the element. When set to a truthy value,\n * the 'expanded' attribute will be added to the element. When set to a falsy\n * value, the 'expanded' attribute will be removed.\n * @param {boolean} value A boolean value indicating whether the\n * element should be expanded (true) or collapsed (false).\n */\n set expanded(value) {\n if (value) {\n this.setAttribute('expanded', '');\n } else {\n this.removeAttribute('expanded');\n }\n }\n\n /**\n * Retrieves the value of the 'expanded' state for the current element.\n * This getter checks whether the 'expanded' attribute is present on the element.\n * If the attribute exists, it returns true, representing that the element is expanded.\n * Otherwise, it returns false, indicating that the element is not expanded.\n * @returns {boolean} True if the 'expanded' attribute is present, false otherwise.\n */\n get expanded() {\n return this.hasAttribute('expanded');\n }\n\n /**\n * Sets the 'selected' attribute of the element. Removes the attribute if the provided value is falsy; otherwise, sets it.\n * @param {boolean} value The value indicating whether the element should have the 'selected' attribute.\n */\n set selected(value) {\n this.removeAttribute('selected');\n\n if (value) this.setAttribute('selected', '');\n }\n\n /**\n * Getter method for determining if the 'selected' attribute is present on the element.\n * @returns {boolean} Returns true if the 'selected' attribute is present, otherwise false.\n */\n get selected() {\n return this.hasAttribute('selected');\n }\n\n /**\n * Sets the selection mode for the component.\n * @param {string} value The selection mode to apply. Defaults to 'single'\n * if no value is provided. Possible options may be\n * specific to the implementation of the component\n * (e.g., 'single', 'multiple').\n */\n set selection(value) {\n this._selection = value || 'single';\n }\n\n /**\n * Retrieves the current selection.\n * @returns {*} The value of the current selection.\n */\n get selection() {\n return this._selection;\n }\n\n /**\n * Sets or removes the 'indeterminate' attribute based on the provided value.\n * This can be used to visually indicate an indeterminate state for elements like checkboxes.\n * @param {boolean} value A boolean indicating whether to set the element to an indeterminate state.\n * If true, the 'indeterminate' attribute is added to the element; if false, the attribute is removed.\n */\n set indeterminate(value) {\n this.removeAttribute('indeterminate');\n\n if (value) this.setAttribute('indeterminate', '');\n }\n\n /**\n * Retrieves the state of the indeterminate attribute.\n * @returns {boolean} True if the indeterminate attribute is present, otherwise false.\n */\n get indeterminate() {\n return this.hasAttribute('indeterminate');\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'TreeItem';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n this.syncNestingState();\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return ['selected', 'indeterminate', 'expanded'];\n }\n\n /**\n * Handles updates when observed attributes of the element are changed.\n * Updates the checkbox state based on changes to the \"selected\" or \"indeterminate\" attributes.\n * @param {string} name The name of the attribute that was changed.\n * @param {string|null} oldValue The previous value of the attribute before the change.\n * @param {string|null} newValue The new value of the attribute after the change.\n * @returns {void}\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'expanded') {\n this.setChildrenExpanded(this.expanded, { syncAttribute: false });\n return;\n }\n\n if (!this.checkbox) {\n this.syncAria();\n return;\n }\n if (name === 'selected') {\n // this.checkbox.removeAttribute('indeterminate');\n if (this.selected) {\n this.checkbox.checked = true;\n } else {\n this.checkbox.checked = false;\n }\n }\n\n if (name === 'indeterminate' && !this.selected) {\n this.checkbox.removeAttribute('indeterminate');\n this.checkbox.removeAttribute('checked');\n\n if (this.indeterminate) this.checkbox.setAttribute('indeterminate', '');\n }\n this.syncAria();\n }\n\n /**\n * Custom logic executed before the draw process begins.\n * Determines and sets the appropriate slot if the current item is nested.\n * @returns {void} No return value.\n */\n beforeDraw() {\n this.syncNestingState();\n\n if (this.closest('wje-tree')?.hasAttribute('slot-hover-visible'))\n this.setAttribute('slot-hover-visible', '');\n }\n\n /**\n * Synchronizes the nesting-related state on the host element.\n * Sets the \"slot\" to children for nested items and updates\n * the nesting depth used to compute visual indentation.\n * @returns {void}\n */\n syncNestingState() {\n const depth = this.getNestingDepth();\n this.style.setProperty('--wje-tree-item-depth', String(depth));\n\n if (depth > 0) {\n this.slot = 'children';\n } else if (this.getAttribute('slot') === 'children') {\n this.removeAttribute('slot');\n }\n }\n\n /**\n * Creates and returns a document fragment representing the structure of a tree item component.\n * The method constructs the DOM elements including the native container, indentation, toggle button,\n * selection checkbox, label, and children container, along with their respective slots and attributes.\n * It dynamically handles the creation of expand and collapse icons, as well as appending slots for\n * child components.\n * @returns {DocumentFragment} A fragment containing the complete tree item structure to be rendered.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tree-item', this.selection === 'multiple' ? 'multiple' : 'single');\n\n let slotStart = document.createElement('slot');\n slotStart.setAttribute('name', 'start');\n\n let item = document.createElement('div');\n item.setAttribute('part', 'item');\n item.classList.add('item');\n\n let indent = document.createElement('div');\n indent.classList.add('indent');\n\n let button = document.createElement('div');\n button.classList.add('toggle');\n\n let checkbox = document.createElement('wje-checkbox');\n if (this.selected) checkbox.setAttribute('checked', '');\n\n let label = document.createElement('div');\n label.setAttribute('part', 'label');\n label.classList.add('content');\n\n let slotElement = document.createElement('slot');\n\n let children = document.createElement('div');\n children.classList.add('children');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'children');\n children.appendChild(slot);\n\n let slotEnd = document.createElement('slot');\n slotEnd.setAttribute('name', 'end');\n\n item.appendChild(slotStart);\n item.appendChild(indent);\n\n if (this.querySelectorAll(':scope > wje-tree-item').length > 0) {\n if (this.querySelectorAll('[slot=\"expand\"]').length < 1) {\n let expandIcon = document.createElement('wje-icon');\n expandIcon.setAttribute('name', 'chevron-right');\n expandIcon.setAttribute('slot', 'expand');\n\n this.appendChild(expandIcon);\n }\n\n if (this.querySelectorAll('[slot=\"collapse\"]').length < 1) {\n let collapseIcon = document.createElement('wje-icon');\n collapseIcon.setAttribute('name', 'chevron-down');\n collapseIcon.setAttribute('slot', 'collapse');\n\n this.appendChild(collapseIcon);\n }\n\n let expandSlot = document.createElement('slot');\n expandSlot.setAttribute('name', 'expand');\n\n let collapseSlot = document.createElement('slot');\n collapseSlot.setAttribute('name', 'collapse');\n\n button.appendChild(expandSlot);\n button.appendChild(collapseSlot);\n }\n\n item.appendChild(button);\n\n if (this.selection === 'multiple') item.appendChild(checkbox);\n\n label.appendChild(slotElement);\n item.appendChild(label);\n item.appendChild(slotEnd);\n\n native.appendChild(item);\n native.appendChild(children);\n\n fragment.appendChild(native);\n\n this.checkbox = checkbox;\n this.native = native;\n this.button = button;\n this.childrenElement = children;\n this.childrenSlot = slot;\n\n return fragment;\n }\n\n /**\n * Executes operations to be performed after the draw action is completed.\n * If the state indicates it is expanded, toggles its children.\n * Additionally, sets up an event listener on the button element to handle toggling children upon click.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n this.setChildrenExpanded(this.expanded, { syncAttribute: false });\n\n this.button.addEventListener('click', this.toggleChildren.bind(this));\n this.setAttribute('tabindex', '0');\n this.syncAria();\n }\n\n /**\n * Determines if the current item is a nested item within a tree structure.\n * Checks if the item's parent element exists and is also a tree item.\n * @returns {boolean} Returns true if the current item is a nested tree item; otherwise, false.\n */\n isNestedItem() {\n const parent = this.parentElement;\n return !!parent && this.isTreeItem(parent);\n }\n\n /**\n * Calculates nesting depth based on ancestor tree items.\n * Root items have depth 0, direct children depth 1, etc.\n * @returns {number}\n */\n getNestingDepth() {\n let depth = 0;\n let current = this.parentElement;\n\n while (current) {\n if (this.isTreeItem(current)) depth += 1;\n current = current.parentElement;\n }\n\n return depth;\n }\n\n /**\n * Checks whether the given node is a tree item.\n * @param {object} node The node to check.\n * @returns {boolean} Returns true when the node is a tree item element.\n */\n isTreeItem(node) {\n return node instanceof Element && node.localName === 'wje-tree-item';\n }\n\n /**\n * Toggles the visibility state of the children element and updates the class of the parent element.\n * The method toggles the 'open' class on the children elements and the 'expanded' class on the parent element,\n * effectively showing or hiding the children and indicating the expanded state.\n * @returns {void} Does not return a value.\n */\n toggleChildren() {\n this.setChildrenExpanded(!this.childrenElement.classList.contains('open'));\n }\n\n /**\n * Sets the rendered children visibility and optionally mirrors it to the expanded attribute.\n * @param {boolean} expanded Whether child items should be visible.\n * @param {object} [options] Configuration for attribute syncing.\n * @param {boolean} [options.syncAttribute] Mirrors the visual state to the host attribute when true.\n * @returns {void}\n */\n setChildrenExpanded(expanded, options = {}) {\n const syncAttribute = options.syncAttribute ?? true;\n\n this.childrenElement?.classList.toggle('open', expanded);\n this.native?.classList.toggle('expanded', expanded);\n\n if (syncAttribute) {\n if (expanded) this.setAttribute('expanded', '');\n else this.removeAttribute('expanded');\n }\n\n this.syncAria();\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const hasChildren = this.querySelectorAll(':scope > wje-tree-item').length > 0;\n const expanded = hasChildren ? this.native?.classList?.contains('expanded') : undefined;\n if (this.selection === 'multiple') {\n const checked = this.indeterminate ? 'mixed' : (this.selected ? 'true' : 'false');\n this.setAriaState({\n role: 'treeitem',\n checked,\n expanded,\n });\n } else {\n this.setAriaState({\n role: 'treeitem',\n selected: this.selected,\n expanded,\n });\n }\n }\n\n /**\n * Retrieves the child items from the `childrenSlot` that match specific criteria.\n * @param {object} [options] Configuration options.\n * @param {boolean} [options.includeDisabled] Determines whether disabled items should be included in the result. Defaults to true.\n * @returns {Array} An array of child items that are valid tree items and meet the criteria specified in the options.\n */\n getChildrenItems(options = {}) {\n const includeDisabled = options.includeDisabled ?? true;\n\n const assigned = this.childrenSlot\n ? this.childrenSlot.assignedElements({ flatten: true })\n : [];\n const direct = assigned.length\n ? assigned\n : Array.from(this.querySelectorAll(':scope > wje-tree-item'));\n\n return direct.filter(\n (item) => this.isTreeItem(item) && (includeDisabled || !item.disabled)\n );\n }\n\n /**\n * Retrieves all descendant children of the current object in a flattened array structure.\n * @param {object} [options] An optional object specifying filters or configurations for retrieving children.\n * @returns {Array} An array containing all children and their descendants in a flat structure.\n */\n getAllChildrenFlat(options = {}) {\n const directChildren = this.getChildrenItems(options);\n return directChildren.flatMap((child) => [child, ...child.getAllChildrenFlat(options)]);\n }\n}\n","import TreeItem from './tree-item.element.js';\n\nexport default TreeItem;\n\nTreeItem.define('wje-tree-item', TreeItem);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-tree-item.js","sources":["../packages/wje-tree-item/tree-item.element.js","../packages/wje-tree-item/tree-item.js"],"sourcesContent":["import { default as WJElement, WjElementUtils, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `wje-tree-item` is a custom web component used as a child of the `wje-tree`.\n * It represents a node within a tree structure, capable of nesting other items.\n * @summary Represents a single item in a tree structure.\n * @documentation https://elements.webjet.sk/components/tree-item\n * @status stable\n * @augments {HTMLElement}\n * @slot - Default slot for rendering the tree item's content (e.g., text or custom elements).\n * @csspart native - The native container of the tree item.\n * @cssproperty [--wje-tree-item-indent=var(--wje-spacing-large)] - Defines the indentation for nested tree items.\n * @cssproperty [--wje-tree-item-indent-guid-width=0px] - Specifies the width of the guide element shown next to a tree item.\n * @cssproperty [--wje-tree-item-indent-guid-style=solid] - Defines the guide border style for nested tree items.\n * @cssproperty [--wje-tree-item-indent-guid-color=var(--wje-border-color)] - Defines the guide border color for nested tree items.\n * @cssproperty [--wje-tree-item-border-radius=var(--wje-border-radius-medium)] - Sets the border radius of the tree item's container.\n * @cssproperty [--wje-tree-item-border-width=0px] - Sets the border width of the tree item row.\n * @cssproperty [--wje-tree-item-border-style=solid] - Sets the border style of the tree item row.\n * @cssproperty [--wje-tree-item-border-color=transparent] - Sets the border color of the tree item row.\n * @cssproperty [--wje-tree-item-border-color-hover=transparent] - Sets the border color of the hovered tree item row.\n * @cssproperty [--wje-tree-item-border-color-selected=transparent] - Sets the border color of the selected tree item row.\n * @cssproperty [--wje-tree-item-drop-color=var(--wje-color-primary)] - Sets the color of reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-line-width=2px] - Sets the thickness of before/after reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-line-border-radius=var(--wje-border-radius-pill)] - Sets the radius of before/after reorder drop indicators.\n * @cssproperty [--wje-tree-item-drop-border-width=1px] - Sets the width of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-style=solid] - Sets the style of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-color=var(--wje-tree-item-drop-color)] - Sets the color of the inside reorder drop border.\n * @cssproperty [--wje-tree-item-drop-border-radius=inherit] - Sets the radius of the inside reorder drop border.\n * @tag wje-tree-item\n */\n\nexport default class TreeItem extends WJElement {\n /**\n * Creates an instance of TreeItem.\n */\n constructor() {\n super();\n\n this._selection = 'single';\n }\n\n /**\n * Sets the expanded state of the element. When set to a truthy value,\n * the 'expanded' attribute will be added to the element. When set to a falsy\n * value, the 'expanded' attribute will be removed.\n * @param {boolean} value A boolean value indicating whether the\n * element should be expanded (true) or collapsed (false).\n */\n set expanded(value) {\n if (value) {\n this.setAttribute('expanded', '');\n } else {\n this.removeAttribute('expanded');\n }\n }\n\n /**\n * Retrieves the value of the 'expanded' state for the current element.\n * This getter checks whether the 'expanded' attribute is present on the element.\n * If the attribute exists, it returns true, representing that the element is expanded.\n * Otherwise, it returns false, indicating that the element is not expanded.\n * @returns {boolean} True if the 'expanded' attribute is present, false otherwise.\n */\n get expanded() {\n return this.hasAttribute('expanded');\n }\n\n /**\n * Sets the 'selected' attribute of the element. Removes the attribute if the provided value is falsy; otherwise, sets it.\n * @param {boolean} value The value indicating whether the element should have the 'selected' attribute.\n */\n set selected(value) {\n this.removeAttribute('selected');\n\n if (value) this.setAttribute('selected', '');\n }\n\n /**\n * Getter method for determining if the 'selected' attribute is present on the element.\n * @returns {boolean} Returns true if the 'selected' attribute is present, otherwise false.\n */\n get selected() {\n return this.hasAttribute('selected');\n }\n\n /**\n * Sets the selection mode for the component.\n * @param {string} value The selection mode to apply. Defaults to 'single'\n * if no value is provided. Possible options may be\n * specific to the implementation of the component\n * (e.g., 'single', 'multiple').\n */\n set selection(value) {\n this._selection = value || 'single';\n }\n\n /**\n * Retrieves the current selection.\n * @returns {*} The value of the current selection.\n */\n get selection() {\n return this._selection;\n }\n\n /**\n * Sets or removes the 'indeterminate' attribute based on the provided value.\n * This can be used to visually indicate an indeterminate state for elements like checkboxes.\n * @param {boolean} value A boolean indicating whether to set the element to an indeterminate state.\n * If true, the 'indeterminate' attribute is added to the element; if false, the attribute is removed.\n */\n set indeterminate(value) {\n this.removeAttribute('indeterminate');\n\n if (value) this.setAttribute('indeterminate', '');\n }\n\n /**\n * Retrieves the state of the indeterminate attribute.\n * @returns {boolean} True if the indeterminate attribute is present, otherwise false.\n */\n get indeterminate() {\n return this.hasAttribute('indeterminate');\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'TreeItem';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n this.syncNestingState();\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return ['selected', 'indeterminate', 'expanded'];\n }\n\n /**\n * Handles updates when observed attributes of the element are changed.\n * Updates the checkbox state based on changes to the \"selected\" or \"indeterminate\" attributes.\n * @param {string} name The name of the attribute that was changed.\n * @param {string|null} oldValue The previous value of the attribute before the change.\n * @param {string|null} newValue The new value of the attribute after the change.\n * @returns {void}\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'expanded') {\n this.setChildrenExpanded(this.expanded, { syncAttribute: false });\n return;\n }\n\n if (!this.checkbox) {\n this.syncAria();\n return;\n }\n if (name === 'selected') {\n // this.checkbox.removeAttribute('indeterminate');\n if (this.selected) {\n this.checkbox.checked = true;\n } else {\n this.checkbox.checked = false;\n }\n }\n\n if (name === 'indeterminate' && !this.selected) {\n this.checkbox.removeAttribute('indeterminate');\n this.checkbox.removeAttribute('checked');\n\n if (this.indeterminate) this.checkbox.setAttribute('indeterminate', '');\n }\n this.syncAria();\n }\n\n /**\n * Custom logic executed before the draw process begins.\n * Determines and sets the appropriate slot if the current item is nested.\n * @returns {void} No return value.\n */\n beforeDraw() {\n this.syncNestingState();\n\n if (this.closest('wje-tree')?.hasAttribute('slot-hover-visible'))\n this.setAttribute('slot-hover-visible', '');\n }\n\n /**\n * Synchronizes the nesting-related state on the host element.\n * Sets the \"slot\" to children for nested items and updates\n * the nesting depth used to compute visual indentation.\n * @returns {void}\n */\n syncNestingState() {\n const depth = this.getNestingDepth();\n this.style.setProperty('--wje-tree-item-depth', String(depth));\n\n if (depth > 0) {\n this.slot = 'children';\n } else if (this.getAttribute('slot') === 'children') {\n this.removeAttribute('slot');\n }\n }\n\n /**\n * Creates and returns a document fragment representing the structure of a tree item component.\n * The method constructs the DOM elements including the native container, indentation, toggle button,\n * selection checkbox, label, and children container, along with their respective slots and attributes.\n * It dynamically handles the creation of expand and collapse icons, as well as appending slots for\n * child components.\n * @returns {DocumentFragment} A fragment containing the complete tree item structure to be rendered.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tree-item', this.selection === 'multiple' ? 'multiple' : 'single');\n\n let slotStart = document.createElement('slot');\n slotStart.setAttribute('name', 'start');\n\n let item = document.createElement('div');\n item.setAttribute('part', 'item');\n item.classList.add('item');\n\n let indent = document.createElement('div');\n indent.classList.add('indent');\n\n let button = document.createElement('div');\n button.classList.add('toggle');\n\n let checkbox = document.createElement('wje-checkbox');\n if (this.selected) checkbox.setAttribute('checked', '');\n\n let label = document.createElement('div');\n label.setAttribute('part', 'label');\n label.classList.add('content');\n\n let slotElement = document.createElement('slot');\n\n let children = document.createElement('div');\n children.classList.add('children');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'children');\n children.appendChild(slot);\n\n let slotEnd = document.createElement('slot');\n slotEnd.setAttribute('name', 'end');\n\n item.appendChild(slotStart);\n item.appendChild(indent);\n\n if (this.querySelectorAll(':scope > wje-tree-item').length > 0) {\n if (this.querySelectorAll('[slot=\"expand\"]').length < 1) {\n let expandIcon = document.createElement('wje-icon');\n expandIcon.setAttribute('name', 'chevron-right');\n expandIcon.setAttribute('slot', 'expand');\n\n this.appendChild(expandIcon);\n }\n\n if (this.querySelectorAll('[slot=\"collapse\"]').length < 1) {\n let collapseIcon = document.createElement('wje-icon');\n collapseIcon.setAttribute('name', 'chevron-down');\n collapseIcon.setAttribute('slot', 'collapse');\n\n this.appendChild(collapseIcon);\n }\n\n let expandSlot = document.createElement('slot');\n expandSlot.setAttribute('name', 'expand');\n\n let collapseSlot = document.createElement('slot');\n collapseSlot.setAttribute('name', 'collapse');\n\n button.appendChild(expandSlot);\n button.appendChild(collapseSlot);\n }\n\n item.appendChild(button);\n\n if (this.selection === 'multiple') item.appendChild(checkbox);\n\n label.appendChild(slotElement);\n item.appendChild(label);\n item.appendChild(slotEnd);\n\n native.appendChild(item);\n native.appendChild(children);\n\n fragment.appendChild(native);\n\n this.checkbox = checkbox;\n this.native = native;\n this.button = button;\n this.childrenElement = children;\n this.childrenSlot = slot;\n\n return fragment;\n }\n\n /**\n * Executes operations to be performed after the draw action is completed.\n * If the state indicates it is expanded, toggles its children.\n * Additionally, sets up an event listener on the button element to handle toggling children upon click.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n this.setChildrenExpanded(this.expanded, { syncAttribute: false });\n\n this.button.addEventListener('click', this.toggleChildren.bind(this));\n this.setAttribute('tabindex', '0');\n this.syncAria();\n }\n\n /**\n * Determines if the current item is a nested item within a tree structure.\n * Checks if the item's parent element exists and is also a tree item.\n * @returns {boolean} Returns true if the current item is a nested tree item; otherwise, false.\n */\n isNestedItem() {\n const parent = this.parentElement;\n return !!parent && this.isTreeItem(parent);\n }\n\n /**\n * Calculates nesting depth based on ancestor tree items.\n * Root items have depth 0, direct children depth 1, etc.\n * @returns {number}\n */\n getNestingDepth() {\n let depth = 0;\n let current = this.parentElement;\n\n while (current) {\n if (this.isTreeItem(current)) depth += 1;\n current = current.parentElement;\n }\n\n return depth;\n }\n\n /**\n * Checks whether the given node is a tree item.\n * @param {object} node The node to check.\n * @returns {boolean} Returns true when the node is a tree item element.\n */\n isTreeItem(node) {\n return node instanceof Element && node.localName === 'wje-tree-item';\n }\n\n /**\n * Toggles the visibility state of the children element and updates the class of the parent element.\n * The method toggles the 'open' class on the children elements and the 'expanded' class on the parent element,\n * effectively showing or hiding the children and indicating the expanded state.\n * @returns {void} Does not return a value.\n */\n toggleChildren() {\n this.setChildrenExpanded(!this.childrenElement.classList.contains('open'));\n }\n\n /**\n * Sets the rendered children visibility and optionally mirrors it to the expanded attribute.\n * @param {boolean} expanded Whether child items should be visible.\n * @param {object} [options] Configuration for attribute syncing.\n * @param {boolean} [options.syncAttribute] Mirrors the visual state to the host attribute when true.\n * @returns {void}\n */\n setChildrenExpanded(expanded, options = {}) {\n const syncAttribute = options.syncAttribute ?? true;\n\n this.childrenElement?.classList.toggle('open', expanded);\n this.native?.classList.toggle('expanded', expanded);\n\n if (syncAttribute) {\n if (expanded) this.setAttribute('expanded', '');\n else this.removeAttribute('expanded');\n }\n\n this.syncAria();\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const hasChildren = this.querySelectorAll(':scope > wje-tree-item').length > 0;\n const expanded = hasChildren ? this.native?.classList?.contains('expanded') : undefined;\n if (this.selection === 'multiple') {\n const checked = this.indeterminate ? 'mixed' : (this.selected ? 'true' : 'false');\n this.setAriaState({\n role: 'treeitem',\n checked,\n expanded,\n });\n } else {\n this.setAriaState({\n role: 'treeitem',\n selected: this.selected,\n expanded,\n });\n }\n }\n\n /**\n * Retrieves the child items from the `childrenSlot` that match specific criteria.\n * @param {object} [options] Configuration options.\n * @param {boolean} [options.includeDisabled] Determines whether disabled items should be included in the result. Defaults to true.\n * @returns {Array} An array of child items that are valid tree items and meet the criteria specified in the options.\n */\n getChildrenItems(options = {}) {\n const includeDisabled = options.includeDisabled ?? true;\n\n const assigned = this.childrenSlot\n ? this.childrenSlot.assignedElements({ flatten: true })\n : [];\n const direct = assigned.length\n ? assigned\n : Array.from(this.querySelectorAll(':scope > wje-tree-item'));\n\n return direct.filter(\n (item) => this.isTreeItem(item) && (includeDisabled || !item.disabled)\n );\n }\n\n /**\n * Retrieves all descendant children of the current object in a flattened array structure.\n * @param {object} [options] An optional object specifying filters or configurations for retrieving children.\n * @returns {Array} An array containing all children and their descendants in a flat structure.\n */\n getAllChildrenFlat(options = {}) {\n const directChildren = this.getChildrenItems(options);\n return directChildren.flatMap((child) => [child, ...child.getAllChildrenFlat(options)]);\n }\n}\n","import TreeItem from './tree-item.element.js';\n\nexport default TreeItem;\n\nTreeItem.define('wje-tree-item', TreeItem);\n"],"names":["TreeItem","WJElement","super","className","this","_selection","value","setAttribute","removeAttribute","expanded","hasAttribute","selected","cssStyleSheet","setupAttributes","isShadowRoot","syncAria","connectedCallback","syncNestingState","name","oldValue","newValue","checkbox","checked","indeterminate","setChildrenExpanded","syncAttribute","beforeDraw","closest","depth","getNestingDepth","style","setProperty","String","slot","getAttribute","draw","fragment","document","createDocumentFragment","native","createElement","classList","add","selection","slotStart","item","indent","button","label","slotElement","children","appendChild","slotEnd","querySelectorAll","length","expandIcon","collapseIcon","expandSlot","collapseSlot","childrenElement","childrenSlot","addEventListener","toggleChildren","bind","parent","parentElement","isTreeItem","current","node","Element","localName","contains","options","toggle","setAriaState","role","includeDisabled","assigned","assignedElements","flatten","Array","from","filter","disabled","getChildrenItems","flatMap","child","getAllChildrenFlat","define"],"mappings":"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"}
|