{"ast":null,"code":"import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { clamp, mergeProps, useGlobalListeners } from '@react-aria/utils';\nimport { getSliderThumbId, sliderIds } from \"./utils\";\nimport { useRef } from 'react';\nimport { setInteractionModality } from '@react-aria/interactions';\nimport { useLabel } from '@react-aria/label';\nimport { mapDomPropsToRN, isRTL } from '@react-native-aria/utils';\nimport { useMove } from \"./useMove\";\n\nfunction useSliderWeb(props, state, trackLayout) {\n  var _labelProps$id;\n\n  var _useLabel = useLabel(props),\n      labelProps = _useLabel.labelProps,\n      fieldProps = _useLabel.fieldProps;\n\n  var isVertical = props.orientation === 'vertical';\n  sliderIds.set(state, (_labelProps$id = labelProps.id) !== null && _labelProps$id !== void 0 ? _labelProps$id : fieldProps.id);\n  var direction = isRTL() ? 'rtl' : undefined;\n\n  var _useGlobalListeners = useGlobalListeners(),\n      addGlobalListener = _useGlobalListeners.addGlobalListener,\n      removeGlobalListener = _useGlobalListeners.removeGlobalListener;\n\n  var realTimeTrackDraggingIndex = useRef(null);\n  var stateRef = useRef(null);\n  stateRef.current = state;\n  var reverseX = direction === 'rtl';\n  var currentPosition = useRef(null);\n\n  var _useMove = useMove({\n    onMoveStart: function onMoveStart() {\n      currentPosition.current = null;\n    },\n    onMove: function onMove(_ref) {\n      var deltaX = _ref.deltaX,\n          deltaY = _ref.deltaY;\n      var size = isVertical ? trackLayout.height : trackLayout.width;\n\n      if (currentPosition.current == null) {\n        currentPosition.current = stateRef.current.getThumbPercent(realTimeTrackDraggingIndex.current) * size;\n      }\n\n      var delta = isVertical ? deltaY : deltaX;\n\n      if (isVertical || reverseX) {\n        delta = -delta;\n      }\n\n      currentPosition.current += delta;\n\n      if (realTimeTrackDraggingIndex.current != null) {\n        var percent = clamp(currentPosition.current / size, 0, 1);\n        stateRef.current.setThumbPercent(realTimeTrackDraggingIndex.current, percent);\n      }\n    },\n    onMoveEnd: function onMoveEnd() {\n      if (realTimeTrackDraggingIndex.current != null) {\n        stateRef.current.setThumbDragging(realTimeTrackDraggingIndex.current, false);\n        realTimeTrackDraggingIndex.current = null;\n      }\n    }\n  }),\n      moveProps = _useMove.moveProps;\n\n  var currentPointer = useRef(undefined);\n\n  var onDownTrack = function onDownTrack(e, id, clientX, clientY) {\n    if (!props.isDisabled && state.values.every(function (_, i) {\n      return !state.isThumbDragging(i);\n    })) {\n      var size = isVertical ? trackLayout.height : trackLayout.width;\n      var trackPosition = trackLayout[isVertical ? 'top' : 'left'];\n      var clickPosition = isVertical ? clientY : clientX;\n      var offset = clickPosition - trackPosition;\n      var percent = offset / size;\n\n      if (direction === 'rtl' || isVertical) {\n        percent = 1 - percent;\n      }\n\n      var value = state.getPercentValue(percent);\n      var closestThumb;\n      var split = state.values.findIndex(function (v) {\n        return value - v < 0;\n      });\n\n      if (split === 0) {\n        closestThumb = split;\n      } else if (split === -1) {\n        closestThumb = state.values.length - 1;\n      } else {\n        var lastLeft = state.values[split - 1];\n        var firstRight = state.values[split];\n\n        if (Math.abs(lastLeft - value) < Math.abs(firstRight - value)) {\n          closestThumb = split - 1;\n        } else {\n          closestThumb = split;\n        }\n      }\n\n      if (closestThumb >= 0 && state.isThumbEditable(closestThumb)) {\n        e.preventDefault();\n        realTimeTrackDraggingIndex.current = closestThumb;\n        state.setFocusedThumb(closestThumb);\n        currentPointer.current = id;\n        state.setThumbDragging(realTimeTrackDraggingIndex.current, true);\n        state.setThumbValue(closestThumb, value);\n        addGlobalListener(window, 'mouseup', onUpTrack, false);\n        addGlobalListener(window, 'touchend', onUpTrack, false);\n        addGlobalListener(window, 'pointerup', onUpTrack, false);\n      } else {\n        realTimeTrackDraggingIndex.current = null;\n      }\n    }\n  };\n\n  var onUpTrack = function onUpTrack(e) {\n    var _e$pointerId, _e$changedTouches;\n\n    var id = (_e$pointerId = e.pointerId) !== null && _e$pointerId !== void 0 ? _e$pointerId : (_e$changedTouches = e.changedTouches) === null || _e$changedTouches === void 0 ? void 0 : _e$changedTouches[0].identifier;\n\n    if (id === currentPointer.current) {\n      if (realTimeTrackDraggingIndex.current != null) {\n        state.setThumbDragging(realTimeTrackDraggingIndex.current, false);\n        realTimeTrackDraggingIndex.current = null;\n      }\n\n      removeGlobalListener(window, 'mouseup', onUpTrack, false);\n      removeGlobalListener(window, 'touchend', onUpTrack, false);\n      removeGlobalListener(window, 'pointerup', onUpTrack, false);\n    }\n  };\n\n  if (labelProps.htmlFor) {\n    delete labelProps.htmlFor;\n\n    labelProps.onClick = function () {\n      var _document$getElementB;\n\n      (_document$getElementB = document.getElementById(getSliderThumbId(state, 0))) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.focus();\n      setInteractionModality('keyboard');\n    };\n  }\n\n  return {\n    labelProps: labelProps,\n    groupProps: _objectSpread({\n      role: 'group'\n    }, fieldProps),\n    trackProps: mergeProps({\n      onMouseDown: function onMouseDown(e) {\n        if (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey) {\n          return;\n        }\n\n        onDownTrack(e, undefined, e.clientX, e.clientY);\n      },\n      onPointerDown: function onPointerDown(e) {\n        if (e.pointerType === 'mouse' && (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey)) {\n          return;\n        }\n\n        onDownTrack(e, e.pointerId, e.clientX, e.clientY);\n      },\n      onTouchStart: function onTouchStart(e) {\n        onDownTrack(e, e.changedTouches[0].identifier, e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n      }\n    }, moveProps),\n    outputProps: {\n      'htmlFor': state.values.map(function (_, index) {\n        return getSliderThumbId(state, index);\n      }).join(' '),\n      'aria-live': 'off'\n    }\n  };\n}\n\nexport var useSlider = function useSlider(props, state, ref) {\n  var _useSliderWeb = useSliderWeb(props, state, ref),\n      webGroupProps = _useSliderWeb.groupProps,\n      rest = _objectWithoutProperties(_useSliderWeb, [\"groupProps\"]);\n\n  var groupProps = mapDomPropsToRN(webGroupProps);\n  var labelProps = mapDomPropsToRN(rest.labelProps);\n  return _objectSpread(_objectSpread({\n    groupProps: groupProps\n  }, rest), {}, {\n    labelProps: labelProps\n  });\n};","map":{"version":3,"sources":["useSlider.web.ts"],"names":["fieldProps","useLabel","isVertical","props","sliderIds","labelProps","direction","isRTL","removeGlobalListener","useGlobalListeners","realTimeTrackDraggingIndex","useRef","stateRef","reverseX","currentPosition","moveProps","useMove","onMoveStart","onMove","deltaY","size","trackLayout","delta","percent","clamp","onMoveEnd","currentPointer","onDownTrack","state","trackPosition","clickPosition","offset","value","split","v","closestThumb","lastLeft","firstRight","Math","e","addGlobalListener","onUpTrack","id","getSliderThumbId","setInteractionModality","groupProps","role","trackProps","mergeProps","onMouseDown","onPointerDown","onTouchStart","outputProps","useSlider","rest","useSliderWeb","mapDomPropsToRN"],"mappings":"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","sourcesContent":["import { AriaSliderProps } from '@react-types/slider';\nimport { clamp, mergeProps, useGlobalListeners } from '@react-aria/utils';\nimport { getSliderThumbId, sliderIds } from './utils';\nimport React, { useRef } from 'react';\nimport { setInteractionModality } from '@react-aria/interactions';\nimport { SliderState } from '@react-stately/slider';\nimport { useLabel } from '@react-aria/label';\nimport { mapDomPropsToRN, isRTL } from '@react-native-aria/utils';\nimport { useMove } from './useMove';\n\ninterface SliderAria {\n  /** Props for the label element. */\n  labelProps: any;\n\n  /** Props for the root element of the slider component; groups slider inputs. */\n  groupProps: any;\n\n  /** Props for the track element. */\n  trackProps: any;\n\n  /** Props for the output element, displaying the value of the slider thumbs. */\n  outputProps: any;\n}\n\nfunction useSliderWeb(\n  props: AriaSliderProps,\n  state: SliderState,\n  trackLayout: {\n    height: number;\n    width: number;\n    top: number;\n    left: number;\n    x: number;\n    y: number;\n  }\n): SliderAria {\n  let { labelProps, fieldProps } = useLabel(props);\n\n  let isVertical = props.orientation === 'vertical';\n\n  // Attach id of the label to the state so it can be accessed by useSliderThumb.\n  sliderIds.set(state, labelProps.id ?? fieldProps.id);\n\n  const direction = isRTL() ? 'rtl' : undefined;\n\n  let { addGlobalListener, removeGlobalListener } = useGlobalListeners();\n\n  // When the user clicks or drags the track, we want the motion to set and drag the\n  // closest thumb.  Hence we also need to install useMove() on the track element.\n  // Here, we keep track of which index is the \"closest\" to the drag start point.\n  // It is set onMouseDown/onTouchDown; see trackProps below.\n  const realTimeTrackDraggingIndex = useRef<number | null>(null);\n\n  const stateRef = useRef<SliderState>(null);\n  stateRef.current = state;\n  const reverseX = direction === 'rtl';\n  const currentPosition = useRef<number>(null);\n  const { moveProps } = useMove({\n    onMoveStart() {\n      currentPosition.current = null;\n    },\n    onMove({ deltaX, deltaY }) {\n      let size = isVertical ? trackLayout.height : trackLayout.width;\n\n      if (currentPosition.current == null) {\n        currentPosition.current =\n          stateRef.current.getThumbPercent(realTimeTrackDraggingIndex.current) *\n          size;\n      }\n\n      let delta = isVertical ? deltaY : deltaX;\n      if (isVertical || reverseX) {\n        delta = -delta;\n      }\n\n      currentPosition.current += delta;\n\n      if (realTimeTrackDraggingIndex.current != null) {\n        const percent = clamp(currentPosition.current / size, 0, 1);\n        stateRef.current.setThumbPercent(\n          realTimeTrackDraggingIndex.current,\n          percent\n        );\n      }\n    },\n    onMoveEnd() {\n      if (realTimeTrackDraggingIndex.current != null) {\n        stateRef.current.setThumbDragging(\n          realTimeTrackDraggingIndex.current,\n          false\n        );\n        realTimeTrackDraggingIndex.current = null;\n      }\n    },\n  });\n\n  let currentPointer = useRef<number | null | undefined>(undefined);\n  let onDownTrack = (\n    e: React.UIEvent,\n    id: number,\n    clientX: number,\n    clientY: number\n  ) => {\n    // We only trigger track-dragging if the user clicks on the track itself and nothing is currently being dragged.\n    if (\n      !props.isDisabled &&\n      state.values.every((_, i) => !state.isThumbDragging(i))\n    ) {\n      let size = isVertical ? trackLayout.height : trackLayout.width;\n      // Find the closest thumb\n      const trackPosition = trackLayout[isVertical ? 'top' : 'left'];\n      const clickPosition = isVertical ? clientY : clientX;\n      const offset = clickPosition - trackPosition;\n      let percent = offset / size;\n      if (direction === 'rtl' || isVertical) {\n        percent = 1 - percent;\n      }\n      let value = state.getPercentValue(percent);\n\n      // to find the closet thumb we split the array based on the first thumb position to the \"right/end\" of the click.\n      let closestThumb;\n      let split = state.values.findIndex((v) => value - v < 0);\n      if (split === 0) {\n        // If the index is zero then the closetThumb is the first one\n        closestThumb = split;\n      } else if (split === -1) {\n        // If no index is found they've clicked past all the thumbs\n        closestThumb = state.values.length - 1;\n      } else {\n        let lastLeft = state.values[split - 1];\n        let firstRight = state.values[split];\n        // Pick the last left/start thumb, unless they are stacked on top of each other, then pick the right/end one\n        if (Math.abs(lastLeft - value) < Math.abs(firstRight - value)) {\n          closestThumb = split - 1;\n        } else {\n          closestThumb = split;\n        }\n      }\n\n      // Confirm that the found closest thumb is editable, not disabled, and move it\n      if (closestThumb >= 0 && state.isThumbEditable(closestThumb)) {\n        // Don't unfocus anything\n        e.preventDefault();\n\n        realTimeTrackDraggingIndex.current = closestThumb;\n        state.setFocusedThumb(closestThumb);\n        currentPointer.current = id;\n\n        state.setThumbDragging(realTimeTrackDraggingIndex.current, true);\n        state.setThumbValue(closestThumb, value);\n\n        addGlobalListener(window, 'mouseup', onUpTrack, false);\n        addGlobalListener(window, 'touchend', onUpTrack, false);\n        addGlobalListener(window, 'pointerup', onUpTrack, false);\n      } else {\n        realTimeTrackDraggingIndex.current = null;\n      }\n    }\n  };\n\n  let onUpTrack = (e) => {\n    let id = e.pointerId ?? e.changedTouches?.[0].identifier;\n    if (id === currentPointer.current) {\n      if (realTimeTrackDraggingIndex.current != null) {\n        state.setThumbDragging(realTimeTrackDraggingIndex.current, false);\n        realTimeTrackDraggingIndex.current = null;\n      }\n\n      removeGlobalListener(window, 'mouseup', onUpTrack, false);\n      removeGlobalListener(window, 'touchend', onUpTrack, false);\n      removeGlobalListener(window, 'pointerup', onUpTrack, false);\n    }\n  };\n\n  if (labelProps.htmlFor) {\n    // Ideally the `for` attribute should point to the first thumb, but VoiceOver on iOS\n    // causes this to override the `aria-labelledby` on the thumb. This causes the first\n    // thumb to only be announced as the slider label rather than its individual name as well.\n    // See https://bugs.webkit.org/show_bug.cgi?id=172464.\n    delete labelProps.htmlFor;\n    labelProps.onClick = () => {\n      // Safari does not focus <input type=\"range\"> elements when clicking on an associated <label>,\n      // so do it manually. In addition, make sure we show the focus ring.\n      document.getElementById(getSliderThumbId(state, 0))?.focus();\n      setInteractionModality('keyboard');\n    };\n  }\n\n  return {\n    labelProps,\n    // The root element of the Slider will have role=\"group\" to group together\n    // all the thumb inputs in the Slider.  The label of the Slider will\n    // be used to label the group.\n    groupProps: {\n      role: 'group',\n      ...fieldProps,\n    },\n    trackProps: mergeProps(\n      {\n        onMouseDown(e: React.MouseEvent<HTMLElement>) {\n          if (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey) {\n            return;\n          }\n          onDownTrack(e, undefined, e.clientX, e.clientY);\n        },\n        onPointerDown(e: React.PointerEvent<HTMLElement>) {\n          if (\n            e.pointerType === 'mouse' &&\n            (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey)\n          ) {\n            return;\n          }\n          onDownTrack(e, e.pointerId, e.clientX, e.clientY);\n        },\n        onTouchStart(e: React.TouchEvent<HTMLElement>) {\n          onDownTrack(\n            e,\n            e.changedTouches[0].identifier,\n            e.changedTouches[0].clientX,\n            e.changedTouches[0].clientY\n          );\n        },\n      },\n      moveProps\n    ),\n    outputProps: {\n      'htmlFor': state.values\n        .map((_, index) => getSliderThumbId(state, index))\n        .join(' '),\n      'aria-live': 'off',\n    },\n  };\n}\n\nexport const useSlider = (props: any, state: any, ref: any) => {\n  let { groupProps: webGroupProps, ...rest } = useSliderWeb(props, state, ref);\n  let groupProps = mapDomPropsToRN(webGroupProps);\n  let labelProps = mapDomPropsToRN(rest.labelProps);\n  return { groupProps, ...rest, labelProps };\n};\n"]},"metadata":{},"sourceType":"module"}