wj-elements 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animations.js +28 -51
- package/dist/animations.js.map +1 -1
- package/dist/base-path.js +19 -31
- package/dist/base-path.js.map +1 -1
- package/dist/custom-elements.json +11504 -11499
- package/dist/dark.css +1 -302
- package/dist/date.js +16 -36
- package/dist/date.js.map +1 -1
- package/dist/element-utils.js +20 -81
- package/dist/element-utils.js.map +1 -1
- package/dist/event.js +49 -165
- package/dist/event.js.map +1 -1
- package/dist/form-associated-element-BjeJn7j8.js +101 -0
- package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
- package/dist/icon-DmsqtDpL.js +102 -0
- package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
- package/dist/light.css +1 -731
- package/dist/localize.js +36 -111
- package/dist/localize.js.map +1 -1
- package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
- package/dist/permissions.js +14 -41
- package/dist/permissions.js.map +1 -1
- package/dist/popup.element-CbkhthPP.js +806 -0
- package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
- package/dist/router-links-CNsJ-elb.js +105 -0
- package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
- package/dist/skeleton.css +1 -197
- package/dist/styles.css +1 -866
- package/dist/universal-service.js +48 -109
- package/dist/universal-service.js.map +1 -1
- package/dist/utils.js +11 -18
- package/dist/utils.js.map +1 -1
- package/dist/web-types.json +760 -760
- package/dist/wje-accordion-item.js +33 -106
- package/dist/wje-accordion-item.js.map +1 -1
- package/dist/wje-accordion.js +19 -84
- package/dist/wje-accordion.js.map +1 -1
- package/dist/wje-animation.js +37 -4258
- package/dist/wje-animation.js.map +1 -1
- package/dist/wje-aside.js +9 -34
- package/dist/wje-aside.js.map +1 -1
- package/dist/wje-avatar.js +36 -126
- package/dist/wje-avatar.js.map +1 -1
- package/dist/wje-badge.js +10 -52
- package/dist/wje-badge.js.map +1 -1
- package/dist/wje-breadcrumb.js +205 -672
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-breadcrumbs.js +177 -633
- package/dist/wje-breadcrumbs.js.map +1 -1
- package/dist/wje-button-group.js +48 -153
- package/dist/wje-button-group.js.map +1 -1
- package/dist/wje-button.js +92 -413
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-card-content.js +7 -30
- package/dist/wje-card-content.js.map +1 -1
- package/dist/wje-card-controls.js +7 -30
- package/dist/wje-card-controls.js.map +1 -1
- package/dist/wje-card-header.js +7 -30
- package/dist/wje-card-header.js.map +1 -1
- package/dist/wje-card-subtitle.js +7 -34
- package/dist/wje-card-subtitle.js.map +1 -1
- package/dist/wje-card-title.js +7 -34
- package/dist/wje-card-title.js.map +1 -1
- package/dist/wje-card.js +15 -71
- package/dist/wje-card.js.map +1 -1
- package/dist/wje-carousel-item.js +12 -56
- package/dist/wje-carousel-item.js.map +1 -1
- package/dist/wje-carousel.js +154 -509
- package/dist/wje-carousel.js.map +1 -1
- package/dist/wje-checkbox.js +50 -227
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-chip.js +43 -160
- package/dist/wje-chip.js.map +1 -1
- package/dist/wje-col.js +7 -20
- package/dist/wje-col.js.map +1 -1
- package/dist/wje-color-picker.js +445 -1464
- package/dist/wje-color-picker.js.map +1 -1
- package/dist/wje-container.js +9 -35
- package/dist/wje-container.js.map +1 -1
- package/dist/wje-copy-button.js +64 -204
- package/dist/wje-copy-button.js.map +1 -1
- package/dist/wje-dialog.js +85 -553
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-divider.js +7 -34
- package/dist/wje-divider.js.map +1 -1
- package/dist/wje-dropdown.js +78 -305
- package/dist/wje-dropdown.js.map +1 -1
- package/dist/wje-element.js +191 -700
- package/dist/wje-element.js.map +1 -1
- package/dist/wje-file-upload-item.js +51 -156
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +181 -619
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/wje-footer.js +7 -31
- package/dist/wje-footer.js.map +1 -1
- package/dist/wje-form.js +7 -32
- package/dist/wje-form.js.map +1 -1
- package/dist/wje-format-digital.js +26 -118
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/wje-grid.js +7 -33
- package/dist/wje-grid.js.map +1 -1
- package/dist/wje-header.js +9 -35
- package/dist/wje-header.js.map +1 -1
- package/dist/wje-icon-library.js +12 -18
- package/dist/wje-icon-library.js.map +1 -1
- package/dist/wje-icon-picker.js +65 -320
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-icon.js +1 -1
- package/dist/wje-img-comparer.js +37 -114
- package/dist/wje-img-comparer.js.map +1 -1
- package/dist/wje-img.js +50 -198
- package/dist/wje-img.js.map +1 -1
- package/dist/wje-infinite-scroll.js +94 -346
- package/dist/wje-infinite-scroll.js.map +1 -1
- package/dist/wje-input-file.js +23 -84
- package/dist/wje-input-file.js.map +1 -1
- package/dist/wje-input.js +78 -392
- package/dist/wje-input.js.map +1 -1
- package/dist/wje-item.js +11 -64
- package/dist/wje-item.js.map +1 -1
- package/dist/wje-kanban.js +124 -401
- package/dist/wje-kanban.js.map +1 -1
- package/dist/wje-label.js +9 -32
- package/dist/wje-label.js.map +1 -1
- package/dist/wje-level-indicator.js +38 -157
- package/dist/wje-level-indicator.js.map +1 -1
- package/dist/wje-list.js +10 -40
- package/dist/wje-list.js.map +1 -1
- package/dist/wje-main.js +7 -31
- package/dist/wje-main.js.map +1 -1
- package/dist/wje-masonry.js +66 -211
- package/dist/wje-masonry.js.map +1 -1
- package/dist/wje-master.js +45 -161
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-menu-button.js +10 -38
- package/dist/wje-menu-button.js.map +1 -1
- package/dist/wje-menu-item.js +127 -577
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-menu-label.js +9 -35
- package/dist/wje-menu-label.js.map +1 -1
- package/dist/wje-menu.js +14 -49
- package/dist/wje-menu.js.map +1 -1
- package/dist/wje-option.js +48 -279
- package/dist/wje-option.js.map +1 -1
- package/dist/wje-options.js +130 -384
- package/dist/wje-options.js.map +1 -1
- package/dist/wje-orgchart-group.js +16 -52
- package/dist/wje-orgchart-group.js.map +1 -1
- package/dist/wje-orgchart-item.js +24 -93
- package/dist/wje-orgchart-item.js.map +1 -1
- package/dist/wje-orgchart.js +18 -68
- package/dist/wje-orgchart.js.map +1 -1
- package/dist/wje-pagination.js +113 -397
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-popup.js +3 -3
- package/dist/wje-popup.js.map +1 -1
- package/dist/wje-progress-bar.js +53 -205
- package/dist/wje-progress-bar.js.map +1 -1
- package/dist/wje-qr-code.js +398 -2980
- package/dist/wje-qr-code.js.map +1 -1
- package/dist/wje-radio-group.js +52 -190
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +24 -118
- package/dist/wje-radio.js.map +1 -1
- package/dist/wje-rate.js +62 -266
- package/dist/wje-rate.js.map +1 -1
- package/dist/wje-relative-time.js +24 -99
- package/dist/wje-relative-time.js.map +1 -1
- package/dist/wje-reorder-dropzone.js +9 -31
- package/dist/wje-reorder-dropzone.js.map +1 -1
- package/dist/wje-reorder-handle.js +67 -204
- package/dist/wje-reorder-handle.js.map +1 -1
- package/dist/wje-reorder-item.js +14 -44
- package/dist/wje-reorder-item.js.map +1 -1
- package/dist/wje-reorder.js +61 -246
- package/dist/wje-reorder.js.map +1 -1
- package/dist/wje-route.js +6 -24
- package/dist/wje-route.js.map +1 -1
- package/dist/wje-router-link.js +11 -39
- package/dist/wje-router-link.js.map +1 -1
- package/dist/wje-router-outlet.js +76 -172
- package/dist/wje-router-outlet.js.map +1 -1
- package/dist/wje-routerx.js +537 -1331
- package/dist/wje-routerx.js.map +1 -1
- package/dist/wje-row.js +9 -31
- package/dist/wje-row.js.map +1 -1
- package/dist/wje-select.js +326 -1152
- package/dist/wje-select.js.map +1 -1
- package/dist/wje-slider.js +44 -225
- package/dist/wje-slider.js.map +1 -1
- package/dist/wje-sliding-container.js +295 -1319
- package/dist/wje-sliding-container.js.map +1 -1
- package/dist/wje-split-view.js +35 -121
- package/dist/wje-split-view.js.map +1 -1
- package/dist/wje-status.js +14 -45
- package/dist/wje-status.js.map +1 -1
- package/dist/wje-step.js +9 -32
- package/dist/wje-step.js.map +1 -1
- package/dist/wje-stepper.js +109 -357
- package/dist/wje-stepper.js.map +1 -1
- package/dist/wje-store.js +67 -360
- package/dist/wje-store.js.map +1 -1
- package/dist/wje-tab-group.js +85 -314
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab-panel.js +7 -28
- package/dist/wje-tab-panel.js.map +1 -1
- package/dist/wje-tab.js +21 -198
- package/dist/wje-tab.js.map +1 -1
- package/dist/wje-textarea.js +64 -264
- package/dist/wje-textarea.js.map +1 -1
- package/dist/wje-thumbnail.js +10 -51
- package/dist/wje-thumbnail.js.map +1 -1
- package/dist/wje-toast.js +127 -632
- package/dist/wje-toast.js.map +1 -1
- package/dist/wje-toggle.js +52 -177
- package/dist/wje-toggle.js.map +1 -1
- package/dist/wje-toolbar-action.js +128 -456
- package/dist/wje-toolbar-action.js.map +1 -1
- package/dist/wje-toolbar.js +75 -270
- package/dist/wje-toolbar.js.map +1 -1
- package/dist/wje-tooltip.js +50 -161
- package/dist/wje-tooltip.js.map +1 -1
- package/dist/wje-tree-item.js +70 -301
- package/dist/wje-tree-item.js.map +1 -1
- package/dist/wje-tree.js +145 -489
- package/dist/wje-tree.js.map +1 -1
- package/dist/wje-visually-hidden.js +7 -34
- package/dist/wje-visually-hidden.js.map +1 -1
- package/package.json +3 -2
- package/dist/form-associated-element-DEQ4y-jn.js +0 -245
- package/dist/icon-CReYMzAK.js +0 -245
- package/dist/popup.element-CwXvVFK7.js +0 -2133
- package/dist/router-links-wjqCnncc.js +0 -156
package/dist/wje-textarea.js
CHANGED
|
@@ -1,315 +1,115 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { F as
|
|
5
|
-
import { event } from "./event.js";
|
|
6
|
-
const
|
|
7
|
-
const _Textarea = class _Textarea extends FormAssociatedElement {
|
|
8
|
-
/**
|
|
9
|
-
* Creates an instance of Textarea.
|
|
10
|
-
* @class
|
|
11
|
-
*/
|
|
4
|
+
import { F as t } from "./form-associated-element-BjeJn7j8.js";
|
|
5
|
+
import { event as e } from "./event.js";
|
|
6
|
+
const _a = class _a extends t {
|
|
12
7
|
constructor() {
|
|
13
8
|
super();
|
|
14
9
|
__publicField(this, "className", "Textarea");
|
|
15
|
-
/**
|
|
16
|
-
* Sets the height of the textarea.
|
|
17
|
-
*/
|
|
18
10
|
__publicField(this, "setTextareaHeight", () => {
|
|
19
|
-
|
|
20
|
-
this.input.style.height = "auto";
|
|
21
|
-
this.input.style.height = this.input.scrollHeight + "px";
|
|
22
|
-
}
|
|
11
|
+
"auto" === this.getAttribute("resize") && (this.input.style.height = "auto", this.input.style.height = this.input.scrollHeight + "px");
|
|
23
12
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* @param {Event} e The event object.
|
|
27
|
-
*/
|
|
28
|
-
__publicField(this, "counterFn", (e) => {
|
|
29
|
-
this.counterElement.innerText = e.target.value.length + "/" + this.input.maxLength;
|
|
13
|
+
__publicField(this, "counterFn", (t2) => {
|
|
14
|
+
this.counterElement.innerText = t2.target.value.length + "/" + this.input.maxLength;
|
|
30
15
|
});
|
|
31
|
-
this.invalid = false;
|
|
32
|
-
this.pristine = true;
|
|
33
|
-
this._instanceId = ++_Textarea._instanceId;
|
|
16
|
+
this.invalid = false, this.pristine = true, this._instanceId = ++_a._instanceId;
|
|
34
17
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* @param {string} value The value to set.
|
|
38
|
-
*/
|
|
39
|
-
set value(value) {
|
|
40
|
-
this.internals.setFormValue(value);
|
|
41
|
-
if (this.input) this.input.value = value;
|
|
42
|
-
this.pristine = false;
|
|
43
|
-
this._value = value;
|
|
44
|
-
this.syncAria();
|
|
18
|
+
set value(t2) {
|
|
19
|
+
this.internals.setFormValue(t2), this.input && (this.input.value = t2), this.pristine = false, this._value = t2, this.syncAria();
|
|
45
20
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Getter for the value attribute.
|
|
48
|
-
* @returns {string} The value of the attribute.
|
|
49
|
-
*/
|
|
50
21
|
get value() {
|
|
51
|
-
var
|
|
52
|
-
return ((
|
|
22
|
+
var _a2;
|
|
23
|
+
return ((_a2 = this.input) == null ? void 0 : _a2.value) ?? this._value ?? "";
|
|
53
24
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
* @param {string} value The value to set as the label attribute.
|
|
57
|
-
*/
|
|
58
|
-
set label(value) {
|
|
59
|
-
if (value === null || value === void 0) {
|
|
60
|
-
this.removeAttribute("label");
|
|
61
|
-
} else {
|
|
62
|
-
this.setAttribute("label", value);
|
|
63
|
-
}
|
|
25
|
+
set label(t2) {
|
|
26
|
+
null == t2 ? this.removeAttribute("label") : this.setAttribute("label", t2);
|
|
64
27
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Retrieves the value of the 'label' attribute if it exists.
|
|
67
|
-
* If the 'label' attribute is not set, it returns false.
|
|
68
|
-
* @returns {string|boolean} The value of the 'label' attribute as a string, or false if the attribute is not set.
|
|
69
|
-
*/
|
|
70
28
|
get label() {
|
|
71
29
|
return this.getAttribute("label") || false;
|
|
72
30
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
* `validate-on-change` attribute to the element. If set to a falsy value, it
|
|
76
|
-
* removes the `validate-on-change` attribute from the element.
|
|
77
|
-
* @param {boolean} value Determines whether to add or remove the
|
|
78
|
-
* `validate-on-change` attribute. A truthy value adds the attribute, whereas a
|
|
79
|
-
* falsy value removes it.
|
|
80
|
-
*/
|
|
81
|
-
set validateOnChange(value) {
|
|
82
|
-
if (value) {
|
|
83
|
-
this.setAttribute("validate-on-change", "");
|
|
84
|
-
} else {
|
|
85
|
-
this.removeAttribute("validate-on-change");
|
|
86
|
-
}
|
|
31
|
+
set validateOnChange(t2) {
|
|
32
|
+
t2 ? this.setAttribute("validate-on-change", "") : this.removeAttribute("validate-on-change");
|
|
87
33
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Getter for the validateOnChange attribute.
|
|
90
|
-
* @returns {boolean} Whether the attribute is present.
|
|
91
|
-
*/
|
|
92
34
|
get validateOnChange() {
|
|
93
35
|
return this.hasAttribute("validate-on-change");
|
|
94
36
|
}
|
|
95
|
-
set placeholder(
|
|
96
|
-
this.setAttribute("placeholder",
|
|
37
|
+
set placeholder(t2) {
|
|
38
|
+
this.setAttribute("placeholder", t2);
|
|
97
39
|
}
|
|
98
40
|
get placeholder() {
|
|
99
41
|
return this.getAttribute("placeholder");
|
|
100
42
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Returns the CSS styles for the component.
|
|
103
|
-
* @static
|
|
104
|
-
* @returns {CSSStyleSheet} The CSS stylesheet
|
|
105
|
-
*/
|
|
106
43
|
static get cssStyleSheet() {
|
|
107
|
-
return
|
|
44
|
+
return ':host{width:100%;margin-bottom:var(--wje-textarea-margin-bottom);display:block}:host label{margin:var(--wje-textarea-label-margin);padding:var(--wje-textarea-label-padding);display:var(--wje-textarea-label-display);opacity:1;cursor:text;transition:opacity .2s ease;line-height:var(--wje-textarea-label-line-height);font-size:var(--wje-textarea-label-font-size)}:host .wrapper{display:flex;width:100%;border-width:var(--wje-textarea-border-width);border-style:var(--wje-textarea-border-style);border-color:var(--wje-textarea-border-color);border-radius:var(--wje-textarea-border-radius);box-sizing:border-box}:host textarea{font-family:var(--wje-textarea-font-family);color:var(--wje-textarea-color);font-size:14px;border:0 none;padding:var(--wje-textarea-padding)}:host textarea:focus{outline:none}:host([invalid]) .error-message{display:block}:host([invalid]) .default label{opacity:1!important;color:var(--wje-input-color-invalid)!important;animation-name:shake;animation-duration:.4s;animation-iteration-count:1}:host([required]) .wrapper:after{color:var(--wje-input-color-invalid);content:var(--wje-input-required-symbol);font-size:24px;position:absolute;right:12px;top:0}:host([required]) .standard .input-wrapper:after{right:13px;top:-20px}:host([resize="auto"]) textarea,:host([resize="none"]) textarea{resize:none}.native-textarea .input-wrapper{width:100%;line-height:normal}.native-textarea.default{background-color:var(--wje-textarea-background-color);font-family:var(--wje-textarea-font-family);position:relative;padding-inline:0;padding-top:0;transition:background-color .2s ease;cursor:text}.native-textarea.default.focused .wrapper{border-color:var(--wje-textarea-border-color-focus)!important}.native-textarea.default.focused label{opacity:.67;font-size:12px;letter-spacing:normal}.native-textarea.default textarea{border:none;padding-top:0;background:none;box-shadow:none;width:calc(100% - var(--wje-textarea-padding) * 2);max-width:calc(100% - var(--wje-textarea-padding) * 2);min-width:calc(100% - var(--wje-textarea-padding) * 2);padding:0 var(--wje-textarea-padding)}.native-textarea.default label{margin:var(--wje-textarea-label-margin);padding:var(--wje-textarea-label-padding);display:var(--wje-textarea-label-display);opacity:1;cursor:text;transition:opacity .2s ease;line-height:var(--wje-textarea-label-line-height);font-size:var(--wje-textarea-label-font-size)}.native-textarea.default ::slotted([slot="start"]){border-left:none;border-top:none;border-bottom:none}.native-textarea.default ::slotted([slot="end"]){border-right:none;border-top:none;border-bottom:none}.native-textarea.standard{position:relative;border-radius:var(--wje-textarea-border-radius);padding:0;transition:background-color .2s ease;cursor:text}.native-textarea.standard.focused .wrapper{border-color:var(--wje-textarea-border-color-focus)!important}.native-textarea.standard textarea{background-color:var(--wje-textarea-background-color);display:block;min-height:32px;box-shadow:none;width:100%;box-sizing:border-box;border-radius:var(--wje-textarea-border-radius)}.native-textarea.standard ::slotted([slot="start"]){border-right:none;border-radius:var(--wje-textarea-border-radius) 0 0 var(--wje-textarea-border-radius)}.native-textarea.standard ::slotted([slot="end"]){border-left:none;border-radius:0 var(--wje-textarea-border-radius) var(--wje-textarea-border-radius) 0}.native-textarea.standard.has-start textarea{border-top-left-radius:0;border-bottom-left-radius:0}.native-textarea.standard.has-end textarea{border-top-right-radius:0;border-bottom-right-radius:0}.native-textarea.standard slot[name=error]{position:static;background:transparent;padding:.25rem 0;left:auto;transform:none;color:var(--wje-textarea-color-invalid);font-size:12px;line-height:normal}.counter{float:right}slot[name=error]{display:none}:host([invalid]) slot[name=error]{display:block}slot[name=error]{display:none;position:absolute;max-width:100%;min-width:auto;border-radius:50px;background-color:var(--wje-textarea-error-background-color, var(--wje-tooltip-background));padding:.25rem .5rem;top:0;left:50%;transform:translate(-50%,-50%);color:var(--wje-textarea-error-color, var(--wje-tooltip-color));font-size:var(--wje-font-size-small);width:max-content;line-height:normal}@keyframes shake{8%,41%{transform:translate(-4px)}25%,58%{transform:translate(4px)}75%{transform:translate(-2px)}92%{transform:translate(2px)}0%,to{transform:translate(0)}}';
|
|
108
45
|
}
|
|
109
|
-
/**
|
|
110
|
-
* Returns the list of attributes to observe for changes.
|
|
111
|
-
* @static
|
|
112
|
-
* @returns {Array<string>}
|
|
113
|
-
*/
|
|
114
46
|
static get observedAttributes() {
|
|
115
47
|
return ["value", "name", "disabled", "placeholder", "label", "required", "readonly", "invalid", "rows"];
|
|
116
48
|
}
|
|
117
|
-
/**
|
|
118
|
-
* Sets up the attributes for the component.
|
|
119
|
-
*/
|
|
120
49
|
setupAttributes() {
|
|
121
|
-
this.isShadowRoot = "open"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.value = attrValue !== null ? attrValue : this.innerHTML;
|
|
125
|
-
this.pristine = false;
|
|
50
|
+
if (this.isShadowRoot = "open", this.pristine) {
|
|
51
|
+
const t2 = this.getAttribute("value");
|
|
52
|
+
this.value = null !== t2 ? t2 : this.innerHTML, this.pristine = false;
|
|
126
53
|
}
|
|
127
54
|
this.syncAria();
|
|
128
55
|
}
|
|
129
|
-
attributeChangedCallback(
|
|
130
|
-
|
|
131
|
-
if (name === "label") {
|
|
132
|
-
this.refresh();
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (!this.input) {
|
|
136
|
-
this.syncAria();
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
if (name === "value") {
|
|
140
|
-
this._value = newValue ?? "";
|
|
141
|
-
this.input.value = this.value;
|
|
142
|
-
this.internals.setFormValue(this.value);
|
|
143
|
-
} else if (name === "name") {
|
|
144
|
-
this.input.name = this.name;
|
|
145
|
-
} else if (name === "disabled") {
|
|
146
|
-
this.input.disabled = this.hasAttribute("disabled");
|
|
147
|
-
} else if (name === "required") {
|
|
148
|
-
this.input.required = this.required;
|
|
149
|
-
} else if (name === "readonly") {
|
|
150
|
-
this.input.readOnly = this.hasAttribute("readonly");
|
|
151
|
-
} else if (name === "placeholder") {
|
|
152
|
-
this.input.placeholder = this.placeholder || "";
|
|
153
|
-
} else if (name === "rows") {
|
|
154
|
-
this.input.rows = Number(newValue || 3);
|
|
155
|
-
}
|
|
156
|
-
this.syncAria();
|
|
56
|
+
attributeChangedCallback(t2, e2, a2) {
|
|
57
|
+
e2 !== a2 && ("label" !== t2 ? this.input ? ("value" === t2 ? (this._value = a2 ?? "", this.input.value = this.value, this.internals.setFormValue(this.value)) : "name" === t2 ? this.input.name = this.name : "disabled" === t2 ? this.input.disabled = this.hasAttribute("disabled") : "required" === t2 ? this.input.required = this.required : "readonly" === t2 ? this.input.readOnly = this.hasAttribute("readonly") : "placeholder" === t2 ? this.input.placeholder = this.placeholder || "" : "rows" === t2 && (this.input.rows = Number(a2 || 3)), this.syncAria()) : this.syncAria() : this.refresh());
|
|
157
58
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Draws the component for the textarea.
|
|
160
|
-
* @returns {DocumentFragment}
|
|
161
|
-
*/
|
|
162
59
|
draw() {
|
|
163
|
-
let
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
let
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
label.htmlFor = "textarea";
|
|
176
|
-
label.innerHTML = this.label || "";
|
|
177
|
-
let input = document.createElement("textarea");
|
|
178
|
-
input.id = "textarea";
|
|
179
|
-
input.name = this.name;
|
|
180
|
-
input.disabled = this.hasAttribute("disabled");
|
|
181
|
-
input.innerText = this.value;
|
|
182
|
-
input.placeholder = this.placeholder || "";
|
|
183
|
-
input.classList.add("form-control");
|
|
184
|
-
input.setAttribute("part", "input");
|
|
185
|
-
input.rows = Number(this.getAttribute("rows") || 3);
|
|
186
|
-
input.setAttribute("spellcheck", false);
|
|
187
|
-
const attributes = Array.from(this.attributes).map((attr) => attr.name);
|
|
188
|
-
attributes.forEach((attr) => {
|
|
189
|
-
if (this.hasAttribute(attr)) {
|
|
190
|
-
input.setAttribute(attr, this[attr] || "");
|
|
191
|
-
}
|
|
60
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("div");
|
|
61
|
+
e2.classList.add("native-textarea", this.variant || "default"), e2.setAttribute("part", "native"), this.hasAttribute("invalid") && e2.classList.add("has-error");
|
|
62
|
+
let a2 = document.createElement("div");
|
|
63
|
+
a2.setAttribute("part", "wrapper"), a2.classList.add("wrapper");
|
|
64
|
+
let r = document.createElement("div");
|
|
65
|
+
r.classList.add("input-wrapper");
|
|
66
|
+
let i = document.createElement("label");
|
|
67
|
+
i.setAttribute("part", "label"), i.htmlFor = "textarea", i.innerHTML = this.label || "";
|
|
68
|
+
let s = document.createElement("textarea");
|
|
69
|
+
s.id = "textarea", s.name = this.name, s.disabled = this.hasAttribute("disabled"), s.innerText = this.value, s.placeholder = this.placeholder || "", s.classList.add("form-control"), s.setAttribute("part", "input"), s.rows = Number(this.getAttribute("rows") || 3), s.setAttribute("spellcheck", false);
|
|
70
|
+
Array.from(this.attributes).map((t3) => t3.name).forEach((t3) => {
|
|
71
|
+
this.hasAttribute(t3) && s.setAttribute(t3, this[t3] || "");
|
|
192
72
|
});
|
|
193
|
-
let
|
|
194
|
-
|
|
195
|
-
let
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (this.label) {
|
|
201
|
-
if (this.variant === "standard") {
|
|
202
|
-
native.appendChild(label);
|
|
203
|
-
} else {
|
|
204
|
-
inputWrapper.appendChild(label);
|
|
205
|
-
}
|
|
73
|
+
let n = document.createElement("div");
|
|
74
|
+
n.setAttribute("slot", "error");
|
|
75
|
+
let o = document.createElement("slot");
|
|
76
|
+
if (o.setAttribute("name", "error"), this._ariaErrorId = this.id ? `${this.id}-error` : `wje-textarea-${this._instanceId}-error`, o.id = this._ariaErrorId, "auto" === this.getAttribute("resize") && s.addEventListener("input", this.setTextareaHeight), this.label && ("standard" === this.variant ? e2.appendChild(i) : r.appendChild(i)), r.appendChild(s), a2.appendChild(r), e2.appendChild(a2), e2.append(o), this.append(n), t2.appendChild(e2), this.hasAttribute("counter")) {
|
|
77
|
+
s.maxLength = this.maxLength || 1e3, s.addEventListener("input", this.counterFn);
|
|
78
|
+
let e3 = document.createElement("div");
|
|
79
|
+
e3.classList.add("counter"), e3.innerText = `${s.value.length}/${s.maxLength}`, this.counterElement = e3, t2.appendChild(e3);
|
|
206
80
|
}
|
|
207
|
-
|
|
208
|
-
wrapper.appendChild(inputWrapper);
|
|
209
|
-
native.appendChild(wrapper);
|
|
210
|
-
native.append(errorSlot);
|
|
211
|
-
this.append(error);
|
|
212
|
-
fragment.appendChild(native);
|
|
213
|
-
if (this.hasAttribute("counter")) {
|
|
214
|
-
input.maxLength = this.maxLength || 1e3;
|
|
215
|
-
input.addEventListener("input", this.counterFn);
|
|
216
|
-
let counter = document.createElement("div");
|
|
217
|
-
counter.classList.add("counter");
|
|
218
|
-
counter.innerText = `${input.value.length}/${input.maxLength}`;
|
|
219
|
-
this.counterElement = counter;
|
|
220
|
-
fragment.appendChild(counter);
|
|
221
|
-
}
|
|
222
|
-
this.native = native;
|
|
223
|
-
this.labelElement = label;
|
|
224
|
-
this.input = input;
|
|
225
|
-
this.syncAria();
|
|
226
|
-
return fragment;
|
|
81
|
+
return this.native = e2, this.labelElement = i, this.input = s, this.syncAria(), t2;
|
|
227
82
|
}
|
|
228
|
-
/**
|
|
229
|
-
* Sets up the event listeners after the component is drawn.
|
|
230
|
-
*/
|
|
231
83
|
afterDraw() {
|
|
232
|
-
|
|
233
|
-
this.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
this.
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
});
|
|
244
|
-
this.input.addEventListener("blur", (e) => {
|
|
245
|
-
this.native.classList.remove("focused");
|
|
246
|
-
if (!e.target.value) this.labelElement.classList.remove("fade");
|
|
247
|
-
});
|
|
248
|
-
this.input.addEventListener("input", (e) => {
|
|
249
|
-
this.validate();
|
|
250
|
-
if (this.validateOnChange) {
|
|
251
|
-
this.pristine = false;
|
|
252
|
-
this.propagateValidation();
|
|
253
|
-
}
|
|
254
|
-
if (this.invalid) {
|
|
255
|
-
this.invalid = false;
|
|
256
|
-
this.internals.setValidity({}, "");
|
|
257
|
-
}
|
|
258
|
-
this.input.classList.remove("pristine");
|
|
259
|
-
this.labelElement.classList.add("fade");
|
|
260
|
-
const clone = new e.constructor(e.type, e);
|
|
261
|
-
this.dispatchEvent(clone);
|
|
262
|
-
event.dispatchCustomEvent(this, "wje-textarea:input", {
|
|
263
|
-
value: this.input.value
|
|
264
|
-
});
|
|
265
|
-
this.value = this.input.value;
|
|
266
|
-
});
|
|
267
|
-
this.addEventListener("invalid", (e) => {
|
|
268
|
-
this.invalid = true;
|
|
269
|
-
this.pristine = false;
|
|
270
|
-
this.showInvalidMessage();
|
|
271
|
-
if (this.customErrorDisplay) {
|
|
272
|
-
e.preventDefault();
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
this.validate();
|
|
276
|
-
this.syncAria();
|
|
84
|
+
"auto" === this.getAttribute("resize") && "function" == typeof ResizeObserver && (this.resizeObserver = new ResizeObserver(() => this.setTextareaHeight()), this.resizeObserver.observe(this.input)), this.hasAttribute("disabled") || (e.addListener(this, "click", "wje-textarea:change"), e.addListener(this, "click", "wje-textarea:input")), this.input.addEventListener("focus", (t2) => {
|
|
85
|
+
this.labelElement.classList.add("fade"), this.native.classList.add("focused");
|
|
86
|
+
}), this.input.addEventListener("blur", (t2) => {
|
|
87
|
+
this.native.classList.remove("focused"), t2.target.value || this.labelElement.classList.remove("fade");
|
|
88
|
+
}), this.input.addEventListener("input", (t2) => {
|
|
89
|
+
this.validate(), this.validateOnChange && (this.pristine = false, this.propagateValidation()), this.invalid && (this.invalid = false, this.internals.setValidity({}, "")), this.input.classList.remove("pristine"), this.labelElement.classList.add("fade");
|
|
90
|
+
const a2 = new t2.constructor(t2.type, t2);
|
|
91
|
+
this.dispatchEvent(a2), e.dispatchCustomEvent(this, "wje-textarea:input", { value: this.input.value }), this.value = this.input.value;
|
|
92
|
+
}), this.addEventListener("invalid", (t2) => {
|
|
93
|
+
this.invalid = true, this.pristine = false, this.showInvalidMessage(), this.customErrorDisplay && t2.preventDefault();
|
|
94
|
+
}), this.validate(), this.syncAria();
|
|
277
95
|
}
|
|
278
|
-
/**
|
|
279
|
-
* Syncs ARIA attributes on the host element.
|
|
280
|
-
*/
|
|
281
96
|
syncAria() {
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
const label = this.label && this.label !== false ? this.label.trim() : "";
|
|
285
|
-
this.setAriaState({
|
|
286
|
-
role: "textbox",
|
|
287
|
-
disabled: this.disabled,
|
|
288
|
-
required: this.required,
|
|
289
|
-
readonly: this.hasAttribute("readonly"),
|
|
290
|
-
invalid,
|
|
291
|
-
describedBy: this._ariaErrorId,
|
|
292
|
-
...label ? { label } : {}
|
|
293
|
-
});
|
|
97
|
+
const t2 = this.required && !this.value, e2 = this.invalid || t2, a2 = this.label && false !== this.label ? this.label.trim() : "";
|
|
98
|
+
this.setAriaState({ role: "textbox", disabled: this.disabled, required: this.required, readonly: this.hasAttribute("readonly"), invalid: e2, describedBy: this._ariaErrorId, ...a2 ? { label: a2 } : {} });
|
|
294
99
|
}
|
|
295
100
|
componentCleanup() {
|
|
296
|
-
var
|
|
297
|
-
(
|
|
298
|
-
(_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
101
|
+
var _a2, _b;
|
|
102
|
+
(_a2 = this.resizeObserver) == null ? void 0 : _a2.unobserve(this.input), (_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
299
103
|
}
|
|
300
|
-
/**
|
|
301
|
-
* Disconnects the component.
|
|
302
|
-
*/
|
|
303
104
|
beforeDisconnect() {
|
|
304
|
-
var
|
|
305
|
-
(
|
|
306
|
-
(_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
105
|
+
var _a2, _b;
|
|
106
|
+
(_a2 = this.resizeObserver) == null ? void 0 : _a2.unobserve(this.input), (_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
307
107
|
}
|
|
308
108
|
};
|
|
309
|
-
__publicField(
|
|
310
|
-
let
|
|
311
|
-
|
|
109
|
+
__publicField(_a, "_instanceId", 0);
|
|
110
|
+
let a = _a;
|
|
111
|
+
a.define("wje-textarea", a);
|
|
312
112
|
export {
|
|
313
|
-
|
|
113
|
+
a as default
|
|
314
114
|
};
|
|
315
115
|
//# sourceMappingURL=wje-textarea.js.map
|
package/dist/wje-textarea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-textarea.js","sources":["../packages/wje-textarea/textarea.element.js","../packages/wje-textarea/textarea.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Textarea` is a custom web component that represents a textarea input.\n * @summary This element represents a textarea input.\n * @documentation https://elements.webjet.sk/components/textarea\n * @status stable\n * @augments {FormAssociatedElement}\n * @csspart native - The native textarea wrapper.\n * @csspart input - The textarea input.\n * @csspart wrapper - The textarea wrapper.\n * @cssproperty [--wje-textarea-font-family=var(--wje-font-family)] - Specifies the font family used for the textarea. Accepts any valid CSS font-family value.\n * @cssproperty [--wje-textarea-background-color=var(--wje-background)] - Sets the background color of the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-color=var(--wje-color)] - Defines the text color within the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-color-invalid=var(--wje-color-danger)] - Changes the text color of the textarea when it is invalid. Useful for highlighting validation errors.\n * @cssproperty [--wje-textarea-error-background-color=var(--wje-tooltip-background)] - Controls the background color of the validation error bubble.\n * @cssproperty [--wje-textarea-error-color=var(--wje-tooltip-color)] - Controls the text color of the validation error bubble.\n * @cssproperty [--wje-textarea-border-width=1px] - Specifies the width of the textarea's border. Accepts any valid CSS length unit.\n * @cssproperty [--wje-textarea-border-style=solid] - Sets the style of the textarea's border. Accepts standard CSS border styles such as `solid`, `dashed`, or `dotted`.\n * @cssproperty [--wje-textarea-border-color=var(--wje-border-color)] - Defines the border color of the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-border-color-focus=var(--wje-color-primary)] - Specifies the border color of the textarea when it is focused. Enhances the user experience by providing visual feedback.\n * @cssproperty [--wje-textarea-border-radius=4px] - Determines the border radius of the textarea, defining how rounded its corners are. Accepts any valid CSS length unit.\n * @cssproperty [--wje-textarea-margin-bottom=.5rem] - Sets the bottom margin of the textarea. Ensures spacing between the textarea and other elements.\n * @cssproperty [--wje-textarea-line-height=20px] - Specifies the line height of the text within the textarea. Helps control the vertical spacing of the text.\n * @cssproperty [--wje-textarea-padding=0.5rem] - Defines the padding inside the textarea. Controls the spacing between the content and the border.\n * @tag wje-textarea\n */\n\nexport default class Textarea extends FormAssociatedElement {\n static _instanceId = 0;\n /**\n * Creates an instance of Textarea.\n * @class\n */\n constructor() {\n super();\n\n this.invalid = false;\n this.pristine = true;\n this._instanceId = ++Textarea._instanceId;\n }\n\n /**\n * Setter for the value attribute.\n * @param {string} value The value to set.\n */\n set value(value) {\n this.internals.setFormValue(value);\n\n if (this.input) this.input.value = value;\n\n this.pristine = false;\n this._value = value;\n this.syncAria();\n }\n\n /**\n * Getter for the value attribute.\n * @returns {string} The value of the attribute.\n */\n get value() {\n return this.input?.value ?? this._value ?? '';\n }\n\n /**\n * Sets the label attribute of the element.\n * @param {string} value The value to set as the label attribute.\n */\n set label(value) {\n if (value === null || value === undefined) {\n this.removeAttribute('label');\n } else {\n this.setAttribute('label', value);\n }\n }\n\n /**\n * Retrieves the value of the 'label' attribute if it exists.\n * If the 'label' attribute is not set, it returns false.\n * @returns {string|boolean} The value of the 'label' attribute as a string, or false if the attribute is not set.\n */\n get label() {\n return this.getAttribute('label') || false;\n }\n\n /**\n * Sets the `validateOnChange` property. If set to a truthy value, it adds the\n * `validate-on-change` attribute to the element. If set to a falsy value, it\n * removes the `validate-on-change` attribute from the element.\n * @param {boolean} value Determines whether to add or remove the\n * `validate-on-change` attribute. A truthy value adds the attribute, whereas a\n * falsy value removes it.\n */\n set validateOnChange(value) {\n if (value) {\n this.setAttribute('validate-on-change', '');\n } else {\n this.removeAttribute('validate-on-change');\n }\n }\n\n /**\n * Getter for the validateOnChange attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get validateOnChange() {\n return this.hasAttribute('validate-on-change');\n }\n\n set placeholder(value) {\n this.setAttribute('placeholder', value);\n }\n\n get placeholder() {\n return this.getAttribute('placeholder');\n }\n\n className = 'Textarea';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return ['value', 'name', 'disabled', 'placeholder', 'label', 'required', 'readonly', 'invalid', 'rows'];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n\n // if some value was set via value setter then don't use default value\n if (this.pristine) {\n const attrValue = this.getAttribute('value');\n this.value = attrValue !== null ? attrValue : this.innerHTML;\n this.pristine = false;\n }\n this.syncAria();\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n\n if (name === 'label') {\n this.refresh();\n return;\n }\n\n if (!this.input) {\n this.syncAria();\n return;\n }\n\n if (name === 'value') {\n this._value = newValue ?? '';\n this.input.value = this.value;\n this.internals.setFormValue(this.value);\n } else if (name === 'name') {\n this.input.name = this.name;\n } else if (name === 'disabled') {\n this.input.disabled = this.hasAttribute('disabled');\n } else if (name === 'required') {\n this.input.required = this.required;\n } else if (name === 'readonly') {\n this.input.readOnly = this.hasAttribute('readonly');\n } else if (name === 'placeholder') {\n this.input.placeholder = this.placeholder || '';\n } else if (name === 'rows') {\n this.input.rows = Number(newValue || 3);\n }\n\n this.syncAria();\n }\n\n /**\n * Draws the component for the textarea.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-textarea', this.variant || 'default');\n native.setAttribute('part', 'native');\n\n if (this.hasAttribute('invalid')) native.classList.add('has-error');\n\n let wrapper = document.createElement('div');\n wrapper.setAttribute('part', 'wrapper');\n wrapper.classList.add('wrapper');\n\n let inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n let label = document.createElement('label');\n label.setAttribute('part', 'label');\n label.htmlFor = 'textarea';\n label.innerHTML = this.label || '';\n\n let input = document.createElement('textarea');\n input.id = 'textarea';\n input.name = this.name;\n input.disabled = this.hasAttribute('disabled');\n input.innerText = this.value;\n input.placeholder = this.placeholder || '';\n input.classList.add('form-control');\n input.setAttribute('part', 'input');\n input.rows = Number(this.getAttribute('rows') || 3);\n input.setAttribute('spellcheck', false);\n\n const attributes = Array.from(this.attributes).map((attr) => attr.name);\n\n attributes.forEach((attr) => {\n if (this.hasAttribute(attr)) {\n input.setAttribute(attr, this[attr] || '');\n }\n });\n\n let error = document.createElement('div');\n error.setAttribute('slot', 'error');\n\n let errorSlot = document.createElement('slot');\n errorSlot.setAttribute('name', 'error');\n this._ariaErrorId = this.id ? `${this.id}-error` : `wje-textarea-${this._instanceId}-error`;\n errorSlot.id = this._ariaErrorId;\n\n if (this.getAttribute('resize') === 'auto') input.addEventListener('input', this.setTextareaHeight);\n\n if (this.label) {\n if (this.variant === 'standard') {\n native.appendChild(label);\n } else {\n inputWrapper.appendChild(label);\n }\n }\n\n inputWrapper.appendChild(input);\n\n wrapper.appendChild(inputWrapper);\n\n native.appendChild(wrapper);\n native.append(errorSlot);\n\n this.append(error);\n\n fragment.appendChild(native);\n\n if (this.hasAttribute('counter')) {\n input.maxLength = this.maxLength || 1000;\n input.addEventListener('input', this.counterFn);\n\n let counter = document.createElement('div');\n counter.classList.add('counter');\n counter.innerText = `${input.value.length}/${input.maxLength}`;\n\n this.counterElement = counter;\n fragment.appendChild(counter);\n }\n\n this.native = native;\n this.labelElement = label;\n this.input = input;\n\n this.syncAria();\n return fragment;\n }\n\n /**\n * Sets up the event listeners after the component is drawn.\n */\n afterDraw() {\n if (this.getAttribute('resize') === 'auto' && typeof ResizeObserver === 'function') {\n this.resizeObserver = new ResizeObserver(() => this.setTextareaHeight());\n this.resizeObserver.observe(this.input);\n }\n\n if (!this.hasAttribute('disabled')) {\n event.addListener(this, 'click', 'wje-textarea:change');\n event.addListener(this, 'click', 'wje-textarea:input');\n }\n\n this.input.addEventListener('focus', (e) => {\n this.labelElement.classList.add('fade');\n this.native.classList.add('focused');\n });\n\n this.input.addEventListener('blur', (e) => {\n this.native.classList.remove('focused');\n if (!e.target.value) this.labelElement.classList.remove('fade');\n });\n\n this.input.addEventListener('input', (e) => {\n this.validate();\n\n if (this.validateOnChange) {\n this.pristine = false;\n this.propagateValidation();\n }\n\n if (this.invalid) {\n this.invalid = false;\n this.internals.setValidity({}, '');\n }\n\n this.input.classList.remove('pristine');\n this.labelElement.classList.add('fade');\n\n const clone = new e.constructor(e.type, e);\n this.dispatchEvent(clone);\n\n event.dispatchCustomEvent(this, 'wje-textarea:input', {\n value: this.input.value,\n });\n\n this.value = this.input.value;\n });\n\n this.addEventListener('invalid', (e) => {\n this.invalid = true;\n this.pristine = false;\n\n this.showInvalidMessage();\n\n if (this.customErrorDisplay) {\n e.preventDefault();\n }\n });\n\n this.validate();\n\n this.syncAria();\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const requiredInvalid = this.required && !this.value;\n const invalid = this.invalid || requiredInvalid;\n const label = this.label && this.label !== false ? this.label.trim() : '';\n this.setAriaState({\n role: 'textbox',\n disabled: this.disabled,\n required: this.required,\n readonly: this.hasAttribute('readonly'),\n invalid,\n describedBy: this._ariaErrorId,\n ...(label ? { label } : {}),\n });\n }\n\n componentCleanup() {\n this.resizeObserver?.unobserve(this.input);\n this.resizeObserver?.disconnect();\n }\n\n /**\n * Disconnects the component.\n */\n beforeDisconnect() {\n this.resizeObserver?.unobserve(this.input);\n this.resizeObserver?.disconnect();\n }\n\n /**\n * Sets the height of the textarea.\n */\n setTextareaHeight = () => {\n if (this.getAttribute('resize') === 'auto') {\n this.input.style.height = 'auto';\n this.input.style.height = this.input.scrollHeight + 'px';\n }\n };\n\n /**\n * Updates the counter for the textarea.\n * @param {Event} e The event object.\n */\n counterFn = (e) => {\n this.counterElement.innerText = e.target.value.length + '/' + this.input.maxLength;\n }\n}\n","import Textarea from './textarea.element.js';\n\nexport default Textarea;\n\nTextarea.define('wje-textarea', Textarea);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-textarea.js","sources":["../packages/wje-textarea/textarea.element.js","../packages/wje-textarea/textarea.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Textarea` is a custom web component that represents a textarea input.\n * @summary This element represents a textarea input.\n * @documentation https://elements.webjet.sk/components/textarea\n * @status stable\n * @augments {FormAssociatedElement}\n * @csspart native - The native textarea wrapper.\n * @csspart input - The textarea input.\n * @csspart wrapper - The textarea wrapper.\n * @cssproperty [--wje-textarea-font-family=var(--wje-font-family)] - Specifies the font family used for the textarea. Accepts any valid CSS font-family value.\n * @cssproperty [--wje-textarea-background-color=var(--wje-background)] - Sets the background color of the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-color=var(--wje-color)] - Defines the text color within the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-color-invalid=var(--wje-color-danger)] - Changes the text color of the textarea when it is invalid. Useful for highlighting validation errors.\n * @cssproperty [--wje-textarea-error-background-color=var(--wje-tooltip-background)] - Controls the background color of the validation error bubble.\n * @cssproperty [--wje-textarea-error-color=var(--wje-tooltip-color)] - Controls the text color of the validation error bubble.\n * @cssproperty [--wje-textarea-border-width=1px] - Specifies the width of the textarea's border. Accepts any valid CSS length unit.\n * @cssproperty [--wje-textarea-border-style=solid] - Sets the style of the textarea's border. Accepts standard CSS border styles such as `solid`, `dashed`, or `dotted`.\n * @cssproperty [--wje-textarea-border-color=var(--wje-border-color)] - Defines the border color of the textarea. Accepts any valid CSS color value.\n * @cssproperty [--wje-textarea-border-color-focus=var(--wje-color-primary)] - Specifies the border color of the textarea when it is focused. Enhances the user experience by providing visual feedback.\n * @cssproperty [--wje-textarea-border-radius=4px] - Determines the border radius of the textarea, defining how rounded its corners are. Accepts any valid CSS length unit.\n * @cssproperty [--wje-textarea-margin-bottom=.5rem] - Sets the bottom margin of the textarea. Ensures spacing between the textarea and other elements.\n * @cssproperty [--wje-textarea-line-height=20px] - Specifies the line height of the text within the textarea. Helps control the vertical spacing of the text.\n * @cssproperty [--wje-textarea-padding=0.5rem] - Defines the padding inside the textarea. Controls the spacing between the content and the border.\n * @tag wje-textarea\n */\n\nexport default class Textarea extends FormAssociatedElement {\n static _instanceId = 0;\n /**\n * Creates an instance of Textarea.\n * @class\n */\n constructor() {\n super();\n\n this.invalid = false;\n this.pristine = true;\n this._instanceId = ++Textarea._instanceId;\n }\n\n /**\n * Setter for the value attribute.\n * @param {string} value The value to set.\n */\n set value(value) {\n this.internals.setFormValue(value);\n\n if (this.input) this.input.value = value;\n\n this.pristine = false;\n this._value = value;\n this.syncAria();\n }\n\n /**\n * Getter for the value attribute.\n * @returns {string} The value of the attribute.\n */\n get value() {\n return this.input?.value ?? this._value ?? '';\n }\n\n /**\n * Sets the label attribute of the element.\n * @param {string} value The value to set as the label attribute.\n */\n set label(value) {\n if (value === null || value === undefined) {\n this.removeAttribute('label');\n } else {\n this.setAttribute('label', value);\n }\n }\n\n /**\n * Retrieves the value of the 'label' attribute if it exists.\n * If the 'label' attribute is not set, it returns false.\n * @returns {string|boolean} The value of the 'label' attribute as a string, or false if the attribute is not set.\n */\n get label() {\n return this.getAttribute('label') || false;\n }\n\n /**\n * Sets the `validateOnChange` property. If set to a truthy value, it adds the\n * `validate-on-change` attribute to the element. If set to a falsy value, it\n * removes the `validate-on-change` attribute from the element.\n * @param {boolean} value Determines whether to add or remove the\n * `validate-on-change` attribute. A truthy value adds the attribute, whereas a\n * falsy value removes it.\n */\n set validateOnChange(value) {\n if (value) {\n this.setAttribute('validate-on-change', '');\n } else {\n this.removeAttribute('validate-on-change');\n }\n }\n\n /**\n * Getter for the validateOnChange attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get validateOnChange() {\n return this.hasAttribute('validate-on-change');\n }\n\n set placeholder(value) {\n this.setAttribute('placeholder', value);\n }\n\n get placeholder() {\n return this.getAttribute('placeholder');\n }\n\n className = 'Textarea';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return ['value', 'name', 'disabled', 'placeholder', 'label', 'required', 'readonly', 'invalid', 'rows'];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n\n // if some value was set via value setter then don't use default value\n if (this.pristine) {\n const attrValue = this.getAttribute('value');\n this.value = attrValue !== null ? attrValue : this.innerHTML;\n this.pristine = false;\n }\n this.syncAria();\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n\n if (name === 'label') {\n this.refresh();\n return;\n }\n\n if (!this.input) {\n this.syncAria();\n return;\n }\n\n if (name === 'value') {\n this._value = newValue ?? '';\n this.input.value = this.value;\n this.internals.setFormValue(this.value);\n } else if (name === 'name') {\n this.input.name = this.name;\n } else if (name === 'disabled') {\n this.input.disabled = this.hasAttribute('disabled');\n } else if (name === 'required') {\n this.input.required = this.required;\n } else if (name === 'readonly') {\n this.input.readOnly = this.hasAttribute('readonly');\n } else if (name === 'placeholder') {\n this.input.placeholder = this.placeholder || '';\n } else if (name === 'rows') {\n this.input.rows = Number(newValue || 3);\n }\n\n this.syncAria();\n }\n\n /**\n * Draws the component for the textarea.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-textarea', this.variant || 'default');\n native.setAttribute('part', 'native');\n\n if (this.hasAttribute('invalid')) native.classList.add('has-error');\n\n let wrapper = document.createElement('div');\n wrapper.setAttribute('part', 'wrapper');\n wrapper.classList.add('wrapper');\n\n let inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n let label = document.createElement('label');\n label.setAttribute('part', 'label');\n label.htmlFor = 'textarea';\n label.innerHTML = this.label || '';\n\n let input = document.createElement('textarea');\n input.id = 'textarea';\n input.name = this.name;\n input.disabled = this.hasAttribute('disabled');\n input.innerText = this.value;\n input.placeholder = this.placeholder || '';\n input.classList.add('form-control');\n input.setAttribute('part', 'input');\n input.rows = Number(this.getAttribute('rows') || 3);\n input.setAttribute('spellcheck', false);\n\n const attributes = Array.from(this.attributes).map((attr) => attr.name);\n\n attributes.forEach((attr) => {\n if (this.hasAttribute(attr)) {\n input.setAttribute(attr, this[attr] || '');\n }\n });\n\n let error = document.createElement('div');\n error.setAttribute('slot', 'error');\n\n let errorSlot = document.createElement('slot');\n errorSlot.setAttribute('name', 'error');\n this._ariaErrorId = this.id ? `${this.id}-error` : `wje-textarea-${this._instanceId}-error`;\n errorSlot.id = this._ariaErrorId;\n\n if (this.getAttribute('resize') === 'auto') input.addEventListener('input', this.setTextareaHeight);\n\n if (this.label) {\n if (this.variant === 'standard') {\n native.appendChild(label);\n } else {\n inputWrapper.appendChild(label);\n }\n }\n\n inputWrapper.appendChild(input);\n\n wrapper.appendChild(inputWrapper);\n\n native.appendChild(wrapper);\n native.append(errorSlot);\n\n this.append(error);\n\n fragment.appendChild(native);\n\n if (this.hasAttribute('counter')) {\n input.maxLength = this.maxLength || 1000;\n input.addEventListener('input', this.counterFn);\n\n let counter = document.createElement('div');\n counter.classList.add('counter');\n counter.innerText = `${input.value.length}/${input.maxLength}`;\n\n this.counterElement = counter;\n fragment.appendChild(counter);\n }\n\n this.native = native;\n this.labelElement = label;\n this.input = input;\n\n this.syncAria();\n return fragment;\n }\n\n /**\n * Sets up the event listeners after the component is drawn.\n */\n afterDraw() {\n if (this.getAttribute('resize') === 'auto' && typeof ResizeObserver === 'function') {\n this.resizeObserver = new ResizeObserver(() => this.setTextareaHeight());\n this.resizeObserver.observe(this.input);\n }\n\n if (!this.hasAttribute('disabled')) {\n event.addListener(this, 'click', 'wje-textarea:change');\n event.addListener(this, 'click', 'wje-textarea:input');\n }\n\n this.input.addEventListener('focus', (e) => {\n this.labelElement.classList.add('fade');\n this.native.classList.add('focused');\n });\n\n this.input.addEventListener('blur', (e) => {\n this.native.classList.remove('focused');\n if (!e.target.value) this.labelElement.classList.remove('fade');\n });\n\n this.input.addEventListener('input', (e) => {\n this.validate();\n\n if (this.validateOnChange) {\n this.pristine = false;\n this.propagateValidation();\n }\n\n if (this.invalid) {\n this.invalid = false;\n this.internals.setValidity({}, '');\n }\n\n this.input.classList.remove('pristine');\n this.labelElement.classList.add('fade');\n\n const clone = new e.constructor(e.type, e);\n this.dispatchEvent(clone);\n\n event.dispatchCustomEvent(this, 'wje-textarea:input', {\n value: this.input.value,\n });\n\n this.value = this.input.value;\n });\n\n this.addEventListener('invalid', (e) => {\n this.invalid = true;\n this.pristine = false;\n\n this.showInvalidMessage();\n\n if (this.customErrorDisplay) {\n e.preventDefault();\n }\n });\n\n this.validate();\n\n this.syncAria();\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const requiredInvalid = this.required && !this.value;\n const invalid = this.invalid || requiredInvalid;\n const label = this.label && this.label !== false ? this.label.trim() : '';\n this.setAriaState({\n role: 'textbox',\n disabled: this.disabled,\n required: this.required,\n readonly: this.hasAttribute('readonly'),\n invalid,\n describedBy: this._ariaErrorId,\n ...(label ? { label } : {}),\n });\n }\n\n componentCleanup() {\n this.resizeObserver?.unobserve(this.input);\n this.resizeObserver?.disconnect();\n }\n\n /**\n * Disconnects the component.\n */\n beforeDisconnect() {\n this.resizeObserver?.unobserve(this.input);\n this.resizeObserver?.disconnect();\n }\n\n /**\n * Sets the height of the textarea.\n */\n setTextareaHeight = () => {\n if (this.getAttribute('resize') === 'auto') {\n this.input.style.height = 'auto';\n this.input.style.height = this.input.scrollHeight + 'px';\n }\n };\n\n /**\n * Updates the counter for the textarea.\n * @param {Event} e The event object.\n */\n counterFn = (e) => {\n this.counterElement.innerText = e.target.value.length + '/' + this.input.maxLength;\n }\n}\n","import Textarea from './textarea.element.js';\n\nexport default Textarea;\n\nTextarea.define('wje-textarea', Textarea);\n"],"names":["Textarea","FormAssociatedElement","super","className","setTextareaHeight","this","getAttribute","input","style","height","scrollHeight","counterFn","e","counterElement","innerText","target","value","length","maxLength","invalid","pristine","_instanceId","internals","setFormValue","_value","syncAria","removeAttribute","setAttribute","validateOnChange","hasAttribute","setupAttributes","isShadowRoot","attrValue","innerHTML","name","oldValue","newValue","disabled","required","readOnly","placeholder","rows","Number","refresh","fragment","document","createDocumentFragment","native","createElement","classList","add","variant","wrapper","inputWrapper","label","htmlFor","id","Array","from","attributes","map","attr","forEach","error","errorSlot","_ariaErrorId","addEventListener","appendChild","append","counter","labelElement","ResizeObserver","resizeObserver","observe","event","addListener","remove","validate","propagateValidation","setValidity","clone","constructor","type","dispatchEvent","dispatchCustomEvent","showInvalidMessage","customErrorDisplay","preventDefault","requiredInvalid","trim","setAriaState","role","readonly","describedBy","componentCleanup","unobserve","disconnect","beforeDisconnect","static","define"],"mappings":"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"}
|
package/dist/wje-thumbnail.js
CHANGED
|
@@ -1,73 +1,32 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
class Thumbnail extends WJElement {
|
|
7
|
-
/**
|
|
8
|
-
* Creates an instance of Thumbnail.
|
|
9
|
-
*/
|
|
4
|
+
import t from "./wje-element.js";
|
|
5
|
+
class e extends t {
|
|
10
6
|
constructor() {
|
|
11
7
|
super();
|
|
12
|
-
/**
|
|
13
|
-
* The class name for the component
|
|
14
|
-
*/
|
|
15
8
|
__publicField(this, "className", "Thumbnail");
|
|
16
9
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Returns the CSS stylesheet for the component.
|
|
19
|
-
* @static
|
|
20
|
-
* @returns {CSSStyleSheet} The CSS stylesheet
|
|
21
|
-
*/
|
|
22
10
|
static get cssStyleSheet() {
|
|
23
|
-
return
|
|
11
|
+
return ":host{width:var(--wje-thumbnail-width);height:var(--wje-thumbnail-height);display:block;border-radius:var(--wje-border-radius)}:host([circle]) ::slotted(img){border-radius:50%}::slotted(wje-img),::slotted(img){border-radius:var(--wje-thumbnail-border-radius);width:100%;height:100%;object-fit:cover;overflow:hidden}";
|
|
24
12
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Returns the list of observed attributes.
|
|
27
|
-
* @static
|
|
28
|
-
* @returns {Array} An empty array
|
|
29
|
-
*/
|
|
30
13
|
static get observedAttributes() {
|
|
31
14
|
return [];
|
|
32
15
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Sets up the attributes for the component.
|
|
35
|
-
*/
|
|
36
16
|
setupAttributes() {
|
|
37
|
-
this.isShadowRoot = "open";
|
|
38
|
-
this.syncAria();
|
|
17
|
+
this.isShadowRoot = "open", this.syncAria();
|
|
39
18
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Draws the component for the thumbnail.
|
|
42
|
-
* @returns {object} Document fragment
|
|
43
|
-
*/
|
|
44
19
|
draw() {
|
|
45
|
-
let
|
|
46
|
-
|
|
47
|
-
fragment.appendChild(element);
|
|
48
|
-
return fragment;
|
|
20
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("slot");
|
|
21
|
+
return t2.appendChild(e2), t2;
|
|
49
22
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Sync ARIA attributes on host.
|
|
52
|
-
*/
|
|
53
23
|
syncAria() {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
if (ariaLabel || label) {
|
|
57
|
-
if (!this.hasAttribute("role")) {
|
|
58
|
-
this.setAttribute("role", "img");
|
|
59
|
-
}
|
|
60
|
-
if (!ariaLabel && label) {
|
|
61
|
-
this.setAriaState({ label });
|
|
62
|
-
}
|
|
63
|
-
this.removeAttribute("aria-hidden");
|
|
64
|
-
} else {
|
|
65
|
-
this.setAttribute("aria-hidden", "true");
|
|
66
|
-
}
|
|
24
|
+
const t2 = this.getAttribute("aria-label"), e2 = this.getAttribute("label");
|
|
25
|
+
t2 || e2 ? (this.hasAttribute("role") || this.setAttribute("role", "img"), !t2 && e2 && this.setAriaState({ label: e2 }), this.removeAttribute("aria-hidden")) : this.setAttribute("aria-hidden", "true");
|
|
67
26
|
}
|
|
68
27
|
}
|
|
69
|
-
|
|
28
|
+
e.define("wje-thumbnail", e);
|
|
70
29
|
export {
|
|
71
|
-
|
|
30
|
+
e as default
|
|
72
31
|
};
|
|
73
32
|
//# sourceMappingURL=wje-thumbnail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-thumbnail.js","sources":["../packages/wje-thumbnail/thumbnail.element.js","../packages/wje-thumbnail/thumbnail.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary Thumbnail class\n * @documentation https://elements.webjet.sk/components/thumbnail\n * @status stable\n * @augments WJElement\n * @slot thumbnail-slot - The slot for the thumbnail content.\n * @cssproperty [--wje-thumbnail-width=48px] - Defines the width of the thumbnail. Accepts any valid CSS length unit such as `px`, `rem`, or `%`.\n * @cssproperty [--wje-thumbnail-height=48px] - Specifies the height of the thumbnail. Accepts any valid CSS length unit.\n * @cssproperty [--wje-thumbnail-border-radius=var(--wje-border-radius-medium)] - Sets the border radius of the thumbnail, determining how rounded its corners appear. Accepts any valid CSS length unit or CSS variable.\n * @tag thumbnail-element\n */\n\nexport default class Thumbnail extends WJElement {\n /**\n * Creates an instance of Thumbnail.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component\n */\n className = 'Thumbnail';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of observed attributes.\n * @static\n * @returns {Array} An empty array\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the component for the thumbnail.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label');\n\n if (ariaLabel || label) {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n this.removeAttribute('aria-hidden');\n } else {\n this.setAttribute('aria-hidden', 'true');\n }\n }\n}\n","import Thumbnail from './thumbnail.element.js';\n\nexport default Thumbnail;\n\nThumbnail.define('wje-thumbnail', Thumbnail);\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wje-thumbnail.js","sources":["../packages/wje-thumbnail/thumbnail.element.js","../packages/wje-thumbnail/thumbnail.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary Thumbnail class\n * @documentation https://elements.webjet.sk/components/thumbnail\n * @status stable\n * @augments WJElement\n * @slot thumbnail-slot - The slot for the thumbnail content.\n * @cssproperty [--wje-thumbnail-width=48px] - Defines the width of the thumbnail. Accepts any valid CSS length unit such as `px`, `rem`, or `%`.\n * @cssproperty [--wje-thumbnail-height=48px] - Specifies the height of the thumbnail. Accepts any valid CSS length unit.\n * @cssproperty [--wje-thumbnail-border-radius=var(--wje-border-radius-medium)] - Sets the border radius of the thumbnail, determining how rounded its corners appear. Accepts any valid CSS length unit or CSS variable.\n * @tag thumbnail-element\n */\n\nexport default class Thumbnail extends WJElement {\n /**\n * Creates an instance of Thumbnail.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component\n */\n className = 'Thumbnail';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of observed attributes.\n * @static\n * @returns {Array} An empty array\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the component for the thumbnail.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label');\n\n if (ariaLabel || label) {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n this.removeAttribute('aria-hidden');\n } else {\n this.setAttribute('aria-hidden', 'true');\n }\n }\n}\n","import Thumbnail from './thumbnail.element.js';\n\nexport default Thumbnail;\n\nThumbnail.define('wje-thumbnail', Thumbnail);\n"],"names":["Thumbnail","WJElement","super","className","cssStyleSheet","this","isShadowRoot","syncAria","draw","fragment","document","createDocumentFragment","element","createElement","appendChild","ariaLabel","getAttribute","label","hasAttribute","setAttribute","setAriaState","removeAttribute","define"],"mappings":";;;;AAee,MAAMA,UAAkBC,EAAAA;AAAAA,EAInC;AACIC,UAAAA;AAMJC,qCAAY;AAAA,EALZ;AAAA,EAYA,2BAAWC;AACP;EACJ;AAAA,EAOA,WAAA;AACI,WAAO,CAAA;AAAA,EACX;AAAA,EAKA;AACIC,SAAKC,eAAe,QACpBD,KAAKE;EACT;AAAA,EAMA,OAAAC;AACI,QAAIC,KAAWC,SAASC,uBAAAA,GAEpBC,KAAUF,SAASG,cAAc;AAIrC,WAFAJ,GAASK,YAAYF,EAAAA,GAEdH;AAAAA,EACX;AAAA,EAKA,WAAAF;AACI,UAAMQ,KAAYV,KAAKW,aAAa,YAAA,GAC9BC,KAAQZ,KAAKW,aAAa,OAAA;AAE5BD,IAAAA,MAAaE,MACRZ,KAAKa,aAAa,MAAA,KACnBb,KAAKc,aAAa,QAAQ,SAEzBJ,MAAaE,MACdZ,KAAKe,aAAa,EAAEH,cAExBZ,KAAKgB,gBAAgB,aAAA,KAErBhB,KAAKc,aAAa,eAAe,MAAA;AAAA,EAEzC;;AClFJnB,EAAUsB,OAAO,iBAAiBtB,CAAAA;"}
|