@warp-ds/elements 2.9.1-next.4 → 2.9.1-next.6

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 (123) hide show
  1. package/dist/custom-elements.json +25 -20
  2. package/dist/docs/slider/examples.md +30 -75
  3. package/dist/docs/slider/slider.md +30 -75
  4. package/dist/docs/step/api.md +11 -9
  5. package/dist/docs/step/step.md +11 -15
  6. package/dist/docs/step-indicator/api.md +4 -4
  7. package/dist/docs/step-indicator/examples.md +81 -0
  8. package/dist/docs/step-indicator/step-indicator.md +97 -6
  9. package/dist/docs/step-indicator/usage.md +12 -0
  10. package/dist/docs/switch/accessibility.md +2 -0
  11. package/dist/docs/switch/api.md +11 -17
  12. package/dist/docs/switch/examples.md +16 -0
  13. package/dist/docs/switch/switch.md +36 -18
  14. package/dist/docs/switch/usage.md +6 -0
  15. package/dist/index.d.ts +64 -56
  16. package/dist/packages/affix/affix.react.stories.d.ts +3 -1
  17. package/dist/packages/affix/affix.react.test.d.ts +1 -0
  18. package/dist/packages/affix/affix.react.test.js +3 -0
  19. package/dist/packages/affix/react.d.ts +4 -1
  20. package/dist/packages/affix/react.js +7 -1
  21. package/dist/packages/attention/attention.react.test.d.ts +1 -0
  22. package/dist/packages/attention/attention.react.test.js +8 -0
  23. package/dist/packages/attention/react.d.ts +2 -2
  24. package/dist/packages/attention/react.js +10 -1
  25. package/dist/packages/button/button.react.stories.d.ts +8 -2
  26. package/dist/packages/button/button.react.test.d.ts +1 -0
  27. package/dist/packages/button/button.react.test.js +16 -0
  28. package/dist/packages/button/react.d.ts +5 -1
  29. package/dist/packages/button/react.js +8 -1
  30. package/dist/packages/checkbox-group/checkbox-group.react.test.d.ts +1 -0
  31. package/dist/packages/checkbox-group/checkbox-group.react.test.js +5 -0
  32. package/dist/packages/checkbox-group/react.d.ts +4 -1
  33. package/dist/packages/checkbox-group/react.js +7 -1
  34. package/dist/packages/combobox/combobox.react.stories.d.ts +20 -8
  35. package/dist/packages/combobox/combobox.react.test.d.ts +1 -0
  36. package/dist/packages/combobox/combobox.react.test.js +9 -0
  37. package/dist/packages/combobox/react.d.ts +13 -6
  38. package/dist/packages/combobox/react.js +11 -1
  39. package/dist/packages/datepicker/datepicker.react.stories.d.ts +18 -10
  40. package/dist/packages/datepicker/datepicker.react.test.d.ts +1 -0
  41. package/dist/packages/datepicker/datepicker.react.test.js +7 -0
  42. package/dist/packages/datepicker/react.d.ts +13 -8
  43. package/dist/packages/datepicker/react.js +9 -1
  44. package/dist/packages/expandable/expandable.react.stories.d.ts +12 -2
  45. package/dist/packages/expandable/expandable.react.test.d.ts +1 -0
  46. package/dist/packages/expandable/expandable.react.test.js +8 -0
  47. package/dist/packages/expandable/react.d.ts +7 -1
  48. package/dist/packages/expandable/react.js +10 -1
  49. package/dist/packages/link/link.react.stories.d.ts +6 -2
  50. package/dist/packages/link/link.react.test.d.ts +1 -0
  51. package/dist/packages/link/link.react.test.js +3 -0
  52. package/dist/packages/link/react.d.ts +4 -1
  53. package/dist/packages/link/react.js +7 -1
  54. package/dist/packages/modal/modal.react.stories.d.ts +10 -6
  55. package/dist/packages/modal/modal.react.test.d.ts +1 -0
  56. package/dist/packages/modal/modal.react.test.js +6 -0
  57. package/dist/packages/modal/react.d.ts +10 -6
  58. package/dist/packages/modal/react.js +8 -1
  59. package/dist/packages/modal-header/modal-header.react.test.d.ts +1 -0
  60. package/dist/packages/modal-header/modal-header.react.test.js +3 -0
  61. package/dist/packages/modal-header/react.d.ts +7 -4
  62. package/dist/packages/modal-header/react.js +7 -1
  63. package/dist/packages/page-indicator/page-indicator.react.stories.d.ts +8 -2
  64. package/dist/packages/page-indicator/page-indicator.react.test.d.ts +1 -0
  65. package/dist/packages/page-indicator/page-indicator.react.test.js +6 -0
  66. package/dist/packages/page-indicator/react.d.ts +5 -1
  67. package/dist/packages/page-indicator/react.js +8 -1
  68. package/dist/packages/pagination/pagination.react.stories.d.ts +14 -6
  69. package/dist/packages/pagination/pagination.react.test.d.ts +1 -0
  70. package/dist/packages/pagination/pagination.react.test.js +7 -0
  71. package/dist/packages/pagination/react.d.ts +9 -4
  72. package/dist/packages/pagination/react.js +9 -1
  73. package/dist/packages/pill/pill.react.stories.d.ts +20 -8
  74. package/dist/packages/pill/pill.react.test.d.ts +1 -0
  75. package/dist/packages/pill/pill.react.test.js +9 -0
  76. package/dist/packages/pill/react.d.ts +13 -6
  77. package/dist/packages/pill/react.js +11 -1
  78. package/dist/packages/radio-group/radio-group.react.test.d.ts +1 -0
  79. package/dist/packages/radio-group/radio-group.react.test.js +5 -0
  80. package/dist/packages/radio-group/react.d.ts +9 -6
  81. package/dist/packages/radio-group/react.js +7 -1
  82. package/dist/packages/select/react.d.ts +9 -4
  83. package/dist/packages/select/react.js +9 -1
  84. package/dist/packages/select/select.react.stories.d.ts +14 -6
  85. package/dist/packages/select/select.react.test.d.ts +1 -0
  86. package/dist/packages/select/select.react.test.js +7 -0
  87. package/dist/packages/slider/react.d.ts +6 -1
  88. package/dist/packages/slider/react.js +9 -1
  89. package/dist/packages/slider/slider.react.stories.d.ts +6 -1
  90. package/dist/packages/slider/slider.react.test.d.ts +1 -0
  91. package/dist/packages/slider/slider.react.test.js +7 -0
  92. package/dist/packages/slider-thumb/react.d.ts +8 -5
  93. package/dist/packages/slider-thumb/react.js +8 -1
  94. package/dist/packages/slider-thumb/slider-thumb.react.test.d.ts +1 -0
  95. package/dist/packages/slider-thumb/slider-thumb.react.test.js +6 -0
  96. package/dist/packages/step/step.d.ts +8 -4
  97. package/dist/packages/step/step.js.map +2 -2
  98. package/dist/packages/step-indicator/step-indicator.d.ts +5 -6
  99. package/dist/packages/step-indicator/step-indicator.js.map +2 -2
  100. package/dist/packages/switch/switch.d.ts +21 -8
  101. package/dist/packages/switch/switch.js +1 -1
  102. package/dist/packages/switch/switch.js.map +2 -2
  103. package/dist/packages/tab/react.d.ts +9 -6
  104. package/dist/packages/tab/react.js +7 -1
  105. package/dist/packages/tab/tab.react.test.d.ts +1 -0
  106. package/dist/packages/tab/tab.react.test.js +3 -0
  107. package/dist/packages/textarea/react.d.ts +16 -10
  108. package/dist/packages/textarea/react.js +10 -1
  109. package/dist/packages/textarea/textarea.react.stories.d.ts +22 -12
  110. package/dist/packages/textarea/textarea.react.test.d.ts +1 -0
  111. package/dist/packages/textarea/textarea.react.test.js +8 -0
  112. package/dist/packages/textfield/react.d.ts +16 -10
  113. package/dist/packages/textfield/react.js +10 -1
  114. package/dist/packages/textfield/textfield.react.stories.d.ts +22 -12
  115. package/dist/packages/textfield/textfield.react.test.d.ts +1 -0
  116. package/dist/packages/textfield/textfield.react.test.js +8 -0
  117. package/dist/tests/react-ssr-attributes.d.ts +8 -0
  118. package/dist/tests/react-ssr-attributes.js +12 -0
  119. package/dist/web-types.json +73 -15
  120. package/package.json +1 -1
  121. package/dist/docs/step/accessibility.md +0 -1
  122. package/dist/docs/step/examples.md +0 -1
  123. package/dist/docs/step/usage.md +0 -1
@@ -7219,6 +7219,7 @@
7219
7219
  "text": "boolean"
7220
7220
  },
7221
7221
  "default": "false",
7222
+ "description": "Whether this step is active.\n\nThe active step displays a filled indicator.",
7222
7223
  "attribute": "active",
7223
7224
  "reflects": true
7224
7225
  },
@@ -7229,6 +7230,7 @@
7229
7230
  "text": "boolean"
7230
7231
  },
7231
7232
  "default": "false",
7233
+ "description": "Whether this step is completed.\n\nCompleted steps display a checkmark icon and a filled indicator.",
7232
7234
  "attribute": "completed",
7233
7235
  "reflects": true
7234
7236
  },
@@ -7279,6 +7281,7 @@
7279
7281
  "text": "boolean"
7280
7282
  },
7281
7283
  "default": "false",
7284
+ "description": "Whether this step is active.\n\nThe active step displays a filled indicator.",
7282
7285
  "fieldName": "active"
7283
7286
  },
7284
7287
  {
@@ -7287,6 +7290,7 @@
7287
7290
  "text": "boolean"
7288
7291
  },
7289
7292
  "default": "false",
7293
+ "description": "Whether this step is completed.\n\nCompleted steps display a checkmark icon and a filled indicator.",
7290
7294
  "fieldName": "completed"
7291
7295
  }
7292
7296
  ],
@@ -7294,6 +7298,10 @@
7294
7298
  "name": "LitElement",
7295
7299
  "package": "lit"
7296
7300
  },
7301
+ "parent": {
7302
+ "name": "w-step-indicator",
7303
+ "description": ""
7304
+ },
7297
7305
  "tagName": "w-step",
7298
7306
  "customElement": true,
7299
7307
  "modulePath": "packages/step/step.ts",
@@ -7325,7 +7333,7 @@
7325
7333
  "declarations": [
7326
7334
  {
7327
7335
  "kind": "class",
7328
- "description": "Steps are used to show progress through a process or to guide users through a multi-step task.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/components-steps--docs)",
7336
+ "description": "Steps are used to show progress through a process or to guide users through a multi-step task.",
7329
7337
  "name": "WarpStepIndicator",
7330
7338
  "members": [
7331
7339
  {
@@ -7335,6 +7343,7 @@
7335
7343
  "text": "boolean"
7336
7344
  },
7337
7345
  "default": "false",
7346
+ "description": "Display steps horizontally instead of vertically",
7338
7347
  "attribute": "horizontal",
7339
7348
  "reflects": true
7340
7349
  },
@@ -7345,15 +7354,9 @@
7345
7354
  "text": "boolean"
7346
7355
  },
7347
7356
  "default": "false",
7357
+ "description": "Align steps to the right (vertical layout only)",
7348
7358
  "attribute": "right",
7349
7359
  "reflects": true
7350
- },
7351
- {
7352
- "kind": "method",
7353
- "name": "updateStepsContext",
7354
- "type": {
7355
- "text": "updateStepsContext() => void"
7356
- }
7357
7360
  }
7358
7361
  ],
7359
7362
  "attributes": [
@@ -7363,6 +7366,7 @@
7363
7366
  "text": "boolean"
7364
7367
  },
7365
7368
  "default": "false",
7369
+ "description": "Display steps horizontally instead of vertically",
7366
7370
  "fieldName": "horizontal"
7367
7371
  },
7368
7372
  {
@@ -7371,6 +7375,7 @@
7371
7375
  "text": "boolean"
7372
7376
  },
7373
7377
  "default": "false",
7378
+ "description": "Align steps to the right (vertical layout only)",
7374
7379
  "fieldName": "right"
7375
7380
  }
7376
7381
  ],
@@ -7409,24 +7414,16 @@
7409
7414
  "declarations": [
7410
7415
  {
7411
7416
  "kind": "class",
7412
- "description": "",
7417
+ "description": "The Switch component allows users to toggle between two states.",
7413
7418
  "name": "WarpSwitch",
7414
7419
  "members": [
7415
- {
7416
- "kind": "field",
7417
- "name": "shadowRootOptions",
7418
- "type": {
7419
- "text": "object"
7420
- },
7421
- "static": true,
7422
- "default": "{ ...LitElement.shadowRootOptions, delegatesFocus: true, }"
7423
- },
7424
7420
  {
7425
7421
  "kind": "field",
7426
7422
  "name": "name",
7427
7423
  "type": {
7428
7424
  "text": "string"
7429
7425
  },
7426
+ "description": "Name used when submitting an HTML form.",
7430
7427
  "attribute": "name",
7431
7428
  "reflects": true
7432
7429
  },
@@ -7436,6 +7433,7 @@
7436
7433
  "type": {
7437
7434
  "text": "string"
7438
7435
  },
7436
+ "description": "Value submitted when the switch is checked.\n\nThe component reports `null` as the value in the `change` event when `value` is an empty string.",
7439
7437
  "attribute": "value",
7440
7438
  "reflects": true
7441
7439
  },
@@ -7446,6 +7444,7 @@
7446
7444
  "text": "boolean"
7447
7445
  },
7448
7446
  "default": "false",
7447
+ "description": "Whether the switch is on (checked).",
7449
7448
  "attribute": "checked",
7450
7449
  "reflects": true
7451
7450
  },
@@ -7456,6 +7455,7 @@
7456
7455
  "text": "boolean"
7457
7456
  },
7458
7457
  "default": "false",
7458
+ "description": "Whether the switch is disabled.",
7459
7459
  "attribute": "disabled",
7460
7460
  "reflects": true
7461
7461
  },
@@ -7485,8 +7485,9 @@
7485
7485
  {
7486
7486
  "name": "change",
7487
7487
  "type": {
7488
- "text": "CustomEvent"
7489
- }
7488
+ "text": "WarpSwitchChangeEvent"
7489
+ },
7490
+ "description": "Dispatched when the switch toggles. Includes boolean `checked` and string/null `value` on `details`."
7490
7491
  }
7491
7492
  ],
7492
7493
  "attributes": [
@@ -7495,6 +7496,7 @@
7495
7496
  "type": {
7496
7497
  "text": "string"
7497
7498
  },
7499
+ "description": "Name used when submitting an HTML form.",
7498
7500
  "fieldName": "name"
7499
7501
  },
7500
7502
  {
@@ -7502,6 +7504,7 @@
7502
7504
  "type": {
7503
7505
  "text": "string"
7504
7506
  },
7507
+ "description": "Value submitted when the switch is checked.\n\nThe component reports `null` as the value in the `change` event when `value` is an empty string.",
7505
7508
  "fieldName": "value"
7506
7509
  },
7507
7510
  {
@@ -7510,6 +7513,7 @@
7510
7513
  "text": "boolean"
7511
7514
  },
7512
7515
  "default": "false",
7516
+ "description": "Whether the switch is on (checked).",
7513
7517
  "fieldName": "checked"
7514
7518
  },
7515
7519
  {
@@ -7518,6 +7522,7 @@
7518
7522
  "text": "boolean"
7519
7523
  },
7520
7524
  "default": "false",
7525
+ "description": "Whether the switch is disabled.",
7521
7526
  "fieldName": "disabled"
7522
7527
  }
7523
7528
  ],
@@ -25,11 +25,7 @@
25
25
  aria-label="From value"
26
26
  name="from"
27
27
  ></w-slider-thumb>
28
- <w-slider-thumb
29
- slot="to"
30
- aria-label="To value"
31
- name="to"
32
- ></w-slider-thumb>
28
+ <w-slider-thumb slot="to" aria-label="To value" name="to"></w-slider-thumb>
33
29
  </w-slider>
34
30
  ```
35
31
 
@@ -47,20 +43,20 @@ Users can also choose to enter values into the input field that are outside the
47
43
 
48
44
  ```html
49
45
  <form id="openended">
50
- <w-slider label="Production year" min="1950" max="2025" open-ended>
46
+ <w-slider label="Production year" min="1950" max="2025" open-ended data-testid="open-ended">
51
47
  <w-slider-thumb slot="from" name="from-year"></w-slider-thumb>
52
48
  <w-slider-thumb slot="to" name="to-year"></w-slider-thumb>
53
49
  </w-slider>
54
50
  </form>
55
51
  <script>
56
- const openEndedSlider = document.querySelector("w-slider");
57
-
52
+ const openEndedSlider = document.querySelector('w-slider[data-testid="open-ended"]');
58
53
  openEndedSlider.labelFormatter = function (slot) {
59
54
  if (slot === "from") {
60
55
  return "Before 1950";
61
56
  }
62
57
  return "2025+";
63
58
  };
59
+
64
60
  openEndedSlider.valueFormatter = function (value, slot) {
65
61
  if (slot === "from" && value === "") {
66
62
  return "Min";
@@ -70,13 +66,8 @@ Users can also choose to enter values into the input field that are outside the
70
66
  }
71
67
  return value;
72
68
  };
73
-
74
- document.forms["openended"].addEventListener("input", function () {
75
- const formData = new FormData(this);
76
- const from = formData.get("from-year");
77
- const to = formData.get("to-year");
78
- });
79
69
  </script>
70
+
80
71
  ```
81
72
 
82
73
  </elements-example>
@@ -92,8 +83,7 @@ You can set a `suffix` on `<w-slider>` and have it apply to any input field in t
92
83
  label="Apartment size"
93
84
  min="0"
94
85
  max="250"
95
- suffix="${suffix}"
96
- data-testid="sqm"
86
+ suffix="sqm"
97
87
  >
98
88
  <w-slider-thumb
99
89
  slot="from"
@@ -114,34 +104,22 @@ You can set a `suffix` on `<w-slider>` and have it apply to any input field in t
114
104
 
115
105
  If you need to format numbers, use the [`valueFormatter`](#valueformatter) and [`labelFormatter`](#labelFormatter) properties.
116
106
 
117
- <elements-example>
107
+ <elements-example >
118
108
 
119
109
  ```html
120
- <w-slider
121
- label="Price"
122
- min="0"
123
- max="250000"
124
- suffix="${suffix}"
125
- data-testid="currency"
126
- >
110
+ <w-slider label="Price" min="0" max="250000" suffix="kr" data-testid="currency">
127
111
  <w-slider-thumb
128
112
  slot="from"
129
113
  aria-label="From price"
130
114
  name="from"
131
115
  ></w-slider-thumb>
132
- <w-slider-thumb
133
- slot="to"
134
- aria-label="To price"
135
- name="to"
136
- ></w-slider-thumb>
116
+ <w-slider-thumb slot="to" aria-label="To price" name="to"></w-slider-thumb>
137
117
  </w-slider>
138
- <script type="module">
139
- const numberFormatter = window.getNumberFormatter(
140
- "${locale}",
141
- ).format;
142
- const currencySlider = document.querySelector(
143
- 'w-slider[data-testid="currency"]',
144
- );
118
+ <script>
119
+ const numberFormatter = new Intl.NumberFormat("en", {
120
+ maximumFractionDigits: 0,
121
+ }).format;
122
+ const currencySlider = document.querySelector('w-slider[data-testid="currency"]');
145
123
  currencySlider.valueFormatter = numberFormatter;
146
124
  currencySlider.labelFormatter = (slot) => {
147
125
  if (slot === "from") return "0";
@@ -159,7 +137,7 @@ Sets the [`step` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HT
159
137
  <elements-example>
160
138
 
161
139
  ```html
162
- <w-slider label="Single" step="${step}" min="0" max="100">
140
+ <w-slider label="Single" step="5" min="0" max="100">
163
141
  <w-slider-thumb name="value"></w-slider-thumb>
164
142
  </w-slider>
165
143
  ```
@@ -173,13 +151,7 @@ Show tick markers along the slider. Only works with a single slider.
173
151
  <elements-example>
174
152
 
175
153
  ```html
176
- <w-slider
177
- label="Single"
178
- min="0"
179
- max="100"
180
- step="5"
181
- markers="5"
182
- >
154
+ <w-slider label="Single" min="0" max="100" step="5" markers="5">
183
155
  <w-slider-thumb name="value"></w-slider-thumb>
184
156
  </w-slider>
185
157
  ```
@@ -228,11 +200,7 @@ Show tick markers along the slider. Only works with a single slider.
228
200
  <elements-example>
229
201
 
230
202
  ```html
231
- <w-slider
232
- min="1950"
233
- max="2025"
234
- help-text="Model year of the car"
235
- >
203
+ <w-slider min="1950" max="2025" help-text="Model year of the car">
236
204
  <legend class="sr-only" slot="label">Model year</legend>
237
205
  <w-slider-thumb slot="from" name="from"></w-slider-thumb>
238
206
  <w-slider-thumb slot="to" name="to"></w-slider-thumb>
@@ -241,7 +209,6 @@ Show tick markers along the slider. Only works with a single slider.
241
209
 
242
210
  </elements-example>
243
211
 
244
-
245
212
  ### Hidden min and max value labels
246
213
 
247
214
  Give the component a label formatter and always return the empty string.
@@ -249,21 +216,13 @@ Give the component a label formatter and always return the empty string.
249
216
  <elements-example>
250
217
 
251
218
  ```html
252
-
253
- <w-slider
254
- min="1950"
255
- max="2025"
256
- help-text="Model year of the car"
257
- data-testid="hidden-minmax-label"
258
- >
219
+ <w-slider min="1950" max="2025" help-text="Model year of the car" data-testid="hidden-minmax-label">
259
220
  <legend class="sr-only" slot="label">Model year</legend>
260
221
  <w-slider-thumb slot="from" name="from"></w-slider-thumb>
261
222
  <w-slider-thumb slot="to" name="to"></w-slider-thumb>
262
223
  </w-slider>
263
224
  <script>
264
- const hiddenMinMaxSlider = document.querySelector(
265
- 'w-slider[data-testid="hidden-minmax-label"]',
266
- );
225
+ const hiddenMinMaxSlider = document.querySelector('w-slider[data-testid="hidden-minmax-label"]');
267
226
  hiddenMinMaxSlider.labelFormatter = () => "";
268
227
  </script>
269
228
  ```
@@ -279,7 +238,7 @@ The text field doubles as a visualization of the exact value, which is difficult
279
238
  ```html
280
239
  <output class="text-xs">
281
240
  <span class="font-bold">Distance:</span>
282
- <span id="distance-value"></span>
241
+ <span data-testid="distance-value"></span>
283
242
  </output>
284
243
  <form name="map">
285
244
  <w-slider min="0" max="20" hidden-textfield data-testid="map-radius">
@@ -288,44 +247,40 @@ The text field doubles as a visualization of the exact value, which is difficult
288
247
  </w-slider>
289
248
  </form>
290
249
  <script>
250
+ const mapRadiusSlider = document.querySelector('w-slider[data-testid="map-radius"]');
251
+
291
252
  const radiusSteps = [
292
- 200, 300, 400, 500, 700, 1000, 1500, 2000, 3000, 5000, 7000, 10000,
293
- 20000, 30000, 50000, 75000, 100000, 200000, 300000, 400000, 500000,
253
+ 200, 300, 400, 500, 700, 1000, 1500, 2000, 3000, 5000, 7000, 10000, 20000,
254
+ 30000, 50000, 75000, 100000, 200000, 300000, 400000, 500000,
294
255
  ];
295
- const mapRadiusSlider = document.querySelector(
296
- 'w-slider[data-testid="map-radius"]',
297
- );
298
- const formatter = window.getNumberFormatter("${locale}");
299
- function formatDistance(value) {
256
+ const formatter = new Intl.NumberFormat("en", { maximumFractionDigits: 0 });
257
+
258
+ const formatDistance = (value) => {
300
259
  const index = Number.parseInt(value);
301
260
  const numValue = radiusSteps[index];
302
261
 
303
262
  let formattedValue = "";
304
263
 
305
264
  if (numValue < 1000) {
306
- // Use non-breaking space here
307
265
  formattedValue = formatter.format(numValue) + " m";
308
266
  } else {
309
267
  formattedValue = formatter.format(numValue / 1000) + " km";
310
268
  }
311
269
  return formattedValue;
312
270
  };
271
+
313
272
  mapRadiusSlider.labelFormatter = (slot) => {
314
273
  if (slot === "from") {
315
274
  return formatDistance("0");
316
275
  }
317
276
  return formatDistance(String(radiusSteps.length - 1));
318
277
  };
278
+
319
279
  mapRadiusSlider.valueFormatter = (value) => {
320
280
  const formattedValue = formatDistance(value);
321
- document.getElementById("distance-value").innerText = formattedValue;
281
+ document.querySelector('[data-testid="distance-value"]').innerText = formattedValue;
322
282
  return formattedValue;
323
283
  };
324
-
325
- document.forms["map"].addEventListener("input", function () {
326
- const formData = new FormData(this);
327
- const distance = formData.get("distance");
328
- });
329
284
  </script>
330
285
  ```
331
286
 
@@ -45,11 +45,7 @@ Sliders come in two main variants:
45
45
  aria-label="From value"
46
46
  name="from"
47
47
  ></w-slider-thumb>
48
- <w-slider-thumb
49
- slot="to"
50
- aria-label="To value"
51
- name="to"
52
- ></w-slider-thumb>
48
+ <w-slider-thumb slot="to" aria-label="To value" name="to"></w-slider-thumb>
53
49
  </w-slider>
54
50
  ```
55
51
 
@@ -67,20 +63,20 @@ Users can also choose to enter values into the input field that are outside the
67
63
 
68
64
  ```html
69
65
  <form id="openended">
70
- <w-slider label="Production year" min="1950" max="2025" open-ended>
66
+ <w-slider label="Production year" min="1950" max="2025" open-ended data-testid="open-ended">
71
67
  <w-slider-thumb slot="from" name="from-year"></w-slider-thumb>
72
68
  <w-slider-thumb slot="to" name="to-year"></w-slider-thumb>
73
69
  </w-slider>
74
70
  </form>
75
71
  <script>
76
- const openEndedSlider = document.querySelector("w-slider");
77
-
72
+ const openEndedSlider = document.querySelector('w-slider[data-testid="open-ended"]');
78
73
  openEndedSlider.labelFormatter = function (slot) {
79
74
  if (slot === "from") {
80
75
  return "Before 1950";
81
76
  }
82
77
  return "2025+";
83
78
  };
79
+
84
80
  openEndedSlider.valueFormatter = function (value, slot) {
85
81
  if (slot === "from" && value === "") {
86
82
  return "Min";
@@ -90,13 +86,8 @@ Users can also choose to enter values into the input field that are outside the
90
86
  }
91
87
  return value;
92
88
  };
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
89
  </script>
90
+
100
91
  ```
101
92
 
102
93
  </elements-example>
@@ -112,8 +103,7 @@ You can set a `suffix` on `<w-slider>` and have it apply to any input field in t
112
103
  label="Apartment size"
113
104
  min="0"
114
105
  max="250"
115
- suffix="${suffix}"
116
- data-testid="sqm"
106
+ suffix="sqm"
117
107
  >
118
108
  <w-slider-thumb
119
109
  slot="from"
@@ -134,34 +124,22 @@ You can set a `suffix` on `<w-slider>` and have it apply to any input field in t
134
124
 
135
125
  If you need to format numbers, use the [`valueFormatter`](#valueformatter) and [`labelFormatter`](#labelFormatter) properties.
136
126
 
137
- <elements-example>
127
+ <elements-example >
138
128
 
139
129
  ```html
140
- <w-slider
141
- label="Price"
142
- min="0"
143
- max="250000"
144
- suffix="${suffix}"
145
- data-testid="currency"
146
- >
130
+ <w-slider label="Price" min="0" max="250000" suffix="kr" data-testid="currency">
147
131
  <w-slider-thumb
148
132
  slot="from"
149
133
  aria-label="From price"
150
134
  name="from"
151
135
  ></w-slider-thumb>
152
- <w-slider-thumb
153
- slot="to"
154
- aria-label="To price"
155
- name="to"
156
- ></w-slider-thumb>
136
+ <w-slider-thumb slot="to" aria-label="To price" name="to"></w-slider-thumb>
157
137
  </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
- );
138
+ <script>
139
+ const numberFormatter = new Intl.NumberFormat("en", {
140
+ maximumFractionDigits: 0,
141
+ }).format;
142
+ const currencySlider = document.querySelector('w-slider[data-testid="currency"]');
165
143
  currencySlider.valueFormatter = numberFormatter;
166
144
  currencySlider.labelFormatter = (slot) => {
167
145
  if (slot === "from") return "0";
@@ -179,7 +157,7 @@ Sets the [`step` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HT
179
157
  <elements-example>
180
158
 
181
159
  ```html
182
- <w-slider label="Single" step="${step}" min="0" max="100">
160
+ <w-slider label="Single" step="5" min="0" max="100">
183
161
  <w-slider-thumb name="value"></w-slider-thumb>
184
162
  </w-slider>
185
163
  ```
@@ -193,13 +171,7 @@ Show tick markers along the slider. Only works with a single slider.
193
171
  <elements-example>
194
172
 
195
173
  ```html
196
- <w-slider
197
- label="Single"
198
- min="0"
199
- max="100"
200
- step="5"
201
- markers="5"
202
- >
174
+ <w-slider label="Single" min="0" max="100" step="5" markers="5">
203
175
  <w-slider-thumb name="value"></w-slider-thumb>
204
176
  </w-slider>
205
177
  ```
@@ -248,11 +220,7 @@ Show tick markers along the slider. Only works with a single slider.
248
220
  <elements-example>
249
221
 
250
222
  ```html
251
- <w-slider
252
- min="1950"
253
- max="2025"
254
- help-text="Model year of the car"
255
- >
223
+ <w-slider min="1950" max="2025" help-text="Model year of the car">
256
224
  <legend class="sr-only" slot="label">Model year</legend>
257
225
  <w-slider-thumb slot="from" name="from"></w-slider-thumb>
258
226
  <w-slider-thumb slot="to" name="to"></w-slider-thumb>
@@ -261,7 +229,6 @@ Show tick markers along the slider. Only works with a single slider.
261
229
 
262
230
  </elements-example>
263
231
 
264
-
265
232
  ### Hidden min and max value labels
266
233
 
267
234
  Give the component a label formatter and always return the empty string.
@@ -269,21 +236,13 @@ Give the component a label formatter and always return the empty string.
269
236
  <elements-example>
270
237
 
271
238
  ```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
- >
239
+ <w-slider min="1950" max="2025" help-text="Model year of the car" data-testid="hidden-minmax-label">
279
240
  <legend class="sr-only" slot="label">Model year</legend>
280
241
  <w-slider-thumb slot="from" name="from"></w-slider-thumb>
281
242
  <w-slider-thumb slot="to" name="to"></w-slider-thumb>
282
243
  </w-slider>
283
244
  <script>
284
- const hiddenMinMaxSlider = document.querySelector(
285
- 'w-slider[data-testid="hidden-minmax-label"]',
286
- );
245
+ const hiddenMinMaxSlider = document.querySelector('w-slider[data-testid="hidden-minmax-label"]');
287
246
  hiddenMinMaxSlider.labelFormatter = () => "";
288
247
  </script>
289
248
  ```
@@ -299,7 +258,7 @@ The text field doubles as a visualization of the exact value, which is difficult
299
258
  ```html
300
259
  <output class="text-xs">
301
260
  <span class="font-bold">Distance:</span>
302
- <span id="distance-value"></span>
261
+ <span data-testid="distance-value"></span>
303
262
  </output>
304
263
  <form name="map">
305
264
  <w-slider min="0" max="20" hidden-textfield data-testid="map-radius">
@@ -308,44 +267,40 @@ The text field doubles as a visualization of the exact value, which is difficult
308
267
  </w-slider>
309
268
  </form>
310
269
  <script>
270
+ const mapRadiusSlider = document.querySelector('w-slider[data-testid="map-radius"]');
271
+
311
272
  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,
273
+ 200, 300, 400, 500, 700, 1000, 1500, 2000, 3000, 5000, 7000, 10000, 20000,
274
+ 30000, 50000, 75000, 100000, 200000, 300000, 400000, 500000,
314
275
  ];
315
- const mapRadiusSlider = document.querySelector(
316
- 'w-slider[data-testid="map-radius"]',
317
- );
318
- const formatter = window.getNumberFormatter("${locale}");
319
- function formatDistance(value) {
276
+ const formatter = new Intl.NumberFormat("en", { maximumFractionDigits: 0 });
277
+
278
+ const formatDistance = (value) => {
320
279
  const index = Number.parseInt(value);
321
280
  const numValue = radiusSteps[index];
322
281
 
323
282
  let formattedValue = "";
324
283
 
325
284
  if (numValue < 1000) {
326
- // Use non-breaking space here
327
285
  formattedValue = formatter.format(numValue) + " m";
328
286
  } else {
329
287
  formattedValue = formatter.format(numValue / 1000) + " km";
330
288
  }
331
289
  return formattedValue;
332
290
  };
291
+
333
292
  mapRadiusSlider.labelFormatter = (slot) => {
334
293
  if (slot === "from") {
335
294
  return formatDistance("0");
336
295
  }
337
296
  return formatDistance(String(radiusSteps.length - 1));
338
297
  };
298
+
339
299
  mapRadiusSlider.valueFormatter = (value) => {
340
300
  const formattedValue = formatDistance(value);
341
- document.getElementById("distance-value").innerText = formattedValue;
301
+ document.querySelector('[data-testid="distance-value"]').innerText = formattedValue;
342
302
  return formattedValue;
343
303
  };
344
-
345
- document.forms["map"].addEventListener("input", function () {
346
- const formData = new FormData(this);
347
- const distance = formData.get("distance");
348
- });
349
304
  </script>
350
305
  ```
351
306
 
@@ -1,26 +1,28 @@
1
- ## `<w-step>` API
1
+ ### `<w-step>` API
2
2
 
3
- Unless otherwise noted all properties are HTML attributes (as opposed to JavaScript object properties).
4
-
5
- ### Properties
3
+ #### Properties
6
4
 
7
5
  | Name | Type | Default | Summary |
8
6
  |-|-|-|-|
9
- | active | `boolean` | `false` | - |
10
- | completed | `boolean` | `false` | - |
7
+ | active | `boolean` | `false` | Whether this step is active. |
8
+ | completed | `boolean` | `false` | Whether this step is completed. |
11
9
 
12
- ### Property Details
10
+ #### Property Details
13
11
 
14
- #### active
12
+ ##### active
15
13
 
14
+ Whether this step is active.
16
15
 
16
+ The active step displays a filled indicator.
17
17
 
18
18
  - Type: `boolean`
19
19
  - Default: `false`
20
20
 
21
- #### completed
21
+ ##### completed
22
22
 
23
+ Whether this step is completed.
23
24
 
25
+ Completed steps display a checkmark icon and a filled indicator.
24
26
 
25
27
  - Type: `boolean`
26
28
  - Default: `false`