@warp-ds/elements 2.9.1-next.2 → 2.9.1-next.4
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/custom-elements.json +91 -262
- package/dist/docs/affix/affix.md +9 -10
- package/dist/docs/affix/api.md +9 -10
- package/dist/docs/alert/alert.md +4 -2
- package/dist/docs/alert/api.md +4 -2
- package/dist/docs/attention/api.md +21 -16
- package/dist/docs/attention/attention.md +21 -16
- package/dist/docs/badge/api.md +5 -6
- package/dist/docs/badge/badge.md +5 -6
- package/dist/docs/box/api.md +3 -4
- package/dist/docs/box/box.md +3 -4
- package/dist/docs/breadcrumbs/accessibility.md +46 -0
- package/dist/docs/breadcrumbs/api.md +8 -8
- package/dist/docs/breadcrumbs/breadcrumbs.md +127 -9
- package/dist/docs/breadcrumbs/examples.md +35 -0
- package/dist/docs/breadcrumbs/usage.md +36 -0
- package/dist/docs/button/api.md +15 -13
- package/dist/docs/button/button.md +15 -13
- package/dist/docs/card/api.md +5 -6
- package/dist/docs/card/card.md +5 -6
- package/dist/docs/combobox/api.md +18 -19
- package/dist/docs/combobox/combobox.md +18 -19
- package/dist/docs/datepicker/api.md +38 -39
- package/dist/docs/datepicker/datepicker.md +38 -39
- package/dist/docs/expandable/api.md +11 -12
- package/dist/docs/expandable/expandable.md +11 -12
- package/dist/docs/link/api.md +8 -6
- package/dist/docs/link/link.md +8 -6
- package/dist/docs/page-indicator/api.md +7 -8
- package/dist/docs/page-indicator/page-indicator.md +7 -8
- package/dist/docs/pagination/api.md +17 -9
- package/dist/docs/pagination/pagination.md +17 -9
- package/dist/docs/pill/api.md +30 -17
- package/dist/docs/pill/pill.md +30 -17
- package/dist/docs/select/api.md +17 -9
- package/dist/docs/select/select.md +17 -9
- package/dist/docs/slider/api.md +37 -116
- package/dist/docs/slider/examples.md +331 -0
- package/dist/docs/slider/slider.md +378 -118
- package/dist/docs/slider/usage.md +10 -0
- package/dist/docs/slider-thumb/api.md +26 -79
- package/dist/docs/slider-thumb/slider-thumb.md +26 -81
- package/dist/docs/step/api.md +3 -4
- package/dist/docs/step/step.md +3 -4
- package/dist/docs/step-indicator/api.md +3 -4
- package/dist/docs/step-indicator/step-indicator.md +3 -4
- package/dist/docs/switch/api.md +13 -5
- package/dist/docs/switch/switch.md +13 -5
- package/dist/docs/tab/api.md +9 -62
- package/dist/docs/tab/tab.md +9 -70
- package/dist/docs/tab-panel/api.md +7 -11
- package/dist/docs/tab-panel/tab-panel.md +7 -19
- package/dist/docs/tabs/accessibility.md +11 -0
- package/dist/docs/tabs/api.md +10 -18
- package/dist/docs/tabs/examples.md +68 -0
- package/dist/docs/tabs/tabs.md +97 -20
- package/dist/docs/tabs/usage.md +8 -0
- package/dist/docs/textarea/api.md +15 -16
- package/dist/docs/textarea/textarea.md +15 -16
- package/dist/docs/textfield/api.md +14 -15
- package/dist/docs/textfield/textfield.md +14 -15
- package/dist/index.d.ts +124 -242
- package/dist/packages/affix/affix.js +11 -12
- package/dist/packages/affix/affix.js.map +4 -4
- package/dist/packages/alert/alert.d.ts +1 -1
- package/dist/packages/alert/alert.js.map +1 -1
- package/dist/packages/attention/attention.d.ts +3 -2
- package/dist/packages/attention/attention.js +27 -28
- package/dist/packages/attention/attention.js.map +4 -4
- package/dist/packages/breadcrumbs/breadcrumbs.d.ts +7 -1
- package/dist/packages/breadcrumbs/breadcrumbs.js +7 -8
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +4 -4
- package/dist/packages/button/button.d.ts +4 -2
- package/dist/packages/button/button.js +14 -15
- package/dist/packages/button/button.js.map +4 -4
- package/dist/packages/card/card.js +8 -9
- package/dist/packages/card/card.js.map +4 -4
- package/dist/packages/checkbox/checkbox.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.js +15 -16
- package/dist/packages/checkbox-group/checkbox-group.js.map +4 -4
- package/dist/packages/checkbox-group/locales/da/messages.mjs +1 -1
- package/dist/packages/checkbox-group/locales/en/messages.mjs +1 -1
- package/dist/packages/checkbox-group/locales/fi/messages.mjs +1 -1
- package/dist/packages/checkbox-group/locales/nb/messages.mjs +1 -1
- package/dist/packages/checkbox-group/locales/sv/messages.mjs +1 -1
- package/dist/packages/combobox/combobox.js +13 -14
- package/dist/packages/combobox/combobox.js.map +4 -4
- package/dist/packages/combobox/locales/da/messages.mjs +1 -1
- package/dist/packages/combobox/locales/en/messages.mjs +1 -1
- package/dist/packages/combobox/locales/fi/messages.mjs +1 -1
- package/dist/packages/combobox/locales/nb/messages.mjs +1 -1
- package/dist/packages/combobox/locales/sv/messages.mjs +1 -1
- package/dist/packages/datepicker/datepicker.d.ts +2 -0
- package/dist/packages/datepicker/datepicker.js +51 -52
- package/dist/packages/datepicker/datepicker.js.map +4 -4
- package/dist/packages/datepicker/locales/da/messages.mjs +1 -1
- package/dist/packages/datepicker/locales/en/messages.mjs +1 -1
- package/dist/packages/datepicker/locales/fi/messages.mjs +1 -1
- package/dist/packages/datepicker/locales/nb/messages.mjs +1 -1
- package/dist/packages/datepicker/locales/sv/messages.mjs +1 -1
- package/dist/packages/link/link.d.ts +2 -0
- package/dist/packages/modal-header/modal-header.js +13 -14
- package/dist/packages/modal-header/modal-header.js.map +4 -4
- package/dist/packages/page-indicator/page-indicator.js +7 -8
- package/dist/packages/page-indicator/page-indicator.js.map +4 -4
- package/dist/packages/pagination/locales/da/messages.mjs +1 -1
- package/dist/packages/pagination/locales/en/messages.mjs +1 -1
- package/dist/packages/pagination/locales/fi/messages.mjs +1 -1
- package/dist/packages/pagination/locales/nb/messages.mjs +1 -1
- package/dist/packages/pagination/locales/sv/messages.mjs +1 -1
- package/dist/packages/pagination/pagination.js +31 -32
- package/dist/packages/pagination/pagination.js.map +4 -4
- package/dist/packages/pagination/pagination.test.js +38 -0
- package/dist/packages/pill/pill.js +11 -12
- package/dist/packages/pill/pill.js.map +4 -4
- package/dist/packages/radio/radio.d.ts +2 -0
- package/dist/packages/radio-group/radio-group.d.ts +2 -0
- package/dist/packages/radio-group/radio-group.js +17 -18
- package/dist/packages/radio-group/radio-group.js.map +4 -4
- package/dist/packages/select/select.js +19 -20
- package/dist/packages/select/select.js.map +4 -4
- package/dist/packages/slider/locales/da/messages.mjs +1 -1
- package/dist/packages/slider/locales/en/messages.mjs +1 -1
- package/dist/packages/slider/locales/fi/messages.mjs +1 -1
- package/dist/packages/slider/locales/nb/messages.mjs +1 -1
- package/dist/packages/slider/locales/sv/messages.mjs +1 -1
- package/dist/packages/slider/slider.d.ts +36 -45
- package/dist/packages/slider/slider.js +22 -23
- package/dist/packages/slider/slider.js.map +4 -4
- package/dist/packages/slider-thumb/slider-thumb.d.ts +41 -31
- package/dist/packages/slider-thumb/slider-thumb.js +33 -34
- package/dist/packages/slider-thumb/slider-thumb.js.map +4 -4
- package/dist/packages/step/locales/da/messages.mjs +1 -1
- package/dist/packages/step/locales/en/messages.mjs +1 -1
- package/dist/packages/step/locales/fi/messages.mjs +1 -1
- package/dist/packages/step/locales/nb/messages.mjs +1 -1
- package/dist/packages/step/locales/sv/messages.mjs +1 -1
- package/dist/packages/step/step.js +11 -12
- package/dist/packages/step/step.js.map +4 -4
- package/dist/packages/switch/switch.d.ts +2 -0
- package/dist/packages/tab/tab.d.ts +31 -24
- package/dist/packages/tab/tab.js +3 -3
- package/dist/packages/tab/tab.js.map +2 -2
- package/dist/packages/tab-panel/tab-panel.d.ts +9 -8
- package/dist/packages/tab-panel/tab-panel.js +3 -3
- package/dist/packages/tab-panel/tab-panel.js.map +2 -2
- package/dist/packages/tabs/index.d.ts +1 -0
- package/dist/packages/tabs/index.js +0 -1
- package/dist/packages/tabs/react.d.ts +4 -3
- package/dist/packages/tabs/tabs.d.ts +9 -3
- package/dist/packages/tabs/tabs.js +1 -1
- package/dist/packages/tabs/tabs.js.map +3 -3
- package/dist/packages/tabs/tabs.react.stories.d.ts +2 -2
- package/dist/packages/textarea/textarea.d.ts +2 -0
- package/dist/packages/textarea/textarea.js +20 -21
- package/dist/packages/textarea/textarea.js.map +4 -4
- package/dist/packages/textfield/textfield.d.ts +2 -0
- package/dist/packages/toast/toast.js +13 -14
- package/dist/packages/toast/toast.js.map +4 -4
- package/dist/web-types.json +206 -98
- package/package.json +20 -19
- package/dist/docs/tab/accessibility.md +0 -1
- package/dist/docs/tab/examples.md +0 -1
- package/dist/docs/tab/usage.md +0 -1
- package/dist/docs/tab-panel/accessibility.md +0 -1
- package/dist/docs/tab-panel/examples.md +0 -1
- package/dist/docs/tab-panel/usage.md +0 -1
|
@@ -4,84 +4,380 @@
|
|
|
4
4
|
|
|
5
5
|
Parent component for sliders (both single and range sliders). Used in combination with a `<w-slider-thumb>`.
|
|
6
6
|
|
|
7
|
-
[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-slider-and-range-slider--docs)
|
|
8
|
-
|
|
9
7
|
## Usage
|
|
10
8
|
|
|
9
|
+
A slider consists of two custom elements that work together:
|
|
10
|
+
|
|
11
|
+
- `<w-slider>` - A container that creates a `<fieldset>` and coordinates shared state and attributes.
|
|
12
|
+
- `<w-slider-thumb>` - The `<input type="range">`, tooltip and text field for each slider in the range (from and to values).
|
|
13
|
+
|
|
14
|
+
Sliders come in two main variants:
|
|
15
|
+
|
|
16
|
+
- Single slider with one thumb and one input field.
|
|
17
|
+
- Range slider with two thumbs and input fields.
|
|
18
|
+
|
|
11
19
|
## Accessibility
|
|
12
20
|
|
|
13
21
|
## Examples
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
### Single slider
|
|
24
|
+
|
|
25
|
+
<elements-example>
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<form id="audio">
|
|
29
|
+
<w-slider label="Volume" min="0" max="100">
|
|
30
|
+
<w-slider-thumb name="volume"></w-slider-thumb>
|
|
31
|
+
</w-slider>
|
|
32
|
+
</form>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
</elements-example>
|
|
36
|
+
|
|
37
|
+
### Range slider
|
|
38
|
+
|
|
39
|
+
<elements-example>
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<w-slider label="Range" min="0" max="100">
|
|
43
|
+
<w-slider-thumb
|
|
44
|
+
slot="from"
|
|
45
|
+
aria-label="From value"
|
|
46
|
+
name="from"
|
|
47
|
+
></w-slider-thumb>
|
|
48
|
+
<w-slider-thumb
|
|
49
|
+
slot="to"
|
|
50
|
+
aria-label="To value"
|
|
51
|
+
name="to"
|
|
52
|
+
></w-slider-thumb>
|
|
53
|
+
</w-slider>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
</elements-example>
|
|
57
|
+
|
|
58
|
+
### Open ended range slider
|
|
59
|
+
|
|
60
|
+
An open ended range slider covers a case where you want to offer a selection in a common range of values, but allow values outside of that range.
|
|
61
|
+
|
|
62
|
+
In the example below the case is production year. The edges of the open ended range slider are taken to mean "anything before 1950" and "anything after 2025". This is indicated by an empty string value (`""`).
|
|
63
|
+
|
|
64
|
+
Users can also choose to enter values into the input field that are outside the range of the slider, for example `1932` or `2027`.
|
|
65
|
+
|
|
66
|
+
<elements-example>
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<form id="openended">
|
|
70
|
+
<w-slider label="Production year" min="1950" max="2025" open-ended>
|
|
71
|
+
<w-slider-thumb slot="from" name="from-year"></w-slider-thumb>
|
|
72
|
+
<w-slider-thumb slot="to" name="to-year"></w-slider-thumb>
|
|
73
|
+
</w-slider>
|
|
74
|
+
</form>
|
|
75
|
+
<script>
|
|
76
|
+
const openEndedSlider = document.querySelector("w-slider");
|
|
77
|
+
|
|
78
|
+
openEndedSlider.labelFormatter = function (slot) {
|
|
79
|
+
if (slot === "from") {
|
|
80
|
+
return "Before 1950";
|
|
81
|
+
}
|
|
82
|
+
return "2025+";
|
|
83
|
+
};
|
|
84
|
+
openEndedSlider.valueFormatter = function (value, slot) {
|
|
85
|
+
if (slot === "from" && value === "") {
|
|
86
|
+
return "Min";
|
|
87
|
+
}
|
|
88
|
+
if (slot === "to" && value === "") {
|
|
89
|
+
return "Max";
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
document.forms["openended"].addEventListener("input", function () {
|
|
95
|
+
const formData = new FormData(this);
|
|
96
|
+
const from = formData.get("from-year");
|
|
97
|
+
const to = formData.get("to-year");
|
|
98
|
+
});
|
|
99
|
+
</script>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
</elements-example>
|
|
103
|
+
|
|
104
|
+
### Suffix in the input field
|
|
105
|
+
|
|
106
|
+
You can set a `suffix` on `<w-slider>` and have it apply to any input field in the component.
|
|
107
|
+
|
|
108
|
+
<elements-example>
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<w-slider
|
|
112
|
+
label="Apartment size"
|
|
113
|
+
min="0"
|
|
114
|
+
max="250"
|
|
115
|
+
suffix="${suffix}"
|
|
116
|
+
data-testid="sqm"
|
|
117
|
+
>
|
|
118
|
+
<w-slider-thumb
|
|
119
|
+
slot="from"
|
|
120
|
+
aria-label="From size"
|
|
121
|
+
name="from"
|
|
122
|
+
></w-slider-thumb>
|
|
123
|
+
<w-slider-thumb
|
|
124
|
+
slot="to"
|
|
125
|
+
aria-label="To size"
|
|
126
|
+
name="to"
|
|
127
|
+
></w-slider-thumb>
|
|
128
|
+
</w-slider>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
</elements-example>
|
|
132
|
+
|
|
133
|
+
### Number formatter
|
|
134
|
+
|
|
135
|
+
If you need to format numbers, use the [`valueFormatter`](#valueformatter) and [`labelFormatter`](#labelFormatter) properties.
|
|
136
|
+
|
|
137
|
+
<elements-example>
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<w-slider
|
|
141
|
+
label="Price"
|
|
142
|
+
min="0"
|
|
143
|
+
max="250000"
|
|
144
|
+
suffix="${suffix}"
|
|
145
|
+
data-testid="currency"
|
|
146
|
+
>
|
|
147
|
+
<w-slider-thumb
|
|
148
|
+
slot="from"
|
|
149
|
+
aria-label="From price"
|
|
150
|
+
name="from"
|
|
151
|
+
></w-slider-thumb>
|
|
152
|
+
<w-slider-thumb
|
|
153
|
+
slot="to"
|
|
154
|
+
aria-label="To price"
|
|
155
|
+
name="to"
|
|
156
|
+
></w-slider-thumb>
|
|
157
|
+
</w-slider>
|
|
158
|
+
<script type="module">
|
|
159
|
+
const numberFormatter = window.getNumberFormatter(
|
|
160
|
+
"${locale}",
|
|
161
|
+
).format;
|
|
162
|
+
const currencySlider = document.querySelector(
|
|
163
|
+
'w-slider[data-testid="currency"]',
|
|
164
|
+
);
|
|
165
|
+
currencySlider.valueFormatter = numberFormatter;
|
|
166
|
+
currencySlider.labelFormatter = (slot) => {
|
|
167
|
+
if (slot === "from") return "0";
|
|
168
|
+
return numberFormatter("250000");
|
|
169
|
+
};
|
|
170
|
+
</script>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
</elements-example>
|
|
174
|
+
|
|
175
|
+
### Steps
|
|
176
|
+
|
|
177
|
+
Sets the [`step` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/step) on the inputs.
|
|
178
|
+
|
|
179
|
+
<elements-example>
|
|
180
|
+
|
|
181
|
+
```html
|
|
182
|
+
<w-slider label="Single" step="${step}" min="0" max="100">
|
|
183
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
184
|
+
</w-slider>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
</elements-example>
|
|
188
|
+
|
|
189
|
+
### Marks
|
|
190
|
+
|
|
191
|
+
Show tick markers along the slider. Only works with a single slider.
|
|
192
|
+
|
|
193
|
+
<elements-example>
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<w-slider
|
|
197
|
+
label="Single"
|
|
198
|
+
min="0"
|
|
199
|
+
max="100"
|
|
200
|
+
step="5"
|
|
201
|
+
markers="5"
|
|
202
|
+
>
|
|
203
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
204
|
+
</w-slider>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
</elements-example>
|
|
208
|
+
|
|
209
|
+
### With help text
|
|
210
|
+
|
|
211
|
+
<elements-example>
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<w-slider
|
|
215
|
+
label="Model year"
|
|
216
|
+
min="1950"
|
|
217
|
+
max="2025"
|
|
218
|
+
help-text="Model year of the car"
|
|
219
|
+
>
|
|
220
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
221
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
222
|
+
</w-slider>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
</elements-example>
|
|
226
|
+
|
|
227
|
+
### With validation error
|
|
228
|
+
|
|
229
|
+
<elements-example>
|
|
230
|
+
|
|
231
|
+
```html
|
|
232
|
+
<w-slider
|
|
233
|
+
label="Model year"
|
|
234
|
+
min="1950"
|
|
235
|
+
max="2025"
|
|
236
|
+
error="Something is wrong and this should help you solve the problem"
|
|
237
|
+
invalid
|
|
238
|
+
>
|
|
239
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
240
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
241
|
+
</w-slider>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
</elements-example>
|
|
245
|
+
|
|
246
|
+
### Visually hidden labels
|
|
247
|
+
|
|
248
|
+
<elements-example>
|
|
249
|
+
|
|
250
|
+
```html
|
|
251
|
+
<w-slider
|
|
252
|
+
min="1950"
|
|
253
|
+
max="2025"
|
|
254
|
+
help-text="Model year of the car"
|
|
255
|
+
>
|
|
256
|
+
<legend class="sr-only" slot="label">Model year</legend>
|
|
257
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
258
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
259
|
+
</w-slider>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
</elements-example>
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
### Hidden min and max value labels
|
|
266
|
+
|
|
267
|
+
Give the component a label formatter and always return the empty string.
|
|
268
|
+
|
|
269
|
+
<elements-example>
|
|
270
|
+
|
|
271
|
+
```html
|
|
272
|
+
|
|
273
|
+
<w-slider
|
|
274
|
+
min="1950"
|
|
275
|
+
max="2025"
|
|
276
|
+
help-text="Model year of the car"
|
|
277
|
+
data-testid="hidden-minmax-label"
|
|
278
|
+
>
|
|
279
|
+
<legend class="sr-only" slot="label">Model year</legend>
|
|
280
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
281
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
282
|
+
</w-slider>
|
|
283
|
+
<script>
|
|
284
|
+
const hiddenMinMaxSlider = document.querySelector(
|
|
285
|
+
'w-slider[data-testid="hidden-minmax-label"]',
|
|
286
|
+
);
|
|
287
|
+
hiddenMinMaxSlider.labelFormatter = () => "";
|
|
288
|
+
</script>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
</elements-example>
|
|
292
|
+
|
|
293
|
+
### Visually hiden text field
|
|
294
|
+
|
|
295
|
+
The text field doubles as a visualization of the exact value, which is difficult to see on a slider. If you visually hide the text field with the `hidden-textfield` attribute always make sure to show the value some place, unless the exact value is irrellevant.
|
|
296
|
+
|
|
297
|
+
<elements-example>
|
|
298
|
+
|
|
299
|
+
```html
|
|
300
|
+
<output class="text-xs">
|
|
301
|
+
<span class="font-bold">Distance:</span>
|
|
302
|
+
<span id="distance-value"></span>
|
|
303
|
+
</output>
|
|
304
|
+
<form name="map">
|
|
305
|
+
<w-slider min="0" max="20" hidden-textfield data-testid="map-radius">
|
|
306
|
+
<legend class="sr-only" slot="label">Location filter radius</legend>
|
|
307
|
+
<w-slider-thumb name="distance"></w-slider-thumb>
|
|
308
|
+
</w-slider>
|
|
309
|
+
</form>
|
|
310
|
+
<script>
|
|
311
|
+
const radiusSteps = [
|
|
312
|
+
200, 300, 400, 500, 700, 1000, 1500, 2000, 3000, 5000, 7000, 10000,
|
|
313
|
+
20000, 30000, 50000, 75000, 100000, 200000, 300000, 400000, 500000,
|
|
314
|
+
];
|
|
315
|
+
const mapRadiusSlider = document.querySelector(
|
|
316
|
+
'w-slider[data-testid="map-radius"]',
|
|
317
|
+
);
|
|
318
|
+
const formatter = window.getNumberFormatter("${locale}");
|
|
319
|
+
function formatDistance(value) {
|
|
320
|
+
const index = Number.parseInt(value);
|
|
321
|
+
const numValue = radiusSteps[index];
|
|
322
|
+
|
|
323
|
+
let formattedValue = "";
|
|
324
|
+
|
|
325
|
+
if (numValue < 1000) {
|
|
326
|
+
// Use non-breaking space here
|
|
327
|
+
formattedValue = formatter.format(numValue) + " m";
|
|
328
|
+
} else {
|
|
329
|
+
formattedValue = formatter.format(numValue / 1000) + " km";
|
|
330
|
+
}
|
|
331
|
+
return formattedValue;
|
|
332
|
+
};
|
|
333
|
+
mapRadiusSlider.labelFormatter = (slot) => {
|
|
334
|
+
if (slot === "from") {
|
|
335
|
+
return formatDistance("0");
|
|
336
|
+
}
|
|
337
|
+
return formatDistance(String(radiusSteps.length - 1));
|
|
338
|
+
};
|
|
339
|
+
mapRadiusSlider.valueFormatter = (value) => {
|
|
340
|
+
const formattedValue = formatDistance(value);
|
|
341
|
+
document.getElementById("distance-value").innerText = formattedValue;
|
|
342
|
+
return formattedValue;
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
document.forms["map"].addEventListener("input", function () {
|
|
346
|
+
const formData = new FormData(this);
|
|
347
|
+
const distance = formData.get("distance");
|
|
348
|
+
});
|
|
349
|
+
</script>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
</elements-example>
|
|
353
|
+
|
|
354
|
+
## `<w-slider>` API
|
|
355
|
+
|
|
356
|
+
Unless otherwise noted all properties are HTML attributes (as opposed to JavaScript object properties).
|
|
16
357
|
|
|
17
358
|
### Properties
|
|
18
359
|
|
|
19
360
|
| Name | Type | Default | Summary |
|
|
20
361
|
|-|-|-|-|
|
|
21
|
-
| _hasInternalError | `boolean` | `false` | - |
|
|
22
|
-
| _invalidMessage | `string` | `''` | - |
|
|
23
|
-
| _showError | `boolean` | `false` | - |
|
|
24
|
-
| _tabbableElements | `Array<HTMLElement>` | `[]` | - |
|
|
25
|
-
| componentHasError | `boolean` | `-` | - |
|
|
26
362
|
| disabled | `boolean` | `false` | - |
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
| fieldset | `HTMLFieldSetElement` | `-` | - |
|
|
32
|
-
| helpText | `string` | `-` | - |
|
|
33
|
-
| hiddenTextfield | `boolean` | `false` | - |
|
|
34
|
-
| invalid | `boolean` | `false` | - |
|
|
363
|
+
| error | `string` | `-` | Validation error text, if any |
|
|
364
|
+
| help-text | `string` | `-` | Additional description to show below the fieldset |
|
|
365
|
+
| hidden-textfield | `boolean` | `false` | Should only be used in special cases |
|
|
366
|
+
| invalid | `boolean` | `false` | Sets the form fields and fieldset in an invalid state |
|
|
35
367
|
| label | `string` | `-` | The slider fieldset label. Required for proper accessibility. |
|
|
36
|
-
| labelFormatter | `(slot: SliderSlot) => string` | `-` | Formatter for the min and max labels below the range. |
|
|
368
|
+
| labelFormatter (JS only) | `(slot: SliderSlot) => string` | `-` | Formatter for the min and max labels below the range. |
|
|
37
369
|
| markers | `number` | `-` | Pass a value similar to step to create visual markers at that interval |
|
|
38
|
-
| max | `string` |
|
|
39
|
-
| min | `string` |
|
|
40
|
-
|
|
|
41
|
-
| required | `boolean` | `false` | Ensures a child slider thumb has a value before allowing the containing form to submit
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| valueFormatter | `(value: string, slot: SliderSlot) => string` | `-` | Formatter for the tooltip and input mask values. |
|
|
370
|
+
| max | `string` | `100` | The maximum allowed value in the range inputs |
|
|
371
|
+
| min | `string` | `0` | The minimum allowed value in the range inputs |
|
|
372
|
+
| open-ended | `boolean` | `false` | Whether or not to allow values outside the range such as "Before 1950" and "2025+". |
|
|
373
|
+
| required | `boolean` | `false` | Ensures a child slider thumb has a value before allowing the containing form to submit |
|
|
374
|
+
| step | `number` | `-` | ets step on the range input to jump between values when dragging |
|
|
375
|
+
| suffix | `string` | `-` | Suffix used in text input fields and for the min and max values of the slider |
|
|
376
|
+
| tooltipFormatter (JS only) | `(value: string, slot: SliderSlot) => string` | `-` | Overrides valueFormatter for the tooltip. |
|
|
377
|
+
| valueFormatter (JS only) | `(value: string, slot: SliderSlot) => string` | `-` | Formatter for the tooltip and input mask values |
|
|
47
378
|
|
|
48
379
|
### Property Details
|
|
49
380
|
|
|
50
|
-
#### _hasInternalError
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- Type: `boolean`
|
|
55
|
-
- Default: `false`
|
|
56
|
-
|
|
57
|
-
#### _invalidMessage
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- Type: `string`
|
|
62
|
-
- Default: `''`
|
|
63
|
-
|
|
64
|
-
#### _showError
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- Type: `boolean`
|
|
69
|
-
- Default: `false`
|
|
70
|
-
|
|
71
|
-
#### _tabbableElements
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- Type: `Array<HTMLElement>`
|
|
76
|
-
- Default: `[]`
|
|
77
|
-
|
|
78
|
-
#### componentHasError
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- Type: `boolean`
|
|
83
|
-
- Default: `-`
|
|
84
|
-
|
|
85
381
|
#### disabled
|
|
86
382
|
|
|
87
383
|
|
|
@@ -89,58 +385,30 @@ Parent component for sliders (both single and range sliders). Used in combinatio
|
|
|
89
385
|
- Type: `boolean`
|
|
90
386
|
- Default: `false`
|
|
91
387
|
|
|
92
|
-
#### edgeMax
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- Type: `unknown`
|
|
97
|
-
- Default: `-`
|
|
98
|
-
|
|
99
|
-
#### edgeMin
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- Type: `unknown`
|
|
104
|
-
- Default: `-`
|
|
105
|
-
|
|
106
388
|
#### error
|
|
107
389
|
|
|
108
|
-
|
|
390
|
+
Validation error text, if any
|
|
109
391
|
|
|
110
392
|
- Type: `string`
|
|
111
393
|
- Default: `-`
|
|
112
394
|
|
|
113
|
-
####
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- Type: `string`
|
|
118
|
-
- Default: `-`
|
|
119
|
-
|
|
120
|
-
#### fieldset
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
- Type: `HTMLFieldSetElement`
|
|
125
|
-
- Default: `-`
|
|
126
|
-
|
|
127
|
-
#### helpText
|
|
128
|
-
|
|
395
|
+
#### help-text
|
|
129
396
|
|
|
397
|
+
Additional description to show below the fieldset
|
|
130
398
|
|
|
131
399
|
- Type: `string`
|
|
132
400
|
- Default: `-`
|
|
133
401
|
|
|
134
|
-
####
|
|
135
|
-
|
|
402
|
+
#### hidden-textfield
|
|
136
403
|
|
|
404
|
+
Should only be used in special cases
|
|
137
405
|
|
|
138
406
|
- Type: `boolean`
|
|
139
407
|
- Default: `false`
|
|
140
408
|
|
|
141
409
|
#### invalid
|
|
142
410
|
|
|
143
|
-
|
|
411
|
+
Sets the form fields and fieldset in an invalid state
|
|
144
412
|
|
|
145
413
|
- Type: `boolean`
|
|
146
414
|
- Default: `false`
|
|
@@ -154,7 +422,7 @@ If you need to display HTML, use the `label` slot instead (f. ex. `<legend class
|
|
|
154
422
|
- Type: `string`
|
|
155
423
|
- Default: `-`
|
|
156
424
|
|
|
157
|
-
#### labelFormatter
|
|
425
|
+
#### labelFormatter (JS only)
|
|
158
426
|
|
|
159
427
|
Formatter for the min and max labels below the range.
|
|
160
428
|
|
|
@@ -170,19 +438,19 @@ Pass a value similar to step to create visual markers at that interval
|
|
|
170
438
|
|
|
171
439
|
#### max
|
|
172
440
|
|
|
173
|
-
|
|
441
|
+
The maximum allowed value in the range inputs
|
|
174
442
|
|
|
175
443
|
- Type: `string`
|
|
176
|
-
- Default:
|
|
444
|
+
- Default: `100`
|
|
177
445
|
|
|
178
446
|
#### min
|
|
179
447
|
|
|
180
|
-
|
|
448
|
+
The minimum allowed value in the range inputs
|
|
181
449
|
|
|
182
450
|
- Type: `string`
|
|
183
|
-
- Default:
|
|
451
|
+
- Default: `0`
|
|
184
452
|
|
|
185
|
-
####
|
|
453
|
+
#### open-ended
|
|
186
454
|
|
|
187
455
|
Whether or not to allow values outside the range such as "Before 1950" and "2025+".
|
|
188
456
|
|
|
@@ -191,46 +459,38 @@ Whether or not to allow values outside the range such as "Before 1950" and "2025
|
|
|
191
459
|
|
|
192
460
|
#### required
|
|
193
461
|
|
|
194
|
-
Ensures a child slider thumb has a value before allowing the containing form to submit
|
|
462
|
+
Ensures a child slider thumb has a value before allowing the containing form to submit
|
|
195
463
|
|
|
196
464
|
- Type: `boolean`
|
|
197
465
|
- Default: `false`
|
|
198
466
|
|
|
199
|
-
#### shadowRootOptions
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
- Type: `object`
|
|
204
|
-
- Default: `{ ...LitElement.shadowRootOptions, delegatesFocus: true, }`
|
|
205
|
-
|
|
206
467
|
#### step
|
|
207
468
|
|
|
208
|
-
|
|
469
|
+
ets step on the range input to jump between values when dragging
|
|
209
470
|
|
|
210
471
|
- Type: `number`
|
|
211
472
|
- Default: `-`
|
|
212
473
|
|
|
213
474
|
#### suffix
|
|
214
475
|
|
|
215
|
-
Suffix used in text input fields and for the min and max values of the slider
|
|
476
|
+
Suffix used in text input fields and for the min and max values of the slider
|
|
216
477
|
|
|
217
478
|
- Type: `string`
|
|
218
479
|
- Default: `-`
|
|
219
480
|
|
|
220
|
-
#### tooltipFormatter
|
|
481
|
+
#### tooltipFormatter (JS only)
|
|
221
482
|
|
|
222
|
-
|
|
483
|
+
Overrides valueFormatter for the tooltip.
|
|
484
|
+
|
|
485
|
+
Use in open-ended sliders to show for example "300+ hk" instead of "Max" in the tooltip.
|
|
223
486
|
|
|
224
487
|
- Type: `(value: string, slot: SliderSlot) => string`
|
|
225
488
|
- Default: `-`
|
|
226
489
|
|
|
227
|
-
#### valueFormatter
|
|
490
|
+
#### valueFormatter (JS only)
|
|
228
491
|
|
|
229
|
-
Formatter for the tooltip and input mask values
|
|
492
|
+
Formatter for the tooltip and input mask values
|
|
230
493
|
|
|
231
494
|
- Type: `(value: string, slot: SliderSlot) => string`
|
|
232
495
|
- Default: `-`
|
|
233
496
|
|
|
234
|
-
### Types
|
|
235
|
-
|
|
236
|
-
No types documented.
|
|
@@ -1 +1,11 @@
|
|
|
1
1
|
## Usage
|
|
2
|
+
|
|
3
|
+
A slider consists of two custom elements that work together:
|
|
4
|
+
|
|
5
|
+
- `<w-slider>` - A container that creates a `<fieldset>` and coordinates shared state and attributes.
|
|
6
|
+
- `<w-slider-thumb>` - The `<input type="range">`, tooltip and text field for each slider in the range (from and to values).
|
|
7
|
+
|
|
8
|
+
Sliders come in two main variants:
|
|
9
|
+
|
|
10
|
+
- Single slider with one thumb and one input field.
|
|
11
|
+
- Range slider with two thumbs and input fields.
|