@warp-ds/elements 2.6.0 → 2.7.0-next.2
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 +1552 -0
- package/dist/index.d.ts +561 -0
- package/dist/packages/affix/affix.js +11 -11
- package/dist/packages/affix/affix.js.map +3 -3
- package/dist/packages/alert/alert.js +7 -7
- package/dist/packages/alert/alert.js.map +3 -3
- package/dist/packages/attention/attention.js +22 -22
- package/dist/packages/attention/attention.js.map +3 -3
- package/dist/packages/breadcrumbs/breadcrumbs.js +9 -9
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +3 -3
- package/dist/packages/button/button.js +11 -11
- package/dist/packages/button/button.js.map +3 -3
- package/dist/packages/card/card.js +8 -8
- package/dist/packages/card/card.js.map +3 -3
- package/dist/packages/checkbox/checkbox.a11y.test.d.ts +1 -0
- package/dist/packages/checkbox/checkbox.a11y.test.js +73 -0
- package/dist/packages/checkbox/checkbox.d.ts +49 -0
- package/dist/packages/checkbox/checkbox.js +2594 -0
- package/dist/packages/checkbox/checkbox.js.map +7 -0
- package/dist/packages/checkbox/checkbox.react.stories.d.ts +12 -0
- package/dist/packages/checkbox/checkbox.react.stories.js +10 -0
- package/dist/packages/checkbox/checkbox.stories.d.ts +25 -0
- package/dist/packages/checkbox/checkbox.stories.js +183 -0
- package/dist/packages/checkbox/checkbox.test.d.ts +1 -0
- package/dist/packages/checkbox/checkbox.test.js +142 -0
- package/dist/packages/checkbox/react.d.ts +5 -0
- package/dist/packages/checkbox/react.js +15 -0
- package/dist/packages/checkbox/styles.d.ts +1 -0
- package/dist/packages/checkbox/styles.js +134 -0
- package/dist/packages/checkbox-group/checkbox-group.a11y.test.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.a11y.test.js +109 -0
- package/dist/packages/checkbox-group/checkbox-group.d.ts +33 -0
- package/dist/packages/checkbox-group/checkbox-group.js +71 -0
- package/dist/packages/checkbox-group/checkbox-group.js.map +7 -0
- package/dist/packages/checkbox-group/checkbox-group.test.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.test.js +112 -0
- package/dist/packages/checkbox-group/locales/da/messages.d.mts +1 -0
- package/dist/packages/checkbox-group/locales/da/messages.mjs +1 -0
- package/dist/packages/checkbox-group/locales/en/messages.d.mts +1 -0
- package/dist/packages/checkbox-group/locales/en/messages.mjs +1 -0
- package/dist/packages/checkbox-group/locales/fi/messages.d.mts +1 -0
- package/dist/packages/checkbox-group/locales/fi/messages.mjs +1 -0
- package/dist/packages/checkbox-group/locales/nb/messages.d.mts +1 -0
- package/dist/packages/checkbox-group/locales/nb/messages.mjs +1 -0
- package/dist/packages/checkbox-group/locales/sv/messages.d.mts +1 -0
- package/dist/packages/checkbox-group/locales/sv/messages.mjs +1 -0
- package/dist/packages/checkbox-group/react.d.ts +2 -0
- package/dist/packages/checkbox-group/react.js +11 -0
- package/dist/packages/combobox/combobox.js +11 -11
- package/dist/packages/combobox/combobox.js.map +3 -3
- package/dist/packages/datepicker/datepicker.js +42 -42
- package/dist/packages/datepicker/datepicker.js.map +3 -3
- package/dist/packages/expandable/expandable.js +11 -11
- package/dist/packages/expandable/expandable.js.map +3 -3
- package/dist/packages/i18n.d.ts +2 -0
- package/dist/packages/i18n.js +87 -2
- package/dist/packages/modal-header/modal-header.js +15 -15
- package/dist/packages/modal-header/modal-header.js.map +3 -3
- package/dist/packages/page-indicator/page-indicator.js +7 -7
- package/dist/packages/page-indicator/page-indicator.js.map +3 -3
- package/dist/packages/pagination/pagination.js +24 -24
- package/dist/packages/pagination/pagination.js.map +3 -3
- package/dist/packages/pill/pill.js +10 -10
- package/dist/packages/pill/pill.js.map +3 -3
- package/dist/packages/select/select.js +20 -20
- package/dist/packages/select/select.js.map +3 -3
- package/dist/packages/slider/Slider.d.ts +2 -0
- package/dist/packages/slider/Slider.js +8 -0
- package/dist/packages/slider/index.d.ts +2 -0
- package/dist/packages/slider/index.js +2 -0
- package/dist/packages/slider/locales/da/messages.d.mts +1 -0
- package/dist/packages/slider/locales/da/messages.mjs +1 -0
- package/dist/packages/slider/locales/en/messages.d.mts +1 -0
- package/dist/packages/slider/locales/en/messages.mjs +1 -0
- package/dist/packages/slider/locales/fi/messages.d.mts +1 -0
- package/dist/packages/slider/locales/fi/messages.mjs +1 -0
- package/dist/packages/slider/locales/nb/messages.d.mts +1 -0
- package/dist/packages/slider/locales/nb/messages.mjs +1 -0
- package/dist/packages/slider/locales/sv/messages.d.mts +1 -0
- package/dist/packages/slider/locales/sv/messages.mjs +1 -0
- package/dist/packages/slider/react.d.ts +3 -0
- package/dist/packages/slider/react.js +13 -0
- package/dist/packages/slider/slider.d.ts +64 -0
- package/dist/packages/slider/slider.js +2641 -0
- package/dist/packages/slider/slider.js.map +7 -0
- package/dist/packages/slider/slider.react.stories.d.ts +19 -0
- package/dist/packages/slider/slider.react.stories.js +161 -0
- package/dist/packages/slider/slider.stories.d.ts +26 -0
- package/dist/packages/slider/slider.stories.js +464 -0
- package/dist/packages/slider/slider.test.d.ts +5 -0
- package/dist/packages/slider/slider.test.js +380 -0
- package/dist/packages/slider/styles/w-slider.styles.d.ts +1 -0
- package/dist/packages/slider/styles/w-slider.styles.js +154 -0
- package/dist/packages/slider/styles.d.ts +1 -0
- package/dist/packages/slider/styles.js +2 -0
- package/dist/packages/slider-thumb/SliderThumb.d.ts +2 -0
- package/dist/packages/slider-thumb/SliderThumb.js +8 -0
- package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.d.ts +2 -0
- package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.js +3 -0
- package/dist/packages/slider-thumb/react.d.ts +6 -0
- package/dist/packages/slider-thumb/react.js +15 -0
- package/dist/packages/slider-thumb/slider-thumb.d.ts +72 -0
- package/dist/packages/slider-thumb/slider-thumb.js +2774 -0
- package/dist/packages/slider-thumb/slider-thumb.js.map +7 -0
- package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.d.ts +1 -0
- package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.js +194 -0
- package/dist/packages/step/step.js +13 -13
- package/dist/packages/step/step.js.map +3 -3
- package/dist/packages/step-indicator/step-indicator.a11y.test.js +6 -2
- package/dist/packages/textarea/textarea.a11y.test.js +1 -1
- package/dist/packages/textarea/textarea.test.js +2 -1
- package/dist/packages/textfield/styles/w-textfield.styles.js +6 -0
- package/dist/packages/textfield/textfield.js +7 -1
- package/dist/packages/textfield/textfield.js.map +2 -2
- package/dist/packages/toast/toast.js +13 -13
- package/dist/packages/toast/toast.js.map +3 -3
- package/dist/setup-tests.js +1 -1
- package/dist/web-types.json +328 -1
- package/package.json +1 -1
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import 'virtual:uno.css';
|
|
4
|
+
import '../affix/affix.js';
|
|
5
|
+
import '../attention/attention.js';
|
|
6
|
+
import '../textfield/textfield.js';
|
|
7
|
+
import './slider.js';
|
|
8
|
+
import '../slider-thumb/slider-thumb.js';
|
|
9
|
+
const { events: sliderEvents, args: sliderArgs, argTypes: sliderArgTypes, } = getStorybookHelpers('w-slider');
|
|
10
|
+
const meta = {
|
|
11
|
+
title: 'Forms/Slider and Range Slider',
|
|
12
|
+
args: sliderArgs,
|
|
13
|
+
argTypes: sliderArgTypes,
|
|
14
|
+
parameters: {
|
|
15
|
+
actions: {
|
|
16
|
+
handles: sliderEvents,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export default meta;
|
|
21
|
+
export const Single = {
|
|
22
|
+
render() {
|
|
23
|
+
return html `
|
|
24
|
+
<w-slider label="Single" min="0" max="100">
|
|
25
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
26
|
+
</w-slider>
|
|
27
|
+
`;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
export const SingleDisabled = {
|
|
31
|
+
render() {
|
|
32
|
+
return html `
|
|
33
|
+
<w-slider label="Single disabled" min="0" max="100" disabled>
|
|
34
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
35
|
+
</w-slider>
|
|
36
|
+
`;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export const Range = {
|
|
40
|
+
render() {
|
|
41
|
+
return 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
|
+
};
|
|
57
|
+
// Take a suffix attribute on `<w-slider>` I think, have `<w-slider-thumb>` get from that.
|
|
58
|
+
export const SuffixSquareMeters = {
|
|
59
|
+
args: {
|
|
60
|
+
locale: 'nb',
|
|
61
|
+
suffix: 'm²',
|
|
62
|
+
},
|
|
63
|
+
render({ locale, suffix }) {
|
|
64
|
+
return html `
|
|
65
|
+
<w-slider
|
|
66
|
+
label="Apartment size"
|
|
67
|
+
min="0"
|
|
68
|
+
max="250"
|
|
69
|
+
suffix="${suffix}"
|
|
70
|
+
data-testid="sqm"
|
|
71
|
+
>
|
|
72
|
+
<w-slider-thumb
|
|
73
|
+
slot="from"
|
|
74
|
+
aria-label="From size"
|
|
75
|
+
name="from"
|
|
76
|
+
></w-slider-thumb>
|
|
77
|
+
<w-slider-thumb
|
|
78
|
+
slot="to"
|
|
79
|
+
aria-label="To size"
|
|
80
|
+
name="to"
|
|
81
|
+
></w-slider-thumb>
|
|
82
|
+
</w-slider>
|
|
83
|
+
`;
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export const SuffixCurrency = {
|
|
87
|
+
args: {
|
|
88
|
+
locale: 'nb',
|
|
89
|
+
suffix: 'kr',
|
|
90
|
+
},
|
|
91
|
+
render({ locale, suffix }) {
|
|
92
|
+
return html `
|
|
93
|
+
<w-slider
|
|
94
|
+
label="Price"
|
|
95
|
+
min="0"
|
|
96
|
+
max="250000"
|
|
97
|
+
suffix="${suffix}"
|
|
98
|
+
data-testid="currency"
|
|
99
|
+
>
|
|
100
|
+
<w-slider-thumb
|
|
101
|
+
slot="from"
|
|
102
|
+
aria-label="From price"
|
|
103
|
+
name="from"
|
|
104
|
+
></w-slider-thumb>
|
|
105
|
+
<w-slider-thumb
|
|
106
|
+
slot="to"
|
|
107
|
+
aria-label="To price"
|
|
108
|
+
name="to"
|
|
109
|
+
></w-slider-thumb>
|
|
110
|
+
</w-slider>
|
|
111
|
+
<script type="module">
|
|
112
|
+
const numberFormatter = window.getNumberFormatter(
|
|
113
|
+
"${locale}",
|
|
114
|
+
).format;
|
|
115
|
+
const currencySlider = document.querySelector(
|
|
116
|
+
'w-slider[data-testid="currency"]',
|
|
117
|
+
);
|
|
118
|
+
currencySlider.labelFormatter = (slot) => {
|
|
119
|
+
if (slot === "from") return "0";
|
|
120
|
+
return numberFormatter("250000");
|
|
121
|
+
};
|
|
122
|
+
currencySlider.valueFormatter = numberFormatter;
|
|
123
|
+
</script>
|
|
124
|
+
`;
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
export const SuffixKilometers = {
|
|
128
|
+
args: {
|
|
129
|
+
locale: 'nb',
|
|
130
|
+
suffix: 'km',
|
|
131
|
+
},
|
|
132
|
+
render({ locale, suffix }) {
|
|
133
|
+
return html `
|
|
134
|
+
<w-slider
|
|
135
|
+
label="Distance"
|
|
136
|
+
min="0"
|
|
137
|
+
max="250000"
|
|
138
|
+
suffix="${suffix}"
|
|
139
|
+
data-testid="km"
|
|
140
|
+
>
|
|
141
|
+
<w-slider-thumb
|
|
142
|
+
slot="from"
|
|
143
|
+
aria-label="From distance"
|
|
144
|
+
name="from"
|
|
145
|
+
></w-slider-thumb>
|
|
146
|
+
<w-slider-thumb
|
|
147
|
+
slot="to"
|
|
148
|
+
aria-label="To distance"
|
|
149
|
+
name="to"
|
|
150
|
+
></w-slider-thumb>
|
|
151
|
+
</w-slider>
|
|
152
|
+
<script type="module">
|
|
153
|
+
const numberFormatter = window.getNumberFormatter(
|
|
154
|
+
"${locale}",
|
|
155
|
+
).format;
|
|
156
|
+
const kmSlider = document.querySelector('w-slider[data-testid="km"]');
|
|
157
|
+
kmSlider.labelFormatter = (slot) => {
|
|
158
|
+
if (slot === "from") return "0";
|
|
159
|
+
return numberFormatter("250000");
|
|
160
|
+
};
|
|
161
|
+
kmSlider.valueFormatter = numberFormatter;
|
|
162
|
+
</script>
|
|
163
|
+
`;
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
export const Marks = {
|
|
167
|
+
args: {
|
|
168
|
+
locale: 'nb',
|
|
169
|
+
step: '5',
|
|
170
|
+
markers: '5',
|
|
171
|
+
},
|
|
172
|
+
render({ markers, step }) {
|
|
173
|
+
return html `
|
|
174
|
+
<w-slider
|
|
175
|
+
label="Single"
|
|
176
|
+
min="0"
|
|
177
|
+
max="100"
|
|
178
|
+
step="${step}"
|
|
179
|
+
markers="${markers}"
|
|
180
|
+
>
|
|
181
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
182
|
+
</w-slider>
|
|
183
|
+
`;
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
export const Step = {
|
|
187
|
+
args: {
|
|
188
|
+
step: 5,
|
|
189
|
+
},
|
|
190
|
+
render({ step }) {
|
|
191
|
+
return html `
|
|
192
|
+
<w-slider label="Single" step="${step}" min="0" max="100">
|
|
193
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
194
|
+
</w-slider>
|
|
195
|
+
`;
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
export const OpenEnded = {
|
|
199
|
+
args: {},
|
|
200
|
+
render() {
|
|
201
|
+
return html `
|
|
202
|
+
<form id="openended" style="margin-bottom: 16px" lang="nb">
|
|
203
|
+
<w-slider
|
|
204
|
+
label="Produksjonsår"
|
|
205
|
+
min="1950"
|
|
206
|
+
max="2025"
|
|
207
|
+
data-testid="openended"
|
|
208
|
+
open-ended
|
|
209
|
+
>
|
|
210
|
+
<w-slider-thumb
|
|
211
|
+
slot="from"
|
|
212
|
+
aria-label="Fra år"
|
|
213
|
+
name="from-year"
|
|
214
|
+
></w-slider-thumb>
|
|
215
|
+
<w-slider-thumb
|
|
216
|
+
slot="to"
|
|
217
|
+
aria-label="Til år"
|
|
218
|
+
name="to-year"
|
|
219
|
+
></w-slider-thumb>
|
|
220
|
+
</w-slider>
|
|
221
|
+
</form>
|
|
222
|
+
<p>
|
|
223
|
+
Drag the slider to show the value below. See the Code tab for how to
|
|
224
|
+
format the labels.
|
|
225
|
+
</p>
|
|
226
|
+
<output>
|
|
227
|
+
<dl>
|
|
228
|
+
<dt>From:</dt>
|
|
229
|
+
<dd id="openended-from"></dd>
|
|
230
|
+
<dt>To:</dt>
|
|
231
|
+
<dd id="openended-to"></dd>
|
|
232
|
+
</dl>
|
|
233
|
+
</output>
|
|
234
|
+
<script>
|
|
235
|
+
/** Here is how you can show labels to indicate min and max values are "up to and including" and "this value and above". */
|
|
236
|
+
const overunderSlider = document.querySelector(
|
|
237
|
+
'w-slider[data-testid="openended"]',
|
|
238
|
+
);
|
|
239
|
+
overunderSlider.labelFormatter = function (slot) {
|
|
240
|
+
if (slot === 'from') {
|
|
241
|
+
return 'Før 1950';
|
|
242
|
+
}
|
|
243
|
+
return '2025 +';
|
|
244
|
+
};
|
|
245
|
+
overunderSlider.valueFormatter = function (value, slot) {
|
|
246
|
+
if (slot === 'from' && value === '') {
|
|
247
|
+
return 'Min';
|
|
248
|
+
}
|
|
249
|
+
if (slot === 'to' && value === '') {
|
|
250
|
+
return 'Max';
|
|
251
|
+
}
|
|
252
|
+
return value;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/** Code to show the form values in output */
|
|
256
|
+
document.forms["openended"].addEventListener("input", function () {
|
|
257
|
+
const formData = new FormData(this);
|
|
258
|
+
const from = formData.get("from-year");
|
|
259
|
+
const to = formData.get("to-year");
|
|
260
|
+
document.getElementById("openended-from").innerText = from;
|
|
261
|
+
document.getElementById("openended-to").innerText = to;
|
|
262
|
+
});
|
|
263
|
+
</script>
|
|
264
|
+
`;
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
export const SingleError = {
|
|
268
|
+
args: {
|
|
269
|
+
locale: 'nb',
|
|
270
|
+
},
|
|
271
|
+
render() {
|
|
272
|
+
return html `
|
|
273
|
+
<w-slider label="Single" min="0" max="100">
|
|
274
|
+
<p slot="description">Try typing a value over 100</p>
|
|
275
|
+
<w-slider-thumb></w-slider-thumb>
|
|
276
|
+
</w-slider>
|
|
277
|
+
`;
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
export const RangeError = {
|
|
281
|
+
args: {},
|
|
282
|
+
render() {
|
|
283
|
+
return html `
|
|
284
|
+
<form id="rangeerror" style="margin-bottom: 16px">
|
|
285
|
+
<w-slider label="Production year" min="1950" max="2025" over under>
|
|
286
|
+
<p slot="description">
|
|
287
|
+
Try typing a from value higher than a to value
|
|
288
|
+
</p>
|
|
289
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
290
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
291
|
+
</w-slider>
|
|
292
|
+
</form>
|
|
293
|
+
<p>
|
|
294
|
+
Drag the slider to show the value below. See the Code tab for how to
|
|
295
|
+
format the labels.
|
|
296
|
+
</p>
|
|
297
|
+
<output>
|
|
298
|
+
<dl>
|
|
299
|
+
<dt>From:</dt>
|
|
300
|
+
<dd id="rangeerror-from"></dd>
|
|
301
|
+
<dt>To:</dt>
|
|
302
|
+
<dd id="rangeerror-to"></dd>
|
|
303
|
+
</dl>
|
|
304
|
+
</output>
|
|
305
|
+
<script>
|
|
306
|
+
/** Code to show the form values in output */
|
|
307
|
+
document.forms["rangeerror"].addEventListener("input", function () {
|
|
308
|
+
const formData = new FormData(this);
|
|
309
|
+
const from = formData.get("from");
|
|
310
|
+
const to = formData.get("to");
|
|
311
|
+
document.getElementById("rangeerror-from").innerText = from;
|
|
312
|
+
document.getElementById("rangeerror-to").innerText = to;
|
|
313
|
+
});
|
|
314
|
+
</script>
|
|
315
|
+
`;
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
export const CustomError = {
|
|
319
|
+
args: {
|
|
320
|
+
locale: 'nb',
|
|
321
|
+
error: "I'm an external error telling you something is wrong",
|
|
322
|
+
invalid: true,
|
|
323
|
+
},
|
|
324
|
+
render(args) {
|
|
325
|
+
return html `
|
|
326
|
+
<w-slider
|
|
327
|
+
label="Production year"
|
|
328
|
+
min="1950"
|
|
329
|
+
max="2025"
|
|
330
|
+
over
|
|
331
|
+
under
|
|
332
|
+
error="${args.error}"
|
|
333
|
+
?invalid="${args.invalid}"
|
|
334
|
+
>
|
|
335
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
336
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
337
|
+
</w-slider>
|
|
338
|
+
`;
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
export const Description = {
|
|
342
|
+
args: {
|
|
343
|
+
locale: 'nb',
|
|
344
|
+
},
|
|
345
|
+
render() {
|
|
346
|
+
return html `
|
|
347
|
+
<w-slider
|
|
348
|
+
label="Production year"
|
|
349
|
+
min="1950"
|
|
350
|
+
max="2025"
|
|
351
|
+
over
|
|
352
|
+
under
|
|
353
|
+
help-text="Production year of the car"
|
|
354
|
+
>
|
|
355
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
356
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
357
|
+
</w-slider>
|
|
358
|
+
`;
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
export const VisuallyHiddenLabel = {
|
|
362
|
+
args: {
|
|
363
|
+
locale: 'nb',
|
|
364
|
+
},
|
|
365
|
+
render() {
|
|
366
|
+
return html `
|
|
367
|
+
<w-slider
|
|
368
|
+
min="1950"
|
|
369
|
+
max="2025"
|
|
370
|
+
help-text="Production year of the car"
|
|
371
|
+
>
|
|
372
|
+
<legend class="sr-only" slot="label">Production year</legend>
|
|
373
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
374
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
375
|
+
</w-slider>
|
|
376
|
+
`;
|
|
377
|
+
},
|
|
378
|
+
};
|
|
379
|
+
export const HiddenMinimumMaximumLabels = {
|
|
380
|
+
args: {
|
|
381
|
+
locale: 'nb',
|
|
382
|
+
},
|
|
383
|
+
render() {
|
|
384
|
+
return html `
|
|
385
|
+
<w-slider
|
|
386
|
+
min="1950"
|
|
387
|
+
max="2025"
|
|
388
|
+
over
|
|
389
|
+
under
|
|
390
|
+
help-text="Production year of the car"
|
|
391
|
+
data-testid="hidden-minmax-label"
|
|
392
|
+
>
|
|
393
|
+
<legend class="sr-only" slot="label">Production year</legend>
|
|
394
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
395
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
396
|
+
</w-slider>
|
|
397
|
+
<script>
|
|
398
|
+
const hiddenMinMaxSlider = document.querySelector(
|
|
399
|
+
'w-slider[data-testid="hidden-minmax-label"]',
|
|
400
|
+
);
|
|
401
|
+
hiddenMinMaxSlider.labelFormatter = () => "";
|
|
402
|
+
</script>
|
|
403
|
+
`;
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
export const VisuallyHiddenTextfield = {
|
|
407
|
+
args: {
|
|
408
|
+
locale: 'nb',
|
|
409
|
+
},
|
|
410
|
+
render({ locale }) {
|
|
411
|
+
return html `
|
|
412
|
+
<output class="text-xs">
|
|
413
|
+
<span class="font-bold">Distance:</span>
|
|
414
|
+
<span id="distance-value"></span>
|
|
415
|
+
</output>
|
|
416
|
+
<form name="map">
|
|
417
|
+
<w-slider min="0" max="20" hidden-textfield data-testid="map-radius">
|
|
418
|
+
<legend class="sr-only" slot="label">Location filter radius</legend>
|
|
419
|
+
<w-slider-thumb name="distance"></w-slider-thumb>
|
|
420
|
+
</w-slider>
|
|
421
|
+
</form>
|
|
422
|
+
<script>
|
|
423
|
+
const radiusSteps = [
|
|
424
|
+
200, 300, 400, 500, 700, 1000, 1500, 2000, 3000, 5000, 7000, 10000,
|
|
425
|
+
20000, 30000, 50000, 75000, 100000, 200000, 300000, 400000, 500000,
|
|
426
|
+
];
|
|
427
|
+
const mapRadiusSlider = document.querySelector(
|
|
428
|
+
'w-slider[data-testid="map-radius"]',
|
|
429
|
+
);
|
|
430
|
+
const formatter = window.getNumberFormatter("${locale}");
|
|
431
|
+
function formatDistance(value) {
|
|
432
|
+
const index = Number.parseInt(value);
|
|
433
|
+
const numValue = radiusSteps[index];
|
|
434
|
+
|
|
435
|
+
let formattedValue = "";
|
|
436
|
+
|
|
437
|
+
if (numValue < 1000) {
|
|
438
|
+
// Use non-breaking space here
|
|
439
|
+
formattedValue = formatter.format(numValue) + " m";
|
|
440
|
+
} else {
|
|
441
|
+
formattedValue = formatter.format(numValue / 1000) + " km";
|
|
442
|
+
}
|
|
443
|
+
return formattedValue;
|
|
444
|
+
};
|
|
445
|
+
mapRadiusSlider.labelFormatter = (slot) => {
|
|
446
|
+
if (slot === "from") {
|
|
447
|
+
return formatDistance("0");
|
|
448
|
+
}
|
|
449
|
+
return formatDistance(String(radiusSteps.length - 1));
|
|
450
|
+
};
|
|
451
|
+
mapRadiusSlider.valueFormatter = (value) => {
|
|
452
|
+
const formattedValue = formatDistance(value);
|
|
453
|
+
document.getElementById("distance-value").innerText = formattedValue;
|
|
454
|
+
return formattedValue;
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
document.forms["map"].addEventListener("input", function () {
|
|
458
|
+
const formData = new FormData(this);
|
|
459
|
+
const distance = formData.get("distance");
|
|
460
|
+
});
|
|
461
|
+
</script>
|
|
462
|
+
`;
|
|
463
|
+
},
|
|
464
|
+
};
|