@warp-ds/elements 2.10.0-next.9 → 2.10.1-next.1
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/.storybook/utilities.js +4 -4
- package/dist/api.js.map +2 -2
- package/dist/custom-elements.json +1211 -542
- package/dist/docs/affix/affix.md +111 -2
- package/dist/docs/affix/api.md +2 -2
- package/dist/docs/affix/styling.md +107 -0
- package/dist/docs/alert/alert.md +5 -5
- package/dist/docs/alert/api.md +4 -4
- package/dist/docs/attention/api.md +50 -2
- package/dist/docs/attention/attention.md +53 -3
- package/dist/docs/badge/api.md +50 -4
- package/dist/docs/badge/badge.md +50 -4
- package/dist/docs/box/api.md +2 -2
- package/dist/docs/box/box.md +4 -2
- package/dist/docs/breadcrumb-item/api.md +27 -0
- package/dist/docs/breadcrumb-item/breadcrumb-item.md +36 -0
- package/dist/docs/breadcrumbs/accessibility.md +8 -18
- package/dist/docs/breadcrumbs/breadcrumbs.md +123 -34
- package/dist/docs/breadcrumbs/examples.md +8 -8
- package/dist/docs/breadcrumbs/styling.md +96 -0
- package/dist/docs/breadcrumbs/usage.md +8 -8
- package/dist/docs/button/api.md +32 -24
- package/dist/docs/button/button.md +35 -24
- package/dist/docs/card/api.md +8 -0
- package/dist/docs/card/card.md +10 -0
- package/dist/docs/checkbox/api.md +52 -13
- package/dist/docs/checkbox/checkbox.md +231 -14
- package/dist/docs/checkbox/styling.md +173 -0
- package/dist/docs/checkbox-group/api.md +30 -6
- package/dist/docs/checkbox-group/checkbox-group.md +66 -36
- package/dist/docs/checkbox-group/styling.md +31 -29
- package/dist/docs/combobox/api.md +20 -12
- package/dist/docs/combobox/combobox.md +22 -12
- package/dist/docs/datepicker/api.md +22 -14
- package/dist/docs/datepicker/datepicker.md +24 -16
- package/dist/docs/expandable/api.md +6 -6
- package/dist/docs/expandable/expandable.md +8 -6
- package/dist/docs/icon/api.md +4 -4
- package/dist/docs/icon/icon.md +5 -5
- package/dist/docs/index.md +35 -32
- package/dist/docs/link/api.md +10 -10
- package/dist/docs/link/link.md +13 -11
- package/dist/docs/modal/api.md +20 -2
- package/dist/docs/modal/modal.md +101 -10
- package/dist/docs/modal/styling.md +75 -0
- package/dist/docs/modal/usage.md +4 -8
- package/dist/docs/modal-footer/modal-footer.md +2 -0
- package/dist/docs/modal-header/modal-header.md +2 -0
- package/dist/docs/page-indicator/page-indicator.md +2 -0
- package/dist/docs/pagination/api.md +4 -4
- package/dist/docs/pagination/pagination.md +6 -4
- package/dist/docs/pill/api.md +8 -8
- package/dist/docs/pill/pill.md +10 -8
- package/dist/docs/radio/radio.md +5 -1
- package/dist/docs/radio-group/api.md +4 -4
- package/dist/docs/radio-group/radio-group.md +186 -69
- package/dist/docs/radio-group/styling.md +179 -64
- package/dist/docs/select/api.md +10 -10
- package/dist/docs/select/select.md +103 -10
- package/dist/docs/select/styling.md +91 -0
- package/dist/docs/slider/api.md +38 -22
- package/dist/docs/slider/slider.md +40 -22
- package/dist/docs/slider-thumb/api.md +28 -12
- package/dist/docs/slider-thumb/slider-thumb.md +28 -12
- package/dist/docs/snackbar/accessibility.md +20 -0
- package/dist/docs/snackbar/api.md +30 -0
- package/dist/docs/snackbar/examples.md +191 -0
- package/dist/docs/snackbar/snackbar.md +387 -0
- package/dist/docs/snackbar/styling.md +72 -0
- package/dist/docs/snackbar/usage.md +60 -0
- package/dist/docs/snackbar-item/api.md +41 -0
- package/dist/docs/snackbar-item/snackbar-item.md +51 -0
- package/dist/docs/step/api.md +16 -0
- package/dist/docs/step/step.md +19 -1
- package/dist/docs/step-indicator/step-indicator.md +2 -0
- package/dist/docs/switch/api.md +8 -0
- package/dist/docs/switch/switch.md +10 -0
- package/dist/docs/tab/tab.md +2 -0
- package/dist/docs/tab-panel/tab-panel.md +3 -0
- package/dist/docs/tabs/api.md +3 -3
- package/dist/docs/tabs/tabs.md +5 -3
- package/dist/docs/textarea/api.md +54 -14
- package/dist/docs/textarea/styling.md +91 -0
- package/dist/docs/textarea/textarea.md +146 -19
- package/dist/docs/textfield/api.md +74 -34
- package/dist/docs/textfield/styling.md +95 -0
- package/dist/docs/textfield/textfield.md +171 -34
- package/dist/entrypoint-react.d.ts +38 -0
- package/dist/entrypoint-react.js +39 -0
- package/dist/index.d.ts +1007 -154
- package/dist/packages/affix/affix-styles.d.ts +8 -0
- package/dist/packages/affix/affix-styles.js +108 -0
- package/dist/packages/affix/affix.d.ts +12 -14
- package/dist/packages/affix/affix.hydration.test.d.ts +1 -1
- package/dist/packages/affix/affix.hydration.test.js +15 -15
- package/dist/packages/affix/affix.js +451 -320
- package/dist/packages/affix/affix.js.map +4 -4
- package/dist/packages/affix/affix.react.stories.d.ts +3 -3
- package/dist/packages/affix/affix.react.stories.js +3 -3
- package/dist/packages/affix/affix.react.test.js +5 -3
- package/dist/packages/affix/affix.stories.d.ts +3 -3
- package/dist/packages/affix/affix.stories.js +10 -10
- package/dist/packages/affix/affix.test.d.ts +1 -1
- package/dist/packages/affix/affix.test.js +10 -10
- package/dist/packages/affix/react.d.ts +8 -3
- package/dist/packages/affix/react.js +11 -6
- package/dist/packages/affix/styles.js +2 -2
- package/dist/packages/alert/alert.d.ts +9 -6
- package/dist/packages/alert/alert.hydration.test.d.ts +1 -1
- package/dist/packages/alert/alert.hydration.test.js +21 -21
- package/dist/packages/alert/alert.js +349 -324
- package/dist/packages/alert/alert.js.map +3 -3
- package/dist/packages/alert/alert.react.stories.d.ts +2 -2
- package/dist/packages/alert/alert.react.stories.js +13 -13
- package/dist/packages/alert/alert.stories.d.ts +4 -4
- package/dist/packages/alert/alert.stories.js +29 -27
- package/dist/packages/alert/alert.test.d.ts +1 -1
- package/dist/packages/alert/alert.test.js +34 -21
- package/dist/packages/alert/react.d.ts +8 -1
- package/dist/packages/alert/react.js +11 -4
- package/dist/packages/alert/styles.js +2 -2
- package/dist/packages/attention/attention.d.ts +14 -7
- package/dist/packages/attention/attention.hydration.test.d.ts +1 -1
- package/dist/packages/attention/attention.hydration.test.js +29 -29
- package/dist/packages/attention/attention.js +1744 -1681
- package/dist/packages/attention/attention.js.map +4 -4
- package/dist/packages/attention/attention.react.stories.d.ts +3 -3
- package/dist/packages/attention/attention.react.stories.js +13 -13
- package/dist/packages/attention/attention.react.test.js +11 -7
- package/dist/packages/attention/attention.stories.d.ts +4 -4
- package/dist/packages/attention/attention.stories.js +126 -117
- package/dist/packages/attention/attention.test.d.ts +1 -1
- package/dist/packages/attention/attention.test.js +18 -10
- package/dist/packages/attention/layout-styles.js +900 -900
- package/dist/packages/attention/react.d.ts +16 -6
- package/dist/packages/attention/react.js +22 -11
- package/dist/packages/attention/styles.js +2 -2
- package/dist/packages/badge/badge.d.ts +8 -3
- package/dist/packages/badge/badge.hydration.test.d.ts +1 -1
- package/dist/packages/badge/badge.hydration.test.js +25 -25
- package/dist/packages/badge/badge.js +281 -281
- package/dist/packages/badge/badge.js.map +3 -3
- package/dist/packages/badge/badge.react.stories.d.ts +3 -3
- package/dist/packages/badge/badge.react.stories.js +17 -17
- package/dist/packages/badge/badge.stories.d.ts +3 -3
- package/dist/packages/badge/badge.stories.js +22 -20
- package/dist/packages/badge/badge.test.d.ts +1 -1
- package/dist/packages/badge/badge.test.js +13 -11
- package/dist/packages/badge/react.d.ts +6 -1
- package/dist/packages/badge/react.js +9 -4
- package/dist/packages/badge/styles.js +2 -2
- package/dist/packages/box/box.d.ts +7 -2
- package/dist/packages/box/box.hydration.test.d.ts +1 -1
- package/dist/packages/box/box.hydration.test.js +14 -14
- package/dist/packages/box/box.js +288 -288
- package/dist/packages/box/box.js.map +3 -3
- package/dist/packages/box/box.react.stories.d.ts +4 -4
- package/dist/packages/box/box.react.stories.js +8 -8
- package/dist/packages/box/box.stories.d.ts +3 -3
- package/dist/packages/box/box.stories.js +25 -19
- package/dist/packages/box/box.test.d.ts +1 -1
- package/dist/packages/box/box.test.js +6 -6
- package/dist/packages/box/react.d.ts +6 -1
- package/dist/packages/box/react.js +9 -4
- package/dist/packages/box/slot.test.d.ts +1 -1
- package/dist/packages/box/slot.test.js +6 -6
- package/dist/packages/box/styles.js +2 -2
- package/dist/packages/breadcrumb-item/breadcrumb-item.d.ts +34 -0
- package/dist/packages/breadcrumb-item/breadcrumb-item.js +2529 -0
- package/dist/packages/breadcrumb-item/breadcrumb-item.js.map +7 -0
- package/dist/packages/breadcrumb-item/react.d.ts +8 -0
- package/dist/packages/breadcrumb-item/react.js +17 -0
- package/dist/packages/breadcrumb-item/styles.d.ts +4 -0
- package/dist/packages/breadcrumb-item/styles.js +81 -0
- package/dist/packages/breadcrumbs/breadcrumbs.d.ts +11 -4
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.d.ts +1 -1
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.js +55 -49
- package/dist/packages/breadcrumbs/breadcrumbs.js +288 -284
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +4 -4
- package/dist/packages/breadcrumbs/breadcrumbs.react.stories.d.ts +4 -4
- package/dist/packages/breadcrumbs/breadcrumbs.react.stories.js +17 -16
- package/dist/packages/breadcrumbs/breadcrumbs.stories.d.ts +7 -8
- package/dist/packages/breadcrumbs/breadcrumbs.stories.js +30 -26
- package/dist/packages/breadcrumbs/breadcrumbs.test.d.ts +1 -1
- package/dist/packages/breadcrumbs/breadcrumbs.test.js +19 -17
- package/dist/packages/breadcrumbs/react.d.ts +8 -1
- package/dist/packages/breadcrumbs/react.js +11 -4
- package/dist/packages/breadcrumbs/styles.js +2 -2
- package/dist/packages/button/button.d.ts +22 -16
- package/dist/packages/button/button.hydration.test.d.ts +1 -1
- package/dist/packages/button/button.hydration.test.js +19 -19
- package/dist/packages/button/button.js +758 -711
- package/dist/packages/button/button.js.map +4 -4
- package/dist/packages/button/button.react.stories.d.ts +5 -5
- package/dist/packages/button/button.react.stories.js +30 -30
- package/dist/packages/button/button.react.test.js +13 -13
- package/dist/packages/button/button.stories.d.ts +4 -4
- package/dist/packages/button/button.stories.js +276 -167
- package/dist/packages/button/button.test.d.ts +1 -1
- package/dist/packages/button/button.test.js +36 -35
- package/dist/packages/button/react.d.ts +10 -3
- package/dist/packages/button/react.js +14 -7
- package/dist/packages/button/styles.js +373 -331
- package/dist/packages/card/card.d.ts +7 -2
- package/dist/packages/card/card.hydration.test.d.ts +1 -1
- package/dist/packages/card/card.hydration.test.js +14 -14
- package/dist/packages/card/card.js +310 -295
- package/dist/packages/card/card.js.map +4 -4
- package/dist/packages/card/card.react.stories.d.ts +4 -4
- package/dist/packages/card/card.react.stories.js +11 -11
- package/dist/packages/card/card.stories.d.ts +3 -3
- package/dist/packages/card/card.stories.js +36 -24
- package/dist/packages/card/card.test.d.ts +1 -1
- package/dist/packages/card/card.test.js +6 -6
- package/dist/packages/card/react.d.ts +6 -1
- package/dist/packages/card/react.js +9 -4
- package/dist/packages/card/styles.js +2 -2
- package/dist/packages/checkbox/checkbox.a11y.test.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.a11y.test.js +47 -33
- package/dist/packages/checkbox/checkbox.d.ts +10 -4
- package/dist/packages/checkbox/checkbox.hydration.test.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.hydration.test.js +21 -21
- package/dist/packages/checkbox/checkbox.js +481 -430
- package/dist/packages/checkbox/checkbox.js.map +3 -3
- package/dist/packages/checkbox/checkbox.react.stories.d.ts +4 -4
- package/dist/packages/checkbox/checkbox.react.stories.js +3 -3
- package/dist/packages/checkbox/checkbox.stories.d.ts +4 -4
- package/dist/packages/checkbox/checkbox.stories.js +99 -91
- package/dist/packages/checkbox/checkbox.test.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.test.js +64 -64
- package/dist/packages/checkbox/react.d.ts +12 -3
- package/dist/packages/checkbox/react.js +13 -6
- package/dist/packages/checkbox/styles.js +183 -132
- package/dist/packages/checkbox-group/checkbox-group.a11y.test.d.ts +2 -2
- package/dist/packages/checkbox-group/checkbox-group.a11y.test.js +83 -73
- package/dist/packages/checkbox-group/checkbox-group.d.ts +13 -6
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.d.ts +2 -2
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.js +36 -19
- package/dist/packages/checkbox-group/checkbox-group.js +62 -57
- package/dist/packages/checkbox-group/checkbox-group.js.map +3 -3
- package/dist/packages/checkbox-group/checkbox-group.react.test.js +4 -4
- package/dist/packages/checkbox-group/checkbox-group.test.d.ts +2 -2
- package/dist/packages/checkbox-group/checkbox-group.test.js +183 -90
- package/dist/packages/checkbox-group/react.d.ts +10 -3
- package/dist/packages/checkbox-group/react.js +13 -6
- package/dist/packages/combobox/combobox.a11y.test.d.ts +2 -2
- package/dist/packages/combobox/combobox.a11y.test.js +72 -49
- package/dist/packages/combobox/combobox.d.ts +8 -3
- package/dist/packages/combobox/combobox.hydration.test.d.ts +1 -1
- package/dist/packages/combobox/combobox.hydration.test.js +45 -45
- package/dist/packages/combobox/combobox.js +337 -338
- package/dist/packages/combobox/combobox.js.map +4 -4
- package/dist/packages/combobox/combobox.react.stories.d.ts +45 -13
- package/dist/packages/combobox/combobox.react.stories.js +29 -29
- package/dist/packages/combobox/combobox.react.test.js +8 -8
- package/dist/packages/combobox/combobox.stories.d.ts +4 -4
- package/dist/packages/combobox/combobox.stories.js +100 -94
- package/dist/packages/combobox/combobox.test.d.ts +2 -2
- package/dist/packages/combobox/combobox.test.js +249 -133
- package/dist/packages/combobox/react.d.ts +28 -7
- package/dist/packages/combobox/react.js +23 -14
- package/dist/packages/combobox/styles.js +2 -3
- package/dist/packages/datepicker/DatePicker.test.d.ts +2 -2
- package/dist/packages/datepicker/DatePicker.test.js +49 -42
- package/dist/packages/datepicker/datepicker.d.ts +15 -12
- package/dist/packages/datepicker/datepicker.hydration.test.d.ts +1 -1
- package/dist/packages/datepicker/datepicker.hydration.test.js +21 -21
- package/dist/packages/datepicker/datepicker.js +673 -632
- package/dist/packages/datepicker/datepicker.js.map +4 -4
- package/dist/packages/datepicker/datepicker.react.stories.d.ts +17 -17
- package/dist/packages/datepicker/datepicker.react.stories.js +9 -9
- package/dist/packages/datepicker/datepicker.react.test.js +6 -6
- package/dist/packages/datepicker/datepicker.stories.d.ts +4 -4
- package/dist/packages/datepicker/datepicker.stories.js +32 -32
- package/dist/packages/datepicker/datepicker.test.d.ts +2 -2
- package/dist/packages/datepicker/datepicker.test.js +77 -79
- package/dist/packages/datepicker/react.d.ts +15 -9
- package/dist/packages/datepicker/react.js +21 -14
- package/dist/packages/datepicker/styles/w-datepicker-calendar.styles.js +13 -12
- package/dist/packages/datepicker/styles/w-datepicker-day.styles.js +58 -55
- package/dist/packages/datepicker/styles/w-datepicker-month.styles.js +60 -57
- package/dist/packages/datepicker/styles/w-datepicker.styles.js +87 -87
- package/dist/packages/datepicker/utils.d.ts +3 -0
- package/dist/packages/datepicker/utils.js +40 -1
- package/dist/packages/datepicker/utils.test.d.ts +1 -0
- package/dist/packages/datepicker/utils.test.js +29 -0
- package/dist/packages/expandable/expandable.d.ts +14 -7
- package/dist/packages/expandable/expandable.hydration.test.d.ts +1 -1
- package/dist/packages/expandable/expandable.hydration.test.js +21 -21
- package/dist/packages/expandable/expandable.js +359 -332
- package/dist/packages/expandable/expandable.js.map +4 -4
- package/dist/packages/expandable/expandable.react.stories.d.ts +3 -3
- package/dist/packages/expandable/expandable.react.stories.js +7 -7
- package/dist/packages/expandable/expandable.react.test.js +15 -7
- package/dist/packages/expandable/expandable.stories.d.ts +5 -5
- package/dist/packages/expandable/expandable.stories.js +51 -45
- package/dist/packages/expandable/expandable.test.d.ts +1 -1
- package/dist/packages/expandable/expandable.test.js +19 -17
- package/dist/packages/expandable/react.d.ts +7 -2
- package/dist/packages/expandable/react.js +14 -9
- package/dist/packages/expandable/styles.js +2 -2
- package/dist/packages/global.d.ts +1 -0
- package/dist/packages/global.js +5 -0
- package/dist/packages/i18n.d.ts +1 -1
- package/dist/packages/i18n.js +37 -29
- package/dist/packages/icon/icon.d.ts +10 -2
- package/dist/packages/icon/icon.hydration.test.d.ts +1 -1
- package/dist/packages/icon/icon.hydration.test.js +25 -25
- package/dist/packages/icon/icon.js +31 -26
- package/dist/packages/icon/icon.js.map +2 -2
- package/dist/packages/icon/icon.react.stories.d.ts +3 -2
- package/dist/packages/icon/icon.react.stories.js +284 -283
- package/dist/packages/icon/icon.stories.d.ts +7 -30
- package/dist/packages/icon/icon.stories.js +307 -297
- package/dist/packages/icon/icon.test.d.ts +1 -1
- package/dist/packages/icon/icon.test.js +36 -28
- package/dist/packages/icon/react.d.ts +4 -1
- package/dist/packages/icon/react.js +7 -4
- package/dist/packages/icon/style.js +24 -25
- package/dist/packages/interaction-type-detection.d.ts +22 -0
- package/dist/packages/interaction-type-detection.js +38 -0
- package/dist/packages/link/link.d.ts +14 -9
- package/dist/packages/link/link.hydration.test.d.ts +1 -1
- package/dist/packages/link/link.hydration.test.js +27 -27
- package/dist/packages/link/link.js +726 -679
- package/dist/packages/link/link.js.map +3 -3
- package/dist/packages/link/link.react.stories.d.ts +5 -5
- package/dist/packages/link/link.react.stories.js +42 -42
- package/dist/packages/link/link.react.test.js +5 -3
- package/dist/packages/link/link.stories.d.ts +3 -3
- package/dist/packages/link/link.stories.js +51 -51
- package/dist/packages/link/link.test.d.ts +1 -1
- package/dist/packages/link/link.test.js +11 -7
- package/dist/packages/link/react.d.ts +8 -3
- package/dist/packages/link/react.js +11 -6
- package/dist/packages/link/styles.js +63 -58
- package/dist/packages/modal/index.d.ts +7 -7
- package/dist/packages/modal/index.js +7 -7
- package/dist/packages/modal/modal.d.ts +26 -4
- package/dist/packages/modal/modal.hydration.test.d.ts +1 -1
- package/dist/packages/modal/modal.hydration.test.js +12 -12
- package/dist/packages/modal/modal.js +456 -409
- package/dist/packages/modal/modal.js.map +4 -4
- package/dist/packages/modal/modal.react.stories.d.ts +7 -7
- package/dist/packages/modal/modal.react.stories.js +15 -6
- package/dist/packages/modal/modal.react.test.js +5 -5
- package/dist/packages/modal/modal.stories.d.ts +9 -8
- package/dist/packages/modal/modal.stories.js +266 -248
- package/dist/packages/modal/react.d.ts +40 -8
- package/dist/packages/modal/react.js +45 -13
- package/dist/packages/modal/styles.d.ts +1 -0
- package/dist/packages/modal/styles.js +171 -0
- package/dist/packages/modal/util.js +3 -1
- package/dist/packages/modal-footer/modal-footer.d.ts +13 -2
- package/dist/packages/modal-footer/modal-footer.js +299 -296
- package/dist/packages/modal-footer/modal-footer.js.map +4 -4
- package/dist/packages/modal-footer/react.d.ts +6 -1
- package/dist/packages/modal-footer/react.js +9 -4
- package/dist/packages/modal-footer/styles.d.ts +1 -0
- package/dist/packages/modal-footer/styles.js +22 -0
- package/dist/packages/modal-header/modal-header.d.ts +21 -7
- package/dist/packages/modal-header/modal-header.js +451 -422
- package/dist/packages/modal-header/modal-header.js.map +4 -4
- package/dist/packages/modal-header/modal-header.react.test.js +5 -3
- package/dist/packages/modal-header/react.d.ts +9 -4
- package/dist/packages/modal-header/react.js +13 -8
- package/dist/packages/modal-header/styles.d.ts +1 -0
- package/dist/packages/modal-header/styles.js +96 -0
- package/dist/packages/page-indicator/page-indicator.d.ts +8 -5
- package/dist/packages/page-indicator/page-indicator.hydration.test.d.ts +1 -1
- package/dist/packages/page-indicator/page-indicator.hydration.test.js +22 -22
- package/dist/packages/page-indicator/page-indicator.js +29 -29
- package/dist/packages/page-indicator/page-indicator.js.map +4 -4
- package/dist/packages/page-indicator/page-indicator.react.stories.d.ts +3 -3
- package/dist/packages/page-indicator/page-indicator.react.stories.js +11 -11
- package/dist/packages/page-indicator/page-indicator.react.test.js +5 -5
- package/dist/packages/page-indicator/page-indicator.stories.d.ts +9 -27
- package/dist/packages/page-indicator/page-indicator.stories.js +63 -32
- package/dist/packages/page-indicator/page-indicator.test.d.ts +1 -1
- package/dist/packages/page-indicator/page-indicator.test.js +110 -70
- package/dist/packages/page-indicator/react.d.ts +9 -2
- package/dist/packages/page-indicator/react.js +14 -7
- package/dist/packages/page-indicator/style.js +21 -21
- package/dist/packages/pagination/pagination.a11y.test.d.ts +1 -1
- package/dist/packages/pagination/pagination.a11y.test.js +59 -25
- package/dist/packages/pagination/pagination.d.ts +17 -11
- package/dist/packages/pagination/pagination.hydration.test.d.ts +1 -1
- package/dist/packages/pagination/pagination.hydration.test.js +19 -19
- package/dist/packages/pagination/pagination.js +385 -354
- package/dist/packages/pagination/pagination.js.map +4 -4
- package/dist/packages/pagination/pagination.react.stories.d.ts +19 -11
- package/dist/packages/pagination/pagination.react.stories.js +8 -8
- package/dist/packages/pagination/pagination.react.test.js +6 -6
- package/dist/packages/pagination/pagination.stories.d.ts +3 -3
- package/dist/packages/pagination/pagination.stories.js +18 -18
- package/dist/packages/pagination/pagination.test.d.ts +1 -1
- package/dist/packages/pagination/pagination.test.js +146 -72
- package/dist/packages/pagination/react.d.ts +15 -6
- package/dist/packages/pagination/react.js +17 -10
- package/dist/packages/pagination/styles.js +2 -2
- package/dist/packages/pill/pill.d.ts +13 -6
- package/dist/packages/pill/pill.hydration.test.d.ts +1 -1
- package/dist/packages/pill/pill.hydration.test.js +14 -14
- package/dist/packages/pill/pill.js +337 -314
- package/dist/packages/pill/pill.js.map +4 -4
- package/dist/packages/pill/pill.react.stories.d.ts +15 -11
- package/dist/packages/pill/pill.react.stories.js +7 -3
- package/dist/packages/pill/pill.react.test.js +8 -8
- package/dist/packages/pill/pill.stories.d.ts +3 -3
- package/dist/packages/pill/pill.stories.js +8 -8
- package/dist/packages/pill/pill.test.d.ts +1 -1
- package/dist/packages/pill/pill.test.js +17 -15
- package/dist/packages/pill/react.d.ts +11 -6
- package/dist/packages/pill/react.js +23 -14
- package/dist/packages/pill/styles.js +2 -2
- package/dist/packages/radio/base-element.d.ts +3 -3
- package/dist/packages/radio/base-element.js +3 -3
- package/dist/packages/radio/custom-error-validator.d.ts +1 -1
- package/dist/packages/radio/custom-error-validator.js +3 -3
- package/dist/packages/radio/form-associated-element.d.ts +9 -9
- package/dist/packages/radio/form-associated-element.js +27 -26
- package/dist/packages/radio/host-styles.js +9 -9
- package/dist/packages/radio/invalid.d.ts +1 -1
- package/dist/packages/radio/invalid.js +1 -1
- package/dist/packages/radio/radio-styles.js +199 -160
- package/dist/packages/radio/radio.a11y.test.d.ts +2 -2
- package/dist/packages/radio/radio.a11y.test.js +60 -58
- package/dist/packages/radio/radio.d.ts +10 -4
- package/dist/packages/radio/radio.hydration.test.d.ts +1 -1
- package/dist/packages/radio/radio.hydration.test.js +23 -14
- package/dist/packages/radio/radio.js +491 -452
- package/dist/packages/radio/radio.js.map +3 -3
- package/dist/packages/radio/radio.react.stories.d.ts +2 -2
- package/dist/packages/radio/radio.react.stories.js +3 -3
- package/dist/packages/radio/radio.stories.d.ts +4 -4
- package/dist/packages/radio/radio.stories.js +152 -136
- package/dist/packages/radio/radio.test.d.ts +1 -1
- package/dist/packages/radio/radio.test.js +74 -73
- package/dist/packages/radio/react.d.ts +8 -1
- package/dist/packages/radio/react.js +11 -4
- package/dist/packages/radio/required-validator.d.ts +1 -1
- package/dist/packages/radio/required-validator.js +12 -7
- package/dist/packages/radio/slot.d.ts +1 -1
- package/dist/packages/radio/slot.js +11 -8
- package/dist/packages/radio/watch.d.ts +1 -1
- package/dist/packages/radio/watch.js +3 -1
- package/dist/packages/radio-group/radio-group-styles.js +121 -88
- package/dist/packages/radio-group/radio-group.a11y.test.d.ts +2 -2
- package/dist/packages/radio-group/radio-group.a11y.test.js +81 -79
- package/dist/packages/radio-group/radio-group.d.ts +10 -8
- package/dist/packages/radio-group/radio-group.hydration.test.d.ts +2 -2
- package/dist/packages/radio-group/radio-group.hydration.test.js +29 -18
- package/dist/packages/radio-group/radio-group.js +654 -566
- package/dist/packages/radio-group/radio-group.js.map +4 -4
- package/dist/packages/radio-group/radio-group.react.test.js +4 -4
- package/dist/packages/radio-group/radio-group.test.d.ts +2 -2
- package/dist/packages/radio-group/radio-group.test.js +304 -230
- package/dist/packages/radio-group/react.d.ts +14 -7
- package/dist/packages/radio-group/react.js +18 -10
- package/dist/packages/select/input-styles.d.ts +11 -0
- package/dist/packages/select/input-styles.js +88 -0
- package/dist/packages/select/locales/da/messages.mjs +1 -1
- package/dist/packages/select/locales/en/messages.mjs +1 -1
- package/dist/packages/select/locales/fi/messages.mjs +1 -1
- package/dist/packages/select/locales/nb/messages.mjs +1 -1
- package/dist/packages/select/locales/sv/messages.mjs +1 -1
- package/dist/packages/select/react.d.ts +11 -5
- package/dist/packages/select/react.js +16 -11
- package/dist/packages/select/select.a11y.test.d.ts +1 -1
- package/dist/packages/select/select.a11y.test.js +98 -91
- package/dist/packages/select/select.d.ts +18 -13
- package/dist/packages/select/select.hydration.test.d.ts +1 -1
- package/dist/packages/select/select.hydration.test.js +16 -16
- package/dist/packages/select/select.js +432 -336
- package/dist/packages/select/select.js.map +4 -4
- package/dist/packages/select/select.react.stories.d.ts +10 -10
- package/dist/packages/select/select.react.stories.js +19 -14
- package/dist/packages/select/select.react.test.js +6 -6
- package/dist/packages/select/select.stories.d.ts +3 -3
- package/dist/packages/select/select.stories.js +51 -48
- package/dist/packages/select/select.test.d.ts +1 -1
- package/dist/packages/select/select.test.js +227 -178
- package/dist/packages/select/styles.js +2 -2
- package/dist/packages/slider/index.d.ts +2 -2
- package/dist/packages/slider/index.js +2 -2
- 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/react.d.ts +9 -4
- package/dist/packages/slider/react.js +14 -9
- package/dist/packages/slider/slider.d.ts +32 -17
- package/dist/packages/slider/slider.hydration.test.d.ts +1 -1
- package/dist/packages/slider/slider.hydration.test.js +39 -20
- package/dist/packages/slider/slider.js +523 -466
- package/dist/packages/slider/slider.js.map +4 -4
- package/dist/packages/slider/slider.react.stories.d.ts +4 -4
- package/dist/packages/slider/slider.react.stories.js +31 -34
- package/dist/packages/slider/slider.react.test.js +6 -6
- package/dist/packages/slider/slider.stories.d.ts +9 -7
- package/dist/packages/slider/slider.stories.js +369 -340
- package/dist/packages/slider/slider.test.d.ts +5 -5
- package/dist/packages/slider/slider.test.js +476 -336
- package/dist/packages/slider/styles/w-slider.styles.js +166 -148
- package/dist/packages/slider/styles.js +2 -2
- package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.d.ts +1 -1
- package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.js +1 -1
- package/dist/packages/slider-thumb/react.d.ts +16 -5
- package/dist/packages/slider-thumb/react.js +16 -9
- package/dist/packages/slider-thumb/slider-thumb.d.ts +22 -17
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.d.ts +1 -1
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.js +26 -17
- package/dist/packages/slider-thumb/slider-thumb.js +549 -552
- package/dist/packages/slider-thumb/slider-thumb.js.map +4 -4
- package/dist/packages/slider-thumb/slider-thumb.react.test.js +9 -5
- package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.js +189 -188
- package/dist/packages/slider-thumb/styles.d.ts +1 -0
- package/dist/packages/slider-thumb/styles.js +2 -0
- package/dist/packages/snackbar/locales/da/messages.d.mts +1 -0
- package/dist/packages/snackbar/locales/da/messages.mjs +1 -0
- package/dist/packages/snackbar/locales/en/messages.d.mts +1 -0
- package/dist/packages/snackbar/locales/en/messages.mjs +1 -0
- package/dist/packages/snackbar/locales/fi/messages.d.mts +1 -0
- package/dist/packages/snackbar/locales/fi/messages.mjs +1 -0
- package/dist/packages/snackbar/locales/nb/messages.d.mts +1 -0
- package/dist/packages/snackbar/locales/nb/messages.mjs +1 -0
- package/dist/packages/snackbar/locales/sv/messages.d.mts +1 -0
- package/dist/packages/snackbar/locales/sv/messages.mjs +1 -0
- package/dist/packages/snackbar/react.d.ts +41 -0
- package/dist/packages/snackbar/react.js +50 -0
- package/dist/packages/snackbar/snackbar.d.ts +134 -0
- package/dist/packages/snackbar/snackbar.hydration.test.d.ts +1 -0
- package/dist/packages/snackbar/snackbar.hydration.test.js +13 -0
- package/dist/packages/snackbar/snackbar.js +2665 -0
- package/dist/packages/snackbar/snackbar.js.map +7 -0
- package/dist/packages/snackbar/snackbar.react.stories.d.ts +12 -0
- package/dist/packages/snackbar/snackbar.react.stories.js +160 -0
- package/dist/packages/snackbar/snackbar.stories.d.ts +20 -0
- package/dist/packages/snackbar/snackbar.stories.js +363 -0
- package/dist/packages/snackbar/snackbar.test.d.ts +4 -0
- package/dist/packages/snackbar/snackbar.test.js +17 -0
- package/dist/packages/snackbar/styles.d.ts +1 -0
- package/dist/packages/snackbar/styles.js +35 -0
- package/dist/packages/snackbar-item/react.d.ts +12 -0
- package/dist/packages/snackbar-item/react.js +23 -0
- package/dist/packages/snackbar-item/snackbar-item.d.ts +71 -0
- package/dist/packages/snackbar-item/snackbar-item.js +2620 -0
- package/dist/packages/snackbar-item/snackbar-item.js.map +7 -0
- package/dist/packages/snackbar-item/snackbar-item.react.test.d.ts +1 -0
- package/dist/packages/snackbar-item/snackbar-item.react.test.js +5 -0
- package/dist/packages/snackbar-item/styles.d.ts +1 -0
- package/dist/packages/snackbar-item/styles.js +133 -0
- package/dist/packages/step/react.d.ts +6 -1
- package/dist/packages/step/react.js +9 -4
- package/dist/packages/step/step.d.ts +10 -3
- package/dist/packages/step/step.hydration.test.d.ts +1 -1
- package/dist/packages/step/step.hydration.test.js +10 -10
- package/dist/packages/step/step.js +336 -314
- package/dist/packages/step/step.js.map +4 -4
- package/dist/packages/step/styles.d.ts +1 -0
- package/dist/packages/step/styles.js +2 -0
- package/dist/packages/step-indicator/index.d.ts +2 -2
- package/dist/packages/step-indicator/index.js +2 -2
- package/dist/packages/step-indicator/react.d.ts +7 -2
- package/dist/packages/step-indicator/react.js +10 -5
- package/dist/packages/step-indicator/step-indicator.a11y.test.d.ts +2 -2
- package/dist/packages/step-indicator/step-indicator.a11y.test.js +48 -46
- package/dist/packages/step-indicator/step-indicator.d.ts +8 -1
- package/dist/packages/step-indicator/step-indicator.hydration.test.d.ts +1 -1
- package/dist/packages/step-indicator/step-indicator.hydration.test.js +10 -10
- package/dist/packages/step-indicator/step-indicator.js +285 -281
- package/dist/packages/step-indicator/step-indicator.js.map +3 -3
- package/dist/packages/step-indicator/stepindicator.react.stories.d.ts +2 -2
- package/dist/packages/step-indicator/stepindicator.react.stories.js +3 -3
- package/dist/packages/step-indicator/stepindicator.stories.d.ts +3 -3
- package/dist/packages/step-indicator/stepindicator.stories.js +129 -129
- package/dist/packages/step-indicator/styles.js +2 -2
- package/dist/packages/styles.js +277 -275
- package/dist/packages/switch/react.d.ts +9 -3
- package/dist/packages/switch/react.js +11 -6
- package/dist/packages/switch/styles.js +2 -2
- package/dist/packages/switch/switch.a11y.test.d.ts +1 -1
- package/dist/packages/switch/switch.a11y.test.js +46 -38
- package/dist/packages/switch/switch.d.ts +10 -3
- package/dist/packages/switch/switch.hydration.test.d.ts +1 -1
- package/dist/packages/switch/switch.hydration.test.js +23 -23
- package/dist/packages/switch/switch.js +304 -304
- package/dist/packages/switch/switch.js.map +3 -3
- package/dist/packages/switch/switch.react.stories.d.ts +4 -4
- package/dist/packages/switch/switch.react.stories.js +2 -2
- package/dist/packages/switch/switch.stories.d.ts +2 -2
- package/dist/packages/switch/switch.stories.js +42 -37
- package/dist/packages/switch/switch.test.d.ts +1 -1
- package/dist/packages/switch/switch.test.js +30 -35
- package/dist/packages/tab/react.d.ts +12 -7
- package/dist/packages/tab/react.js +14 -10
- package/dist/packages/tab/styles.d.ts +1 -0
- package/dist/packages/tab/styles.js +2 -0
- package/dist/packages/tab/tab.d.ts +13 -6
- package/dist/packages/tab/tab.hydration.test.d.ts +1 -1
- package/dist/packages/tab/tab.hydration.test.js +18 -12
- package/dist/packages/tab/tab.js +309 -308
- package/dist/packages/tab/tab.js.map +4 -4
- package/dist/packages/tab/tab.react.test.js +5 -3
- package/dist/packages/tab-panel/react.d.ts +10 -2
- package/dist/packages/tab-panel/react.js +18 -5
- package/dist/packages/tab-panel/tab-panel.d.ts +6 -3
- package/dist/packages/tab-panel/tab-panel.hydration.test.d.ts +1 -1
- package/dist/packages/tab-panel/tab-panel.hydration.test.js +13 -10
- package/dist/packages/tab-panel/tab-panel.js +293 -291
- package/dist/packages/tab-panel/tab-panel.js.map +3 -3
- package/dist/packages/tabs/index.d.ts +4 -4
- package/dist/packages/tabs/index.js +3 -3
- package/dist/packages/tabs/react.d.ts +31 -8
- package/dist/packages/tabs/react.js +34 -9
- package/dist/packages/tabs/styles.js +2 -2
- package/dist/packages/tabs/tabs.a11y.test.d.ts +3 -3
- package/dist/packages/tabs/tabs.a11y.test.js +188 -169
- package/dist/packages/tabs/tabs.d.ts +9 -6
- package/dist/packages/tabs/tabs.hydration.test.d.ts +3 -1
- package/dist/packages/tabs/tabs.hydration.test.js +22 -8
- package/dist/packages/tabs/tabs.js +293 -286
- package/dist/packages/tabs/tabs.js.map +3 -3
- package/dist/packages/tabs/tabs.react.stories.d.ts +12 -10
- package/dist/packages/tabs/tabs.react.stories.js +28 -28
- package/dist/packages/tabs/tabs.stories.d.ts +4 -4
- package/dist/packages/tabs/tabs.stories.js +101 -95
- package/dist/packages/tabs/tabs.test.d.ts +3 -3
- package/dist/packages/tabs/tabs.test.js +136 -122
- package/dist/packages/textarea/input-styles.d.ts +11 -0
- package/dist/packages/textarea/input-styles.js +88 -0
- package/dist/packages/textarea/locales/da/messages.mjs +1 -1
- package/dist/packages/textarea/locales/en/messages.mjs +1 -1
- package/dist/packages/textarea/locales/fi/messages.mjs +1 -1
- package/dist/packages/textarea/locales/nb/messages.mjs +1 -1
- package/dist/packages/textarea/locales/sv/messages.mjs +1 -1
- package/dist/packages/textarea/react.d.ts +17 -11
- package/dist/packages/textarea/react.js +22 -17
- package/dist/packages/textarea/styles.js +2 -2
- package/dist/packages/textarea/textarea.a11y.test.d.ts +1 -1
- package/dist/packages/textarea/textarea.a11y.test.js +90 -58
- package/dist/packages/textarea/textarea.d.ts +20 -20
- package/dist/packages/textarea/textarea.hydration.test.d.ts +1 -1
- package/dist/packages/textarea/textarea.hydration.test.js +19 -19
- package/dist/packages/textarea/textarea.js +385 -304
- package/dist/packages/textarea/textarea.js.map +4 -4
- package/dist/packages/textarea/textarea.react.stories.d.ts +38 -21
- package/dist/packages/textarea/textarea.react.stories.js +30 -13
- package/dist/packages/textarea/textarea.react.test.js +7 -7
- package/dist/packages/textarea/textarea.stories.d.ts +3 -3
- package/dist/packages/textarea/textarea.stories.js +44 -42
- package/dist/packages/textarea/textarea.test.d.ts +1 -1
- package/dist/packages/textarea/textarea.test.js +197 -88
- package/dist/packages/textfield/input-styles.d.ts +11 -0
- package/dist/packages/textfield/input-styles.js +88 -0
- package/dist/packages/textfield/locales/da/messages.d.mts +1 -0
- package/dist/packages/textfield/locales/da/messages.mjs +1 -0
- package/dist/packages/textfield/locales/en/messages.d.mts +1 -0
- package/dist/packages/textfield/locales/en/messages.mjs +1 -0
- package/dist/packages/textfield/locales/fi/messages.d.mts +1 -0
- package/dist/packages/textfield/locales/fi/messages.mjs +1 -0
- package/dist/packages/textfield/locales/nb/messages.d.mts +1 -0
- package/dist/packages/textfield/locales/nb/messages.mjs +1 -0
- package/dist/packages/textfield/locales/sv/messages.d.mts +1 -0
- package/dist/packages/textfield/locales/sv/messages.mjs +1 -0
- package/dist/packages/textfield/react.d.ts +17 -11
- package/dist/packages/textfield/react.js +22 -17
- package/dist/packages/textfield/react.test.d.ts +1 -0
- package/dist/packages/textfield/react.test.js +20 -0
- package/dist/packages/textfield/styles/w-textfield.styles.js +60 -58
- package/dist/packages/textfield/styles.js +2 -2
- package/dist/packages/textfield/textfield.d.ts +38 -26
- package/dist/packages/textfield/textfield.hydration.test.d.ts +1 -1
- package/dist/packages/textfield/textfield.hydration.test.js +19 -19
- package/dist/packages/textfield/textfield.js +468 -373
- package/dist/packages/textfield/textfield.js.map +4 -4
- package/dist/packages/textfield/textfield.react.stories.d.ts +51 -21
- package/dist/packages/textfield/textfield.react.stories.js +63 -31
- package/dist/packages/textfield/textfield.react.test.js +7 -7
- package/dist/packages/textfield/textfield.stories.d.ts +4 -4
- package/dist/packages/textfield/textfield.stories.js +107 -89
- package/dist/packages/textfield/textfield.test.d.ts +2 -2
- package/dist/packages/textfield/textfield.test.js +174 -71
- package/dist/packages/toast/api.d.ts +2 -2
- package/dist/packages/toast/api.js +3 -3
- package/dist/packages/toast/index.d.ts +5 -5
- package/dist/packages/toast/index.js +5 -5
- package/dist/packages/toast/styles.js +2 -2
- package/dist/packages/toast/toast.d.ts +10 -5
- package/dist/packages/toast/toast.js +349 -320
- package/dist/packages/toast/toast.js.map +4 -4
- package/dist/packages/toast/toast.stories.d.ts +4 -4
- package/dist/packages/toast/toast.stories.js +37 -16
- package/dist/packages/toast/toast.test.d.ts +1 -1
- package/dist/packages/toast/toast.test.js +48 -31
- package/dist/packages/toast/types.d.ts +1 -1
- package/dist/packages/toast-container/styles.d.ts +1 -0
- package/dist/packages/toast-container/styles.js +2 -0
- package/dist/packages/toast-container/toast-container.d.ts +8 -3
- package/dist/packages/toast-container/toast-container.js +295 -294
- package/dist/packages/toast-container/toast-container.js.map +4 -4
- package/dist/packages/types.d.ts +16 -0
- package/dist/packages/types.js +1 -0
- package/dist/packages/utils/element-collapse.d.ts +12 -0
- package/dist/packages/utils/element-collapse.js +102 -0
- package/dist/packages/utils/expand-transition.d.ts +1 -1
- package/dist/packages/utils/expand-transition.js +12 -10
- package/dist/packages/utils/unstyled-heading.d.ts +1 -1
- package/dist/packages/utils/unstyled-heading.js +4 -4
- package/dist/packages/utils/window-exists.js +1 -1
- package/dist/packages/utils.js +2 -2
- package/dist/setup-tests.d.ts +3 -3
- package/dist/setup-tests.js +16 -13
- package/dist/tests/react-hydration.js +29 -30
- package/dist/tests/react-ssr-attributes.d.ts +1 -1
- package/dist/tests/react-ssr-attributes.js +4 -4
- package/dist/web-types.json +458 -256
- package/eik/index.js +20 -2460
- package/package.json +21 -129
- package/dist/packages/slider/Slider.d.ts +0 -2
- package/dist/packages/slider/Slider.js +0 -8
- package/dist/packages/slider-thumb/SliderThumb.d.ts +0 -2
- package/dist/packages/slider-thumb/SliderThumb.js +0 -8
|
@@ -1,210 +1,227 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
1
|
+
import { i18n } from "@lingui/core";
|
|
2
|
+
import { userEvent } from "vitest/browser";
|
|
3
|
+
import { html } from "lit";
|
|
4
|
+
import { expect, test } from "vitest";
|
|
5
|
+
import { render } from "vitest-browser-lit";
|
|
6
|
+
import "../attention/attention.js";
|
|
7
|
+
import "../affix/affix.js";
|
|
8
|
+
import "../textfield/textfield.js";
|
|
9
|
+
import "./slider.js";
|
|
10
|
+
import "../slider-thumb/slider-thumb.js";
|
|
11
|
+
import { messages } from "./locales/en/messages.mjs";
|
|
12
|
+
import { messages as nbMessages } from "./locales/nb/messages.mjs";
|
|
13
|
+
// Initialize i18n with English locale for tests
|
|
14
|
+
i18n.load("en", messages);
|
|
15
|
+
i18n.load("nb", nbMessages);
|
|
16
|
+
i18n.activate("en");
|
|
17
|
+
test("single slider starts with a default value equal to max", async () => {
|
|
11
18
|
const component = html `
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
<form data-testid="form">
|
|
20
|
+
<w-slider label="Single" min="0" max="100">
|
|
21
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
22
|
+
</w-slider>
|
|
23
|
+
</form>
|
|
24
|
+
`;
|
|
18
25
|
const page = render(component);
|
|
19
|
-
await expect
|
|
26
|
+
await expect
|
|
27
|
+
.element(page.getByLabelText("Single").first())
|
|
28
|
+
.toHaveValue("100");
|
|
20
29
|
});
|
|
21
|
-
test(
|
|
30
|
+
test("range slider starts with a default from value equal to min, and to value equal to max", async () => {
|
|
22
31
|
const component = html `
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
<form data-testid="form">
|
|
33
|
+
<w-slider label="Range" min="0" max="100">
|
|
34
|
+
<w-slider-thumb
|
|
35
|
+
aria-label="From"
|
|
36
|
+
name="rangefrom"
|
|
37
|
+
slot="from"
|
|
38
|
+
></w-slider-thumb>
|
|
39
|
+
<w-slider-thumb
|
|
40
|
+
aria-label="To"
|
|
41
|
+
name="rangeto"
|
|
42
|
+
slot="to"
|
|
43
|
+
></w-slider-thumb>
|
|
44
|
+
</w-slider>
|
|
45
|
+
</form>
|
|
46
|
+
`;
|
|
30
47
|
const page = render(component);
|
|
31
|
-
await expect.element(page.getByLabelText(
|
|
32
|
-
await expect.element(page.getByLabelText(
|
|
48
|
+
await expect.element(page.getByLabelText("From").first()).toHaveValue("0");
|
|
49
|
+
await expect.element(page.getByLabelText("To").first()).toHaveValue("100");
|
|
33
50
|
});
|
|
34
|
-
test(
|
|
51
|
+
test("can set slider value via the range input", async () => {
|
|
35
52
|
const component = html `
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
<form data-testid="form">
|
|
54
|
+
<w-slider label="Single" min="0" max="100">
|
|
55
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
56
|
+
</w-slider>
|
|
57
|
+
</form>
|
|
58
|
+
`;
|
|
42
59
|
const page = render(component);
|
|
43
|
-
await userEvent.type(page.getByLabelText(
|
|
44
|
-
await expect.element(page.getByLabelText(
|
|
45
|
-
await expect.element(page.getByRole(
|
|
46
|
-
const formData = new FormData(page.getByTestId(
|
|
47
|
-
expect(formData.get(
|
|
60
|
+
await userEvent.type(page.getByLabelText("Single").first(), "{ArrowLeft}{ArrowLeft}{ArrowLeft}");
|
|
61
|
+
await expect.element(page.getByLabelText("Single").first()).toHaveValue("97");
|
|
62
|
+
await expect.element(page.getByRole("spinbutton")).toHaveValue(97); // keeps value in sync between inputs
|
|
63
|
+
const formData = new FormData(page.getByTestId("form").element());
|
|
64
|
+
expect(formData.get("value")).toBe("97");
|
|
48
65
|
});
|
|
49
|
-
test(
|
|
66
|
+
test("can set slider value via the number input", async () => {
|
|
50
67
|
const component = html `
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
68
|
+
<form data-testid="form">
|
|
69
|
+
<w-slider label="Single" min="0" max="100">
|
|
70
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
71
|
+
</w-slider>
|
|
72
|
+
</form>
|
|
73
|
+
`;
|
|
57
74
|
const page = render(component);
|
|
58
|
-
await page.getByRole(
|
|
59
|
-
await expect.element(page.getByRole(
|
|
60
|
-
await expect.element(page.getByLabelText(
|
|
61
|
-
const formData = new FormData(page.getByTestId(
|
|
62
|
-
expect(formData.get(
|
|
75
|
+
await page.getByRole("spinbutton").fill("50");
|
|
76
|
+
await expect.element(page.getByRole("spinbutton")).toHaveValue(50);
|
|
77
|
+
await expect.element(page.getByLabelText("Single").first()).toHaveValue("50"); // keeps value in sync between inputs
|
|
78
|
+
const formData = new FormData(page.getByTestId("form").element());
|
|
79
|
+
expect(formData.get("value")).toBe("50");
|
|
63
80
|
});
|
|
64
|
-
test(
|
|
81
|
+
test("can increment and decrement the slider values with arrow keys in the number input", async () => {
|
|
65
82
|
const component = html `
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
name="to-year"
|
|
82
|
-
></w-slider-thumb>
|
|
83
|
-
</w-slider>
|
|
84
|
-
</form>
|
|
85
|
-
`;
|
|
83
|
+
<form data-testid="form">
|
|
84
|
+
<w-slider label="Model year" min="1950" max="2025" open-ended>
|
|
85
|
+
<w-slider-thumb
|
|
86
|
+
slot="from"
|
|
87
|
+
aria-label="From year"
|
|
88
|
+
name="from-year"
|
|
89
|
+
></w-slider-thumb>
|
|
90
|
+
<w-slider-thumb
|
|
91
|
+
slot="to"
|
|
92
|
+
aria-label="To year"
|
|
93
|
+
name="to-year"
|
|
94
|
+
></w-slider-thumb>
|
|
95
|
+
</w-slider>
|
|
96
|
+
</form>
|
|
97
|
+
`;
|
|
86
98
|
const page = render(component);
|
|
87
|
-
await userEvent.type(page.getByRole(
|
|
99
|
+
await userEvent.type(page.getByRole("spinbutton").first(), "{ArrowUp}");
|
|
88
100
|
// Go from Min "beyond" 1950 to 1950
|
|
89
|
-
await expect.element(page.getByRole(
|
|
90
|
-
await expect
|
|
91
|
-
|
|
101
|
+
await expect.element(page.getByRole("spinbutton").first()).toHaveValue(1950);
|
|
102
|
+
await expect
|
|
103
|
+
.element(page.getByLabelText("From year").first())
|
|
104
|
+
.toHaveValue("1950"); // keeps value in sync between inputs
|
|
105
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{ArrowDown}");
|
|
92
106
|
// Go from Max "beyond" 2025 to 2025
|
|
93
|
-
await expect.element(page.getByRole(
|
|
94
|
-
await expect
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(2025);
|
|
108
|
+
await expect
|
|
109
|
+
.element(page.getByLabelText("To year").first())
|
|
110
|
+
.toHaveValue("2025"); // keeps value in sync between inputs
|
|
111
|
+
const formData = new FormData(page.getByTestId("form").element());
|
|
112
|
+
expect(formData.get("from-year")).toBe("1950");
|
|
113
|
+
expect(formData.get("to-year")).toBe("2025");
|
|
98
114
|
});
|
|
99
|
-
test(
|
|
115
|
+
test("going down from Min and up from Max sets value to min - 1 and max + a respectively", async () => {
|
|
100
116
|
const component = html `
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
name="to-year"
|
|
117
|
-
></w-slider-thumb>
|
|
118
|
-
</w-slider>
|
|
119
|
-
</form>
|
|
120
|
-
`;
|
|
117
|
+
<form data-testid="form">
|
|
118
|
+
<w-slider label="Model year" min="1950" max="2025" open-ended>
|
|
119
|
+
<w-slider-thumb
|
|
120
|
+
slot="from"
|
|
121
|
+
aria-label="From year"
|
|
122
|
+
name="from-year"
|
|
123
|
+
></w-slider-thumb>
|
|
124
|
+
<w-slider-thumb
|
|
125
|
+
slot="to"
|
|
126
|
+
aria-label="To year"
|
|
127
|
+
name="to-year"
|
|
128
|
+
></w-slider-thumb>
|
|
129
|
+
</w-slider>
|
|
130
|
+
</form>
|
|
131
|
+
`;
|
|
121
132
|
const page = render(component);
|
|
122
|
-
await userEvent.type(page.getByRole(
|
|
123
|
-
await expect.element(page.getByRole(
|
|
124
|
-
await expect
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
await
|
|
128
|
-
|
|
129
|
-
expect
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
+
await userEvent.type(page.getByRole("spinbutton").first(), "{ArrowDown}");
|
|
134
|
+
await expect.element(page.getByRole("spinbutton").first()).toHaveValue(1949);
|
|
135
|
+
await expect
|
|
136
|
+
.element(page.getByLabelText("From year").first())
|
|
137
|
+
.toHaveValue("1949"); // keeps value in sync between inputs
|
|
138
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{ArrowUp}");
|
|
139
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(2026);
|
|
140
|
+
await expect
|
|
141
|
+
.element(page.getByLabelText("To year").first())
|
|
142
|
+
.toHaveValue("2026"); // keeps value in sync between inputs
|
|
143
|
+
const formData = new FormData(page.getByTestId("form").element());
|
|
144
|
+
expect(formData.get("from-year")).toBe("1949");
|
|
145
|
+
expect(formData.get("to-year")).toBe("2026");
|
|
146
|
+
});
|
|
147
|
+
test("slider without suffix syncs empty suffix to thumb", async () => {
|
|
133
148
|
render(html `
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const slider = document.querySelector(
|
|
139
|
-
const thumb = document.querySelector(
|
|
149
|
+
<w-slider label="Single" min="0" max="100">
|
|
150
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
151
|
+
</w-slider>
|
|
152
|
+
`);
|
|
153
|
+
const slider = document.querySelector("w-slider");
|
|
154
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
140
155
|
await slider.updateComplete;
|
|
141
156
|
await thumb.updateComplete;
|
|
142
157
|
expect(slider.suffix).toBeUndefined();
|
|
143
|
-
expect(thumb.suffix).toBe(
|
|
158
|
+
expect(thumb.suffix).toBe("");
|
|
144
159
|
});
|
|
145
|
-
test(
|
|
160
|
+
test("deleting from number input works as expected", async () => {
|
|
146
161
|
const component = html `
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
<form data-testid="form">
|
|
163
|
+
<w-slider label="Production year" min="1950" max="2025" over under>
|
|
164
|
+
<p slot="description">Try typing a from value higher than a to value</p>
|
|
165
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
166
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
167
|
+
</w-slider>
|
|
168
|
+
</form>
|
|
169
|
+
`;
|
|
155
170
|
const page = render(component);
|
|
156
|
-
await expect.element(page.getByRole(
|
|
157
|
-
await userEvent.type(page.getByRole(
|
|
158
|
-
await expect.element(page.getByRole(
|
|
159
|
-
await userEvent.type(page.getByRole(
|
|
160
|
-
await expect.element(page.getByRole(
|
|
161
|
-
await userEvent.type(page.getByRole(
|
|
162
|
-
await expect.element(page.getByRole(
|
|
163
|
-
await userEvent.type(page.getByRole(
|
|
164
|
-
await expect.element(page.getByRole(
|
|
165
|
-
});
|
|
166
|
-
test(
|
|
171
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(2025);
|
|
172
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{Backspace}");
|
|
173
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(202);
|
|
174
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{Backspace}");
|
|
175
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(20);
|
|
176
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{Backspace}");
|
|
177
|
+
await expect.element(page.getByRole("spinbutton").last()).toHaveValue(2);
|
|
178
|
+
await userEvent.type(page.getByRole("spinbutton").last(), "{Backspace}");
|
|
179
|
+
await expect.element(page.getByRole("spinbutton").last()).not.toHaveValue();
|
|
180
|
+
});
|
|
181
|
+
test("can reset slider by resetting surrounding form", async () => {
|
|
167
182
|
render(html `
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const
|
|
183
|
+
<form>
|
|
184
|
+
<w-slider label="Slider from 0 - 10" min="0" max="10">
|
|
185
|
+
<p slot="description">
|
|
186
|
+
If you want to slide between 0 and 10, this slider has you covered.
|
|
187
|
+
</p>
|
|
188
|
+
<w-slider-thumb name="zero-ten" value="3"></w-slider-thumb>
|
|
189
|
+
</w-slider>
|
|
190
|
+
</form>
|
|
191
|
+
`);
|
|
192
|
+
const form = document.querySelector("form");
|
|
193
|
+
const wSlider = document.querySelector("w-slider");
|
|
194
|
+
const wSliderThumb = wSlider.querySelector("w-slider-thumb");
|
|
178
195
|
// sanity
|
|
179
196
|
expect(form).not.toBeNull();
|
|
180
197
|
expect(wSlider).not.toBeNull();
|
|
181
198
|
expect(wSliderThumb).not.toBeNull();
|
|
182
|
-
expect(wSliderThumb.value).toBe(
|
|
183
|
-
expect(Object.fromEntries(new FormData(form).entries())[
|
|
184
|
-
wSliderThumb.value =
|
|
199
|
+
expect(wSliderThumb.value).toBe("3");
|
|
200
|
+
expect(Object.fromEntries(new FormData(form).entries())["zero-ten"]).toBe("3");
|
|
201
|
+
wSliderThumb.value = "5";
|
|
185
202
|
await wSliderThumb.updateComplete;
|
|
186
|
-
expect(wSliderThumb.value).toBe(
|
|
187
|
-
expect(Object.fromEntries(new FormData(form).entries())[
|
|
203
|
+
expect(wSliderThumb.value).toBe("5");
|
|
204
|
+
expect(Object.fromEntries(new FormData(form).entries())["zero-ten"]).toBe("5");
|
|
188
205
|
// Reset the form
|
|
189
206
|
form.reset();
|
|
190
207
|
await wSliderThumb.updateComplete;
|
|
191
|
-
expect(wSliderThumb.value).toBe(
|
|
192
|
-
expect(Object.fromEntries(new FormData(form).entries())[
|
|
208
|
+
expect(wSliderThumb.value).toBe("3");
|
|
209
|
+
expect(Object.fromEntries(new FormData(form).entries())["zero-ten"]).toBe("3");
|
|
193
210
|
});
|
|
194
211
|
// labelFormatter tests
|
|
195
|
-
test(
|
|
212
|
+
test("labelFormatter formats min and max labels", async () => {
|
|
196
213
|
const component = html `
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
214
|
+
<w-slider label="Production year" min="1950" max="2025">
|
|
215
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
216
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
217
|
+
</w-slider>
|
|
218
|
+
`;
|
|
202
219
|
render(component);
|
|
203
|
-
const slider = document.querySelector(
|
|
220
|
+
const slider = document.querySelector("w-slider");
|
|
204
221
|
slider.labelFormatter = (slot) => {
|
|
205
|
-
if (slot ===
|
|
206
|
-
return
|
|
207
|
-
return
|
|
222
|
+
if (slot === "from")
|
|
223
|
+
return "Before 1950";
|
|
224
|
+
return "2025+";
|
|
208
225
|
};
|
|
209
226
|
await slider.updateComplete;
|
|
210
227
|
const fromThumb = document.querySelector('w-slider-thumb[slot="from"]');
|
|
@@ -212,72 +229,72 @@ test('labelFormatter formats min and max labels', async () => {
|
|
|
212
229
|
await fromThumb.updateComplete;
|
|
213
230
|
await toThumb.updateComplete;
|
|
214
231
|
// Check the visible labels are formatted
|
|
215
|
-
const fromMarker = fromThumb.shadowRoot.querySelector(
|
|
216
|
-
const toMarker = toThumb.shadowRoot.querySelector(
|
|
217
|
-
expect(fromMarker.textContent.trim()).toBe(
|
|
218
|
-
expect(toMarker.textContent.trim()).toBe(
|
|
232
|
+
const fromMarker = fromThumb.shadowRoot.querySelector(".w-slider-thumb__from-marker");
|
|
233
|
+
const toMarker = toThumb.shadowRoot.querySelector(".w-slider-thumb__to-marker");
|
|
234
|
+
expect(fromMarker.textContent.trim()).toBe("Before 1950");
|
|
235
|
+
expect(toMarker.textContent.trim()).toBe("2025+");
|
|
219
236
|
});
|
|
220
|
-
test(
|
|
237
|
+
test("labelFormatter can hide labels by returning empty string", async () => {
|
|
221
238
|
const component = html `
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
239
|
+
<w-slider label="Hidden labels" min="0" max="100">
|
|
240
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
241
|
+
</w-slider>
|
|
242
|
+
`;
|
|
226
243
|
render(component);
|
|
227
|
-
const slider = document.querySelector(
|
|
228
|
-
slider.labelFormatter = () =>
|
|
244
|
+
const slider = document.querySelector("w-slider");
|
|
245
|
+
slider.labelFormatter = () => "";
|
|
229
246
|
await slider.updateComplete;
|
|
230
|
-
const thumb = document.querySelector(
|
|
247
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
231
248
|
await thumb.updateComplete;
|
|
232
|
-
const fromMarker = thumb.shadowRoot.querySelector(
|
|
233
|
-
const toMarker = thumb.shadowRoot.querySelector(
|
|
234
|
-
expect(fromMarker.textContent.trim()).toBe(
|
|
235
|
-
expect(toMarker.textContent.trim()).toBe(
|
|
249
|
+
const fromMarker = thumb.shadowRoot.querySelector(".w-slider-thumb__from-marker");
|
|
250
|
+
const toMarker = thumb.shadowRoot.querySelector(".w-slider-thumb__to-marker");
|
|
251
|
+
expect(fromMarker.textContent.trim()).toBe("");
|
|
252
|
+
expect(toMarker.textContent.trim()).toBe("");
|
|
236
253
|
});
|
|
237
254
|
// valueFormatter tests
|
|
238
|
-
test(
|
|
255
|
+
test("valueFormatter formats tooltip display value", async () => {
|
|
239
256
|
const component = html `
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
257
|
+
<w-slider label="Price" min="0" max="100000">
|
|
258
|
+
<w-slider-thumb name="price" value="50000"></w-slider-thumb>
|
|
259
|
+
</w-slider>
|
|
260
|
+
`;
|
|
244
261
|
render(component);
|
|
245
|
-
const slider = document.querySelector(
|
|
262
|
+
const slider = document.querySelector("w-slider");
|
|
246
263
|
// Format with custom suffix
|
|
247
264
|
slider.valueFormatter = (value) => {
|
|
248
265
|
if (!value)
|
|
249
|
-
return
|
|
266
|
+
return "0";
|
|
250
267
|
return `${value} formatted`;
|
|
251
268
|
};
|
|
252
269
|
await slider.updateComplete;
|
|
253
|
-
const thumb = document.querySelector(
|
|
270
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
254
271
|
await thumb.updateComplete;
|
|
255
272
|
// Check the tooltip message content in w-attention
|
|
256
273
|
const tooltipMessage = thumb.shadowRoot.querySelector('w-attention span[slot="message"]');
|
|
257
|
-
expect(tooltipMessage.textContent.trim()).toBe(
|
|
274
|
+
expect(tooltipMessage.textContent.trim()).toBe("50000 formatted");
|
|
258
275
|
});
|
|
259
276
|
// tooltipFormatter tests
|
|
260
|
-
test(
|
|
277
|
+
test("tooltipFormatter formats tooltip display value", async () => {
|
|
261
278
|
const component = html `
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
279
|
+
<w-slider label="Hestekrefter" min="50" max="300" open-ended suffix="hk">
|
|
280
|
+
<w-slider-thumb slot="from" name="from-power" value="50"></w-slider-thumb>
|
|
281
|
+
<w-slider-thumb slot="to" name="to-power" value=""></w-slider-thumb>
|
|
282
|
+
</w-slider>
|
|
283
|
+
`;
|
|
267
284
|
render(component);
|
|
268
|
-
const slider = document.querySelector(
|
|
285
|
+
const slider = document.querySelector("w-slider");
|
|
269
286
|
slider.valueFormatter = (value, slot) => {
|
|
270
|
-
if (slot ===
|
|
271
|
-
return
|
|
287
|
+
if (slot === "from" && value === "") {
|
|
288
|
+
return "Min";
|
|
272
289
|
}
|
|
273
|
-
if (slot ===
|
|
274
|
-
return
|
|
290
|
+
if (slot === "to" && value === "") {
|
|
291
|
+
return "Max";
|
|
275
292
|
}
|
|
276
293
|
return value;
|
|
277
294
|
};
|
|
278
295
|
// Use 300+ hk in the tooltip
|
|
279
296
|
slider.tooltipFormatter = (value, slot) => {
|
|
280
|
-
if (slot ===
|
|
297
|
+
if (slot === "to" && value === "") {
|
|
281
298
|
return `${300}+`;
|
|
282
299
|
}
|
|
283
300
|
return value;
|
|
@@ -287,76 +304,87 @@ test('tooltipFormatter formats tooltip display value', async () => {
|
|
|
287
304
|
await thumb.updateComplete;
|
|
288
305
|
// Check the tooltip message content in w-attention
|
|
289
306
|
const tooltipMessage = thumb.shadowRoot.querySelector('w-attention span[slot="message"]');
|
|
290
|
-
expect(tooltipMessage.textContent.trim()).toBe(
|
|
307
|
+
expect(tooltipMessage.textContent.trim()).toBe("300+ hk");
|
|
291
308
|
});
|
|
292
309
|
// WCAG 2.1 Accessibility Tests
|
|
293
310
|
// Fieldset and legend tests (WCAG 1.3.1 Info and Relationships, 4.1.2 Name, Role, Value)
|
|
294
|
-
test(
|
|
311
|
+
test("slider uses fieldset with legend for proper grouping", async () => {
|
|
295
312
|
const component = html `
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
313
|
+
<w-slider label="Volume control" min="0" max="100">
|
|
314
|
+
<w-slider-thumb name="volume"></w-slider-thumb>
|
|
315
|
+
</w-slider>
|
|
316
|
+
`;
|
|
300
317
|
render(component);
|
|
301
|
-
const slider = document.querySelector(
|
|
318
|
+
const slider = document.querySelector("w-slider");
|
|
302
319
|
await slider.updateComplete;
|
|
303
|
-
const fieldset = slider.shadowRoot.querySelector(
|
|
304
|
-
const legend = fieldset.querySelector(
|
|
320
|
+
const fieldset = slider.shadowRoot.querySelector("fieldset");
|
|
321
|
+
const legend = fieldset.querySelector("legend");
|
|
305
322
|
expect(fieldset).not.toBeNull();
|
|
306
323
|
expect(legend).not.toBeNull();
|
|
307
|
-
expect(legend.textContent.trim()).toBe(
|
|
324
|
+
expect(legend.textContent.trim()).toBe("Volume control");
|
|
308
325
|
});
|
|
309
|
-
test(
|
|
326
|
+
test("range slider fieldset groups both thumbs together", async () => {
|
|
310
327
|
const component = html `
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
328
|
+
<w-slider label="Price range" min="0" max="1000">
|
|
329
|
+
<w-slider-thumb
|
|
330
|
+
slot="from"
|
|
331
|
+
aria-label="Minimum price"
|
|
332
|
+
name="min"
|
|
333
|
+
></w-slider-thumb>
|
|
334
|
+
<w-slider-thumb
|
|
335
|
+
slot="to"
|
|
336
|
+
aria-label="Maximum price"
|
|
337
|
+
name="max"
|
|
338
|
+
></w-slider-thumb>
|
|
339
|
+
</w-slider>
|
|
340
|
+
`;
|
|
316
341
|
render(component);
|
|
317
|
-
const slider = document.querySelector(
|
|
342
|
+
const slider = document.querySelector("w-slider");
|
|
318
343
|
await slider.updateComplete;
|
|
319
|
-
const fieldset = slider.shadowRoot.querySelector(
|
|
320
|
-
const legend = fieldset.querySelector(
|
|
344
|
+
const fieldset = slider.shadowRoot.querySelector("fieldset");
|
|
345
|
+
const legend = fieldset.querySelector("legend");
|
|
321
346
|
expect(fieldset).not.toBeNull();
|
|
322
|
-
expect(legend.textContent.trim()).toBe(
|
|
347
|
+
expect(legend.textContent.trim()).toBe("Price range");
|
|
323
348
|
// Both thumbs should be slotted within the fieldset
|
|
324
|
-
const slots = fieldset.querySelectorAll(
|
|
349
|
+
const slots = fieldset.querySelectorAll("slot");
|
|
325
350
|
expect(slots.length).toBeGreaterThan(0);
|
|
326
351
|
});
|
|
327
352
|
// Input type range accessibility (WCAG 4.1.2 Name, Role, Value)
|
|
328
|
-
test(
|
|
353
|
+
test("range input has proper aria-label", async () => {
|
|
329
354
|
const component = html `
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
355
|
+
<w-slider label="Brightness" min="0" max="100">
|
|
356
|
+
<w-slider-thumb name="brightness"></w-slider-thumb>
|
|
357
|
+
</w-slider>
|
|
358
|
+
`;
|
|
334
359
|
render(component);
|
|
335
|
-
const thumb = document.querySelector(
|
|
360
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
336
361
|
await thumb.updateComplete;
|
|
337
362
|
const rangeInput = thumb.shadowRoot.querySelector('input[type="range"]');
|
|
338
|
-
expect(rangeInput.getAttribute(
|
|
363
|
+
expect(rangeInput.getAttribute("aria-label")).toBe("Brightness");
|
|
339
364
|
});
|
|
340
|
-
test(
|
|
365
|
+
test("range input uses explicit aria-label when provided", async () => {
|
|
341
366
|
const component = html `
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
367
|
+
<w-slider label="Volume" min="0" max="100">
|
|
368
|
+
<w-slider-thumb
|
|
369
|
+
aria-label="Custom volume control"
|
|
370
|
+
name="volume"
|
|
371
|
+
></w-slider-thumb>
|
|
372
|
+
</w-slider>
|
|
373
|
+
`;
|
|
346
374
|
render(component);
|
|
347
|
-
const thumb = document.querySelector(
|
|
375
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
348
376
|
await thumb.updateComplete;
|
|
349
377
|
const rangeInput = thumb.shadowRoot.querySelector('input[type="range"]');
|
|
350
|
-
expect(rangeInput.getAttribute(
|
|
378
|
+
expect(rangeInput.getAttribute("aria-label")).toBe("Custom volume control");
|
|
351
379
|
});
|
|
352
380
|
// Range slider accessibility for from/to labels
|
|
353
|
-
test(
|
|
381
|
+
test("range slider thumbs get appropriate aria-labels when not explicitly set", async () => {
|
|
354
382
|
const component = html `
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
383
|
+
<w-slider label="Year range" min="2000" max="2025">
|
|
384
|
+
<w-slider-thumb slot="from" name="from-year"></w-slider-thumb>
|
|
385
|
+
<w-slider-thumb slot="to" name="to-year"></w-slider-thumb>
|
|
386
|
+
</w-slider>
|
|
387
|
+
`;
|
|
360
388
|
render(component);
|
|
361
389
|
const fromThumb = document.querySelector('w-slider-thumb[slot="from"]');
|
|
362
390
|
const toThumb = document.querySelector('w-slider-thumb[slot="to"]');
|
|
@@ -365,171 +393,283 @@ test('range slider thumbs get appropriate aria-labels when not explicitly set',
|
|
|
365
393
|
const fromRange = fromThumb.shadowRoot.querySelector('input[type="range"]');
|
|
366
394
|
const toRange = toThumb.shadowRoot.querySelector('input[type="range"]');
|
|
367
395
|
// Should append min/max to the parent label
|
|
368
|
-
expect(fromRange.getAttribute(
|
|
369
|
-
expect(toRange.getAttribute(
|
|
396
|
+
expect(fromRange.getAttribute("aria-label")).toBe("Year range min");
|
|
397
|
+
expect(toRange.getAttribute("aria-label")).toBe("Year range max");
|
|
370
398
|
});
|
|
371
399
|
// Input type number accessibility (WCAG 4.1.2 Name, Role, Value)
|
|
372
|
-
test(
|
|
400
|
+
test("number input (textfield) has proper aria-label", async () => {
|
|
373
401
|
const component = html `
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
402
|
+
<w-slider label="Quantity" min="0" max="100">
|
|
403
|
+
<w-slider-thumb name="qty"></w-slider-thumb>
|
|
404
|
+
</w-slider>
|
|
405
|
+
`;
|
|
378
406
|
render(component);
|
|
379
|
-
const thumb = document.querySelector(
|
|
407
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
380
408
|
await thumb.updateComplete;
|
|
381
|
-
const textfield = thumb.shadowRoot.querySelector(
|
|
382
|
-
expect(textfield.getAttribute(
|
|
409
|
+
const textfield = thumb.shadowRoot.querySelector("w-textfield");
|
|
410
|
+
expect(textfield.getAttribute("aria-label")).toBe("Quantity");
|
|
383
411
|
});
|
|
384
412
|
// Disabled state accessibility
|
|
385
|
-
test(
|
|
413
|
+
test("disabled slider marks all inputs as disabled", async () => {
|
|
386
414
|
const component = html `
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
415
|
+
<w-slider label="Disabled slider" min="0" max="100" disabled>
|
|
416
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
417
|
+
</w-slider>
|
|
418
|
+
`;
|
|
391
419
|
render(component);
|
|
392
|
-
const thumb = document.querySelector(
|
|
420
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
393
421
|
await thumb.updateComplete;
|
|
394
422
|
const rangeInput = thumb.shadowRoot.querySelector('input[type="range"]');
|
|
395
|
-
const textfield = thumb.shadowRoot.querySelector(
|
|
423
|
+
const textfield = thumb.shadowRoot.querySelector("w-textfield");
|
|
396
424
|
expect(rangeInput.disabled).toBe(true);
|
|
397
|
-
expect(textfield.hasAttribute(
|
|
425
|
+
expect(textfield.hasAttribute("disabled")).toBe(true);
|
|
398
426
|
});
|
|
399
|
-
test(
|
|
427
|
+
test("disabled fieldset communicates disabled state", async () => {
|
|
400
428
|
const component = html `
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
429
|
+
<w-slider label="Disabled control" min="0" max="100" disabled>
|
|
430
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
431
|
+
</w-slider>
|
|
432
|
+
`;
|
|
405
433
|
render(component);
|
|
406
|
-
const slider = document.querySelector(
|
|
434
|
+
const slider = document.querySelector("w-slider");
|
|
407
435
|
await slider.updateComplete;
|
|
408
|
-
const fieldset = slider.shadowRoot.querySelector(
|
|
436
|
+
const fieldset = slider.shadowRoot.querySelector("fieldset");
|
|
409
437
|
expect(fieldset.disabled).toBe(true);
|
|
410
438
|
});
|
|
411
439
|
// Error state accessibility (WCAG 3.3.1 Error Identification)
|
|
412
|
-
test(
|
|
440
|
+
test("invalid slider sets aria-invalid on fieldset", async () => {
|
|
413
441
|
const component = html `
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
442
|
+
<w-slider
|
|
443
|
+
label="Invalid slider"
|
|
444
|
+
min="0"
|
|
445
|
+
max="100"
|
|
446
|
+
invalid
|
|
447
|
+
error="Please select a value"
|
|
448
|
+
>
|
|
449
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
450
|
+
</w-slider>
|
|
451
|
+
`;
|
|
418
452
|
render(component);
|
|
419
|
-
const slider = document.querySelector(
|
|
453
|
+
const slider = document.querySelector("w-slider");
|
|
420
454
|
await slider.updateComplete;
|
|
421
455
|
// Wait for the state update triggered in connectedCallback
|
|
422
456
|
await slider.updateComplete;
|
|
423
|
-
const fieldset = slider.shadowRoot.querySelector(
|
|
424
|
-
expect(fieldset.getAttribute(
|
|
457
|
+
const fieldset = slider.shadowRoot.querySelector("fieldset");
|
|
458
|
+
expect(fieldset.getAttribute("aria-invalid")).toBe("true");
|
|
425
459
|
});
|
|
426
|
-
test(
|
|
460
|
+
test("error message is visible when slider is invalid", async () => {
|
|
427
461
|
const component = html `
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
462
|
+
<w-slider
|
|
463
|
+
label="Error slider"
|
|
464
|
+
min="0"
|
|
465
|
+
max="100"
|
|
466
|
+
invalid
|
|
467
|
+
error="Value is required"
|
|
468
|
+
>
|
|
469
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
470
|
+
</w-slider>
|
|
471
|
+
`;
|
|
432
472
|
render(component);
|
|
433
|
-
const slider = document.querySelector(
|
|
473
|
+
const slider = document.querySelector("w-slider");
|
|
434
474
|
await slider.updateComplete;
|
|
435
475
|
// Wait for the state update triggered in connectedCallback
|
|
436
476
|
await slider.updateComplete;
|
|
437
|
-
const errorMessage = slider.shadowRoot.querySelector(
|
|
477
|
+
const errorMessage = slider.shadowRoot.querySelector(".w-slider__error");
|
|
438
478
|
expect(errorMessage).not.toBeNull();
|
|
439
|
-
expect(errorMessage.textContent.trim()).toBe(
|
|
479
|
+
expect(errorMessage.textContent.trim()).toBe("Value is required");
|
|
440
480
|
});
|
|
441
481
|
// Screen reader min/max range announcement
|
|
442
|
-
test(
|
|
482
|
+
test("screen reader can access min and max range values", async () => {
|
|
443
483
|
const component = html `
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
484
|
+
<w-slider label="Range with bounds" min="10" max="90">
|
|
485
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
486
|
+
</w-slider>
|
|
487
|
+
`;
|
|
448
488
|
render(component);
|
|
449
|
-
const slider = document.querySelector(
|
|
489
|
+
const slider = document.querySelector("w-slider");
|
|
450
490
|
await slider.updateComplete;
|
|
451
|
-
const thumb = document.querySelector(
|
|
491
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
452
492
|
await thumb.updateComplete;
|
|
453
493
|
// Screen reader only text should contain min and max info
|
|
454
|
-
const srOnlyText = thumb.shadowRoot.querySelector(
|
|
494
|
+
const srOnlyText = thumb.shadowRoot.querySelector(".sr-only");
|
|
455
495
|
expect(srOnlyText).not.toBeNull();
|
|
456
|
-
expect(srOnlyText.textContent).toContain(
|
|
457
|
-
expect(srOnlyText.textContent).toContain(
|
|
496
|
+
expect(srOnlyText.textContent).toContain("10");
|
|
497
|
+
expect(srOnlyText.textContent).toContain("90");
|
|
458
498
|
});
|
|
459
|
-
test(
|
|
499
|
+
test("screen reader range announcement uses labelFormatter values", async () => {
|
|
460
500
|
const component = html `
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
501
|
+
<w-slider label="Formatted range" min="0" max="100">
|
|
502
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
503
|
+
</w-slider>
|
|
504
|
+
`;
|
|
465
505
|
render(component);
|
|
466
|
-
const slider = document.querySelector(
|
|
506
|
+
const slider = document.querySelector("w-slider");
|
|
467
507
|
slider.labelFormatter = (slot) => {
|
|
468
|
-
if (slot ===
|
|
469
|
-
return
|
|
470
|
-
return
|
|
508
|
+
if (slot === "from")
|
|
509
|
+
return "Zero";
|
|
510
|
+
return "One hundred";
|
|
471
511
|
};
|
|
472
512
|
await slider.updateComplete;
|
|
473
|
-
const thumb = document.querySelector(
|
|
513
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
474
514
|
await thumb.updateComplete;
|
|
475
|
-
const srOnlyText = thumb.shadowRoot.querySelector(
|
|
476
|
-
expect(srOnlyText.textContent).toContain(
|
|
477
|
-
expect(srOnlyText.textContent).toContain(
|
|
515
|
+
const srOnlyText = thumb.shadowRoot.querySelector(".sr-only");
|
|
516
|
+
expect(srOnlyText.textContent).toContain("Zero");
|
|
517
|
+
expect(srOnlyText.textContent).toContain("One hundred");
|
|
478
518
|
});
|
|
479
519
|
// Required field accessibility (WCAG 3.3.2 Labels or Instructions)
|
|
480
|
-
test(
|
|
520
|
+
test("required slider passes required state to thumb", async () => {
|
|
481
521
|
render(html `
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const slider = document.querySelector(
|
|
522
|
+
<w-slider label="Required slider" min="0" max="100" required>
|
|
523
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
524
|
+
</w-slider>
|
|
525
|
+
`);
|
|
526
|
+
const slider = document.querySelector("w-slider");
|
|
487
527
|
await slider.updateComplete;
|
|
488
|
-
const thumb = document.querySelector(
|
|
528
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
489
529
|
await thumb.updateComplete;
|
|
490
530
|
// The required state should be synced from slider to thumb
|
|
491
531
|
expect(thumb.required).toBe(true);
|
|
492
532
|
// Verify the slider has required attribute in HTML
|
|
493
|
-
expect(slider.hasAttribute(
|
|
533
|
+
expect(slider.hasAttribute("required")).toBe(true);
|
|
494
534
|
});
|
|
495
535
|
// Hydration mismatch prevention tests
|
|
496
|
-
test(
|
|
536
|
+
test("aria-label is not set as host attribute (to avoid hydration mismatch)", async () => {
|
|
497
537
|
const component = html `
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
538
|
+
<w-slider label="Slider label" min="0" max="100">
|
|
539
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
540
|
+
</w-slider>
|
|
541
|
+
`;
|
|
502
542
|
render(component);
|
|
503
|
-
const slider = document.querySelector(
|
|
543
|
+
const slider = document.querySelector("w-slider");
|
|
504
544
|
await slider.updateComplete;
|
|
505
|
-
const thumb = document.querySelector(
|
|
545
|
+
const thumb = document.querySelector("w-slider-thumb");
|
|
506
546
|
await thumb.updateComplete;
|
|
507
547
|
// aria-label should NOT be a host attribute (to avoid hydration mismatch)
|
|
508
|
-
expect(thumb.hasAttribute(
|
|
548
|
+
expect(thumb.hasAttribute("aria-label")).toBe(false);
|
|
509
549
|
// But the property should be set by the parent
|
|
510
|
-
expect(thumb.ariaLabel).toBe(
|
|
550
|
+
expect(thumb.ariaLabel).toBe("Slider label");
|
|
511
551
|
// And the internal input should have the aria-label
|
|
512
552
|
const rangeInput = thumb.shadowRoot.querySelector('input[type="range"]');
|
|
513
|
-
expect(rangeInput.getAttribute(
|
|
553
|
+
expect(rangeInput.getAttribute("aria-label")).toBe("Slider label");
|
|
514
554
|
});
|
|
515
|
-
test(
|
|
555
|
+
test("aria-description is not set as host attribute (to avoid hydration mismatch)", async () => {
|
|
516
556
|
const component = html `
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
557
|
+
<w-slider label="Range" min="0" max="100">
|
|
558
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
559
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
560
|
+
</w-slider>
|
|
561
|
+
`;
|
|
522
562
|
render(component);
|
|
523
|
-
const slider = document.querySelector(
|
|
563
|
+
const slider = document.querySelector("w-slider");
|
|
524
564
|
await slider.updateComplete;
|
|
525
565
|
const fromThumb = document.querySelector('w-slider-thumb[slot="from"]');
|
|
526
566
|
const toThumb = document.querySelector('w-slider-thumb[slot="to"]');
|
|
527
567
|
await fromThumb.updateComplete;
|
|
528
568
|
await toThumb.updateComplete;
|
|
529
569
|
// aria-description should NOT be a host attribute (to avoid hydration mismatch)
|
|
530
|
-
expect(fromThumb.hasAttribute(
|
|
531
|
-
expect(toThumb.hasAttribute(
|
|
570
|
+
expect(fromThumb.hasAttribute("aria-description")).toBe(false);
|
|
571
|
+
expect(toThumb.hasAttribute("aria-description")).toBe(false);
|
|
532
572
|
// But the properties should be set
|
|
533
573
|
expect(fromThumb.ariaDescription).toBeTruthy();
|
|
534
574
|
expect(toThumb.ariaDescription).toBeTruthy();
|
|
535
575
|
});
|
|
576
|
+
test("renders optional indicator as 'Optional' without parentheses", async () => {
|
|
577
|
+
const page = render(html `
|
|
578
|
+
<w-slider label="Price" min="0" max="100" optional>
|
|
579
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
580
|
+
</w-slider>
|
|
581
|
+
`);
|
|
582
|
+
await expect.element(page.getByText("Optional")).toBeVisible();
|
|
583
|
+
expect(page.getByText("(optional)").query()).toBeNull();
|
|
584
|
+
});
|
|
585
|
+
test("does not render optional indicator when both required and optional are set", async () => {
|
|
586
|
+
const page = render(html `
|
|
587
|
+
<w-slider label="Price" min="0" max="100" required optional>
|
|
588
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
589
|
+
</w-slider>
|
|
590
|
+
`);
|
|
591
|
+
await expect.element(page.getByText("Price")).toBeVisible();
|
|
592
|
+
expect(page.getByText("Optional").query()).toBeNull();
|
|
593
|
+
});
|
|
594
|
+
test("includes optional indicator in the slider legend", async () => {
|
|
595
|
+
render(html `
|
|
596
|
+
<w-slider label="Price" min="0" max="100" optional>
|
|
597
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
598
|
+
</w-slider>
|
|
599
|
+
`);
|
|
600
|
+
const slider = document.querySelector("w-slider");
|
|
601
|
+
await slider.updateComplete;
|
|
602
|
+
await new Promise((resolve) => setTimeout(resolve, 0)); // Wait for the next microtask to ensure the legend is rendered
|
|
603
|
+
const legend = slider.shadowRoot.querySelector("legend");
|
|
604
|
+
expect(legend).not.toBeNull();
|
|
605
|
+
console.log("Legend text content:", legend.textContent);
|
|
606
|
+
expect(legend.textContent).toContain("Price");
|
|
607
|
+
expect(legend.textContent).toContain("Optional");
|
|
608
|
+
});
|
|
609
|
+
test("removes optional indicator when required is added dynamically", async () => {
|
|
610
|
+
const page = render(html `
|
|
611
|
+
<w-slider label="Price" min="0" max="100" optional data-testid="slider">
|
|
612
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
613
|
+
</w-slider>
|
|
614
|
+
`);
|
|
615
|
+
await expect.element(page.getByText("Optional")).toBeVisible();
|
|
616
|
+
const slider = document.querySelector("w-slider");
|
|
617
|
+
slider.required = true;
|
|
618
|
+
await slider.updateComplete;
|
|
619
|
+
expect(page.getByText("Optional").query()).toBeNull();
|
|
620
|
+
});
|
|
621
|
+
test("shows optional indicator when required is removed dynamically", async () => {
|
|
622
|
+
const page = render(html `
|
|
623
|
+
<w-slider
|
|
624
|
+
label="Price"
|
|
625
|
+
min="0"
|
|
626
|
+
max="100"
|
|
627
|
+
required
|
|
628
|
+
optional
|
|
629
|
+
data-testid="slider"
|
|
630
|
+
>
|
|
631
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
632
|
+
</w-slider>
|
|
633
|
+
`);
|
|
634
|
+
expect(page.getByText("Optional").query()).toBeNull();
|
|
635
|
+
const slider = document.querySelector("w-slider");
|
|
636
|
+
slider.required = false;
|
|
637
|
+
await slider.updateComplete;
|
|
638
|
+
await expect.element(page.getByText("Optional")).toBeVisible();
|
|
639
|
+
});
|
|
640
|
+
test("does not render optional indicator when there is no label", async () => {
|
|
641
|
+
const page = render(html `
|
|
642
|
+
<w-slider aria-label="Price" min="0" max="100" optional>
|
|
643
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
644
|
+
</w-slider>
|
|
645
|
+
`);
|
|
646
|
+
const slider = document.querySelector("w-slider");
|
|
647
|
+
await slider.updateComplete;
|
|
648
|
+
expect(page.getByText("Optional").query()).toBeNull();
|
|
649
|
+
});
|
|
650
|
+
test("excludes optional indicator from legend when required suppresses it", async () => {
|
|
651
|
+
render(html `
|
|
652
|
+
<w-slider label="Price" min="0" max="100" required optional>
|
|
653
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
654
|
+
</w-slider>
|
|
655
|
+
`);
|
|
656
|
+
const slider = document.querySelector("w-slider");
|
|
657
|
+
await slider.updateComplete;
|
|
658
|
+
const legend = slider.shadowRoot.querySelector("legend");
|
|
659
|
+
expect(legend).not.toBeNull();
|
|
660
|
+
expect(legend.textContent).toContain("Price");
|
|
661
|
+
expect(legend.textContent).not.toContain("Optional");
|
|
662
|
+
});
|
|
663
|
+
test("renders localized optional text based on active locale", async () => {
|
|
664
|
+
const originalLang = document.documentElement.lang;
|
|
665
|
+
document.documentElement.lang = "nb";
|
|
666
|
+
const page = render(html `
|
|
667
|
+
<w-slider label="Price" min="0" max="100" optional>
|
|
668
|
+
<w-slider-thumb name="price"></w-slider-thumb>
|
|
669
|
+
</w-slider>
|
|
670
|
+
`);
|
|
671
|
+
const slider = document.querySelector("w-slider");
|
|
672
|
+
await slider.updateComplete;
|
|
673
|
+
await expect.element(page.getByText("Valgfri")).toBeVisible();
|
|
674
|
+
document.documentElement.lang = originalLang;
|
|
675
|
+
});
|