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