{"version":3,"file":"Range.cjs","sources":["../../../../../../packages/vue-components/vc-slider/src/Range.tsx"],"sourcesContent":["// eslint-disable-next-line ts/ban-ts-comment\n// @ts-nocheck\nimport {\n  BaseMixin,\n  classNames,\n  hasProp,\n  initDefaultProps,\n  PropTypes,\n  withUndefined,\n} from '@antdv/utils';\n\nimport { defineComponent } from 'vue';\nimport createSlider from './common/createSlider';\nimport Track from './common/Track';\nimport * as utils from './utils';\n\nfunction trimAlignValue({\n  value,\n  handle,\n  bounds,\n  props,\n}: {\n  value: number;\n  handle: number;\n  bounds?: number[];\n  props: any;\n}) {\n  const { allowCross, pushable } = props;\n  const thershold = Number(pushable);\n  const valInRange = utils.ensureValueInRange(value, props);\n  let valNotConflict = valInRange;\n  if (!allowCross && handle != null && bounds !== undefined) {\n    if (handle > 0 && valInRange <= bounds[handle - 1] + thershold)\n      valNotConflict = bounds[handle - 1] + thershold;\n\n    if (handle < bounds.length - 1 && valInRange >= bounds[handle + 1] - thershold)\n      valNotConflict = bounds[handle + 1] - thershold;\n  }\n  return utils.ensureValuePrecision(valNotConflict, props);\n}\n\nconst rangeProps = {\n  defaultValue: PropTypes.arrayOf(PropTypes.number),\n  value: PropTypes.arrayOf(PropTypes.number),\n  count: Number,\n  pushable: withUndefined(PropTypes.oneOfType([PropTypes.looseBool, PropTypes.number])),\n  allowCross: { type: Boolean, default: undefined },\n  disabled: { type: Boolean, default: undefined },\n  reverse: { type: Boolean, default: undefined },\n  tabindex: PropTypes.arrayOf(PropTypes.number),\n  prefixCls: String,\n  min: Number,\n  max: Number,\n  autofocus: { type: Boolean, default: undefined },\n  ariaLabelGroupForHandles: Array,\n  ariaLabelledByGroupForHandles: Array,\n  ariaValueTextFormatterGroupForHandles: Array,\n  draggableTrack: { type: Boolean, default: undefined },\n};\nconst Range = defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'Range',\n  mixins: [BaseMixin],\n  inheritAttrs: false,\n  props: initDefaultProps(rangeProps, {\n    count: 1,\n    allowCross: true,\n    pushable: false,\n    tabindex: [],\n    draggableTrack: false,\n    ariaLabelGroupForHandles: [],\n    ariaLabelledByGroupForHandles: [],\n    ariaValueTextFormatterGroupForHandles: [],\n  }),\n  emits: ['beforeChange', 'afterChange', 'change'],\n  displayName: 'Range',\n  data() {\n    const { count, min, max } = this;\n    const initialValue = Array(...Array(count + 1)).map(() => min);\n    const defaultValue = hasProp(this, 'defaultValue') ? this.defaultValue : initialValue;\n    let { value } = this;\n    if (value === undefined)\n      value = defaultValue;\n\n    const bounds = value.map((v, i) => trimAlignValue({\n      value: v,\n      handle: i,\n      props: this.$props,\n    }),\n    );\n    const recent = bounds[0] === max ? 0 : bounds.length - 1;\n    return {\n      sHandle: null,\n      recent,\n      bounds,\n    };\n  },\n  watch: {\n    value: {\n      handler(val) {\n        const { bounds } = this;\n        this.setChangeValue(val || bounds);\n      },\n      deep: true,\n    },\n    min() {\n      const { value } = this;\n      this.setChangeValue(value || this.bounds);\n    },\n    max() {\n      const { value } = this;\n      this.setChangeValue(value || this.bounds);\n    },\n  },\n  methods: {\n    setChangeValue(value) {\n      const { bounds } = this;\n      let nextBounds = value.map((v, i) => trimAlignValue({\n        value: v,\n        handle: i,\n        bounds,\n        props: this.$props,\n      }),\n      );\n      if (bounds.length === nextBounds.length) {\n        if (nextBounds.every((v, i) => v === bounds[i]))\n          return null;\n      } else {\n        nextBounds = value.map((v, i) => trimAlignValue({\n          value: v,\n          handle: i,\n          props: this.$props,\n        }),\n        );\n      }\n\n      this.setState({ bounds: nextBounds });\n\n      if (value.some(v => utils.isValueOutOfRange(v, this.$props))) {\n        const newValues = value.map((v) => {\n          return utils.ensureValueInRange(v, this.$props);\n        });\n        this.$emit('change', newValues);\n      }\n    },\n    onChange(state) {\n      const isNotControlled = !hasProp(this, 'value');\n      if (isNotControlled) {\n        this.setState(state);\n      } else {\n        const controlledState = {};\n\n        ['sHandle', 'recent'].forEach((item) => {\n          if (state[item] !== undefined)\n            controlledState[item] = state[item];\n        });\n\n        if (Object.keys(controlledState).length)\n          this.setState(controlledState);\n      }\n\n      const data = { ...this.$data, ...state };\n      const changedValue = data.bounds;\n      this.$emit('change', changedValue);\n    },\n\n    positionGetValue(position) {\n      const bounds = this.getValue();\n      const value = this.calcValueByPos(position);\n      const closestBound = this.getClosestBound(value);\n      const index = this.getBoundNeedMoving(value, closestBound);\n      const prevValue = bounds[index];\n      if (value === prevValue) return null;\n\n      const nextBounds = [...bounds];\n      nextBounds[index] = value;\n      return nextBounds;\n    },\n    onStart(position) {\n      const { bounds } = this;\n      this.$emit('beforeChange', bounds);\n\n      const value = this.calcValueByPos(position);\n      this.startValue = value;\n      this.startPosition = position;\n\n      const closestBound = this.getClosestBound(value);\n      this.prevMovedHandleIndex = this.getBoundNeedMoving(value, closestBound);\n\n      this.setState({\n        sHandle: this.prevMovedHandleIndex,\n        recent: this.prevMovedHandleIndex,\n      });\n\n      const prevValue = bounds[this.prevMovedHandleIndex];\n      if (value === prevValue) return;\n      const nextBounds = [...bounds];\n      nextBounds[this.prevMovedHandleIndex] = value;\n      this.onChange({ bounds: nextBounds });\n    },\n    onEnd(force) {\n      const { sHandle } = this;\n      this.removeDocumentEvents();\n      if (!sHandle)\n        this.dragTrack = false;\n\n      if (sHandle !== null || force)\n        this.$emit('afterChange', this.bounds);\n\n      this.setState({ sHandle: null });\n    },\n    onMove(e, position, dragTrack, startBounds) {\n      utils.pauseEvent(e);\n      const { $data: state, $props: props } = this;\n      const maxValue = props.max || 100;\n      const minValue = props.min || 0;\n      if (dragTrack) {\n        let pos = props.vertical ? -position : position;\n        pos = props.reverse ? -pos : pos;\n        const max = maxValue - Math.max(...startBounds);\n        const min = minValue - Math.min(...startBounds);\n        const ratio = Math.min(Math.max(pos / (this.getSliderLength() / 100), min), max);\n        const nextBounds = startBounds.map(v =>\n          Math.floor(Math.max(Math.min(v + ratio, maxValue), minValue)),\n        );\n        if (state.bounds.map((c, i) => c === nextBounds[i]).some(c => !c)) {\n          this.onChange({\n            bounds: nextBounds,\n          });\n        }\n        return;\n      }\n      const { bounds, sHandle } = this;\n      const value = this.calcValueByPos(position);\n      const oldValue = bounds[sHandle];\n      if (value === oldValue) return;\n\n      this.moveTo(value);\n    },\n    onKeyboard(e) {\n      const { reverse, vertical } = this.$props;\n      const valueMutator = utils.getKeyboardValueMutator(e, vertical, reverse);\n\n      if (valueMutator) {\n        utils.pauseEvent(e);\n        const { bounds, sHandle } = this;\n        const oldValue = bounds[sHandle === null ? this.recent : sHandle];\n        const mutatedValue = valueMutator(oldValue, this.$props);\n        const value = trimAlignValue({\n          value: mutatedValue,\n          handle: sHandle,\n          bounds,\n          props: this.$props,\n        });\n        if (value === oldValue) return;\n        const isFromKeyboardEvent = true;\n        this.moveTo(value, isFromKeyboardEvent);\n      }\n    },\n    getClosestBound(value) {\n      const { bounds } = this;\n      let closestBound = 0;\n      for (let i = 1; i < bounds.length - 1; i += 1) {\n        if (value >= bounds[i])\n          closestBound = i;\n      }\n      if (Math.abs(bounds[closestBound + 1] - value) < Math.abs(bounds[closestBound] - value))\n        closestBound += 1;\n\n      return closestBound;\n    },\n    getBoundNeedMoving(value, closestBound) {\n      const { bounds, recent } = this;\n      let boundNeedMoving = closestBound;\n      const isAtTheSamePoint = bounds[closestBound + 1] === bounds[closestBound];\n\n      if (isAtTheSamePoint && bounds[recent] === bounds[closestBound])\n        boundNeedMoving = recent;\n\n      if (isAtTheSamePoint && value !== bounds[closestBound + 1])\n        boundNeedMoving = value < bounds[closestBound + 1] ? closestBound : closestBound + 1;\n\n      return boundNeedMoving;\n    },\n    getLowerBound() {\n      return this.bounds[0];\n    },\n    getUpperBound() {\n      const { bounds } = this;\n      return bounds[bounds.length - 1];\n    },\n    /**\n     * Returns an array of possible slider points, taking into account both\n     * `marks` and `step`. The result is cached.\n     */\n    getPoints() {\n      const { marks, step, min, max } = this;\n      const cache = this.internalPointsCache;\n      if (!cache || cache.marks !== marks || cache.step !== step) {\n        const pointsObject = { ...marks };\n        if (step !== null) {\n          for (let point = min; point <= max; point += step)\n            pointsObject[point] = point;\n        }\n        const points = Object.keys(pointsObject).map(Number.parseFloat);\n        points.sort((a, b) => a - b);\n        this.internalPointsCache = { marks, step, points };\n      }\n      return this.internalPointsCache.points;\n    },\n\n    moveTo(value, isFromKeyboardEvent) {\n      const nextBounds = [...this.bounds];\n      const { sHandle, recent } = this;\n      const handle = sHandle === null ? recent : sHandle;\n      nextBounds[handle] = value;\n      let nextHandle = handle;\n      if (this.$props.pushable !== false) {\n        this.pushSurroundingHandles(nextBounds, nextHandle);\n      } else if (this.$props.allowCross) {\n        nextBounds.sort((a, b) => a - b);\n        nextHandle = nextBounds.indexOf(value);\n      }\n      this.onChange({\n        recent: nextHandle,\n        sHandle: nextHandle,\n        bounds: nextBounds,\n      });\n      if (isFromKeyboardEvent) {\n        // known problem: because setState is async,\n        // so trigger focus will invoke handler's onEnd and another handler's onStart too early,\n        // cause onBeforeChange and onAfterChange receive wrong value.\n        // here use setState callback to hack，but not elegant\n        this.$emit('afterChange', nextBounds);\n        this.setState({}, () => {\n          this.handlesRefs[nextHandle].focus();\n        });\n        this.onEnd();\n      }\n    },\n\n    pushSurroundingHandles(bounds, handle) {\n      const value = bounds[handle];\n      const { pushable } = this;\n      const threshold = Number(pushable);\n\n      let direction = 0;\n      if (bounds[handle + 1] - value < threshold)\n        direction = +1; // push to right\n\n      if (value - bounds[handle - 1] < threshold)\n        direction = -1; // push to left\n\n      if (direction === 0)\n        return;\n\n      const nextHandle = handle + direction;\n      const diffToNext = direction * (bounds[nextHandle] - value);\n      if (!this.pushHandle(bounds, nextHandle, direction, threshold - diffToNext)) {\n        // revert to original value if pushing is impossible\n        bounds[handle] = bounds[nextHandle] - direction * threshold;\n      }\n    },\n    pushHandle(bounds, handle, direction, amount) {\n      const originalValue = bounds[handle];\n      let currentValue = bounds[handle];\n      while (direction * (currentValue - originalValue) < amount) {\n        if (!this.pushHandleOnePoint(bounds, handle, direction)) {\n          // can't push handle enough to create the needed `amount` gap, so we\n          // revert its position to the original value\n          bounds[handle] = originalValue;\n          return false;\n        }\n        currentValue = bounds[handle];\n      }\n      // the handle was pushed enough to create the needed `amount` gap\n      return true;\n    },\n    pushHandleOnePoint(bounds, handle, direction) {\n      const points = this.getPoints();\n      const pointIndex = points.indexOf(bounds[handle]);\n      const nextPointIndex = pointIndex + direction;\n      if (nextPointIndex >= points.length || nextPointIndex < 0) {\n        // reached the minimum or maximum available point, can't push anymore\n        return false;\n      }\n      const nextHandle = handle + direction;\n      const nextValue = points[nextPointIndex];\n      const { pushable } = this;\n      const threshold = Number(pushable);\n      const diffToNext = direction * (bounds[nextHandle] - nextValue);\n      if (!this.pushHandle(bounds, nextHandle, direction, threshold - diffToNext)) {\n        // couldn't push next handle, so we won't push this one either\n        return false;\n      }\n      // push the handle\n      bounds[handle] = nextValue;\n      return true;\n    },\n    trimAlignValue(value) {\n      const { sHandle, bounds } = this;\n      return trimAlignValue({\n        value,\n        handle: sHandle,\n        bounds,\n        props: this.$props,\n      });\n    },\n    ensureValueNotConflict(handle, val, { allowCross, pushable: thershold }) {\n      const state = this.$data || {};\n      const { bounds } = state;\n      handle = handle === undefined ? state.sHandle : handle;\n      thershold = Number(thershold);\n\n      if (!allowCross && handle != null && bounds !== undefined) {\n        if (handle > 0 && val <= bounds[handle - 1] + thershold)\n          return bounds[handle - 1] + thershold;\n\n        if (handle < bounds.length - 1 && val >= bounds[handle + 1] - thershold)\n          return bounds[handle + 1] - thershold;\n      }\n\n      return val;\n    },\n    getTrack({ bounds, prefixCls, reverse, vertical, included, offsets, trackStyle }) {\n      return bounds.slice(0, -1).map((_, index) => {\n        const i = index + 1;\n        const trackClassName = classNames({\n          [`${prefixCls}-track`]: true,\n          [`${prefixCls}-track-${i}`]: true,\n        });\n        return (\n          <Track\n            class={trackClassName}\n            vertical={vertical}\n            reverse={reverse}\n            included={included}\n            offset={offsets[i - 1]}\n            length={offsets[i] - offsets[i - 1]}\n            style={trackStyle[index]}\n            key={i}\n          />\n        );\n      });\n    },\n    renderSlider() {\n      const {\n        sHandle,\n        bounds,\n        prefixCls,\n        vertical,\n        included,\n        disabled,\n        min,\n        max,\n        reverse,\n        handle,\n        defaultHandle,\n        trackStyle,\n        handleStyle,\n        tabindex,\n        ariaLabelGroupForHandles,\n        ariaLabelledByGroupForHandles,\n        ariaValueTextFormatterGroupForHandles,\n      } = this;\n      const handleGenerator = handle || defaultHandle;\n      const offsets = bounds.map(v => this.calcOffset(v));\n\n      const handleClassName = `${prefixCls}-handle`;\n      const handles = bounds.map((v, i) => {\n        let mergedTabIndex = tabindex[i] || 0;\n        if (disabled || tabindex[i] === null)\n          mergedTabIndex = null;\n\n        const dragging = sHandle === i;\n        return handleGenerator({\n          class: classNames({\n            [handleClassName]: true,\n            [`${handleClassName}-${i + 1}`]: true,\n            [`${handleClassName}-dragging`]: dragging,\n          }),\n          prefixCls,\n          vertical,\n          dragging,\n          offset: offsets[i],\n          value: v,\n          index: i,\n          tabindex: mergedTabIndex,\n          min,\n          max,\n          reverse,\n          disabled,\n          style: handleStyle[i],\n          // @ts-expect-error\n          ref: h => this.saveHandle(i, h),\n          onFocus: this.onFocus,\n          onBlur: this.onBlur,\n          ariaLabel: ariaLabelGroupForHandles[i],\n          ariaLabelledBy: ariaLabelledByGroupForHandles[i],\n          ariaValueTextFormatter: ariaValueTextFormatterGroupForHandles[i],\n        });\n      });\n\n      return {\n        tracks: this.getTrack({\n          bounds,\n          prefixCls,\n          reverse,\n          vertical,\n          included,\n          offsets,\n          trackStyle,\n        }),\n        handles,\n      };\n    },\n  },\n});\n\nexport default createSlider(Range);\n"],"names":["trimAlignValue","value","handle","bounds","props","allowCross","pushable","thershold","Number","valInRange","utils","valNotConflict","undefined","length","rangeProps","defaultValue","PropTypes","arrayOf","number","count","withUndefined","oneOfType","looseBool","type","Boolean","default","disabled","reverse","tabindex","prefixCls","String","min","max","autofocus","ariaLabelGroupForHandles","Array","ariaLabelledByGroupForHandles","ariaValueTextFormatterGroupForHandles","draggableTrack","Range","defineComponent","compatConfig","MODE","name","mixins","BaseMixin","inheritAttrs","initDefaultProps","emits","displayName","data","initialValue","map","hasProp","v","i","$props","recent","sHandle","watch","handler","val","setChangeValue","deep","methods","nextBounds","every","setState","some","newValues","ensureValueInRange","$emit","onChange","state","isNotControlled","controlledState","forEach","item","Object","keys","$data","changedValue","positionGetValue","position","getValue","calcValueByPos","closestBound","getClosestBound","index","getBoundNeedMoving","prevValue","onStart","startValue","startPosition","prevMovedHandleIndex","onEnd","force","removeDocumentEvents","dragTrack","onMove","e","startBounds","maxValue","minValue","pos","vertical","Math","ratio","getSliderLength","floor","c","oldValue","moveTo","onKeyboard","valueMutator","mutatedValue","isFromKeyboardEvent","abs","boundNeedMoving","isAtTheSamePoint","getLowerBound","getUpperBound","getPoints","marks","step","cache","internalPointsCache","pointsObject","point","points","parseFloat","sort","a","b","nextHandle","pushSurroundingHandles","indexOf","handlesRefs","focus","threshold","direction","diffToNext","pushHandle","amount","originalValue","currentValue","pushHandleOnePoint","pointIndex","nextPointIndex","nextValue","ensureValueNotConflict","getTrack","included","offsets","trackStyle","slice","_","trackClassName","classNames","_createVNode","Track","renderSlider","defaultHandle","handleStyle","handleGenerator","calcOffset","handleClassName","handles","mergedTabIndex","dragging","class","offset","style","ref","h","saveHandle","onFocus","onBlur","ariaLabel","ariaLabelledBy","ariaValueTextFormatter","tracks","createSlider"],"mappings":"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"}