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-rate.js
CHANGED
|
@@ -1,322 +1,118 @@
|
|
|
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 Rate extends WJElement {
|
|
7
|
-
/**
|
|
8
|
-
* Creates an instance of Rate.
|
|
9
|
-
* @class
|
|
10
|
-
*/
|
|
4
|
+
import t from "./wje-element.js";
|
|
5
|
+
class e extends t {
|
|
11
6
|
constructor() {
|
|
12
7
|
super();
|
|
13
|
-
/**
|
|
14
|
-
* Sets the hover value of the rating component.
|
|
15
|
-
* @type {string}
|
|
16
|
-
*/
|
|
17
8
|
__publicField(this, "className", "Rate");
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
* @param {Event} e The event.
|
|
21
|
-
*/
|
|
22
|
-
__publicField(this, "onMouseEnter", (e) => {
|
|
23
|
-
e.preventDefault();
|
|
24
|
-
this.hoverValue = this.getValueFromXPosition(e.clientX);
|
|
25
|
-
this.changeRate();
|
|
9
|
+
__publicField(this, "onMouseEnter", (t2) => {
|
|
10
|
+
t2.preventDefault(), this.hoverValue = this.getValueFromXPosition(t2.clientX), this.changeRate();
|
|
26
11
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* @param {Event} e The event.
|
|
30
|
-
*/
|
|
31
|
-
__publicField(this, "onMouseLeave", (e) => {
|
|
32
|
-
e.preventDefault();
|
|
33
|
-
this.hoverValue = 0;
|
|
34
|
-
this.changeRate();
|
|
12
|
+
__publicField(this, "onMouseLeave", (t2) => {
|
|
13
|
+
t2.preventDefault(), this.hoverValue = 0, this.changeRate();
|
|
35
14
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
__publicField(this, "onMouseMove", (e) => {
|
|
41
|
-
e.preventDefault();
|
|
42
|
-
let newValue = +this.getValueFromXPosition(e.clientX);
|
|
43
|
-
if (newValue !== +this.hoverValue) {
|
|
44
|
-
this.hoverValue = newValue;
|
|
45
|
-
this.changeRate();
|
|
46
|
-
}
|
|
15
|
+
__publicField(this, "onMouseMove", (t2) => {
|
|
16
|
+
t2.preventDefault();
|
|
17
|
+
let e2 = +this.getValueFromXPosition(t2.clientX);
|
|
18
|
+
e2 !== +this.hoverValue && (this.hoverValue = e2, this.changeRate());
|
|
47
19
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* @param {Event} e The event.
|
|
51
|
-
*/
|
|
52
|
-
__publicField(this, "onTouchStart", (e) => {
|
|
53
|
-
e.preventDefault();
|
|
54
|
-
this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);
|
|
55
|
-
this.changeRate();
|
|
20
|
+
__publicField(this, "onTouchStart", (t2) => {
|
|
21
|
+
t2.preventDefault(), this.hoverValue = this.getValueFromXPosition(t2.touches[0].clientX), this.changeRate();
|
|
56
22
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* @param {Event} e The event.
|
|
60
|
-
*/
|
|
61
|
-
__publicField(this, "onTouchEnd", (e) => {
|
|
62
|
-
e.preventDefault();
|
|
63
|
-
this.hoverValue = 0;
|
|
64
|
-
this.changeRate();
|
|
23
|
+
__publicField(this, "onTouchEnd", (t2) => {
|
|
24
|
+
t2.preventDefault(), this.hoverValue = 0, this.changeRate();
|
|
65
25
|
});
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* @param {Event} e The event.
|
|
69
|
-
*/
|
|
70
|
-
__publicField(this, "onTouchMove", (e) => {
|
|
71
|
-
e.preventDefault();
|
|
72
|
-
this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);
|
|
73
|
-
this.changeRate();
|
|
26
|
+
__publicField(this, "onTouchMove", (t2) => {
|
|
27
|
+
t2.preventDefault(), this.hoverValue = this.getValueFromXPosition(t2.touches[0].clientX), this.changeRate();
|
|
74
28
|
});
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* @param {Event} e The event.
|
|
78
|
-
*/
|
|
79
|
-
__publicField(this, "onClick", (e) => {
|
|
80
|
-
e.preventDefault();
|
|
81
|
-
this.value = +this.hoverValue;
|
|
29
|
+
__publicField(this, "onClick", (t2) => {
|
|
30
|
+
t2.preventDefault(), this.value = +this.hoverValue;
|
|
82
31
|
});
|
|
83
32
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
* @param {number} value The value to set.
|
|
87
|
-
*/
|
|
88
|
-
set precision(value) {
|
|
89
|
-
this.setAttribute("precision", value);
|
|
33
|
+
set precision(t2) {
|
|
34
|
+
this.setAttribute("precision", t2);
|
|
90
35
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Gets the precision of the rating component.
|
|
93
|
-
* @returns {number} The value of the precision.
|
|
94
|
-
*/
|
|
95
36
|
get precision() {
|
|
96
37
|
return this.hasAttribute("precision") ? +this.getAttribute("precision") : 1;
|
|
97
38
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* @param {number} value The value to set.
|
|
101
|
-
*/
|
|
102
|
-
set max(value) {
|
|
103
|
-
this.setAttribute("max", value);
|
|
39
|
+
set max(t2) {
|
|
40
|
+
this.setAttribute("max", t2);
|
|
104
41
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Gets the maximum value of the rating component.
|
|
107
|
-
* @returns {number} The value of the maximum value.
|
|
108
|
-
*/
|
|
109
42
|
get max() {
|
|
110
43
|
return this.hasAttribute("icons") ? this.icons.length : +this.getAttribute("max");
|
|
111
44
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
* @param {Array<string>} value The value to set.
|
|
115
|
-
*/
|
|
116
|
-
set icons(value) {
|
|
117
|
-
return value;
|
|
45
|
+
set icons(t2) {
|
|
46
|
+
return t2;
|
|
118
47
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Gets the icons of the rating component.
|
|
121
|
-
* @returns {Array<string>} The value of the icons.
|
|
122
|
-
*/
|
|
123
48
|
get icons() {
|
|
124
49
|
return this.hasAttribute("icons") ? JSON.parse(this.getAttribute("icons").replace(/'/g, '"')) : ["star"];
|
|
125
50
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
* @param {number} value The value to set.
|
|
129
|
-
*/
|
|
130
|
-
set value(value) {
|
|
131
|
-
this.setAttribute("value", value);
|
|
51
|
+
set value(t2) {
|
|
52
|
+
this.setAttribute("value", t2);
|
|
132
53
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Gets the value of the rating component.
|
|
135
|
-
* @returns {number} The value of the rating component.
|
|
136
|
-
*/
|
|
137
54
|
get value() {
|
|
138
55
|
return this.hasAttribute("value") ? +this.getAttribute("value") : 0;
|
|
139
56
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Returns the CSS styles for the component.
|
|
142
|
-
* @static
|
|
143
|
-
* @returns {CSSStyleSheet}
|
|
144
|
-
*/
|
|
145
57
|
static get cssStyleSheet() {
|
|
146
|
-
return
|
|
58
|
+
return ":host{display:flex;color:var(--wje-rate-color)}:host([readonly]) .wje-rate-icon{cursor:default}.native-rate{position:relative;display:flex;gap:var(--wje-rate-gap)}.wje-rate-icon{position:relative;cursor:pointer}.selected{color:var(--wje-rate-selected-color)}:host(:not([readonly])) .wje-rate-icon:hover{transform:scale(1.2)}wje-icon:first-child{color:var(--wje-rate-color)}wje-icon:last-child{color:currentColor;position:absolute;top:0;left:0}:host([disabled]) .native-rate{pointer-events:none;opacity:.5}";
|
|
147
59
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Returns the list of attributes to observe for changes.
|
|
150
|
-
* @static
|
|
151
|
-
* @returns {Array<string>}
|
|
152
|
-
*/
|
|
153
60
|
static get observedAttributes() {
|
|
154
61
|
return ["is-hover", "value", "max", "disabled", "readonly"];
|
|
155
62
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
* @param {string} name The name of the attribute that changed.
|
|
159
|
-
* @param {string} old The old value of the attribute.
|
|
160
|
-
* @param {string} newName The new value of the attribute.
|
|
161
|
-
*/
|
|
162
|
-
attributeChangedCallback(name, old, newName) {
|
|
163
|
-
if (super.attributeChangedCallback) {
|
|
164
|
-
super.attributeChangedCallback(name, old, newName);
|
|
165
|
-
}
|
|
166
|
-
if (old !== newName && name !== "is-hover") {
|
|
167
|
-
this.syncAria();
|
|
168
|
-
}
|
|
63
|
+
attributeChangedCallback(t2, e2, i) {
|
|
64
|
+
super.attributeChangedCallback && super.attributeChangedCallback(t2, e2, i), e2 !== i && "is-hover" !== t2 && this.syncAria();
|
|
169
65
|
}
|
|
170
|
-
/**
|
|
171
|
-
* Sets up the attributes for the component.
|
|
172
|
-
*/
|
|
173
66
|
setupAttributes() {
|
|
174
|
-
this.isShadowRoot = "open";
|
|
175
|
-
this.syncAria();
|
|
67
|
+
this.isShadowRoot = "open", this.syncAria();
|
|
176
68
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Draws the component for the rating component.
|
|
179
|
-
* @returns {DocumentFragment}
|
|
180
|
-
*/
|
|
181
69
|
draw() {
|
|
182
|
-
let
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.
|
|
187
|
-
|
|
188
|
-
let icons = this.icons;
|
|
189
|
-
for (let i = 0; i < icons.length; i++) {
|
|
190
|
-
native.appendChild(this.createIcons(i));
|
|
191
|
-
}
|
|
192
|
-
} else {
|
|
193
|
-
for (let i = 0; i < this.max; i++) {
|
|
194
|
-
native.appendChild(this.createIcons(i));
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
this.changeRate();
|
|
198
|
-
fragment.appendChild(native);
|
|
199
|
-
return fragment;
|
|
70
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("div");
|
|
71
|
+
if (e2.setAttribute("part", "native"), e2.classList.add("native-rate"), this.native = e2, this.hasAttribute("icons")) {
|
|
72
|
+
let t3 = this.icons;
|
|
73
|
+
for (let i = 0; i < t3.length; i++) e2.appendChild(this.createIcons(i));
|
|
74
|
+
} else for (let t3 = 0; t3 < this.max; t3++) e2.appendChild(this.createIcons(t3));
|
|
75
|
+
return this.changeRate(), t2.appendChild(e2), t2;
|
|
200
76
|
}
|
|
201
|
-
/**
|
|
202
|
-
* Adds event listeners after the component is drawn.
|
|
203
|
-
*/
|
|
204
77
|
afterDraw() {
|
|
205
|
-
this.syncAria();
|
|
206
|
-
if (this.hasAttribute("disabled") || this.hasAttribute("readonly")) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
this.addEventListener("mouseenter", this.onMouseEnter);
|
|
210
|
-
this.addEventListener("mouseleave", this.onMouseLeave);
|
|
211
|
-
this.addEventListener("mousemove", this.onMouseMove);
|
|
212
|
-
this.addEventListener("touchstart", this.onTouchStart);
|
|
213
|
-
this.addEventListener("touchend", this.onTouchEnd);
|
|
214
|
-
this.addEventListener("touchmove", this.onTouchMove);
|
|
215
|
-
this.addEventListener("click", this.onClick);
|
|
78
|
+
this.syncAria(), this.hasAttribute("disabled") || this.hasAttribute("readonly") || (this.addEventListener("mouseenter", this.onMouseEnter), this.addEventListener("mouseleave", this.onMouseLeave), this.addEventListener("mousemove", this.onMouseMove), this.addEventListener("touchstart", this.onTouchStart), this.addEventListener("touchend", this.onTouchEnd), this.addEventListener("touchmove", this.onTouchMove), this.addEventListener("click", this.onClick));
|
|
216
79
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
createIcons(i) {
|
|
223
|
-
let div = document.createElement("div");
|
|
224
|
-
div.classList.add("wje-rate-icon");
|
|
225
|
-
let icon = this.getIcons(i);
|
|
226
|
-
let clone = icon.cloneNode(true);
|
|
227
|
-
div.appendChild(icon);
|
|
228
|
-
div.appendChild(clone);
|
|
229
|
-
return div;
|
|
80
|
+
createIcons(t2) {
|
|
81
|
+
let e2 = document.createElement("div");
|
|
82
|
+
e2.classList.add("wje-rate-icon");
|
|
83
|
+
let i = this.getIcons(t2), s = i.cloneNode(true);
|
|
84
|
+
return e2.appendChild(i), e2.appendChild(s), e2;
|
|
230
85
|
}
|
|
231
|
-
/**
|
|
232
|
-
* Changes the rate of the rating component.
|
|
233
|
-
*/
|
|
234
86
|
changeRate() {
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (isSelected) {
|
|
244
|
-
icon.classList.add("selected");
|
|
245
|
-
if (this.hasAttribute("selected") && this.getAttribute("selected") === "filled") {
|
|
246
|
-
lastIcon.setAttribute("filled", "");
|
|
247
|
-
}
|
|
248
|
-
} else {
|
|
249
|
-
icon.classList.remove("selected");
|
|
250
|
-
lastIcon.removeAttribute("filled");
|
|
251
|
-
}
|
|
252
|
-
if (isPartial) {
|
|
253
|
-
const percent = ((rateValue - i) * 100).toFixed(2);
|
|
254
|
-
icon.classList.add("half");
|
|
255
|
-
firstIcon.style.clipPath = `inset(0 0 0 ${percent}%)`;
|
|
256
|
-
lastIcon.style.clipPath = `inset(0 ${100 - percent}% 0 0)`;
|
|
257
|
-
lastIcon.removeAttribute("hidden");
|
|
258
|
-
} else {
|
|
259
|
-
icon.classList.remove("half");
|
|
260
|
-
firstIcon.style.clipPath = ``;
|
|
261
|
-
lastIcon.style.clipPath = ``;
|
|
262
|
-
lastIcon.setAttribute("hidden", "");
|
|
263
|
-
}
|
|
264
|
-
icon.setAttribute("data-index", i);
|
|
265
|
-
icon.setAttribute("data-rate", rateValue);
|
|
87
|
+
const t2 = this.native.children, e2 = this.value !== this.hoverValue && 0 !== this.hoverValue && void 0 !== this.hoverValue ? this.hoverValue : this.value;
|
|
88
|
+
for (let i = 0; i < t2.length; i++) {
|
|
89
|
+
const s = t2[i], a = s.querySelector("wje-icon:first-child"), r = s.querySelector("wje-icon:last-child"), o = e2 > i && e2 < i + 1;
|
|
90
|
+
if (i < e2 ? (s.classList.add("selected"), this.hasAttribute("selected") && "filled" === this.getAttribute("selected") && r.setAttribute("filled", "")) : (s.classList.remove("selected"), r.removeAttribute("filled")), o) {
|
|
91
|
+
const t3 = (100 * (e2 - i)).toFixed(2);
|
|
92
|
+
s.classList.add("half"), a.style.clipPath = `inset(0 0 0 ${t3}%)`, r.style.clipPath = `inset(0 ${100 - t3}% 0 0)`, r.removeAttribute("hidden");
|
|
93
|
+
} else s.classList.remove("half"), a.style.clipPath = "", r.style.clipPath = "", r.setAttribute("hidden", "");
|
|
94
|
+
s.setAttribute("data-index", i), s.setAttribute("data-rate", e2);
|
|
266
95
|
}
|
|
267
96
|
this.syncAria();
|
|
268
97
|
}
|
|
269
|
-
/**
|
|
270
|
-
* Sync ARIA attributes on host.
|
|
271
|
-
*/
|
|
272
98
|
syncAria() {
|
|
273
|
-
this.setAriaState({
|
|
274
|
-
role: "slider",
|
|
275
|
-
valuemin: 0,
|
|
276
|
-
valuemax: this.max,
|
|
277
|
-
valuenow: this.value,
|
|
278
|
-
disabled: this.hasAttribute("disabled"),
|
|
279
|
-
readonly: this.hasAttribute("readonly")
|
|
280
|
-
});
|
|
99
|
+
this.setAriaState({ role: "slider", valuemin: 0, valuemax: this.max, valuenow: this.value, disabled: this.hasAttribute("disabled"), readonly: this.hasAttribute("readonly") });
|
|
281
100
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
* @returns {Element} The icon element.
|
|
286
|
-
*/
|
|
287
|
-
getIcons(index) {
|
|
288
|
-
let icon = document.createElement("wje-icon");
|
|
289
|
-
icon.setAttribute("name", this.max ? this.icons[0] : this.icons[index]);
|
|
290
|
-
if (this.hasAttribute("filled")) icon.setAttribute("filled", "");
|
|
291
|
-
return icon;
|
|
101
|
+
getIcons(t2) {
|
|
102
|
+
let e2 = document.createElement("wje-icon");
|
|
103
|
+
return e2.setAttribute("name", this.max ? this.icons[0] : this.icons[t2]), this.hasAttribute("filled") && e2.setAttribute("filled", ""), e2;
|
|
292
104
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
* @returns {number} The value from the x position.
|
|
297
|
-
*/
|
|
298
|
-
getValueFromXPosition(coordinate) {
|
|
299
|
-
const { left, right, width } = this.native.getBoundingClientRect();
|
|
300
|
-
const value = this.roundToPrecision((coordinate - left) / width * this.max, this.precision);
|
|
301
|
-
return Math.min(Math.max(value, 0), this.max);
|
|
105
|
+
getValueFromXPosition(t2) {
|
|
106
|
+
const { left: e2, right: i, width: s } = this.native.getBoundingClientRect(), a = this.roundToPrecision((t2 - e2) / s * this.max, this.precision);
|
|
107
|
+
return Math.min(Math.max(a, 0), this.max);
|
|
302
108
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
* @param {number} [precision] The precision to which the number should be rounded.
|
|
307
|
-
* @returns {number} - The rounded number.
|
|
308
|
-
* @example
|
|
309
|
-
* roundToPrecision(2.3); // Returns 2.5
|
|
310
|
-
* roundToPrecision(2.3, 0.1); // Returns 2.3
|
|
311
|
-
* roundToPrecision(2.6, 1); // Returns 3
|
|
312
|
-
*/
|
|
313
|
-
roundToPrecision(numberToRound, precision = 0.5) {
|
|
314
|
-
const multiplier = 1 / precision;
|
|
315
|
-
return Math.ceil(numberToRound * multiplier) / multiplier;
|
|
109
|
+
roundToPrecision(t2, e2 = 0.5) {
|
|
110
|
+
const i = 1 / e2;
|
|
111
|
+
return Math.ceil(t2 * i) / i;
|
|
316
112
|
}
|
|
317
113
|
}
|
|
318
|
-
|
|
114
|
+
e.define("wje-rate", e);
|
|
319
115
|
export {
|
|
320
|
-
|
|
116
|
+
e as default
|
|
321
117
|
};
|
|
322
118
|
//# sourceMappingURL=wje-rate.js.map
|
package/dist/wje-rate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-rate.js","sources":["../packages/wje-rate/rate.element.js","../packages/wje-rate/rate.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Rate` is a custom web component that represents a rating component.\n * @summary This element represents a rating component.\n * @documentation https://elements.webjet.sk/components/rate\n * @status stable\n * @augments {WJElement}\n * @attribute {number} precision - The precision of the rating component.\n * @attribute {number} max - The maximum value of the rating component.\n * @attribute {Array<string>} icons - The icons of the rating component.\n * @csspart native - The native part of the rating component.\n * @cssproperty [--wje-rate-gap=.25rem] - Defines the spacing (gap) between individual items in the rating component. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`) to adjust the distance between rating elements.\n * @cssproperty [--wje-rate-color=var(--wje-color-contrast-11)] - Specifies the default color of the rating items. Accepts any valid CSS color value, including named colors, hex values, RGB, or CSS variables.\n * @cssproperty [--wje-rate-selected-color=var(--wje-color-danger-9)] - Sets the color for selected or highlighted rating items. This property helps visually distinguish selected ratings. Accepts any valid CSS color value.\n * @tag wje-rate\n */\n\nexport default class Rate extends WJElement {\n /**\n * Creates an instance of Rate.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Sets the precision of the rating component.\n * @param {number} value The value to set.\n */\n set precision(value) {\n this.setAttribute('precision', value);\n }\n\n /**\n * Gets the precision of the rating component.\n * @returns {number} The value of the precision.\n */\n get precision() {\n return this.hasAttribute('precision') ? +this.getAttribute('precision') : 1;\n }\n\n /**\n * Sets the maximum value of the rating component.\n * @param {number} value The value to set.\n */\n set max(value) {\n this.setAttribute('max', value);\n }\n\n /**\n * Gets the maximum value of the rating component.\n * @returns {number} The value of the maximum value.\n */\n get max() {\n return this.hasAttribute('icons') ? this.icons.length : +this.getAttribute('max');\n }\n\n /**\n * Sets the icons of the rating component.\n * @param {Array<string>} value The value to set.\n */\n set icons(value) {\n return value;\n }\n\n /**\n * Gets the icons of the rating component.\n * @returns {Array<string>} The value of the icons.\n */\n get icons() {\n return this.hasAttribute('icons') ? JSON.parse(this.getAttribute('icons').replace(/'/g, '\"')) : ['star'];\n }\n\n /**\n * Sets the value of the rating component.\n * @param {number} value The value to set.\n */\n set value(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Gets the value of the rating component.\n * @returns {number} The value of the rating component.\n */\n get value() {\n return this.hasAttribute('value') ? +this.getAttribute('value') : 0;\n }\n\n /**\n * Sets the hover value of the rating component.\n * @type {string}\n */\n className = 'Rate';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\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 ['is-hover', 'value', 'max', 'disabled', 'readonly'];\n }\n\n /**\n * Called when an attribute changes.\n * @param {string} name The name of the attribute that changed.\n * @param {string} old The old value of the attribute.\n * @param {string} newName The new value of the attribute.\n */\n attributeChangedCallback(name, old, newName) {\n if (super.attributeChangedCallback) {\n super.attributeChangedCallback(name, old, newName);\n }\n\n if (name === 'is-hover') {\n // this.draw();\n }\n\n if (old !== newName && name !== 'is-hover') {\n this.syncAria();\n }\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 rating component.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-rate');\n\n this.native = native;\n\n if (this.hasAttribute('icons')) {\n let icons = this.icons;\n for (let i = 0; i < icons.length; i++) {\n native.appendChild(this.createIcons(i));\n }\n } else {\n for (let i = 0; i < this.max; i++) {\n native.appendChild(this.createIcons(i));\n }\n }\n\n this.changeRate();\n\n fragment.appendChild(native);\n\n return fragment;\n }\n\n /**\n * Adds event listeners after the component is drawn.\n */\n afterDraw() {\n this.syncAria();\n if (this.hasAttribute('disabled') || this.hasAttribute('readonly')) {\n return;\n }\n\n this.addEventListener('mouseenter', this.onMouseEnter);\n this.addEventListener('mouseleave', this.onMouseLeave);\n this.addEventListener('mousemove', this.onMouseMove);\n this.addEventListener('touchstart', this.onTouchStart);\n this.addEventListener('touchend', this.onTouchEnd);\n this.addEventListener('touchmove', this.onTouchMove);\n this.addEventListener('click', this.onClick);\n }\n\n /**\n * Creates the icons for the rating component.\n * @param {number} i The index of the icon.\n * @returns {Element} The icon element.\n */\n createIcons(i) {\n let div = document.createElement('div');\n div.classList.add('wje-rate-icon');\n\n let icon = this.getIcons(i);\n let clone = icon.cloneNode(true);\n\n div.appendChild(icon);\n div.appendChild(clone);\n\n return div;\n }\n\n /**\n * Changes the rate of the rating component.\n */\n changeRate() {\n const icons = this.native.children;\n const rateValue =\n this.value !== this.hoverValue && this.hoverValue !== 0 && this.hoverValue !== undefined\n ? this.hoverValue\n : this.value;\n\n for (let i = 0; i < icons.length; i++) {\n const icon = icons[i];\n const firstIcon = icon.querySelector('wje-icon:first-child');\n const lastIcon = icon.querySelector('wje-icon:last-child');\n\n const isSelected = i < rateValue;\n const isPartial = rateValue > i && rateValue < i + 1;\n\n if (isSelected) {\n icon.classList.add('selected');\n if (this.hasAttribute('selected') && this.getAttribute('selected') === 'filled') {\n lastIcon.setAttribute('filled', '');\n }\n } else {\n icon.classList.remove('selected');\n lastIcon.removeAttribute('filled');\n }\n\n if (isPartial) {\n const percent = ((rateValue - i) * 100).toFixed(2);\n icon.classList.add('half');\n\n firstIcon.style.clipPath = `inset(0 0 0 ${percent}%)`;\n lastIcon.style.clipPath = `inset(0 ${100 - percent}% 0 0)`;\n\n lastIcon.removeAttribute('hidden');\n } else {\n icon.classList.remove('half');\n firstIcon.style.clipPath = ``;\n lastIcon.style.clipPath = ``;\n lastIcon.setAttribute('hidden', '');\n }\n\n icon.setAttribute('data-index', i);\n icon.setAttribute('data-rate', rateValue);\n }\n\n this.syncAria();\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n this.setAriaState({\n role: 'slider',\n valuemin: 0,\n valuemax: this.max,\n valuenow: this.value,\n disabled: this.hasAttribute('disabled'),\n readonly: this.hasAttribute('readonly'),\n });\n }\n\n /**\n * Event handler for the mouse enter event.\n * @param {Event} e The event.\n */\n onMouseEnter = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the mouse leave event.\n * @param {Event} e The event.\n */\n onMouseLeave = (e) => {\n e.preventDefault();\n\n this.hoverValue = 0;\n this.changeRate();\n };\n\n /**\n * Event handler for the mouse move event.\n * @param {Event} e The event.\n */\n onMouseMove = (e) => {\n e.preventDefault();\n\n let newValue = +this.getValueFromXPosition(e.clientX);\n if (newValue !== +this.hoverValue) {\n this.hoverValue = newValue;\n this.changeRate();\n }\n };\n\n /**\n * Event handler for the touch start event.\n * @param {Event} e The event.\n */\n onTouchStart = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the touch end event.\n * @param {Event} e The event.\n */\n onTouchEnd = (e) => {\n e.preventDefault();\n\n this.hoverValue = 0;\n this.changeRate();\n };\n\n /**\n * Event handler for the touch move event.\n * @param {Event} e The event.\n */\n onTouchMove = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the click event.\n * @param {Event} e The event.\n */\n onClick = (e) => {\n e.preventDefault();\n\n this.value = +this.hoverValue;\n };\n\n /**\n * Returns the icons for the rating component.\n * @param {number} index The index of the icon.\n * @returns {Element} The icon element.\n */\n getIcons(index) {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', this.max ? this.icons[0] : this.icons[index]);\n\n if (this.hasAttribute('filled')) icon.setAttribute('filled', '');\n\n return icon;\n }\n\n /**\n * Returns the value from the x position.\n * @param {number} coordinate The x coordinate.\n * @returns {number} The value from the x position.\n */\n getValueFromXPosition(coordinate) {\n const { left, right, width } = this.native.getBoundingClientRect();\n const value = this.roundToPrecision(((coordinate - left) / width) * this.max, this.precision);\n\n return Math.min(Math.max(value, 0), this.max);\n }\n\n /**\n * Rounds a given number to the nearest specified precision.\n * @param {number} numberToRound The number to be rounded.\n * @param {number} [precision] The precision to which the number should be rounded.\n * @returns {number} - The rounded number.\n * @example\n * roundToPrecision(2.3); // Returns 2.5\n * roundToPrecision(2.3, 0.1); // Returns 2.3\n * roundToPrecision(2.6, 1); // Returns 3\n */\n roundToPrecision(numberToRound, precision = 0.5) {\n const multiplier = 1 / precision;\n return Math.ceil(numberToRound * multiplier) / multiplier;\n }\n}\n","import Rate from './rate.element.js';\n\nexport default Rate;\n\nRate.define('wje-rate', Rate);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-rate.js","sources":["../packages/wje-rate/rate.element.js","../packages/wje-rate/rate.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Rate` is a custom web component that represents a rating component.\n * @summary This element represents a rating component.\n * @documentation https://elements.webjet.sk/components/rate\n * @status stable\n * @augments {WJElement}\n * @attribute {number} precision - The precision of the rating component.\n * @attribute {number} max - The maximum value of the rating component.\n * @attribute {Array<string>} icons - The icons of the rating component.\n * @csspart native - The native part of the rating component.\n * @cssproperty [--wje-rate-gap=.25rem] - Defines the spacing (gap) between individual items in the rating component. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`) to adjust the distance between rating elements.\n * @cssproperty [--wje-rate-color=var(--wje-color-contrast-11)] - Specifies the default color of the rating items. Accepts any valid CSS color value, including named colors, hex values, RGB, or CSS variables.\n * @cssproperty [--wje-rate-selected-color=var(--wje-color-danger-9)] - Sets the color for selected or highlighted rating items. This property helps visually distinguish selected ratings. Accepts any valid CSS color value.\n * @tag wje-rate\n */\n\nexport default class Rate extends WJElement {\n /**\n * Creates an instance of Rate.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Sets the precision of the rating component.\n * @param {number} value The value to set.\n */\n set precision(value) {\n this.setAttribute('precision', value);\n }\n\n /**\n * Gets the precision of the rating component.\n * @returns {number} The value of the precision.\n */\n get precision() {\n return this.hasAttribute('precision') ? +this.getAttribute('precision') : 1;\n }\n\n /**\n * Sets the maximum value of the rating component.\n * @param {number} value The value to set.\n */\n set max(value) {\n this.setAttribute('max', value);\n }\n\n /**\n * Gets the maximum value of the rating component.\n * @returns {number} The value of the maximum value.\n */\n get max() {\n return this.hasAttribute('icons') ? this.icons.length : +this.getAttribute('max');\n }\n\n /**\n * Sets the icons of the rating component.\n * @param {Array<string>} value The value to set.\n */\n set icons(value) {\n return value;\n }\n\n /**\n * Gets the icons of the rating component.\n * @returns {Array<string>} The value of the icons.\n */\n get icons() {\n return this.hasAttribute('icons') ? JSON.parse(this.getAttribute('icons').replace(/'/g, '\"')) : ['star'];\n }\n\n /**\n * Sets the value of the rating component.\n * @param {number} value The value to set.\n */\n set value(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Gets the value of the rating component.\n * @returns {number} The value of the rating component.\n */\n get value() {\n return this.hasAttribute('value') ? +this.getAttribute('value') : 0;\n }\n\n /**\n * Sets the hover value of the rating component.\n * @type {string}\n */\n className = 'Rate';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\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 ['is-hover', 'value', 'max', 'disabled', 'readonly'];\n }\n\n /**\n * Called when an attribute changes.\n * @param {string} name The name of the attribute that changed.\n * @param {string} old The old value of the attribute.\n * @param {string} newName The new value of the attribute.\n */\n attributeChangedCallback(name, old, newName) {\n if (super.attributeChangedCallback) {\n super.attributeChangedCallback(name, old, newName);\n }\n\n if (name === 'is-hover') {\n // this.draw();\n }\n\n if (old !== newName && name !== 'is-hover') {\n this.syncAria();\n }\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 rating component.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-rate');\n\n this.native = native;\n\n if (this.hasAttribute('icons')) {\n let icons = this.icons;\n for (let i = 0; i < icons.length; i++) {\n native.appendChild(this.createIcons(i));\n }\n } else {\n for (let i = 0; i < this.max; i++) {\n native.appendChild(this.createIcons(i));\n }\n }\n\n this.changeRate();\n\n fragment.appendChild(native);\n\n return fragment;\n }\n\n /**\n * Adds event listeners after the component is drawn.\n */\n afterDraw() {\n this.syncAria();\n if (this.hasAttribute('disabled') || this.hasAttribute('readonly')) {\n return;\n }\n\n this.addEventListener('mouseenter', this.onMouseEnter);\n this.addEventListener('mouseleave', this.onMouseLeave);\n this.addEventListener('mousemove', this.onMouseMove);\n this.addEventListener('touchstart', this.onTouchStart);\n this.addEventListener('touchend', this.onTouchEnd);\n this.addEventListener('touchmove', this.onTouchMove);\n this.addEventListener('click', this.onClick);\n }\n\n /**\n * Creates the icons for the rating component.\n * @param {number} i The index of the icon.\n * @returns {Element} The icon element.\n */\n createIcons(i) {\n let div = document.createElement('div');\n div.classList.add('wje-rate-icon');\n\n let icon = this.getIcons(i);\n let clone = icon.cloneNode(true);\n\n div.appendChild(icon);\n div.appendChild(clone);\n\n return div;\n }\n\n /**\n * Changes the rate of the rating component.\n */\n changeRate() {\n const icons = this.native.children;\n const rateValue =\n this.value !== this.hoverValue && this.hoverValue !== 0 && this.hoverValue !== undefined\n ? this.hoverValue\n : this.value;\n\n for (let i = 0; i < icons.length; i++) {\n const icon = icons[i];\n const firstIcon = icon.querySelector('wje-icon:first-child');\n const lastIcon = icon.querySelector('wje-icon:last-child');\n\n const isSelected = i < rateValue;\n const isPartial = rateValue > i && rateValue < i + 1;\n\n if (isSelected) {\n icon.classList.add('selected');\n if (this.hasAttribute('selected') && this.getAttribute('selected') === 'filled') {\n lastIcon.setAttribute('filled', '');\n }\n } else {\n icon.classList.remove('selected');\n lastIcon.removeAttribute('filled');\n }\n\n if (isPartial) {\n const percent = ((rateValue - i) * 100).toFixed(2);\n icon.classList.add('half');\n\n firstIcon.style.clipPath = `inset(0 0 0 ${percent}%)`;\n lastIcon.style.clipPath = `inset(0 ${100 - percent}% 0 0)`;\n\n lastIcon.removeAttribute('hidden');\n } else {\n icon.classList.remove('half');\n firstIcon.style.clipPath = ``;\n lastIcon.style.clipPath = ``;\n lastIcon.setAttribute('hidden', '');\n }\n\n icon.setAttribute('data-index', i);\n icon.setAttribute('data-rate', rateValue);\n }\n\n this.syncAria();\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n this.setAriaState({\n role: 'slider',\n valuemin: 0,\n valuemax: this.max,\n valuenow: this.value,\n disabled: this.hasAttribute('disabled'),\n readonly: this.hasAttribute('readonly'),\n });\n }\n\n /**\n * Event handler for the mouse enter event.\n * @param {Event} e The event.\n */\n onMouseEnter = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the mouse leave event.\n * @param {Event} e The event.\n */\n onMouseLeave = (e) => {\n e.preventDefault();\n\n this.hoverValue = 0;\n this.changeRate();\n };\n\n /**\n * Event handler for the mouse move event.\n * @param {Event} e The event.\n */\n onMouseMove = (e) => {\n e.preventDefault();\n\n let newValue = +this.getValueFromXPosition(e.clientX);\n if (newValue !== +this.hoverValue) {\n this.hoverValue = newValue;\n this.changeRate();\n }\n };\n\n /**\n * Event handler for the touch start event.\n * @param {Event} e The event.\n */\n onTouchStart = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the touch end event.\n * @param {Event} e The event.\n */\n onTouchEnd = (e) => {\n e.preventDefault();\n\n this.hoverValue = 0;\n this.changeRate();\n };\n\n /**\n * Event handler for the touch move event.\n * @param {Event} e The event.\n */\n onTouchMove = (e) => {\n e.preventDefault();\n\n this.hoverValue = this.getValueFromXPosition(e.touches[0].clientX);\n this.changeRate();\n };\n\n /**\n * Event handler for the click event.\n * @param {Event} e The event.\n */\n onClick = (e) => {\n e.preventDefault();\n\n this.value = +this.hoverValue;\n };\n\n /**\n * Returns the icons for the rating component.\n * @param {number} index The index of the icon.\n * @returns {Element} The icon element.\n */\n getIcons(index) {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', this.max ? this.icons[0] : this.icons[index]);\n\n if (this.hasAttribute('filled')) icon.setAttribute('filled', '');\n\n return icon;\n }\n\n /**\n * Returns the value from the x position.\n * @param {number} coordinate The x coordinate.\n * @returns {number} The value from the x position.\n */\n getValueFromXPosition(coordinate) {\n const { left, right, width } = this.native.getBoundingClientRect();\n const value = this.roundToPrecision(((coordinate - left) / width) * this.max, this.precision);\n\n return Math.min(Math.max(value, 0), this.max);\n }\n\n /**\n * Rounds a given number to the nearest specified precision.\n * @param {number} numberToRound The number to be rounded.\n * @param {number} [precision] The precision to which the number should be rounded.\n * @returns {number} - The rounded number.\n * @example\n * roundToPrecision(2.3); // Returns 2.5\n * roundToPrecision(2.3, 0.1); // Returns 2.3\n * roundToPrecision(2.6, 1); // Returns 3\n */\n roundToPrecision(numberToRound, precision = 0.5) {\n const multiplier = 1 / precision;\n return Math.ceil(numberToRound * multiplier) / multiplier;\n }\n}\n","import Rate from './rate.element.js';\n\nexport default Rate;\n\nRate.define('wje-rate', Rate);\n"],"names":["Rate","WJElement","constructor","super","className","onMouseEnter","e","preventDefault","this","hoverValue","getValueFromXPosition","clientX","changeRate","onMouseLeave","onMouseMove","newValue","onTouchStart","touches","onTouchEnd","onTouchMove","onClick","value","setAttribute","precision","hasAttribute","getAttribute","max","icons","length","JSON","parse","replace","cssStyleSheet","observedAttributes","name","old","newName","attributeChangedCallback","syncAria","setupAttributes","isShadowRoot","draw","fragment","document","createDocumentFragment","native","createElement","classList","add","i","appendChild","createIcons","addEventListener","div","icon","getIcons","clone","cloneNode","children","rateValue","firstIcon","querySelector","lastIcon","isPartial","remove","removeAttribute","percent","toFixed","style","clipPath","setAriaState","role","valuemin","valuemax","valuenow","disabled","readonly","index","coordinate","left","right","width","getBoundingClientRect","roundToPrecision","Math","min","numberToRound","multiplier","ceil","define"],"mappings":"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"}
|
|
@@ -1,128 +1,53 @@
|
|
|
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 { Localizer } from "./localize.js";
|
|
5
|
-
import
|
|
6
|
-
class
|
|
7
|
-
/**
|
|
8
|
-
* Creates an instance of RelativeTime.
|
|
9
|
-
* @class
|
|
10
|
-
*/
|
|
4
|
+
import { Localizer as t } from "./localize.js";
|
|
5
|
+
import e from "./wje-element.js";
|
|
6
|
+
class i extends e {
|
|
11
7
|
constructor() {
|
|
12
8
|
super();
|
|
13
|
-
/**
|
|
14
|
-
* Sets the lang of the relative time component.
|
|
15
|
-
* @type {string}
|
|
16
|
-
*/
|
|
17
9
|
__publicField(this, "className", "RelativeTime");
|
|
18
|
-
this.localizer = new
|
|
10
|
+
this.localizer = new t(this);
|
|
19
11
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
* @param value
|
|
23
|
-
*/
|
|
24
|
-
set date(value) {
|
|
25
|
-
this.setAttribute("date", value);
|
|
12
|
+
set date(t2) {
|
|
13
|
+
this.setAttribute("date", t2);
|
|
26
14
|
}
|
|
27
|
-
/**
|
|
28
|
-
* Gets the date of the relative time component.
|
|
29
|
-
* @returns {string}
|
|
30
|
-
*/
|
|
31
15
|
get date() {
|
|
32
16
|
return this.getAttribute("date");
|
|
33
17
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
* @param value
|
|
37
|
-
*/
|
|
38
|
-
set objectDate(value) {
|
|
39
|
-
this.setAttribute("object-date", value);
|
|
18
|
+
set objectDate(t2) {
|
|
19
|
+
this.setAttribute("object-date", t2);
|
|
40
20
|
}
|
|
41
|
-
/**
|
|
42
|
-
* Gets the object date of the relative time component.
|
|
43
|
-
* @returns {Date}
|
|
44
|
-
*/
|
|
45
21
|
get objectDate() {
|
|
46
|
-
let
|
|
47
|
-
|
|
48
|
-
if (!!inputDate && inputDate !== "") {
|
|
49
|
-
inputDate = this.isISODate(inputDate) ? inputDate : +inputDate * 1e3;
|
|
50
|
-
date = new Date(inputDate);
|
|
51
|
-
}
|
|
52
|
-
return date;
|
|
22
|
+
let t2 = /* @__PURE__ */ new Date(), e2 = this.date;
|
|
23
|
+
return e2 && "" !== e2 && (e2 = this.isISODate(e2) ? e2 : 1e3 * +e2, t2 = new Date(e2)), t2;
|
|
53
24
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Returns the list of attributes to observe for changes.
|
|
56
|
-
* @static
|
|
57
|
-
* @returns {Array<string>}
|
|
58
|
-
*/
|
|
59
25
|
static get observedAttributes() {
|
|
60
26
|
return ["date", "lang"];
|
|
61
27
|
}
|
|
62
|
-
attributeChangedCallback(
|
|
28
|
+
attributeChangedCallback(t2, e2, i2) {
|
|
63
29
|
var _a;
|
|
64
|
-
(_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this,
|
|
65
|
-
if (oldValue === newValue) return;
|
|
66
|
-
if (this.native) {
|
|
67
|
-
this.native.innerText = this.getRelativeTimeString();
|
|
68
|
-
if (this.date) this.native.setAttribute("datetime", this.date);
|
|
69
|
-
else this.native.removeAttribute("datetime");
|
|
70
|
-
}
|
|
30
|
+
(_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, t2, e2, i2), e2 !== i2 && this.native && (this.native.innerText = this.getRelativeTimeString(), this.date ? this.native.setAttribute("datetime", this.date) : this.native.removeAttribute("datetime"));
|
|
71
31
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Sets up the attributes for the component.
|
|
74
|
-
*/
|
|
75
32
|
setupAttributes() {
|
|
76
|
-
this.isShadowRoot = "open";
|
|
77
|
-
this.setAriaState({ role: "status" });
|
|
33
|
+
this.isShadowRoot = "open", this.setAriaState({ role: "status" });
|
|
78
34
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Draws the component for the relative time.
|
|
81
|
-
* @returns {DocumentFragment}
|
|
82
|
-
*/
|
|
83
35
|
draw() {
|
|
84
|
-
let
|
|
85
|
-
|
|
86
|
-
element.setAttribute("part", "native");
|
|
87
|
-
element.classList.add("native-relative-time");
|
|
88
|
-
element.innerText = this.getRelativeTimeString();
|
|
89
|
-
if (this.date) element.setAttribute("datetime", this.date);
|
|
90
|
-
fragment.appendChild(element);
|
|
91
|
-
this.native = element;
|
|
92
|
-
return fragment;
|
|
36
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("div");
|
|
37
|
+
return e2.setAttribute("part", "native"), e2.classList.add("native-relative-time"), e2.innerText = this.getRelativeTimeString(), this.date && e2.setAttribute("datetime", this.date), t2.appendChild(e2), this.native = e2, t2;
|
|
93
38
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (this.objectDate.toString() === "Invalid Date" || this.objectDate.toString() === "NaN") {
|
|
99
|
-
return "";
|
|
100
|
-
}
|
|
101
|
-
const timeMs = this.objectDate.getTime();
|
|
102
|
-
const deltaSeconds = Math.round((timeMs - Date.now()) / 1e3);
|
|
103
|
-
const cutoffs = [60, 3600, 86400, 86400 * 7, 86400 * 30, 86400 * 365, Infinity];
|
|
104
|
-
const units = ["second", "minute", "hour", "day", "week", "month", "year"];
|
|
105
|
-
const unitIndex = cutoffs.findIndex((cutoff) => cutoff > Math.abs(deltaSeconds));
|
|
106
|
-
const divisor = unitIndex ? cutoffs[unitIndex - 1] : 1;
|
|
107
|
-
return this.localizer.relativeTime(
|
|
108
|
-
this.getAttribute("lang"),
|
|
109
|
-
Math.trunc(deltaSeconds / divisor),
|
|
110
|
-
units[unitIndex],
|
|
111
|
-
{ numeric: "auto" }
|
|
112
|
-
);
|
|
39
|
+
getRelativeTimeString(t2 = navigator.language) {
|
|
40
|
+
if ("Invalid Date" === this.objectDate.toString() || "NaN" === this.objectDate.toString()) return "";
|
|
41
|
+
const e2 = this.objectDate.getTime(), i2 = Math.round((e2 - Date.now()) / 1e3), a = [60, 3600, 86400, 604800, 2592e3, 31536e3, 1 / 0], r = a.findIndex((t3) => t3 > Math.abs(i2)), s = r ? a[r - 1] : 1;
|
|
42
|
+
return this.localizer.relativeTime(this.getAttribute("lang"), Math.trunc(i2 / s), ["second", "minute", "hour", "day", "week", "month", "year"][r], { numeric: "auto" });
|
|
113
43
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
* @returns {boolean} True if the string is an ISO date, false otherwise.
|
|
118
|
-
*/
|
|
119
|
-
isISODate(str) {
|
|
120
|
-
const date = new Date(str);
|
|
121
|
-
return !isNaN(date.getTime());
|
|
44
|
+
isISODate(t2) {
|
|
45
|
+
const e2 = new Date(t2);
|
|
46
|
+
return !isNaN(e2.getTime());
|
|
122
47
|
}
|
|
123
48
|
}
|
|
124
|
-
|
|
49
|
+
i.define("wje-relative-time", i);
|
|
125
50
|
export {
|
|
126
|
-
|
|
51
|
+
i as default
|
|
127
52
|
};
|
|
128
53
|
//# sourceMappingURL=wje-relative-time.js.map
|