@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.
Files changed (119) hide show
  1. package/dist/custom-elements.json +1552 -0
  2. package/dist/index.d.ts +561 -0
  3. package/dist/packages/affix/affix.js +11 -11
  4. package/dist/packages/affix/affix.js.map +3 -3
  5. package/dist/packages/alert/alert.js +7 -7
  6. package/dist/packages/alert/alert.js.map +3 -3
  7. package/dist/packages/attention/attention.js +22 -22
  8. package/dist/packages/attention/attention.js.map +3 -3
  9. package/dist/packages/breadcrumbs/breadcrumbs.js +9 -9
  10. package/dist/packages/breadcrumbs/breadcrumbs.js.map +3 -3
  11. package/dist/packages/button/button.js +11 -11
  12. package/dist/packages/button/button.js.map +3 -3
  13. package/dist/packages/card/card.js +8 -8
  14. package/dist/packages/card/card.js.map +3 -3
  15. package/dist/packages/checkbox/checkbox.a11y.test.d.ts +1 -0
  16. package/dist/packages/checkbox/checkbox.a11y.test.js +73 -0
  17. package/dist/packages/checkbox/checkbox.d.ts +49 -0
  18. package/dist/packages/checkbox/checkbox.js +2594 -0
  19. package/dist/packages/checkbox/checkbox.js.map +7 -0
  20. package/dist/packages/checkbox/checkbox.react.stories.d.ts +12 -0
  21. package/dist/packages/checkbox/checkbox.react.stories.js +10 -0
  22. package/dist/packages/checkbox/checkbox.stories.d.ts +25 -0
  23. package/dist/packages/checkbox/checkbox.stories.js +183 -0
  24. package/dist/packages/checkbox/checkbox.test.d.ts +1 -0
  25. package/dist/packages/checkbox/checkbox.test.js +142 -0
  26. package/dist/packages/checkbox/react.d.ts +5 -0
  27. package/dist/packages/checkbox/react.js +15 -0
  28. package/dist/packages/checkbox/styles.d.ts +1 -0
  29. package/dist/packages/checkbox/styles.js +134 -0
  30. package/dist/packages/checkbox-group/checkbox-group.a11y.test.d.ts +2 -0
  31. package/dist/packages/checkbox-group/checkbox-group.a11y.test.js +109 -0
  32. package/dist/packages/checkbox-group/checkbox-group.d.ts +33 -0
  33. package/dist/packages/checkbox-group/checkbox-group.js +71 -0
  34. package/dist/packages/checkbox-group/checkbox-group.js.map +7 -0
  35. package/dist/packages/checkbox-group/checkbox-group.test.d.ts +2 -0
  36. package/dist/packages/checkbox-group/checkbox-group.test.js +112 -0
  37. package/dist/packages/checkbox-group/locales/da/messages.d.mts +1 -0
  38. package/dist/packages/checkbox-group/locales/da/messages.mjs +1 -0
  39. package/dist/packages/checkbox-group/locales/en/messages.d.mts +1 -0
  40. package/dist/packages/checkbox-group/locales/en/messages.mjs +1 -0
  41. package/dist/packages/checkbox-group/locales/fi/messages.d.mts +1 -0
  42. package/dist/packages/checkbox-group/locales/fi/messages.mjs +1 -0
  43. package/dist/packages/checkbox-group/locales/nb/messages.d.mts +1 -0
  44. package/dist/packages/checkbox-group/locales/nb/messages.mjs +1 -0
  45. package/dist/packages/checkbox-group/locales/sv/messages.d.mts +1 -0
  46. package/dist/packages/checkbox-group/locales/sv/messages.mjs +1 -0
  47. package/dist/packages/checkbox-group/react.d.ts +2 -0
  48. package/dist/packages/checkbox-group/react.js +11 -0
  49. package/dist/packages/combobox/combobox.js +11 -11
  50. package/dist/packages/combobox/combobox.js.map +3 -3
  51. package/dist/packages/datepicker/datepicker.js +42 -42
  52. package/dist/packages/datepicker/datepicker.js.map +3 -3
  53. package/dist/packages/expandable/expandable.js +11 -11
  54. package/dist/packages/expandable/expandable.js.map +3 -3
  55. package/dist/packages/i18n.d.ts +2 -0
  56. package/dist/packages/i18n.js +87 -2
  57. package/dist/packages/modal-header/modal-header.js +15 -15
  58. package/dist/packages/modal-header/modal-header.js.map +3 -3
  59. package/dist/packages/page-indicator/page-indicator.js +7 -7
  60. package/dist/packages/page-indicator/page-indicator.js.map +3 -3
  61. package/dist/packages/pagination/pagination.js +24 -24
  62. package/dist/packages/pagination/pagination.js.map +3 -3
  63. package/dist/packages/pill/pill.js +10 -10
  64. package/dist/packages/pill/pill.js.map +3 -3
  65. package/dist/packages/select/select.js +20 -20
  66. package/dist/packages/select/select.js.map +3 -3
  67. package/dist/packages/slider/Slider.d.ts +2 -0
  68. package/dist/packages/slider/Slider.js +8 -0
  69. package/dist/packages/slider/index.d.ts +2 -0
  70. package/dist/packages/slider/index.js +2 -0
  71. package/dist/packages/slider/locales/da/messages.d.mts +1 -0
  72. package/dist/packages/slider/locales/da/messages.mjs +1 -0
  73. package/dist/packages/slider/locales/en/messages.d.mts +1 -0
  74. package/dist/packages/slider/locales/en/messages.mjs +1 -0
  75. package/dist/packages/slider/locales/fi/messages.d.mts +1 -0
  76. package/dist/packages/slider/locales/fi/messages.mjs +1 -0
  77. package/dist/packages/slider/locales/nb/messages.d.mts +1 -0
  78. package/dist/packages/slider/locales/nb/messages.mjs +1 -0
  79. package/dist/packages/slider/locales/sv/messages.d.mts +1 -0
  80. package/dist/packages/slider/locales/sv/messages.mjs +1 -0
  81. package/dist/packages/slider/react.d.ts +3 -0
  82. package/dist/packages/slider/react.js +13 -0
  83. package/dist/packages/slider/slider.d.ts +64 -0
  84. package/dist/packages/slider/slider.js +2641 -0
  85. package/dist/packages/slider/slider.js.map +7 -0
  86. package/dist/packages/slider/slider.react.stories.d.ts +19 -0
  87. package/dist/packages/slider/slider.react.stories.js +161 -0
  88. package/dist/packages/slider/slider.stories.d.ts +26 -0
  89. package/dist/packages/slider/slider.stories.js +464 -0
  90. package/dist/packages/slider/slider.test.d.ts +5 -0
  91. package/dist/packages/slider/slider.test.js +380 -0
  92. package/dist/packages/slider/styles/w-slider.styles.d.ts +1 -0
  93. package/dist/packages/slider/styles/w-slider.styles.js +154 -0
  94. package/dist/packages/slider/styles.d.ts +1 -0
  95. package/dist/packages/slider/styles.js +2 -0
  96. package/dist/packages/slider-thumb/SliderThumb.d.ts +2 -0
  97. package/dist/packages/slider-thumb/SliderThumb.js +8 -0
  98. package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.d.ts +2 -0
  99. package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.js +3 -0
  100. package/dist/packages/slider-thumb/react.d.ts +6 -0
  101. package/dist/packages/slider-thumb/react.js +15 -0
  102. package/dist/packages/slider-thumb/slider-thumb.d.ts +72 -0
  103. package/dist/packages/slider-thumb/slider-thumb.js +2774 -0
  104. package/dist/packages/slider-thumb/slider-thumb.js.map +7 -0
  105. package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.d.ts +1 -0
  106. package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.js +194 -0
  107. package/dist/packages/step/step.js +13 -13
  108. package/dist/packages/step/step.js.map +3 -3
  109. package/dist/packages/step-indicator/step-indicator.a11y.test.js +6 -2
  110. package/dist/packages/textarea/textarea.a11y.test.js +1 -1
  111. package/dist/packages/textarea/textarea.test.js +2 -1
  112. package/dist/packages/textfield/styles/w-textfield.styles.js +6 -0
  113. package/dist/packages/textfield/textfield.js +7 -1
  114. package/dist/packages/textfield/textfield.js.map +2 -2
  115. package/dist/packages/toast/toast.js +13 -13
  116. package/dist/packages/toast/toast.js.map +3 -3
  117. package/dist/setup-tests.js +1 -1
  118. package/dist/web-types.json +328 -1
  119. 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
+ };
@@ -0,0 +1,5 @@
1
+ import '../attention/attention.js';
2
+ import '../affix/affix.js';
3
+ import '../textfield/textfield.js';
4
+ import './slider.js';
5
+ import '../slider-thumb/slider-thumb.js';