{"version":3,"file":"useSlide.mjs","sources":["../../../../../../packages/components/slider/src/useSlide.ts"],"sourcesContent":["import { computed, inject, nextTick, ref, shallowRef } from 'vue'\nimport {\n  CHANGE_EVENT,\n  UPDATE_MODEL_EVENT,\n  INPUT_EVENT,\n} from '@element-plus/constants'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport type { CSSProperties } from 'vue'\nimport type { ButtonRefs, ISliderInitData, ISliderProps } from './slider.type'\n\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\nimport type { Nullable } from '@element-plus/utils'\n\nexport const useSlide = (\n  props: ISliderProps,\n  initData: ISliderInitData,\n  emit\n) => {\n  const elForm = inject(elFormKey, {} as ElFormContext)\n  const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n\n  const slider = shallowRef<Nullable<HTMLElement>>(null)\n\n  const firstButton = ref(null)\n\n  const secondButton = ref(null)\n\n  const buttonRefs: ButtonRefs = {\n    firstButton,\n    secondButton,\n  }\n\n  const sliderDisabled = computed(() => {\n    return props.disabled || elForm.disabled || false\n  })\n\n  const minValue = computed(() => {\n    return Math.min(initData.firstValue, initData.secondValue)\n  })\n\n  const maxValue = computed(() => {\n    return Math.max(initData.firstValue, initData.secondValue)\n  })\n\n  const barSize = computed(() => {\n    return props.range\n      ? `${\n          (100 * (maxValue.value - minValue.value)) / (props.max - props.min)\n        }%`\n      : `${\n          (100 * (initData.firstValue - props.min)) / (props.max - props.min)\n        }%`\n  })\n\n  const barStart = computed(() => {\n    return props.range\n      ? `${(100 * (minValue.value - props.min)) / (props.max - props.min)}%`\n      : '0%'\n  })\n\n  const runwayStyle = computed<CSSProperties>(() => {\n    return props.vertical ? { height: props.height } : {}\n  })\n\n  const barStyle = computed<CSSProperties>(() => {\n    return props.vertical\n      ? {\n          height: barSize.value,\n          bottom: barStart.value,\n        }\n      : {\n          width: barSize.value,\n          left: barStart.value,\n        }\n  })\n\n  const resetSize = () => {\n    if (slider.value) {\n      initData.sliderSize =\n        slider.value[`client${props.vertical ? 'Height' : 'Width'}`]\n    }\n  }\n\n  const setPosition = (percent: number) => {\n    const targetValue = props.min + (percent * (props.max - props.min)) / 100\n    if (!props.range) {\n      firstButton.value.setPosition(percent)\n      return\n    }\n    let buttonRefName: string\n    if (\n      Math.abs(minValue.value - targetValue) <\n      Math.abs(maxValue.value - targetValue)\n    ) {\n      buttonRefName =\n        initData.firstValue < initData.secondValue\n          ? 'firstButton'\n          : 'secondButton'\n    } else {\n      buttonRefName =\n        initData.firstValue > initData.secondValue\n          ? 'firstButton'\n          : 'secondButton'\n    }\n    buttonRefs[buttonRefName].value.setPosition(percent)\n  }\n\n  const setFirstValue = (firstValue: number) => {\n    initData.firstValue = firstValue\n    _emit(props.range ? [minValue.value, maxValue.value] : firstValue)\n  }\n\n  const setSecondValue = (secondValue: number) => {\n    initData.secondValue = secondValue\n\n    if (props.range) {\n      _emit([minValue.value, maxValue.value])\n    }\n  }\n\n  const _emit = (val: number | number[]) => {\n    emit(UPDATE_MODEL_EVENT, val)\n    emit(INPUT_EVENT, val)\n  }\n\n  const emitChange = async () => {\n    await nextTick()\n    emit(\n      CHANGE_EVENT,\n      props.range ? [minValue.value, maxValue.value] : props.modelValue\n    )\n  }\n\n  const onSliderClick = (event: MouseEvent) => {\n    if (sliderDisabled.value || initData.dragging) return\n    resetSize()\n    if (props.vertical) {\n      const sliderOffsetBottom = slider.value.getBoundingClientRect().bottom\n      setPosition(\n        ((sliderOffsetBottom - event.clientY) / initData.sliderSize) * 100\n      )\n    } else {\n      const sliderOffsetLeft = slider.value.getBoundingClientRect().left\n      setPosition(\n        ((event.clientX - sliderOffsetLeft) / initData.sliderSize) * 100\n      )\n    }\n    emitChange()\n  }\n\n  return {\n    elFormItem,\n    slider,\n    firstButton,\n    secondButton,\n    sliderDisabled,\n    minValue,\n    maxValue,\n    runwayStyle,\n    barStyle,\n    resetSize,\n    setPosition,\n    emitChange,\n    onSliderClick,\n    setFirstValue,\n    setSecondValue,\n  }\n}\n"],"names":[],"mappings":"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"}