diff --git a/packages/ui/src/components/va-slider/VaSlider.stories.ts b/packages/ui/src/components/va-slider/VaSlider.stories.ts index 8c7291ace7..c79db6292b 100644 --- a/packages/ui/src/components/va-slider/VaSlider.stories.ts +++ b/packages/ui/src/components/va-slider/VaSlider.stories.ts @@ -8,7 +8,7 @@ import { VaSlider } from './' function getSlider () { return { - slider: getStoryId('slider'), + slider: getStoryId('slider').querySelector('[role="slider"]') as HTMLElement, sliderTrack: getStorySelector('.va-slider__track'), sliderThumb: getStorySelector('.va-slider__handler'), } @@ -16,7 +16,7 @@ function getSlider () { function getSliderAll () { return { - slider: getStoryIdAll('slider'), + slider: [...getStoryIdAll('slider')].map((el) => el.querySelector('[role="slider"]') as HTMLElement), sliderTrack: getStorySelectorAll('.va-slider__track:not([class*=" "])'), sliderThumb: getStorySelectorAll('.va-slider__handler'), } diff --git a/packages/ui/src/components/va-slider/VaSlider.vue b/packages/ui/src/components/va-slider/VaSlider.vue index ffe708bb43..35bb63a4ba 100644 --- a/packages/ui/src/components/va-slider/VaSlider.vue +++ b/packages/ui/src/components/va-slider/VaSlider.vue @@ -670,7 +670,7 @@ const sliderAriaAttributes = (value: number, order: 0 | 1) => { role: 'slider', 'aria-valuemin': minComputed.value, 'aria-valuemax': maxComputed.value, - 'aria-valuenow:': value, + 'aria-valuenow': value, 'aria-valuetext': String(value), 'aria-label': props.range ? order === 0 diff --git a/packages/ui/src/utils/watch-setter.ts b/packages/ui/src/utils/watch-setter.ts index c695db51fb..862a3c794f 100644 --- a/packages/ui/src/utils/watch-setter.ts +++ b/packages/ui/src/utils/watch-setter.ts @@ -1,8 +1,5 @@ -import { ComputedRef, Ref } from 'vue' - -const isComputedRef = (value: Ref): value is ComputedRef & { _setter: (v: T) => void} => { - return typeof value === 'object' && '_setter' in value -} +import { Ref } from 'vue' +import { warn } from './console' // TODO: Maybe it is better to tweak useStateful /** @@ -12,10 +9,20 @@ const isComputedRef = (value: Ref): value is ComputedRef & { _setter: * @notice you likely want to watch when value is changed, not setter is called. */ export const watchSetter = (ref: Ref, cb: (newValue: T) => void) => { - if (!isComputedRef(ref)) { return } - const originalSetter = ref._setter + let key: 'setter' | '_setter' + + if ('_setter' in ref) { + key = '_setter' as const + } else if ('setter' in ref) { + key = 'setter' as const + } else { + warn('watchSetter', 'Ref does not have setter', ref) + return + } + + const originalSetter = (ref as any)[key] - ref._setter = (newValue: T) => { + ;(ref as any)[key] = (newValue: T) => { cb(newValue) originalSetter(newValue) }