@warp-ds/elements 2.2.0-next.9 → 2.3.0-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/README.md +188 -26
- package/dist/.storybook/utilities.js +52 -0
- package/dist/api.js.map +1 -1
- package/dist/custom-elements.json +1758 -2395
- package/dist/index.d.ts +1127 -25
- package/dist/packages/affix/affix.react.stories.d.ts +9 -0
- package/dist/packages/affix/affix.react.stories.js +10 -0
- package/dist/packages/affix/affix.stories.js +25 -0
- package/dist/packages/affix/affix.test.js +9 -0
- package/dist/packages/affix/index.d.ts +0 -17
- package/dist/packages/affix/index.js +5 -5
- package/dist/packages/affix/index.js.map +4 -4
- package/dist/packages/affix/react.d.ts +1 -1
- package/dist/packages/affix/react.js +15 -2482
- package/dist/packages/affix/styles.js +2 -0
- package/dist/packages/alert/alert.react.stories.d.ts +13 -0
- package/dist/packages/alert/alert.react.stories.js +44 -0
- package/dist/packages/alert/alert.stories.js +68 -0
- package/dist/packages/alert/alert.test.js +18 -0
- package/dist/packages/alert/index.d.ts +1 -6
- package/dist/packages/alert/index.js +4 -4
- package/dist/packages/alert/index.js.map +4 -4
- package/dist/packages/alert/react.d.ts +1 -1
- package/dist/packages/alert/react.js +11 -2492
- package/dist/packages/alert/styles.js +2 -0
- package/dist/packages/attention/attention.react.stories.d.ts +15 -0
- package/dist/packages/attention/attention.react.stories.js +92 -0
- package/dist/packages/attention/attention.stories.d.ts +1 -0
- package/dist/packages/attention/attention.stories.js +180 -0
- package/dist/packages/attention/attention.test.js +11 -0
- package/dist/packages/attention/index.d.ts +3 -29
- package/dist/packages/attention/index.js +249 -19
- package/dist/packages/attention/index.js.map +4 -4
- package/dist/packages/attention/layout-styles.js +905 -0
- package/dist/packages/attention/locales/da/messages.mjs +1 -0
- package/dist/packages/attention/locales/en/messages.mjs +1 -0
- package/dist/packages/attention/locales/fi/messages.mjs +1 -0
- package/dist/packages/attention/locales/nb/messages.mjs +1 -0
- package/dist/packages/attention/locales/sv/messages.mjs +1 -0
- package/dist/packages/attention/react.d.ts +15 -1
- package/dist/packages/attention/react.js +17 -3405
- package/dist/packages/attention/styles.js +2 -0
- package/dist/packages/badge/badge.react.stories.d.ts +18 -0
- package/dist/packages/badge/badge.react.stories.js +60 -0
- package/dist/packages/badge/badge.stories.js +68 -0
- package/dist/packages/badge/badge.test.js +9 -0
- package/dist/packages/badge/index.d.ts +0 -5
- package/dist/packages/badge/index.js +1 -1
- package/dist/packages/badge/index.js.map +4 -4
- package/dist/packages/badge/react.d.ts +1 -1
- package/dist/packages/badge/react.js +11 -2465
- package/dist/packages/badge/styles.js +2 -0
- package/dist/packages/box/box.react.stories.d.ts +15 -0
- package/dist/packages/box/box.react.stories.js +45 -0
- package/dist/packages/box/box.stories.js +59 -0
- package/dist/packages/box/box.test.js +9 -0
- package/dist/packages/box/index.d.ts +0 -5
- package/dist/packages/box/index.js +11 -4
- package/dist/packages/box/index.js.map +4 -4
- package/dist/packages/box/react.d.ts +1 -1
- package/dist/packages/box/react.js +11 -2465
- package/dist/packages/box/slot.test.js +9 -0
- package/dist/packages/box/styles.js +2 -0
- package/dist/packages/breadcrumbs/breadcrumbs.react.stories.d.ts +13 -0
- package/dist/packages/breadcrumbs/breadcrumbs.react.stories.js +40 -0
- package/dist/packages/breadcrumbs/breadcrumbs.stories.js +60 -0
- package/dist/packages/breadcrumbs/breadcrumbs.test.js +16 -0
- package/dist/packages/breadcrumbs/index.d.ts +0 -12
- package/dist/packages/breadcrumbs/index.js +6 -6
- package/dist/packages/breadcrumbs/index.js.map +4 -4
- package/dist/packages/breadcrumbs/locales/da/messages.mjs +1 -0
- package/dist/packages/breadcrumbs/locales/en/messages.mjs +1 -0
- package/dist/packages/breadcrumbs/locales/fi/messages.mjs +1 -0
- package/dist/packages/breadcrumbs/locales/nb/messages.mjs +1 -0
- package/dist/packages/breadcrumbs/locales/sv/messages.mjs +1 -0
- package/dist/packages/breadcrumbs/react.d.ts +1 -1
- package/dist/packages/breadcrumbs/react.js +11 -2475
- package/dist/packages/breadcrumbs/styles.js +2 -0
- package/dist/packages/button/button.react.stories.d.ts +22 -0
- package/dist/packages/button/button.react.stories.js +102 -0
- package/dist/packages/button/button.stories.d.ts +4 -0
- package/dist/packages/button/button.stories.js +151 -0
- package/dist/packages/button/button.test.js +25 -0
- package/dist/packages/button/index.d.ts +0 -66
- package/dist/packages/button/index.js +17 -11
- package/dist/packages/button/index.js.map +4 -4
- package/dist/packages/button/locales/da/messages.mjs +1 -0
- package/dist/packages/button/locales/en/messages.mjs +1 -0
- package/dist/packages/button/locales/fi/messages.mjs +1 -0
- package/dist/packages/button/locales/nb/messages.mjs +1 -0
- package/dist/packages/button/locales/sv/messages.mjs +1 -0
- package/dist/packages/button/react.d.ts +1 -1
- package/dist/packages/button/react.js +10 -2684
- package/dist/packages/button/styles.js +2 -0
- package/dist/packages/card/card.react.stories.d.ts +16 -0
- package/dist/packages/card/card.react.stories.js +63 -0
- package/dist/packages/card/card.stories.js +82 -0
- package/dist/packages/card/card.test.js +9 -0
- package/dist/packages/card/index.d.ts +1 -18
- package/dist/packages/card/index.js +4 -4
- package/dist/packages/card/index.js.map +4 -4
- package/dist/packages/card/locales/da/messages.mjs +1 -0
- package/dist/packages/card/locales/en/messages.mjs +1 -0
- package/dist/packages/card/locales/fi/messages.mjs +1 -0
- package/dist/packages/card/locales/nb/messages.mjs +1 -0
- package/dist/packages/card/locales/sv/messages.mjs +1 -0
- package/dist/packages/card/react.d.ts +1 -1
- package/dist/packages/card/react.js +11 -2487
- package/dist/packages/card/styles.js +2 -0
- package/dist/packages/expandable/expandable.react.stories.d.ts +18 -0
- package/dist/packages/expandable/expandable.react.stories.js +103 -0
- package/dist/packages/expandable/expandable.stories.js +132 -0
- package/dist/packages/expandable/expandable.test.js +24 -0
- package/dist/packages/expandable/index.d.ts +2 -33
- package/dist/packages/expandable/index.js +20 -11
- package/dist/packages/expandable/index.js.map +4 -4
- package/dist/packages/expandable/react.d.ts +1 -1
- package/dist/packages/expandable/react.js +11 -2495
- package/dist/packages/expandable/styles.js +2 -0
- package/dist/packages/i18n.js +45 -0
- package/dist/packages/link/index.d.ts +0 -5
- package/dist/packages/link/index.js +93 -2640
- package/dist/packages/link/styles.js +200 -0
- package/dist/packages/modal/index.js +24 -41
- package/dist/packages/modal/index.js.map +4 -4
- package/dist/packages/modal/locales/da/messages.mjs +1 -0
- package/dist/packages/modal/locales/en/messages.mjs +1 -0
- package/dist/packages/modal/locales/fi/messages.mjs +1 -0
- package/dist/packages/modal/locales/nb/messages.mjs +1 -0
- package/dist/packages/modal/locales/sv/messages.mjs +1 -0
- package/dist/packages/modal/modal-footer.d.ts +0 -5
- package/dist/packages/{dead-toggle/index.js → modal/modal-footer.js} +20 -47
- package/dist/packages/modal/modal-footer.js.map +7 -0
- package/dist/packages/modal/modal-header.d.ts +0 -5
- package/dist/packages/modal/modal-header.js +2567 -0
- package/dist/packages/modal/modal-header.js.map +7 -0
- package/dist/packages/modal/modal-main.d.ts +0 -5
- package/dist/packages/{dead-toggle/react.js → modal/modal-main.js} +124 -59
- package/dist/packages/{box/react.js.map → modal/modal-main.js.map} +4 -4
- package/dist/packages/modal/modal.react.stories.d.ts +14 -0
- package/dist/packages/modal/modal.react.stories.js +27 -0
- package/dist/packages/modal/modal.stories.d.ts +3 -3
- package/dist/packages/modal/modal.stories.js +254 -0
- package/dist/packages/modal/react.d.ts +11 -3
- package/dist/packages/modal/react.js +31 -2754
- package/dist/packages/modal/util.js +21 -0
- package/dist/packages/pagination/index.d.ts +0 -5
- package/dist/packages/pagination/index.js +19 -13
- package/dist/packages/pagination/index.js.map +3 -3
- package/dist/packages/pagination/locales/da/messages.mjs +1 -0
- package/dist/packages/pagination/locales/en/messages.mjs +1 -0
- package/dist/packages/pagination/locales/fi/messages.mjs +1 -0
- package/dist/packages/pagination/locales/nb/messages.mjs +1 -0
- package/dist/packages/pagination/locales/sv/messages.mjs +1 -0
- package/dist/packages/pagination/pagination.react.stories.d.ts +21 -0
- package/dist/packages/pagination/pagination.react.stories.js +45 -0
- package/dist/packages/pagination/pagination.stories.js +56 -0
- package/dist/packages/pagination/pagination.test.js +76 -0
- package/dist/packages/pagination/react.d.ts +5 -2
- package/dist/packages/pagination/react.js +15 -2514
- package/dist/packages/pagination/styles.js +2 -0
- package/dist/packages/pill/index.d.ts +0 -17
- package/dist/packages/pill/index.js +5 -5
- package/dist/packages/pill/index.js.map +2 -2
- package/dist/packages/pill/locales/da/messages.mjs +1 -0
- package/dist/packages/pill/locales/en/messages.mjs +1 -0
- package/dist/packages/pill/locales/fi/messages.mjs +1 -0
- package/dist/packages/pill/locales/nb/messages.mjs +1 -0
- package/dist/packages/pill/locales/sv/messages.mjs +1 -0
- package/dist/packages/pill/pill.react.stories.d.ts +23 -0
- package/dist/packages/pill/pill.react.stories.js +22 -0
- package/dist/packages/pill/pill.stories.js +33 -0
- package/dist/packages/pill/pill.test.js +25 -0
- package/dist/packages/pill/react.d.ts +7 -0
- package/dist/packages/pill/react.js +17 -0
- package/dist/packages/pill/styles.js +2 -0
- package/dist/packages/select/index.d.ts +4 -29
- package/dist/packages/select/index.js +25 -18
- package/dist/packages/select/index.js.map +3 -3
- package/dist/packages/select/locales/da/messages.mjs +1 -0
- package/dist/packages/select/locales/en/messages.mjs +1 -0
- package/dist/packages/select/locales/fi/messages.mjs +1 -0
- package/dist/packages/select/locales/nb/messages.mjs +1 -0
- package/dist/packages/select/locales/sv/messages.mjs +1 -0
- package/dist/packages/select/react.d.ts +6 -2
- package/dist/packages/select/react.js +20 -2494
- package/dist/packages/select/select.react.stories.d.ts +18 -0
- package/dist/packages/select/select.react.stories.js +28 -0
- package/dist/packages/select/select.stories.d.ts +7 -0
- package/dist/packages/select/select.stories.js +100 -0
- package/dist/packages/select/select.test.js +31 -0
- package/dist/packages/select/styles.js +2 -0
- package/dist/packages/slider/Slider.d.ts +2 -0
- package/dist/packages/slider/Slider.js +8 -0
- package/dist/packages/slider/SliderThumb.d.ts +2 -0
- package/dist/packages/slider/SliderThumb.js +8 -0
- package/dist/packages/slider/index.d.ts +2 -0
- package/dist/packages/slider/index.js +2 -0
- package/dist/packages/slider/oddbird-css-anchor-positioning.d.ts +2 -0
- package/dist/packages/slider/oddbird-css-anchor-positioning.js +3 -0
- package/dist/packages/slider/react.d.ts +8 -0
- package/dist/packages/slider/react.js +20 -0
- package/dist/packages/slider/slider-thumb.d.ts +57 -0
- package/dist/packages/{steps/index.js → slider/slider-thumb.js} +268 -28
- package/dist/packages/slider/slider-thumb.js.map +7 -0
- package/dist/packages/slider/slider.d.ts +46 -0
- package/dist/packages/{switch/react.js → slider/slider.js} +150 -38
- package/dist/packages/slider/slider.js.map +7 -0
- package/dist/packages/slider/slider.react.stories.d.ts +18 -0
- package/dist/packages/slider/slider.react.stories.js +118 -0
- package/dist/packages/slider/slider.stories.d.ts +18 -0
- package/dist/packages/slider/slider.stories.js +197 -0
- package/dist/packages/slider/slider.test.d.ts +4 -0
- package/dist/packages/slider/slider.test.js +83 -0
- package/dist/packages/slider/styles/w-slider-thumb.styles.d.ts +1 -0
- package/dist/packages/slider/styles/w-slider-thumb.styles.js +167 -0
- package/dist/packages/slider/styles/w-slider.styles.d.ts +1 -0
- package/dist/packages/slider/styles/w-slider.styles.js +134 -0
- package/dist/packages/slider/styles.js +2 -0
- package/dist/packages/{switch/index.js → styles.js} +5 -18
- package/dist/packages/textfield/index.d.ts +12 -26
- package/dist/packages/textfield/index.js +86 -28
- package/dist/packages/textfield/index.js.map +4 -4
- package/dist/packages/textfield/react.d.ts +11 -2
- package/dist/packages/textfield/react.js +21 -2490
- package/dist/packages/textfield/styles/w-textfield.styles.d.ts +1 -0
- package/dist/packages/textfield/styles/w-textfield.styles.js +55 -0
- package/dist/packages/textfield/styles.js +2 -0
- package/dist/packages/textfield/textfield.react.stories.d.ts +37 -0
- package/dist/packages/textfield/textfield.react.stories.js +88 -0
- package/dist/packages/textfield/textfield.stories.d.ts +1 -0
- package/dist/packages/textfield/textfield.stories.js +105 -0
- package/dist/packages/textfield/textfield.test.d.ts +1 -0
- package/dist/packages/textfield/textfield.test.js +68 -0
- package/dist/packages/toast/api.d.ts +1 -1
- package/dist/packages/toast/api.js +41 -0
- package/dist/packages/toast/index.d.ts +1 -1
- package/dist/packages/toast/index.js +17 -17
- package/dist/packages/toast/index.js.map +4 -4
- package/dist/packages/toast/locales/da/messages.mjs +1 -0
- package/dist/packages/toast/locales/en/messages.mjs +1 -0
- package/dist/packages/toast/locales/fi/messages.mjs +1 -0
- package/dist/packages/toast/locales/nb/messages.mjs +1 -0
- package/dist/packages/toast/locales/sv/messages.mjs +1 -0
- package/dist/packages/toast/styles.js +2 -0
- package/dist/packages/toast/toast-container.d.ts +1 -1
- package/dist/packages/toast/toast-container.js +2458 -0
- package/dist/packages/toast/toast-container.js.map +7 -0
- package/dist/packages/toast/toast.js +2466 -0
- package/dist/packages/toast/toast.js.map +7 -0
- package/dist/packages/toast/toast.stories.js +50 -0
- package/dist/packages/toast/types.js +1 -0
- package/dist/packages/utils/expand-transition.d.ts +3 -3
- package/dist/packages/utils/expand-transition.js +59 -0
- package/dist/packages/utils/index.js +37 -0
- package/dist/packages/utils/unstyled-heading.d.ts +2 -3
- package/dist/packages/utils/unstyled-heading.js +22 -0
- package/dist/packages/utils/window-exists.js +1 -0
- package/dist/setup-tests.js +1 -0
- package/dist/web-types.json +358 -449
- package/package.json +41 -32
- package/dist/index.css +0 -2
- package/dist/index.css.map +0 -7
- package/dist/index.js +0 -4285
- package/dist/index.js.map +0 -7
- package/dist/packages/affix/react.js.map +0 -7
- package/dist/packages/alert/react.js.map +0 -7
- package/dist/packages/attention/react.js.map +0 -7
- package/dist/packages/badge/react.js.map +0 -7
- package/dist/packages/breadcrumbs/react.js.map +0 -7
- package/dist/packages/button/react.js.map +0 -7
- package/dist/packages/card/react.js.map +0 -7
- package/dist/packages/datepicker/DatePicker.test.d.ts +0 -1
- package/dist/packages/datepicker/datepicker.d.ts +0 -107
- package/dist/packages/datepicker/datepicker.stories.d.ts +0 -11
- package/dist/packages/datepicker/datepicker.test.d.ts +0 -2
- package/dist/packages/datepicker/index.d.ts +0 -1
- package/dist/packages/datepicker/index.js +0 -2785
- package/dist/packages/datepicker/index.js.map +0 -7
- package/dist/packages/datepicker/locales/da/messages.d.mts +0 -1
- package/dist/packages/datepicker/locales/en/messages.d.mts +0 -1
- package/dist/packages/datepicker/locales/fi/messages.d.mts +0 -1
- package/dist/packages/datepicker/locales/nb/messages.d.mts +0 -1
- package/dist/packages/datepicker/locales/sv/messages.d.mts +0 -1
- package/dist/packages/datepicker/react.d.ts +0 -2
- package/dist/packages/datepicker/react.js +0 -2805
- package/dist/packages/datepicker/react.js.map +0 -7
- package/dist/packages/datepicker/styles/w-datepicker-calendar.styles.d.ts +0 -1
- package/dist/packages/datepicker/styles/w-datepicker-day.styles.d.ts +0 -1
- package/dist/packages/datepicker/styles/w-datepicker-month.styles.d.ts +0 -1
- package/dist/packages/datepicker/styles/w-datepicker.styles.d.ts +0 -1
- package/dist/packages/datepicker/utils.d.ts +0 -13
- package/dist/packages/dead-toggle/dead-toggle.stories.d.ts +0 -10
- package/dist/packages/dead-toggle/dead-toggle.test.d.ts +0 -1
- package/dist/packages/dead-toggle/index.d.ts +0 -21
- package/dist/packages/dead-toggle/index.js.map +0 -7
- package/dist/packages/dead-toggle/react.d.ts +0 -2
- package/dist/packages/dead-toggle/react.js.map +0 -7
- package/dist/packages/expandable/react.js.map +0 -7
- package/dist/packages/link/index.js.map +0 -7
- package/dist/packages/link/link.stories.d.ts +0 -20
- package/dist/packages/link/link.test.d.ts +0 -1
- package/dist/packages/link/react.d.ts +0 -2
- package/dist/packages/link/react.js +0 -2666
- package/dist/packages/link/react.js.map +0 -7
- package/dist/packages/modal/react.js.map +0 -7
- package/dist/packages/pageindicator/index.d.ts +0 -14
- package/dist/packages/pageindicator/index.js +0 -32
- package/dist/packages/pageindicator/index.js.map +0 -7
- package/dist/packages/pageindicator/pageindicator.stories.d.ts +0 -32
- package/dist/packages/pageindicator/react.d.ts +0 -2
- package/dist/packages/pageindicator/react.js +0 -52
- package/dist/packages/pageindicator/react.js.map +0 -7
- package/dist/packages/pageindicator/style.d.ts +0 -1
- package/dist/packages/pagination/react.js.map +0 -7
- package/dist/packages/rip-and-tear-checkbox/checkbox.d.ts +0 -64
- package/dist/packages/rip-and-tear-checkbox/index.css +0 -2
- package/dist/packages/rip-and-tear-checkbox/index.css.map +0 -7
- package/dist/packages/rip-and-tear-checkbox/index.d.ts +0 -6
- package/dist/packages/rip-and-tear-checkbox/index.js +0 -36
- package/dist/packages/rip-and-tear-checkbox/index.js.map +0 -7
- package/dist/packages/rip-and-tear-radio/base-element.d.ts +0 -46
- package/dist/packages/rip-and-tear-radio/custom-error-validator.d.ts +0 -6
- package/dist/packages/rip-and-tear-radio/form-associated-element.d.ts +0 -103
- package/dist/packages/rip-and-tear-radio/index.css +0 -2
- package/dist/packages/rip-and-tear-radio/index.css.map +0 -7
- package/dist/packages/rip-and-tear-radio/index.d.ts +0 -8
- package/dist/packages/rip-and-tear-radio/index.js +0 -34
- package/dist/packages/rip-and-tear-radio/index.js.map +0 -7
- package/dist/packages/rip-and-tear-radio/invalid.d.ts +0 -8
- package/dist/packages/rip-and-tear-radio/math.d.ts +0 -1
- package/dist/packages/rip-and-tear-radio/radio-group.d.ts +0 -72
- package/dist/packages/rip-and-tear-radio/radio.d.ts +0 -38
- package/dist/packages/rip-and-tear-radio/required-validator.d.ts +0 -11
- package/dist/packages/rip-and-tear-radio/slot.d.ts +0 -20
- package/dist/packages/rip-and-tear-radio/watch.d.ts +0 -26
- package/dist/packages/select/react.js.map +0 -7
- package/dist/packages/steps/index.d.ts +0 -43
- package/dist/packages/steps/index.js.map +0 -7
- package/dist/packages/steps/locales/da/messages.d.mts +0 -1
- package/dist/packages/steps/locales/en/messages.d.mts +0 -1
- package/dist/packages/steps/locales/fi/messages.d.mts +0 -1
- package/dist/packages/steps/locales/nb/messages.d.mts +0 -1
- package/dist/packages/steps/locales/sv/messages.d.mts +0 -1
- package/dist/packages/steps/react.d.ts +0 -3
- package/dist/packages/steps/react.js +0 -2485
- package/dist/packages/steps/react.js.map +0 -7
- package/dist/packages/steps/steps.stories.d.ts +0 -12
- package/dist/packages/switch/index.d.ts +0 -20
- package/dist/packages/switch/index.js.map +0 -7
- package/dist/packages/switch/react.d.ts +0 -2
- package/dist/packages/switch/react.js.map +0 -7
- package/dist/packages/switch/styles.d.ts +0 -1
- package/dist/packages/switch/switch.stories.d.ts +0 -9
- package/dist/packages/textfield/react.js.map +0 -7
- package/dist/vscode.css-custom-data.json +0 -6
- package/dist/vscode.html-custom-data.json +0 -421
- /package/dist/packages/{steps → slider}/styles.d.ts +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Slider, SliderThumb } from './react';
|
|
3
|
+
const locale = 'nb';
|
|
4
|
+
const getNumberFormatter = (locale, opts = {}) => {
|
|
5
|
+
return (value) => new Intl.NumberFormat(locale, { maximumFractionDigits: 0, ...opts }).format(value);
|
|
6
|
+
};
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Forms/Slider and Range Slider',
|
|
9
|
+
component: Slider,
|
|
10
|
+
};
|
|
11
|
+
export const Single = {
|
|
12
|
+
render() {
|
|
13
|
+
return (React.createElement(Slider, { label: "Single", min: "0", max: "100" },
|
|
14
|
+
React.createElement(SliderThumb, { name: "value" })));
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export const Range = {
|
|
18
|
+
render() {
|
|
19
|
+
return (React.createElement(Slider, { label: "Range", min: "0", max: "100" },
|
|
20
|
+
React.createElement(SliderThumb, { name: "from", slot: "from", "aria-label": "From value" }),
|
|
21
|
+
React.createElement(SliderThumb, { name: "to", slot: "to", "aria-label": "To value" })));
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
// Take a suffix attribute on `<Slider>` I think, have `<SliderThumb>` get from that.
|
|
25
|
+
export const SuffixSquareMeters = {
|
|
26
|
+
args: {
|
|
27
|
+
suffix: 'm²',
|
|
28
|
+
},
|
|
29
|
+
render({ suffix }) {
|
|
30
|
+
return (React.createElement(Slider, { label: "Apartment size", min: "0", max: "250", suffix: suffix, formatter: getNumberFormatter(locale) },
|
|
31
|
+
React.createElement(SliderThumb, { slot: "from", "aria-label": "From size", name: "from" }),
|
|
32
|
+
React.createElement(SliderThumb, { slot: "to", "aria-label": "To size", name: "to" })));
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
export const SuffixCurrency = {
|
|
36
|
+
args: {
|
|
37
|
+
suffix: 'kr',
|
|
38
|
+
},
|
|
39
|
+
render({ suffix }) {
|
|
40
|
+
return (React.createElement(Slider, { label: "Price", min: "0", max: "250000", suffix: suffix, formatter: getNumberFormatter(locale) },
|
|
41
|
+
React.createElement(SliderThumb, { slot: "from", "aria-label": "From price", name: "from" }),
|
|
42
|
+
React.createElement(SliderThumb, { slot: "to", "aria-label": "To price", name: "to" })));
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export const SuffixKilometers = {
|
|
46
|
+
args: {
|
|
47
|
+
suffix: 'km',
|
|
48
|
+
},
|
|
49
|
+
render({ suffix }) {
|
|
50
|
+
return (React.createElement(Slider, { label: "Distance", min: "0", max: "250000", suffix: suffix, formatter: getNumberFormatter(locale) },
|
|
51
|
+
React.createElement(SliderThumb, { slot: "from", "aria-label": "From distance", name: "from" }),
|
|
52
|
+
React.createElement(SliderThumb, { slot: "to", "aria-label": "To distance", name: "to" })));
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const Marks = {
|
|
56
|
+
args: {
|
|
57
|
+
suffix: 'km',
|
|
58
|
+
},
|
|
59
|
+
render({ suffix }) {
|
|
60
|
+
return (React.createElement(React.Fragment, null,
|
|
61
|
+
React.createElement(Slider, { label: "Single", min: "0", max: "100", markers: 5, step: 5 },
|
|
62
|
+
React.createElement(SliderThumb, { name: "value" }))));
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
export const Step = {
|
|
66
|
+
args: {
|
|
67
|
+
step: 5,
|
|
68
|
+
},
|
|
69
|
+
render({ step }) {
|
|
70
|
+
return (React.createElement(Slider, { label: "Single", step: step, min: "0", max: "100" },
|
|
71
|
+
React.createElement(SliderThumb, { name: "value" })));
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
export const OverUnder = {
|
|
75
|
+
render() {
|
|
76
|
+
const [overUnderFrom, setOverUnderFrom] = useState('');
|
|
77
|
+
const [overUnderTo, setOverUnderTo] = useState('');
|
|
78
|
+
return (React.createElement(React.Fragment, null,
|
|
79
|
+
React.createElement("form", { id: "overunder", style: { marginBottom: 16 }, lang: "nb", onInput: (val) => {
|
|
80
|
+
const formData = new FormData(val.currentTarget);
|
|
81
|
+
setOverUnderFrom(formData.get('from'));
|
|
82
|
+
setOverUnderTo(formData.get('to'));
|
|
83
|
+
} },
|
|
84
|
+
React.createElement(Slider, { label: "Produksjons\u00E5r", min: "1950", max: "2025", "data-testid": "overunder", formatter: (value) => {
|
|
85
|
+
if (value === '1950') {
|
|
86
|
+
return 'Før 1950';
|
|
87
|
+
}
|
|
88
|
+
if (value === '2025') {
|
|
89
|
+
return 'Etter 2025';
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
} },
|
|
93
|
+
React.createElement(SliderThumb, { slot: "from", "aria-label": "Fra \u00E5r", "aria-description": "1950 inkluderer kj\u00F8ret\u00F8y produsert fram til 1950", name: "from" }),
|
|
94
|
+
React.createElement(SliderThumb, { slot: "to", "aria-label": "Til \u00E5r", "aria-description": "2025 inkluderer kj\u00F8ret\u00F8y produsert etter 2025", name: "to" }))),
|
|
95
|
+
React.createElement("p", null, "Drag the slider to show the value below. See the Code tab for how to format the labels."),
|
|
96
|
+
React.createElement("output", null,
|
|
97
|
+
React.createElement("dl", null,
|
|
98
|
+
React.createElement("dt", null, "From:"),
|
|
99
|
+
React.createElement("dd", { id: "overunder-from" }, overUnderFrom),
|
|
100
|
+
React.createElement("dt", null, "To:"),
|
|
101
|
+
React.createElement("dd", { id: "overunder-to" }, overUnderTo)))));
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
export const SingleError = {
|
|
105
|
+
render() {
|
|
106
|
+
return (React.createElement(Slider, { label: "Single", min: "0", max: "100" },
|
|
107
|
+
React.createElement("p", { slot: "description" }, "Try typing a value over 100"),
|
|
108
|
+
React.createElement(SliderThumb, null)));
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
export const RangeError = {
|
|
112
|
+
render() {
|
|
113
|
+
return (React.createElement(Slider, { label: "Production year", min: "1950", max: "2025" },
|
|
114
|
+
React.createElement("p", { slot: "description" }, "Try typing a from value higher than a to value"),
|
|
115
|
+
React.createElement(SliderThumb, { slot: "from", name: "from" }),
|
|
116
|
+
React.createElement(SliderThumb, { slot: "to", name: "to" })));
|
|
117
|
+
},
|
|
118
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import '../affix/index.js';
|
|
3
|
+
import '../attention/index.js';
|
|
4
|
+
import '../textfield/index.js';
|
|
5
|
+
import './index.js';
|
|
6
|
+
declare const meta: Meta;
|
|
7
|
+
export default meta;
|
|
8
|
+
type Story = StoryObj;
|
|
9
|
+
export declare const Single: Story;
|
|
10
|
+
export declare const Range: Story;
|
|
11
|
+
export declare const SuffixSquareMeters: Story;
|
|
12
|
+
export declare const SuffixCurrency: Story;
|
|
13
|
+
export declare const SuffixKilometers: Story;
|
|
14
|
+
export declare const Marks: Story;
|
|
15
|
+
export declare const Step: Story;
|
|
16
|
+
export declare const OverUnder: Story;
|
|
17
|
+
export declare const SingleError: Story;
|
|
18
|
+
export declare const RangeError: Story;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import '../affix/index.js';
|
|
4
|
+
import '../attention/index.js';
|
|
5
|
+
import '../textfield/index.js';
|
|
6
|
+
import './index.js';
|
|
7
|
+
const { events: sliderEvents, args: sliderArgs, argTypes: sliderArgTypes, } = getStorybookHelpers('w-slider');
|
|
8
|
+
const meta = {
|
|
9
|
+
title: 'Forms/Slider and Range Slider',
|
|
10
|
+
args: sliderArgs,
|
|
11
|
+
argTypes: sliderArgTypes,
|
|
12
|
+
parameters: {
|
|
13
|
+
actions: {
|
|
14
|
+
handles: sliderEvents,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
export default meta;
|
|
19
|
+
export const Single = {
|
|
20
|
+
render() {
|
|
21
|
+
return html `
|
|
22
|
+
<w-slider label="Single" min="0" max="100">
|
|
23
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
24
|
+
</w-slider>
|
|
25
|
+
`;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export const Range = {
|
|
29
|
+
render() {
|
|
30
|
+
return html `
|
|
31
|
+
<w-slider label="Range" min="0" max="100">
|
|
32
|
+
<w-slider-thumb slot="from" aria-label="From value" name="from"></w-slider-thumb>
|
|
33
|
+
<w-slider-thumb slot="to" aria-label="To value" name="to"></w-slider-thumb>
|
|
34
|
+
</w-slider>
|
|
35
|
+
`;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// Take a suffix attribute on `<w-slider>` I think, have `<w-slider-thumb>` get from that.
|
|
39
|
+
export const SuffixSquareMeters = {
|
|
40
|
+
args: {
|
|
41
|
+
locale: 'nb',
|
|
42
|
+
suffix: 'm²',
|
|
43
|
+
},
|
|
44
|
+
render({ locale, suffix }) {
|
|
45
|
+
return html `
|
|
46
|
+
<w-slider label="Apartment size" min="0" max="250" suffix="${suffix}" data-testid="sqm">
|
|
47
|
+
<w-slider-thumb slot="from" aria-label="From size" name="from"></w-slider-thumb>
|
|
48
|
+
<w-slider-thumb slot="to" aria-label="To size" name="to"></w-slider-thumb>
|
|
49
|
+
</w-slider>
|
|
50
|
+
<script type="module">
|
|
51
|
+
const sqmSlider = document.querySelector('w-slider[data-testid="sqm"]');
|
|
52
|
+
sqmSlider.formatter = window.getNumberFormatter('${locale}').format;
|
|
53
|
+
</script>
|
|
54
|
+
`;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
export const SuffixCurrency = {
|
|
58
|
+
args: {
|
|
59
|
+
locale: 'nb',
|
|
60
|
+
suffix: 'kr',
|
|
61
|
+
},
|
|
62
|
+
render({ locale, suffix }) {
|
|
63
|
+
return html `
|
|
64
|
+
<w-slider label="Price" min="0" max="250000" suffix="${suffix}" data-testid="currency">
|
|
65
|
+
<w-slider-thumb slot="from" aria-label="From price" name="from"></w-slider-thumb>
|
|
66
|
+
<w-slider-thumb slot="to" aria-label="To price" name="to"></w-slider-thumb>
|
|
67
|
+
</w-slider>
|
|
68
|
+
<script type="module">
|
|
69
|
+
const currencySlider = document.querySelector('w-slider[data-testid="currency"]');
|
|
70
|
+
currencySlider.formatter = window.getNumberFormatter('${locale}').format;
|
|
71
|
+
</script>
|
|
72
|
+
`;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
export const SuffixKilometers = {
|
|
76
|
+
args: {
|
|
77
|
+
locale: 'nb',
|
|
78
|
+
suffix: 'km',
|
|
79
|
+
},
|
|
80
|
+
render({ locale, suffix }) {
|
|
81
|
+
return html `
|
|
82
|
+
<w-slider label="Distance" min="0" max="250000" suffix="${suffix}" data-testid="km">
|
|
83
|
+
<w-slider-thumb slot="from" aria-label="From distance" name="from"></w-slider-thumb>
|
|
84
|
+
<w-slider-thumb slot="to" aria-label="To distance" name="to"></w-slider-thumb>
|
|
85
|
+
</w-slider>
|
|
86
|
+
<script type="module">
|
|
87
|
+
const kmSlider = document.querySelector('w-slider[data-testid="km"]');
|
|
88
|
+
kmSlider.formatter = window.getNumberFormatter('${locale}').format;
|
|
89
|
+
</script>
|
|
90
|
+
`;
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
export const Marks = {
|
|
94
|
+
args: {
|
|
95
|
+
locale: 'nb',
|
|
96
|
+
step: '5',
|
|
97
|
+
markers: '5',
|
|
98
|
+
},
|
|
99
|
+
render({ markers, step }) {
|
|
100
|
+
return html `
|
|
101
|
+
<w-slider label="Single" min="0" max="100" step="${step}" markers="${markers}">
|
|
102
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
103
|
+
</w-slider>
|
|
104
|
+
`;
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
export const Step = {
|
|
108
|
+
args: {
|
|
109
|
+
step: 5,
|
|
110
|
+
},
|
|
111
|
+
render({ step }) {
|
|
112
|
+
return html `
|
|
113
|
+
<w-slider label="Single" step="${step}" min="0" max="100">
|
|
114
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
115
|
+
</w-slider>
|
|
116
|
+
`;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
export const OverUnder = {
|
|
120
|
+
args: {},
|
|
121
|
+
render() {
|
|
122
|
+
return html `
|
|
123
|
+
<form id="overunder" style="margin-bottom: 16px" lang="nb">
|
|
124
|
+
<w-slider label="Produksjonsår" min="1950" max="2025" data-testid="overunder">
|
|
125
|
+
<w-slider-thumb
|
|
126
|
+
slot="from"
|
|
127
|
+
aria-label="Fra år"
|
|
128
|
+
aria-description="1950 inkluderer kjøretøy produsert fram til 1950"
|
|
129
|
+
name="from"></w-slider-thumb>
|
|
130
|
+
<w-slider-thumb
|
|
131
|
+
slot="to"
|
|
132
|
+
aria-label="Til år"
|
|
133
|
+
aria-description="2025 inkluderer kjøretøy produsert etter 2025"
|
|
134
|
+
name="to"></w-slider-thumb>
|
|
135
|
+
</w-slider>
|
|
136
|
+
</form>
|
|
137
|
+
<p>Drag the slider to show the value below. See the Code tab for how to format the labels.</p>
|
|
138
|
+
<output>
|
|
139
|
+
<dl>
|
|
140
|
+
<dt>From:</dt>
|
|
141
|
+
<dd id="overunder-from"></dd>
|
|
142
|
+
<dt>To:</dt>
|
|
143
|
+
<dd id="overunder-to"></dd>
|
|
144
|
+
</dl>
|
|
145
|
+
</output>
|
|
146
|
+
<script>
|
|
147
|
+
/** Here is how you can show labels to indicate min and max values are "up to and including" and "this value and above". */
|
|
148
|
+
const overunderSlider = document.querySelector('w-slider[data-testid="overunder"]');
|
|
149
|
+
overunderSlider.formatter = function (value) {
|
|
150
|
+
if (value === '1950') {
|
|
151
|
+
return 'Før 1950';
|
|
152
|
+
}
|
|
153
|
+
if (value === '2025') {
|
|
154
|
+
return 'Etter 2025';
|
|
155
|
+
}
|
|
156
|
+
return value;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/** Code to show the form values in output */
|
|
160
|
+
document.forms['overunder'].addEventListener('input', function () {
|
|
161
|
+
const formData = new FormData(this);
|
|
162
|
+
const from = formData.get('from');
|
|
163
|
+
const to = formData.get('to');
|
|
164
|
+
document.getElementById('overunder-from').innerText = from;
|
|
165
|
+
document.getElementById('overunder-to').innerText = to;
|
|
166
|
+
});
|
|
167
|
+
</script>
|
|
168
|
+
`;
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
export const SingleError = {
|
|
172
|
+
args: {
|
|
173
|
+
locale: 'nb',
|
|
174
|
+
},
|
|
175
|
+
render() {
|
|
176
|
+
return html `
|
|
177
|
+
<w-slider label="Single" min="0" max="100">
|
|
178
|
+
<p slot="description">Try typing a value over 100</p>
|
|
179
|
+
<w-slider-thumb></w-slider-thumb>
|
|
180
|
+
</w-slider>
|
|
181
|
+
`;
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
export const RangeError = {
|
|
185
|
+
args: {
|
|
186
|
+
locale: 'nb',
|
|
187
|
+
},
|
|
188
|
+
render() {
|
|
189
|
+
return html `
|
|
190
|
+
<w-slider label="Production year" min="1950" max="2025" over under>
|
|
191
|
+
<p slot="description">Try typing a from value higher than a to value</p>
|
|
192
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
193
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
194
|
+
</w-slider>
|
|
195
|
+
`;
|
|
196
|
+
},
|
|
197
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { userEvent } from '@vitest/browser/context';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { expect, test } from 'vitest';
|
|
4
|
+
import { render } from 'vitest-browser-lit';
|
|
5
|
+
import '../attention/index.js';
|
|
6
|
+
import '../affix/index.js';
|
|
7
|
+
import '../textfield/index.js';
|
|
8
|
+
import './index.js';
|
|
9
|
+
test('single slider starts with a default value equal to max', async () => {
|
|
10
|
+
const component = html `
|
|
11
|
+
<form data-testid="form">
|
|
12
|
+
<w-slider label="Single" min="0" max="100">
|
|
13
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
14
|
+
</w-slider>
|
|
15
|
+
</form>
|
|
16
|
+
`;
|
|
17
|
+
const page = render(component);
|
|
18
|
+
await expect.element(page.getByLabelText('Single').first()).toHaveValue('100');
|
|
19
|
+
});
|
|
20
|
+
test('range slider starts with a default from value equal to min, and to value equal to max', async () => {
|
|
21
|
+
const component = html `
|
|
22
|
+
<form data-testid="form">
|
|
23
|
+
<w-slider label="Range" min="0" max="100">
|
|
24
|
+
<w-slider-thumb aria-label="From" name="rangefrom" slot="from"></w-slider-thumb>
|
|
25
|
+
<w-slider-thumb aria-label="To" name="rangeto" slot="to"></w-slider-thumb>
|
|
26
|
+
</w-slider>
|
|
27
|
+
</form>
|
|
28
|
+
`;
|
|
29
|
+
const page = render(component);
|
|
30
|
+
await expect.element(page.getByLabelText('From').first()).toHaveValue('0');
|
|
31
|
+
await expect.element(page.getByLabelText('To').first()).toHaveValue('100');
|
|
32
|
+
});
|
|
33
|
+
test('can set slider value via the range input', async () => {
|
|
34
|
+
const component = html `
|
|
35
|
+
<form data-testid="form">
|
|
36
|
+
<w-slider label="Single" min="0" max="100">
|
|
37
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
38
|
+
</w-slider>
|
|
39
|
+
</form>
|
|
40
|
+
`;
|
|
41
|
+
const page = render(component);
|
|
42
|
+
await userEvent.type(page.getByLabelText('Single').first(), '{ArrowLeft}{ArrowLeft}{ArrowLeft}');
|
|
43
|
+
await expect.element(page.getByLabelText('Single').first()).toHaveValue('97');
|
|
44
|
+
await expect.element(page.getByRole('spinbutton')).toHaveValue(97); // keeps value in sync between inputs
|
|
45
|
+
const formData = new FormData(page.getByTestId('form').element());
|
|
46
|
+
expect(formData.get('value')).toBe('97');
|
|
47
|
+
});
|
|
48
|
+
test('can set slider value via the number input', async () => {
|
|
49
|
+
const component = html `
|
|
50
|
+
<form data-testid="form">
|
|
51
|
+
<w-slider label="Single" min="0" max="100">
|
|
52
|
+
<w-slider-thumb name="value"></w-slider-thumb>
|
|
53
|
+
</w-slider>
|
|
54
|
+
</form>
|
|
55
|
+
`;
|
|
56
|
+
const page = render(component);
|
|
57
|
+
await page.getByRole('spinbutton').fill('50');
|
|
58
|
+
await expect.element(page.getByRole('spinbutton')).toHaveValue(50);
|
|
59
|
+
await expect.element(page.getByLabelText('Single').first()).toHaveValue('50'); // keeps value in sync between inputs
|
|
60
|
+
const formData = new FormData(page.getByTestId('form').element());
|
|
61
|
+
expect(formData.get('value')).toBe('50');
|
|
62
|
+
});
|
|
63
|
+
test('deleting from number input works as expected', async () => {
|
|
64
|
+
const component = html `
|
|
65
|
+
<form data-testid="form">
|
|
66
|
+
<w-slider label="Production year" min="1950" max="2025" over under>
|
|
67
|
+
<p slot="description">Try typing a from value higher than a to value</p>
|
|
68
|
+
<w-slider-thumb slot="from" name="from"></w-slider-thumb>
|
|
69
|
+
<w-slider-thumb slot="to" name="to"></w-slider-thumb>
|
|
70
|
+
</w-slider>
|
|
71
|
+
</form>
|
|
72
|
+
`;
|
|
73
|
+
const page = render(component);
|
|
74
|
+
await expect.element(page.getByRole('spinbutton').last()).toHaveValue(2025);
|
|
75
|
+
await userEvent.type(page.getByRole('spinbutton').last(), '{Backspace}');
|
|
76
|
+
await expect.element(page.getByRole('spinbutton').last()).toHaveValue(202);
|
|
77
|
+
await userEvent.type(page.getByRole('spinbutton').last(), '{Backspace}');
|
|
78
|
+
await expect.element(page.getByRole('spinbutton').last()).toHaveValue(20);
|
|
79
|
+
await userEvent.type(page.getByRole('spinbutton').last(), '{Backspace}');
|
|
80
|
+
await expect.element(page.getByRole('spinbutton').last()).toHaveValue(2);
|
|
81
|
+
await userEvent.type(page.getByRole('spinbutton').last(), '{Backspace}');
|
|
82
|
+
await expect.element(page.getByRole('spinbutton').last()).not.toHaveValue();
|
|
83
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wSliderThumbStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
/* For some reason the pseudoselectors for webkit and moz must be separate blocks :shrug: */
|
|
3
|
+
export const wSliderThumbStyles = css `
|
|
4
|
+
.w-slider-thumb {
|
|
5
|
+
position: relative;
|
|
6
|
+
display: grid;
|
|
7
|
+
pointer-events: none; /* For range inputs we position two of these on top of each other. Let clicks go through the top one. */
|
|
8
|
+
grid-template-areas:
|
|
9
|
+
'slider slider slider'
|
|
10
|
+
'frommarker . tomarker'
|
|
11
|
+
'fromtextfield . totextfield';
|
|
12
|
+
grid-template-columns: 1fr 24px 1fr;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.w-slider-thumb__range {
|
|
16
|
+
appearance: none;
|
|
17
|
+
background-color: transparent;
|
|
18
|
+
grid-area: slider;
|
|
19
|
+
height: 44px; /* touch target */
|
|
20
|
+
margin-left: 0;
|
|
21
|
+
pointer-events: none; /* let clicks pass through for range slider where we place two inputs over each other */
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.w-slider-thumb__range::-webkit-slider-runnable-track {
|
|
25
|
+
box-shadow: none;
|
|
26
|
+
color: var(--w-s-color-text);
|
|
27
|
+
height: var(--w-slider-track-height);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
Use anchor positioning to place the tooltip target in relation to the slider thumb.
|
|
32
|
+
We use a polyfill to bring support to older Safari, Firefox at time of writing.
|
|
33
|
+
*/
|
|
34
|
+
.w-slider-thumb__range::-webkit-slider-thumb {
|
|
35
|
+
anchor-name: --thumb;
|
|
36
|
+
|
|
37
|
+
appearance: none;
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
background: var(--w-s-color-background-primary);
|
|
40
|
+
border-radius: 50%;
|
|
41
|
+
height: var(--w-slider-thumb-size);
|
|
42
|
+
margin-top: calc(-1 * calc(var(--w-slider-thumb-offset) - calc(var(--w-slider-track-height) / 2)));
|
|
43
|
+
pointer-events: initial;
|
|
44
|
+
width: var(--w-slider-thumb-size);
|
|
45
|
+
z-index: 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.w-slider-thumb__range::-moz-range-thumb {
|
|
49
|
+
anchor-name: --thumb;
|
|
50
|
+
|
|
51
|
+
appearance: none;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
background: var(--w-s-color-background-primary);
|
|
54
|
+
border-radius: 50%;
|
|
55
|
+
border-color: transparent;
|
|
56
|
+
height: var(--w-slider-thumb-size);
|
|
57
|
+
margin-top: calc(-1 * calc(var(--w-slider-thumb-offset) - calc(var(--w-slider-track-height) / 2)));
|
|
58
|
+
pointer-events: initial;
|
|
59
|
+
width: var(--w-slider-thumb-size);
|
|
60
|
+
z-index: 1;
|
|
61
|
+
|
|
62
|
+
box-shadow: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.w-slider-thumb__range:active::-webkit-slider-thumb,
|
|
66
|
+
.w-slider-thumb__range:hover::-webkit-slider-thumb {
|
|
67
|
+
background: var(--w-s-color-background-primary-hover);
|
|
68
|
+
box-shadow: var(--w-shadow-slider-handle-hover);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.w-slider-thumb__range:focus,
|
|
72
|
+
.w-slider-thumb__range:focus-visible {
|
|
73
|
+
outline: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.w-slider-thumb__range:focus-visible::-webkit-slider-thumb {
|
|
77
|
+
outline: 2px solid var(--w-s-color-border-focus);
|
|
78
|
+
outline-offset: var(--w-outline-offset, 1px);
|
|
79
|
+
box-shadow: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.w-slider-thumb__range:active::-moz-range-thumb,
|
|
83
|
+
.w-slider-thumb__range:hover::-moz-range-thumb {
|
|
84
|
+
background: var(--w-s-color-background-primary-hover);
|
|
85
|
+
box-shadow: var(--w-shadow-slider-handle-hover);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.w-slider-thumb__range:focus-visible::-moz-range-thumb {
|
|
89
|
+
outline: 2px solid var(--w-s-color-border-focus);
|
|
90
|
+
outline-offset: var(--w-outline-offset, 1px);
|
|
91
|
+
box-shadow: none;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.w-slider-thumb__tooltip-target {
|
|
95
|
+
display: block;
|
|
96
|
+
pointer-events: none;
|
|
97
|
+
position: absolute;
|
|
98
|
+
border: 2px solid transparent;
|
|
99
|
+
border-radius: 20px;
|
|
100
|
+
width: 8px;
|
|
101
|
+
height: 8px;
|
|
102
|
+
position-anchor: --thumb;
|
|
103
|
+
position-area: center; /* Position the tooltip target right on the range thumb */
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Uncomment this to debug the invisible anchor target */
|
|
107
|
+
/* .w-slider-thumb__tooltip-target { border-color: lime; } */
|
|
108
|
+
|
|
109
|
+
.w-slider-thumb__from-marker,
|
|
110
|
+
.w-slider-thumb__to-marker {
|
|
111
|
+
margin-inline: 2px; /* visual alignment with input border, slider thumb */
|
|
112
|
+
color: var(--w-s-color-text-subtle);
|
|
113
|
+
font-size: var(--w-font-size-s);
|
|
114
|
+
line-height: var(--w-line-height-s);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.w-slider-thumb__from-marker {
|
|
118
|
+
grid-area: frommarker;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.w-slider-thumb__to-marker {
|
|
122
|
+
grid-area: tomarker;
|
|
123
|
+
text-align: right;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.w-slider-thumb__textfield {
|
|
127
|
+
margin-top: 10px;
|
|
128
|
+
pointer-events: auto;
|
|
129
|
+
grid-row: 3 / 4;
|
|
130
|
+
grid-column: 1 / 3; /* Single sliders should have the text field use the fromtextfield _and_ gap portion of the CSS grid. */
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
:host([name='from']) .w-slider-thumb__textfield {
|
|
134
|
+
grid-column: 1 / 2; /* Range sliders should leave the gap empty. */
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
:host([name='from']) .w-slider-thumb__range {
|
|
138
|
+
margin-left: var(--w-slider-thumb-size);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
:host([name='to']) .w-slider-thumb__range {
|
|
142
|
+
margin-right: var(--w-slider-thumb-size);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
:host([name='from']) .w-slider-thumb__range::-webkit-slider-thumb,
|
|
146
|
+
:host([name='from']) .w-slider-thumb__tooltip-target {
|
|
147
|
+
transform: translateX(calc(-1 * var(--w-slider-thumb-size) - 1px));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:host([name='from']) .w-slider-thumb__range::-moz-range-thumb {
|
|
151
|
+
transform: translateX(calc(-1 * var(--w-slider-thumb-size) - 1px));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
:host([name='to']) .w-slider-thumb__textfield {
|
|
155
|
+
grid-row: 3 / 4;
|
|
156
|
+
grid-column: 3 / 4;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
:host([name='to']) .w-slider-thumb__tooltip-target,
|
|
160
|
+
:host([name='to']) .w-slider-thumb__range::-webkit-slider-thumb {
|
|
161
|
+
transform: translateX(calc(var(--w-slider-thumb-size) - 1px));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
:host([name='to']) .w-slider-thumb__range::-moz-range-thumb {
|
|
165
|
+
transform: translateX(calc(var(--w-slider-thumb-size) - 1px));
|
|
166
|
+
}
|
|
167
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wSliderStyles: import("lit").CSSResult;
|