aeico-components 0.1.3 → 0.1.5
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/alert.cjs +6 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +6 -0
- package/dist/alert.js.map +1 -0
- package/dist/badge.cjs +6 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.js +6 -0
- package/dist/badge.js.map +1 -0
- package/dist/breadcrumb.cjs +7 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +7 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +6 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +6 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +6 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +6 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +6 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.cjs +6 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +6 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunks/aeico-component.cjs +17 -0
- package/dist/chunks/aeico-component.cjs.map +1 -0
- package/dist/chunks/aeico-component.js +18 -0
- package/dist/chunks/aeico-component.js.map +1 -0
- package/dist/chunks/aeico-field.cjs +179 -0
- package/dist/chunks/aeico-field.cjs.map +1 -0
- package/dist/chunks/aeico-field.js +180 -0
- package/dist/chunks/aeico-field.js.map +1 -0
- package/dist/chunks/alert.cjs +170 -0
- package/dist/chunks/alert.cjs.map +1 -0
- package/dist/chunks/alert.js +171 -0
- package/dist/chunks/alert.js.map +1 -0
- package/dist/chunks/badge.cjs +85 -0
- package/dist/chunks/badge.cjs.map +1 -0
- package/dist/chunks/badge.js +86 -0
- package/dist/chunks/badge.js.map +1 -0
- package/dist/chunks/breadcrumb-item.cjs +261 -0
- package/dist/chunks/breadcrumb-item.cjs.map +1 -0
- package/dist/chunks/breadcrumb-item.js +262 -0
- package/dist/chunks/breadcrumb-item.js.map +1 -0
- package/dist/chunks/button-group.cjs +79 -0
- package/dist/chunks/button-group.cjs.map +1 -0
- package/dist/chunks/button-group.js +80 -0
- package/dist/chunks/button-group.js.map +1 -0
- package/dist/chunks/button.cjs +348 -0
- package/dist/chunks/button.cjs.map +1 -0
- package/dist/chunks/button.js +349 -0
- package/dist/chunks/button.js.map +1 -0
- package/dist/chunks/card.cjs +93 -0
- package/dist/chunks/card.cjs.map +1 -0
- package/dist/chunks/card.js +94 -0
- package/dist/chunks/card.js.map +1 -0
- package/dist/chunks/checkbox.cjs +73 -0
- package/dist/chunks/checkbox.cjs.map +1 -0
- package/dist/chunks/checkbox.js +74 -0
- package/dist/chunks/checkbox.js.map +1 -0
- package/dist/chunks/color.cjs +4 -0
- package/dist/chunks/color.cjs.map +1 -0
- package/dist/chunks/color.js +5 -0
- package/dist/chunks/color.js.map +1 -0
- package/dist/chunks/detail.cjs +143 -0
- package/dist/chunks/detail.cjs.map +1 -0
- package/dist/chunks/detail.js +144 -0
- package/dist/chunks/detail.js.map +1 -0
- package/dist/chunks/dialog.cjs +117 -0
- package/dist/chunks/dialog.cjs.map +1 -0
- package/dist/chunks/dialog.js +118 -0
- package/dist/chunks/dialog.js.map +1 -0
- package/dist/chunks/divider.cjs +80 -0
- package/dist/chunks/divider.cjs.map +1 -0
- package/dist/chunks/divider.js +81 -0
- package/dist/chunks/divider.js.map +1 -0
- package/dist/chunks/dropdown-button.cjs +534 -0
- package/dist/chunks/dropdown-button.cjs.map +1 -0
- package/dist/chunks/dropdown-button.js +535 -0
- package/dist/chunks/dropdown-button.js.map +1 -0
- package/dist/chunks/icon-button.cjs +35 -0
- package/dist/chunks/icon-button.cjs.map +1 -0
- package/dist/chunks/icon-button.js +36 -0
- package/dist/chunks/icon-button.js.map +1 -0
- package/dist/chunks/icon.cjs +78 -0
- package/dist/chunks/icon.cjs.map +1 -0
- package/dist/chunks/icon.js +79 -0
- package/dist/chunks/icon.js.map +1 -0
- package/dist/chunks/navbar.cjs +142 -0
- package/dist/chunks/navbar.cjs.map +1 -0
- package/dist/chunks/navbar.js +143 -0
- package/dist/chunks/navbar.js.map +1 -0
- package/dist/chunks/radio.cjs +181 -0
- package/dist/chunks/radio.cjs.map +1 -0
- package/dist/chunks/radio.js +182 -0
- package/dist/chunks/radio.js.map +1 -0
- package/dist/chunks/select.cjs +350 -0
- package/dist/chunks/select.cjs.map +1 -0
- package/dist/chunks/select.js +351 -0
- package/dist/chunks/select.js.map +1 -0
- package/dist/chunks/size.cjs +4 -0
- package/dist/chunks/size.cjs.map +1 -0
- package/dist/chunks/size.js +5 -0
- package/dist/chunks/size.js.map +1 -0
- package/dist/chunks/slider.cjs +648 -0
- package/dist/chunks/slider.cjs.map +1 -0
- package/dist/chunks/slider.js +649 -0
- package/dist/chunks/slider.js.map +1 -0
- package/dist/chunks/switch.cjs +73 -0
- package/dist/chunks/switch.cjs.map +1 -0
- package/dist/chunks/switch.js +74 -0
- package/dist/chunks/switch.js.map +1 -0
- package/dist/chunks/tab-panel.cjs +165 -0
- package/dist/chunks/tab-panel.cjs.map +1 -0
- package/dist/chunks/tab-panel.js +166 -0
- package/dist/chunks/tab-panel.js.map +1 -0
- package/dist/chunks/tag.cjs +108 -0
- package/dist/chunks/tag.cjs.map +1 -0
- package/dist/chunks/tag.js +109 -0
- package/dist/chunks/tag.js.map +1 -0
- package/dist/chunks/text-input.cjs +59 -0
- package/dist/chunks/text-input.cjs.map +1 -0
- package/dist/chunks/text-input.js +60 -0
- package/dist/chunks/text-input.js.map +1 -0
- package/dist/chunks/variables.cjs +372 -0
- package/dist/chunks/variables.cjs.map +1 -0
- package/dist/chunks/variables.js +373 -0
- package/dist/chunks/variables.js.map +1 -0
- package/dist/detail.cjs +6 -0
- package/dist/detail.cjs.map +1 -0
- package/dist/detail.js +6 -0
- package/dist/detail.js.map +1 -0
- package/dist/dialog.cjs +6 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +6 -0
- package/dist/dialog.js.map +1 -0
- package/dist/divider.cjs +6 -0
- package/dist/divider.cjs.map +1 -0
- package/dist/divider.js +6 -0
- package/dist/divider.js.map +1 -0
- package/dist/dropdown.cjs +7 -0
- package/dist/dropdown.cjs.map +1 -0
- package/dist/dropdown.js +7 -0
- package/dist/dropdown.js.map +1 -0
- package/dist/icon-button.cjs +6 -0
- package/dist/icon-button.cjs.map +1 -0
- package/dist/icon-button.js +6 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/icon.cjs +6 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +6 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.cjs +93 -4168
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -4167
- package/dist/index.js.map +1 -1
- package/dist/navbar.cjs +6 -0
- package/dist/navbar.cjs.map +1 -0
- package/dist/navbar.js +6 -0
- package/dist/navbar.js.map +1 -0
- package/dist/radio-group.cjs +7 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +7 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/select.cjs +99 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +99 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.cjs +6 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +6 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.cjs +6 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +6 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.cjs +8 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +8 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag.cjs +5 -0
- package/dist/tag.cjs.map +1 -0
- package/dist/tag.js +5 -0
- package/dist/tag.js.map +1 -0
- package/dist/text-input.cjs +6 -0
- package/dist/text-input.cjs.map +1 -0
- package/dist/text-input.js +6 -0
- package/dist/text-input.js.map +1 -0
- package/dist/types/aeico-field.d.ts +5 -5
- package/dist/types/button/button.d.ts +2 -1
- package/dist/types/checkbox/checkbox.d.ts +5 -5
- package/dist/types/index.d.ts +2 -0
- package/dist/types/progress-bar/defines.d.ts +1 -0
- package/dist/types/progress-bar/index.d.ts +3 -0
- package/dist/types/progress-bar/progress-bar.d.ts +37 -0
- package/dist/types/radio-group/radio-group.d.ts +1 -1
- package/dist/types/select/select.d.ts +1 -1
- package/dist/types/switch/switch.d.ts +5 -5
- package/package.json +16 -4
- package/src/aeico-field.ts +12 -8
- package/src/button/button.ts +11 -13
- package/src/checkbox/checkbox.ts +4 -4
- package/src/index.ts +2 -0
- package/src/navbar/navbar.ts +1 -3
- package/src/progress-bar/defines.ts +8 -0
- package/src/progress-bar/index.ts +3 -0
- package/src/progress-bar/progress-bar.ts +80 -0
- package/src/radio-group/radio-group.ts +1 -1
- package/src/select/select.ts +1 -1
- package/src/styles/components/progress-bar.css +44 -0
- package/src/switch/switch.ts +4 -4
- package/src/tabs/tab.ts +1 -1
- package/src/tabs/tabs.ts +1 -2
- package/src/utils.ts +1 -0
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const aeicoField = require("./aeico-field.cjs");
|
|
3
|
+
const aeico = require("aeico");
|
|
4
|
+
const variables = require("./variables.cjs");
|
|
5
|
+
const size = require("./size.cjs");
|
|
6
|
+
const color = require("./color.cjs");
|
|
7
|
+
const style = `:host {
|
|
8
|
+
display: block;
|
|
9
|
+
flex: 1;
|
|
10
|
+
min-width: 0;
|
|
11
|
+
font-size: var(--size-base);
|
|
12
|
+
|
|
13
|
+
/* Default color when no [color] attribute — overridden by color.css :host([color=...]) */
|
|
14
|
+
--color-solid: var(--color-primary);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.range-container {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: 6px;
|
|
21
|
+
width: 100%;
|
|
22
|
+
height: 26px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
input[type="range"] {
|
|
26
|
+
flex: 1;
|
|
27
|
+
margin: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.input-range,
|
|
31
|
+
.slider-input,
|
|
32
|
+
input[type="range"] {
|
|
33
|
+
-webkit-appearance: none;
|
|
34
|
+
appearance: none;
|
|
35
|
+
width: 100%;
|
|
36
|
+
height: 0.333em;
|
|
37
|
+
border-radius: 2px;
|
|
38
|
+
background: var(--border-subtle);
|
|
39
|
+
outline: none;
|
|
40
|
+
cursor: pointer;
|
|
41
|
+
margin: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.input-range {
|
|
45
|
+
margin: 10px 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.input-range::-webkit-slider-thumb,
|
|
49
|
+
.slider-input::-webkit-slider-thumb,
|
|
50
|
+
input[type="range"]::-webkit-slider-thumb {
|
|
51
|
+
-webkit-appearance: none;
|
|
52
|
+
appearance: none;
|
|
53
|
+
width: 1.167em;
|
|
54
|
+
height: 1.167em;
|
|
55
|
+
border-radius: 50%;
|
|
56
|
+
background: var(--color-solid);
|
|
57
|
+
cursor: pointer;
|
|
58
|
+
transition: background 0.12s, transform 0.12s;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.input-range::-webkit-slider-thumb:hover,
|
|
62
|
+
.slider-input::-webkit-slider-thumb:hover,
|
|
63
|
+
input[type="range"]:hover::-webkit-slider-thumb {
|
|
64
|
+
background: var(--color-solid-hover);
|
|
65
|
+
transform: scale(1.1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.input-range::-webkit-slider-thumb:active,
|
|
69
|
+
.slider-input::-webkit-slider-thumb:active,
|
|
70
|
+
input[type="range"]:active::-webkit-slider-thumb {
|
|
71
|
+
background: var(--color-solid-hover);
|
|
72
|
+
transform: scale(1.2);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.input-range:focus::-webkit-slider-thumb,
|
|
76
|
+
.slider-input:focus::-webkit-slider-thumb,
|
|
77
|
+
input[type="range"]:focus::-webkit-slider-thumb {
|
|
78
|
+
background: var(--color-solid);
|
|
79
|
+
outline: none;
|
|
80
|
+
box-shadow: none;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.input-range:focus:hover::-webkit-slider-thumb,
|
|
84
|
+
.slider-input:focus:hover::-webkit-slider-thumb,
|
|
85
|
+
input[type="range"]:focus:hover::-webkit-slider-thumb {
|
|
86
|
+
background: var(--color-solid-hover);
|
|
87
|
+
outline: none;
|
|
88
|
+
box-shadow: none;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.input-range:focus:active::-webkit-slider-thumb,
|
|
92
|
+
.slider-input:focus:active::-webkit-slider-thumb,
|
|
93
|
+
input[type="range"]:focus:active::-webkit-slider-thumb {
|
|
94
|
+
background: var(--color-solid-hover);
|
|
95
|
+
outline: none;
|
|
96
|
+
box-shadow: none;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.input-range::-moz-range-thumb,
|
|
100
|
+
.slider-input::-moz-range-thumb,
|
|
101
|
+
input[type="range"]::-moz-range-thumb {
|
|
102
|
+
width: 1.167em;
|
|
103
|
+
height: 1.167em;
|
|
104
|
+
border: none;
|
|
105
|
+
border-radius: 50%;
|
|
106
|
+
background: var(--color-solid);
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
transition: background 0.12s, transform 0.12s;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.input-range::-moz-range-thumb:hover,
|
|
112
|
+
.slider-input::-moz-range-thumb:hover,
|
|
113
|
+
input[type="range"]:hover::-moz-range-thumb {
|
|
114
|
+
background: var(--color-solid-hover);
|
|
115
|
+
transform: scale(1.1);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.input-range::-moz-range-thumb:active,
|
|
119
|
+
.slider-input::-moz-range-thumb:active,
|
|
120
|
+
input[type="range"]:active::-moz-range-thumb {
|
|
121
|
+
background: var(--color-solid-hover);
|
|
122
|
+
transform: scale(1.2);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.input-range:focus::-moz-range-thumb,
|
|
126
|
+
.slider-input:focus::-moz-range-thumb,
|
|
127
|
+
input[type="range"]:focus::-moz-range-thumb {
|
|
128
|
+
background: var(--color-solid);
|
|
129
|
+
outline: none;
|
|
130
|
+
box-shadow: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.input-range:focus:hover::-moz-range-thumb,
|
|
134
|
+
.slider-input:focus:hover::-moz-range-thumb,
|
|
135
|
+
input[type="range"]:focus:hover::-moz-range-thumb {
|
|
136
|
+
background: var(--color-solid-hover);
|
|
137
|
+
outline: none;
|
|
138
|
+
box-shadow: none;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.input-range:focus:active::-moz-range-thumb,
|
|
142
|
+
.slider-input:focus:active::-moz-range-thumb,
|
|
143
|
+
input[type="range"]:focus:active::-moz-range-thumb {
|
|
144
|
+
background: var(--color-solid-hover);
|
|
145
|
+
outline: none;
|
|
146
|
+
box-shadow: none;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.input-range:disabled,
|
|
150
|
+
.slider-input:disabled,
|
|
151
|
+
input[type="range"]:disabled {
|
|
152
|
+
opacity: 0.5;
|
|
153
|
+
cursor: not-allowed;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.input-range:disabled::-webkit-slider-thumb,
|
|
157
|
+
.slider-input:disabled::-webkit-slider-thumb,
|
|
158
|
+
input[type="range"]:disabled::-webkit-slider-thumb {
|
|
159
|
+
cursor: not-allowed;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.input-range:disabled::-moz-range-thumb,
|
|
163
|
+
.slider-input:disabled::-moz-range-thumb,
|
|
164
|
+
input[type="range"]:disabled::-moz-range-thumb {
|
|
165
|
+
cursor: not-allowed;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.value-label {
|
|
169
|
+
min-width: 14px;
|
|
170
|
+
text-align: center;
|
|
171
|
+
font-size: 12px;
|
|
172
|
+
color: var(--color-text-muted);
|
|
173
|
+
font-weight: 500;
|
|
174
|
+
font-variant-numeric: tabular-nums;
|
|
175
|
+
pointer-events: none;
|
|
176
|
+
user-select: none;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.reset-btn {
|
|
180
|
+
width: 1.333em;
|
|
181
|
+
height: 1.333em;
|
|
182
|
+
border: none;
|
|
183
|
+
border-radius: var(--reset-btn-border-radius);
|
|
184
|
+
cursor: pointer;
|
|
185
|
+
display: flex;
|
|
186
|
+
align-items: center;
|
|
187
|
+
justify-content: center;
|
|
188
|
+
background: var(--reset-btn-bg);
|
|
189
|
+
color: var(--reset-btn-color);
|
|
190
|
+
transition: var(--reset-btn-transition);
|
|
191
|
+
flex-shrink: 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.reset-btn:hover {
|
|
195
|
+
background: var(--reset-btn-bg-hover);
|
|
196
|
+
color: var(--reset-btn-color-hover);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.clear-btn {
|
|
200
|
+
width: 1.333em;
|
|
201
|
+
height: 1.333em;
|
|
202
|
+
border: none;
|
|
203
|
+
border-radius: var(--clear-btn-border-radius);
|
|
204
|
+
cursor: pointer;
|
|
205
|
+
display: flex;
|
|
206
|
+
align-items: center;
|
|
207
|
+
justify-content: center;
|
|
208
|
+
background: var(--clear-btn-bg);
|
|
209
|
+
color: var(--clear-btn-color);
|
|
210
|
+
transition: var(--clear-btn-transition);
|
|
211
|
+
flex-shrink: 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.clear-btn:hover {
|
|
215
|
+
background: var(--clear-btn-bg-hover);
|
|
216
|
+
color: var(--clear-btn-color-hover);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
.input-range,
|
|
222
|
+
.slider-input,
|
|
223
|
+
input[type="range"] {
|
|
224
|
+
height: 0.333em;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.input-range::-webkit-slider-thumb,
|
|
228
|
+
.slider-input::-webkit-slider-thumb,
|
|
229
|
+
input[type="range"]::-webkit-slider-thumb {
|
|
230
|
+
width: 1.167em;
|
|
231
|
+
height: 1.167em;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.input-range::-moz-range-thumb,
|
|
235
|
+
.slider-input::-moz-range-thumb,
|
|
236
|
+
input[type="range"]::-moz-range-thumb {
|
|
237
|
+
width: 1.167em;
|
|
238
|
+
height: 1.167em;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.value-label {
|
|
242
|
+
font-size: 1em;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.value-input {
|
|
246
|
+
width: 56px;
|
|
247
|
+
padding: 0 4px;
|
|
248
|
+
height: 22px;
|
|
249
|
+
border: 1px solid var(--border-subtle);
|
|
250
|
+
border-radius: 4px;
|
|
251
|
+
background: transparent;
|
|
252
|
+
color: var(--color-text);
|
|
253
|
+
font-size: 12px;
|
|
254
|
+
text-align: center;
|
|
255
|
+
outline: none;
|
|
256
|
+
flex-shrink: 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.value-input:focus {
|
|
260
|
+
border-color: var(--color-solid);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.value-input:disabled {
|
|
264
|
+
opacity: 0.4;
|
|
265
|
+
cursor: not-allowed;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
:host([tracked]) .input-range,
|
|
269
|
+
:host([tracked]) .slider-input,
|
|
270
|
+
:host([tracked]) input[type="range"] {
|
|
271
|
+
background: linear-gradient(
|
|
272
|
+
to right,
|
|
273
|
+
var(--color-solid) var(--fill-pct, 0%),
|
|
274
|
+
var(--border-subtle) var(--fill-pct, 0%)
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.range-wrapper {
|
|
279
|
+
flex: 1;
|
|
280
|
+
min-width: 0;
|
|
281
|
+
display: flex;
|
|
282
|
+
flex-direction: column;
|
|
283
|
+
position: relative; /* marks-container positions against this */
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.range-wrapper input[type="range"] {
|
|
287
|
+
width: 100%;
|
|
288
|
+
flex: none;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* Marks are absolutely positioned so they don't affect range-wrapper's layout height */
|
|
292
|
+
.marks-container {
|
|
293
|
+
position: absolute;
|
|
294
|
+
top: 100%;
|
|
295
|
+
left: 7px; /* inset by half thumb so 0%/100% align with track ends */
|
|
296
|
+
right: 7px;
|
|
297
|
+
height: 18px;
|
|
298
|
+
margin-top: 2px;
|
|
299
|
+
overflow: visible;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.mark {
|
|
303
|
+
position: absolute;
|
|
304
|
+
transform: translateX(-50%);
|
|
305
|
+
display: flex;
|
|
306
|
+
flex-direction: column;
|
|
307
|
+
align-items: center;
|
|
308
|
+
gap: 2px;
|
|
309
|
+
pointer-events: none;
|
|
310
|
+
user-select: none;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.mark::before {
|
|
314
|
+
content: '';
|
|
315
|
+
display: block;
|
|
316
|
+
width: 1px;
|
|
317
|
+
height: 4px;
|
|
318
|
+
background: var(--border-default, var(--border-subtle));
|
|
319
|
+
border-radius: 1px;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.mark-label {
|
|
323
|
+
font-size: 10px;
|
|
324
|
+
color: var(--color-text-muted);
|
|
325
|
+
white-space: nowrap;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* When marks are active, add padding-bottom to make room for the absolute-positioned marks */
|
|
329
|
+
:host([marks]) .range-container {
|
|
330
|
+
padding-bottom: 24px; /* marks-container height (18px) + margin-top (2px) + extra (4px) */
|
|
331
|
+
height: auto;
|
|
332
|
+
}
|
|
333
|
+
`;
|
|
334
|
+
var __create = Object.create;
|
|
335
|
+
var __defProp = Object.defineProperty;
|
|
336
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
337
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
338
|
+
var __typeError = (msg) => {
|
|
339
|
+
throw TypeError(msg);
|
|
340
|
+
};
|
|
341
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
342
|
+
var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
|
|
343
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
344
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
345
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
346
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
347
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
348
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
349
|
+
return value;
|
|
350
|
+
};
|
|
351
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
352
|
+
var fn, it, done, ctx, access, k = flags & 7, s = false, p = false;
|
|
353
|
+
var j = array.length + 1, key = __decoratorStrings[k + 5];
|
|
354
|
+
var initializers = array[j - 1] = [], extraInitializers = array[j] || (array[j] = []);
|
|
355
|
+
var desc = (target = target.prototype, __getOwnPropDesc({ get [name]() {
|
|
356
|
+
return __privateGet(this, extra);
|
|
357
|
+
}, set [name](x) {
|
|
358
|
+
return __privateSet(this, extra, x);
|
|
359
|
+
} }, name));
|
|
360
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
361
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
362
|
+
{
|
|
363
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
364
|
+
access.get = (x) => x[name];
|
|
365
|
+
access.set = (x, y) => x[name] = y;
|
|
366
|
+
}
|
|
367
|
+
it = (0, decorators[i])({ get: desc.get, set: desc.set }, ctx), done._ = 1;
|
|
368
|
+
if (it === void 0) __expectFn(it) && (desc[key] = it);
|
|
369
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
370
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
371
|
+
}
|
|
372
|
+
return desc && __defProp(target, name, desc), target;
|
|
373
|
+
};
|
|
374
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
375
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
376
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
377
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
378
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
379
|
+
var _marks_dec, _tracked_dec, _editable_dec, _step_dec, _max_dec, _min_dec, _percentage_dec, _options_dec, _a, _init, _options, _percentage, _min, _max, _step, _editable, _tracked, _marks;
|
|
380
|
+
class Slider extends (_a = aeicoField.AeicoField, _options_dec = [aeico.prop({ type: Array })], _percentage_dec = [aeico.prop({ type: Boolean })], _min_dec = [aeico.prop({ type: Number })], _max_dec = [aeico.prop({ type: Number })], _step_dec = [aeico.prop({ type: Number })], _editable_dec = [aeico.prop({ type: Boolean })], _tracked_dec = [aeico.prop({ type: Boolean })], _marks_dec = [aeico.prop({
|
|
381
|
+
type: Array,
|
|
382
|
+
// bare attribute (<ae-slider marks>) → true; JSON array → MarkItem[]
|
|
383
|
+
parser: (value) => {
|
|
384
|
+
if (value === null) return void 0;
|
|
385
|
+
if (value === "" || value === "true") return true;
|
|
386
|
+
if (value === "false") return false;
|
|
387
|
+
try {
|
|
388
|
+
return JSON.parse(value);
|
|
389
|
+
} catch {
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
})], _a) {
|
|
394
|
+
constructor() {
|
|
395
|
+
super();
|
|
396
|
+
__publicField(this, "fieldElement", null);
|
|
397
|
+
__publicField(this, "_valueLabel", null);
|
|
398
|
+
__publicField(this, "_numberInput", null);
|
|
399
|
+
__publicField(this, "_boundOnRangeInput");
|
|
400
|
+
__publicField(this, "_boundOnNumberInput");
|
|
401
|
+
__privateAdd(this, _options, __runInitializers(_init, 8, this, [])), __runInitializers(_init, 11, this);
|
|
402
|
+
__privateAdd(this, _percentage, __runInitializers(_init, 12, this, false)), __runInitializers(_init, 15, this);
|
|
403
|
+
__privateAdd(this, _min, __runInitializers(_init, 16, this, 0)), __runInitializers(_init, 19, this);
|
|
404
|
+
__privateAdd(this, _max, __runInitializers(_init, 20, this, 100)), __runInitializers(_init, 23, this);
|
|
405
|
+
__privateAdd(this, _step, __runInitializers(_init, 24, this, 1)), __runInitializers(_init, 27, this);
|
|
406
|
+
__privateAdd(this, _editable, __runInitializers(_init, 28, this, false)), __runInitializers(_init, 31, this);
|
|
407
|
+
__privateAdd(this, _tracked, __runInitializers(_init, 32, this, false)), __runInitializers(_init, 35, this);
|
|
408
|
+
__privateAdd(this, _marks, __runInitializers(_init, 36, this)), __runInitializers(_init, 39, this);
|
|
409
|
+
this._boundOnRangeInput = this._onRangeInput.bind(this);
|
|
410
|
+
this._boundOnNumberInput = this._onNumberInput.bind(this);
|
|
411
|
+
}
|
|
412
|
+
_normalizeOptions() {
|
|
413
|
+
if (!Array.isArray(this.options) || this.options.length === 0) return null;
|
|
414
|
+
const opts = this.options.map(
|
|
415
|
+
(opt) => this._isSliderOption(opt) ? { label: opt.label, value: String(opt.value) } : { label: String(opt), value: String(opt) }
|
|
416
|
+
);
|
|
417
|
+
const allNumeric = opts.every((o) => o.value !== "" && !isNaN(Number(o.value)));
|
|
418
|
+
if (allNumeric) {
|
|
419
|
+
return [...opts].sort((a, b) => Number(a.value) - Number(b.value)).map((o) => ({ ...o, rangeValue: Number(o.value) }));
|
|
420
|
+
} else {
|
|
421
|
+
return opts.map((o, i) => ({ ...o, rangeValue: i }));
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
_getRangeAttrs(normalized) {
|
|
425
|
+
if (normalized && normalized.length >= 1) {
|
|
426
|
+
const vals = normalized.map((o) => o.rangeValue);
|
|
427
|
+
const min = Math.min(...vals);
|
|
428
|
+
const max = Math.max(...vals);
|
|
429
|
+
const sorted = [...vals].sort((a, b) => a - b);
|
|
430
|
+
let minGap = Infinity;
|
|
431
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
432
|
+
const d = sorted[i] - sorted[i - 1];
|
|
433
|
+
if (d > 0 && d < minGap) minGap = d;
|
|
434
|
+
}
|
|
435
|
+
return {
|
|
436
|
+
min: String(min),
|
|
437
|
+
max: String(max),
|
|
438
|
+
step: minGap === Infinity ? "1" : String(minGap),
|
|
439
|
+
inOptionsMode: true
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
min: String(this.min),
|
|
444
|
+
max: String(this.max),
|
|
445
|
+
step: String(this.step),
|
|
446
|
+
inOptionsMode: false
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
_toRangeValue(value, normalized) {
|
|
450
|
+
if (value == null || value === "") return "";
|
|
451
|
+
if (normalized) {
|
|
452
|
+
const found = normalized.find((o) => o.value === value);
|
|
453
|
+
return found !== void 0 ? String(found.rangeValue) : "";
|
|
454
|
+
}
|
|
455
|
+
return value;
|
|
456
|
+
}
|
|
457
|
+
_fromRangeValue(rv, normalized) {
|
|
458
|
+
var _a2, _b;
|
|
459
|
+
if (normalized) {
|
|
460
|
+
const n = Number(rv);
|
|
461
|
+
return ((_a2 = normalized.find((o) => o.rangeValue === n)) == null ? void 0 : _a2.value) ?? ((_b = normalized[0]) == null ? void 0 : _b.value) ?? rv;
|
|
462
|
+
}
|
|
463
|
+
return rv;
|
|
464
|
+
}
|
|
465
|
+
_displayLabel(value, normalized) {
|
|
466
|
+
var _a2;
|
|
467
|
+
if (value == null || value === "") return "";
|
|
468
|
+
const label = normalized ? ((_a2 = normalized.find((o) => o.value === value)) == null ? void 0 : _a2.label) ?? value : value;
|
|
469
|
+
return this.percentage ? `${label}%` : label;
|
|
470
|
+
}
|
|
471
|
+
_maxValueLabelWidth(normalized, attrs) {
|
|
472
|
+
const candidates = normalized ? normalized.map((o) => this._displayLabel(o.value, normalized)) : [this._displayLabel(attrs.min, null), this._displayLabel(attrs.max, null)];
|
|
473
|
+
const maxLen = Math.max(...candidates.map((l) => l.length), 1);
|
|
474
|
+
return `${maxLen}ch`;
|
|
475
|
+
}
|
|
476
|
+
_updateTrackFill() {
|
|
477
|
+
if (!this.tracked || !this.fieldElement) return;
|
|
478
|
+
const min = Number(this.fieldElement.min);
|
|
479
|
+
const max = Number(this.fieldElement.max);
|
|
480
|
+
const val = Number(this.fieldElement.value);
|
|
481
|
+
const range = max - min || 1;
|
|
482
|
+
const pct = Math.max(0, Math.min(100, (val - min) / range * 100));
|
|
483
|
+
this.style.setProperty("--fill-pct", `${pct}%`);
|
|
484
|
+
}
|
|
485
|
+
_getMarksData(normalized, attrs) {
|
|
486
|
+
const minVal = Number(attrs.min);
|
|
487
|
+
const maxVal = Number(attrs.max);
|
|
488
|
+
const range = maxVal - minVal || 1;
|
|
489
|
+
const marks = this.marks;
|
|
490
|
+
if (Array.isArray(marks)) {
|
|
491
|
+
const result = [];
|
|
492
|
+
for (const m of marks) {
|
|
493
|
+
const isObj = m !== null && typeof m === "object";
|
|
494
|
+
const numVal = isObj ? m.value : m;
|
|
495
|
+
if (numVal < minVal || numVal > maxVal) continue;
|
|
496
|
+
const rawLabel = isObj ? m.label ?? String(numVal) : String(numVal);
|
|
497
|
+
result.push({
|
|
498
|
+
value: String(numVal),
|
|
499
|
+
label: this.percentage ? `${rawLabel}%` : rawLabel,
|
|
500
|
+
pct: (numVal - minVal) / range * 100
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
return result;
|
|
504
|
+
}
|
|
505
|
+
if (normalized) {
|
|
506
|
+
return normalized.map((o) => ({
|
|
507
|
+
value: o.value,
|
|
508
|
+
label: this.percentage ? `${o.label}%` : o.label,
|
|
509
|
+
pct: (o.rangeValue - minVal) / range * 100
|
|
510
|
+
}));
|
|
511
|
+
}
|
|
512
|
+
return [
|
|
513
|
+
{ value: attrs.min, label: this.percentage ? `${minVal}%` : String(minVal), pct: 0 },
|
|
514
|
+
{ value: attrs.max, label: this.percentage ? `${maxVal}%` : String(maxVal), pct: 100 }
|
|
515
|
+
];
|
|
516
|
+
}
|
|
517
|
+
writeValue(value) {
|
|
518
|
+
const normalized = this._normalizeOptions();
|
|
519
|
+
const rv = this._toRangeValue(value, normalized);
|
|
520
|
+
if (this.fieldElement && rv !== "" && this.fieldElement.value !== rv) {
|
|
521
|
+
this.fieldElement.value = rv;
|
|
522
|
+
}
|
|
523
|
+
if (this._valueLabel) {
|
|
524
|
+
this._valueLabel.textContent = this._displayLabel(value, normalized);
|
|
525
|
+
}
|
|
526
|
+
if (this._numberInput && !normalized && this._numberInput.value !== rv) {
|
|
527
|
+
this._numberInput.value = rv;
|
|
528
|
+
}
|
|
529
|
+
this._updateTrackFill();
|
|
530
|
+
}
|
|
531
|
+
getValue() {
|
|
532
|
+
if (!this.fieldElement) return "";
|
|
533
|
+
return this._fromRangeValue(this.fieldElement.value, this._normalizeOptions());
|
|
534
|
+
}
|
|
535
|
+
render() {
|
|
536
|
+
const normalized = this._normalizeOptions();
|
|
537
|
+
const attrs = this._getRangeAttrs(normalized);
|
|
538
|
+
return aeico.html(({ div, input, span }) => {
|
|
539
|
+
div({ className: "range-container" }, () => {
|
|
540
|
+
div({ key: "range-wrapper", className: "range-wrapper" }, () => {
|
|
541
|
+
this.fieldElement = input({
|
|
542
|
+
key: "range",
|
|
543
|
+
type: "range",
|
|
544
|
+
min: attrs.min,
|
|
545
|
+
max: attrs.max,
|
|
546
|
+
step: attrs.step,
|
|
547
|
+
"@input": this._boundOnRangeInput,
|
|
548
|
+
"@change": this.boundOnChange
|
|
549
|
+
});
|
|
550
|
+
if (this.marks) {
|
|
551
|
+
const marksData = this._getMarksData(normalized, attrs);
|
|
552
|
+
div({ key: "marks", className: "marks-container" }, () => {
|
|
553
|
+
for (const m of marksData) {
|
|
554
|
+
aeico.tags.span(
|
|
555
|
+
{
|
|
556
|
+
key: `mark-${m.value}`,
|
|
557
|
+
className: "mark",
|
|
558
|
+
style: { left: `${m.pct}%` }
|
|
559
|
+
},
|
|
560
|
+
() => {
|
|
561
|
+
aeico.tags.span({ className: "mark-label", textContent: m.label });
|
|
562
|
+
}
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
});
|
|
568
|
+
this._valueLabel = span({
|
|
569
|
+
key: "label",
|
|
570
|
+
className: "value-label",
|
|
571
|
+
style: { minWidth: this._maxValueLabelWidth(normalized, attrs) },
|
|
572
|
+
textContent: this._displayLabel(this.value, normalized)
|
|
573
|
+
});
|
|
574
|
+
this.renderActionButtons();
|
|
575
|
+
if (this.editable) {
|
|
576
|
+
this._numberInput = input({
|
|
577
|
+
key: "number",
|
|
578
|
+
type: "number",
|
|
579
|
+
className: "value-input",
|
|
580
|
+
min: attrs.min,
|
|
581
|
+
max: attrs.max,
|
|
582
|
+
step: attrs.step,
|
|
583
|
+
// Disabled in options mode: valid values are discrete, free text makes no sense
|
|
584
|
+
disabled: attrs.inOptionsMode,
|
|
585
|
+
"@input": this._boundOnNumberInput
|
|
586
|
+
});
|
|
587
|
+
} else {
|
|
588
|
+
this._numberInput = null;
|
|
589
|
+
}
|
|
590
|
+
});
|
|
591
|
+
if (this.value != null) this.writeValue(this.value);
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
_onRangeInput() {
|
|
595
|
+
if (!this.fieldElement) return;
|
|
596
|
+
const normalized = this._normalizeOptions();
|
|
597
|
+
const actualValue = this._fromRangeValue(this.fieldElement.value, normalized);
|
|
598
|
+
if (this._valueLabel) {
|
|
599
|
+
this._valueLabel.textContent = this._displayLabel(actualValue, normalized);
|
|
600
|
+
}
|
|
601
|
+
if (this._numberInput && !normalized) {
|
|
602
|
+
this._numberInput.value = this.fieldElement.value;
|
|
603
|
+
}
|
|
604
|
+
this._updateTrackFill();
|
|
605
|
+
}
|
|
606
|
+
_onNumberInput() {
|
|
607
|
+
if (!this._numberInput || !this.fieldElement) return;
|
|
608
|
+
const v = this._numberInput.value;
|
|
609
|
+
if (this.fieldElement.value === v) return;
|
|
610
|
+
this.fieldElement.value = v;
|
|
611
|
+
if (this._valueLabel) {
|
|
612
|
+
this._valueLabel.textContent = this._displayLabel(v, null);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
clear(options) {
|
|
616
|
+
var _a2, _b;
|
|
617
|
+
const normalized = this._normalizeOptions();
|
|
618
|
+
const attrs = this._getRangeAttrs(normalized);
|
|
619
|
+
const clearTo = normalized ? ((_a2 = normalized.find((o) => String(o.rangeValue) === attrs.min)) == null ? void 0 : _a2.value) ?? ((_b = normalized[0]) == null ? void 0 : _b.value) ?? attrs.min : attrs.min;
|
|
620
|
+
this.setValue(clearTo, { ...options, action: "clear" });
|
|
621
|
+
}
|
|
622
|
+
_isSliderOption(opt) {
|
|
623
|
+
return opt !== null && typeof opt === "object" && "label" in opt && "value" in opt;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
_init = __decoratorStart(_a);
|
|
627
|
+
_options = /* @__PURE__ */ new WeakMap();
|
|
628
|
+
_percentage = /* @__PURE__ */ new WeakMap();
|
|
629
|
+
_min = /* @__PURE__ */ new WeakMap();
|
|
630
|
+
_max = /* @__PURE__ */ new WeakMap();
|
|
631
|
+
_step = /* @__PURE__ */ new WeakMap();
|
|
632
|
+
_editable = /* @__PURE__ */ new WeakMap();
|
|
633
|
+
_tracked = /* @__PURE__ */ new WeakMap();
|
|
634
|
+
_marks = /* @__PURE__ */ new WeakMap();
|
|
635
|
+
__decorateElement(_init, 4, "options", _options_dec, Slider, _options);
|
|
636
|
+
__decorateElement(_init, 4, "percentage", _percentage_dec, Slider, _percentage);
|
|
637
|
+
__decorateElement(_init, 4, "min", _min_dec, Slider, _min);
|
|
638
|
+
__decorateElement(_init, 4, "max", _max_dec, Slider, _max);
|
|
639
|
+
__decorateElement(_init, 4, "step", _step_dec, Slider, _step);
|
|
640
|
+
__decorateElement(_init, 4, "editable", _editable_dec, Slider, _editable);
|
|
641
|
+
__decorateElement(_init, 4, "tracked", _tracked_dec, Slider, _tracked);
|
|
642
|
+
__decorateElement(_init, 4, "marks", _marks_dec, Slider, _marks);
|
|
643
|
+
__decoratorMetadata(_init, Slider);
|
|
644
|
+
__publicField(Slider, "tagName", "slider");
|
|
645
|
+
__publicField(Slider, "styles", [variables.styleVariables, size.sizeCSS, color.colorCSS, style]);
|
|
646
|
+
Slider.register();
|
|
647
|
+
exports.Slider = Slider;
|
|
648
|
+
//# sourceMappingURL=slider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.cjs","sources":["../../src/slider/slider.ts"],"sourcesContent":["import AeicoField from '../aeico-field';\nimport type { InferProps } from 'aeico';\nimport { html, tags } from 'aeico';\nimport type { NormalizedOption, SliderMarks, SliderOption, SliderOptions } from './defines';\nimport style from '../styles/components/slider.css?inline';\nimport variables from '../styles/variables.css?inline';\nimport sizeCSS from '../styles/size.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport { prop } from 'aeico';\n\nclass Slider extends AeicoField {\n protected fieldElement: HTMLInputElement | null = null;\n private _valueLabel: HTMLSpanElement | null = null;\n private _numberInput: HTMLInputElement | null = null;\n\n private _boundOnRangeInput: () => void;\n private _boundOnNumberInput: () => void;\n\n static tagName = 'slider';\n\n @prop({ type: Array })\n accessor options: SliderOptions = [];\n\n @prop({ type: Boolean })\n accessor percentage = false;\n\n @prop({ type: Number })\n accessor min = 0;\n\n @prop({ type: Number })\n accessor max = 100;\n\n @prop({ type: Number })\n accessor step = 1;\n\n @prop({ type: Boolean })\n accessor editable = false;\n\n @prop({ type: Boolean })\n accessor tracked = false;\n\n @prop({\n type: Array,\n // bare attribute (<ae-slider marks>) → true; JSON array → MarkItem[]\n parser: (value: string | null) => {\n if (value === null) return undefined;\n if (value === '' || value === 'true') return true;\n if (value === 'false') return false;\n try {\n return JSON.parse(value);\n } catch {\n return true;\n }\n },\n })\n accessor marks: SliderMarks | undefined;\n\n protected static styles = [variables, sizeCSS, colorCSS, style];\n\n constructor() {\n super();\n this._boundOnRangeInput = this._onRangeInput.bind(this);\n this._boundOnNumberInput = this._onNumberInput.bind(this);\n }\n\n private _normalizeOptions(): NormalizedOption[] | null {\n if (!Array.isArray(this.options) || this.options.length === 0) return null;\n\n const opts = this.options.map((opt) =>\n this._isSliderOption(opt)\n ? { label: opt.label, value: String(opt.value) }\n : { label: String(opt), value: String(opt) },\n );\n\n // Sort by numeric value if all values are numeric; otherwise keep original order\n const allNumeric = opts.every((o) => o.value !== '' && !isNaN(Number(o.value)));\n\n if (allNumeric) {\n return [...opts]\n .sort((a, b) => Number(a.value) - Number(b.value))\n .map((o) => ({ ...o, rangeValue: Number(o.value) }));\n } else {\n return opts.map((o, i) => ({ ...o, rangeValue: i }));\n }\n }\n\n private _getRangeAttrs(normalized: NormalizedOption[] | null): {\n min: string;\n max: string;\n step: string;\n inOptionsMode: boolean;\n } {\n if (normalized && normalized.length >= 1) {\n const vals = normalized.map((o) => o.rangeValue);\n const min = Math.min(...vals);\n const max = Math.max(...vals);\n\n // Compute step from minimum gap between adjacent sorted values\n const sorted = [...vals].sort((a, b) => a - b);\n let minGap = Infinity;\n for (let i = 1; i < sorted.length; i++) {\n const d = sorted[i] - sorted[i - 1];\n if (d > 0 && d < minGap) minGap = d;\n }\n\n return {\n min: String(min),\n max: String(max),\n step: minGap === Infinity ? '1' : String(minGap),\n inOptionsMode: true,\n };\n }\n\n return {\n min: String(this.min),\n max: String(this.max),\n step: String(this.step),\n inOptionsMode: false,\n };\n }\n\n private _toRangeValue(value: string | undefined, normalized: NormalizedOption[] | null): string {\n if (value == null || value === '') return '';\n if (normalized) {\n const found = normalized.find((o) => o.value === value);\n\n return found !== undefined ? String(found.rangeValue) : '';\n }\n\n return value;\n }\n\n private _fromRangeValue(rv: string, normalized: NormalizedOption[] | null): string {\n if (normalized) {\n const n = Number(rv);\n\n return normalized.find((o) => o.rangeValue === n)?.value ?? normalized[0]?.value ?? rv;\n }\n return rv;\n }\n\n private _displayLabel(value: string | undefined, normalized: NormalizedOption[] | null): string {\n if (value == null || value === '') return '';\n const label = normalized ? (normalized.find((o) => o.value === value)?.label ?? value) : value;\n\n return this.percentage ? `${label}%` : label;\n }\n\n private _maxValueLabelWidth(\n normalized: NormalizedOption[] | null,\n attrs: { min: string; max: string },\n ): string {\n const candidates = normalized\n ? normalized.map((o) => this._displayLabel(o.value, normalized))\n : [this._displayLabel(attrs.min, null), this._displayLabel(attrs.max, null)];\n const maxLen = Math.max(...candidates.map((l) => l.length), 1);\n\n return `${maxLen}ch`;\n }\n\n private _updateTrackFill(): void {\n if (!this.tracked || !this.fieldElement) return;\n const min = Number(this.fieldElement.min);\n const max = Number(this.fieldElement.max);\n const val = Number(this.fieldElement.value);\n const range = max - min || 1;\n const pct = Math.max(0, Math.min(100, ((val - min) / range) * 100));\n this.style.setProperty('--fill-pct', `${pct}%`);\n }\n\n private _getMarksData(\n normalized: NormalizedOption[] | null,\n attrs: { min: string; max: string; inOptionsMode: boolean },\n ): Array<{ value: string; label: string; pct: number }> {\n const minVal = Number(attrs.min);\n const maxVal = Number(attrs.max);\n const range = maxVal - minVal || 1;\n\n const marks = this.marks;\n\n // Custom marks array — purely visual, no snapping effect\n if (Array.isArray(marks)) {\n const result: Array<{ value: string; label: string; pct: number }> = [];\n for (const m of marks) {\n const isObj = m !== null && typeof m === 'object';\n const numVal = isObj ? (m as { value: number }).value : m;\n if (numVal < minVal || numVal > maxVal) continue;\n const rawLabel = isObj ? (m.label ?? String(numVal)) : String(numVal);\n result.push({\n value: String(numVal),\n label: this.percentage ? `${rawLabel}%` : rawLabel,\n pct: ((numVal - minVal) / range) * 100,\n });\n }\n\n return result;\n }\n\n // marks === true — auto-generate from options or free-mode endpoints\n if (normalized) {\n return normalized.map((o) => ({\n value: o.value,\n label: this.percentage ? `${o.label}%` : o.label,\n pct: ((o.rangeValue - minVal) / range) * 100,\n }));\n }\n\n // Free mode — show min and max endpoints only\n return [\n { value: attrs.min, label: this.percentage ? `${minVal}%` : String(minVal), pct: 0 },\n { value: attrs.max, label: this.percentage ? `${maxVal}%` : String(maxVal), pct: 100 },\n ];\n }\n\n protected writeValue(value: string): void {\n const normalized = this._normalizeOptions();\n const rv = this._toRangeValue(value, normalized);\n\n if (this.fieldElement && rv !== '' && this.fieldElement.value !== rv) {\n this.fieldElement.value = rv;\n }\n\n if (this._valueLabel) {\n this._valueLabel.textContent = this._displayLabel(value, normalized);\n }\n\n // Sync number input only in free mode (options mode disables it)\n if (this._numberInput && !normalized && this._numberInput.value !== rv) {\n this._numberInput.value = rv;\n }\n\n this._updateTrackFill();\n }\n\n protected getValue(): string {\n if (!this.fieldElement) return '';\n\n return this._fromRangeValue(this.fieldElement.value, this._normalizeOptions());\n }\n\n render() {\n const normalized = this._normalizeOptions();\n const attrs = this._getRangeAttrs(normalized);\n\n return html(({ div, input, span }) => {\n div({ className: 'range-container' }, () => {\n // Wrap range + optional marks in a column so marks don't push siblings\n div({ key: 'range-wrapper', className: 'range-wrapper' }, () => {\n this.fieldElement = input({\n key: 'range',\n type: 'range',\n min: attrs.min,\n max: attrs.max,\n step: attrs.step,\n '@input': this._boundOnRangeInput,\n '@change': this.boundOnChange,\n });\n\n if (this.marks) {\n const marksData = this._getMarksData(normalized, attrs);\n div({ key: 'marks', className: 'marks-container' }, () => {\n for (const m of marksData) {\n tags.span(\n {\n key: `mark-${m.value}`,\n className: 'mark',\n style: { left: `${m.pct}%` },\n },\n () => {\n tags.span({ className: 'mark-label', textContent: m.label });\n },\n );\n }\n });\n }\n });\n\n this._valueLabel = span({\n key: 'label',\n className: 'value-label',\n style: { minWidth: this._maxValueLabelWidth(normalized, attrs) },\n textContent: this._displayLabel(this.value, normalized),\n });\n\n // Action buttons first so the number input can be toggled without disrupting button reuse\n this.renderActionButtons();\n\n if (this.editable) {\n this._numberInput = input({\n key: 'number',\n type: 'number',\n className: 'value-input',\n min: attrs.min,\n max: attrs.max,\n step: attrs.step,\n // Disabled in options mode: valid values are discrete, free text makes no sense\n disabled: attrs.inOptionsMode,\n '@input': this._boundOnNumberInput,\n });\n } else {\n this._numberInput = null;\n }\n });\n\n if (this.value != null) this.writeValue(this.value);\n });\n }\n\n private _onRangeInput(): void {\n if (!this.fieldElement) return;\n\n const normalized = this._normalizeOptions();\n const actualValue = this._fromRangeValue(this.fieldElement.value, normalized);\n\n if (this._valueLabel) {\n this._valueLabel.textContent = this._displayLabel(actualValue, normalized);\n }\n // Keep number input in sync during drag\n if (this._numberInput && !normalized) {\n this._numberInput.value = this.fieldElement.value;\n }\n\n this._updateTrackFill();\n }\n\n private _onNumberInput(): void {\n if (!this._numberInput || !this.fieldElement) return;\n const v = this._numberInput.value;\n\n if (this.fieldElement.value === v) return;\n\n this.fieldElement.value = v;\n if (this._valueLabel) {\n this._valueLabel.textContent = this._displayLabel(v, null);\n }\n }\n\n public clear(options?: { silent?: boolean }): void {\n const normalized = this._normalizeOptions();\n const attrs = this._getRangeAttrs(normalized);\n // Reset to the option whose rangeValue === min, or to attrs.min in free mode\n const clearTo = normalized\n ? (normalized.find((o) => String(o.rangeValue) === attrs.min)?.value ??\n normalized[0]?.value ??\n attrs.min)\n : attrs.min;\n this.setValue(clearTo, { ...options, action: 'clear' });\n }\n\n private _isSliderOption(opt: unknown): opt is SliderOption {\n return opt !== null && typeof opt === 'object' && 'label' in opt && 'value' in opt;\n }\n}\n\nSlider.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-slider': Slider;\n }\n}\n\nexport default Slider;\nexport type SliderProps = InferProps<typeof Slider>;\n"],"names":["AeicoField","prop","_a","html","tags","variables","sizeCSS","colorCSS"],"mappings":"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"}
|