wj-elements 0.2.0-alpha.6 → 0.2.0-alpha.7
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/wje-select.js +102 -69
- package/dist/wje-select.js.map +1 -1
- package/package.json +1 -1
- package/dist/packages/index.d.ts +0 -107
- package/dist/packages/internals/form-associated-element.d.ts +0 -143
- package/dist/packages/localize/localize.d.ts +0 -48
- package/dist/packages/translations/en-gb.d.ts +0 -18
- package/dist/packages/translations/sk-sk.d.ts +0 -13
- package/dist/packages/utils/animations.d.ts +0 -2
- package/dist/packages/utils/base-path.d.ts +0 -14
- package/dist/packages/utils/date.d.ts +0 -2
- package/dist/packages/utils/element-utils.d.ts +0 -46
- package/dist/packages/utils/event.d.ts +0 -67
- package/dist/packages/utils/icon-library.d.ts +0 -3
- package/dist/packages/utils/localize.d.ts +0 -4
- package/dist/packages/utils/permissions.d.ts +0 -40
- package/dist/packages/utils/universal-service.d.ts +0 -18
- package/dist/packages/utils/utils.d.ts +0 -1
- package/dist/packages/wje-accordion/accordion.d.ts +0 -2
- package/dist/packages/wje-accordion/accordion.element.d.ts +0 -72
- package/dist/packages/wje-accordion/accordion.test.d.ts +0 -0
- package/dist/packages/wje-accordion-item/accordion-item.d.ts +0 -2
- package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +0 -40
- package/dist/packages/wje-animation/animation.d.ts +0 -2
- package/dist/packages/wje-animation/animation.element.d.ts +0 -158
- package/dist/packages/wje-animation/animation.test.d.ts +0 -1
- package/dist/packages/wje-aside/aside.d.ts +0 -2
- package/dist/packages/wje-aside/aside.element.d.ts +0 -31
- package/dist/packages/wje-avatar/avatar.d.ts +0 -2
- package/dist/packages/wje-avatar/avatar.element.d.ts +0 -76
- package/dist/packages/wje-avatar/avatar.test.d.ts +0 -1
- package/dist/packages/wje-avatar/service/service.d.ts +0 -52
- package/dist/packages/wje-badge/badge.d.ts +0 -2
- package/dist/packages/wje-badge/badge.element.d.ts +0 -35
- package/dist/packages/wje-badge/badge.test.d.ts +0 -1
- package/dist/packages/wje-breadcrumb/breadcrumb.d.ts +0 -2
- package/dist/packages/wje-breadcrumb/breadcrumb.element.d.ts +0 -98
- package/dist/packages/wje-breadcrumbs/breadcrumbs.d.ts +0 -2
- package/dist/packages/wje-breadcrumbs/breadcrumbs.element.d.ts +0 -105
- package/dist/packages/wje-breadcrumbs/breadcrumbs.test.d.ts +0 -1
- package/dist/packages/wje-button/button.d.ts +0 -2
- package/dist/packages/wje-button/button.element.d.ts +0 -204
- package/dist/packages/wje-button/button.test.d.ts +0 -1
- package/dist/packages/wje-button-group/button-group.d.ts +0 -2
- package/dist/packages/wje-button-group/button-group.element.d.ts +0 -96
- package/dist/packages/wje-card/card.d.ts +0 -2
- package/dist/packages/wje-card/card.element.d.ts +0 -31
- package/dist/packages/wje-card-content/card-content.d.ts +0 -2
- package/dist/packages/wje-card-content/card-content.element.d.ts +0 -22
- package/dist/packages/wje-card-controls/card-controls.d.ts +0 -2
- package/dist/packages/wje-card-controls/card-controls.element.d.ts +0 -23
- package/dist/packages/wje-card-header/card-header.d.ts +0 -2
- package/dist/packages/wje-card-header/card-header.element.d.ts +0 -22
- package/dist/packages/wje-card-subtitle/card-subtitle.d.ts +0 -2
- package/dist/packages/wje-card-subtitle/card-subtitle.element.d.ts +0 -30
- package/dist/packages/wje-card-title/card-title.d.ts +0 -2
- package/dist/packages/wje-card-title/card-title.element.d.ts +0 -32
- package/dist/packages/wje-carousel/carousel.d.ts +0 -2
- package/dist/packages/wje-carousel/carousel.element.d.ts +0 -154
- package/dist/packages/wje-carousel-item/carousel-item.d.ts +0 -2
- package/dist/packages/wje-carousel-item/carousel-item.element.d.ts +0 -38
- package/dist/packages/wje-checkbox/checkbox.d.ts +0 -2
- package/dist/packages/wje-checkbox/checkbox.element.d.ts +0 -100
- package/dist/packages/wje-chip/chip.d.ts +0 -2
- package/dist/packages/wje-chip/chip.element.d.ts +0 -76
- package/dist/packages/wje-chip/chip.test.d.ts +0 -1
- package/dist/packages/wje-col/col.d.ts +0 -2
- package/dist/packages/wje-col/col.element.d.ts +0 -16
- package/dist/packages/wje-color-picker/color-picker.d.ts +0 -2
- package/dist/packages/wje-color-picker/color-picker.element.d.ts +0 -230
- package/dist/packages/wje-color-picker/color-picker.test.d.ts +0 -1
- package/dist/packages/wje-container/container.d.ts +0 -2
- package/dist/packages/wje-container/container.element.d.ts +0 -31
- package/dist/packages/wje-copy-button/copy-button.d.ts +0 -2
- package/dist/packages/wje-copy-button/copy-button.element.d.ts +0 -89
- package/dist/packages/wje-copy-button/service/service.d.ts +0 -12
- package/dist/packages/wje-dialog/dialog.d.ts +0 -2
- package/dist/packages/wje-dialog/dialog.element.d.ts +0 -132
- package/dist/packages/wje-divider/divider.d.ts +0 -2
- package/dist/packages/wje-divider/divider.element.d.ts +0 -32
- package/dist/packages/wje-dropdown/dropdown.d.ts +0 -2
- package/dist/packages/wje-dropdown/dropdown.element.d.ts +0 -108
- package/dist/packages/wje-element/element.d.ts +0 -341
- package/dist/packages/wje-file-upload/file-upload.d.ts +0 -2
- package/dist/packages/wje-file-upload/file-upload.element.d.ts +0 -203
- package/dist/packages/wje-file-upload/file-upload.test.d.ts +0 -1
- package/dist/packages/wje-file-upload/service/service.d.ts +0 -70
- package/dist/packages/wje-file-upload-item/file-upload-item.d.ts +0 -2
- package/dist/packages/wje-file-upload-item/file-upload-item.element.d.ts +0 -84
- package/dist/packages/wje-footer/footer.d.ts +0 -2
- package/dist/packages/wje-footer/footer.element.d.ts +0 -28
- package/dist/packages/wje-form/form.d.ts +0 -2
- package/dist/packages/wje-form/form.element.d.ts +0 -28
- package/dist/packages/wje-format-digital/format-digital.d.ts +0 -2
- package/dist/packages/wje-format-digital/format-digital.element.d.ts +0 -83
- package/dist/packages/wje-format-digital/format-digital.test.d.ts +0 -1
- package/dist/packages/wje-grid/grid.d.ts +0 -2
- package/dist/packages/wje-grid/grid.element.d.ts +0 -26
- package/dist/packages/wje-header/header.d.ts +0 -2
- package/dist/packages/wje-header/header.element.d.ts +0 -35
- package/dist/packages/wje-icon/icon.d.ts +0 -2
- package/dist/packages/wje-icon/icon.element.d.ts +0 -40
- package/dist/packages/wje-icon/service/library.d.ts +0 -3
- package/dist/packages/wje-icon/service/service.d.ts +0 -11
- package/dist/packages/wje-icon-picker/icon-picker.d.ts +0 -2
- package/dist/packages/wje-icon-picker/icon-picker.element.d.ts +0 -210
- package/dist/packages/wje-img/img.d.ts +0 -2
- package/dist/packages/wje-img/img.element.d.ts +0 -118
- package/dist/packages/wje-img-comparer/img-comparer.d.ts +0 -2
- package/dist/packages/wje-img-comparer/img-comparer.element.d.ts +0 -60
- package/dist/packages/wje-img-comparer/service/service.d.ts +0 -1
- package/dist/packages/wje-infinite-scroll/infinite-scroll.d.ts +0 -2
- package/dist/packages/wje-infinite-scroll/infinite-scroll.element.d.ts +0 -173
- package/dist/packages/wje-input/input.d.ts +0 -2
- package/dist/packages/wje-input/input.element.d.ts +0 -159
- package/dist/packages/wje-input-file/input-file.d.ts +0 -2
- package/dist/packages/wje-input-file/input-file.element.d.ts +0 -50
- package/dist/packages/wje-item/item.d.ts +0 -2
- package/dist/packages/wje-item/item.element.d.ts +0 -68
- package/dist/packages/wje-kanban/kanban.d.ts +0 -2
- package/dist/packages/wje-kanban/kanban.element.d.ts +0 -182
- package/dist/packages/wje-label/label.d.ts +0 -2
- package/dist/packages/wje-label/label.element.d.ts +0 -34
- package/dist/packages/wje-level-indicator/level-indicator.d.ts +0 -2
- package/dist/packages/wje-level-indicator/level-indicator.element.d.ts +0 -91
- package/dist/packages/wje-list/list.d.ts +0 -2
- package/dist/packages/wje-list/list.element.d.ts +0 -31
- package/dist/packages/wje-main/main.d.ts +0 -2
- package/dist/packages/wje-main/main.element.d.ts +0 -30
- package/dist/packages/wje-masonry/masonry.d.ts +0 -2
- package/dist/packages/wje-masonry/masonry.element.d.ts +0 -114
- package/dist/packages/wje-masonry/service/service.d.ts +0 -32
- package/dist/packages/wje-menu/menu.d.ts +0 -2
- package/dist/packages/wje-menu/menu.element.d.ts +0 -47
- package/dist/packages/wje-menu-button/menu-button.d.ts +0 -2
- package/dist/packages/wje-menu-button/menu-button.element.d.ts +0 -34
- package/dist/packages/wje-menu-item/menu-item.d.ts +0 -2
- package/dist/packages/wje-menu-item/menu-item.element.d.ts +0 -161
- package/dist/packages/wje-menu-label/menu-label.d.ts +0 -2
- package/dist/packages/wje-menu-label/menu-label.element.d.ts +0 -39
- package/dist/packages/wje-option/option.d.ts +0 -2
- package/dist/packages/wje-option/option.element.d.ts +0 -95
- package/dist/packages/wje-options/options.d.ts +0 -2
- package/dist/packages/wje-options/options.element.d.ts +0 -232
- package/dist/packages/wje-orgchart/orgchart.d.ts +0 -2
- package/dist/packages/wje-orgchart/orgchart.element.d.ts +0 -24
- package/dist/packages/wje-orgchart-group/orgchart-group.d.ts +0 -2
- package/dist/packages/wje-orgchart-group/orgchart-group.element.d.ts +0 -28
- package/dist/packages/wje-orgchart-item/orgchart-item.d.ts +0 -2
- package/dist/packages/wje-orgchart-item/orgchart-item.element.d.ts +0 -49
- package/dist/packages/wje-pagination/pagination.d.ts +0 -2
- package/dist/packages/wje-pagination/pagination.element.d.ts +0 -178
- package/dist/packages/wje-pagination/pagination.test.d.ts +0 -1
- package/dist/packages/wje-pagination/service/service.d.ts +0 -9
- package/dist/packages/wje-panel/panel.d.ts +0 -2
- package/dist/packages/wje-panel/panel.element.d.ts +0 -34
- package/dist/packages/wje-popup/popup.d.ts +0 -2
- package/dist/packages/wje-popup/popup.element.d.ts +0 -145
- package/dist/packages/wje-progress-bar/progress-bar.d.ts +0 -2
- package/dist/packages/wje-progress-bar/progress-bar.element.d.ts +0 -96
- package/dist/packages/wje-qr-code/qr-code.d.ts +0 -2
- package/dist/packages/wje-qr-code/qr-code.element.d.ts +0 -33
- package/dist/packages/wje-radio/radio.d.ts +0 -2
- package/dist/packages/wje-radio/radio.element.d.ts +0 -64
- package/dist/packages/wje-radio-group/radio-group.d.ts +0 -2
- package/dist/packages/wje-radio-group/radio-group.element.d.ts +0 -61
- package/dist/packages/wje-rate/rate.d.ts +0 -2
- package/dist/packages/wje-rate/rate.element.d.ts +0 -156
- package/dist/packages/wje-relative-time/relative-time.d.ts +0 -2
- package/dist/packages/wje-relative-time/relative-time.element.d.ts +0 -55
- package/dist/packages/wje-relative-time/relative-time.test.d.ts +0 -1
- package/dist/packages/wje-reorder/reorder.d.ts +0 -2
- package/dist/packages/wje-reorder/reorder.element.d.ts +0 -119
- package/dist/packages/wje-reorder-dropzone/reorder-dropzone.d.ts +0 -2
- package/dist/packages/wje-reorder-dropzone/reorder-dropzone.element.d.ts +0 -23
- package/dist/packages/wje-reorder-handle/reorder-handle.d.ts +0 -2
- package/dist/packages/wje-reorder-handle/reorder-handle.element.d.ts +0 -84
- package/dist/packages/wje-reorder-item/reorder-item.d.ts +0 -2
- package/dist/packages/wje-reorder-item/reorder-item.element.d.ts +0 -24
- package/dist/packages/wje-route/route.d.ts +0 -2
- package/dist/packages/wje-route/route.element.d.ts +0 -22
- package/dist/packages/wje-router/router.d.ts +0 -2
- package/dist/packages/wje-router/router.element.d.ts +0 -43
- package/dist/packages/wje-router-link/router-link.d.ts +0 -2
- package/dist/packages/wje-router-link/router-link.element.d.ts +0 -31
- package/dist/packages/wje-router-outlet/router-outlet.d.ts +0 -2
- package/dist/packages/wje-router-outlet/router-outlet.element.d.ts +0 -16
- package/dist/packages/wje-row/row.d.ts +0 -2
- package/dist/packages/wje-row/row.element.d.ts +0 -23
- package/dist/packages/wje-select/select.d.ts +0 -2
- package/dist/packages/wje-select/select.element.d.ts +0 -386
- package/dist/packages/wje-select/select.test.d.ts +0 -1
- package/dist/packages/wje-slider/slider.d.ts +0 -2
- package/dist/packages/wje-slider/slider.element.d.ts +0 -103
- package/dist/packages/wje-sliding-container/sliding-container.d.ts +0 -2
- package/dist/packages/wje-sliding-container/sliding-container.element.d.ts +0 -265
- package/dist/packages/wje-split-view/service/service.d.ts +0 -1
- package/dist/packages/wje-split-view/split-view.d.ts +0 -2
- package/dist/packages/wje-split-view/split-view.element.d.ts +0 -65
- package/dist/packages/wje-status/status.d.ts +0 -2
- package/dist/packages/wje-status/status.element.d.ts +0 -26
- package/dist/packages/wje-step/step.d.ts +0 -2
- package/dist/packages/wje-step/step.element.d.ts +0 -23
- package/dist/packages/wje-stepper/stepper.d.ts +0 -2
- package/dist/packages/wje-stepper/stepper.element.d.ts +0 -125
- package/dist/packages/wje-store/default-store-actions.d.ts +0 -25
- package/dist/packages/wje-store/pubsub.d.ts +0 -22
- package/dist/packages/wje-store/store.d.ts +0 -153
- package/dist/packages/wje-tab/tab.d.ts +0 -2
- package/dist/packages/wje-tab/tab.element.d.ts +0 -66
- package/dist/packages/wje-tab-group/tab-group.d.ts +0 -2
- package/dist/packages/wje-tab-group/tab-group.element.d.ts +0 -131
- package/dist/packages/wje-tab-group/tab-group.test.d.ts +0 -1
- package/dist/packages/wje-tab-panel/tab-panel.d.ts +0 -2
- package/dist/packages/wje-tab-panel/tab-panel.element.d.ts +0 -23
- package/dist/packages/wje-textarea/textarea.d.ts +0 -2
- package/dist/packages/wje-textarea/textarea.element.d.ts +0 -89
- package/dist/packages/wje-thumbnail/thumbnail.d.ts +0 -2
- package/dist/packages/wje-thumbnail/thumbnail.element.d.ts +0 -31
- package/dist/packages/wje-timeline/timeline.d.ts +0 -2
- package/dist/packages/wje-timeline/timeline.element.d.ts +0 -25
- package/dist/packages/wje-timeline-item/timeline-item.d.ts +0 -2
- package/dist/packages/wje-timeline-item/timeline-item.element.d.ts +0 -27
- package/dist/packages/wje-toast/toast.d.ts +0 -2
- package/dist/packages/wje-toast/toast.element.d.ts +0 -173
- package/dist/packages/wje-toast/toast.test.d.ts +0 -1
- package/dist/packages/wje-toggle/toggle.d.ts +0 -2
- package/dist/packages/wje-toggle/toggle.element.d.ts +0 -81
- package/dist/packages/wje-toggle/toggle.test.d.ts +0 -1
- package/dist/packages/wje-toolbar/toolbar.d.ts +0 -2
- package/dist/packages/wje-toolbar/toolbar.element.d.ts +0 -39
- package/dist/packages/wje-toolbar-action/toolbar-action.d.ts +0 -2
- package/dist/packages/wje-toolbar-action/toolbar-action.element.d.ts +0 -35
- package/dist/packages/wje-tooltip/tooltip.d.ts +0 -2
- package/dist/packages/wje-tooltip/tooltip.element.d.ts +0 -77
- package/dist/packages/wje-tree/tree.d.ts +0 -2
- package/dist/packages/wje-tree/tree.element.d.ts +0 -105
- package/dist/packages/wje-tree/tree.test.d.ts +0 -1
- package/dist/packages/wje-tree-item/tree-item.d.ts +0 -2
- package/dist/packages/wje-tree-item/tree-item.element.d.ts +0 -155
- package/dist/packages/wje-tree-item/tree-item.test.d.ts +0 -1
- package/dist/packages/wje-visually-hidden/visually-hidden.d.ts +0 -2
- package/dist/packages/wje-visually-hidden/visually-hidden.element.d.ts +0 -29
package/dist/wje-select.js
CHANGED
|
@@ -9,7 +9,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
9
9
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
10
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
11
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
12
|
-
var _addedOptions, _htmlOptions,
|
|
12
|
+
var _addedOptions, _htmlOptions, _Select_instances, htmlSelectedItem_fn, getSelectedOptions_fn, _applySearchFilter, _onMenuItemClickCapture, syncOptionCheckbox_fn;
|
|
13
13
|
import { F as FormAssociatedElement } from "./form-associated-element-o0UjvdUp.js";
|
|
14
14
|
import { event } from "./event.js";
|
|
15
15
|
import Button from "./wje-button.js";
|
|
@@ -29,57 +29,6 @@ class Select extends FormAssociatedElement {
|
|
|
29
29
|
__privateAdd(this, _Select_instances);
|
|
30
30
|
__privateAdd(this, _addedOptions, []);
|
|
31
31
|
__privateAdd(this, _htmlOptions, []);
|
|
32
|
-
/**
|
|
33
|
-
* Handles lazy options load events coming from <wje-options>.
|
|
34
|
-
* This is attached on the <wje-select> itself so it survives internal
|
|
35
|
-
* re-renders and attribute-driven refreshes (e.g. toggling disabled).
|
|
36
|
-
* @param {CustomEvent} e
|
|
37
|
-
* @private
|
|
38
|
-
*/
|
|
39
|
-
__privateAdd(this, _onOptionsLoad, (e) => {
|
|
40
|
-
var _a, _b;
|
|
41
|
-
const popup = this.popup || this.shadowRoot && this.shadowRoot.querySelector("wje-popup");
|
|
42
|
-
this.selectedOptions.forEach((option) => {
|
|
43
|
-
this.getAllOptions().forEach((el) => {
|
|
44
|
-
if (el.value === option.value) {
|
|
45
|
-
el.selected = true;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
const attrValue = ((_a = this.getAttribute("value")) == null ? void 0 : _a.split(" ")) || [];
|
|
50
|
-
attrValue.forEach((val) => {
|
|
51
|
-
const existingOption = Array.from(this.getAllOptions()).find((el) => el.value === val);
|
|
52
|
-
if (existingOption) {
|
|
53
|
-
existingOption.selected = true;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
|
|
57
|
-
this.selections(true);
|
|
58
|
-
(_b = this.list) == null ? void 0 : _b.scrollTo(0, 0);
|
|
59
|
-
if (popup) {
|
|
60
|
-
event.dispatchCustomEvent(popup, "wje-popup:content-ready");
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
/**
|
|
64
|
-
* Prevent closing the parent <wje-select>'s popup when a nested <wje-dropdown>
|
|
65
|
-
* menu item is clicked. Closes only the dropdown that owns the clicked item.
|
|
66
|
-
* This captures the event at the document level (useCapture=true) so it can
|
|
67
|
-
* stop the global outside-click logic that would otherwise hide the select's popup.
|
|
68
|
-
*/
|
|
69
|
-
__privateAdd(this, _onMenuItemClickCapture, (e) => {
|
|
70
|
-
const target = (
|
|
71
|
-
/** @type {HTMLElement} */
|
|
72
|
-
e.target
|
|
73
|
-
);
|
|
74
|
-
if (!target || !target.closest) return;
|
|
75
|
-
const menuItem = target.closest("wje-menu-item");
|
|
76
|
-
if (!menuItem) return;
|
|
77
|
-
const dropdown = target.closest("wje-dropdown");
|
|
78
|
-
if (dropdown && typeof dropdown.hide === "function") {
|
|
79
|
-
dropdown.hide();
|
|
80
|
-
}
|
|
81
|
-
e.stopPropagation();
|
|
82
|
-
});
|
|
83
32
|
/**
|
|
84
33
|
* An object representing component dependencies with their respective classes.
|
|
85
34
|
* Each property in the object maps a custom component name (as a string key)
|
|
@@ -194,6 +143,23 @@ class Select extends FormAssociatedElement {
|
|
|
194
143
|
});
|
|
195
144
|
}
|
|
196
145
|
});
|
|
146
|
+
/**
|
|
147
|
+
* Prevent closing the parent <wje-select>'s popup when a nested <wje-dropdown>
|
|
148
|
+
* menu item is clicked. Closes only the dropdown that owns the clicked item.
|
|
149
|
+
* This captures the event at the document level (useCapture=true) so it can
|
|
150
|
+
* stop the global outside-click logic that would otherwise hide the select's popup.
|
|
151
|
+
*/
|
|
152
|
+
__privateAdd(this, _onMenuItemClickCapture, (e) => {
|
|
153
|
+
const target = e.target;
|
|
154
|
+
if (!target || !target.closest) return;
|
|
155
|
+
const menuItem = target.closest("wje-menu-item");
|
|
156
|
+
if (!menuItem) return;
|
|
157
|
+
const dropdown = target.closest("wje-dropdown");
|
|
158
|
+
if (dropdown && typeof dropdown.hide === "function") {
|
|
159
|
+
dropdown.hide();
|
|
160
|
+
}
|
|
161
|
+
e.stopPropagation();
|
|
162
|
+
});
|
|
197
163
|
this.counterEl = null;
|
|
198
164
|
this._wasOppened = false;
|
|
199
165
|
this.native = null;
|
|
@@ -219,18 +185,23 @@ class Select extends FormAssociatedElement {
|
|
|
219
185
|
const formData = new FormData();
|
|
220
186
|
if (value) {
|
|
221
187
|
let data = value;
|
|
188
|
+
let dataString = value;
|
|
222
189
|
if (!Array.isArray(data)) {
|
|
223
190
|
data = data.split(" ");
|
|
191
|
+
} else {
|
|
192
|
+
dataString = data.join(" ");
|
|
224
193
|
}
|
|
225
194
|
data.forEach((v) => {
|
|
226
195
|
formData.append(this.name, v);
|
|
227
196
|
});
|
|
228
197
|
value = formData;
|
|
229
198
|
this._value = data;
|
|
199
|
+
this.setAttribute("value", dataString);
|
|
230
200
|
} else {
|
|
231
201
|
formData.delete(this.name);
|
|
232
202
|
value = formData;
|
|
233
203
|
this._value = [];
|
|
204
|
+
this.removeAttribute("value");
|
|
234
205
|
}
|
|
235
206
|
this.internals.setFormValue(value);
|
|
236
207
|
}
|
|
@@ -334,12 +305,12 @@ class Select extends FormAssociatedElement {
|
|
|
334
305
|
if (value) {
|
|
335
306
|
this.setAttribute("readonly", "");
|
|
336
307
|
(_a = this.input) == null ? void 0 : _a.setAttribute("readonly", "");
|
|
337
|
-
(_b = this.displayInput) == null ? void 0 : _b.setAttribute("
|
|
308
|
+
(_b = this.displayInput) == null ? void 0 : _b.setAttribute("readonly", "");
|
|
338
309
|
(_c = this.popup) == null ? void 0 : _c.setAttribute("disabled", "");
|
|
339
310
|
} else {
|
|
340
311
|
this.removeAttribute("readonly");
|
|
341
312
|
(_d = this.input) == null ? void 0 : _d.removeAttribute("readonly");
|
|
342
|
-
(_e = this.displayInput) == null ? void 0 : _e.removeAttribute("
|
|
313
|
+
(_e = this.displayInput) == null ? void 0 : _e.removeAttribute("readonly");
|
|
343
314
|
(_f = this.popup) == null ? void 0 : _f.removeAttribute("disabled");
|
|
344
315
|
}
|
|
345
316
|
}
|
|
@@ -475,7 +446,7 @@ class Select extends FormAssociatedElement {
|
|
|
475
446
|
* @returns {Array<string>}
|
|
476
447
|
*/
|
|
477
448
|
static get observedAttributes() {
|
|
478
|
-
return ["active", "
|
|
449
|
+
return ["active", "disabled", "readonly"];
|
|
479
450
|
}
|
|
480
451
|
/**
|
|
481
452
|
* Sets up the attributes for the component.
|
|
@@ -486,6 +457,12 @@ class Select extends FormAssociatedElement {
|
|
|
486
457
|
beforeDraw() {
|
|
487
458
|
if (this.hasAttribute("value")) {
|
|
488
459
|
this.value = this.getAttribute("value");
|
|
460
|
+
} else {
|
|
461
|
+
const selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
|
|
462
|
+
if (selectedOptions.length > 0) {
|
|
463
|
+
const values = selectedOptions.map((opt) => opt.value);
|
|
464
|
+
this.value = this.hasAttribute("multiple") ? values : values[0];
|
|
465
|
+
}
|
|
489
466
|
}
|
|
490
467
|
}
|
|
491
468
|
/**
|
|
@@ -562,6 +539,11 @@ class Select extends FormAssociatedElement {
|
|
|
562
539
|
popup.setAttribute("size", "");
|
|
563
540
|
popup.setAttribute("part", "popup");
|
|
564
541
|
popup.setAttribute("offset", this.offset);
|
|
542
|
+
if ((this.lazy || this.querySelector("wje-options")) && !this._wasOppened) {
|
|
543
|
+
popup.setAttribute("loader", "");
|
|
544
|
+
} else {
|
|
545
|
+
popup.removeAttribute("loader");
|
|
546
|
+
}
|
|
565
547
|
if (this.disabled) {
|
|
566
548
|
popup.setAttribute("disabled", "");
|
|
567
549
|
} else {
|
|
@@ -633,11 +615,7 @@ class Select extends FormAssociatedElement {
|
|
|
633
615
|
this.optionCheckSlot(option);
|
|
634
616
|
});
|
|
635
617
|
this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
|
|
636
|
-
|
|
637
|
-
this.selectOptions(this.value, true);
|
|
638
|
-
} else if (this.selectedOptions.length) {
|
|
639
|
-
this.selections(true);
|
|
640
|
-
}
|
|
618
|
+
this.selectOptions(this.value, true);
|
|
641
619
|
if (this.lazy) {
|
|
642
620
|
event.addListener(this.popup, "wje-popup:show", null, (e) => {
|
|
643
621
|
if (this._wasOppened) return;
|
|
@@ -698,8 +676,27 @@ class Select extends FormAssociatedElement {
|
|
|
698
676
|
e.stopPropagation();
|
|
699
677
|
this.clearSelections();
|
|
700
678
|
});
|
|
701
|
-
this.
|
|
702
|
-
|
|
679
|
+
this.list.addEventListener("wje-options:load", (e) => {
|
|
680
|
+
var _a2;
|
|
681
|
+
this.selectedOptions.forEach((option) => {
|
|
682
|
+
this.getAllOptions().forEach((el) => {
|
|
683
|
+
if (el.value === option.value) {
|
|
684
|
+
el.selected = true;
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
});
|
|
688
|
+
const attrValue = ((_a2 = this.getAttribute("value")) == null ? void 0 : _a2.split(" ")) || [];
|
|
689
|
+
attrValue.forEach((val) => {
|
|
690
|
+
const existingOption = Array.from(this.getAllOptions()).find((el) => el.value === val);
|
|
691
|
+
if (existingOption) {
|
|
692
|
+
existingOption.selected = true;
|
|
693
|
+
}
|
|
694
|
+
});
|
|
695
|
+
this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
|
|
696
|
+
this.selections(true);
|
|
697
|
+
this.list.scrollTo(0, 0);
|
|
698
|
+
event.dispatchCustomEvent(this.popup, "wje-popup:content-ready");
|
|
699
|
+
});
|
|
703
700
|
if (this.hasAttribute("find") && this.findEl instanceof HTMLElement) {
|
|
704
701
|
event.addListener(this.findEl, "keyup", "", __privateGet(this, _applySearchFilter));
|
|
705
702
|
event.addListener(this.findEl, "wje-input:clear", "", __privateGet(this, _applySearchFilter));
|
|
@@ -732,6 +729,7 @@ class Select extends FormAssociatedElement {
|
|
|
732
729
|
this.counter();
|
|
733
730
|
}
|
|
734
731
|
}
|
|
732
|
+
this.getAllOptions().forEach((o) => __privateMethod(this, _Select_instances, syncOptionCheckbox_fn).call(this, o));
|
|
735
733
|
} else {
|
|
736
734
|
const option = options == null ? void 0 : options.at(0);
|
|
737
735
|
this.value = ((_a = options == null ? void 0 : options.map((el) => el.value)) == null ? void 0 : _a.at(0)) || "";
|
|
@@ -802,7 +800,7 @@ class Select extends FormAssociatedElement {
|
|
|
802
800
|
getChip(option) {
|
|
803
801
|
let chip = document.createElement("wje-chip");
|
|
804
802
|
chip.size = "small";
|
|
805
|
-
chip.removable =
|
|
803
|
+
chip.removable = !this.readonly;
|
|
806
804
|
chip.round = true;
|
|
807
805
|
chip.addEventListener("wje:chip-remove", this.removeChip);
|
|
808
806
|
chip.option = option;
|
|
@@ -886,11 +884,19 @@ class Select extends FormAssociatedElement {
|
|
|
886
884
|
*/
|
|
887
885
|
selectOption(value, silent = false) {
|
|
888
886
|
if (!value) return;
|
|
889
|
-
|
|
890
|
-
if (option)
|
|
887
|
+
const option = this.querySelector(`wje-option[value="${value}"]`);
|
|
888
|
+
if (!option) return;
|
|
889
|
+
if (silent) {
|
|
890
|
+
if (!option.hasAttribute("selected")) {
|
|
891
|
+
option.selected = true;
|
|
892
|
+
}
|
|
893
|
+
this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
|
|
894
|
+
} else {
|
|
891
895
|
this.processClickedOption(option, this.hasAttribute("multiple"));
|
|
892
896
|
}
|
|
893
|
-
if (this.drawingStatus > this.drawingStatuses.START)
|
|
897
|
+
if (this.drawingStatus > this.drawingStatuses.START) {
|
|
898
|
+
this.selections(silent);
|
|
899
|
+
}
|
|
894
900
|
}
|
|
895
901
|
/**
|
|
896
902
|
* Selects multiple options based on the provided values. If a single value is provided, it selects that option.
|
|
@@ -910,13 +916,30 @@ class Select extends FormAssociatedElement {
|
|
|
910
916
|
}
|
|
911
917
|
/**
|
|
912
918
|
* Clones and appends an icon with the "check" slot to the specified option element.
|
|
919
|
+
* If the option already contains a custom element with slot="check" (e.g. <wje-status slot="check">),
|
|
920
|
+
* it is left untouched and no template icon is added.
|
|
913
921
|
* @param {HTMLElement} option The target HTML element to which the cloned "check" icon will be appended.
|
|
914
922
|
* @returns {void} This method does not return a value, but it modifies the DOM by appending a cloned "check" icon to the provided option element.
|
|
915
923
|
*/
|
|
916
924
|
optionCheckSlot(option) {
|
|
917
925
|
var _a;
|
|
918
|
-
let
|
|
926
|
+
let existingCheckSlot = option.querySelector('[slot="check"]');
|
|
927
|
+
if (existingCheckSlot && existingCheckSlot.tagName !== "WJE-CHECKBOX") {
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
if (existingCheckSlot && existingCheckSlot.tagName === "WJE-CHECKBOX") {
|
|
931
|
+
const isSelectedExisting = option.hasAttribute("selected");
|
|
932
|
+
existingCheckSlot.checked = isSelectedExisting;
|
|
933
|
+
if (isSelectedExisting) {
|
|
934
|
+
existingCheckSlot.setAttribute("checked", "");
|
|
935
|
+
} else {
|
|
936
|
+
existingCheckSlot.removeAttribute("checked");
|
|
937
|
+
}
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
940
|
+
let icon = (_a = this.querySelector("template")) == null ? void 0 : _a.content.querySelector('[slot="check"]');
|
|
919
941
|
if (!icon) {
|
|
942
|
+
console.warn('Icon with slot "check" was not found.');
|
|
920
943
|
return;
|
|
921
944
|
}
|
|
922
945
|
let iconClone = icon.cloneNode(true);
|
|
@@ -946,8 +969,6 @@ class Select extends FormAssociatedElement {
|
|
|
946
969
|
}
|
|
947
970
|
_addedOptions = new WeakMap();
|
|
948
971
|
_htmlOptions = new WeakMap();
|
|
949
|
-
_onOptionsLoad = new WeakMap();
|
|
950
|
-
_onMenuItemClickCapture = new WeakMap();
|
|
951
972
|
_Select_instances = new WeakSet();
|
|
952
973
|
/**
|
|
953
974
|
* Processes the given item and retrieves the corresponding value from the selected options.
|
|
@@ -969,6 +990,18 @@ getSelectedOptions_fn = function() {
|
|
|
969
990
|
return Array.from(this.querySelectorAll("wje-option[selected]"));
|
|
970
991
|
};
|
|
971
992
|
_applySearchFilter = new WeakMap();
|
|
993
|
+
_onMenuItemClickCapture = new WeakMap();
|
|
994
|
+
syncOptionCheckbox_fn = function(option) {
|
|
995
|
+
const checkbox = option.querySelector('wje-checkbox[slot="check"]');
|
|
996
|
+
if (!checkbox) return;
|
|
997
|
+
const isSelected = option.hasAttribute("selected");
|
|
998
|
+
checkbox.checked = isSelected;
|
|
999
|
+
if (isSelected) {
|
|
1000
|
+
checkbox.setAttribute("checked", "");
|
|
1001
|
+
} else {
|
|
1002
|
+
checkbox.removeAttribute("checked");
|
|
1003
|
+
}
|
|
1004
|
+
};
|
|
972
1005
|
Select.define("wje-select", Select);
|
|
973
1006
|
export {
|
|
974
1007
|
Select as default
|
package/dist/wje-select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-select.js","sources":["../packages/wje-select/select.element.js","../packages/wje-select/select.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport Button from '../wje-button/button.js';\nimport Popup from '../wje-popup/popup.js';\nimport Icon from '../wje-icon/icon.js';\nimport Label from '../wje-label/label.js';\nimport Chip from '../wje-chip/chip.js';\nimport Input from '../wje-input/input.js';\nimport Option from '../wje-option/option.js';\nimport Options from '../wje-options/options.js';\nimport Checkbox from '../wje-checkbox/checkbox.js';\nimport styles from './styles/styles.css?inline';\n\nexport class Select extends FormAssociatedElement {\n\tconstructor() {\n\t\tsuper();\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the counter element, initially null.\n\t\t * @private\n\t\t */\n\t\tthis.counterEl = null;\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @description Tracks whether the select element was previously opened, initially false.\n\t\t * @private\n\t\t * @default {boolean} false\n\t\t */\n\t\tthis._wasOppened = false;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the native select element, initially null.\n\t\t */\n\t\tthis.native = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the popup element, initially null.\n\t\t */\n\t\tthis.popup = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the label element, initially null.\n\t\t */\n\t\tthis.labelElement = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot start element, initially null.\n\t\t */\n\t\tthis.slotStart = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot end element, initially null.\n\t\t */\n\t\tthis.slotEnd = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the input element, initially null.\n\t\t */\n\t\tthis.input = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the chips element, initially null.\n\t\t */\n\t\tthis.chips = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the clear button element, initially null.\n\t\t */\n\t\tthis.clear = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the list element, initially null.\n\t\t */\n\t\tthis.list = null;\n\n\t\tthis._value = [];\n\t\tthis._selectedOptions = [];\n\t}\n\n\t#addedOptions = [];\n\n\t#htmlOptions = [];\n\n\t/**\n\t * Handles lazy options load events coming from <wje-options>.\n\t * This is attached on the <wje-select> itself so it survives internal\n\t * re-renders and attribute-driven refreshes (e.g. toggling disabled).\n\t * @param {CustomEvent} e\n\t * @private\n\t */\n\t#onOptionsLoad = (e) => {\n\t\tconst popup = this.popup || (this.shadowRoot && this.shadowRoot.querySelector('wje-popup'));\n\n\t\tthis.selectedOptions.forEach((option) => {\n\t\t\tthis.getAllOptions().forEach((el) => {\n\t\t\t\tif (el.value === option.value) {\n\t\t\t\t\tel.selected = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Ensure values from the value attribute are (re)selected after lazy-loaded pages\n\t\tconst attrValue = this.getAttribute('value')?.split(' ') || [];\n\n\t\tattrValue.forEach(val => {\n\t\t\tconst existingOption = Array.from(this.getAllOptions()).find(el => el.value === val);\n\t\t\tif (existingOption) {\n\t\t\t\texistingOption.selected = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\tthis.selections(true);\n\n\t\tthis.list?.scrollTo(0, 0);\n\n\t\t// Notify popup that its content is ready; popup will clear its own loader state.\n\t\tif (popup) {\n\t\t\tevent.dispatchCustomEvent(popup, 'wje-popup:content-ready');\n\t\t}\n\t};\n\n\t/**\n\t * Prevent closing the parent <wje-select>'s popup when a nested <wje-dropdown>\n\t * menu item is clicked. Closes only the dropdown that owns the clicked item.\n\t * This captures the event at the document level (useCapture=true) so it can\n\t * stop the global outside-click logic that would otherwise hide the select's popup.\n\t */\n\t#onMenuItemClickCapture = (e) => {\n\t\tconst target = /** @type {HTMLElement} */(e.target);\n\t\tif (!target || !target.closest) return;\n\n\t\t// Run only for clicks inside a dropdown menu item\n\t\tconst menuItem = target.closest('wje-menu-item');\n\t\tif (!menuItem) return;\n\n\t\tconst dropdown = target.closest('wje-dropdown');\n\t\tif (dropdown && typeof dropdown.hide === 'function') {\n\t\t\t// Close only the dropdown; keep the select's popup open\n\t\t\tdropdown.hide();\n\t\t}\n\n\t\t// Block bubbling to document-level outside-click handlers that\n\t\t// might close <wje-popup> used by <wje-select>\n\t\te.stopPropagation();\n\t};\n\n\t/**\n\t * An object representing component dependencies with their respective classes.\n\t * Each property in the object maps a custom component name (as a string key)\n\t * to its corresponding class or constructor.\n\t * @typedef {{[key: string]: Function}} Dependencies\n\t * @property {Function} 'wje-button' Represents the Button component class.\n\t * @property {Function} 'wje-popup' Represents the Popup component class.\n\t * @property {Function} 'wje-icon' Represents the Icon component class.\n\t * @property {Function} 'wje-label' Represents the Label component class.\n\t * @property {Function} 'wje-chip' Represents the Chip component class.\n\t * @property {Function} 'wje-input' Represents the Input component class.\n\t * @property {Function} 'wje-option' Represents the Option component class.\n\t * @property {Function} 'wje-checkbox' Represents the Checkbox component class.\n\t */\n\tdependencies = {\n\t\t'wje-button': Button,\n\t\t'wje-popup': Popup,\n\t\t'wje-icon': Icon,\n\t\t'wje-label': Label,\n\t\t'wje-chip': Chip,\n\t\t'wje-input': Input,\n\t\t'wje-option': Option,\n\t\t'wje-options': Options,\n\t\t'wje-checkbox': Checkbox,\n\t};\n\n\t/**\n\t * Sets the value for the form field. Converts the input value into a FormData object\n\t * if it is not already an array, splitting by spaces if necessary, and sets the\n\t * internal form value as well as the selected values.\n\t * @param {string|Array} value The value to be set. Can be a string (which will be\n\t * split into an array by spaces) or an array of values.\n\t */\n\tset value(value) {\n\t\tconst formData = new FormData();\n\n\t\tif (value) {\n\t\t\tlet data = value;\n\n\t\t\tif (!Array.isArray(data)) {\n\t\t\t\tdata = data.split(' ');\n\t\t\t}\n\t\t\tdata.forEach(v => {\n\t\t\t\tformData.append(this.name, v)\n\t\t\t});\n\t\t\tvalue = formData;\n\n\t\t\tthis._value = data;\n\t\t} else {\n\t\t\tformData.delete(this.name);\n\t\t\tvalue = formData;\n\t\t\tthis._value = [];\n\t\t}\n\t\tthis.internals.setFormValue(value);\n\t}\n\n\t/**\n\t * Retrieves the current value.\n\t * @returns {any} The value of the `_value` property.\n\t */\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Sets the maximum number of options allowed.\n\t * @param { number | object} value The value to set as the maximum number of options.\n\t * If null, the 'max-options' attribute will be removed.\n\t */\n\tset maxOptions(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-options', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-options');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum number of options allowed.\n\t * Parses the value of the 'max-options' attribute from the element and converts it to a number.\n\t * If the attribute is not present or cannot be converted to a valid number, defaults to 1.\n\t * @returns {number} The maximum number of options, or 0 if the attribute is not set or invalid.\n\t */\n\tget maxOptions() {\n\t\treturn +this.getAttribute('max-options') || 1;\n\t}\n\n\t/**\n\t * @summary Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * @summary Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets the trigger value.\n\t * @param {string} value The trigger value to set.\n\t */\n\tset trigger(value) {\n\t\tthis.setAttribute('trigger', value);\n\t}\n\n\t/**\n\t * Returns the trigger value.\n\t * @returns {string} The trigger value.\n\t */\n\tget trigger() {\n\t\treturn this.getAttribute('trigger') || 'click';\n\t}\n\n\t/**\n\t * Sets or removes the disabled state for the associated elements.\n\t * @param {boolean} value A boolean indicating whether the elements should be disabled.\n\t * If true, the disabled attribute is added to the elements. If false, the disabled attribute is removed.\n\t */\n\tset disabled(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('disabled', '');\n\n\t\t\tthis.input?.setAttribute('disabled', '');\n\t\t\tthis.displayInput?.setAttribute('disabled', '');\n\n\t\t\tthis.popup?.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('disabled');\n\n\t\t\tthis.input?.removeAttribute('disabled');\n\t\t\tthis.displayInput?.removeAttribute('disabled');\n\n\t\t\tthis.popup?.removeAttribute('disabled');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the current state of the 'disabled' attribute.\n\t * @returns {boolean} Returns true if the 'disabled' attribute is present, otherwise false.\n\t */\n\tget disabled() {\n\t\treturn this.hasAttribute('disabled');\n\t}\n\n\t/**\n\t * Sets the readonly state of the element. When set to true,\n\t * the element and its associated inputs are marked as readonly or disabled.\n\t * When set to false, the readonly and disabled attributes are removed,\n\t * allowing user interaction.\n\t * @param {boolean} value A boolean value indicating whether to set the\n\t * element and its associated inputs to readonly (true) or not (false).\n\t */\n\tset readonly(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('readonly', '');\n\n\t\t\t// inputs nemusia existovať ešte pred draw()\n\t\t\tthis.input?.setAttribute('readonly', '');\n\t\t\tthis.displayInput?.setAttribute('disabled', '');\n\n\t\t\t// popup môže existovať, ak to toggle-uješ po renderi\n\t\t\tthis.popup?.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('readonly');\n\n\t\t\tthis.input?.removeAttribute('readonly');\n\t\t\tthis.displayInput?.removeAttribute('disabled');\n\n\t\t\tthis.popup?.removeAttribute('disabled');\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the 'readonly' attribute is present on the element.\n\t * @returns {boolean} Returns true if the 'readonly' attribute is set, otherwise false.\n\t */\n\tget readonly() {\n\t\treturn this.hasAttribute('readonly');\n\t}\n\n\t/**\n\t * Sets the maximum height value for the element.\n\t * If a value is provided, it sets the 'max-height' attribute on the element.\n\t * If no value is provided, it removes the 'max-height' attribute from the element.\n\t * @param {string|null} value The maximum height to be set. If null or undefined, the attribute is removed.\n\t */\n\tset maxHeight(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-height', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-height');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum height value, which is determined by the 'max-height' attribute.\n\t * If the attribute is not set, a default value of '200px' is returned.\n\t * @returns {string} The maximum height value as a string.\n\t */\n\tget maxHeight() {\n\t\treturn this.getAttribute('max-height') || 'auto';\n\t}\n\n\t/**\n\t * Sets the offset attribute for the element.\n\t * @param {string} value The value to assign to the offset attribute.\n\t */\n\tset offset(value) {\n\t\tthis.setAttribute('offset', value);\n\t}\n\n\t/**\n\t * Gets the value of the offset attribute of the current element.\n\t * If the offset attribute is not present, returns a default value of '0'.\n\t * @returns {string} The value of the offset attribute or the default value '0'.\n\t */\n\tget offset() {\n\t\treturn this.getAttribute('offset') || '5';\n\t}\n\n\t/**\n\t * Sets the selected options for the object.\n\t * @param {Array|object} value The new value for the selected options. It can be an array or object containing the selected options.\n\t */\n\tset selectedOptions(value) {\n\t\tthis._selectedOptions = value;\n\t}\n\n\t/**\n\t * Retrieves the selected options.\n\t * @returns {Array} An array containing the currently selected options. If no options are selected, an empty array is returned.\n\t */\n\tget selectedOptions() {\n\t\treturn this._selectedOptions || [];\n\t}\n\n\t/**\n\t * Sets the `lazy` attribute on the element. If the provided value is truthy, the `lazy` attribute is added. If the value is falsy, the `lazy` attribute is removed.\n\t * @param {boolean} value A boolean value indicating whether to add or remove the `lazy` attribute. If `true`, the attribute is added; if `false`, it is removed.\n\t */\n\tset lazy(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('lazy', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('lazy');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the 'lazy' property.\n\t * @returns {boolean} Returns true if the 'lazy' attribute is present on the element, otherwise false.\n\t */\n\tget lazy() {\n\t\treturn this.hasAttribute('lazy');\n\t}\n\n\t/**\n\t * Sets or removes the 'no-size' attribute on an element.\n\t * @param {boolean} value A boolean indicating whether to add or remove the 'no-size' attribute. If true, the attribute is added; if false, the attribute is removed.\n\t */\n\tset noSize(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('no-size', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('no-size');\n\t\t}\n\t}\n\n\t/**\n\t * Gets the value of the 'no-size' attribute for the element.\n\t * @returns {boolean} True if the 'no-size' attribute is present, otherwise false.\n\t */\n\tget noSize() {\n\t\treturn this.hasAttribute('no-size');\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Retrieves the complete list of options available for the component.\n\t * The options are determined by combining elements from various sources, including loaded options, added options, and HTML-sourced options.\n\t * If a `wje-options` element is present within the component, its loaded options are included in the merged list.\n\t * In the absence of a `wje-options` element, duplicates among the added and HTML options are removed, retaining their order.\n\t * @returns {Array<object>} An array containing all the available options, combining the loaded, added, and HTML-based options, with duplicates removed where applicable.\n\t */\n\tget options() {\n\t\tif (this.querySelector('wje-options')) {\n\t\t\tconst allOptions = [...this.querySelector('wje-options').loadedOptions, ...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn allOptions\n\t\t} else {\n\t\t\tconst allOptions = [...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn Array.from(\n\t\t\t\tnew Map(allOptions.reverse().map(obj => [obj.value, obj])).values()\n\t\t\t).reverse();\n\t\t}\n\t}\n\n\tclassName = 'Select';\n\n\t/**\n\t * Returns the CSS styles for the component.\n\t * @static\n\t * @returns {CSSStyleSheet}\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\n\n\t/**\n\t * Returns the list of attributes to observe for changes.\n\t * @static\n\t * @returns {Array<string>}\n\t */\n\tstatic get observedAttributes() {\n\t\treturn ['active', 'value', 'disabled', 'readonly', 'multiple', 'label', 'placeholder', 'max-height', 'max-options', 'variant', 'placement'];\n\t}\n\n\t/**\n\t * Sets up the attributes for the component.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t}\n\n\tbeforeDraw() {\n\t\tif(this.hasAttribute('value')) {\n\t\t\tthis.value = this.getAttribute('value');\n\t\t}\n\t}\n\n\t/**\n\t * Draws the component for the select.\n\t * @returns {DocumentFragment}\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tthis.classList.add('wje-placement', this.placement ? 'wje-' + this.placement : 'wje-start');\n\n\t\t// zakladny obalovac\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-select', this.variant || 'default');\n\n\t\t// wrapper pre label a inputWrapper\n\t\tlet wrapper = document.createElement('div');\n\t\twrapper.classList.add('wrapper');\n\t\twrapper.setAttribute('slot', 'anchor');\n\n\t\t// label\n\t\tlet label = document.createElement('label');\n\t\tlabel.setAttribute('part', 'label');\n\t\tlabel.innerText = this.label || '';\n\n\t\t// obalovac pre input\n\t\tlet inputWrapper = document.createElement('div');\n\t\tinputWrapper.setAttribute('part', 'input-wrapper');\n\t\tinputWrapper.classList.add('input-wrapper');\n\n\t\tlet slotStart = document.createElement('div');\n\t\tslotStart.classList.add('slot-start');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.setAttribute('type', 'text');\n\t\tinput.value = this.value.join(' ').trim();\n\t\tinput.classList.add('input-hidden');\n\n\t\tlet display = document.createElement('input');\n\t\tdisplay.setAttribute('type', 'text');\n\t\tdisplay.setAttribute('part', 'input');\n\t\tdisplay.setAttribute('autocomplete', 'off');\n\t\tdisplay.setAttribute('readonly', '');\n\t\tdisplay.setAttribute('placeholder', this.placeholder || '');\n\n\t\tif (this.required) {\n\t\t\tinput.setAttribute('required', '');\n\t\t\tdisplay.setAttribute('required', '');\n\t\t}\n\n\t\t// Apply initial disabled/readonly state during first render\n\t\tif (this.disabled) {\n\t\t\tinput.setAttribute('disabled', '');\n\t\t\tdisplay.setAttribute('disabled', '');\n\t\t}\n\n\t\tif (this.readonly) {\n\t\t\tinput.setAttribute('readonly', '');\n\t\t\tdisplay.setAttribute('readonly', '');\n\t\t}\n\n\t\tlet slotEnd = document.createElement('div');\n\t\tslotEnd.classList.add('slot-end');\n\n\t\tlet arrow = document.createElement('wje-icon');\n\t\tarrow.setAttribute('name', 'chevron-down');\n\t\tarrow.setAttribute('slot', 'arrow');\n\n\t\tlet chips = document.createElement('div');\n\t\tchips.classList.add('chips');\n\t\tchips.innerText = this.placeholder || '';\n\n\t\t// obalovac pre option a find\n\t\tlet optionsWrapper = document.createElement('div');\n\t\toptionsWrapper.setAttribute('part', 'options-wrapper');\n\t\toptionsWrapper.classList.add('options-wrapper');\n\t\toptionsWrapper.style.setProperty('height', this.maxHeight);\n\n\t\tlet list = document.createElement('div');\n\t\tlist.classList.add('list');\n\n\t\tlet slot = document.createElement('slot');\n\n\t\tlet clear = document.createElement('wje-button');\n\t\tclear.setAttribute('fill', 'link');\n\t\tclear.setAttribute('part', 'clear');\n\t\tclear.setAttribute('stop-propagation', '');\n\n\t\tlet clearIcon = document.createElement('wje-icon');\n\t\tclearIcon.setAttribute('name', 'x');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\t// vytvorime popup\n\t\tlet popup = document.createElement('wje-popup');\n\t\tpopup.setAttribute('placement', 'bottom-start');\n\t\tif (!this.noSize)\n\t\t\tpopup.setAttribute('size', '');\n\t\tpopup.setAttribute('part', 'popup');\n\t\tpopup.setAttribute('offset', this.offset);\n\n\t\t// const optionsElement = this.querySelector('wje-options');\n\t\t// const hasLoadedOptions =\n\t\t// \toptionsElement &&\n\t\t// \tArray.isArray(optionsElement.loadedOptions) &&\n\t\t// \toptionsElement.loadedOptions.length > 0;\n\t\t//\n\t\t// if ((this.lazy || optionsElement) && !hasLoadedOptions) {\n\t\t// \tpopup.setAttribute('loader', '');\n\t\t// } else {\n\t\t// \tpopup.removeAttribute('loader');\n\t\t// }\n\n\t\tif (this.disabled) {\n\t\t\tpopup.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tpopup.removeAttribute('disabled');\n\t\t}\n\n\t\tif (this.variant === 'standard') {\n\t\t\tif (this.hasAttribute('label')) native.appendChild(label);\n\t\t} else {\n\t\t\twrapper.appendChild(label);\n\t\t}\n\n\t\tinputWrapper.append(slotStart);\n\t\tinputWrapper.append(display);\n\t\tinputWrapper.append(input);\n\n\t\tclear.append(clearIcon);\n\n\t\tif (this.hasAttribute('multiple')) inputWrapper.append(chips);\n\n\t\tif (this.hasAttribute('clearable')) inputWrapper.append(clear);\n\n\t\tinputWrapper.appendChild(slotEnd);\n\t\tinputWrapper.appendChild(arrow);\n\n\t\tlist.appendChild(slot);\n\n\t\tif (this.hasAttribute('find')) {\n\t\t\tlet find = document.createElement('wje-input');\n\t\t\tfind.setAttribute('variant', 'standard');\n\t\t\tfind.setAttribute('placeholder', 'Hľadať');\n\t\t\tfind.setAttribute('part', 'find');\n\t\t\tfind.clearable = true;\n\t\t\tfind.classList.add('find');\n\n\t\t\toptionsWrapper.appendChild(find);\n\n\t\t\tthis.findEl = find;\n\t\t}\n\n\t\tlet slotFooter = document.createElement('slot');\n\t\tslotFooter.setAttribute('name', 'footer');\n\n\t\t// APPEND\n\t\toptionsWrapper.append(list);\n\t\toptionsWrapper.append(slotFooter);\n\n\t\twrapper.append(inputWrapper);\n\n\t\tpopup.append(wrapper);\n\t\tpopup.append(optionsWrapper);\n\n\t\tif (this.trigger === 'click') popup.setAttribute('manual', '');\n\n\t\tthis.append(error);\n\n\t\tnative.append(popup);\n\t\tnative.append(errorSlot);\n\n\t\tfragment.appendChild(native);\n\n\t\tthis.native = native;\n\t\tthis.popup = popup;\n\t\tthis.labelElement = label;\n\t\tthis.slotStart = slotStart;\n\t\tthis.slotEnd = slotEnd;\n\t\tthis.input = input;\n\t\tthis.displayInput = display;\n\t\tthis.chips = chips;\n\t\tthis.clear = clear;\n\t\tthis.list = list;\n\t\tthis.slotFooter = slotFooter;\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Executes post-render logic for the custom element.\n\t * This includes validation, event listener registration, managing custom attributes, and\n\t * handling options initialization for the component.\n\t * @returns {void} This method does not return any value.\n\t */\n\tafterDraw() {\n\t\tdocument.addEventListener('mousedown', this.#onMenuItemClickCapture, true);\n\n\t\tthis.validate();\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\n\t\tthis.getAllOptions()?.forEach((option) => {\n\t\t\tthis.optionCheckSlot(option);\n\t\t});\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\n\t\tif (this.hasAttribute('value')) {\n\t\t\tthis.selectOptions(this.value, true);\n\t\t} else if (this.selectedOptions.length) {\n\t\t\tthis.selections(true);\n\t\t}\n\n\t\tif (this.lazy) {\n\t\t\tevent.addListener(this.popup, 'wje-popup:show', null, (e) => {\n\t\t\t\tif (this._wasOppened) return;\n\t\t\t\tthis._wasOppened = true;\n\n\t\t\t\tconst optionsElement = this.querySelector('wje-options');\n\t\t\t\toptionsElement.setAttribute('lazy', '');\n\t\t\t\toptionsElement.setAttribute('attached', '');\n\t\t\t});\n\t\t}\n\n\t\tevent.addListener(this.popup, 'wje-popup:aftershow', null, () => {\n\t\t\tconst assignedElements = this.slotFooter.assignedElements();\n\n\t\t\tif (assignedElements.length > 0) {\n\t\t\t\tconst el = assignedElements[0];\n\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\tlet totalHeight = 0;\n\n\t\t\t\tif(this.hasAttribute('find')) {\n\t\t\t\t\tlet style = getComputedStyle(this.findEl);\n\n\t\t\t\t\tlet height = this.findEl.offsetHeight;\n\t\t\t\t\tlet marginTop = parseFloat(style.marginTop);\n\t\t\t\t\tlet marginBottom = parseFloat(style.marginBottom);\n\n\t\t\t\t\ttotalHeight = height + marginTop + marginBottom;\n\t\t\t\t}\n\n\t\t\t\tlet subtractHeight = rect.height + totalHeight;\n\n\t\t\t\tthis.list.style.height = `calc(100% - ${subtractHeight}px)`;\n\t\t\t}\n\t\t});\n\n\t\tthis.#htmlOptions = Array.from(this.querySelectorAll(':scope > wje-option')).map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: option.textContent.trim(),\n\t\t\t};\n\t\t})\n\n\t\tthis.input.addEventListener('focus', (e) => {\n\t\t\tthis.labelElement?.classList.add('fade');\n\t\t\tthis.native.classList.add('focused');\n\t\t});\n\n\t\tthis.input.addEventListener('blur', (e) => {\n\t\t\tthis.native.classList.remove('focused');\n\t\t\tif (!e.target.value) this.labelElement?.classList.remove('fade');\n\t\t});\n\n\t\tthis.input.addEventListener('input', (e) => {\n\t\t\tthis.propagateValidation();\n\t\t});\n\n\t\tthis.addEventListener('wje-option:change', this.optionChange);\n\n\t\tthis.addEventListener('invalid', (e) => {\n\t\t\tthis.invalid = true;\n\t\t\tthis.pristine = false;\n\n\t\t\tthis.showInvalidMessage();\n\n\t\t\tif (this.customErrorDisplay) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis.clear?.addEventListener('wje-button:click', (e) => {\n\t\t\tif (this.readonly || this.disabled) return;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.clearSelections();\n\t\t});\n\n\t\t// Listen for <wje-options> lazy/non-lazy load events on the select itself.\n\t\t// Using the host element instead of this.list ensures the handler survives\n\t\t// internal refreshes (e.g. toggling the disabled attribute).\n\t\tthis.removeEventListener('wje-options:load', this.#onOptionsLoad);\n\t\tthis.addEventListener('wje-options:load', this.#onOptionsLoad);\n\n\t\t// skontrolujeme ci ma select atribut find\n\t\tif (this.hasAttribute('find') && this.findEl instanceof HTMLElement) {\n\t\t\tevent.addListener(this.findEl, 'keyup', '', this.#applySearchFilter);\n\t\t\tevent.addListener(this.findEl, 'wje-input:clear', '', this.#applySearchFilter);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the change event for an option element within a select-like component.\n\t * This method processes user interactions with options and updates the state of the component,\n\t * including selection management, validation, and UI updates. Behavior differs based on\n\t * whether the component supports multiple selections.\n\t * Key functionality:\n\t * - Prevents the default behavior, event propagation, and immediate propagation of the event.\n\t * - Retrieves all options within the component.\n\t * - If the component doesn't support multiple selection:\n\t * - Marks only the clicked option as selected and deselects others.\n\t * - Hides the option popup.\n\t * - If the component supports multiple selection:\n\t * - Processes the clicked option without deselecting others.\n\t * - Updates the selected options and triggers validation.\n\t * - Marks the form state as non-pristine.\n\t * - Propagates the validation state to other relevant parts of the component or system.\n\t * @param {Event} e The event object representing the option change interaction.\n\t */\n\toptionChange = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\te.stopImmediatePropagation();\n\n\t\tif (this.readonly || this.disabled) return;\n\n\t\tlet allOptions = this.getAllOptions();\n\n\t\tif (!this.hasAttribute('multiple')) {\n\t\t\tallOptions.forEach((option) => {\n\t\t\t\tif (option.value === e.target.value) {\n\t\t\t\t\tthis.processClickedOption(option);\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.popup.hide(false);\n\t\t} else {\n\t\t\tthis.processClickedOption(e.target, true);\n\t\t}\n\n\t\tthis.selections();\n\n\t\tthis.validate(this.selectedOptions);\n\n\t\tthis.pristine = false;\n\t\tthis.propagateValidation();\n\t}\n\n\t/**\n\t * Handles the logic for processing the selection state of a clicked option element.\n\t * @function processClickedOption\n\t * @param {Element} option The option element that is clicked.\n\t * @param {boolean} [multiple] A Boolean indicating whether multiple options can be selected. Defaults to false.\n\t * Changes the selected state of the passed option and updates the selected options list.\n\t * Checks if the option already has a \"selected\" attribute, toggles its state,\n\t * and updates the internal selected options.\n\t */\n\tprocessClickedOption = (option, multiple = false) => {\n\t\tconst isSelected = option.hasAttribute('selected');\n\t\toption.selected = !isSelected;\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t}\n\n\t/**\n\t * Returns all the options as HTML.\n\t * @returns {NodeList} The options as HTML.\n\t */\n\tgetAllOptions() {\n\t\treturn this.querySelectorAll('wje-option');\n\t}\n\n\t/**\n\t * Handles changes in the selection for a component, updating internal values, input fields,\n\t * and visual presentation (like chips or slots) as per the given selection options.\n\t * @param {Array|null} options The collection of selected option elements. If null, no options are selected.\n\t * @param {number} length The total number of selected options.\n\t * @returns {void}\n\t */\n\tselectionChanged(options = null, length = 0) {\n\t\tif (this.hasAttribute('multiple')) {\n\t\t\tthis.value = options.map((el) => el.value).reverse();\n\t\t\tthis.input.value = this.value.map(a => a).join(\" \").trim();\n\n\t\t\tif (this.placeholder && length === 0) {\n\t\t\t\tthis.chips.innerHTML = this.placeholder;\n\t\t\t} else {\n\t\t\t\tif (options !== null) Array.from(options).slice(0, +this.maxOptions).forEach(option => this.chips.appendChild(this.getChip(option)));\n\t\t\t\tif (this.counterEl instanceof HTMLElement || !this.maxOptions || length > +this.maxOptions) {\n\t\t\t\t\tthis.counter();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst option = options?.at(0);\n\n\t\t\tthis.value = options?.map((el) => el.value)?.at(0) || '';\n\t\t\tthis.input.value = this.value[0] || '';\n\t\t\tthis.displayInput.value = options[0]?.textContent?.trim() || '';\n\n\t\t\tthis.slotStart.innerHTML = '';\n\t\t\tthis.slotEnd.innerHTML = '';\n\n\t\t\tif (option && option instanceof HTMLElement) {\n\t\t\t\tlet optionSlotStart = option?.querySelector('wje-option > [slot=start]');\n\t\t\t\tif (optionSlotStart) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.slotStart.append(optionSlotStart.cloneNode(true));\n\t\t\t\t\t},0)\n\t\t\t\t}\n\n\t\t\t\tlet optionSlotEnd = option?.querySelector('wje-option > [slot=end]');\n\n\t\t\t\tif (optionSlotEnd && optionSlotEnd instanceof HTMLElement && optionSlotEnd.tagName !== 'WJE-DROPDOWN' && optionSlotEnd.tagName !== 'WJE-BUTTON') {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.slotEnd.append(optionSlotEnd.cloneNode(true));\n\t\t\t\t\t},0)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles the logic for updating selections based on the current selected options,\n\t * updating chips content, and dispatching change events if necessary.\n\t * @param {boolean} [silence] If true, suppresses the dispatch of a custom change event.\n\t * @returns {void} This method does not return a value.\n\t */\n\tselections(silence = false) {\n\t\tif (this.selectedOptions.length >= +this.maxOptions) {\n\t\t\tthis.counterEl = null;\n\t\t}\n\n\t\tif (this.chips) {\n\t\t\tthis.chips.innerHTML = '';\n\t\t}\n\n\t\tif (this.selectedOptions.length > 0) {\n\t\t\tthis.selectionChanged(this.selectedOptions, this.selectedOptions.length);\n\t\t} else {\n\t\t\tthis.selectionChanged(this.selectedOptions);\n\t\t}\n\n\t\tif (silence) return;\n\t\tevent.dispatchCustomEvent(this, 'wje-select:change');\n\t}\n\n\t/**\n\t * Updates the counter element to reflect the current state of selected values relative to the maximum allowed options.\n\t * If the maximum options are selected, the counter element is removed. If it does not already exist and needs to be displayed, it is created.\n\t * @returns {void} Does not return a value.\n\t */\n\tcounter() {\n\t\t// zmazanie counter (span)\n\t\tif (this.counterEl && this.value.length === +this.maxOptions) {\n\t\t\tthis.counterEl.remove();\n\t\t\tthis.counterEl = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// ak counter nie je, tak ho vytvorime\n\t\tif (!this.counterEl) {\n\t\t\tthis.counterEl = document.createElement('span');\n\t\t\tthis.counterEl.classList.add('counter');\n\n\t\t\tthis.chips.appendChild(this.counterEl);\n\t\t}\n\n\t\t// nastavime hodnotu counter\n\t\tthis.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;\n\t}\n\n\t/**\n\t * Creates and returns a chip element with specified properties and a label.\n\t * @param {object} option The configuration object for the chip. Typically includes properties such as value and textContent to set up the chip's label and data.\n\t * @returns {HTMLElement} The newly created chip element with a label and default properties.\n\t */\n\tgetChip(option) {\n\t\tlet chip = document.createElement('wje-chip');\n\t\tchip.size = 'small';\n\t\tchip.removable = true;\n\t\tchip.round = true;\n\t\tchip.addEventListener('wje:chip-remove', this.removeChip);\n\t\tchip.option = option;\n\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.innerText = this.#htmlSelectedItem(option.value) // option.textContent.trim();\n\n\t\tchip.appendChild(label);\n\n\t\treturn chip;\n\t}\n\n\t/**\n\t * Handles the removal of a chip element from the DOM and updates the related state.\n\t * @param {Event} e The event object triggered by the chip removal action.\n\t * The target of the event is expected to be the chip element itself.\n\t */\n\tremoveChip = (e) => {\n\t\te.target.parentNode.removeChild(e.target);\n\t\tthis.processClickedOption(e.target.option, true);\n\t\tthis.selections();\n\t};\n\n\t/**\n\t * Generates an HTML option element based on the provided item and mapping.\n\t * @param {object} item The item to generate the option for.\n\t * @param {object} [map] The mapping object that specifies the properties of the item to use for the option's value and text.\n\t * @param {string} [map.value] The property of the item to use for the option's value.\n\t * @param {string} [map.text] The property of the item to use for the option's text.\n\t * @returns {HTMLElement} The generated HTML option element.\n\t */\n\thtmlOption(item, map = { value: 'value', text: 'text' }) {\n\t\tlet option = document.createElement('wje-option');\n\n\t\tif (item[map.value] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.value}`);\n\t\t}\n\n\t\tif (item[map.text] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.text}`);\n\t\t}\n\n\t\toption.setAttribute('value', item[map.value] ?? '');\n\t\toption.innerText = item[map.text] ?? '';\n\n\t\tthis.#addedOptions.push({ [map.value]: item[map.value], [map.text]: item[map.text] });\n\t\treturn option;\n\t}\n\n\t/**\n\t * Returns the provided item.\n\t * @param {any} item The item to be returned.\n\t * @returns {any} The same item that was passed as input.\n\t */\n\thtmlSelectedItem(item) {\n\t\treturn item;\n\t}\n\n\t/**\n\t * Adds a new option to the component.\n\t * @param {object} optionData The data used to create the new option.\n\t * @param {boolean} [silent] Whether the addition should trigger events or not.\n\t * @param {object} [map] Mapping of keys to identify value and text in the optionData.\n\t * @param {string} [map.value] The key in optionData that represents the value of the option.\n\t * @param {string} [map.text] The key in optionData that represents the text of the option.\n\t * @returns {void}\n\t */\n\taddOption(optionData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!optionData) return;\n\n\t\tconst optionsElement = this.querySelector('wje-options');\n\t\tif (optionsElement) {\n\t\t\toptionsElement.addOption(optionData, silent, map);\n\t\t\treturn;\n\t\t}\n\t\tlet option = this.htmlOption(optionData, map);\n\t\tthis.appendChild(option);\n\t}\n\n\t/**\n\t * Adds one or more options to a collection. If the input is an array, it adds each option within the array.\n\t * Otherwise, it adds a single option.\n\t * @param {Array | object} optionsData The data representing the options to be added. It can be a single object or an array of objects.\n\t * @param {boolean} [silent] Optional flag to determine if events or notifications should be suppressed while adding options.\n\t * @param {object} [map] An optional mapping object specifying how to map data properties to value and text for the options.\n\t * @param {string} [map.value] The property in the optionsData that represents the value of the option.\n\t * @param {string} [map.text] The property in the optionsData that represents the text of the option.\n\t * @returns {void}\n\t */\n\taddOptions(optionsData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!Array.isArray(optionsData)) {\n\t\t\tthis.addOption(optionsData, silent, map);\n\t\t} else {\n\t\t\toptionsData.forEach((item) => {\n\t\t\t\tthis.addOption(item, silent, map);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Selects an option from the available options within the component.\n\t * @param {string} value The value of the option to be selected.\n\t * @param {boolean} [silent] Determines whether the selection should trigger notification or updates. Defaults to false.\n\t * @returns {void} Does not return a value.\n\t */\n\tselectOption(value, silent = false) {\n\t\tif (!value) return;\n\n\t\tlet option = this.querySelector(`wje-option[value=\"${value}\"]`);\n\n\t\tif (option) {\n\t\t\tthis.processClickedOption(option, this.hasAttribute('multiple'));\n\t\t}\n\n\t\tif (this.drawingStatus > this.drawingStatuses.START) this.selections(silent);\n\t}\n\n\t/**\n\t * Selects multiple options based on the provided values. If a single value is provided, it selects that option.\n\t * If an array of values is provided, it iterates through the array and selects each option.\n\t * @param {any|any[]} values A single value or an array of values to be selected.\n\t * @param {boolean} [silent] Determines whether the selection action should occur silently without triggering other side effects or events.\n\t * @returns {void} This method does not return a value.\n\t */\n\tselectOptions(values, silent = false) {\n\t\tif (!Array.isArray(values)) {\n\t\t\tthis.selectOption(values, silent);\n\t\t} else {\n\t\t\tvalues.forEach((value) => {\n\t\t\t\tthis.selectOption(value, silent);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clones and appends an icon with the \"check\" slot to the specified option element.\n\t * @param {HTMLElement} option The target HTML element to which the cloned \"check\" icon will be appended.\n\t * @returns {void} This method does not return a value, but it modifies the DOM by appending a cloned \"check\" icon to the provided option element.\n\t */\n\toptionCheckSlot(option) {\n\t\tlet icon = this.querySelector('template')?.content.querySelector(`[slot=\"check\"]`);\n\t\tif (!icon) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet iconClone = icon.cloneNode(true);\n\t\toption.append(iconClone);\n\t}\n\n\t/**\n\t * Clears all selected options and resets selections.\n\t * The method ensures that all options are deselected, updates the internal state, validates the selections,\n\t * propagates the validation status, and indicates invalid state if necessary.\n\t * @returns {void} No value is returned by this method.\n\t */\n\tclearSelections() {\n\t\tthis.selectedOptions = [];\n\n\t\tthis.getAllOptions().forEach((option) => {\n\t\t\toption.selected = false;\n\t\t});\n\t\tthis.selections();\n\n\t\tthis.validate();\n\t\tthis.propagateValidation();\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Processes the given item and retrieves the corresponding value from the selected options.\n\t * @param {string} item The key to search for in the selected options.\n\t * @returns {string} The text content associated with the selected item, or an empty string if not found.\n\t */\n\t#htmlSelectedItem(item) {\n\t\tconst keyValue = \"value\"\n\t\tconst textValue = \"textContent\";\n\n\t\tconst value = this.selectedOptions.find((option) => option[keyValue] === item)?.[textValue] ?? \"\";\n\n\t\treturn this.htmlSelectedItem(value);\n\t}\n\n\t/**\n\t * Retrieves the list of selected options within the component.\n\t * @returns {Array<Element>} An array of elements representing the options that are currently selected.\n\t */\n\t#getSelectedOptions() {\n\t\treturn Array.from(this.querySelectorAll('wje-option[selected]'));\n\t}\n\n\t/**\n\t * Filters option elements based on the search input value.\n\t * This function applies a search filter to a list of options. If a `wj-options` element exists and has\n\t * the `lazy` attribute, the search value is passed to the `wj-options` element, enabling infinite scroll\n\t * functionality to handle the filtering. If the `lazy` attribute is not present, it performs a local\n\t * search to show or hide options depending on whether their text content matches the search input.\n\t * @param {Event} e The input event containing the search input value from the user.\n\t */\n\t#applySearchFilter = (e) => {\n\t\t// contains wj-options element with options\n\t\tconst optionsElement = this.querySelector('wje-options');\n\n\t\tif (optionsElement && optionsElement.hasAttribute('lazy')) {\n\t\t\t// pass search value to wj-options element and infinite scroll will handle the rest\n\t\t\toptionsElement.setAttribute('search', e.target.value);\n\t\t} else {\n\t\t\tlet value = e.target.value.trim().toLowerCase();\n\n\t\t\tthis.getAllOptions().forEach((option) => {\n\t\t\t\tif (option.textContent.trim().toLowerCase().includes(value)) {\n\t\t\t\t\toption.style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\toption.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tdocument.removeEventListener('mousedown', this.#onMenuItemClickCapture, true);\n\t}\n}","import { Select } from \"./select.element.js\";\n\nexport default Select;\n\nSelect.define('wje-select', Select);\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAaO,MAAM,eAAe,sBAAsB;AAAA,EACjD,cAAc;AACb,UAAO;AAFF;AA4EN,sCAAgB,CAAE;AAElB,qCAAe,CAAE;AASjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAAiB,CAAC,MAAM;;AACvB,YAAM,QAAQ,KAAK,SAAU,KAAK,cAAc,KAAK,WAAW,cAAc,WAAW;AAEzF,WAAK,gBAAgB,QAAQ,CAAC,WAAW;AACxC,aAAK,cAAa,EAAG,QAAQ,CAAC,OAAO;AACpC,cAAI,GAAG,UAAU,OAAO,OAAO;AAC9B,eAAG,WAAW;AAAA,UACnB;AAAA,QACA,CAAI;AAAA,MACJ,CAAG;AAGD,YAAM,cAAY,UAAK,aAAa,OAAO,MAAzB,mBAA4B,MAAM,SAAQ,CAAE;AAE9D,gBAAU,QAAQ,SAAO;AACxB,cAAM,iBAAiB,MAAM,KAAK,KAAK,cAAa,CAAE,EAAE,KAAK,QAAM,GAAG,UAAU,GAAG;AACnF,YAAI,gBAAgB;AACnB,yBAAe,WAAW;AAAA,QAC9B;AAAA,MACA,CAAG;AAED,WAAK,kBAAkB,sBAAK,0CAAL;AACvB,WAAK,WAAW,IAAI;AAEpB,iBAAK,SAAL,mBAAW,SAAS,GAAG;AAGvB,UAAI,OAAO;AACV,cAAM,oBAAoB,OAAO,yBAAyB;AAAA,MAC7D;AAAA,IACE;AAQD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAA0B,CAAC,MAAM;AAChC,YAAM;AAAA;AAAA,QAAoC,EAAE;AAAA;AAC5C,UAAI,CAAC,UAAU,CAAC,OAAO,QAAS;AAGhC,YAAM,WAAW,OAAO,QAAQ,eAAe;AAC/C,UAAI,CAAC,SAAU;AAEf,YAAM,WAAW,OAAO,QAAQ,cAAc;AAC9C,UAAI,YAAY,OAAO,SAAS,SAAS,YAAY;AAEpD,iBAAS,KAAM;AAAA,MAClB;AAIE,QAAE,gBAAiB;AAAA,IACnB;AAgBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAAe;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,cAAc;AAAA,MACd,eAAe;AAAA,MACf,gBAAgB;AAAA,IAChB;AAoSD,qCAAY;AAuWZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAAe,CAAC,MAAM;AACrB,QAAE,eAAgB;AAClB,QAAE,gBAAiB;AACnB,QAAE,yBAA0B;AAE5B,UAAI,KAAK,YAAY,KAAK,SAAU;AAEpC,UAAI,aAAa,KAAK,cAAe;AAErC,UAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AACnC,mBAAW,QAAQ,CAAC,WAAW;AAC9B,cAAI,OAAO,UAAU,EAAE,OAAO,OAAO;AACpC,iBAAK,qBAAqB,MAAM;AAAA,UACrC,OAAW;AACN,mBAAO,WAAW;AAAA,UACvB;AAAA,QACA,CAAI;AACD,aAAK,MAAM,KAAK,KAAK;AAAA,MACxB,OAAS;AACN,aAAK,qBAAqB,EAAE,QAAQ,IAAI;AAAA,MAC3C;AAEE,WAAK,WAAY;AAEjB,WAAK,SAAS,KAAK,eAAe;AAElC,WAAK,WAAW;AAChB,WAAK,oBAAqB;AAAA,IAC5B;AAWC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAAuB,CAAC,QAAQ,WAAW,UAAU;AACpD,YAAM,aAAa,OAAO,aAAa,UAAU;AACjD,aAAO,WAAW,CAAC;AAEnB,WAAK,kBAAkB,sBAAK,0CAAL;AAAA,IACzB;AAuIC;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAa,CAAC,MAAM;AACnB,QAAE,OAAO,WAAW,YAAY,EAAE,MAAM;AACxC,WAAK,qBAAqB,EAAE,OAAO,QAAQ,IAAI;AAC/C,WAAK,WAAY;AAAA,IACjB;AAoLD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAAqB,CAAC,MAAM;AAE3B,YAAM,iBAAiB,KAAK,cAAc,aAAa;AAEvD,UAAI,kBAAkB,eAAe,aAAa,MAAM,GAAG;AAE1D,uBAAe,aAAa,UAAU,EAAE,OAAO,KAAK;AAAA,MACvD,OAAS;AACN,YAAI,QAAQ,EAAE,OAAO,MAAM,KAAM,EAAC,YAAa;AAE/C,aAAK,cAAa,EAAG,QAAQ,CAAC,WAAW;AACxC,cAAI,OAAO,YAAY,KAAI,EAAG,cAAc,SAAS,KAAK,GAAG;AAC5D,mBAAO,MAAM,UAAU;AAAA,UAC5B,OAAW;AACN,mBAAO,MAAM,UAAU;AAAA,UAC5B;AAAA,QACA,CAAI;AAAA,MACJ;AAAA,IACA;AAxqCE,SAAK,YAAY;AAQjB,SAAK,cAAc;AAMnB,SAAK,SAAS;AAMd,SAAK,QAAQ;AAMb,SAAK,eAAe;AAMpB,SAAK,YAAY;AAMjB,SAAK,UAAU;AAMf,SAAK,QAAQ;AAMb,SAAK,QAAQ;AAMb,SAAK,QAAQ;AAMb,SAAK,OAAO;AAEZ,SAAK,SAAS,CAAE;AAChB,SAAK,mBAAmB,CAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuGC,IAAI,MAAM,OAAO;AAChB,UAAM,WAAW,IAAI,SAAU;AAE/B,QAAI,OAAO;AACV,UAAI,OAAO;AAEX,UAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACzB,eAAO,KAAK,MAAM,GAAG;AAAA,MACzB;AACG,WAAK,QAAQ,OAAK;AACjB,iBAAS,OAAO,KAAK,MAAM,CAAC;AAAA,MAChC,CAAI;AACD,cAAQ;AAER,WAAK,SAAS;AAAA,IACjB,OAAS;AACN,eAAS,OAAO,KAAK,IAAI;AACzB,cAAQ;AACR,WAAK,SAAS,CAAE;AAAA,IACnB;AACE,SAAK,UAAU,aAAa,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,QAAQ;AACX,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,IAAI,WAAW,OAAO;AACrB,QAAI,OAAO;AACV,WAAK,aAAa,eAAe,KAAK;AAAA,IACzC,OAAS;AACN,WAAK,gBAAgB,aAAa;AAAA,IACrC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,IAAI,aAAa;AAChB,WAAO,CAAC,KAAK,aAAa,aAAa,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,IAAI,aAAa,OAAO;AACvB,SAAK,aAAa,SAAS,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASC,IAAI,eAAe;AAClB,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,QAAQ,OAAO;AAClB,SAAK,aAAa,WAAW,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,UAAU;AACb,WAAO,KAAK,aAAa,SAAS,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,IAAI,SAAS,OAAO;;AACnB,QAAI,OAAO;AACV,WAAK,aAAa,YAAY,EAAE;AAEhC,iBAAK,UAAL,mBAAY,aAAa,YAAY;AACrC,iBAAK,iBAAL,mBAAmB,aAAa,YAAY;AAE5C,iBAAK,UAAL,mBAAY,aAAa,YAAY;AAAA,IACxC,OAAS;AACN,WAAK,gBAAgB,UAAU;AAE/B,iBAAK,UAAL,mBAAY,gBAAgB;AAC5B,iBAAK,iBAAL,mBAAmB,gBAAgB;AAEnC,iBAAK,UAAL,mBAAY,gBAAgB;AAAA,IAC/B;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,WAAW;AACd,WAAO,KAAK,aAAa,UAAU;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUC,IAAI,SAAS,OAAO;;AACnB,QAAI,OAAO;AACV,WAAK,aAAa,YAAY,EAAE;AAGhC,iBAAK,UAAL,mBAAY,aAAa,YAAY;AACrC,iBAAK,iBAAL,mBAAmB,aAAa,YAAY;AAG5C,iBAAK,UAAL,mBAAY,aAAa,YAAY;AAAA,IACxC,OAAS;AACN,WAAK,gBAAgB,UAAU;AAE/B,iBAAK,UAAL,mBAAY,gBAAgB;AAC5B,iBAAK,iBAAL,mBAAmB,gBAAgB;AAEnC,iBAAK,UAAL,mBAAY,gBAAgB;AAAA,IAC/B;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,WAAW;AACd,WAAO,KAAK,aAAa,UAAU;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,IAAI,UAAU,OAAO;AACpB,QAAI,OAAO;AACV,WAAK,aAAa,cAAc,KAAK;AAAA,IACxC,OAAS;AACN,WAAK,gBAAgB,YAAY;AAAA,IACpC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,IAAI,YAAY;AACf,WAAO,KAAK,aAAa,YAAY,KAAK;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,OAAO,OAAO;AACjB,SAAK,aAAa,UAAU,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,IAAI,SAAS;AACZ,WAAO,KAAK,aAAa,QAAQ,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,gBAAgB,OAAO;AAC1B,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,kBAAkB;AACrB,WAAO,KAAK,oBAAoB,CAAE;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,KAAK,OAAO;AACf,QAAI,OAAO;AACV,WAAK,aAAa,QAAQ,EAAE;AAAA,IAC/B,OAAS;AACN,WAAK,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,OAAO;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,OAAO,OAAO;AACjB,QAAI,OAAO;AACV,WAAK,aAAa,WAAW,EAAE;AAAA,IAClC,OAAS;AACN,WAAK,gBAAgB,SAAS;AAAA,IACjC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,SAAS;AACZ,WAAO,KAAK,aAAa,SAAS;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,IAAI,qBAAqB;AACxB,WAAO,KAAK,aAAa,sBAAsB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASC,IAAI,UAAU;AACb,QAAI,KAAK,cAAc,aAAa,GAAG;AACtC,YAAM,aAAa,CAAC,GAAG,KAAK,cAAc,aAAa,EAAE,eAAe,GAAG,mBAAK,gBAAe,GAAG,mBAAK,aAAY;AAEnH,aAAO;AAAA,IACV,OAAS;AACN,YAAM,aAAa,CAAC,GAAG,mBAAK,gBAAe,GAAG,mBAAK,aAAY;AAE/D,aAAO,MAAM;AAAA,QACZ,IAAI,IAAI,WAAW,QAAO,EAAG,IAAI,SAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,OAAM;AAAA,MACjE,EAAC,QAAS;AAAA,IACd;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASC,WAAW,gBAAgB;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,WAAW,qBAAqB;AAC/B,WAAO,CAAC,UAAU,SAAS,YAAY,YAAY,YAAY,SAAS,eAAe,cAAc,eAAe,WAAW,WAAW;AAAA,EAC5I;AAAA;AAAA;AAAA;AAAA,EAKC,kBAAkB;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEC,aAAa;AACZ,QAAG,KAAK,aAAa,OAAO,GAAG;AAC9B,WAAK,QAAQ,KAAK,aAAa,OAAO;AAAA,IACzC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMC,OAAO;AACN,QAAI,WAAW,SAAS,uBAAwB;AAEhD,SAAK,UAAU,IAAI,iBAAiB,KAAK,YAAY,SAAS,KAAK,YAAY,WAAW;AAG1F,QAAI,SAAS,SAAS,cAAc,KAAK;AACzC,WAAO,aAAa,QAAQ,QAAQ;AACpC,WAAO,UAAU,IAAI,iBAAiB,KAAK,WAAW,SAAS;AAG/D,QAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,YAAQ,UAAU,IAAI,SAAS;AAC/B,YAAQ,aAAa,QAAQ,QAAQ;AAGrC,QAAI,QAAQ,SAAS,cAAc,OAAO;AAC1C,UAAM,aAAa,QAAQ,OAAO;AAClC,UAAM,YAAY,KAAK,SAAS;AAGhC,QAAI,eAAe,SAAS,cAAc,KAAK;AAC/C,iBAAa,aAAa,QAAQ,eAAe;AACjD,iBAAa,UAAU,IAAI,eAAe;AAE1C,QAAI,YAAY,SAAS,cAAc,KAAK;AAC5C,cAAU,UAAU,IAAI,YAAY;AAEpC,QAAI,QAAQ,SAAS,cAAc,OAAO;AAC1C,UAAM,aAAa,QAAQ,MAAM;AACjC,UAAM,QAAQ,KAAK,MAAM,KAAK,GAAG,EAAE,KAAM;AACzC,UAAM,UAAU,IAAI,cAAc;AAElC,QAAI,UAAU,SAAS,cAAc,OAAO;AAC5C,YAAQ,aAAa,QAAQ,MAAM;AACnC,YAAQ,aAAa,QAAQ,OAAO;AACpC,YAAQ,aAAa,gBAAgB,KAAK;AAC1C,YAAQ,aAAa,YAAY,EAAE;AACnC,YAAQ,aAAa,eAAe,KAAK,eAAe,EAAE;AAE1D,QAAI,KAAK,UAAU;AAClB,YAAM,aAAa,YAAY,EAAE;AACjC,cAAQ,aAAa,YAAY,EAAE;AAAA,IACtC;AAGE,QAAI,KAAK,UAAU;AAClB,YAAM,aAAa,YAAY,EAAE;AACjC,cAAQ,aAAa,YAAY,EAAE;AAAA,IACtC;AAEE,QAAI,KAAK,UAAU;AAClB,YAAM,aAAa,YAAY,EAAE;AACjC,cAAQ,aAAa,YAAY,EAAE;AAAA,IACtC;AAEE,QAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,YAAQ,UAAU,IAAI,UAAU;AAEhC,QAAI,QAAQ,SAAS,cAAc,UAAU;AAC7C,UAAM,aAAa,QAAQ,cAAc;AACzC,UAAM,aAAa,QAAQ,OAAO;AAElC,QAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,UAAM,UAAU,IAAI,OAAO;AAC3B,UAAM,YAAY,KAAK,eAAe;AAGtC,QAAI,iBAAiB,SAAS,cAAc,KAAK;AACjD,mBAAe,aAAa,QAAQ,iBAAiB;AACrD,mBAAe,UAAU,IAAI,iBAAiB;AAC9C,mBAAe,MAAM,YAAY,UAAU,KAAK,SAAS;AAEzD,QAAI,OAAO,SAAS,cAAc,KAAK;AACvC,SAAK,UAAU,IAAI,MAAM;AAEzB,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,QAAI,QAAQ,SAAS,cAAc,YAAY;AAC/C,UAAM,aAAa,QAAQ,MAAM;AACjC,UAAM,aAAa,QAAQ,OAAO;AAClC,UAAM,aAAa,oBAAoB,EAAE;AAEzC,QAAI,YAAY,SAAS,cAAc,UAAU;AACjD,cAAU,aAAa,QAAQ,GAAG;AAElC,QAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,UAAM,aAAa,QAAQ,OAAO;AAElC,QAAI,YAAY,SAAS,cAAc,MAAM;AAC7C,cAAU,aAAa,QAAQ,OAAO;AAGtC,QAAI,QAAQ,SAAS,cAAc,WAAW;AAC9C,UAAM,aAAa,aAAa,cAAc;AAC9C,QAAI,CAAC,KAAK;AACT,YAAM,aAAa,QAAQ,EAAE;AAC9B,UAAM,aAAa,QAAQ,OAAO;AAClC,UAAM,aAAa,UAAU,KAAK,MAAM;AAcxC,QAAI,KAAK,UAAU;AAClB,YAAM,aAAa,YAAY,EAAE;AAAA,IACpC,OAAS;AACN,YAAM,gBAAgB,UAAU;AAAA,IACnC;AAEE,QAAI,KAAK,YAAY,YAAY;AAChC,UAAI,KAAK,aAAa,OAAO,EAAG,QAAO,YAAY,KAAK;AAAA,IAC3D,OAAS;AACN,cAAQ,YAAY,KAAK;AAAA,IAC5B;AAEE,iBAAa,OAAO,SAAS;AAC7B,iBAAa,OAAO,OAAO;AAC3B,iBAAa,OAAO,KAAK;AAEzB,UAAM,OAAO,SAAS;AAEtB,QAAI,KAAK,aAAa,UAAU,EAAG,cAAa,OAAO,KAAK;AAE5D,QAAI,KAAK,aAAa,WAAW,EAAG,cAAa,OAAO,KAAK;AAE7D,iBAAa,YAAY,OAAO;AAChC,iBAAa,YAAY,KAAK;AAE9B,SAAK,YAAY,IAAI;AAErB,QAAI,KAAK,aAAa,MAAM,GAAG;AAC9B,UAAI,OAAO,SAAS,cAAc,WAAW;AAC7C,WAAK,aAAa,WAAW,UAAU;AACvC,WAAK,aAAa,eAAe,QAAQ;AACzC,WAAK,aAAa,QAAQ,MAAM;AAChC,WAAK,YAAY;AACjB,WAAK,UAAU,IAAI,MAAM;AAEzB,qBAAe,YAAY,IAAI;AAE/B,WAAK,SAAS;AAAA,IACjB;AAEE,QAAI,aAAa,SAAS,cAAc,MAAM;AAC9C,eAAW,aAAa,QAAQ,QAAQ;AAGxC,mBAAe,OAAO,IAAI;AAC1B,mBAAe,OAAO,UAAU;AAEhC,YAAQ,OAAO,YAAY;AAE3B,UAAM,OAAO,OAAO;AACpB,UAAM,OAAO,cAAc;AAE3B,QAAI,KAAK,YAAY,QAAS,OAAM,aAAa,UAAU,EAAE;AAE7D,SAAK,OAAO,KAAK;AAEjB,WAAO,OAAO,KAAK;AACnB,WAAO,OAAO,SAAS;AAEvB,aAAS,YAAY,MAAM;AAE3B,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,aAAa;AAElB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,YAAY;;AACX,aAAS,iBAAiB,aAAa,mBAAK,0BAAyB,IAAI;AAEzE,SAAK,SAAU;AAEf,QAAI,KAAK,aAAa,SAAS,GAAG;AACjC,WAAK,mBAAoB;AAAA,IAC5B;AAEE,eAAK,cAAa,MAAlB,mBAAsB,QAAQ,CAAC,WAAW;AACzC,WAAK,gBAAgB,MAAM;AAAA,IAC9B;AAEE,SAAK,kBAAkB,sBAAK,0CAAL;AAEvB,QAAI,KAAK,aAAa,OAAO,GAAG;AAC/B,WAAK,cAAc,KAAK,OAAO,IAAI;AAAA,IACtC,WAAa,KAAK,gBAAgB,QAAQ;AACvC,WAAK,WAAW,IAAI;AAAA,IACvB;AAEE,QAAI,KAAK,MAAM;AACd,YAAM,YAAY,KAAK,OAAO,kBAAkB,MAAM,CAAC,MAAM;AAC5D,YAAI,KAAK,YAAa;AACtB,aAAK,cAAc;AAEnB,cAAM,iBAAiB,KAAK,cAAc,aAAa;AACvD,uBAAe,aAAa,QAAQ,EAAE;AACtC,uBAAe,aAAa,YAAY,EAAE;AAAA,MAC9C,CAAI;AAAA,IACJ;AAEE,UAAM,YAAY,KAAK,OAAO,uBAAuB,MAAM,MAAM;AAChE,YAAM,mBAAmB,KAAK,WAAW,iBAAkB;AAE3D,UAAI,iBAAiB,SAAS,GAAG;AAChC,cAAM,KAAK,iBAAiB,CAAC;AAC7B,cAAM,OAAO,GAAG,sBAAuB;AACvC,YAAI,cAAc;AAElB,YAAG,KAAK,aAAa,MAAM,GAAG;AAC7B,cAAI,QAAQ,iBAAiB,KAAK,MAAM;AAExC,cAAI,SAAS,KAAK,OAAO;AACzB,cAAI,YAAY,WAAW,MAAM,SAAS;AAC1C,cAAI,eAAe,WAAW,MAAM,YAAY;AAEhD,wBAAc,SAAS,YAAY;AAAA,QACxC;AAEI,YAAI,iBAAiB,KAAK,SAAS;AAEnC,aAAK,KAAK,MAAM,SAAS,eAAe,cAAc;AAAA,MAC1D;AAAA,IACA,CAAG;AAED,uBAAK,cAAe,MAAM,KAAK,KAAK,iBAAiB,qBAAqB,CAAC,EAAE,IAAI,CAAC,WAAW;AAC5F,aAAO;AAAA,QACN,OAAO,OAAO;AAAA,QACd,MAAM,OAAO,YAAY,KAAM;AAAA,MAC/B;AAAA,IACD,CAAA;AAED,SAAK,MAAM,iBAAiB,SAAS,CAAC,MAAM;;AAC3C,OAAAA,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,UAAU,IAAI;AACjC,WAAK,OAAO,UAAU,IAAI,SAAS;AAAA,IACtC,CAAG;AAED,SAAK,MAAM,iBAAiB,QAAQ,CAAC,MAAM;;AAC1C,WAAK,OAAO,UAAU,OAAO,SAAS;AACtC,UAAI,CAAC,EAAE,OAAO,MAAO,EAAAA,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,UAAU,OAAO;AAAA,IAC5D,CAAG;AAED,SAAK,MAAM,iBAAiB,SAAS,CAAC,MAAM;AAC3C,WAAK,oBAAqB;AAAA,IAC7B,CAAG;AAED,SAAK,iBAAiB,qBAAqB,KAAK,YAAY;AAE5D,SAAK,iBAAiB,WAAW,CAAC,MAAM;AACvC,WAAK,UAAU;AACf,WAAK,WAAW;AAEhB,WAAK,mBAAoB;AAEzB,UAAI,KAAK,oBAAoB;AAC5B,UAAE,eAAgB;AAAA,MACtB;AAAA,IACA,CAAG;AAED,eAAK,UAAL,mBAAY,iBAAiB,oBAAoB,CAAC,MAAM;AACvD,UAAI,KAAK,YAAY,KAAK,SAAU;AACpC,QAAE,eAAgB;AAClB,QAAE,gBAAiB;AACnB,WAAK,gBAAiB;AAAA,IACzB;AAKE,SAAK,oBAAoB,oBAAoB,mBAAK,eAAc;AAChE,SAAK,iBAAiB,oBAAoB,mBAAK,eAAc;AAG7D,QAAI,KAAK,aAAa,MAAM,KAAK,KAAK,kBAAkB,aAAa;AACpE,YAAM,YAAY,KAAK,QAAQ,SAAS,IAAI,mBAAK,mBAAkB;AACnE,YAAM,YAAY,KAAK,QAAQ,mBAAmB,IAAI,mBAAK,mBAAkB;AAAA,IAChF;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsEC,gBAAgB;AACf,WAAO,KAAK,iBAAiB,YAAY;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASC,iBAAiB,UAAU,MAAM,SAAS,GAAG;;AAC5C,QAAI,KAAK,aAAa,UAAU,GAAG;AAClC,WAAK,QAAQ,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,QAAS;AACpD,WAAK,MAAM,QAAQ,KAAK,MAAM,IAAI,OAAK,CAAC,EAAE,KAAK,GAAG,EAAE,KAAM;AAE1D,UAAI,KAAK,eAAe,WAAW,GAAG;AACrC,aAAK,MAAM,YAAY,KAAK;AAAA,MAChC,OAAU;AACN,YAAI,YAAY,KAAM,OAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,UAAU,EAAE,QAAQ,YAAU,KAAK,MAAM,YAAY,KAAK,QAAQ,MAAM,CAAC,CAAC;AACnI,YAAI,KAAK,qBAAqB,eAAe,CAAC,KAAK,cAAc,SAAS,CAAC,KAAK,YAAY;AAC3F,eAAK,QAAS;AAAA,QACnB;AAAA,MACA;AAAA,IACA,OAAS;AACN,YAAM,SAAS,mCAAS,GAAG;AAE3B,WAAK,UAAQ,wCAAS,IAAI,CAAC,OAAO,GAAG,WAAxB,mBAAgC,GAAG,OAAM;AACtD,WAAK,MAAM,QAAQ,KAAK,MAAM,CAAC,KAAK;AACpC,WAAK,aAAa,UAAQ,mBAAQ,CAAC,MAAT,mBAAY,gBAAZ,mBAAyB,WAAU;AAE7D,WAAK,UAAU,YAAY;AAC3B,WAAK,QAAQ,YAAY;AAEzB,UAAI,UAAU,kBAAkB,aAAa;AAC5C,YAAI,kBAAkB,iCAAQ,cAAc;AAC5C,YAAI,iBAAiB;AACpB,qBAAW,MAAM;AAChB,iBAAK,UAAU,OAAO,gBAAgB,UAAU,IAAI,CAAC;AAAA,UAC3D,GAAO,CAAC;AAAA,QACR;AAEI,YAAI,gBAAgB,iCAAQ,cAAc;AAE1C,YAAI,iBAAiB,yBAAyB,eAAe,cAAc,YAAY,kBAAkB,cAAc,YAAY,cAAc;AAChJ,qBAAW,MAAM;AAChB,iBAAK,QAAQ,OAAO,cAAc,UAAU,IAAI,CAAC;AAAA,UACvD,GAAO,CAAC;AAAA,QACR;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,WAAW,UAAU,OAAO;AAC3B,QAAI,KAAK,gBAAgB,UAAU,CAAC,KAAK,YAAY;AACpD,WAAK,YAAY;AAAA,IACpB;AAEE,QAAI,KAAK,OAAO;AACf,WAAK,MAAM,YAAY;AAAA,IAC1B;AAEE,QAAI,KAAK,gBAAgB,SAAS,GAAG;AACpC,WAAK,iBAAiB,KAAK,iBAAiB,KAAK,gBAAgB,MAAM;AAAA,IAC1E,OAAS;AACN,WAAK,iBAAiB,KAAK,eAAe;AAAA,IAC7C;AAEE,QAAI,QAAS;AACb,UAAM,oBAAoB,MAAM,mBAAmB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,UAAU;AAET,QAAI,KAAK,aAAa,KAAK,MAAM,WAAW,CAAC,KAAK,YAAY;AAC7D,WAAK,UAAU,OAAQ;AACvB,WAAK,YAAY;AACjB;AAAA,IACH;AAGE,QAAI,CAAC,KAAK,WAAW;AACpB,WAAK,YAAY,SAAS,cAAc,MAAM;AAC9C,WAAK,UAAU,UAAU,IAAI,SAAS;AAEtC,WAAK,MAAM,YAAY,KAAK,SAAS;AAAA,IACxC;AAGE,SAAK,UAAU,YAAY,IAAI,KAAK,MAAM,SAAS,CAAC,KAAK,UAAU;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,QAAQ,QAAQ;AACf,QAAI,OAAO,SAAS,cAAc,UAAU;AAC5C,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,iBAAiB,mBAAmB,KAAK,UAAU;AACxD,SAAK,SAAS;AAEd,QAAI,QAAQ,SAAS,cAAc,WAAW;AAC9C,UAAM,YAAY,sBAAK,wCAAL,WAAuB,OAAO;AAEhD,SAAK,YAAY,KAAK;AAEtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBC,WAAW,MAAM,MAAM,EAAE,OAAO,SAAS,MAAM,UAAU;AACxD,QAAI,SAAS,SAAS,cAAc,YAAY;AAEhD,QAAI,KAAK,IAAI,KAAK,MAAM,MAAM;AAC7B,cAAQ,KAAK,YAAY,KAAK,UAAU,IAAI,CAAC,+BAA+B,IAAI,KAAK,EAAE;AAAA,IAC1F;AAEE,QAAI,KAAK,IAAI,IAAI,MAAM,MAAM;AAC5B,cAAQ,KAAK,YAAY,KAAK,UAAU,IAAI,CAAC,+BAA+B,IAAI,IAAI,EAAE;AAAA,IACzF;AAEE,WAAO,aAAa,SAAS,KAAK,IAAI,KAAK,KAAK,EAAE;AAClD,WAAO,YAAY,KAAK,IAAI,IAAI,KAAK;AAErC,uBAAK,eAAc,KAAK,EAAE,CAAC,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG;AACpF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,iBAAiB,MAAM;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWC,UAAU,YAAY,SAAS,OAAO,MAAM,EAAE,OAAO,SAAS,MAAM,UAAU;AAC7E,QAAI,CAAC,WAAY;AAEjB,UAAM,iBAAiB,KAAK,cAAc,aAAa;AACvD,QAAI,gBAAgB;AACnB,qBAAe,UAAU,YAAY,QAAQ,GAAG;AAChD;AAAA,IACH;AACE,QAAI,SAAS,KAAK,WAAW,YAAY,GAAG;AAC5C,SAAK,YAAY,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYC,WAAW,aAAa,SAAS,OAAO,MAAM,EAAE,OAAO,SAAS,MAAM,UAAU;AAC/E,QAAI,CAAC,MAAM,QAAQ,WAAW,GAAG;AAChC,WAAK,UAAU,aAAa,QAAQ,GAAG;AAAA,IAC1C,OAAS;AACN,kBAAY,QAAQ,CAAC,SAAS;AAC7B,aAAK,UAAU,MAAM,QAAQ,GAAG;AAAA,MACpC,CAAI;AAAA,IACJ;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,aAAa,OAAO,SAAS,OAAO;AACnC,QAAI,CAAC,MAAO;AAEZ,QAAI,SAAS,KAAK,cAAc,qBAAqB,KAAK,IAAI;AAE9D,QAAI,QAAQ;AACX,WAAK,qBAAqB,QAAQ,KAAK,aAAa,UAAU,CAAC;AAAA,IAClE;AAEE,QAAI,KAAK,gBAAgB,KAAK,gBAAgB,MAAO,MAAK,WAAW,MAAM;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASC,cAAc,QAAQ,SAAS,OAAO;AACrC,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3B,WAAK,aAAa,QAAQ,MAAM;AAAA,IACnC,OAAS;AACN,aAAO,QAAQ,CAAC,UAAU;AACzB,aAAK,aAAa,OAAO,MAAM;AAAA,MACnC,CAAI;AAAA,IACJ;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,gBAAgB,QAAQ;;AACvB,QAAI,QAAO,UAAK,cAAc,UAAU,MAA7B,mBAAgC,QAAQ,cAAc;AACjE,QAAI,CAAC,MAAM;AACV;AAAA,IACH;AAEE,QAAI,YAAY,KAAK,UAAU,IAAI;AACnC,WAAO,OAAO,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQC,kBAAkB;AACjB,SAAK,kBAAkB,CAAE;AAEzB,SAAK,cAAa,EAAG,QAAQ,CAAC,WAAW;AACxC,aAAO,WAAW;AAAA,IACrB,CAAG;AACD,SAAK,WAAY;AAEjB,SAAK,SAAU;AACf,SAAK,oBAAqB;AAE1B,QAAI,KAAK,aAAa,SAAS,GAAG;AACjC,WAAK,mBAAoB;AAAA,IAC5B;AAAA,EACA;AAAA,EAoDC,uBAAuB;AACtB,aAAS,oBAAoB,aAAa,mBAAK,0BAAyB,IAAI;AAAA,EAC9E;AACA;AAzmCC;AAEA;AASA;AAsCA;AA7HM;AAAA;AAAA;AAAA;AAAA;AAAA;AAqoCN,sBAAiB,SAAC,MAAM;;AACvB,QAAM,WAAW;AACjB,QAAM,YAAY;AAElB,QAAM,UAAQ,UAAK,gBAAgB,KAAK,CAAC,WAAW,OAAO,QAAQ,MAAM,IAAI,MAA/D,mBAAmE,eAAc;AAE/F,SAAO,KAAK,iBAAiB,KAAK;AACpC;AAAA;AAAA;AAAA;AAAA;AAMC,wBAAmB,WAAG;AACrB,SAAO,MAAM,KAAK,KAAK,iBAAiB,sBAAsB,CAAC;AACjE;AAUC;ACvqCD,OAAO,OAAO,cAAc,MAAM;"}
|
|
1
|
+
{"version":3,"file":"wje-select.js","sources":["../packages/wje-select/select.element.js","../packages/wje-select/select.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport Button from '../wje-button/button.js';\nimport Popup from '../wje-popup/popup.js';\nimport Icon from '../wje-icon/icon.js';\nimport Label from '../wje-label/label.js';\nimport Chip from '../wje-chip/chip.js';\nimport Input from '../wje-input/input.js';\nimport Option from '../wje-option/option.js';\nimport Options from '../wje-options/options.js';\nimport Checkbox from '../wje-checkbox/checkbox.js';\nimport styles from './styles/styles.css?inline';\n\nexport class Select extends FormAssociatedElement {\n\t#addedOptions = [];\n\t#htmlOptions = [];\n\n\tconstructor() {\n\t\tsuper();\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the counter element, initially null.\n\t\t * @private\n\t\t */\n\t\tthis.counterEl = null;\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @description Tracks whether the select element was previously opened, initially false.\n\t\t * @private\n\t\t * @default {boolean} false\n\t\t */\n\t\tthis._wasOppened = false;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the native select element, initially null.\n\t\t */\n\t\tthis.native = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the popup element, initially null.\n\t\t */\n\t\tthis.popup = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the label element, initially null.\n\t\t */\n\t\tthis.labelElement = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot start element, initially null.\n\t\t */\n\t\tthis.slotStart = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot end element, initially null.\n\t\t */\n\t\tthis.slotEnd = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the input element, initially null.\n\t\t */\n\t\tthis.input = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the chips element, initially null.\n\t\t */\n\t\tthis.chips = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the clear button element, initially null.\n\t\t */\n\t\tthis.clear = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the list element, initially null.\n\t\t */\n\t\tthis.list = null;\n\n\t\tthis._value = [];\n\t\tthis._selectedOptions = [];\n\t}\n\n\t/**\n\t * An object representing component dependencies with their respective classes.\n\t * Each property in the object maps a custom component name (as a string key)\n\t * to its corresponding class or constructor.\n\t * @typedef {{[key: string]: Function}} Dependencies\n\t * @property {Function} 'wje-button' Represents the Button component class.\n\t * @property {Function} 'wje-popup' Represents the Popup component class.\n\t * @property {Function} 'wje-icon' Represents the Icon component class.\n\t * @property {Function} 'wje-label' Represents the Label component class.\n\t * @property {Function} 'wje-chip' Represents the Chip component class.\n\t * @property {Function} 'wje-input' Represents the Input component class.\n\t * @property {Function} 'wje-option' Represents the Option component class.\n\t * @property {Function} 'wje-checkbox' Represents the Checkbox component class.\n\t */\n\tdependencies = {\n\t\t'wje-button': Button,\n\t\t'wje-popup': Popup,\n\t\t'wje-icon': Icon,\n\t\t'wje-label': Label,\n\t\t'wje-chip': Chip,\n\t\t'wje-input': Input,\n\t\t'wje-option': Option,\n\t\t'wje-options': Options,\n\t\t'wje-checkbox': Checkbox,\n\t};\n\n\t/**\n\t * Sets the value for the form field. Converts the input value into a FormData object\n\t * if it is not already an array, splitting by spaces if necessary, and sets the\n\t * internal form value as well as the selected values.\n\t * @param {string|Array} value The value to be set. Can be a string (which will be\n\t * split into an array by spaces) or an array of values.\n\t */\n\tset value(value) {\n\t\tconst originalValue = value;\n\t\tconst formData = new FormData();\n\n\t\tif (value) {\n\t\t\tlet data = value;\n\t\t\tlet dataString = value;\n\n\t\t\tif (!Array.isArray(data)) {\n\t\t\t\tdata = data.split(' ');\n\t\t\t} else {\n\t\t\t\tdataString = data.join(' ');\n\t\t\t}\n\n\t\t\tdata.forEach(v => {\n\t\t\t\tformData.append(this.name, v)\n\t\t\t});\n\n\t\t\tvalue = formData;\n\n\t\t\tthis._value = data;\n\n\t\t\tthis.setAttribute('value', dataString);\n\t\t} else {\n\t\t\tformData.delete(this.name);\n\t\t\tvalue = formData;\n\t\t\tthis._value = [];\n\t\t\tthis.removeAttribute('value');\n\t\t}\n\t\tthis.internals.setFormValue(value);\n\t}\n\n\t/**\n\t * Retrieves the current value.\n\t * @returns {any} The value of the `_value` property.\n\t */\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Sets the maximum number of options allowed.\n\t * @param { number | object} value The value to set as the maximum number of options.\n\t * If null, the 'max-options' attribute will be removed.\n\t */\n\tset maxOptions(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-options', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-options');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum number of options allowed.\n\t * Parses the value of the 'max-options' attribute from the element and converts it to a number.\n\t * If the attribute is not present or cannot be converted to a valid number, defaults to 1.\n\t * @returns {number} The maximum number of options, or 0 if the attribute is not set or invalid.\n\t */\n\tget maxOptions() {\n\t\treturn +this.getAttribute('max-options') || 1;\n\t}\n\n\t/**\n\t * @summary Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * @summary Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets the trigger value.\n\t * @param {string} value The trigger value to set.\n\t */\n\tset trigger(value) {\n\t\tthis.setAttribute('trigger', value);\n\t}\n\n\t/**\n\t * Returns the trigger value.\n\t * @returns {string} The trigger value.\n\t */\n\tget trigger() {\n\t\treturn this.getAttribute('trigger') || 'click';\n\t}\n\n\t/**\n\t * Sets or removes the disabled state for the associated elements.\n\t * @param {boolean} value A boolean indicating whether the elements should be disabled.\n\t * If true, the disabled attribute is added to the elements. If false, the disabled attribute is removed.\n\t */\n\tset disabled(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('disabled', '');\n\n\t\t\tthis.input?.setAttribute('disabled', '');\n\t\t\tthis.displayInput?.setAttribute('disabled', '');\n\n\t\t\tthis.popup?.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('disabled');\n\n\t\t\tthis.input?.removeAttribute('disabled');\n\t\t\tthis.displayInput?.removeAttribute('disabled');\n\n\t\t\tthis.popup?.removeAttribute('disabled');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the current state of the 'disabled' attribute.\n\t * @returns {boolean} Returns true if the 'disabled' attribute is present, otherwise false.\n\t */\n\tget disabled() {\n\t\treturn this.hasAttribute('disabled');\n\t}\n\n\t/**\n\t * Sets the readonly state of the element. When set to true,\n\t * the element and its associated inputs are marked as readonly or disabled.\n\t * When set to false, the readonly and disabled attributes are removed,\n\t * allowing user interaction.\n\t * @param {boolean} value A boolean value indicating whether to set the\n\t * element and its associated inputs to readonly (true) or not (false).\n\t */\n\tset readonly(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('readonly', '');\n\n\t\t\t// inputs nemusia existovať ešte pred draw()\n\t\t\tthis.input?.setAttribute('readonly', '');\n\t\t\tthis.displayInput?.setAttribute('readonly', '');\n\n\t\t\t// popup môže existovať, ak to toggle-uješ po renderi\n\t\t\tthis.popup?.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('readonly');\n\n\t\t\tthis.input?.removeAttribute('readonly');\n\t\t\tthis.displayInput?.removeAttribute('readonly');\n\n\t\t\tthis.popup?.removeAttribute('disabled');\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the 'readonly' attribute is present on the element.\n\t * @returns {boolean} Returns true if the 'readonly' attribute is set, otherwise false.\n\t */\n\tget readonly() {\n\t\treturn this.hasAttribute('readonly');\n\t}\n\n\t/**\n\t * Sets the maximum height value for the element.\n\t * If a value is provided, it sets the 'max-height' attribute on the element.\n\t * If no value is provided, it removes the 'max-height' attribute from the element.\n\t * @param {string|null} value The maximum height to be set. If null or undefined, the attribute is removed.\n\t */\n\tset maxHeight(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-height', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-height');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum height value, which is determined by the 'max-height' attribute.\n\t * If the attribute is not set, a default value of '200px' is returned.\n\t * @returns {string} The maximum height value as a string.\n\t */\n\tget maxHeight() {\n\t\treturn this.getAttribute('max-height') || 'auto';\n\t}\n\n\t/**\n\t * Sets the offset attribute for the element.\n\t * @param {string} value The value to assign to the offset attribute.\n\t */\n\tset offset(value) {\n\t\tthis.setAttribute('offset', value);\n\t}\n\n\t/**\n\t * Gets the value of the offset attribute of the current element.\n\t * If the offset attribute is not present, returns a default value of '0'.\n\t * @returns {string} The value of the offset attribute or the default value '0'.\n\t */\n\tget offset() {\n\t\treturn this.getAttribute('offset') || '5';\n\t}\n\n\t/**\n\t * Sets the selected options for the object.\n\t * @param {Array|object} value The new value for the selected options. It can be an array or object containing the selected options.\n\t */\n\tset selectedOptions(value) {\n\t\tthis._selectedOptions = value;\n\t}\n\n\t/**\n\t * Retrieves the selected options.\n\t * @returns {Array} An array containing the currently selected options. If no options are selected, an empty array is returned.\n\t */\n\tget selectedOptions() {\n\t\treturn this._selectedOptions || [];\n\t}\n\n\t/**\n\t * Sets the `lazy` attribute on the element. If the provided value is truthy, the `lazy` attribute is added. If the value is falsy, the `lazy` attribute is removed.\n\t * @param {boolean} value A boolean value indicating whether to add or remove the `lazy` attribute. If `true`, the attribute is added; if `false`, it is removed.\n\t */\n\tset lazy(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('lazy', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('lazy');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the 'lazy' property.\n\t * @returns {boolean} Returns true if the 'lazy' attribute is present on the element, otherwise false.\n\t */\n\tget lazy() {\n\t\treturn this.hasAttribute('lazy');\n\t}\n\n\t/**\n\t * Sets or removes the 'no-size' attribute on an element.\n\t * @param {boolean} value A boolean indicating whether to add or remove the 'no-size' attribute. If true, the attribute is added; if false, the attribute is removed.\n\t */\n\tset noSize(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('no-size', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('no-size');\n\t\t}\n\t}\n\n\t/**\n\t * Gets the value of the 'no-size' attribute for the element.\n\t * @returns {boolean} True if the 'no-size' attribute is present, otherwise false.\n\t */\n\tget noSize() {\n\t\treturn this.hasAttribute('no-size');\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Retrieves the complete list of options available for the component.\n\t * The options are determined by combining elements from various sources, including loaded options, added options, and HTML-sourced options.\n\t * If a `wje-options` element is present within the component, its loaded options are included in the merged list.\n\t * In the absence of a `wje-options` element, duplicates among the added and HTML options are removed, retaining their order.\n\t * @returns {Array<object>} An array containing all the available options, combining the loaded, added, and HTML-based options, with duplicates removed where applicable.\n\t */\n\tget options() {\n\t\tif (this.querySelector('wje-options')) {\n\t\t\tconst allOptions = [...this.querySelector('wje-options').loadedOptions, ...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn allOptions\n\t\t} else {\n\t\t\tconst allOptions = [...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn Array.from(\n\t\t\t\tnew Map(allOptions.reverse().map(obj => [obj.value, obj])).values()\n\t\t\t).reverse();\n\t\t}\n\t}\n\n\tclassName = 'Select';\n\n\t/**\n\t * Returns the CSS styles for the component.\n\t * @static\n\t * @returns {CSSStyleSheet}\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\n\n\t/**\n\t * Returns the list of attributes to observe for changes.\n\t * @static\n\t * @returns {Array<string>}\n\t */\n\tstatic get observedAttributes() {\n\t\treturn ['active', 'disabled', 'readonly'];\n\t}\n\n\t/**\n\t * Sets up the attributes for the component.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t}\n\n\tbeforeDraw() {\n\t\tif (this.hasAttribute('value')) {\n\t\t\t// If a value attribute is explicitly provided, respect it.\n\t\t\tthis.value = this.getAttribute('value');\n\t\t} else {\n\t\t\t// No explicit value – derive initial value from currently selected options.\n\t\t\tconst selectedOptions = this.#getSelectedOptions();\n\n\t\t\tif (selectedOptions.length > 0) {\n\t\t\t\tconst values = selectedOptions.map((opt) => opt.value);\n\t\t\t\tthis.value = this.hasAttribute('multiple') ? values : values[0];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Draws the component for the select.\n\t * @returns {DocumentFragment}\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tthis.classList.add('wje-placement', this.placement ? 'wje-' + this.placement : 'wje-start');\n\n\t\t// zakladny obalovac\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-select', this.variant || 'default');\n\n\t\t// wrapper pre label a inputWrapper\n\t\tlet wrapper = document.createElement('div');\n\t\twrapper.classList.add('wrapper');\n\t\twrapper.setAttribute('slot', 'anchor');\n\n\t\t// label\n\t\tlet label = document.createElement('label');\n\t\tlabel.setAttribute('part', 'label');\n\t\tlabel.innerText = this.label || '';\n\n\t\t// obalovac pre input\n\t\tlet inputWrapper = document.createElement('div');\n\t\tinputWrapper.setAttribute('part', 'input-wrapper');\n\t\tinputWrapper.classList.add('input-wrapper');\n\n\t\tlet slotStart = document.createElement('div');\n\t\tslotStart.classList.add('slot-start');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.setAttribute('type', 'text');\n\t\tinput.value = this.value.join(' ').trim();\n\t\tinput.classList.add('input-hidden');\n\n\t\tlet display = document.createElement('input');\n\t\tdisplay.setAttribute('type', 'text');\n\t\tdisplay.setAttribute('part', 'input');\n\t\tdisplay.setAttribute('autocomplete', 'off');\n\t\tdisplay.setAttribute('readonly', '');\n\t\tdisplay.setAttribute('placeholder', this.placeholder || '');\n\n\t\tif (this.required) {\n\t\t\tinput.setAttribute('required', '');\n\t\t\tdisplay.setAttribute('required', '');\n\t\t}\n\n\t\t// Apply initial disabled/readonly state during first render\n\t\tif (this.disabled) {\n\t\t\tinput.setAttribute('disabled', '');\n\t\t\tdisplay.setAttribute('disabled', '');\n\t\t}\n\n\t\tif (this.readonly) {\n\t\t\tinput.setAttribute('readonly', '');\n\t\t\tdisplay.setAttribute('readonly', '');\n\t\t}\n\n\t\tlet slotEnd = document.createElement('div');\n\t\tslotEnd.classList.add('slot-end');\n\n\t\tlet arrow = document.createElement('wje-icon');\n\t\tarrow.setAttribute('name', 'chevron-down');\n\t\tarrow.setAttribute('slot', 'arrow');\n\n\t\tlet chips = document.createElement('div');\n\t\tchips.classList.add('chips');\n\t\tchips.innerText = this.placeholder || '';\n\n\t\t// obalovac pre option a find\n\t\tlet optionsWrapper = document.createElement('div');\n\t\toptionsWrapper.setAttribute('part', 'options-wrapper');\n\t\toptionsWrapper.classList.add('options-wrapper');\n\t\toptionsWrapper.style.setProperty('height', this.maxHeight);\n\n\t\tlet list = document.createElement('div');\n\t\tlist.classList.add('list');\n\n\t\tlet slot = document.createElement('slot');\n\n\t\tlet clear = document.createElement('wje-button');\n\t\tclear.setAttribute('fill', 'link');\n\t\tclear.setAttribute('part', 'clear');\n\t\tclear.setAttribute('stop-propagation', '');\n\n\t\tlet clearIcon = document.createElement('wje-icon');\n\t\tclearIcon.setAttribute('name', 'x');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\t// vytvorime popup\n\t\tlet popup = document.createElement('wje-popup');\n\t\tpopup.setAttribute('placement', 'bottom-start');\n\t\tif (!this.noSize)\n\t\t\tpopup.setAttribute('size', '');\n\t\tpopup.setAttribute('part', 'popup');\n\t\tpopup.setAttribute('offset', this.offset);\n\n\t\tif ((this.lazy || this.querySelector('wje-options')) && !this._wasOppened) {\n\t\t\tpopup.setAttribute('loader', '');\n\t\t} else {\n\t\t\tpopup.removeAttribute('loader');\n\t\t}\n\n\t\tif (this.disabled) {\n\t\t\tpopup.setAttribute('disabled', '');\n\t\t} else {\n\t\t\tpopup.removeAttribute('disabled');\n\t\t}\n\n\t\tif (this.variant === 'standard') {\n\t\t\tif (this.hasAttribute('label')) native.appendChild(label);\n\t\t} else {\n\t\t\twrapper.appendChild(label);\n\t\t}\n\n\t\tinputWrapper.append(slotStart);\n\t\tinputWrapper.append(display);\n\t\tinputWrapper.append(input);\n\n\t\tclear.append(clearIcon);\n\n\t\tif (this.hasAttribute('multiple')) inputWrapper.append(chips);\n\n\t\tif (this.hasAttribute('clearable')) inputWrapper.append(clear);\n\n\t\tinputWrapper.appendChild(slotEnd);\n\t\tinputWrapper.appendChild(arrow);\n\n\t\tlist.appendChild(slot);\n\n\t\tif (this.hasAttribute('find')) {\n\t\t\tlet find = document.createElement('wje-input');\n\t\t\tfind.setAttribute('variant', 'standard');\n\t\t\tfind.setAttribute('placeholder', 'Hľadať');\n\t\t\tfind.setAttribute('part', 'find');\n\t\t\tfind.clearable = true;\n\t\t\tfind.classList.add('find');\n\n\t\t\toptionsWrapper.appendChild(find);\n\n\t\t\tthis.findEl = find;\n\t\t}\n\n\t\tlet slotFooter = document.createElement('slot');\n\t\tslotFooter.setAttribute('name', 'footer');\n\n\t\t// APPEND\n\t\toptionsWrapper.append(list);\n\t\toptionsWrapper.append(slotFooter);\n\n\t\twrapper.append(inputWrapper);\n\n\t\tpopup.append(wrapper);\n\t\tpopup.append(optionsWrapper);\n\n\t\tif (this.trigger === 'click') popup.setAttribute('manual', '');\n\n\t\tthis.append(error);\n\n\t\tnative.append(popup);\n\t\tnative.append(errorSlot);\n\n\t\tfragment.appendChild(native);\n\n\t\tthis.native = native;\n\t\tthis.popup = popup;\n\t\tthis.labelElement = label;\n\t\tthis.slotStart = slotStart;\n\t\tthis.slotEnd = slotEnd;\n\t\tthis.input = input;\n\t\tthis.displayInput = display;\n\t\tthis.chips = chips;\n\t\tthis.clear = clear;\n\t\tthis.list = list;\n\t\tthis.slotFooter = slotFooter;\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Executes post-render logic for the custom element.\n\t * This includes validation, event listener registration, managing custom attributes, and\n\t * handling options initialization for the component.\n\t * @returns {void} This method does not return any value.\n\t */\n\tafterDraw() {\n\t\tdocument.addEventListener('mousedown', this.#onMenuItemClickCapture, true);\n\n\t\tthis.validate();\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\n\t\tthis.getAllOptions()?.forEach((option) => {\n\t\t\tthis.optionCheckSlot(option);\n\t\t});\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\tthis.selectOptions(this.value, true);\n\n\t\tif (this.lazy) {\n\t\t\tevent.addListener(this.popup, 'wje-popup:show', null, (e) => {\n\t\t\t\tif (this._wasOppened) return;\n\t\t\t\tthis._wasOppened = true;\n\n\t\t\t\tconst optionsElement = this.querySelector('wje-options');\n\t\t\t\toptionsElement.setAttribute('lazy', '');\n\t\t\t\toptionsElement.setAttribute('attached', '');\n\t\t\t});\n\t\t}\n\n\t\tevent.addListener(this.popup, 'wje-popup:aftershow', null, () => {\n\t\t\tconst assignedElements = this.slotFooter.assignedElements();\n\n\t\t\tif (assignedElements.length > 0) {\n\t\t\t\tconst el = assignedElements[0];\n\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\tlet totalHeight = 0;\n\n\t\t\t\tif(this.hasAttribute('find')) {\n\t\t\t\t\tlet style = getComputedStyle(this.findEl);\n\n\t\t\t\t\tlet height = this.findEl.offsetHeight;\n\t\t\t\t\tlet marginTop = parseFloat(style.marginTop);\n\t\t\t\t\tlet marginBottom = parseFloat(style.marginBottom);\n\n\t\t\t\t\ttotalHeight = height + marginTop + marginBottom;\n\t\t\t\t}\n\n\t\t\t\tlet subtractHeight = rect.height + totalHeight;\n\n\t\t\t\tthis.list.style.height = `calc(100% - ${subtractHeight}px)`;\n\t\t\t}\n\t\t});\n\n\t\tthis.#htmlOptions = Array.from(this.querySelectorAll(':scope > wje-option')).map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: option.textContent.trim(),\n\t\t\t};\n\t\t})\n\n\t\tthis.input.addEventListener('focus', (e) => {\n\t\t\tthis.labelElement?.classList.add('fade');\n\t\t\tthis.native.classList.add('focused');\n\t\t});\n\n\t\tthis.input.addEventListener('blur', (e) => {\n\t\t\tthis.native.classList.remove('focused');\n\t\t\tif (!e.target.value) this.labelElement?.classList.remove('fade');\n\t\t});\n\n\t\tthis.input.addEventListener('input', (e) => {\n\t\t\tthis.propagateValidation();\n\t\t});\n\n\t\tthis.addEventListener('wje-option:change', this.optionChange);\n\n\t\tthis.addEventListener('invalid', (e) => {\n\t\t\tthis.invalid = true;\n\t\t\tthis.pristine = false;\n\n\t\t\tthis.showInvalidMessage();\n\n\t\t\tif (this.customErrorDisplay) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis.clear?.addEventListener('wje-button:click', (e) => {\n\t\t\tif (this.readonly || this.disabled) return;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.clearSelections();\n\t\t});\n\n\t\tthis.list.addEventListener('wje-options:load', (e) => {\n\t\t\tthis.selectedOptions.forEach((option) => {\n\t\t\t\tthis.getAllOptions().forEach((el) => {\n\t\t\t\t\tif (el.value === option.value) {\n\t\t\t\t\t\tel.selected = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Ensure values from the value attribute are (re)selected after lazy-loaded pages\n\t\t\tconst attrValue = this.getAttribute('value')?.split(' ') || [];\n\n\t\t\tattrValue.forEach(val => {\n\t\t\t\tconst existingOption = Array.from(this.getAllOptions()).find(el => el.value === val);\n\t\t\t\tif (existingOption) {\n\t\t\t\t\texistingOption.selected = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\t\tthis.selections(true);\n\n\t\t\tthis.list.scrollTo(0, 0);\n\t\t\tevent.dispatchCustomEvent(this.popup, 'wje-popup:content-ready'); // Notify that the content is ready\n\t\t});\n\n\t\t// skontrolujeme ci ma select atribut find\n\t\tif (this.hasAttribute('find') && this.findEl instanceof HTMLElement) {\n\t\t\tevent.addListener(this.findEl, 'keyup', '', this.#applySearchFilter);\n\t\t\tevent.addListener(this.findEl, 'wje-input:clear', '', this.#applySearchFilter);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the change event for an option element within a select-like component.\n\t * This method processes user interactions with options and updates the state of the component,\n\t * including selection management, validation, and UI updates. Behavior differs based on\n\t * whether the component supports multiple selections.\n\t * Key functionality:\n\t * - Prevents the default behavior, event propagation, and immediate propagation of the event.\n\t * - Retrieves all options within the component.\n\t * - If the component doesn't support multiple selection:\n\t * - Marks only the clicked option as selected and deselects others.\n\t * - Hides the option popup.\n\t * - If the component supports multiple selection:\n\t * - Processes the clicked option without deselecting others.\n\t * - Updates the selected options and triggers validation.\n\t * - Marks the form state as non-pristine.\n\t * - Propagates the validation state to other relevant parts of the component or system.\n\t * @param {Event} e The event object representing the option change interaction.\n\t */\n\toptionChange = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\te.stopImmediatePropagation();\n\n\t\tif (this.readonly || this.disabled) return;\n\n\t\tlet allOptions = this.getAllOptions();\n\n\t\tif (!this.hasAttribute('multiple')) {\n\t\t\tallOptions.forEach((option) => {\n\t\t\t\tif (option.value === e.target.value) {\n\t\t\t\t\tthis.processClickedOption(option);\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.popup.hide(false);\n\t\t} else {\n\t\t\tthis.processClickedOption(e.target, true);\n\t\t}\n\n\t\tthis.selections();\n\n\t\tthis.validate(this.selectedOptions);\n\n\t\tthis.pristine = false;\n\t\tthis.propagateValidation();\n\t}\n\n\t/**\n\t * Handles the logic for processing the selection state of a clicked option element.\n\t * @function processClickedOption\n\t * @param {Element} option The option element that is clicked.\n\t * @param {boolean} [multiple] A Boolean indicating whether multiple options can be selected. Defaults to false.\n\t * Changes the selected state of the passed option and updates the selected options list.\n\t * Checks if the option already has a \"selected\" attribute, toggles its state,\n\t * and updates the internal selected options.\n\t */\n\tprocessClickedOption = (option, multiple = false) => {\n\t\tconst isSelected = option.hasAttribute('selected');\n\t\toption.selected = !isSelected;\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t}\n\n\t/**\n\t * Returns all the options as HTML.\n\t * @returns {NodeList} The options as HTML.\n\t */\n\tgetAllOptions() {\n\t\treturn this.querySelectorAll('wje-option');\n\t}\n\n\t/**\n\t * Handles changes in the selection for a component, updating internal values, input fields,\n\t * and visual presentation (like chips or slots) as per the given selection options.\n\t * @param {Array|null} options The collection of selected option elements. If null, no options are selected.\n\t * @param {number} length The total number of selected options.\n\t * @returns {void}\n\t */\n\tselectionChanged(options = null, length = 0) {\n\t\tif (this.hasAttribute('multiple')) {\n\t\t\tthis.value = options.map((el) => el.value).reverse();\n\t\t\tthis.input.value = this.value.map(a => a).join(\" \").trim();\n\n\t\t\tif (this.placeholder && length === 0) {\n\t\t\t\tthis.chips.innerHTML = this.placeholder;\n\t\t\t} else {\n\t\t\t\tif (options !== null) Array.from(options).slice(0, +this.maxOptions).forEach(option => this.chips.appendChild(this.getChip(option)));\n\t\t\t\tif (this.counterEl instanceof HTMLElement || !this.maxOptions || length > +this.maxOptions) {\n\t\t\t\t\tthis.counter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.getAllOptions().forEach((o) => this.#syncOptionCheckbox(o));\n\t\t} else {\n\t\t\tconst option = options?.at(0);\n\n\t\t\tthis.value = options?.map((el) => el.value)?.at(0) || '';\n\t\t\tthis.input.value = this.value[0] || '';\n\t\t\tthis.displayInput.value = options[0]?.textContent?.trim() || '';\n\n\t\t\tthis.slotStart.innerHTML = '';\n\t\t\tthis.slotEnd.innerHTML = '';\n\n\t\t\tif (option && option instanceof HTMLElement) {\n\t\t\t\tlet optionSlotStart = option?.querySelector('wje-option > [slot=start]');\n\t\t\t\tif (optionSlotStart) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.slotStart.append(optionSlotStart.cloneNode(true));\n\t\t\t\t\t},0)\n\t\t\t\t}\n\n\t\t\t\tlet optionSlotEnd = option?.querySelector('wje-option > [slot=end]');\n\n\t\t\t\tif (optionSlotEnd && optionSlotEnd instanceof HTMLElement && optionSlotEnd.tagName !== 'WJE-DROPDOWN' && optionSlotEnd.tagName !== 'WJE-BUTTON') {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.slotEnd.append(optionSlotEnd.cloneNode(true));\n\t\t\t\t\t},0)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles the logic for updating selections based on the current selected options,\n\t * updating chips content, and dispatching change events if necessary.\n\t * @param {boolean} [silence] If true, suppresses the dispatch of a custom change event.\n\t * @returns {void} This method does not return a value.\n\t */\n\tselections(silence = false) {\n\t\tif (this.selectedOptions.length >= +this.maxOptions) {\n\t\t\tthis.counterEl = null;\n\t\t}\n\n\t\tif (this.chips) {\n\t\t\tthis.chips.innerHTML = '';\n\t\t}\n\n\t\tif (this.selectedOptions.length > 0) {\n\t\t\tthis.selectionChanged(this.selectedOptions, this.selectedOptions.length);\n\t\t} else {\n\t\t\tthis.selectionChanged(this.selectedOptions);\n\t\t}\n\n\t\tif (silence) return;\n\t\tevent.dispatchCustomEvent(this, 'wje-select:change');\n\t}\n\n\t/**\n\t * Updates the counter element to reflect the current state of selected values relative to the maximum allowed options.\n\t * If the maximum options are selected, the counter element is removed. If it does not already exist and needs to be displayed, it is created.\n\t * @returns {void} Does not return a value.\n\t */\n\tcounter() {\n\t\t// zmazanie counter (span)\n\t\tif (this.counterEl && this.value.length === +this.maxOptions) {\n\t\t\tthis.counterEl.remove();\n\t\t\tthis.counterEl = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// ak counter nie je, tak ho vytvorime\n\t\tif (!this.counterEl) {\n\t\t\tthis.counterEl = document.createElement('span');\n\t\t\tthis.counterEl.classList.add('counter');\n\n\t\t\tthis.chips.appendChild(this.counterEl);\n\t\t}\n\n\t\t// nastavime hodnotu counter\n\t\tthis.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;\n\t}\n\n\t/**\n\t * Creates and returns a chip element with specified properties and a label.\n\t * @param {object} option The configuration object for the chip. Typically includes properties such as value and textContent to set up the chip's label and data.\n\t * @returns {HTMLElement} The newly created chip element with a label and default properties.\n\t */\n\tgetChip(option) {\n\t\tlet chip = document.createElement('wje-chip');\n\t\tchip.size = 'small';\n\t\tchip.removable = !this.readonly;\n\t\tchip.round = true;\n\t\tchip.addEventListener('wje:chip-remove', this.removeChip);\n\t\tchip.option = option;\n\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.innerText = this.#htmlSelectedItem(option.value) // option.textContent.trim();\n\n\t\tchip.appendChild(label);\n\n\t\treturn chip;\n\t}\n\n\t/**\n\t * Handles the removal of a chip element from the DOM and updates the related state.\n\t * @param {Event} e The event object triggered by the chip removal action.\n\t * The target of the event is expected to be the chip element itself.\n\t */\n\tremoveChip = (e) => {\n\t\te.target.parentNode.removeChild(e.target);\n\t\tthis.processClickedOption(e.target.option, true);\n\t\tthis.selections();\n\t};\n\n\t/**\n\t * Generates an HTML option element based on the provided item and mapping.\n\t * @param {object} item The item to generate the option for.\n\t * @param {object} [map] The mapping object that specifies the properties of the item to use for the option's value and text.\n\t * @param {string} [map.value] The property of the item to use for the option's value.\n\t * @param {string} [map.text] The property of the item to use for the option's text.\n\t * @returns {HTMLElement} The generated HTML option element.\n\t */\n\thtmlOption(item, map = { value: 'value', text: 'text' }) {\n\t\tlet option = document.createElement('wje-option');\n\n\t\tif (item[map.value] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.value}`);\n\t\t}\n\n\t\tif (item[map.text] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.text}`);\n\t\t}\n\n\t\toption.setAttribute('value', item[map.value] ?? '');\n\t\toption.innerText = item[map.text] ?? '';\n\n\t\tthis.#addedOptions.push({ [map.value]: item[map.value], [map.text]: item[map.text] });\n\t\treturn option;\n\t}\n\n\t/**\n\t * Returns the provided item.\n\t * @param {any} item The item to be returned.\n\t * @returns {any} The same item that was passed as input.\n\t */\n\thtmlSelectedItem(item) {\n\t\treturn item;\n\t}\n\n\t/**\n\t * Adds a new option to the component.\n\t * @param {object} optionData The data used to create the new option.\n\t * @param {boolean} [silent] Whether the addition should trigger events or not.\n\t * @param {object} [map] Mapping of keys to identify value and text in the optionData.\n\t * @param {string} [map.value] The key in optionData that represents the value of the option.\n\t * @param {string} [map.text] The key in optionData that represents the text of the option.\n\t * @returns {void}\n\t */\n\taddOption(optionData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!optionData) return;\n\n\t\tconst optionsElement = this.querySelector('wje-options');\n\t\tif (optionsElement) {\n\t\t\toptionsElement.addOption(optionData, silent, map);\n\t\t\treturn;\n\t\t}\n\t\tlet option = this.htmlOption(optionData, map);\n\t\tthis.appendChild(option);\n\t}\n\n\t/**\n\t * Adds one or more options to a collection. If the input is an array, it adds each option within the array.\n\t * Otherwise, it adds a single option.\n\t * @param {Array | object} optionsData The data representing the options to be added. It can be a single object or an array of objects.\n\t * @param {boolean} [silent] Optional flag to determine if events or notifications should be suppressed while adding options.\n\t * @param {object} [map] An optional mapping object specifying how to map data properties to value and text for the options.\n\t * @param {string} [map.value] The property in the optionsData that represents the value of the option.\n\t * @param {string} [map.text] The property in the optionsData that represents the text of the option.\n\t * @returns {void}\n\t */\n\taddOptions(optionsData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!Array.isArray(optionsData)) {\n\t\t\tthis.addOption(optionsData, silent, map);\n\t\t} else {\n\t\t\toptionsData.forEach((item) => {\n\t\t\t\tthis.addOption(item, silent, map);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Selects an option from the available options within the component.\n\t * @param {string} value The value of the option to be selected.\n\t * @param {boolean} [silent] Determines whether the selection should trigger notification or updates. Defaults to false.\n\t * @returns {void} Does not return a value.\n\t */\n\tselectOption(value, silent = false) {\n\t\tif (!value) return;\n\n\t\tconst option = this.querySelector(`wje-option[value=\"${value}\"]`);\n\t\tif (!option) return;\n\n\t\tif (silent) {\n\t\t\tif (!option.hasAttribute('selected')) {\n\t\t\t\toption.selected = true;\n\t\t\t}\n\t\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\t} else {\n\t\t\tthis.processClickedOption(option, this.hasAttribute('multiple'));\n\t\t}\n\n\t\tif (this.drawingStatus > this.drawingStatuses.START) {\n\t\t\tthis.selections(silent);\n\t\t}\n\t}\n\n\t/**\n\t * Selects multiple options based on the provided values. If a single value is provided, it selects that option.\n\t * If an array of values is provided, it iterates through the array and selects each option.\n\t * @param {any|any[]} values A single value or an array of values to be selected.\n\t * @param {boolean} [silent] Determines whether the selection action should occur silently without triggering other side effects or events.\n\t * @returns {void} This method does not return a value.\n\t */\n\tselectOptions(values, silent = false) {\n\t\tif (!Array.isArray(values)) {\n\t\t\tthis.selectOption(values, silent);\n\t\t} else {\n\t\t\tvalues.forEach((value) => {\n\t\t\t\tthis.selectOption(value, silent);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clones and appends an icon with the \"check\" slot to the specified option element.\n\t * If the option already contains a custom element with slot=\"check\" (e.g. <wje-status slot=\"check\">),\n\t * it is left untouched and no template icon is added.\n\t * @param {HTMLElement} option The target HTML element to which the cloned \"check\" icon will be appended.\n\t * @returns {void} This method does not return a value, but it modifies the DOM by appending a cloned \"check\" icon to the provided option element.\n\t */\n\toptionCheckSlot(option) {\n\t\tlet existingCheckSlot = option.querySelector('[slot=\"check\"]');\n\n\t\tif (existingCheckSlot && existingCheckSlot.tagName !== 'WJE-CHECKBOX') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (existingCheckSlot && existingCheckSlot.tagName === 'WJE-CHECKBOX') {\n\t\t\tconst isSelectedExisting = option.hasAttribute('selected');\n\n\t\t\t// zosúladenie stavu\n\t\t\texistingCheckSlot.checked = isSelectedExisting;\n\t\t\tif (isSelectedExisting) {\n\t\t\t\texistingCheckSlot.setAttribute('checked', '');\n\t\t\t} else {\n\t\t\t\texistingCheckSlot.removeAttribute('checked');\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet icon = this.querySelector('template')?.content.querySelector('[slot=\"check\"]');\n\t\tif (!icon) {\n\t\t\tconsole.warn('Icon with slot \"check\" was not found.');\n\t\t\treturn;\n\t\t}\n\n\t\tlet iconClone = icon.cloneNode(true);\n\n\t\toption.append(iconClone);\n\t}\n\n\t/**\n\t * Clears all selected options and resets selections.\n\t * The method ensures that all options are deselected, updates the internal state, validates the selections,\n\t * propagates the validation status, and indicates invalid state if necessary.\n\t * @returns {void} No value is returned by this method.\n\t */\n\tclearSelections() {\n\t\tthis.selectedOptions = [];\n\n\t\tthis.getAllOptions().forEach((option) => {\n\t\t\toption.selected = false;\n\t\t});\n\t\tthis.selections();\n\n\t\tthis.validate();\n\t\tthis.propagateValidation();\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Processes the given item and retrieves the corresponding value from the selected options.\n\t * @param {string} item The key to search for in the selected options.\n\t * @returns {string} The text content associated with the selected item, or an empty string if not found.\n\t */\n\t#htmlSelectedItem(item) {\n\t\tconst keyValue = \"value\"\n\t\tconst textValue = \"textContent\";\n\n\t\tconst value = this.selectedOptions.find((option) => option[keyValue] === item)?.[textValue] ?? \"\";\n\n\t\treturn this.htmlSelectedItem(value);\n\t}\n\n\t/**\n\t * Retrieves the list of selected options within the component.\n\t * @returns {Array<Element>} An array of elements representing the options that are currently selected.\n\t */\n\t#getSelectedOptions() {\n\t\treturn Array.from(this.querySelectorAll('wje-option[selected]'));\n\t}\n\n\t/**\n\t * Filters option elements based on the search input value.\n\t * This function applies a search filter to a list of options. If a `wj-options` element exists and has\n\t * the `lazy` attribute, the search value is passed to the `wj-options` element, enabling infinite scroll\n\t * functionality to handle the filtering. If the `lazy` attribute is not present, it performs a local\n\t * search to show or hide options depending on whether their text content matches the search input.\n\t * @param {Event} e The input event containing the search input value from the user.\n\t */\n\t#applySearchFilter = (e) => {\n\t\t// contains wj-options element with options\n\t\tconst optionsElement = this.querySelector('wje-options');\n\n\t\tif (optionsElement && optionsElement.hasAttribute('lazy')) {\n\t\t\t// pass search value to wj-options element and infinite scroll will handle the rest\n\t\t\toptionsElement.setAttribute('search', e.target.value);\n\t\t} else {\n\t\t\tlet value = e.target.value.trim().toLowerCase();\n\n\t\t\tthis.getAllOptions().forEach((option) => {\n\t\t\t\tif (option.textContent.trim().toLowerCase().includes(value)) {\n\t\t\t\t\toption.style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\toption.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tdocument.removeEventListener('mousedown', this.#onMenuItemClickCapture, true);\n\t}\n\n\t/**\n\t * Prevent closing the parent <wje-select>'s popup when a nested <wje-dropdown>\n\t * menu item is clicked. Closes only the dropdown that owns the clicked item.\n\t * This captures the event at the document level (useCapture=true) so it can\n\t * stop the global outside-click logic that would otherwise hide the select's popup.\n\t */\n\t#onMenuItemClickCapture = (e) => {\n\t\tconst target = (e.target);\n\t\tif (!target || !target.closest) return;\n\n\t\tconst menuItem = target.closest('wje-menu-item');\n\t\tif (!menuItem) return;\n\n\t\tconst dropdown = target.closest('wje-dropdown');\n\t\tif (dropdown && typeof dropdown.hide === 'function') {\n\t\t\tdropdown.hide();\n\t\t}\n\n\t\te.stopPropagation();\n\t}\n\n\t#syncOptionCheckbox(option) {\n\t\tconst checkbox = option.querySelector('wje-checkbox[slot=\"check\"]');\n\t\tif (!checkbox) return;\n\n\t\tconst isSelected = option.hasAttribute('selected');\n\t\tcheckbox.checked = isSelected;\n\t\tif (isSelected) {\n\t\t\tcheckbox.setAttribute('checked', '');\n\t\t} else {\n\t\t\tcheckbox.removeAttribute('checked');\n\t\t}\n\t}\n}","import { Select } from \"./select.element.js\";\n\nexport default Select;\n\nSelect.define('wje-select', Select);\n"],"names":["_a"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wj-elements",
|
|
3
3
|
"description": "WebJET Elements is a modern set of user interface tools harnessing the power of web components designed to simplify web application development.",
|
|
4
|
-
"version": "0.2.0-alpha.
|
|
4
|
+
"version": "0.2.0-alpha.7",
|
|
5
5
|
"homepage": "https://github.com/lencys/wj-elements",
|
|
6
6
|
"author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
|
|
7
7
|
"license": "MIT",
|