{"version":3,"file":"slider.mjs","sources":["../../src/slider/slider.tsx"],"sourcesContent":["import {\n  defineComponent,\n  VNode,\n  ref,\n  reactive,\n  provide,\n  computed,\n  onBeforeUnmount,\n  onMounted,\n  watch,\n  toRefs,\n} from 'vue';\nimport props from './props';\nimport TSliderButton from './slider-button';\nimport { SliderValue } from './type';\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport isArray from 'lodash/isArray';\n\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { useSliderMark } from './hooks/useSliderMark';\nimport { useSliderInput } from './hooks/useSliderInput';\nimport { formatSliderValue, getStopStyle } from './util/common';\nimport { sliderPropsInjectKey } from './util/constants';\nimport useVModel from '../hooks/useVModel';\nimport isNumber from 'lodash/isNumber';\n\ninterface SliderButtonType {\n  setPosition: (param: number) => {};\n}\nexport default defineComponent({\n  name: 'XSlider',\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  props: { ...props },\n\n  setup(props) {\n    const disabled = useFormDisabled();\n    const COMPONENT_NAME = usePrefixClass('slider');\n    const { STATUS } = useCommonClassName();\n    const { value, modelValue } = toRefs(props) as any;\n    const [sliderValue, setSliderValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n    const sliderContainerRef = ref<HTMLDivElement>();\n    const sliderRef = ref<HTMLDivElement>();\n    const firstButtonRef = ref<SliderButtonType>();\n    const secondButtonRef = ref<SliderButtonType>();\n\n    const firstValue = ref(formatSliderValue(sliderValue.value, 'first'));\n    const secondValue = ref(formatSliderValue(sliderValue.value, 'second'));\n    const dragging = ref(false);\n    const sliderSize = ref(1);\n\n    const vertical = computed(() => {\n      return props.layout === 'vertical';\n    });\n\n    /** ----------------- 样式计算 start ------------- */\n    const containerClass = computed(() => [`${COMPONENT_NAME.value}__container`, { 'is-vertical': vertical.value }]);\n    const sliderClass = computed(() => {\n      return [\n        `${COMPONENT_NAME.value}`,\n        {\n          'is-vertical': vertical.value,\n          [`${COMPONENT_NAME.value}--with-input`]: props.inputNumberProps,\n          [`${COMPONENT_NAME.value}--vertical`]: vertical.value,\n          [STATUS.value.disabled]: disabled.value,\n        },\n      ];\n    });\n    const sliderRailClass = computed(() => [\n      `${COMPONENT_NAME.value}__rail`,\n      { 'show-input': props.inputNumberProps, disabled: disabled.value },\n    ]);\n    const runwayStyle = computed(() => {\n      return vertical.value ? { height: '100%' } : {};\n    });\n    const barStyle = computed(() => {\n      const barStart = props.range ? `${(100 * (minValue.value - props.min)) / rangeDiff.value}%` : '0%';\n      const currentDiff = props.range ? maxValue.value - minValue.value : firstValue.value - props.min;\n      const barSize = `${(100 * currentDiff) / rangeDiff.value}%`;\n      return vertical.value\n        ? {\n            height: barSize,\n            bottom: barStart,\n          }\n        : {\n            width: barSize,\n            left: barStart,\n          };\n    });\n    /** ----------------- 样式计算 end ------------- */\n\n    // 差值范围\n    const rangeDiff = computed(() => {\n      return props.max - props.min;\n    });\n    const minValue = computed(() => {\n      return Math.min(firstValue.value, secondValue.value);\n    });\n    const maxValue = computed(() => {\n      return Math.max(firstValue.value, secondValue.value);\n    });\n    const steps = computed(() => {\n      if (!props.showStep || props.min > props.max) return [];\n      if (props.step === 0) {\n        console.warn('[Element Warn][Slider]step should not be 0.');\n        return [];\n      }\n      const stepCount = rangeDiff.value / props.step;\n      const stepWidth = (100 * props.step) / rangeDiff.value;\n      const result = [];\n      for (let i = 1; i < stepCount; i++) {\n        result.push(i * stepWidth);\n      }\n      if (props.range) {\n        const r = result.filter(\n          (step) =>\n            step < (100 * (minValue.value - props.min)) / rangeDiff.value ||\n            props.step > (100 * (maxValue.value - props.max)) / rangeDiff.value,\n        );\n        return r;\n      }\n      return result.filter((step) => step > (100 * (firstValue.value - props.min)) / rangeDiff.value);\n    });\n    const precision = computed(() => {\n      const precisions = [props.min, props.max, props.step].map((item) => {\n        const decimalArr = `${item}`.split('.');\n        return decimalArr[1] ? decimalArr[1].length : 0;\n      });\n      return Math.max.apply(null, precisions);\n    });\n    // 防止值越级\n    const setValues = (value: SliderValue): SliderValue => {\n      const [min, max] = [props.min, props.max];\n      if (min > max) {\n        console.warn('[Slider] max should be greater than min.');\n        return;\n      }\n      // 双向滑块\n      if (props.range && isArray(value)) {\n        let [maxLimit, minLimit] = [Math.min(...value), Math.max(...value)];\n        if (maxLimit > max) {\n          maxLimit = firstValue.value;\n        }\n        if (maxLimit < min) {\n          maxLimit = min;\n        }\n        if (minLimit < min) {\n          minLimit = secondValue.value;\n        }\n        if (minLimit > max) {\n          minLimit = max;\n        }\n        [firstValue.value, secondValue.value] = [maxLimit, minLimit];\n        return [maxLimit, minLimit];\n      }\n      let preValue = value as number;\n      if (preValue < min) {\n        preValue = min;\n      }\n      if (preValue > max) {\n        preValue = max;\n      }\n      return preValue;\n    };\n    // 只要触发修改就要有这个方法抛出change事件\n    const emitChange = (value: SliderValue) => {\n      let changeValue = value;\n      if (changeValue === undefined) {\n        if (props.range) {\n          changeValue = [firstValue.value, secondValue.value];\n        } else {\n          changeValue = firstValue.value;\n        }\n      }\n      const fixValue: SliderValue = setValues(changeValue);\n      setSliderValue(fixValue);\n    };\n\n    const resetSize = () => {\n      if (sliderRef.value) {\n        sliderSize.value = sliderRef.value[`client${vertical.value ? 'Height' : 'Width'}`];\n      }\n    };\n\n    // 是否以完成挂载（部分组合组件如inputNumber依赖于首次init后的状态值进行渲染）\n    const isAlreadyMount = ref(false);\n    // 初始化传入的value\n    const init = () => {\n      let valuetext: string | number;\n      if (props.range) {\n        if (isArray(sliderValue.value)) {\n          firstValue.value = Math.max(props.min || 0, sliderValue.value[0]);\n          secondValue.value = Math.min(props.max || 100, sliderValue.value[1]);\n        } else {\n          firstValue.value = props.min || 0;\n          secondValue.value = props.max || 100;\n        }\n        valuetext = `${firstValue.value}-${secondValue.value}`;\n      } else {\n        if (!isNumber(sliderValue.value)) {\n          firstValue.value = props.min;\n        } else {\n          firstValue.value = Math.min(props.max, Math.max(props.min, sliderValue.value as number));\n        }\n        valuetext = String(firstValue.value);\n      }\n      if (sliderContainerRef.value) {\n        sliderContainerRef.value.setAttribute('aria-valuetext', valuetext);\n      }\n      resetSize();\n      window.addEventListener('resize', resetSize);\n    };\n    // 相应button的位置\n    const setPosition = (percent: number): void => {\n      let targetValue = (percent * rangeDiff.value) / 100;\n      targetValue = props.min + targetValue;\n      if (!props.range && firstButtonRef.value) {\n        firstButtonRef.value.setPosition(percent);\n        return;\n      }\n      let button;\n      if (Math.abs(minValue.value - targetValue) < Math.abs(maxValue.value - targetValue)) {\n        button = firstValue.value < secondValue.value ? 'button1' : 'button2';\n      } else {\n        button = firstValue.value > secondValue.value ? 'button1' : 'button2';\n      }\n      if (button === 'button1' && firstButtonRef.value) {\n        firstButtonRef.value.setPosition(percent);\n      }\n      if (button === 'button2' && secondButtonRef.value) {\n        secondButtonRef.value.setPosition(percent);\n      }\n    };\n\n    // 全局点击\n    const onSliderClick = (event: MouseEvent): void => {\n      if (disabled.value || dragging.value) {\n        return;\n      }\n      if (!sliderRef.value) return;\n      resetSize();\n      let value = 0;\n      if (vertical.value) {\n        const sliderOffsetBottom = sliderRef.value.getBoundingClientRect().bottom;\n        value = ((sliderOffsetBottom - event.clientY) / sliderSize.value) * 100;\n        setPosition(value);\n      } else {\n        const sliderOffsetLeft = sliderRef.value.getBoundingClientRect().left;\n        value = ((event.clientX - sliderOffsetLeft) / sliderSize.value) * 100;\n        setPosition(value);\n      }\n    };\n\n    // mark 点击触发修改事件\n    const changeValue = (point: number) => {\n      if (disabled.value || dragging.value) {\n        return;\n      }\n      resetSize();\n      const value = Number((point / rangeDiff.value) * 100);\n      setPosition(value);\n      emitChange(point);\n    };\n\n    /** 副作用监听 */\n    watch(\n      () => sliderValue.value,\n      (newVal) => {\n        if (dragging.value === true) return;\n        if (isArray(newVal) && props.range) {\n          [firstValue.value, secondValue.value] = newVal;\n        } else {\n          firstValue.value = newVal as number;\n        }\n      },\n    );\n\n    watch([firstValue, secondValue, dragging], (newStates, prevStates) => {\n      if (newStates[0] !== prevStates[0]) {\n        if (props.range) {\n          emitChange([minValue.value, maxValue.value]);\n        } else {\n          emitChange(firstValue.value);\n        }\n      }\n      if (newStates[1] !== prevStates[1]) {\n        if (props.range) {\n          emitChange([minValue.value, maxValue.value]);\n        }\n      }\n      if (newStates[2] !== prevStates[2] && newStates[2] === false) {\n        init();\n      }\n    });\n\n    /** 挂载&卸载 */\n    onMounted(() => {\n      init();\n      isAlreadyMount.value = true;\n    });\n    onBeforeUnmount(() => {\n      window.removeEventListener('resize', resetSize);\n    });\n\n    /** -------------------------- 渲染相关逻辑 start --------------------------  */\n    const markConfig = computed(() => ({\n      max: props.max,\n      min: props.min,\n      marks: props.marks,\n      vertical: vertical.value,\n      prefixName: COMPONENT_NAME.value,\n    }));\n    const renderMask = useSliderMark(markConfig);\n\n    const inputConfig = computed(() => ({\n      max: props.max,\n      min: props.min,\n      inputNumberProps: props.inputNumberProps,\n      step: props.step,\n      prefixName: COMPONENT_NAME.value,\n      vertical: vertical.value,\n      disabled: disabled.value,\n    }));\n    const renderInputNumber = useSliderInput(inputConfig);\n\n    const renderInputButton = (): VNode => {\n      const firstInputVal = setValues(firstValue.value) as number;\n      const firstInputOnChange = (v: number) => {\n        firstValue.value = setValues(v) as number;\n      };\n      const secondInputVal = setValues(secondValue.value) as number;\n      const secondInputOnChange = (v: number) => {\n        secondValue.value = setValues(v) as number;\n      };\n      return (\n        <div\n          class={[\n            `${COMPONENT_NAME.value}__input-container`,\n            {\n              'is-vertical': vertical.value,\n            },\n          ]}\n        >\n          {renderInputNumber(firstInputVal, firstInputOnChange)}\n          {props.range && <div class={`${COMPONENT_NAME.value}__center-line`} />}\n          {props.range && renderInputNumber(secondInputVal, secondInputOnChange)}\n        </div>\n      );\n    };\n    /** -------------------------- 渲染相关逻辑 end --------------------------  */\n\n    /** 父子共用状态&方法 */\n    const toggleDragging = (toState: boolean) => {\n      dragging.value = toState;\n    };\n\n    const { min, max, step } = toRefs(props);\n    provide(\n      sliderPropsInjectKey,\n      reactive({\n        min,\n        max,\n        step,\n        dragging,\n        toggleDragging,\n        precision,\n        disabled,\n        resetSize,\n        sliderSize,\n      }),\n    );\n\n    return () => (\n      <div class={containerClass.value} ref={sliderContainerRef}>\n        <div\n          class={sliderClass.value}\n          role=\"slider\"\n          aria-valuemin={props.min}\n          aria-valuemax={props.max}\n          aria-orientation={props.layout}\n          aria-disabled={disabled.value}\n          tooltip-props={props.tooltipProps}\n        >\n          <div class={sliderRailClass.value} style={runwayStyle.value} onClick={onSliderClick} ref={sliderRef}>\n            <div class={`${COMPONENT_NAME.value}__track`} style={barStyle.value} />\n            <TSliderButton\n              vertical={vertical.value}\n              value={firstValue.value}\n              ref={firstButtonRef}\n              disabled={disabled.value}\n              tooltip-props={props.tooltipProps}\n              label={props.label}\n              onInput={(v: number) => {\n                firstValue.value = v;\n              }}\n            />\n            {props.range && (\n              <TSliderButton\n                vertical={vertical.value}\n                value={secondValue.value}\n                ref={secondButtonRef}\n                disabled={disabled.value}\n                label={props.label}\n                tooltip-props={props.tooltipProps}\n                onInput={(v: number) => {\n                  secondValue.value = v;\n                }}\n              />\n            )}\n            {props.showStep && (\n              <div class={`${COMPONENT_NAME.value}__stops`}>\n                {steps.value.map((item: any, key) => {\n                  if (item.position === 0 || item.position === 100) return null;\n                  return (\n                    <div class={`${COMPONENT_NAME.value}__stop`} key={key} style={getStopStyle(item, vertical.value)} />\n                  );\n                })}\n              </div>\n            )}\n            {renderMask(changeValue)}\n          </div>\n        </div>\n        {isAlreadyMount.value && props.inputNumberProps && renderInputButton()}\n      </div>\n    );\n  },\n});\n"],"names":["name","model","prop","event","props","sliderValue","setSliderValue","height","bottom","width","left","console","result","step","min","max","maxLimit","minLimit","sliderSize","isArray","firstValue","secondValue","valuetext","isNumber","resetSize","window","targetValue","firstButtonRef","secondButtonRef","value","watch","emitChange","init","onMounted","onBeforeUnmount","_createVNode","provide","dragging","toggleDragging","precision","disabled","TSliderButton"],"mappings":"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"}