{"ast":null,"code":"import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport _react, { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { mergeProps, runAfterTransition, focusWithoutScrolling, useGlobalListeners } from \"@react-aria/utils\";\nimport _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _babelRuntimeHelpersEsmExtends from \"@babel/runtime/helpers/esm/extends\";\nvar $e17c9db826984f8ab8e5d837bf0b8$var$state = 'default';\nvar $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = '';\n\nfunction $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection() {\n  if ($e17c9db826984f8ab8e5d837bf0b8$var$state === 'default') {\n    $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = document.documentElement.style.webkitUserSelect;\n    document.documentElement.style.webkitUserSelect = 'none';\n  }\n\n  $e17c9db826984f8ab8e5d837bf0b8$var$state = 'disabled';\n}\n\nfunction $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection() {\n  if ($e17c9db826984f8ab8e5d837bf0b8$var$state !== 'disabled') {\n    return;\n  }\n\n  $e17c9db826984f8ab8e5d837bf0b8$var$state = 'restoring';\n  setTimeout(function () {\n    runAfterTransition(function () {\n      if ($e17c9db826984f8ab8e5d837bf0b8$var$state === 'restoring') {\n        if (document.documentElement.style.webkitUserSelect === 'none') {\n          document.documentElement.style.webkitUserSelect = $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect || '';\n        }\n\n        $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = '';\n        $e17c9db826984f8ab8e5d837bf0b8$var$state = 'default';\n      }\n    });\n  }, 300);\n}\n\nfunction $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(event) {\n  if (event.mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n\n  return event.detail === 0 && !event.pointerType;\n}\n\nvar $a3ff51240de6f955c79cf17a88e349$export$PressResponderContext = _react.createContext(null);\n\n$a3ff51240de6f955c79cf17a88e349$export$PressResponderContext.displayName = 'PressResponderContext';\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$usePressResponderContext(props) {\n  var context = useContext($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext);\n\n  if (context) {\n    var register = context.register,\n        contextProps = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(context, [\"register\"]);\n\n    props = mergeProps(contextProps, props);\n    register();\n  }\n\n  useEffect(function () {\n    if (context && context.ref) {\n      context.ref.current = props.ref.current;\n      return function () {\n        context.ref.current = null;\n      };\n    }\n  }, [context, props.ref]);\n  return props;\n}\n\nexport function usePress(props) {\n  var _usePressResponderCon = $ffc54430b1dbeee65879852feaaff07d$var$usePressResponderContext(props),\n      onPress = _usePressResponderCon.onPress,\n      onPressChange = _usePressResponderCon.onPressChange,\n      onPressStart = _usePressResponderCon.onPressStart,\n      onPressEnd = _usePressResponderCon.onPressEnd,\n      onPressUp = _usePressResponderCon.onPressUp,\n      isDisabled = _usePressResponderCon.isDisabled,\n      isPressedProp = _usePressResponderCon.isPressed,\n      preventFocusOnPress = _usePressResponderCon.preventFocusOnPress,\n      domProps = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_usePressResponderCon, [\"onPress\", \"onPressChange\", \"onPressStart\", \"onPressEnd\", \"onPressUp\", \"isDisabled\", \"isPressed\", \"preventFocusOnPress\", \"ref\"]);\n\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      isPressed = _useState2[0],\n      setPressed = _useState2[1];\n\n  var ref = useRef({\n    isPressed: false,\n    ignoreEmulatedMouseEvents: false,\n    ignoreClickAfterPress: false,\n    activePointerId: null,\n    target: null,\n    isOverTarget: false\n  });\n\n  var _useGlobalListeners = useGlobalListeners(),\n      addGlobalListener = _useGlobalListeners.addGlobalListener,\n      removeGlobalListener = _useGlobalListeners.removeGlobalListener;\n\n  var pressProps = useMemo(function () {\n    var state = ref.current;\n\n    var triggerPressStart = function triggerPressStart(originalEvent, pointerType) {\n      if (isDisabled) {\n        return;\n      }\n\n      if (onPressStart) {\n        onPressStart({\n          type: 'pressstart',\n          pointerType: pointerType,\n          target: originalEvent.currentTarget,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n\n      if (onPressChange) {\n        onPressChange(true);\n      }\n\n      setPressed(true);\n    };\n\n    var triggerPressEnd = function triggerPressEnd(originalEvent, pointerType, wasPressed) {\n      if (wasPressed === void 0) {\n        wasPressed = true;\n      }\n\n      if (isDisabled) {\n        return;\n      }\n\n      state.ignoreClickAfterPress = true;\n\n      if (onPressEnd) {\n        onPressEnd({\n          type: 'pressend',\n          pointerType: pointerType,\n          target: originalEvent.currentTarget,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n\n      if (onPressChange) {\n        onPressChange(false);\n      }\n\n      setPressed(false);\n\n      if (onPress && wasPressed) {\n        onPress({\n          type: 'press',\n          pointerType: pointerType,\n          target: originalEvent.currentTarget,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n    };\n\n    var triggerPressUp = function triggerPressUp(originalEvent, pointerType) {\n      if (isDisabled) {\n        return;\n      }\n\n      if (onPressUp) {\n        onPressUp({\n          type: 'pressup',\n          pointerType: pointerType,\n          target: originalEvent.currentTarget,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n    };\n\n    var pressProps = {\n      onKeyDown: function onKeyDown(e) {\n        if ($ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e.nativeEvent)) {\n          e.preventDefault();\n          e.stopPropagation();\n\n          if (!state.isPressed && !e.repeat) {\n            state.target = e.currentTarget;\n            state.isPressed = true;\n            triggerPressStart(e, 'keyboard');\n            addGlobalListener(document, 'keyup', onKeyUp, false);\n          }\n        }\n      },\n      onKeyUp: function onKeyUp(e) {\n        if ($ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e.nativeEvent) && !e.repeat) {\n          triggerPressUp($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), 'keyboard');\n        }\n      },\n      onClick: function onClick(e) {\n        if (e && e.button === 0) {\n          e.stopPropagation();\n\n          if (isDisabled) {\n            e.preventDefault();\n          }\n\n          if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e.nativeEvent)) {\n            if (!isDisabled && !preventFocusOnPress) {\n              focusWithoutScrolling(e.currentTarget);\n            }\n\n            triggerPressStart(e, 'virtual');\n            triggerPressUp(e, 'virtual');\n            triggerPressEnd(e, 'virtual');\n          }\n\n          state.ignoreEmulatedMouseEvents = false;\n          state.ignoreClickAfterPress = false;\n        }\n      }\n    };\n\n    var onKeyUp = function onKeyUp(e) {\n      if (state.isPressed && $ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e)) {\n        e.preventDefault();\n        e.stopPropagation();\n        state.isPressed = false;\n        triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), 'keyboard', e.target === state.target);\n        removeGlobalListener(document, 'keyup', onKeyUp, false);\n\n        if (e.target === state.target && $ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {\n          state.target.click();\n        }\n      }\n    };\n\n    if (typeof PointerEvent !== 'undefined') {\n      pressProps.onPointerDown = function (e) {\n        if (e.button !== 0) {\n          return;\n        }\n\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (!state.isPressed) {\n          state.isPressed = true;\n          state.isOverTarget = true;\n          state.activePointerId = e.pointerId;\n          state.target = e.currentTarget;\n\n          if (!isDisabled && !preventFocusOnPress) {\n            focusWithoutScrolling(e.currentTarget);\n          }\n\n          $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();\n          triggerPressStart(e, e.pointerType);\n          addGlobalListener(document, 'pointermove', onPointerMove, false);\n          addGlobalListener(document, 'pointerup', onPointerUp, false);\n          addGlobalListener(document, 'pointercancel', onPointerCancel, false);\n        }\n      };\n\n      pressProps.onMouseDown = function (e) {\n        if (e.button === 0) {\n          e.preventDefault();\n        }\n      };\n\n      var unbindEvents = function unbindEvents() {\n        removeGlobalListener(document, 'pointermove', onPointerMove, false);\n        removeGlobalListener(document, 'pointerup', onPointerUp, false);\n        removeGlobalListener(document, 'pointercancel', onPointerCancel, false);\n      };\n\n      pressProps.onPointerUp = function (e) {\n        if (e.button === 0 && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, e.currentTarget)) {\n          triggerPressUp(e, e.pointerType);\n        }\n      };\n\n      var onPointerMove = function onPointerMove(e) {\n        if (e.pointerId !== state.activePointerId) {\n          return;\n        }\n\n        if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {\n          if (!state.isOverTarget) {\n            state.isOverTarget = true;\n            triggerPressStart($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), e.pointerType);\n          }\n        } else if (state.isOverTarget) {\n          state.isOverTarget = false;\n          triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), e.pointerType, false);\n        }\n      };\n\n      var onPointerUp = function onPointerUp(e) {\n        if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0) {\n          if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {\n            triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), e.pointerType);\n          } else if (state.isOverTarget) {\n            triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), e.pointerType, false);\n          }\n\n          state.isPressed = false;\n          state.isOverTarget = false;\n          state.activePointerId = null;\n          unbindEvents();\n          $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n        }\n      };\n\n      var onPointerCancel = function onPointerCancel(e) {\n        if (state.isPressed) {\n          if (state.isOverTarget) {\n            triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), e.pointerType, false);\n          }\n\n          state.isPressed = false;\n          state.isOverTarget = false;\n          state.activePointerId = null;\n          unbindEvents();\n          $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n        }\n      };\n    } else {\n      pressProps.onMouseDown = function (e) {\n        if (e.button !== 0) {\n          return;\n        }\n\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (state.ignoreEmulatedMouseEvents) {\n          return;\n        }\n\n        state.isPressed = true;\n        state.isOverTarget = true;\n        state.target = e.currentTarget;\n\n        if (!isDisabled && !preventFocusOnPress) {\n          focusWithoutScrolling(e.currentTarget);\n        }\n\n        triggerPressStart(e, $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse');\n        addGlobalListener(document, 'mouseup', onMouseUp, false);\n      };\n\n      pressProps.onMouseEnter = function (e) {\n        e.stopPropagation();\n\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n          state.isOverTarget = true;\n          triggerPressStart(e, 'mouse');\n        }\n      };\n\n      pressProps.onMouseLeave = function (e) {\n        e.stopPropagation();\n\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n          state.isOverTarget = false;\n          triggerPressEnd(e, 'mouse', false);\n        }\n      };\n\n      pressProps.onMouseUp = function (e) {\n        if (!state.ignoreEmulatedMouseEvents && e.button === 0) {\n          triggerPressUp(e, $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse');\n        }\n      };\n\n      var onMouseUp = function onMouseUp(e) {\n        if (e.button !== 0) {\n          return;\n        }\n\n        state.isPressed = false;\n        removeGlobalListener(document, 'mouseup', onMouseUp, false);\n\n        if (state.ignoreEmulatedMouseEvents) {\n          state.ignoreEmulatedMouseEvents = false;\n          return;\n        }\n\n        var pointerType = $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e) ? 'virtual' : 'mouse';\n\n        if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {\n          triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), pointerType);\n        } else if (state.isOverTarget) {\n          triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), pointerType, false);\n        }\n\n        state.isOverTarget = false;\n      };\n\n      pressProps.onTouchStart = function (e) {\n        e.stopPropagation();\n        var touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchFromEvent(e.nativeEvent);\n\n        if (!touch) {\n          return;\n        }\n\n        state.activePointerId = touch.identifier;\n        state.ignoreEmulatedMouseEvents = true;\n        state.isOverTarget = true;\n        state.isPressed = true;\n        state.target = e.currentTarget;\n\n        if (!isDisabled && !preventFocusOnPress) {\n          focusWithoutScrolling(e.currentTarget);\n        }\n\n        $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();\n        triggerPressStart(e, 'touch');\n        addGlobalListener(window, 'scroll', onScroll, true);\n      };\n\n      pressProps.onTouchMove = function (e) {\n        e.stopPropagation();\n\n        if (!state.isPressed) {\n          return;\n        }\n\n        var touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(e.nativeEvent, state.activePointerId);\n\n        if (touch && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(touch, e.currentTarget)) {\n          if (!state.isOverTarget) {\n            state.isOverTarget = true;\n            triggerPressStart(e, 'touch');\n          }\n        } else if (state.isOverTarget) {\n          state.isOverTarget = false;\n          triggerPressEnd(e, 'touch', false);\n        }\n      };\n\n      pressProps.onTouchEnd = function (e) {\n        e.stopPropagation();\n\n        if (!state.isPressed) {\n          return;\n        }\n\n        var touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(e.nativeEvent, state.activePointerId);\n\n        if (touch && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(touch, e.currentTarget)) {\n          triggerPressUp(e, 'touch');\n          triggerPressEnd(e, 'touch');\n        } else if (state.isOverTarget) {\n          triggerPressEnd(e, 'touch', false);\n        }\n\n        state.isPressed = false;\n        state.activePointerId = null;\n        state.isOverTarget = false;\n        state.ignoreEmulatedMouseEvents = true;\n        $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n        removeGlobalListener(window, 'scroll', onScroll, true);\n      };\n\n      pressProps.onTouchCancel = function (e) {\n        e.stopPropagation();\n\n        if (state.isPressed) {\n          cancelTouchEvent(e, 'touch');\n        }\n      };\n\n      var onScroll = function onScroll(e) {\n        if (state.isPressed && e.target.contains(state.target)) {\n          cancelTouchEvent({\n            currentTarget: state.target,\n            shiftKey: false,\n            ctrlKey: false,\n            metaKey: false\n          }, 'touch');\n        }\n      };\n\n      var cancelTouchEvent = function cancelTouchEvent(e, pointerType) {\n        if (state.isOverTarget) {\n          triggerPressEnd(e, pointerType, false);\n        }\n\n        state.isPressed = false;\n        state.activePointerId = null;\n        state.isOverTarget = false;\n        $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n        window.removeEventListener('scroll', onScroll, true);\n      };\n    }\n\n    return pressProps;\n  }, [isDisabled, onPressStart, onPressChange, onPressEnd, onPress, onPressUp, addGlobalListener, preventFocusOnPress, removeGlobalListener]);\n  useEffect(function () {\n    return function () {\n      return $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n    };\n  }, []);\n  return {\n    isPressed: isPressedProp || isPressed,\n    pressProps: mergeProps(domProps, pressProps)\n  };\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(target) {\n  return target.tagName === 'A' && target.hasAttribute('href');\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(event) {\n  var key = event.key,\n      target = event.target;\n  var element = target;\n  var tagName = element.tagName,\n      isContentEditable = element.isContentEditable;\n  var role = element.getAttribute('role');\n  return (key === 'Enter' || key === ' ' || key === 'Spacebar') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && (!$ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && !(role === 'link' && key !== 'Enter');\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$getTouchFromEvent(event) {\n  var targetTouches = event.targetTouches;\n\n  if (targetTouches.length > 0) {\n    return targetTouches[0];\n  }\n\n  return null;\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(event, pointerId) {\n  var changedTouches = event.changedTouches;\n\n  for (var i = 0; i < changedTouches.length; i++) {\n    var touch = changedTouches[i];\n\n    if (touch.identifier === pointerId) {\n      return touch;\n    }\n  }\n\n  return null;\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$createEvent(target, e) {\n  return {\n    currentTarget: target,\n    shiftKey: e.shiftKey,\n    ctrlKey: e.ctrlKey,\n    metaKey: e.metaKey\n  };\n}\n\nfunction $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(point, target) {\n  var rect = target.getBoundingClientRect();\n  return (point.clientX || 0) >= (rect.left || 0) && (point.clientX || 0) <= (rect.right || 0) && (point.clientY || 0) >= (rect.top || 0) && (point.clientY || 0) <= (rect.bottom || 0);\n}\n\nexport var Pressable = _react.forwardRef(function (_ref, ref) {\n  var _ref2;\n\n  var children = _ref.children,\n      props = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n  var newRef = useRef();\n  ref = (_ref2 = ref) != null ? _ref2 : newRef;\n\n  var _usePress = usePress(_babelRuntimeHelpersEsmExtends({}, props, {\n    ref: ref\n  })),\n      pressProps = _usePress.pressProps;\n\n  var child = _react.Children.only(children);\n\n  return _react.cloneElement(child, _babelRuntimeHelpersEsmExtends({\n    ref: ref\n  }, mergeProps(child.props, pressProps)));\n});\nexport var PressResponder = _react.forwardRef(function (_ref, ref) {\n  var children = _ref.children,\n      props = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n  var isRegistered = useRef(false);\n  var prevContext = useContext($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext);\n  var context = mergeProps(prevContext || {}, _babelRuntimeHelpersEsmExtends({}, props, {\n    ref: ref,\n    register: function register() {\n      isRegistered.current = true;\n\n      if (prevContext) {\n        prevContext.register();\n      }\n    }\n  }));\n  useEffect(function () {\n    if (!isRegistered.current) {\n      console.warn('A PressResponder was rendered without a pressable child. ' + 'Either call the usePress hook, or wrap your DOM node with <Pressable> component.');\n    }\n  }, []);\n  return _react.createElement($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext.Provider, {\n    value: context\n  }, children);\n});\nexport function useFocus(props) {\n  if (props.isDisabled) {\n    return {\n      focusProps: {}\n    };\n  }\n\n  var onFocus, onBlur;\n\n  if (props.onFocus || props.onFocusChange) {\n    onFocus = function onFocus(e) {\n      if (e.target === e.currentTarget) {\n        if (props.onFocus) {\n          props.onFocus(e);\n        }\n\n        if (props.onFocusChange) {\n          props.onFocusChange(true);\n        }\n      }\n    };\n  }\n\n  if (props.onBlur || props.onFocusChange) {\n    onBlur = function onBlur(e) {\n      if (e.target === e.currentTarget) {\n        if (props.onBlur) {\n          props.onBlur(e);\n        }\n\n        if (props.onFocusChange) {\n          props.onFocusChange(false);\n        }\n      }\n    };\n  }\n\n  return {\n    focusProps: {\n      onFocus: onFocus,\n      onBlur: onBlur\n    }\n  };\n}\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = null;\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers = new Set();\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners = false;\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$isMac = typeof window !== 'undefined' && window.navigator != null ? /^Mac/.test(window.navigator.platform) : false;\nvar $d01f69bb2ab5f70dfd0005370a2a2cbc$var$FOCUS_VISIBLE_INPUT_KEYS = {\n  Tab: true,\n  Escape: true\n};\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers(modality, e) {\n  for (var _iterator = _createForOfIteratorHelperLoose($d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers), _step; !(_step = _iterator()).done;) {\n    var handler = _step.value;\n    handler(modality, e);\n  }\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$isValidKey(e) {\n  return !(e.metaKey || !$d01f69bb2ab5f70dfd0005370a2a2cbc$var$isMac && e.altKey || e.ctrlKey);\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent(e) {\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;\n\n  if ($d01f69bb2ab5f70dfd0005370a2a2cbc$var$isValidKey(e)) {\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'keyboard';\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('keyboard', e);\n  }\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent(e) {\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'pointer';\n\n  if (e.type === 'mousedown' || e.type === 'pointerdown') {\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('pointer', e);\n  }\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleClickEvent(e) {\n  if ($f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e)) {\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'virtual';\n  }\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleFocusEvent(e) {\n  if (e.target === window || e.target === document) {\n    return;\n  }\n\n  if (!$d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus) {\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'keyboard';\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('keyboard', e);\n  }\n\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleWindowBlur() {\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;\n}\n\nfunction $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents() {\n  if (typeof window === 'undefined' || $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners) {\n    return;\n  }\n\n  var focus = HTMLElement.prototype.focus;\n\n  HTMLElement.prototype.focus = function () {\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;\n    focus.apply(this, arguments);\n  };\n\n  document.addEventListener('keydown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent, true);\n  document.addEventListener('keyup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent, true);\n  document.addEventListener('click', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleClickEvent, true);\n  window.addEventListener('focus', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleFocusEvent, true);\n  window.addEventListener('blur', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleWindowBlur, false);\n\n  if (typeof PointerEvent !== 'undefined') {\n    document.addEventListener('pointerdown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n    document.addEventListener('pointermove', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n    document.addEventListener('pointerup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n  } else {\n    document.addEventListener('mousedown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n    document.addEventListener('mousemove', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n    document.addEventListener('mouseup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);\n  }\n\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners = true;\n}\n\nexport function isFocusVisible() {\n  return $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality !== 'pointer';\n}\nexport function getInteractionModality() {\n  return $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality;\n}\nexport function setInteractionModality(modality) {\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = modality;\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers(modality, null);\n}\nexport function useInteractionModality() {\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents();\n\n  var _useState3 = useState($d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality),\n      _useState4 = _slicedToArray(_useState3, 2),\n      modality = _useState4[0],\n      setModality = _useState4[1];\n\n  useEffect(function () {\n    var handler = function handler() {\n      setModality($d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality);\n    };\n\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.add(handler);\n    return function () {\n      $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.delete(handler);\n    };\n  }, []);\n  return modality;\n}\nexport function useFocusVisible(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents();\n  var _props = props,\n      isTextInput = _props.isTextInput,\n      autoFocus = _props.autoFocus;\n\n  var _useState5 = useState(autoFocus || isFocusVisible()),\n      _useState6 = _slicedToArray(_useState5, 2),\n      isFocusVisibleState = _useState6[0],\n      setFocusVisible = _useState6[1];\n\n  useEffect(function () {\n    var handler = function handler(modality, e) {\n      if (isTextInput && modality === 'keyboard' && e instanceof KeyboardEvent && !$d01f69bb2ab5f70dfd0005370a2a2cbc$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]) {\n        return;\n      }\n\n      setFocusVisible(isFocusVisible());\n    };\n\n    $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.add(handler);\n    return function () {\n      $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.delete(handler);\n    };\n  }, [isTextInput]);\n  return {\n    isFocusVisible: isFocusVisibleState\n  };\n}\nexport function useFocusWithin(props) {\n  var state = useRef({\n    isFocusWithin: false\n  }).current;\n\n  if (props.isDisabled) {\n    return {\n      focusWithinProps: {}\n    };\n  }\n\n  var onFocus = function onFocus(e) {\n    if (!state.isFocusWithin) {\n      if (props.onFocusWithin) {\n        props.onFocusWithin(e);\n      }\n\n      if (props.onFocusWithinChange) {\n        props.onFocusWithinChange(true);\n      }\n\n      state.isFocusWithin = true;\n    }\n  };\n\n  var onBlur = function onBlur(e) {\n    if (state.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {\n      if (props.onBlurWithin) {\n        props.onBlurWithin(e);\n      }\n\n      if (props.onFocusWithinChange) {\n        props.onFocusWithinChange(false);\n      }\n\n      state.isFocusWithin = false;\n    }\n  };\n\n  return {\n    focusWithinProps: {\n      onFocus: onFocus,\n      onBlur: onBlur\n    }\n  };\n}\nvar $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = false;\nvar $b1a784c66b81d90efa4f74e05b$var$hoverCount = 0;\n\nfunction $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents() {\n  $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = true;\n  setTimeout(function () {\n    $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = false;\n  }, 50);\n}\n\nfunction $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent(e) {\n  if (e.pointerType === 'touch') {\n    $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents();\n  }\n}\n\nfunction $b1a784c66b81d90efa4f74e05b$var$setupGlobalTouchEvents() {\n  if (typeof document === 'undefined') {\n    return;\n  }\n\n  if (typeof PointerEvent !== 'undefined') {\n    document.addEventListener('pointerup', $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent);\n  } else {\n    document.addEventListener('touchend', $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents);\n  }\n\n  $b1a784c66b81d90efa4f74e05b$var$hoverCount++;\n  return function () {\n    $b1a784c66b81d90efa4f74e05b$var$hoverCount--;\n\n    if ($b1a784c66b81d90efa4f74e05b$var$hoverCount > 0) {\n      return;\n    }\n\n    if (typeof PointerEvent !== 'undefined') {\n      document.removeEventListener('pointerup', $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent);\n    } else {\n      document.removeEventListener('touchend', $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents);\n    }\n  };\n}\n\nexport function useHover(props) {\n  var onHoverStart = props.onHoverStart,\n      onHoverChange = props.onHoverChange,\n      onHoverEnd = props.onHoverEnd,\n      isDisabled = props.isDisabled;\n\n  var _useState7 = useState(false),\n      _useState8 = _slicedToArray(_useState7, 2),\n      isHovered = _useState8[0],\n      setHovered = _useState8[1];\n\n  var state = useRef({\n    isHovered: false,\n    ignoreEmulatedMouseEvents: false\n  }).current;\n  useEffect($b1a784c66b81d90efa4f74e05b$var$setupGlobalTouchEvents, []);\n  var hoverProps = useMemo(function () {\n    var triggerHoverStart = function triggerHoverStart(event, pointerType) {\n      if (isDisabled || pointerType === 'touch' || state.isHovered) {\n        return;\n      }\n\n      state.isHovered = true;\n      var target = event.target;\n\n      if (onHoverStart) {\n        onHoverStart({\n          type: 'hoverstart',\n          target: target,\n          pointerType: pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(true);\n      }\n\n      setHovered(true);\n    };\n\n    var triggerHoverEnd = function triggerHoverEnd(event, pointerType) {\n      if (isDisabled || pointerType === 'touch' || !state.isHovered) {\n        return;\n      }\n\n      state.isHovered = false;\n      var target = event.target;\n\n      if (onHoverEnd) {\n        onHoverEnd({\n          type: 'hoverend',\n          target: target,\n          pointerType: pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(false);\n      }\n\n      setHovered(false);\n    };\n\n    var hoverProps = {};\n\n    if (typeof PointerEvent !== 'undefined') {\n      hoverProps.onPointerEnter = function (e) {\n        if ($b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') {\n          return;\n        }\n\n        triggerHoverStart(e, e.pointerType);\n      };\n\n      hoverProps.onPointerLeave = function (e) {\n        triggerHoverEnd(e, e.pointerType);\n      };\n    } else {\n      hoverProps.onTouchStart = function () {\n        state.ignoreEmulatedMouseEvents = true;\n      };\n\n      hoverProps.onMouseEnter = function (e) {\n        if (!state.ignoreEmulatedMouseEvents && !$b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents) {\n          triggerHoverStart(e, 'mouse');\n        }\n\n        state.ignoreEmulatedMouseEvents = false;\n      };\n\n      hoverProps.onMouseLeave = function (e) {\n        triggerHoverEnd(e, 'mouse');\n      };\n    }\n\n    return hoverProps;\n  }, [onHoverStart, onHoverChange, onHoverEnd, isDisabled, state]);\n  return {\n    hoverProps: hoverProps,\n    isHovered: isHovered\n  };\n}\nexport function useInteractOutside(props) {\n  var ref = props.ref,\n      onInteractOutside = props.onInteractOutside,\n      isDisabled = props.isDisabled;\n  var stateRef = useRef({\n    isPointerDown: false,\n    ignoreEmulatedMouseEvents: false\n  });\n  var state = stateRef.current;\n  useEffect(function () {\n    var onPointerDown = function onPointerDown(e) {\n      if (isDisabled) {\n        return;\n      }\n\n      if ($e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {\n        state.isPointerDown = true;\n      }\n    };\n\n    var onMouseUp = function onMouseUp(e) {\n      if (isDisabled) {\n        return;\n      }\n\n      if (state.ignoreEmulatedMouseEvents) {\n        state.ignoreEmulatedMouseEvents = false;\n      } else if (state.isPointerDown && onInteractOutside && $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {\n        state.isPointerDown = false;\n        onInteractOutside(e);\n      }\n    };\n\n    var onTouchEnd = function onTouchEnd(e) {\n      if (isDisabled) {\n        return;\n      }\n\n      state.ignoreEmulatedMouseEvents = true;\n\n      if (onInteractOutside && state.isPointerDown && $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {\n        state.isPointerDown = false;\n        onInteractOutside(e);\n      }\n    };\n\n    document.addEventListener('mousedown', onPointerDown, true);\n    document.addEventListener('mouseup', onMouseUp, true);\n    document.addEventListener('touchstart', onPointerDown, true);\n    document.addEventListener('touchend', onTouchEnd, true);\n    return function () {\n      document.removeEventListener('mousedown', onPointerDown, true);\n      document.removeEventListener('mouseup', onMouseUp, true);\n      document.removeEventListener('touchstart', onPointerDown, true);\n      document.removeEventListener('touchend', onTouchEnd, true);\n    };\n  }, [onInteractOutside, ref, state.ignoreEmulatedMouseEvents, state.isPointerDown, isDisabled]);\n}\n\nfunction $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(event, ref) {\n  if (event.button > 0) {\n    return false;\n  }\n\n  if (event.target) {\n    var ownerDocument = event.target.ownerDocument;\n\n    if (!ownerDocument || !ownerDocument.body.contains(event.target)) {\n      return false;\n    }\n  }\n\n  return ref.current && !ref.current.contains(event.target);\n}\n\nfunction $dc0d75166de722fbf58eb6c3552$export$createEventHandler(handler) {\n  if (!handler) {\n    return;\n  }\n\n  var shouldStopPropagation = true;\n  return function (e) {\n    var event = _babelRuntimeHelpersEsmExtends({}, e, {\n      preventDefault: function preventDefault() {\n        e.preventDefault();\n      },\n      isDefaultPrevented: function isDefaultPrevented() {\n        return e.isDefaultPrevented();\n      },\n      stopPropagation: function stopPropagation() {\n        console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n      },\n      continuePropagation: function continuePropagation() {\n        shouldStopPropagation = false;\n      }\n    });\n\n    handler(event);\n\n    if (shouldStopPropagation) {\n      e.stopPropagation();\n    }\n  };\n}\n\nexport function useKeyboard(props) {\n  return {\n    keyboardProps: props.isDisabled ? {} : {\n      onKeyDown: $dc0d75166de722fbf58eb6c3552$export$createEventHandler(props.onKeyDown),\n      onKeyUp: $dc0d75166de722fbf58eb6c3552$export$createEventHandler(props.onKeyUp)\n    }\n  };\n}\nexport function useMove(props) {\n  var onMoveStart = props.onMoveStart,\n      onMove = props.onMove,\n      onMoveEnd = props.onMoveEnd;\n  var state = useRef({\n    didMove: false,\n    lastPosition: null,\n    id: null\n  });\n\n  var _useGlobalListeners2 = useGlobalListeners(),\n      addGlobalListener = _useGlobalListeners2.addGlobalListener,\n      removeGlobalListener = _useGlobalListeners2.removeGlobalListener;\n\n  var moveProps = useMemo(function () {\n    var moveProps = {};\n\n    var start = function start() {\n      $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();\n      state.current.didMove = false;\n    };\n\n    var move = function move(pointerType, deltaX, deltaY) {\n      if (deltaX === 0 && deltaY === 0) {\n        return;\n      }\n\n      if (!state.current.didMove) {\n        state.current.didMove = true;\n        onMoveStart == null ? void 0 : onMoveStart({\n          type: 'movestart',\n          pointerType: pointerType\n        });\n      }\n\n      onMove({\n        type: 'move',\n        pointerType: pointerType,\n        deltaX: deltaX,\n        deltaY: deltaY\n      });\n    };\n\n    var end = function end(pointerType) {\n      $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();\n\n      if (state.current.didMove) {\n        onMoveEnd == null ? void 0 : onMoveEnd({\n          type: 'moveend',\n          pointerType: pointerType\n        });\n      }\n    };\n\n    if (typeof PointerEvent === 'undefined') {\n      var onMouseMove = function onMouseMove(e) {\n        if (e.button === 0) {\n          move('mouse', e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n        }\n      };\n\n      var onMouseUp = function onMouseUp(e) {\n        if (e.button === 0) {\n          end('mouse');\n          removeGlobalListener(window, 'mousemove', onMouseMove, false);\n          removeGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      moveProps.onMouseDown = function (e) {\n        if (e.button === 0) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n          addGlobalListener(window, 'mousemove', onMouseMove, false);\n          addGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      var onTouchMove = function onTouchMove(e) {\n        var touch = _toConsumableArray(e.changedTouches).findIndex(function (_ref) {\n          var identifier = _ref.identifier;\n          return identifier === state.current.id;\n        });\n\n        if (touch >= 0) {\n          var _e$changedTouches$tou = e.changedTouches[touch],\n              pageX = _e$changedTouches$tou.pageX,\n              pageY = _e$changedTouches$tou.pageY;\n          move('touch', pageX - state.current.lastPosition.pageX, pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {\n            pageX: pageX,\n            pageY: pageY\n          };\n        }\n      };\n\n      var onTouchEnd = function onTouchEnd(e) {\n        var touch = _toConsumableArray(e.changedTouches).findIndex(function (_ref2) {\n          var identifier = _ref2.identifier;\n          return identifier === state.current.id;\n        });\n\n        if (touch >= 0) {\n          end('touch');\n          state.current.id = null;\n          removeGlobalListener(window, 'touchmove', onTouchMove);\n          removeGlobalListener(window, 'touchend', onTouchEnd);\n          removeGlobalListener(window, 'touchcancel', onTouchEnd);\n        }\n      };\n\n      moveProps.onTouchStart = function (e) {\n        if (e.changedTouches.length === 0 || state.current.id != null) {\n          return;\n        }\n\n        var _e$changedTouches$ = e.changedTouches[0],\n            pageX = _e$changedTouches$.pageX,\n            pageY = _e$changedTouches$.pageY,\n            identifier = _e$changedTouches$.identifier;\n        start();\n        e.stopPropagation();\n        e.preventDefault();\n        state.current.lastPosition = {\n          pageX: pageX,\n          pageY: pageY\n        };\n        state.current.id = identifier;\n        addGlobalListener(window, 'touchmove', onTouchMove, false);\n        addGlobalListener(window, 'touchend', onTouchEnd, false);\n        addGlobalListener(window, 'touchcancel', onTouchEnd, false);\n      };\n    } else {\n      var onPointerMove = function onPointerMove(e) {\n        if (e.pointerId === state.current.id) {\n          var pointerType = e.pointerType || 'mouse';\n          move(pointerType, e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n        }\n      };\n\n      var onPointerUp = function onPointerUp(e) {\n        if (e.pointerId === state.current.id) {\n          var pointerType = e.pointerType || 'mouse';\n          end(pointerType);\n          state.current.id = null;\n          removeGlobalListener(window, 'pointermove', onPointerMove, false);\n          removeGlobalListener(window, 'pointerup', onPointerUp, false);\n          removeGlobalListener(window, 'pointercancel', onPointerUp, false);\n        }\n      };\n\n      moveProps.onPointerDown = function (e) {\n        if (e.button === 0 && state.current.id == null) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n          state.current.id = e.pointerId;\n          addGlobalListener(window, 'pointermove', onPointerMove, false);\n          addGlobalListener(window, 'pointerup', onPointerUp, false);\n          addGlobalListener(window, 'pointercancel', onPointerUp, false);\n        }\n      };\n    }\n\n    var triggerKeyboardMove = function triggerKeyboardMove(deltaX, deltaY) {\n      start();\n      move('keyboard', deltaX, deltaY);\n      end('keyboard');\n    };\n\n    moveProps.onKeyDown = function (e) {\n      switch (e.key) {\n        case 'Left':\n        case 'ArrowLeft':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(-1, 0);\n          break;\n\n        case 'Right':\n        case 'ArrowRight':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(1, 0);\n          break;\n\n        case 'Up':\n        case 'ArrowUp':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, -1);\n          break;\n\n        case 'Down':\n        case 'ArrowDown':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, 1);\n          break;\n      }\n    };\n\n    return moveProps;\n  }, [state, onMoveStart, onMove, onMoveEnd, addGlobalListener, removeGlobalListener]);\n  return {\n    moveProps: moveProps\n  };\n}","map":{"version":3,"sources":["packages/@react-aria/interactions/src/textSelection.ts","packages/@react-aria/interactions/src/utils.ts","packages/@react-aria/interactions/src/context.ts","packages/@react-aria/interactions/src/usePress.ts","packages/@react-aria/interactions/src/Pressable.tsx","packages/@react-aria/interactions/src/PressResponder.tsx","packages/@react-aria/interactions/src/useFocus.ts","packages/@react-aria/interactions/src/useFocusVisible.ts","packages/@react-aria/interactions/src/useFocusWithin.ts","packages/@react-aria/interactions/src/useHover.ts","packages/@react-aria/interactions/src/useInteractOutside.ts","packages/@react-aria/interactions/src/createEventHandler.ts","packages/@react-aria/interactions/src/useKeyboard.ts","packages/@react-aria/interactions/src/useMove.ts"],"names":["state","savedUserSelect","document","setTimeout","runAfterTransition","event","PressResponderContext","React","context","useContext","register","props","mergeProps","useEffect","isPressed","preventFocusOnPress","usePressResponderContext","useState","ref","useRef","ignoreEmulatedMouseEvents","ignoreClickAfterPress","activePointerId","target","isOverTarget","removeGlobalListener","useGlobalListeners","pressProps","useMemo","triggerPressStart","onPressStart","type","pointerType","originalEvent","shiftKey","metaKey","ctrlKey","onPressChange","setPressed","triggerPressEnd","wasPressed","onPressEnd","onPress","triggerPressUp","onPressUp","onKeyDown","isValidKeyboardEvent","e","addGlobalListener","onKeyUp","createEvent","onClick","focusWithoutScrolling","isHTMLAnchorLink","unbindEvents","onPointerMove","onPointerUp","onPointerCancel","onMouseUp","touch","getTouchFromEvent","getTouchById","cancelTouchEvent","onScroll","currentTarget","window","isPressedProp","element","isContentEditable","role","key","tagName","targetTouches","changedTouches","i","rect","point","Pressable","children","newRef","child","PressResponder","isRegistered","prevContext","console","focusProps","onFocus","onBlur","currentModality","changeHandlers","hasSetupGlobalListeners","hasEventBeforeFocus","isMac","FOCUS_VISIBLE_INPUT_KEYS","Tab","Escape","handler","isValidKey","triggerChangeHandlers","focus","HTMLElement","setupGlobalFocusEvents","setModality","autoFocus","isFocusVisible","isTextInput","modality","setFocusVisible","isFocusVisibleState","isFocusWithin","focusWithinProps","globalIgnoreEmulatedMouseEvents","hoverCount","setGlobalIgnoreEmulatedMouseEvents","isDisabled","isHovered","hoverProps","triggerHoverStart","onHoverStart","onHoverChange","setHovered","triggerHoverEnd","onHoverEnd","stateRef","isPointerDown","onPointerDown","isValidEvent","onInteractOutside","onTouchEnd","ownerDocument","shouldStopPropagation","preventDefault","isDefaultPrevented","stopPropagation","continuePropagation","keyboardProps","onMoveEnd","didMove","lastPosition","id","moveProps","start","move","deltaX","deltaY","onMoveStart","onMove","end","onMouseMove","pageX","pageY","onTouchMove","identifier","triggerKeyboardMove"],"mappings":";;;;;;;;;;;;;AAyBA,IAAIA,wCAAY,GAAhB,SAAA;AACA,IAAIC,kDAAe,GAAnB,EAAA;;AAEO,SAAA,0DAAA,GAAgC;AACrC,MAAID,wCAAK,KAAT,SAAA,EAAyB;AACvBC,IAAAA,kDAAe,GAAGC,QAAQ,CAARA,eAAAA,CAAAA,KAAAA,CAAlBD,gBAAAA;AACAC,IAAAA,QAAQ,CAARA,eAAAA,CAAAA,KAAAA,CAAAA,gBAAAA,GAAAA,MAAAA;AACD;;AAEDF,EAAAA,wCAAK,GAALA,UAAAA;AACD;;AAEM,SAAA,0DAAA,GAAgC;AAGrC,MAAIA,wCAAK,KAAT,UAAA,EAA0B;AACxB;AACD;;AAEDA,EAAAA,wCAAK,GAPgC,WAOrCA;AAIAG,EAAAA,UAAU,CAAC,YAAM;AAGfC,IAAAA,kBAAkB,CAAC,YAAM;AAEvB,UAAIJ,wCAAK,KAAT,WAAA,EAA2B;AACzB,YAAIE,QAAQ,CAARA,eAAAA,CAAAA,KAAAA,CAAAA,gBAAAA,KAAJ,MAAA,EAAgE;AAC9DA,UAAAA,QAAQ,CAARA,eAAAA,CAAAA,KAAAA,CAAAA,gBAAAA,GAAkDD,kDAAe,IAAjEC,EAAAA;AACD;;AAEDD,QAAAA,kDAAe,GAAfA,EAAAA;AACAD,QAAAA,wCAAK,GAALA,SAAAA;AACD;AATHI,KAAkB,CAAlBA;AAHQ,GAAA,EAAVD,GAAU,CAAVA;AAeD;;ACxCM,SAAA,uDAAA,CAAA,KAAA,EAAmE;AAExE,MAAKE,KAAD,CAAA,cAACA,KAAD,CAACA,IAAsCA,KAAK,CAAhD,SAAA,EAA4D;AAC1D,WAAA,IAAA;AACD;;AAED,SAAOA,KAAK,CAALA,MAAAA,KAAAA,CAAAA,IAAsB,CAAEA,KAAD,CAA9B,WAAA;AACD;;ACVM,IAAMC,4DAAqB,GAAGC,MAAK,CAALA,aAAAA,CAA9B,IAA8BA,CAA9B;;AACPD,4DAAqB,CAArBA,WAAAA,GAAAA,uBAAAA;;AC0CA,SAAA,8DAAA,CAAA,KAAA,EAAyE;AAEvE,MAAIE,OAAO,GAAGC,UAAU,CAAxB,4DAAwB,CAAxB;;AACA,MAAA,OAAA,EAAa;AACP,QAACC,QAAD,GAAJ,OAAI,CAACA,QAAD;AAAA,QAAJ,YAAI,GAAJ,mDAAA,CAAA,OAAA,EAAA,CAAA,UAAA,CAAA,CAAI;;AACJC,IAAAA,KAAK,GAAGC,UAAU,CAAA,YAAA,EAAlBD,KAAkB,CAAlBA;AACAD,IAAAA,QAAQ;AAN6D;;AAUvEG,EAAAA,SAAS,CAAC,YAAM;AACd,QAAIL,OAAO,IAAIA,OAAO,CAAtB,GAAA,EAA4B;AAC1BA,MAAAA,OAAO,CAAPA,GAAAA,CAAAA,OAAAA,GAAsBG,KAAK,CAALA,GAAAA,CAAtBH,OAAAA;AACA,aAAO,YAAM;AACXA,QAAAA,OAAO,CAAPA,GAAAA,CAAAA,OAAAA,GAAAA,IAAAA;AADF,OAAA;AAGD;AANM,GAAA,EAON,CAAA,OAAA,EAAUG,KAAK,CAPlBE,GAOG,CAPM,CAATA;AASA,SAAA,KAAA;AACD;;OAOM,SAAA,QAAA,CAAA,KAAA,EAAsD;AAC3D,MAAA,qBAAA,GAYIG,8DAAwB,CAZ5B,KAY4B,CAZ5B;AAAA,MAAI,OAAJ,GAAA,qBAAA,CAAI,OAAJ;AAAA,MAAI,aAAJ,GAAA,qBAAA,CAAI,aAAJ;AAAA,MAAI,YAAJ,GAAA,qBAAA,CAAI,YAAJ;AAAA,MAAI,UAAJ,GAAA,qBAAA,CAAI,UAAJ;AAAA,MAAI,SAAJ,GAAA,qBAAA,CAAI,SAAJ;AAAA,MAAI,UAAJ,GAAA,qBAAA,CAAI,UAAJ;AAAA,MAAI,aAAJ,GAAA,qBAAA,CAOEF,SAPF;AAAA,MAQEC,mBARF,GAAA,qBAAA,CAQEA,mBARF;AAAA,MAAA,QAAA,GAAA,mDAAA,CAAA,qBAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,KAAA,CAAA,CAAA;;AAD2D,kBAe7BE,QAAQ,CAAtC,KAAsC,CAfqB;AAAA;AAAA,MAevD,SAfuD;AAAA,MAevD,UAfuD;;AAgB3D,MAAIC,GAAG,GAAGC,MAAM,CAAa;AAC3BL,IAAAA,SAAS,EADkB,KAAA;AAE3BM,IAAAA,yBAAyB,EAFE,KAAA;AAG3BC,IAAAA,qBAAqB,EAHM,KAAA;AAI3BC,IAAAA,eAAe,EAJY,IAAA;AAK3BC,IAAAA,MAAM,EALqB,IAAA;AAM3BC,IAAAA,YAAY,EAAE;AANa,GAAb,CAAhB;;AAhB2D,4BAyBXE,kBAAhD,EAzB2D;AAAA,MAyBvD,iBAzBuD,uBAyBvD,iBAzBuD;AAAA,MAyBnCD,oBAzBmC,uBAyBnCA,oBAzBmC;;AA2B3D,MAAIE,UAAU,GAAGC,OAAO,CAAC,YAAM;AAC7B,QAAI5B,KAAK,GAAGkB,GAAG,CAAf,OAAA;;AACA,QAAIW,iBAAiB,GAAG,SAApBA,iBAAoB,CAAA,aAAA,EAAA,WAAA,EAAwD;AAC9E,UAAA,UAAA,EAAgB;AACd;AACD;;AAED,UAAA,YAAA,EAAkB;AAChBC,QAAAA,YAAY,CAAC;AACXC,UAAAA,IAAI,EADO,YAAA;AAEXC,UAAAA,WAFW,EAEXA,WAFW;AAGXT,UAAAA,MAAM,EAAEU,aAAa,CAHV,aAAA;AAIXC,UAAAA,QAAQ,EAAED,aAAa,CAJZ,QAAA;AAKXE,UAAAA,OAAO,EAAEF,aAAa,CALX,OAAA;AAMXG,UAAAA,OAAO,EAAEH,aAAa,CAACG;AANZ,SAAD,CAAZN;AAQD;;AAED,UAAA,aAAA,EAAmB;AACjBO,QAAAA,aAAa,CAAbA,IAAa,CAAbA;AACD;;AAEDC,MAAAA,UAAU,CAAVA,IAAU,CAAVA;AApBF,KAAA;;AAuBA,QAAIC,eAAe,GAAG,SAAlBA,eAAkB,CAAA,aAAA,EAAA,WAAA,EAAA,UAAA,EAA2E;AAAA,UAAtBC,UAAsB,KAAA,KAAA,CAAA,EAAA;AAAtBA,QAAAA,UAAsB,GAAT,IAAbA;AAAsB;;AAC/F,UAAA,UAAA,EAAgB;AACd;AACD;;AAEDxC,MAAAA,KAAK,CAALA,qBAAAA,GAAAA,IAAAA;;AAEA,UAAA,UAAA,EAAgB;AACdyC,QAAAA,UAAU,CAAC;AACTV,UAAAA,IAAI,EADK,UAAA;AAETC,UAAAA,WAFS,EAETA,WAFS;AAGTT,UAAAA,MAAM,EAAEU,aAAa,CAHZ,aAAA;AAITC,UAAAA,QAAQ,EAAED,aAAa,CAJd,QAAA;AAKTE,UAAAA,OAAO,EAAEF,aAAa,CALb,OAAA;AAMTG,UAAAA,OAAO,EAAEH,aAAa,CAACG;AANd,SAAD,CAAVK;AAQD;;AAED,UAAA,aAAA,EAAmB;AACjBJ,QAAAA,aAAa,CAAbA,KAAa,CAAbA;AACD;;AAEDC,MAAAA,UAAU,CAAVA,KAAU,CAAVA;;AAEA,UAAII,OAAO,IAAX,UAAA,EAA2B;AACzBA,QAAAA,OAAO,CAAC;AACNX,UAAAA,IAAI,EADE,OAAA;AAENC,UAAAA,WAFM,EAENA,WAFM;AAGNT,UAAAA,MAAM,EAAEU,aAAa,CAHf,aAAA;AAINC,UAAAA,QAAQ,EAAED,aAAa,CAJjB,QAAA;AAKNE,UAAAA,OAAO,EAAEF,aAAa,CALhB,OAAA;AAMNG,UAAAA,OAAO,EAAEH,aAAa,CAACG;AANjB,SAAD,CAAPM;AAQD;AAjCH,KAAA;;AAoCA,QAAIC,cAAc,GAAG,SAAjBA,cAAiB,CAAA,aAAA,EAAA,WAAA,EAAwD;AAC3E,UAAA,UAAA,EAAgB;AACd;AACD;;AAED,UAAA,SAAA,EAAe;AACbC,QAAAA,SAAS,CAAC;AACRb,UAAAA,IAAI,EADI,SAAA;AAERC,UAAAA,WAFQ,EAERA,WAFQ;AAGRT,UAAAA,MAAM,EAAEU,aAAa,CAHb,aAAA;AAIRC,UAAAA,QAAQ,EAAED,aAAa,CAJf,QAAA;AAKRE,UAAAA,OAAO,EAAEF,aAAa,CALd,OAAA;AAMRG,UAAAA,OAAO,EAAEH,aAAa,CAACG;AANf,SAAD,CAATQ;AAQD;AAdH,KAAA;;AAiBA,QAAIjB,UAAuC,GAAG;AAC5CkB,MAAAA,SAD4C,qBACnC,CADmC,EAC/B;AACX,YAAIC,0DAAoB,CAACC,CAAC,CAA1B,WAAwB,CAAxB,EAAyC;AACvCA,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAFsC,eAEvCA;;AAMA,cAAI,CAAC/C,KAAK,CAAN,SAAA,IAAoB,CAAC+C,CAAC,CAA1B,MAAA,EAAmC;AACjC/C,YAAAA,KAAK,CAALA,MAAAA,GAAe+C,CAAC,CAAhB/C,aAAAA;AACAA,YAAAA,KAAK,CAALA,SAAAA,GAAAA,IAAAA;AACA6B,YAAAA,iBAAiB,CAAA,CAAA,EAHgB,UAGhB,CAAjBA;AAIAmB,YAAAA,iBAAiB,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAjBA,KAAiB,CAAjBA;AACD;AACF;AAnByC,OAAA;AAqB5CC,MAAAA,OArB4C,mBAqBrC,CArBqC,EAqBjC;AACT,YAAIH,0DAAoB,CAACC,CAAC,CAAtBD,WAAoB,CAApBA,IAAuC,CAACC,CAAC,CAA7C,MAAA,EAAsD;AACpDJ,UAAAA,cAAc,CAACO,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAAd2C,UAAc,CAAdA;AACD;AAxByC,OAAA;AA0B5CQ,MAAAA,OA1B4C,mBA0BrC,CA1BqC,EA0BjC;AACT,YAAIJ,CAAC,IAAIA,CAAC,CAADA,MAAAA,KAAT,CAAA,EAAyB;AACvBA,UAAAA,CAAC,CAADA,eAAAA;;AACA,cAAA,UAAA,EAAgB;AACdA,YAAAA,CAAC,CAADA,cAAAA;AAHqB;;AAQvB,cAAI,CAAC/C,KAAK,CAAN,qBAAA,IAAgC,CAACA,KAAK,CAAtC,yBAAA,IAAoE,uDAAA,CAAe+C,CAAC,CAAxF,WAAwE,CAAxE,EAAuG;AAErG,gBAAI,CAAA,UAAA,IAAe,CAAnB,mBAAA,EAAyC;AACvCK,cAAAA,qBAAqB,CAACL,CAAC,CAAvBK,aAAqB,CAArBA;AACD;;AAEDvB,YAAAA,iBAAiB,CAAA,CAAA,EAAjBA,SAAiB,CAAjBA;AACAc,YAAAA,cAAc,CAAA,CAAA,EAAdA,SAAc,CAAdA;AACAJ,YAAAA,eAAe,CAAA,CAAA,EAAfA,SAAe,CAAfA;AACD;;AAEDvC,UAAAA,KAAK,CAALA,yBAAAA,GAAAA,KAAAA;AACAA,UAAAA,KAAK,CAALA,qBAAAA,GAAAA,KAAAA;AACD;AACF;AAjD2C,KAA9C;;AAoDA,QAAIiD,OAAO,GAAIF,SAAXE,OAAWF,CAAAA,CAAD,EAAsB;AAClC,UAAI/C,KAAK,CAALA,SAAAA,IAAmB8C,0DAAoB,CAA3C,CAA2C,CAA3C,EAAgD;AAC9CC,QAAAA,CAAC,CAADA,cAAAA;AACAA,QAAAA,CAAC,CAADA,eAAAA;AAEA/C,QAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAuC,QAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAAA,UAAA,EAA2C+C,CAAC,CAADA,MAAAA,KAAa/C,KAAK,CAA5EuC,MAAe,CAAfA;AACAd,QAAAA,oBAAoB,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAN0B,KAM1B,CAApBA;;AAIA,YAAIsB,CAAC,CAADA,MAAAA,KAAa/C,KAAK,CAAlB+C,MAAAA,IAA6BM,sDAAgB,CAACrD,KAAK,CAAnD+C,MAA6C,CAA7CA,IAA+D/C,KAAK,CAALA,MAAAA,CAAAA,YAAAA,CAAAA,MAAAA,MAAnE,MAAA,EAAiH;AAC/GA,UAAAA,KAAK,CAALA,MAAAA,CAAAA,KAAAA;AACD;AACF;AAdH,KAAA;;AAiBA,QAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC2B,MAAAA,UAAU,CAAVA,aAAAA,GAA4BoB,UAAAA,CAAD,EAAO;AAEhC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClB;AAH8B;;AAQhCA,QAAAA,CAAC,CAADA,cAAAA;AACAA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI,CAAC/C,KAAK,CAAV,SAAA,EAAsB;AACpBA,UAAAA,KAAK,CAALA,SAAAA,GAAAA,IAAAA;AACAA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACAA,UAAAA,KAAK,CAALA,eAAAA,GAAwB+C,CAAC,CAAzB/C,SAAAA;AACAA,UAAAA,KAAK,CAALA,MAAAA,GAAe+C,CAAC,CAAhB/C,aAAAA;;AAEA,cAAI,CAAA,UAAA,IAAe,CAAnB,mBAAA,EAAyC;AACvCoD,YAAAA,qBAAqB,CAACL,CAAC,CAAvBK,aAAqB,CAArBA;AACD;;AAED,UAAA,0DAAA;AACAvB,UAAAA,iBAAiB,CAAA,CAAA,EAAIkB,CAAC,CAAtBlB,WAAiB,CAAjBA;AAEAmB,UAAAA,iBAAiB,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAjBA,KAAiB,CAAjBA;AACD;AA1BHrB,OAAAA;;AA6BAA,MAAAA,UAAU,CAAVA,WAAAA,GAA0BoB,UAAAA,CAAD,EAAO;AAC9B,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAIlBA,UAAAA,CAAC,CAADA,cAAAA;AACD;AANHpB,OAAAA;;AASA,UAAI2B,YAAY,GAAG,SAAfA,YAAe,GAAM;AACvB7B,QAAAA,oBAAoB,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAApBA,KAAoB,CAApBA;AACAA,QAAAA,oBAAoB,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAApBA,KAAoB,CAApBA;AACAA,QAAAA,oBAAoB,CAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAApBA,KAAoB,CAApBA;AAHF,OAAA;;AAMAE,MAAAA,UAAU,CAAVA,WAAAA,GAA0BoB,UAAAA,CAAD,EAAO;AAI9B,YAAIA,CAAC,CAADA,MAAAA,KAAAA,CAAAA,IAAkBvB,kDAAY,CAAA,CAAA,EAAIuB,CAAC,CAAvC,aAAkC,CAAlC,EAAwD;AACtDJ,UAAAA,cAAc,CAAA,CAAA,EAAII,CAAC,CAAnBJ,WAAc,CAAdA;AACD;AAnDoC,OA6CvChB;;AAYA,UAAI4B,aAAa,GAAIR,SAAjBQ,aAAiBR,CAAAA,CAAD,EAAqB;AACvC,YAAIA,CAAC,CAADA,SAAAA,KAAgB/C,KAAK,CAAzB,eAAA,EAA2C;AACzC;AACD;;AAED,YAAIwB,kDAAY,CAAA,CAAA,EAAIxB,KAAK,CAAzB,MAAgB,CAAhB,EAAmC;AACjC,cAAI,CAACA,KAAK,CAAV,YAAA,EAAyB;AACvBA,YAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACA6B,YAAAA,iBAAiB,CAACqB,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAA+B+C,CAAC,CAAjDlB,WAAiB,CAAjBA;AACD;AAJH,SAAA,MAKO,IAAI7B,KAAK,CAAT,YAAA,EAAwB;AAC7BA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAuC,UAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAA+B+C,CAAC,CAAhC,WAAA,EAAfR,KAAe,CAAfA;AACD;AAbH,OAAA;;AAgBA,UAAIiB,WAAW,GAAIT,SAAfS,WAAeT,CAAAA,CAAD,EAAqB;AACrC,YAAIA,CAAC,CAADA,SAAAA,KAAgB/C,KAAK,CAArB+C,eAAAA,IAAyC/C,KAAK,CAA9C+C,SAAAA,IAA4DA,CAAC,CAADA,MAAAA,KAAhE,CAAA,EAAgF;AAC9E,cAAIvB,kDAAY,CAAA,CAAA,EAAIxB,KAAK,CAAzB,MAAgB,CAAhB,EAAmC;AACjCuC,YAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAA+B+C,CAAC,CAA/CR,WAAe,CAAfA;AADF,WAAA,MAEO,IAAIvC,KAAK,CAAT,YAAA,EAAwB;AAC7BuC,YAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAA+B+C,CAAC,CAAhC,WAAA,EAAfR,KAAe,CAAfA;AACD;;AAEDvC,UAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAA,UAAAA,KAAK,CAALA,eAAAA,GAAAA,IAAAA;AACAsD,UAAAA,YAAY;AACZ,UAAA,0DAAA;AACD;AAbH,OAAA;;AAgBA,UAAIG,eAAe,GAAIV,SAAnBU,eAAmBV,CAAAA,CAAD,EAAqB;AACzC,YAAI/C,KAAK,CAAT,SAAA,EAAqB;AACnB,cAAIA,KAAK,CAAT,YAAA,EAAwB;AACtBuC,YAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAA+B+C,CAAC,CAAhC,WAAA,EAAfR,KAAe,CAAfA;AACD;;AACDvC,UAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAA,UAAAA,KAAK,CAALA,eAAAA,GAAAA,IAAAA;AACAsD,UAAAA,YAAY;AACZ,UAAA,0DAAA;AACD;AAVH,OAAA;AAzFF,KAAA,MAqGO;AACL3B,MAAAA,UAAU,CAAVA,WAAAA,GAA0BoB,UAAAA,CAAD,EAAO;AAE9B,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClB;AAH4B;;AAQ9BA,QAAAA,CAAC,CAADA,cAAAA;AACAA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI/C,KAAK,CAAT,yBAAA,EAAqC;AACnC;AACD;;AAEDA,QAAAA,KAAK,CAALA,SAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,MAAAA,GAAe+C,CAAC,CAAhB/C,aAAAA;;AAEA,YAAI,CAAA,UAAA,IAAe,CAAnB,mBAAA,EAAyC;AACvCoD,UAAAA,qBAAqB,CAACL,CAAC,CAAvBK,aAAqB,CAArBA;AACD;;AAEDvB,QAAAA,iBAAiB,CAAA,CAAA,EAAI,uDAAA,CAAekB,CAAC,CAAhB,WAAA,CAAA,GAAA,SAAA,GAArBlB,OAAiB,CAAjBA;AAEAmB,QAAAA,iBAAiB,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAjBA,KAAiB,CAAjBA;AAxBFrB,OAAAA;;AA2BAA,MAAAA,UAAU,CAAVA,YAAAA,GAA2BoB,UAAAA,CAAD,EAAO;AAC/BA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI/C,KAAK,CAALA,SAAAA,IAAmB,CAACA,KAAK,CAA7B,yBAAA,EAAyD;AACvDA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACA6B,UAAAA,iBAAiB,CAAA,CAAA,EAAjBA,OAAiB,CAAjBA;AACD;AALHF,OAAAA;;AAQAA,MAAAA,UAAU,CAAVA,YAAAA,GAA2BoB,UAAAA,CAAD,EAAO;AAC/BA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI/C,KAAK,CAALA,SAAAA,IAAmB,CAACA,KAAK,CAA7B,yBAAA,EAAyD;AACvDA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAuC,UAAAA,eAAe,CAAA,CAAA,EAAA,OAAA,EAAfA,KAAe,CAAfA;AACD;AALHZ,OAAAA;;AAQAA,MAAAA,UAAU,CAAVA,SAAAA,GAAwBoB,UAAAA,CAAD,EAAO;AAC5B,YAAI,CAAC/C,KAAK,CAAN,yBAAA,IAAoC+C,CAAC,CAADA,MAAAA,KAAxC,CAAA,EAAwD;AACtDJ,UAAAA,cAAc,CAAA,CAAA,EAAI,uDAAA,CAAeI,CAAC,CAAhB,WAAA,CAAA,GAAA,SAAA,GAAlBJ,OAAc,CAAdA;AACD;AAHHhB,OAAAA;;AAMA,UAAI+B,SAAS,GAAIX,SAAbW,SAAaX,CAAAA,CAAD,EAAmB;AAEjC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClB;AACD;;AAED/C,QAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAyB,QAAAA,oBAAoB,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAApBA,KAAoB,CAApBA;;AAEA,YAAIzB,KAAK,CAAT,yBAAA,EAAqC;AACnCA,UAAAA,KAAK,CAALA,yBAAAA,GAAAA,KAAAA;AACA;AACD;;AAED,YAAIgC,WAAwB,GAAG,uDAAA,CAAA,CAAA,CAAA,GAAA,SAAA,GAA/B,OAAA;;AACA,YAAIR,kDAAY,CAAA,CAAA,EAAIxB,KAAK,CAAzB,MAAgB,CAAhB,EAAmC;AACjCuC,UAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAAfuC,WAAe,CAAfA;AADF,SAAA,MAEO,IAAIvC,KAAK,CAAT,YAAA,EAAwB;AAC7BuC,UAAAA,eAAe,CAACW,iDAAW,CAAClD,KAAK,CAAN,MAAA,EAAZ,CAAY,CAAZ,EAAA,WAAA,EAAfuC,KAAe,CAAfA;AACD;;AAEDvC,QAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AArBF,OAAA;;AAwBA2B,MAAAA,UAAU,CAAVA,YAAAA,GAA2BoB,UAAAA,CAAD,EAAO;AAC/BA,QAAAA,CAAC,CAADA,eAAAA;AACA,YAAIY,KAAK,GAAGC,uDAAiB,CAACb,CAAC,CAA/B,WAA6B,CAA7B;;AACA,YAAI,CAAJ,KAAA,EAAY;AACV;AACD;;AACD/C,QAAAA,KAAK,CAALA,eAAAA,GAAwB2D,KAAK,CAA7B3D,UAAAA;AACAA,QAAAA,KAAK,CAALA,yBAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,SAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,MAAAA,GAAe+C,CAAC,CAVe,aAU/B/C;;AAIA,YAAI,CAAA,UAAA,IAAe,CAAnB,mBAAA,EAAyC;AACvCoD,UAAAA,qBAAqB,CAACL,CAAC,CAAvBK,aAAqB,CAArBA;AACD;;AAED,QAAA,0DAAA;AACAvB,QAAAA,iBAAiB,CAAA,CAAA,EAAjBA,OAAiB,CAAjBA;AAEAmB,QAAAA,iBAAiB,CAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAjBA,IAAiB,CAAjBA;AArBFrB,OAAAA;;AAwBAA,MAAAA,UAAU,CAAVA,WAAAA,GAA0BoB,UAAAA,CAAD,EAAO;AAC9BA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI,CAAC/C,KAAK,CAAV,SAAA,EAAsB;AACpB;AACD;;AAED,YAAI2D,KAAK,GAAGE,kDAAY,CAACd,CAAC,CAAF,WAAA,EAAgB/C,KAAK,CAA7C,eAAwB,CAAxB;;AACA,YAAI2D,KAAK,IAAInC,kDAAY,CAAA,KAAA,EAAQuB,CAAC,CAAlC,aAAyB,CAAzB,EAAmD;AACjD,cAAI,CAAC/C,KAAK,CAAV,YAAA,EAAyB;AACvBA,YAAAA,KAAK,CAALA,YAAAA,GAAAA,IAAAA;AACA6B,YAAAA,iBAAiB,CAAA,CAAA,EAAjBA,OAAiB,CAAjBA;AACD;AAJH,SAAA,MAKO,IAAI7B,KAAK,CAAT,YAAA,EAAwB;AAC7BA,UAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAuC,UAAAA,eAAe,CAAA,CAAA,EAAA,OAAA,EAAfA,KAAe,CAAfA;AACD;AAfHZ,OAAAA;;AAkBAA,MAAAA,UAAU,CAAVA,UAAAA,GAAyBoB,UAAAA,CAAD,EAAO;AAC7BA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI,CAAC/C,KAAK,CAAV,SAAA,EAAsB;AACpB;AACD;;AAED,YAAI2D,KAAK,GAAGE,kDAAY,CAACd,CAAC,CAAF,WAAA,EAAgB/C,KAAK,CAA7C,eAAwB,CAAxB;;AACA,YAAI2D,KAAK,IAAInC,kDAAY,CAAA,KAAA,EAAQuB,CAAC,CAAlC,aAAyB,CAAzB,EAAmD;AACjDJ,UAAAA,cAAc,CAAA,CAAA,EAAdA,OAAc,CAAdA;AACAJ,UAAAA,eAAe,CAAA,CAAA,EAAfA,OAAe,CAAfA;AAFF,SAAA,MAGO,IAAIvC,KAAK,CAAT,YAAA,EAAwB;AAC7BuC,UAAAA,eAAe,CAAA,CAAA,EAAA,OAAA,EAAfA,KAAe,CAAfA;AACD;;AAEDvC,QAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAA,QAAAA,KAAK,CAALA,eAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACAA,QAAAA,KAAK,CAALA,yBAAAA,GAAAA,IAAAA;AACA,QAAA,0DAAA;AACAyB,QAAAA,oBAAoB,CAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAApBA,IAAoB,CAApBA;AAnBFE,OAAAA;;AAsBAA,MAAAA,UAAU,CAAVA,aAAAA,GAA4BoB,UAAAA,CAAD,EAAO;AAChCA,QAAAA,CAAC,CAADA,eAAAA;;AACA,YAAI/C,KAAK,CAAT,SAAA,EAAqB;AACnB8D,UAAAA,gBAAgB,CAAA,CAAA,EAAhBA,OAAgB,CAAhBA;AACD;AAJHnC,OAAAA;;AAOA,UAAIoC,QAAQ,GAAIhB,SAAZgB,QAAYhB,CAAAA,CAAD,EAAc;AAC3B,YAAI/C,KAAK,CAALA,SAAAA,IAAoB+C,CAAC,CAAF,MAACA,CAAD,QAACA,CAAkC/C,KAAK,CAA/D,MAAwB+C,CAAxB,EAAyE;AACvEe,UAAAA,gBAAgB,CAAC;AACfE,YAAAA,aAAa,EAAEhE,KAAK,CADL,MAAA;AAEfkC,YAAAA,QAAQ,EAFO,KAAA;AAGfE,YAAAA,OAAO,EAHQ,KAAA;AAIfD,YAAAA,OAAO,EAAE;AAJM,WAAD,EAAhB2B,OAAgB,CAAhBA;AAMD;AARH,OAAA;;AAWA,UAAIA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAA,CAAA,EAAA,WAAA,EAA4C;AACjE,YAAI9D,KAAK,CAAT,YAAA,EAAwB;AACtBuC,UAAAA,eAAe,CAAA,CAAA,EAAA,WAAA,EAAfA,KAAe,CAAfA;AACD;;AAEDvC,QAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACAA,QAAAA,KAAK,CAALA,eAAAA,GAAAA,IAAAA;AACAA,QAAAA,KAAK,CAALA,YAAAA,GAAAA,KAAAA;AACA,QAAA,0DAAA;AACAiE,QAAAA,MAAM,CAANA,mBAAAA,CAAAA,QAAAA,EAAAA,QAAAA,EAAAA,IAAAA;AATF,OAAA;AAWD;;AAED,WAAA,UAAA;AAjasB,GAAA,EAkarB,CAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,mBAAA,EA7bwD,oBA6bxD,CAlaqB,CAAxB;AAsaApD,EAAAA,SAAS,CAAC,YAAM;AACd,WAAO;AAAA,aAAM,0DAAb,EAAO;AAAA,KAAP;AADO,GAAA,EAATA,EAAS,CAATA;AAIA,SAAO;AACLC,IAAAA,SAAS,EAAEoD,aAAa,IADnB,SAAA;AAELvC,IAAAA,UAAU,EAAEf,UAAU,CAAA,QAAA,EAAA,UAAA;AAFjB,GAAP;AAID;;AAED,SAAA,sDAAA,CAAA,MAAA,EAAwD;AACtD,SAAOW,MAAM,CAANA,OAAAA,KAAAA,GAAAA,IAA0BA,MAAM,CAANA,YAAAA,CAAjC,MAAiCA,CAAjC;AACD;;AAED,SAAA,0DAAA,CAAA,KAAA,EAA6D;AAAA,MACrD,GADqD,GAC3D,KAD2D,CACrD,GADqD;AAAA,MAC/CA,MAD+C,GAC3D,KAD2D,CAC/CA,MAD+C;AAE3D,MAAM4C,OAAO,GAAb,MAAA;AAF2D,MAGrD,OAHqD,GAG3D,OAH2D,CAGrD,OAHqD;AAAA,MAG3CC,iBAH2C,GAG3D,OAH2D,CAG3CA,iBAH2C;AAI3D,MAAMC,IAAI,GAAGF,OAAO,CAAPA,YAAAA,CAJ8C,MAI9CA,CAAb;AAGA,SACE,CAACG,GAAG,KAAHA,OAAAA,IAAmBA,GAAG,KAAtBA,GAAAA,IAAkCA,GAAG,KAAtC,UAAA,KACCC,OAAO,KAAPA,OADD,IAEEA,OAAO,KADRA,UADD,IAGEH,iBAAiB,KAHnB,IAAA,KAMC,CAACf,sDAAgB,CAAjB,OAAiB,CAAjB,IAA+BgB,IAAI,KAAJA,QAAAA,IAAqBC,GAAG,KANxD,OAAA,KAQA,EAAED,IAAI,KAAJA,MAAAA,IAAmBC,GAAG,KAT1B,OASE,CATF;AAWD;;AAED,SAAA,uDAAA,CAAA,KAAA,EAA4D;AAAA,MACnDE,aADmD,GAC1D,KAD0D,CACnDA,aADmD;;AAE1D,MAAIA,aAAa,CAAbA,MAAAA,GAAJ,CAAA,EAA8B;AAC5B,WAAOA,aAAa,CAApB,CAAoB,CAApB;AACD;;AACD,SAAA,IAAA;AACD;;AAED,SAAA,kDAAA,CAAA,KAAA,EAAA,SAAA,EAGgB;AACd,MAAMC,cAAc,GAAGpE,KAAK,CAA5B,cAAA;;AACA,OAAK,IAAIqE,CAAC,GAAV,CAAA,EAAgBA,CAAC,GAAGD,cAAc,CAAlC,MAAA,EAA2CC,CAA3C,EAAA,EAAgD;AAC9C,QAAMf,KAAK,GAAGc,cAAc,CAA5B,CAA4B,CAA5B;;AACA,QAAId,KAAK,CAALA,UAAAA,KAAJ,SAAA,EAAoC;AAClC,aAAA,KAAA;AACD;AACF;;AACD,SAAA,IAAA;AACD;;AAED,SAAA,iDAAA,CAAA,MAAA,EAAA,CAAA,EAAmE;AACjE,SAAO;AACLK,IAAAA,aAAa,EADR,MAAA;AAEL9B,IAAAA,QAAQ,EAAEa,CAAC,CAFN,QAAA;AAGLX,IAAAA,OAAO,EAAEW,CAAC,CAHL,OAAA;AAILZ,IAAAA,OAAO,EAAEY,CAAC,CAACZ;AAJN,GAAP;AAMD;;AAOD,SAAA,kDAAA,CAAA,KAAA,EAAA,MAAA,EAA8D;AAC5D,MAAIwC,IAAI,GAAGpD,MAAM,CAAjB,qBAAWA,EAAX;AACA,SAAO,CAACqD,KAAK,CAALA,OAAAA,IAAD,CAAA,MAAyBD,IAAI,CAAJA,IAAAA,IAAzB,CAAA,KACL,CAACC,KAAK,CAALA,OAAAA,IAAD,CAAA,MAAyBD,IAAI,CAAJA,KAAAA,IADpB,CACL,CADK,IAEL,CAACC,KAAK,CAALA,OAAAA,IAAD,CAAA,MAAyBD,IAAI,CAAJA,GAAAA,IAFpB,CAEL,CAFK,IAGL,CAACC,KAAK,CAALA,OAAAA,IAAD,CAAA,MAAyBD,IAAI,CAAJA,MAAAA,IAH3B,CAGE,CAHF;AAID;;OCnlBM,IAAME,SAAS,GAAG,MAAK,CAAL,UAAA,CAAiB,UAAA,IAAA,EAAA,GAAA,EAAuE;AAAA,MAAA,KAAA;;AAAtE,MAACC,QAAD,GAAsE,IAAtE,CAACA,QAAD;AAAA,MAAcnE,KAAd,GAAsE,mDAAA,CAAA,IAAA,EAAA,CAAA,UAAA,CAAA,CAAtE;;AACzC,MAAIoE,MAAM,GAAG5D,MAAb,EAAA;AACAD,EAAAA,GAAG,GAAA,CAAA,KAAA,GAAA,GAAA,KAAA,IAAA,GAAA,KAAA,GAAHA,MAAAA;;AAF+G,kBAG5F,QAAA,CAAA,8BAAA,CAAA,EAAA,EAAA,KAAA,EAAA;AAAoBA,IAAAA,GAAAA,EAAAA;AAApB,GAAA,CAAA,CAH4F;AAAA,MAG1GS,UAH0G,aAG1GA,UAH0G;;AAI/G,MAAIqD,KAAK,GAAGzE,MAAK,CAALA,QAAAA,CAAAA,IAAAA,CAAZ,QAAYA,CAAZ;;AACA,SAAO,MAAK,CAAL,YAAA,CAAA,KAAA,EAAA,8BAAA,CAAA;AAGJW,IAAAA,GAAAA,EAAAA;AAHI,GAAA,EAGIN,UAAU,CAACoE,KAAK,CAAN,KAAA,EAHrB,UAGqB,CAHd,CAAA,CAAP;AALK,CAAkB,CAAlB;OCCA,IAAMC,cAAc,GAAG,MAAK,CAAL,UAAA,CAAiB,UAAA,IAAA,EAAA,GAAA,EAA4E;AAA3E,MAACH,QAAD,GAA2E,IAA3E,CAACA,QAAD;AAAA,MAAcnE,KAAd,GAA2E,mDAAA,CAAA,IAAA,EAAA,CAAA,UAAA,CAAA,CAA3E;;AAC9C,MAAIuE,YAAY,GAAG/D,MAAM,CAAzB,KAAyB,CAAzB;AACA,MAAIgE,WAAW,GAAG1E,UAAU,CAA5B,4DAA4B,CAA5B;AACA,MAAID,OAAO,GAAGI,UAAU,CAACuE,WAAW,IAAZ,EAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,KAAA,EAAA;AAEtBjE,IAAAA,GAFsB,EAEtBA,GAFsB;AAGtBR,IAAAA,QAHsB,sBAGX;AACTwE,MAAAA,YAAY,CAAZA,OAAAA,GAAAA,IAAAA;;AACA,UAAA,WAAA,EAAiB;AACfC,QAAAA,WAAW,CAAXA,QAAAA;AACD;AACF;AARqB,GAAA,CAAA,CAAxB;AAWAtE,EAAAA,SAAS,CAAC,YAAM;AACd,QAAI,CAACqE,YAAY,CAAjB,OAAA,EAA2B;AACzBE,MAAAA,OAAO,CAAPA,IAAAA,CACE,8DADFA,kFAAAA;AAID;AANM,GAAA,EAATvE,EAAS,CAATA;AASA,SACE,MAAA,CAAA,aAAA,CAAA,4DAAA,CAAA,QAAA,EAAA;AAAgC,IAAA,KAAK,EAAEL;AAAvC,GAAA,EADF,QACE,CADF;AAvBK,CAAuB,CAAvB;OCaA,SAAA,QAAA,CAAA,KAAA,EAAkD;AACvD,MAAIG,KAAK,CAAT,UAAA,EAAsB;AACpB,WAAO;AAAC0E,MAAAA,UAAU,EAAE;AAAb,KAAP;AACD;;AAED,MAAA,OAAA,EAAA,MAAA;;AACA,MAAI1E,KAAK,CAALA,OAAAA,IAAiBA,KAAK,CAA1B,aAAA,EAA0C;AACxC2E,IAAAA,OAAO,GAAIvC,iBAAAA,CAAD,EAAmB;AAC3B,UAAIA,CAAC,CAADA,MAAAA,KAAaA,CAAC,CAAlB,aAAA,EAAkC;AAChC,YAAIpC,KAAK,CAAT,OAAA,EAAmB;AACjBA,UAAAA,KAAK,CAALA,OAAAA,CAAAA,CAAAA;AACD;;AAED,YAAIA,KAAK,CAAT,aAAA,EAAyB;AACvBA,UAAAA,KAAK,CAALA,aAAAA,CAAAA,IAAAA;AACD;AACF;AATH2E,KAAAA;AAWD;;AAED,MAAI3E,KAAK,CAALA,MAAAA,IAAgBA,KAAK,CAAzB,aAAA,EAAyC;AACvC4E,IAAAA,MAAM,GAAIxC,gBAAAA,CAAD,EAAmB;AAC1B,UAAIA,CAAC,CAADA,MAAAA,KAAaA,CAAC,CAAlB,aAAA,EAAkC;AAChC,YAAIpC,KAAK,CAAT,MAAA,EAAkB;AAChBA,UAAAA,KAAK,CAALA,MAAAA,CAAAA,CAAAA;AACD;;AAED,YAAIA,KAAK,CAAT,aAAA,EAAyB;AACvBA,UAAAA,KAAK,CAALA,aAAAA,CAAAA,KAAAA;AACD;AACF;AATH4E,KAAAA;AAWD;;AAED,SAAO;AACLF,IAAAA,UAAU,EAAE;AACVC,MAAAA,OADU,EACVA,OADU;AAEVC,MAAAA,MAAAA,EAAAA;AAFU;AADP,GAAP;AAMD;ACvCD,IAAIC,qDAAe,GAAnB,IAAA;AACA,IAAIC,oDAAc,GAAG,IAArB,GAAqB,EAArB;AACA,IAAIC,6DAAuB,GAA3B,KAAA;AACA,IAAIC,yDAAmB,GAAvB,KAAA;AAEA,IAAMC,2CAAK,GACT,OAAA,MAAA,KAAA,WAAA,IAAiC3B,MAAM,CAANA,SAAAA,IAAjC,IAAA,GACI,OAAA,IAAA,CAAYA,MAAM,CAANA,SAAAA,CADhB,QACI,CADJ,GADF,KAAA;AAMA,IAAM4B,8DAAwB,GAAG;AAC/BC,EAAAA,GAAG,EAD4B,IAAA;AAE/BC,EAAAA,MAAM,EAAE;AAFuB,CAAjC;;AAKA,SAAA,2DAAA,CAAA,QAAA,EAAA,CAAA,EAAoE;AAClE,uDAAA,oDAAA,wCAAoC;AAAA,QAApC,OAAoC;AAClCC,IAAAA,OAAO,CAAA,QAAA,EAAPA,CAAO,CAAPA;AACD;AACF;;AAKD,SAAA,gDAAA,CAAA,CAAA,EAAsC;AACpC,SAAO,EAAEjD,CAAC,CAADA,OAAAA,IAAc,CAAA,2CAAA,IAAUA,CAAC,CAAzBA,MAAAA,IAAqCA,CAAC,CAA/C,OAAO,CAAP;AACD;;AAED,SAAA,yDAAA,CAAA,CAAA,EAA+C;AAC7C4C,EAAAA,yDAAmB,GAAnBA,IAAAA;;AACA,MAAIM,gDAAU,CAAd,CAAc,CAAd,EAAmB;AACjBT,IAAAA,qDAAe,GAAfA,UAAAA;AACAU,IAAAA,2DAAqB,CAAA,UAAA,EAArBA,CAAqB,CAArBA;AACD;AACF;;AAED,SAAA,wDAAA,CAAA,CAAA,EAA0D;AACxDV,EAAAA,qDAAe,GAAfA,SAAAA;;AACA,MAAIzC,CAAC,CAADA,IAAAA,KAAAA,WAAAA,IAA0BA,CAAC,CAADA,IAAAA,KAA9B,aAAA,EAAwD;AACtD4C,IAAAA,yDAAmB,GAAnBA,IAAAA;AACAO,IAAAA,2DAAqB,CAAA,SAAA,EAArBA,CAAqB,CAArBA;AACD;AACF;;AAED,SAAA,sDAAA,CAAA,CAAA,EAAyC;AACvC,MAAI,uDAAA,CAAJ,CAAI,CAAJ,EAAuB;AACrBP,IAAAA,yDAAmB,GAAnBA,IAAAA;AACAH,IAAAA,qDAAe,GAAfA,SAAAA;AACD;AACF;;AAED,SAAA,sDAAA,CAAA,CAAA,EAAyC;AAIvC,MAAIzC,CAAC,CAADA,MAAAA,KAAAA,MAAAA,IAAuBA,CAAC,CAADA,MAAAA,KAA3B,QAAA,EAAkD;AAChD;AALqC;;AAUvC,MAAI,CAAJ,yDAAA,EAA0B;AACxByC,IAAAA,qDAAe,GAAfA,UAAAA;AACAU,IAAAA,2DAAqB,CAAA,UAAA,EAArBA,CAAqB,CAArBA;AACD;;AAEDP,EAAAA,yDAAmB,GAAnBA,KAAAA;AACD;;AAED,SAAA,sDAAA,GAA4B;AAG1BA,EAAAA,yDAAmB,GAAnBA,KAAAA;AACD;;AAKD,SAAA,4DAAA,GAAkC;AAChC,MAAI,OAAA,MAAA,KAAA,WAAA,IAAJ,6DAAA,EAA8D;AAC5D;AAF8B;;AAShC,MAAIQ,KAAK,GAAGC,WAAW,CAAXA,SAAAA,CAAZ,KAAA;;AACAA,EAAAA,WAAW,CAAXA,SAAAA,CAAAA,KAAAA,GAA8B,YAAY;AACxCT,IAAAA,yDAAmB,GAAnBA,IAAAA;AACAQ,IAAAA,KAAK,CAALA,KAAAA,CAAAA,IAAAA,EAAAA,SAAAA;AAFFC,GAAAA;;AAKAlG,EAAAA,QAAQ,CAARA,gBAAAA,CAAAA,SAAAA,EAAAA,yDAAAA,EAAAA,IAAAA;AACAA,EAAAA,QAAQ,CAARA,gBAAAA,CAAAA,OAAAA,EAAAA,yDAAAA,EAAAA,IAAAA;AACAA,EAAAA,QAAQ,CAARA,gBAAAA,CAAAA,OAAAA,EAAAA,sDAAAA,EAjBgC,IAiBhCA;AAIA+D,EAAAA,MAAM,CAANA,gBAAAA,CAAAA,OAAAA,EAAAA,sDAAAA,EAAAA,IAAAA;AACAA,EAAAA,MAAM,CAANA,gBAAAA,CAAAA,MAAAA,EAAAA,sDAAAA,EAAAA,KAAAA;;AAEA,MAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC/D,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,aAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,aAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,WAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AAHF,GAAA,MAIO;AACLA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,WAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,WAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,SAAAA,EAAAA,wDAAAA,EAAAA,IAAAA;AACD;;AAEDwF,EAAAA,6DAAuB,GAAvBA,IAAAA;AACD;;OAKM,SAAA,cAAA,GAAmC;AACxC,SAAOF,qDAAe,KAAtB,SAAA;AACD;OAEM,SAAA,sBAAA,GAA4C;AACjD,SAAA,qDAAA;AACD;OAEM,SAAA,sBAAA,CAAA,QAAA,EAAoD;AACzDA,EAAAA,qDAAe,GAAfA,QAAAA;AACAU,EAAAA,2DAAqB,CAAA,QAAA,EAArBA,IAAqB,CAArBA;AACD;OAKM,SAAA,sBAAA,GAA4C;AACjDG,EAAAA,4DAAsB;;AAD2B,mBAGnBpF,QAAQ,CAAtC,qDAAsC,CAHW;AAAA;AAAA,MAG7C,QAH6C;AAAA,MAG7C,WAH6C;;AAIjDJ,EAAAA,SAAS,CAAC,YAAM;AACd,QAAImF,OAAO,GAAG,SAAVA,OAAU,GAAM;AAClBM,MAAAA,WAAW,CAAXA,qDAAW,CAAXA;AADF,KAAA;;AAIAb,IAAAA,oDAAc,CAAdA,GAAAA,CAAAA,OAAAA;AACA,WAAO,YAAM;AACXA,MAAAA,oDAAc,CAAdA,MAAAA,CAAAA,OAAAA;AADF,KAAA;AANO,GAAA,EAAT5E,EAAS,CAATA;AAWA,SAAA,QAAA;AACD;OAKM,SAAA,eAAA,CAAA,KAAA,EAA4E;AAAA,MAAnDF,KAAmD,KAAA,KAAA,CAAA,EAAA;AAAnDA,IAAAA,KAAmD,GAAxB,EAA3BA;AAAmD;;AACjF0F,EAAAA,4DAAsB;AAD2D,eAGjF,KAHiF;AAAA,MAG7E,WAH6E,UAG7E,WAH6E;AAAA,MAG/DE,SAH+D,UAG/DA,SAH+D;;AAAA,mBAIpCtF,QAAQ,CAACsF,SAAS,IAAIC,cAAnE,EAAqD,CAJ4B;AAAA;AAAA,MAI7E,mBAJ6E;AAAA,MAI7E,eAJ6E;;AAKjF3F,EAAAA,SAAS,CAAC,YAAM;AACd,QAAImF,OAAO,GAAG,SAAVA,OAAU,CAAA,QAAA,EAAA,CAAA,EAAyC;AAGrD,UAAIS,WAAW,IAAIC,QAAQ,KAAvBD,UAAAA,IAA0C1D,CAAC,YAA3C0D,aAAAA,IAAwE,CAACZ,8DAAwB,CAAC9C,CAAC,CAAvG,GAAqG,CAArG,EAA8G;AAC5G;AACD;;AAED4D,MAAAA,eAAe,CAACH,cAAhBG,EAAe,CAAfA;AAPF,KAAA;;AAUAlB,IAAAA,oDAAc,CAAdA,GAAAA,CAAAA,OAAAA;AACA,WAAO,YAAM;AACXA,MAAAA,oDAAc,CAAdA,MAAAA,CAAAA,OAAAA;AADF,KAAA;AAZO,GAAA,EAeN,CAfH5E,WAeG,CAfM,CAATA;AAiBA,SAAO;AAAC2F,IAAAA,cAAc,EAAEI;AAAjB,GAAP;AACD;OChLM,SAAA,cAAA,CAAA,KAAA,EAAoE;AACzE,MAAI5G,KAAK,GAAG,MAAM,CAAC;AACjB6G,IAAAA,aAAa,EAAE;AADE,GAAD,CAAN,CAAZ,OAAA;;AAIA,MAAIlG,KAAK,CAAT,UAAA,EAAsB;AACpB,WAAO;AAACmG,MAAAA,gBAAgB,EAAE;AAAnB,KAAP;AACD;;AAED,MAAIxB,OAAO,GAAIvC,SAAXuC,OAAWvC,CAAAA,CAAD,EAAmB;AAC/B,QAAI,CAAC/C,KAAK,CAAV,aAAA,EAA0B;AACxB,UAAIW,KAAK,CAAT,aAAA,EAAyB;AACvBA,QAAAA,KAAK,CAALA,aAAAA,CAAAA,CAAAA;AACD;;AAED,UAAIA,KAAK,CAAT,mBAAA,EAA+B;AAC7BA,QAAAA,KAAK,CAALA,mBAAAA,CAAAA,IAAAA;AACD;;AAEDX,MAAAA,KAAK,CAALA,aAAAA,GAAAA,IAAAA;AACD;AAXH,GAAA;;AAcA,MAAIuF,MAAM,GAAIxC,SAAVwC,MAAUxC,CAAAA,CAAD,EAAmB;AAI9B,QAAI/C,KAAK,CAALA,aAAAA,IAAuB,CAAC+C,CAAC,CAADA,aAAAA,CAAAA,QAAAA,CAAyBA,CAAC,CAAtD,aAA4BA,CAA5B,EAAsF;AACpF,UAAIpC,KAAK,CAAT,YAAA,EAAwB;AACtBA,QAAAA,KAAK,CAALA,YAAAA,CAAAA,CAAAA;AACD;;AAED,UAAIA,KAAK,CAAT,mBAAA,EAA+B;AAC7BA,QAAAA,KAAK,CAALA,mBAAAA,CAAAA,KAAAA;AACD;;AAEDX,MAAAA,KAAK,CAALA,aAAAA,GAAAA,KAAAA;AACD;AAdH,GAAA;;AAiBA,SAAO;AACL8G,IAAAA,gBAAgB,EAAE;AAChBxB,MAAAA,OAAO,EADS,OAAA;AAEhBC,MAAAA,MAAM,EAAEA;AAFQ;AADb,GAAP;AAMD;AClDD,IAAIwB,+DAA+B,GAAnC,KAAA;AACA,IAAIC,0CAAU,GAAd,CAAA;;AAEA,SAAA,kEAAA,GAA8C;AAC5CD,EAAAA,+DAA+B,GADa,IAC5CA;AAMA5G,EAAAA,UAAU,CAAC,YAAM;AACf4G,IAAAA,+DAA+B,GAA/BA,KAAAA;AADQ,GAAA,EAAV5G,EAAU,CAAVA;AAGD;;AAED,SAAA,wDAAA,CAAA,CAAA,EAAqC;AACnC,MAAI4C,CAAC,CAADA,WAAAA,KAAJ,OAAA,EAA+B;AAC7BkE,IAAAA,kEAAkC;AACnC;AACF;;AAED,SAAA,sDAAA,GAAkC;AAChC,MAAI,OAAA,QAAA,KAAJ,WAAA,EAAqC;AACnC;AACD;;AAED,MAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC/G,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,WAAAA,EAAAA,wDAAAA;AADF,GAAA,MAEO;AACLA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,UAAAA,EAAAA,kEAAAA;AACD;;AAED8G,EAAAA,0CAAU;AACV,SAAO,YAAM;AACXA,IAAAA,0CAAU;;AACV,QAAIA,0CAAU,GAAd,CAAA,EAAoB;AAClB;AACD;;AAED,QAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC9G,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,WAAAA,EAAAA,wDAAAA;AADF,KAAA,MAEO;AACLA,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,UAAAA,EAAAA,kEAAAA;AACD;AAVH,GAAA;AAYD;;OAMM,SAAA,QAAA,CAAA,KAAA,EAAkD;AAAA,MACnD,YADmD,GACvD,KADuD,CACnD,YADmD;AAAA,MACnD,aADmD,GACvD,KADuD,CACnD,aADmD;AAAA,MACnD,UADmD,GACvD,KADuD,CACnD,UADmD;AAAA,MAKrDgH,UALqD,GACvD,KADuD,CAKrDA,UALqD;;AAAA,mBAQzBjG,QAAQ,CAAtC,KAAsC,CARiB;AAAA;AAAA,MAQnD,SARmD;AAAA,MAQnD,UARmD;;AASvD,MAAIjB,KAAK,GAAG,MAAM,CAAC;AACjBmH,IAAAA,SAAS,EADQ,KAAA;AAEjB/F,IAAAA,yBAAyB,EAAE;AAFV,GAAD,CAAN,CAAZ,OAAA;AAKAP,EAAAA,SAAS,CAAA,sDAAA,EAATA,EAAS,CAATA;AAEA,MAAIuG,UAAU,GAAGxF,OAAO,CAAC,YAAM;AAC7B,QAAIyF,iBAAiB,GAAG,SAApBA,iBAAoB,CAAA,KAAA,EAAA,WAAA,EAAwB;AAC9C,UAAIH,UAAU,IAAIlF,WAAW,KAAzBkF,OAAAA,IAAyClH,KAAK,CAAlD,SAAA,EAA8D;AAC5D;AACD;;AAEDA,MAAAA,KAAK,CAALA,SAAAA,GAAAA,IAAAA;AACA,UAAIuB,MAAM,GAAGlB,KAAK,CAAlB,MAAA;;AAEA,UAAA,YAAA,EAAkB;AAChBiH,QAAAA,YAAY,CAAC;AACXvF,UAAAA,IAAI,EADO,YAAA;AAEXR,UAAAA,MAFW,EAEXA,MAFW;AAGXS,UAAAA,WAAAA,EAAAA;AAHW,SAAD,CAAZsF;AAKD;;AAED,UAAA,aAAA,EAAmB;AACjBC,QAAAA,aAAa,CAAbA,IAAa,CAAbA;AACD;;AAEDC,MAAAA,UAAU,CAAVA,IAAU,CAAVA;AApBF,KAAA;;AAuBA,QAAIC,eAAe,GAAG,SAAlBA,eAAkB,CAAA,KAAA,EAAA,WAAA,EAAwB;AAC5C,UAAIP,UAAU,IAAIlF,WAAW,KAAzBkF,OAAAA,IAAyC,CAAClH,KAAK,CAAnD,SAAA,EAA+D;AAC7D;AACD;;AAEDA,MAAAA,KAAK,CAALA,SAAAA,GAAAA,KAAAA;AACA,UAAIuB,MAAM,GAAGlB,KAAK,CAAlB,MAAA;;AAEA,UAAA,UAAA,EAAgB;AACdqH,QAAAA,UAAU,CAAC;AACT3F,UAAAA,IAAI,EADK,UAAA;AAETR,UAAAA,MAFS,EAETA,MAFS;AAGTS,UAAAA,WAAAA,EAAAA;AAHS,SAAD,CAAV0F;AAKD;;AAED,UAAA,aAAA,EAAmB;AACjBH,QAAAA,aAAa,CAAbA,KAAa,CAAbA;AACD;;AAEDC,MAAAA,UAAU,CAAVA,KAAU,CAAVA;AApBF,KAAA;;AAuBA,QAAIJ,UAAuC,GAA3C,EAAA;;AAEA,QAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvCA,MAAAA,UAAU,CAAVA,cAAAA,GAA6BrE,UAAAA,CAAD,EAAO;AACjC,YAAIgE,+DAA+B,IAAIhE,CAAC,CAADA,WAAAA,KAAvC,OAAA,EAAkE;AAChE;AACD;;AAEDsE,QAAAA,iBAAiB,CAAA,CAAA,EAAItE,CAAC,CAAtBsE,WAAiB,CAAjBA;AALFD,OAAAA;;AAQAA,MAAAA,UAAU,CAAVA,cAAAA,GAA6BrE,UAAAA,CAAD,EAAO;AACjC0E,QAAAA,eAAe,CAAA,CAAA,EAAI1E,CAAC,CAApB0E,WAAe,CAAfA;AADFL,OAAAA;AATF,KAAA,MAYO;AACLA,MAAAA,UAAU,CAAVA,YAAAA,GAA0B,YAAM;AAC9BpH,QAAAA,KAAK,CAALA,yBAAAA,GAAAA,IAAAA;AADFoH,OAAAA;;AAIAA,MAAAA,UAAU,CAAVA,YAAAA,GAA2BrE,UAAAA,CAAD,EAAO;AAC/B,YAAI,CAAC/C,KAAK,CAAN,yBAAA,IAAoC,CAAxC,+DAAA,EAA0E;AACxEqH,UAAAA,iBAAiB,CAAA,CAAA,EAAjBA,OAAiB,CAAjBA;AACD;;AAEDrH,QAAAA,KAAK,CAALA,yBAAAA,GAAAA,KAAAA;AALFoH,OAAAA;;AAQAA,MAAAA,UAAU,CAAVA,YAAAA,GAA2BrE,UAAAA,CAAD,EAAO;AAC/B0E,QAAAA,eAAe,CAAA,CAAA,EAAfA,OAAe,CAAfA;AADFL,OAAAA;AAGD;;AACD,WAAA,UAAA;AA9EsB,GAAA,EA+ErB,CAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EA/EH,KA+EG,CA/EqB,CAAxB;AAiFA,SAAO;AACLA,IAAAA,UADK,EACLA,UADK;AAELD,IAAAA,SAAAA,EAAAA;AAFK,GAAP;AAID;OC5JM,SAAA,kBAAA,CAAA,KAAA,EAAyD;AAAA,MAC1D,GAD0D,GAC9D,KAD8D,CAC1D,GAD0D;AAAA,MAC1D,iBAD0D,GAC9D,KAD8D,CAC1D,iBAD0D;AAAA,MACjCD,UADiC,GAC9D,KAD8D,CACjCA,UADiC;AAE9D,MAAIS,QAAQ,GAAGxG,MAAM,CAAC;AACpByG,IAAAA,aAAa,EADO,KAAA;AAEpBxG,IAAAA,yBAAyB,EAAE;AAFP,GAAD,CAArB;AAIA,MAAIpB,KAAK,GAAG2H,QAAQ,CAApB,OAAA;AAEA9G,EAAAA,SAAS,CAAC,YAAM;AACd,QAAIgH,aAAa,GAAI9E,SAAjB8E,aAAiB9E,CAAAA,CAAD,EAAO;AACzB,UAAA,UAAA,EAAgB;AACd;AACD;;AACD,UAAI+E,kDAAY,CAAA,CAAA,EAAhB,GAAgB,CAAhB,EAA0B;AACxB9H,QAAAA,KAAK,CAALA,aAAAA,GAAAA,IAAAA;AACD;AANH,KAAA;;AA6BA,QAAI0D,SAAS,GAAIX,SAAbW,SAAaX,CAAAA,CAAD,EAAO;AACrB,UAAA,UAAA,EAAgB;AACd;AACD;;AACD,UAAI/C,KAAK,CAAT,yBAAA,EAAqC;AACnCA,QAAAA,KAAK,CAALA,yBAAAA,GAAAA,KAAAA;AADF,OAAA,MAEO,IAAIA,KAAK,CAALA,aAAAA,IAAAA,iBAAAA,IAA4C8H,kDAAY,CAAA,CAAA,EAA5D,GAA4D,CAA5D,EAAsE;AAC3E9H,QAAAA,KAAK,CAALA,aAAAA,GAAAA,KAAAA;AACA+H,QAAAA,iBAAiB,CAAjBA,CAAiB,CAAjBA;AACD;AATH,KAAA;;AAYA,QAAIC,UAAU,GAAIjF,SAAdiF,UAAcjF,CAAAA,CAAD,EAAO;AACtB,UAAA,UAAA,EAAgB;AACd;AACD;;AACD/C,MAAAA,KAAK,CAALA,yBAAAA,GAAAA,IAAAA;;AACA,UAAI+H,iBAAiB,IAAI/H,KAAK,CAA1B+H,aAAAA,IAA4CD,kDAAY,CAAA,CAAA,EAA5D,GAA4D,CAA5D,EAAsE;AACpE9H,QAAAA,KAAK,CAALA,aAAAA,GAAAA,KAAAA;AACA+H,QAAAA,iBAAiB,CAAjBA,CAAiB,CAAjBA;AACD;AARH,KAAA;;AAWA7H,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,WAAAA,EAAAA,aAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,SAAAA,EAAAA,SAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,YAAAA,EAAAA,aAAAA,EAAAA,IAAAA;AACAA,IAAAA,QAAQ,CAARA,gBAAAA,CAAAA,UAAAA,EAAAA,UAAAA,EAAAA,IAAAA;AAEA,WAAO,YAAM;AACXA,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,WAAAA,EAAAA,aAAAA,EAAAA,IAAAA;AACAA,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,SAAAA,EAAAA,SAAAA,EAAAA,IAAAA;AACAA,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,YAAAA,EAAAA,aAAAA,EAAAA,IAAAA;AACAA,MAAAA,QAAQ,CAARA,mBAAAA,CAAAA,UAAAA,EAAAA,UAAAA,EAAAA,IAAAA;AAJF,KAAA;AA1DO,GAAA,EAgEN,CAAA,iBAAA,EAAA,GAAA,EAAyBF,KAAK,CAA9B,yBAAA,EAA0DA,KAAK,CAA/D,aAAA,EAhEHa,UAgEG,CAhEM,CAATA;AAiED;;AAED,SAAA,kDAAA,CAAA,KAAA,EAAA,GAAA,EAAkC;AAChC,MAAIR,KAAK,CAALA,MAAAA,GAAJ,CAAA,EAAsB;AACpB,WAAA,KAAA;AAF8B;;AAMhC,MAAIA,KAAK,CAAT,MAAA,EAAkB;AAChB,QAAM4H,aAAa,GAAG5H,KAAK,CAALA,MAAAA,CAAtB,aAAA;;AACA,QAAI,CAAA,aAAA,IAAkB,CAAC4H,aAAa,CAAbA,IAAAA,CAAAA,QAAAA,CAA4B5H,KAAK,CAAxD,MAAuB4H,CAAvB,EAAkE;AAChE,aAAA,KAAA;AACD;AACF;;AAED,SAAO/G,GAAG,CAAHA,OAAAA,IAAe,CAACA,GAAG,CAAHA,OAAAA,CAAAA,QAAAA,CAAqBb,KAAK,CAAjD,MAAuBa,CAAvB;AACD;;ACrGM,SAAA,sDAAA,CAAA,OAAA,EAA0G;AAC/G,MAAI,CAAJ,OAAA,EAAc;AACZ;AACD;;AAED,MAAIgH,qBAAqB,GAAzB,IAAA;AACA,SAAQnF,UAAAA,CAAD,EAAU;AACf,QAAI1C,KAAmB,GAAA,8BAAA,CAAA,EAAA,EAAA,CAAA,EAAA;AAErB8H,MAAAA,cAFqB,4BAEJ;AACfpF,QAAAA,CAAC,CAADA,cAAAA;AAHmB,OAAA;AAKrBqF,MAAAA,kBALqB,gCAKA;AACnB,eAAOrF,CAAC,CAAR,kBAAOA,EAAP;AANmB,OAAA;AAQrBsF,MAAAA,eARqB,6BAQH;AAChBjD,QAAAA,OAAO,CAAPA,KAAAA,CAAAA,sIAAAA;AATmB,OAAA;AAWrBkD,MAAAA,mBAXqB,iCAWC;AACpBJ,QAAAA,qBAAqB,GAArBA,KAAAA;AACD;AAboB,KAAA,CAAvB;;AAgBAlC,IAAAA,OAAO,CAAPA,KAAO,CAAPA;;AAEA,QAAA,qBAAA,EAA2B;AACzBjD,MAAAA,CAAC,CAADA,eAAAA;AACD;AArBH,GAAA;AAuBD;;OClBM,SAAA,WAAA,CAAA,KAAA,EAA2D;AAChE,SAAO;AACLwF,IAAAA,aAAa,EAAE5H,KAAK,CAALA,UAAAA,GAAAA,EAAAA,GAAwB;AACrCkC,MAAAA,SAAS,EAAE,sDAAA,CAAmBlC,KAAK,CADE,SAC1B,CAD0B;AAErCsC,MAAAA,OAAO,EAAE,sDAAA,CAAmBtC,KAAK,CAAxB,OAAA;AAF4B;AADlC,GAAP;AAMD;OCTM,SAAA,OAAA,CAAA,KAAA,EAAgD;AAAA,MACjD,WADiD,GACrD,KADqD,CACjD,WADiD;AAAA,MACjD,MADiD,GACrD,KADqD,CACjD,MADiD;AAAA,MAC3B6H,SAD2B,GACrD,KADqD,CAC3BA,SAD2B;AAGrD,MAAIxI,KAAK,GAAGmB,MAAM,CAIf;AAACsH,IAAAA,OAAO,EAAR,KAAA;AAAiBC,IAAAA,YAAY,EAA7B,IAAA;AAAqCC,IAAAA,EAAE,EAAE;AAAzC,GAJe,CAAlB;;AAHqD,6BASLjH,kBAAhD,EATqD;AAAA,MASjD,iBATiD,wBASjD,iBATiD;AAAA,MAS7BD,oBAT6B,wBAS7BA,oBAT6B;;AAWrD,MAAImH,SAAS,GAAGhH,OAAO,CAAC,YAAM;AAC5B,QAAIgH,SAAsC,GAA1C,EAAA;;AAEA,QAAIC,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChB,MAAA,0DAAA;AACA7I,MAAAA,KAAK,CAALA,OAAAA,CAAAA,OAAAA,GAAAA,KAAAA;AAFF,KAAA;;AAIA,QAAI8I,IAAI,GAAG,SAAPA,IAAO,CAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAA8D;AACvE,UAAIC,MAAM,KAANA,CAAAA,IAAgBC,MAAM,KAA1B,CAAA,EAAkC;AAChC;AACD;;AAED,UAAI,CAAChJ,KAAK,CAALA,OAAAA,CAAL,OAAA,EAA4B;AAC1BA,QAAAA,KAAK,CAALA,OAAAA,CAAAA,OAAAA,GAAAA,IAAAA;AACAiJ,QAAAA,WAAW,IAAXA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,CAAG;AACZlH,UAAAA,IAAI,EADQ,WAAA;AAEZC,UAAAA,WAAAA,EAAAA;AAFY,SAAH,CAAXiH;AAID;;AACDC,MAAAA,MAAM,CAAC;AACLnH,QAAAA,IAAI,EADC,MAAA;AAELC,QAAAA,WAFK,EAELA,WAFK;AAGL+G,QAAAA,MAAM,EAHD,MAAA;AAILC,QAAAA,MAAM,EAAEA;AAJH,OAAD,CAANE;AAZF,KAAA;;AAmBA,QAAIC,GAAG,GAAInH,SAAPmH,GAAOnH,CAAAA,WAAD,EAA8B;AACtC,MAAA,0DAAA;;AACA,UAAIhC,KAAK,CAALA,OAAAA,CAAJ,OAAA,EAA2B;AACzBwI,QAAAA,SAAS,IAATA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAS,CAAG;AACVzG,UAAAA,IAAI,EADM,SAAA;AAEVC,UAAAA,WAAAA,EAAAA;AAFU,SAAH,CAATwG;AAID;AAPH,KAAA;;AAUA,QAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC,UAAIY,WAAW,GAAIrG,SAAfqG,WAAerG,CAAAA,CAAD,EAAmB;AACnC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClB+F,UAAAA,IAAI,CAAA,OAAA,EAAU/F,CAAC,CAADA,KAAAA,GAAU/C,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAApB,KAAA,EAAsD+C,CAAC,CAADA,KAAAA,GAAU/C,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAApE8I,KAAI,CAAJA;AACA9I,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,YAAAA,KAAK,EAAEtG,CAAC,CAAT,KAAA;AAAiBuG,YAAAA,KAAK,EAAEvG,CAAC,CAACuG;AAA1B,WAA7BtJ;AACD;AAJH,OAAA;;AAMA,UAAI0D,SAAS,GAAIX,SAAbW,SAAaX,CAAAA,CAAD,EAAmB;AACjC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClBoG,UAAAA,GAAG,CAAHA,OAAG,CAAHA;AACA1H,UAAAA,oBAAoB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAApBA,KAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAApBA,KAAoB,CAApBA;AACD;AALH,OAAA;;AAOAmH,MAAAA,SAAS,CAATA,WAAAA,GAAyB7F,UAAAA,CAAD,EAAyB;AAC/C,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClB8F,UAAAA,KAAK;AACL9F,UAAAA,CAAC,CAADA,eAAAA;AACAA,UAAAA,CAAC,CAADA,cAAAA;AACA/C,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,YAAAA,KAAK,EAAEtG,CAAC,CAAT,KAAA;AAAiBuG,YAAAA,KAAK,EAAEvG,CAAC,CAACuG;AAA1B,WAA7BtJ;AACAgD,UAAAA,iBAAiB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAjBA,KAAiB,CAAjBA;AACD;AARH4F,OAAAA;;AAWA,UAAIW,WAAW,GAAIxG,SAAfwG,WAAexG,CAAAA,CAAD,EAAmB;AAEnC,YAAIY,KAAK,GAAG,mBAAIZ,CAAC,CAAL,cAAA,EAAA,SAAA,CAAgC,UAAA,IAAA,EAAA;AAAA,cAAEyG,UAAF,GAAA,IAAA,CAAEA,UAAF;AAAA,iBAAkBA,UAAU,KAAKxJ,KAAK,CAALA,OAAAA,CAAjC,EAAA;AAA5C,SAAY,CAAZ;;AACA,YAAI2D,KAAK,IAAT,CAAA,EAAgB;AAAA,sCACOZ,CAAC,CAADA,cAAAA,CAArB,KAAqBA,CADP;AAAA,cACV,KADU,yBACV,KADU;AAAA,cACFuG,KADE,yBACFA,KADE;AAEdR,UAAAA,IAAI,CAAA,OAAA,EAAUO,KAAK,GAAGrJ,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAAlB,KAAA,EAAoDsJ,KAAK,GAAGtJ,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAAhE8I,KAAI,CAAJA;AACA9I,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,YAAAA,KAAD,EAACA,KAAD;AAAQC,YAAAA,KAAAA,EAAAA;AAAR,WAA7BtJ;AACD;AAPH,OAAA;;AASA,UAAIgI,UAAU,GAAIjF,SAAdiF,UAAcjF,CAAAA,CAAD,EAAmB;AAElC,YAAIY,KAAK,GAAG,mBAAIZ,CAAC,CAAL,cAAA,EAAA,SAAA,CAAgC,UAAA,KAAA,EAAA;AAAA,cAAEyG,UAAF,GAAA,KAAA,CAAEA,UAAF;AAAA,iBAAkBA,UAAU,KAAKxJ,KAAK,CAALA,OAAAA,CAAjC,EAAA;AAA5C,SAAY,CAAZ;;AACA,YAAI2D,KAAK,IAAT,CAAA,EAAgB;AACdwF,UAAAA,GAAG,CAAHA,OAAG,CAAHA;AACAnJ,UAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAAA,IAAAA;AACAyB,UAAAA,oBAAoB,CAAA,MAAA,EAAA,WAAA,EAApBA,WAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,UAAA,EAApBA,UAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,aAAA,EAApBA,UAAoB,CAApBA;AACD;AATH,OAAA;;AAWAmH,MAAAA,SAAS,CAATA,YAAAA,GAA0B7F,UAAAA,CAAD,EAAyB;AAChD,YAAIA,CAAC,CAADA,cAAAA,CAAAA,MAAAA,KAAAA,CAAAA,IAAiC/C,KAAK,CAALA,OAAAA,CAAAA,EAAAA,IAArC,IAAA,EAA+D;AAC7D;AACD;;AAH+C,iCAKf+C,CAAC,CAADA,cAAAA,CAAjC,CAAiCA,CALe;AAAA,YAK5C,KAL4C,sBAK5C,KAL4C;AAAA,YAK5C,KAL4C,sBAK5C,KAL4C;AAAA,YAK7ByG,UAL6B,sBAK7BA,UAL6B;AAMhDX,QAAAA,KAAK;AACL9F,QAAAA,CAAC,CAADA,eAAAA;AACAA,QAAAA,CAAC,CAADA,cAAAA;AACA/C,QAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,UAAAA,KAAD,EAACA,KAAD;AAAQC,UAAAA,KAAAA,EAAAA;AAAR,SAA7BtJ;AACAA,QAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAAA,UAAAA;AACAgD,QAAAA,iBAAiB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,QAAAA,iBAAiB,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAjBA,KAAiB,CAAjBA;AACAA,QAAAA,iBAAiB,CAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAjBA,KAAiB,CAAjBA;AAbF4F,OAAAA;AA7CF,KAAA,MA4DO;AACL,UAAIrF,aAAa,GAAIR,SAAjBQ,aAAiBR,CAAAA,CAAD,EAAqB;AACvC,YAAIA,CAAC,CAADA,SAAAA,KAAgB/C,KAAK,CAALA,OAAAA,CAApB,EAAA,EAAsC;AAEpC,cAAIgC,WAAwB,GAAGe,CAAC,CAADA,WAAAA,IAFK,OAEpC;AAKA+F,UAAAA,IAAI,CAAA,WAAA,EAAc/F,CAAC,CAADA,KAAAA,GAAU/C,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAAxB,KAAA,EAA0D+C,CAAC,CAADA,KAAAA,GAAU/C,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAAxE8I,KAAI,CAAJA;AACA9I,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,YAAAA,KAAK,EAAEtG,CAAC,CAAT,KAAA;AAAiBuG,YAAAA,KAAK,EAAEvG,CAAC,CAACuG;AAA1B,WAA7BtJ;AACD;AAVH,OAAA;;AAaA,UAAIwD,WAAW,GAAIT,SAAfS,WAAeT,CAAAA,CAAD,EAAqB;AACrC,YAAIA,CAAC,CAADA,SAAAA,KAAgB/C,KAAK,CAALA,OAAAA,CAApB,EAAA,EAAsC;AAEpC,cAAIgC,WAAwB,GAAGe,CAAC,CAADA,WAAAA,IAA/B,OAAA;AACAoG,UAAAA,GAAG,CAAHA,WAAG,CAAHA;AACAnJ,UAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAAA,IAAAA;AACAyB,UAAAA,oBAAoB,CAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAApBA,KAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAApBA,KAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,eAAA,EAAA,WAAA,EAApBA,KAAoB,CAApBA;AACD;AATH,OAAA;;AAYAmH,MAAAA,SAAS,CAATA,aAAAA,GAA2B7F,UAAAA,CAAD,EAA2B;AACnD,YAAIA,CAAC,CAADA,MAAAA,KAAAA,CAAAA,IAAkB/C,KAAK,CAALA,OAAAA,CAAAA,EAAAA,IAAtB,IAAA,EAAgD;AAC9C6I,UAAAA,KAAK;AACL9F,UAAAA,CAAC,CAADA,eAAAA;AACAA,UAAAA,CAAC,CAADA,cAAAA;AACA/C,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAACqJ,YAAAA,KAAK,EAAEtG,CAAC,CAAT,KAAA;AAAiBuG,YAAAA,KAAK,EAAEvG,CAAC,CAACuG;AAA1B,WAA7BtJ;AACAA,UAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAmB+C,CAAC,CAApB/C,SAAAA;AACAgD,UAAAA,iBAAiB,CAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,MAAA,EAAA,eAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACD;AAVH4F,OAAAA;AAYD;;AAED,QAAIa,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAA,MAAA,EAAA,MAAA,EAAoC;AAC5DZ,MAAAA,KAAK;AACLC,MAAAA,IAAI,CAAA,UAAA,EAAA,MAAA,EAAJA,MAAI,CAAJA;AACAK,MAAAA,GAAG,CAAHA,UAAG,CAAHA;AAHF,KAAA;;AAMAP,IAAAA,SAAS,CAATA,SAAAA,GAAuB7F,UAAAA,CAAD,EAAO;AAC3B,cAAQA,CAAC,CAAT,GAAA;AACE,aAAA,MAAA;AACA,aAAA,WAAA;AACEA,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACA0G,UAAAA,mBAAmB,CAAC,CAAD,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,OAAA;AACA,aAAA,YAAA;AACE1G,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACA0G,UAAAA,mBAAmB,CAAA,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,IAAA;AACA,aAAA,SAAA;AACE1G,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACA0G,UAAAA,mBAAmB,CAAA,CAAA,EAAI,CAAvBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,MAAA;AACA,aAAA,WAAA;AACE1G,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACA0G,UAAAA,mBAAmB,CAAA,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;AAxBJ;AADFb,KAAAA;;AA6BA,WAAA,SAAA;AA3KqB,GAAA,EA4KpB,CAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,iBAAA,EA5KH,oBA4KG,CA5KoB,CAAvB;AA8KA,SAAO;AAACA,IAAAA,SAAAA,EAAAA;AAAD,GAAP;AACD","sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {runAfterTransition} from '@react-aria/utils';\n\n// Safari on iOS starts selecting text on long press. The only way to avoid this, it seems,\n// is to add user-select: none to the entire page. Adding it to the pressable element prevents\n// that element from being selected, but nearby elements may still receive selection. We add\n// user-select: none on touch start, and remove it again on touch end to prevent this.\n// This must be implemented using global state to avoid race conditions between multiple elements.\n\n// There are three possible states due to the delay before removing user-select: none after\n// pointer up. The 'default' state always transitions to the 'disabled' state, which transitions\n// to 'restoring'. The 'restoring' state can either transition back to 'disabled' or 'default'.\ntype State = 'default' | 'disabled' | 'restoring';\n\nlet state: State = 'default';\nlet savedUserSelect = '';\n\nexport function disableTextSelection() {\n  if (state === 'default') {\n    savedUserSelect = document.documentElement.style.webkitUserSelect;\n    document.documentElement.style.webkitUserSelect = 'none';\n  }\n\n  state = 'disabled';\n}\n\nexport function restoreTextSelection() {\n  // If the state is already default, there's nothing to do.\n  // If it is restoring, then there's no need to queue a second restore.\n  if (state !== 'disabled') {\n    return;\n  }\n\n  state = 'restoring';\n\n  // There appears to be a delay on iOS where selection still might occur\n  // after pointer up, so wait a bit before removing user-select.\n  setTimeout(() => {\n    // Wait for any CSS transitions to complete so we don't recompute style\n    // for the whole page in the middle of the animation and cause jank.\n    runAfterTransition(() => {\n      // Avoid race conditions\n      if (state === 'restoring') {\n        if (document.documentElement.style.webkitUserSelect === 'none') {\n          document.documentElement.style.webkitUserSelect = savedUserSelect || '';\n        }\n\n        savedUserSelect = '';\n        state = 'default';\n      }\n    });\n  }, 300);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Original licensing for the following method can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87\n\n// Keyboards, Assistive Technologies, and element.click() all produce a \"virtual\"\n// click event. This is a method of inferring such clicks. Every browser except\n// IE 11 only sets a zero value of \"detail\" for click events that are \"virtual\".\n// However, IE 11 uses a zero value for all click events. For IE 11 we rely on\n// the quirk that it produces click events that are of type PointerEvent, and\n// where only the \"virtual\" click lacks a pointerType field.\n\nexport function isVirtualClick(event: MouseEvent | PointerEvent): boolean {\n  // JAWS/NVDA with Firefox.\n  if ((event as any).mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n\n  return event.detail === 0 && !(event as PointerEvent).pointerType;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {PressProps} from './usePress';\nimport React, {MutableRefObject} from 'react';\n\ninterface IPressResponderContext extends PressProps {\n  register(): void,\n  ref?: MutableRefObject<HTMLElement>\n}\n\nexport const PressResponderContext = React.createContext<IPressResponderContext>(null);\nPressResponderContext.displayName = 'PressResponderContext';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {disableTextSelection, restoreTextSelection} from './textSelection';\nimport {focusWithoutScrolling, mergeProps} from '@react-aria/utils';\nimport {HTMLAttributes, RefObject, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {isVirtualClick} from './utils';\nimport {PointerType, PressEvents} from '@react-types/shared';\nimport {PressResponderContext} from './context';\nimport {useGlobalListeners} from '@react-aria/utils';\n\nexport interface PressProps extends PressEvents {\n  /** Whether the target is in a controlled press state (e.g. an overlay it triggers is open). */\n  isPressed?: boolean,\n  /** Whether the press events should be disabled. */\n  isDisabled?: boolean,\n  /** Whether the target should not receive focus on press. */\n  preventFocusOnPress?: boolean\n}\n\nexport interface PressHookProps extends PressProps {\n  /** A ref to the target element. */\n  ref?: RefObject<HTMLElement>\n}\n\ninterface PressState {\n  isPressed: boolean,\n  ignoreEmulatedMouseEvents: boolean,\n  ignoreClickAfterPress: boolean,\n  activePointerId: any,\n  target: HTMLElement | null,\n  isOverTarget: boolean,\n  userSelect?: string\n}\n\ninterface EventBase {\n  currentTarget: EventTarget,\n  shiftKey: boolean,\n  ctrlKey: boolean,\n  metaKey: boolean\n}\n\nexport interface PressResult {\n  /** Whether the target is currently pressed. */\n  isPressed: boolean,\n  /** Props to spread on the target element. */\n  pressProps: HTMLAttributes<HTMLElement>\n}\n\nfunction usePressResponderContext(props: PressHookProps): PressHookProps {\n  // Consume context from <PressResponder> and merge with props.\n  let context = useContext(PressResponderContext);\n  if (context) {\n    let {register, ...contextProps} = context;\n    props = mergeProps(contextProps, props) as PressHookProps;\n    register();\n  }\n\n  // Sync ref from <PressResponder> with ref passed to usePress.\n  useEffect(() => {\n    if (context && context.ref) {\n      context.ref.current = props.ref.current;\n      return () => {\n        context.ref.current = null;\n      };\n    }\n  }, [context, props.ref]);\n\n  return props;\n}\n\n/**\n * Handles press interactions across mouse, touch, keyboard, and screen readers.\n * It normalizes behavior across browsers and platforms, and handles many nuances\n * of dealing with pointer and keyboard events.\n */\nexport function usePress(props: PressHookProps): PressResult {\n  let {\n    onPress,\n    onPressChange,\n    onPressStart,\n    onPressEnd,\n    onPressUp,\n    isDisabled,\n    isPressed: isPressedProp,\n    preventFocusOnPress,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ref: _, // Removing `ref` from `domProps` because TypeScript is dumb,\n    ...domProps\n  } = usePressResponderContext(props);\n\n  let [isPressed, setPressed] = useState(false);\n  let ref = useRef<PressState>({\n    isPressed: false,\n    ignoreEmulatedMouseEvents: false,\n    ignoreClickAfterPress: false,\n    activePointerId: null,\n    target: null,\n    isOverTarget: false\n  });\n\n  let {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n  let pressProps = useMemo(() => {\n    let state = ref.current;\n    let triggerPressStart = (originalEvent: EventBase, pointerType: PointerType) => {\n      if (isDisabled) {\n        return;\n      }\n\n      if (onPressStart) {\n        onPressStart({\n          type: 'pressstart',\n          pointerType,\n          target: originalEvent.currentTarget as HTMLElement,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n\n      if (onPressChange) {\n        onPressChange(true);\n      }\n\n      setPressed(true);\n    };\n\n    let triggerPressEnd = (originalEvent: EventBase, pointerType: PointerType, wasPressed = true) => {\n      if (isDisabled) {\n        return;\n      }\n\n      state.ignoreClickAfterPress = true;\n\n      if (onPressEnd) {\n        onPressEnd({\n          type: 'pressend',\n          pointerType,\n          target: originalEvent.currentTarget as HTMLElement,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n\n      if (onPressChange) {\n        onPressChange(false);\n      }\n\n      setPressed(false);\n\n      if (onPress && wasPressed) {\n        onPress({\n          type: 'press',\n          pointerType,\n          target: originalEvent.currentTarget as HTMLElement,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n    };\n\n    let triggerPressUp = (originalEvent: EventBase, pointerType: PointerType) => {\n      if (isDisabled) {\n        return;\n      }\n\n      if (onPressUp) {\n        onPressUp({\n          type: 'pressup',\n          pointerType,\n          target: originalEvent.currentTarget as HTMLElement,\n          shiftKey: originalEvent.shiftKey,\n          metaKey: originalEvent.metaKey,\n          ctrlKey: originalEvent.ctrlKey\n        });\n      }\n    };\n\n    let pressProps: HTMLAttributes<HTMLElement> = {\n      onKeyDown(e) {\n        if (isValidKeyboardEvent(e.nativeEvent)) {\n          e.preventDefault();\n          e.stopPropagation();\n\n\n          // If the event is repeating, it may have started on a different element\n          // after which focus moved to the current element. Ignore these events and\n          // only handle the first key down event.\n          if (!state.isPressed && !e.repeat) {\n            state.target = e.currentTarget as HTMLElement;\n            state.isPressed = true;\n            triggerPressStart(e, 'keyboard');\n\n            // Focus may move before the key up event, so register the event on the document\n            // instead of the same element where the key down event occurred.\n            addGlobalListener(document, 'keyup', onKeyUp, false);\n          }\n        }\n      },\n      onKeyUp(e) {\n        if (isValidKeyboardEvent(e.nativeEvent) && !e.repeat) {\n          triggerPressUp(createEvent(state.target, e), 'keyboard');\n        }\n      },\n      onClick(e) {\n        if (e && e.button === 0) {\n          e.stopPropagation();\n          if (isDisabled) {\n            e.preventDefault();\n          }\n\n          // If triggered from a screen reader or by using element.click(),\n          // trigger as if it were a keyboard click.\n          if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && isVirtualClick(e.nativeEvent)) {\n            // Ensure the element receives focus (VoiceOver on iOS does not do this)\n            if (!isDisabled && !preventFocusOnPress) {\n              focusWithoutScrolling(e.currentTarget);\n            }\n\n            triggerPressStart(e, 'virtual');\n            triggerPressUp(e, 'virtual');\n            triggerPressEnd(e, 'virtual');\n          }\n\n          state.ignoreEmulatedMouseEvents = false;\n          state.ignoreClickAfterPress = false;\n        }\n      }\n    };\n\n    let onKeyUp = (e: KeyboardEvent) => {\n      if (state.isPressed && isValidKeyboardEvent(e)) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        state.isPressed = false;\n        triggerPressEnd(createEvent(state.target, e), 'keyboard', e.target === state.target);\n        removeGlobalListener(document, 'keyup', onKeyUp, false);\n\n        // If the target is a link, trigger the click method to open the URL,\n        // but defer triggering pressEnd until onClick event handler.\n        if (e.target === state.target && isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {\n          state.target.click();\n        }\n      }\n    };\n\n    if (typeof PointerEvent !== 'undefined') {\n      pressProps.onPointerDown = (e) => {\n        // Only handle left clicks\n        if (e.button !== 0) {\n          return;\n        }\n\n        // Due to browser inconsistencies, especially on mobile browsers, we prevent\n        // default on pointer down and handle focusing the pressable element ourselves.\n        e.preventDefault();\n        e.stopPropagation();\n        if (!state.isPressed) {\n          state.isPressed = true;\n          state.isOverTarget = true;\n          state.activePointerId = e.pointerId;\n          state.target = e.currentTarget;\n\n          if (!isDisabled && !preventFocusOnPress) {\n            focusWithoutScrolling(e.currentTarget);\n          }\n\n          disableTextSelection();\n          triggerPressStart(e, e.pointerType);\n\n          addGlobalListener(document, 'pointermove', onPointerMove, false);\n          addGlobalListener(document, 'pointerup', onPointerUp, false);\n          addGlobalListener(document, 'pointercancel', onPointerCancel, false);\n        }\n      };\n\n      pressProps.onMouseDown = (e) => {\n        if (e.button === 0) {\n          // Chrome and Firefox on touch Windows devices require mouse down events\n          // to be canceled in addition to pointer events, or an extra asynchronous\n          // focus event will be fired.\n          e.preventDefault();\n        }\n      };\n\n      let unbindEvents = () => {\n        removeGlobalListener(document, 'pointermove', onPointerMove, false);\n        removeGlobalListener(document, 'pointerup', onPointerUp, false);\n        removeGlobalListener(document, 'pointercancel', onPointerCancel, false);\n      };\n\n      pressProps.onPointerUp = (e) => {\n        // Only handle left clicks\n        // Safari on iOS sometimes fires pointerup events, even\n        // when the touch isn't over the target, so double check.\n        if (e.button === 0 && isOverTarget(e, e.currentTarget)) {\n          triggerPressUp(e, e.pointerType as PointerType);\n        }\n      };\n\n      // Safari on iOS < 13.2 does not implement pointerenter/pointerleave events correctly.\n      // Use pointer move events instead to implement our own hit testing.\n      // See https://bugs.webkit.org/show_bug.cgi?id=199803\n      let onPointerMove = (e: PointerEvent) => {\n        if (e.pointerId !== state.activePointerId) {\n          return;\n        }\n\n        if (isOverTarget(e, state.target)) {\n          if (!state.isOverTarget) {\n            state.isOverTarget = true;\n            triggerPressStart(createEvent(state.target, e), e.pointerType as PointerType);\n          }\n        } else if (state.isOverTarget) {\n          state.isOverTarget = false;\n          triggerPressEnd(createEvent(state.target, e), e.pointerType as PointerType, false);\n        }\n      };\n\n      let onPointerUp = (e: PointerEvent) => {\n        if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0) {\n          if (isOverTarget(e, state.target)) {\n            triggerPressEnd(createEvent(state.target, e), e.pointerType as PointerType);\n          } else if (state.isOverTarget) {\n            triggerPressEnd(createEvent(state.target, e), e.pointerType as PointerType, false);\n          }\n\n          state.isPressed = false;\n          state.isOverTarget = false;\n          state.activePointerId = null;\n          unbindEvents();\n          restoreTextSelection();\n        }\n      };\n\n      let onPointerCancel = (e: PointerEvent) => {\n        if (state.isPressed) {\n          if (state.isOverTarget) {\n            triggerPressEnd(createEvent(state.target, e), e.pointerType as PointerType, false);\n          }\n          state.isPressed = false;\n          state.isOverTarget = false;\n          state.activePointerId = null;\n          unbindEvents();\n          restoreTextSelection();\n        }\n      };\n    } else {\n      pressProps.onMouseDown = (e) => {\n        // Only handle left clicks\n        if (e.button !== 0) {\n          return;\n        }\n\n        // Due to browser inconsistencies, especially on mobile browsers, we prevent\n        // default on mouse down and handle focusing the pressable element ourselves.\n        e.preventDefault();\n        e.stopPropagation();\n        if (state.ignoreEmulatedMouseEvents) {\n          return;\n        }\n\n        state.isPressed = true;\n        state.isOverTarget = true;\n        state.target = e.currentTarget;\n\n        if (!isDisabled && !preventFocusOnPress) {\n          focusWithoutScrolling(e.currentTarget);\n        }\n\n        triggerPressStart(e, isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse');\n\n        addGlobalListener(document, 'mouseup', onMouseUp, false);\n      };\n\n      pressProps.onMouseEnter = (e) => {\n        e.stopPropagation();\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n          state.isOverTarget = true;\n          triggerPressStart(e, 'mouse');\n        }\n      };\n\n      pressProps.onMouseLeave = (e) => {\n        e.stopPropagation();\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n          state.isOverTarget = false;\n          triggerPressEnd(e, 'mouse', false);\n        }\n      };\n\n      pressProps.onMouseUp = (e) => {\n        if (!state.ignoreEmulatedMouseEvents && e.button === 0) {\n          triggerPressUp(e, isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse');\n        }\n      };\n\n      let onMouseUp = (e: MouseEvent) => {\n        // Only handle left clicks\n        if (e.button !== 0) {\n          return;\n        }\n\n        state.isPressed = false;\n        removeGlobalListener(document, 'mouseup', onMouseUp, false);\n\n        if (state.ignoreEmulatedMouseEvents) {\n          state.ignoreEmulatedMouseEvents = false;\n          return;\n        }\n\n        let pointerType: PointerType = isVirtualClick(e) ? 'virtual' : 'mouse';\n        if (isOverTarget(e, state.target)) {\n          triggerPressEnd(createEvent(state.target, e), pointerType);\n        } else if (state.isOverTarget) {\n          triggerPressEnd(createEvent(state.target, e), pointerType, false);\n        }\n\n        state.isOverTarget = false;\n      };\n\n      pressProps.onTouchStart = (e) => {\n        e.stopPropagation();\n        let touch = getTouchFromEvent(e.nativeEvent);\n        if (!touch) {\n          return;\n        }\n        state.activePointerId = touch.identifier;\n        state.ignoreEmulatedMouseEvents = true;\n        state.isOverTarget = true;\n        state.isPressed = true;\n        state.target = e.currentTarget;\n\n        // Due to browser inconsistencies, especially on mobile browsers, we prevent default\n        // on the emulated mouse event and handle focusing the pressable element ourselves.\n        if (!isDisabled && !preventFocusOnPress) {\n          focusWithoutScrolling(e.currentTarget);\n        }\n\n        disableTextSelection();\n        triggerPressStart(e, 'touch');\n\n        addGlobalListener(window, 'scroll', onScroll, true);\n      };\n\n      pressProps.onTouchMove = (e) => {\n        e.stopPropagation();\n        if (!state.isPressed) {\n          return;\n        }\n\n        let touch = getTouchById(e.nativeEvent, state.activePointerId);\n        if (touch && isOverTarget(touch, e.currentTarget)) {\n          if (!state.isOverTarget) {\n            state.isOverTarget = true;\n            triggerPressStart(e, 'touch');\n          }\n        } else if (state.isOverTarget) {\n          state.isOverTarget = false;\n          triggerPressEnd(e, 'touch', false);\n        }\n      };\n\n      pressProps.onTouchEnd = (e) => {\n        e.stopPropagation();\n        if (!state.isPressed) {\n          return;\n        }\n\n        let touch = getTouchById(e.nativeEvent, state.activePointerId);\n        if (touch && isOverTarget(touch, e.currentTarget)) {\n          triggerPressUp(e, 'touch');\n          triggerPressEnd(e, 'touch');\n        } else if (state.isOverTarget) {\n          triggerPressEnd(e, 'touch', false);\n        }\n\n        state.isPressed = false;\n        state.activePointerId = null;\n        state.isOverTarget = false;\n        state.ignoreEmulatedMouseEvents = true;\n        restoreTextSelection();\n        removeGlobalListener(window, 'scroll', onScroll, true);\n      };\n\n      pressProps.onTouchCancel = (e) => {\n        e.stopPropagation();\n        if (state.isPressed) {\n          cancelTouchEvent(e, 'touch');\n        }\n      };\n\n      let onScroll = (e: Event) => {\n        if (state.isPressed && (e.target as HTMLElement).contains(state.target)) {\n          cancelTouchEvent({\n            currentTarget: state.target,\n            shiftKey: false,\n            ctrlKey: false,\n            metaKey: false\n          }, 'touch');\n        }\n      };\n\n      let cancelTouchEvent = (e: EventBase, pointerType: PointerType) => {\n        if (state.isOverTarget) {\n          triggerPressEnd(e, pointerType, false);\n        }\n\n        state.isPressed = false;\n        state.activePointerId = null;\n        state.isOverTarget = false;\n        restoreTextSelection();\n        window.removeEventListener('scroll', onScroll, true);\n      };\n    }\n\n    return pressProps;\n  }, [isDisabled, onPressStart, onPressChange, onPressEnd, onPress, onPressUp, addGlobalListener, preventFocusOnPress, removeGlobalListener]);\n\n  // Remove user-select: none in case component unmounts immediately after pressStart\n  // eslint-disable-next-line arrow-body-style\n  useEffect(() => {\n    return () => restoreTextSelection();\n  }, []);\n\n  return {\n    isPressed: isPressedProp || isPressed,\n    pressProps: mergeProps(domProps, pressProps)\n  };\n}\n\nfunction isHTMLAnchorLink(target: HTMLElement): boolean {\n  return target.tagName === 'A' && target.hasAttribute('href');\n}\n\nfunction isValidKeyboardEvent(event: KeyboardEvent): boolean {\n  const {key, target} = event;\n  const element = target as HTMLElement;\n  const {tagName, isContentEditable} = element;\n  const role = element.getAttribute('role');\n  // Accessibility for keyboards. Space and Enter only.\n  // \"Spacebar\" is for IE 11\n  return (\n    (key === 'Enter' || key === ' ' || key === 'Spacebar') &&\n    (tagName !== 'INPUT' &&\n      tagName !== 'TEXTAREA' &&\n      isContentEditable !== true) &&\n    // A link with a valid href should be handled natively,\n    // unless it also has role='button' and was triggered using Space.\n    (!isHTMLAnchorLink(element) || (role === 'button' && key !== 'Enter')) &&\n    // An element with role='link' should only trigger with Enter key\n    !(role === 'link' && key !== 'Enter')\n  );\n}\n\nfunction getTouchFromEvent(event: TouchEvent): Touch | null {\n  const {targetTouches} = event;\n  if (targetTouches.length > 0) {\n    return targetTouches[0];\n  }\n  return null;\n}\n\nfunction getTouchById(\n  event: TouchEvent,\n  pointerId: null | number\n): null | Touch {\n  const changedTouches = event.changedTouches;\n  for (let i = 0; i < changedTouches.length; i++) {\n    const touch = changedTouches[i];\n    if (touch.identifier === pointerId) {\n      return touch;\n    }\n  }\n  return null;\n}\n\nfunction createEvent(target: HTMLElement, e: EventBase): EventBase {\n  return {\n    currentTarget: target,\n    shiftKey: e.shiftKey,\n    ctrlKey: e.ctrlKey,\n    metaKey: e.metaKey\n  };\n}\n\ninterface EventPoint {\n  clientX: number,\n  clientY: number\n}\n\nfunction isOverTarget(point: EventPoint, target: HTMLElement) {\n  let rect = target.getBoundingClientRect();\n  return (point.clientX || 0) >= (rect.left || 0) &&\n    (point.clientX || 0) <= (rect.right || 0) &&\n    (point.clientY || 0) >= (rect.top || 0) &&\n    (point.clientY || 0) <= (rect.bottom || 0);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {mergeProps} from '@react-aria/utils';\nimport {PressProps, usePress} from './usePress';\nimport React, {HTMLAttributes, ReactElement, RefObject, useRef} from 'react';\n\ninterface PressableProps extends PressProps {\n  children: ReactElement<HTMLAttributes<HTMLElement>, string>\n}\n\nexport const Pressable = React.forwardRef(({children, ...props}: PressableProps, ref: RefObject<HTMLElement>) => {\n  let newRef = useRef();\n  ref = ref ?? newRef;\n  let {pressProps} = usePress({...props, ref});\n  let child = React.Children.only(children);\n  return React.cloneElement(\n    child,\n    // @ts-ignore\n    {ref, ...mergeProps(child.props, pressProps)}\n  );\n});\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {mergeProps} from '@react-aria/utils';\nimport {PressProps} from './usePress';\nimport {PressResponderContext} from './context';\nimport React, {ReactNode, RefObject, useContext, useEffect, useRef} from 'react';\n\ninterface PressResponderProps extends PressProps {\n  children: ReactNode\n}\n\nexport const PressResponder = React.forwardRef(({children, ...props}: PressResponderProps, ref: RefObject<HTMLElement>) => {\n  let isRegistered = useRef(false);\n  let prevContext = useContext(PressResponderContext);\n  let context = mergeProps(prevContext || {}, {\n    ...props,\n    ref,\n    register() {\n      isRegistered.current = true;\n      if (prevContext) {\n        prevContext.register();\n      }\n    }\n  });\n\n  useEffect(() => {\n    if (!isRegistered.current) {\n      console.warn(\n        'A PressResponder was rendered without a pressable child. ' +\n        'Either call the usePress hook, or wrap your DOM node with <Pressable> component.'\n      );\n    }\n  }, []);\n\n  return (\n    <PressResponderContext.Provider value={context}>\n      {children}\n    </PressResponderContext.Provider>\n  );\n});\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {FocusEvent, HTMLAttributes} from 'react';\nimport {FocusEvents} from '@react-types/shared';\n\ninterface FocusProps extends FocusEvents {\n  /** Whether the focus events should be disabled. */\n  isDisabled?: boolean\n}\n\ninterface FocusResult {\n  /** Props to spread onto the target element. */\n  focusProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles focus events for the immediate target.\n * Focus events on child elements will be ignored.\n */\nexport function useFocus(props: FocusProps): FocusResult {\n  if (props.isDisabled) {\n    return {focusProps: {}};\n  }\n\n  let onFocus, onBlur;\n  if (props.onFocus || props.onFocusChange) {\n    onFocus = (e: FocusEvent) => {\n      if (e.target === e.currentTarget) {\n        if (props.onFocus) {\n          props.onFocus(e);\n        }\n\n        if (props.onFocusChange) {\n          props.onFocusChange(true);\n        }\n      }\n    };\n  }\n\n  if (props.onBlur || props.onFocusChange) {\n    onBlur = (e: FocusEvent) => {\n      if (e.target === e.currentTarget) {\n        if (props.onBlur) {\n          props.onBlur(e);\n        }\n\n        if (props.onFocusChange) {\n          props.onFocusChange(false);\n        }\n      }\n    };\n  }\n\n  return {\n    focusProps: {\n      onFocus,\n      onBlur\n    }\n  };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {isVirtualClick} from './utils';\nimport {useEffect, useState} from 'react';\n\ntype Modality = 'keyboard' | 'pointer' | 'virtual';\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\ninterface FocusVisibleProps {\n  /** Whether the element is a text input. */\n  isTextInput?: boolean,\n  /** Whether the element will be auto focused. */\n  autoFocus?: boolean\n}\n\ninterface FocusVisibleResult {\n  /** Whether keyboard focus is visible globally. */\n  isFocusVisible: boolean\n}\n\nlet currentModality = null;\nlet changeHandlers = new Set<Handler>();\nlet hasSetupGlobalListeners = false;\nlet hasEventBeforeFocus = false;\n\nconst isMac =\n  typeof window !== 'undefined' && window.navigator != null\n    ? /^Mac/.test(window.navigator.platform)\n    : false;\n\n// Only Tab or Esc keys will make focus visible on text input elements\nconst FOCUS_VISIBLE_INPUT_KEYS = {\n  Tab: true,\n  Escape: true\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n  for (let handler of changeHandlers) {\n    handler(modality, e);\n  }\n}\n\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */\nfunction isValidKey(e: KeyboardEvent) {\n  return !(e.metaKey || (!isMac && e.altKey) || e.ctrlKey);\n}\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n  hasEventBeforeFocus = true;\n  if (isValidKey(e)) {\n    currentModality = 'keyboard';\n    triggerChangeHandlers('keyboard', e);\n  }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n  currentModality = 'pointer';\n  if (e.type === 'mousedown' || e.type === 'pointerdown') {\n    hasEventBeforeFocus = true;\n    triggerChangeHandlers('pointer', e);\n  }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n  if (isVirtualClick(e)) {\n    hasEventBeforeFocus = true;\n    currentModality = 'virtual';\n  }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n  // Firefox fires two extra focus events when the user first clicks into an iframe:\n  // first on the window, then on the document. We ignore these events so they don't\n  // cause keyboard focus rings to appear.\n  if (e.target === window || e.target === document) {\n    return;\n  }\n\n  // If a focus event occurs without a preceding keyboard or pointer event, switch to keyboard modality.\n  // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n  if (!hasEventBeforeFocus) {\n    currentModality = 'keyboard';\n    triggerChangeHandlers('keyboard', e);\n  }\n\n  hasEventBeforeFocus = false;\n}\n\nfunction handleWindowBlur() {\n  // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n  // for example, since a subsequent focus event won't be fired.\n  hasEventBeforeFocus = false;\n}\n\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */\nfunction setupGlobalFocusEvents() {\n  if (typeof window === 'undefined' || hasSetupGlobalListeners) {\n    return;\n  }\n\n  // Programmatic focus() calls shouldn't affect the current input modality.\n  // However, we need to detect other cases when a focus event occurs without\n  // a preceding user event (e.g. screen reader focus). Overriding the focus\n  // method on HTMLElement.prototype is a bit hacky, but works.\n  let focus = HTMLElement.prototype.focus;\n  HTMLElement.prototype.focus = function () {\n    hasEventBeforeFocus = true;\n    focus.apply(this, arguments);\n  };\n\n  document.addEventListener('keydown', handleKeyboardEvent, true);\n  document.addEventListener('keyup', handleKeyboardEvent, true);\n  document.addEventListener('click', handleClickEvent, true);\n\n  // Register focus events on the window so they are sure to happen\n  // before React's event listeners (registered on the document).\n  window.addEventListener('focus', handleFocusEvent, true);\n  window.addEventListener('blur', handleWindowBlur, false);\n\n  if (typeof PointerEvent !== 'undefined') {\n    document.addEventListener('pointerdown', handlePointerEvent, true);\n    document.addEventListener('pointermove', handlePointerEvent, true);\n    document.addEventListener('pointerup', handlePointerEvent, true);\n  } else {\n    document.addEventListener('mousedown', handlePointerEvent, true);\n    document.addEventListener('mousemove', handlePointerEvent, true);\n    document.addEventListener('mouseup', handlePointerEvent, true);\n  }\n\n  hasSetupGlobalListeners = true;\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n  return currentModality !== 'pointer';\n}\n\nexport function getInteractionModality(): Modality {\n  return currentModality;\n}\n\nexport function setInteractionModality(modality: Modality) {\n  currentModality = modality;\n  triggerChangeHandlers(modality, null);\n}\n\n/**\n * Keeps state of the current modality.\n */\nexport function useInteractionModality(): Modality {\n  setupGlobalFocusEvents();\n\n  let [modality, setModality] = useState(currentModality);\n  useEffect(() => {\n    let handler = () => {\n      setModality(currentModality);\n    };\n\n    changeHandlers.add(handler);\n    return () => {\n      changeHandlers.delete(handler);\n    };\n  }, []);\n\n  return modality;\n}\n\n/**\n * Manages focus visible state for the page, and subscribes individual components for updates.\n */\nexport function useFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n  setupGlobalFocusEvents();\n\n  let {isTextInput, autoFocus} = props;\n  let [isFocusVisibleState, setFocusVisible] = useState(autoFocus || isFocusVisible());\n  useEffect(() => {\n    let handler = (modality: Modality, e: HandlerEvent) => {\n      // If this is a text input component, don't update the focus visible style when\n      // typing except for when the Tab and Escape keys are pressed.\n      if (isTextInput && modality === 'keyboard' && e instanceof KeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]) {\n        return;\n      }\n\n      setFocusVisible(isFocusVisible());\n    };\n\n    changeHandlers.add(handler);\n    return () => {\n      changeHandlers.delete(handler);\n    };\n  }, [isTextInput]);\n\n  return {isFocusVisible: isFocusVisibleState};\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {FocusEvent, HTMLAttributes, useRef} from 'react';\n\ninterface FocusWithinProps {\n  /** Whether the focus within events should be disabled. */\n  isDisabled?: boolean,\n  /** Handler that is called when the target element or a descendant receives focus. */\n  onFocusWithin?: (e: FocusEvent) => void,\n  /** Handler that is called when the target element and all descendants lose focus. */\n  onBlurWithin?: (e: FocusEvent) => void,\n  /** Handler that is called when the the focus within state changes. */\n  onFocusWithinChange?: (isFocusWithin: boolean) => void\n}\n\ninterface FocusWithinResult {\n  /** Props to spread onto the target element. */\n  focusWithinProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles focus events for the target and its descendants.\n */\nexport function useFocusWithin(props: FocusWithinProps): FocusWithinResult {\n  let state = useRef({\n    isFocusWithin: false\n  }).current;\n\n  if (props.isDisabled) {\n    return {focusWithinProps: {}};\n  }\n\n  let onFocus = (e: FocusEvent) => {\n    if (!state.isFocusWithin) {\n      if (props.onFocusWithin) {\n        props.onFocusWithin(e);\n      }\n\n      if (props.onFocusWithinChange) {\n        props.onFocusWithinChange(true);\n      }\n\n      state.isFocusWithin = true;\n    }\n  };\n\n  let onBlur = (e: FocusEvent) => {\n    // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n    // when moving focus inside the element. Only trigger if the currentTarget doesn't\n    // include the relatedTarget (where focus is moving).\n    if (state.isFocusWithin && !e.currentTarget.contains(e.relatedTarget as HTMLElement)) {\n      if (props.onBlurWithin) {\n        props.onBlurWithin(e);\n      }\n\n      if (props.onFocusWithinChange) {\n        props.onFocusWithinChange(false);\n      }\n\n      state.isFocusWithin = false;\n    }\n  };\n\n  return {\n    focusWithinProps: {\n      onFocus: onFocus,\n      onBlur: onBlur\n    }\n  };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {HoverEvents} from '@react-types/shared';\nimport {HTMLAttributes, useEffect, useMemo, useRef, useState} from 'react';\n\nexport interface HoverProps extends HoverEvents {\n  /** Whether the hover events should be disabled. */\n  isDisabled?: boolean\n}\n\ninterface HoverResult {\n  /** Props to spread on the target element. */\n  hoverProps: HTMLAttributes<HTMLElement>,\n  isHovered: boolean\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n  globalIgnoreEmulatedMouseEvents = true;\n\n  // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n  // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n  // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n  // the distant future because a user previously touched the element.\n  setTimeout(() => {\n    globalIgnoreEmulatedMouseEvents = false;\n  }, 50);\n}\n\nfunction handleGlobalPointerEvent(e) {\n  if (e.pointerType === 'touch') {\n    setGlobalIgnoreEmulatedMouseEvents();\n  }\n}\n\nfunction setupGlobalTouchEvents() {\n  if (typeof document === 'undefined') {\n    return;\n  }\n\n  if (typeof PointerEvent !== 'undefined') {\n    document.addEventListener('pointerup', handleGlobalPointerEvent);\n  } else {\n    document.addEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n  }\n\n  hoverCount++;\n  return () => {\n    hoverCount--;\n    if (hoverCount > 0) {\n      return;\n    }\n\n    if (typeof PointerEvent !== 'undefined') {\n      document.removeEventListener('pointerup', handleGlobalPointerEvent);\n    } else {\n      document.removeEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n    }\n  };\n}\n\n/**\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useHover(props: HoverProps): HoverResult {\n  let {\n    onHoverStart,\n    onHoverChange,\n    onHoverEnd,\n    isDisabled\n  } = props;\n\n  let [isHovered, setHovered] = useState(false);\n  let state = useRef({\n    isHovered: false,\n    ignoreEmulatedMouseEvents: false\n  }).current;\n\n  useEffect(setupGlobalTouchEvents, []);\n\n  let hoverProps = useMemo(() => {\n    let triggerHoverStart = (event, pointerType) => {\n      if (isDisabled || pointerType === 'touch' || state.isHovered) {\n        return;\n      }\n\n      state.isHovered = true;\n      let target = event.target;\n\n      if (onHoverStart) {\n        onHoverStart({\n          type: 'hoverstart',\n          target,\n          pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(true);\n      }\n\n      setHovered(true);\n    };\n\n    let triggerHoverEnd = (event, pointerType) => {\n      if (isDisabled || pointerType === 'touch' || !state.isHovered) {\n        return;\n      }\n\n      state.isHovered = false;\n      let target = event.target;\n\n      if (onHoverEnd) {\n        onHoverEnd({\n          type: 'hoverend',\n          target,\n          pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(false);\n      }\n\n      setHovered(false);\n    };\n\n    let hoverProps: HTMLAttributes<HTMLElement> = {};\n\n    if (typeof PointerEvent !== 'undefined') {\n      hoverProps.onPointerEnter = (e) => {\n        if (globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') {\n          return;\n        }\n\n        triggerHoverStart(e, e.pointerType);\n      };\n\n      hoverProps.onPointerLeave = (e) => {\n        triggerHoverEnd(e, e.pointerType);\n      };\n    } else {\n      hoverProps.onTouchStart = () => {\n        state.ignoreEmulatedMouseEvents = true;\n      };\n\n      hoverProps.onMouseEnter = (e) => {\n        if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n          triggerHoverStart(e, 'mouse');\n        }\n\n        state.ignoreEmulatedMouseEvents = false;\n      };\n\n      hoverProps.onMouseLeave = (e) => {\n        triggerHoverEnd(e, 'mouse');\n      };\n    }\n    return hoverProps;\n  }, [onHoverStart, onHoverChange, onHoverEnd, isDisabled, state]);\n\n  return {\n    hoverProps,\n    isHovered\n  };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {RefObject, SyntheticEvent, useEffect, useRef} from 'react';\n\ninterface InteractOutsideProps {\n  ref: RefObject<Element>,\n  onInteractOutside?: (e: SyntheticEvent) => void,\n  /** Whether the interact outside events should be disabled. */\n  isDisabled?: boolean\n}\n\n/**\n * Example, used in components like Dialogs and Popovers so they can close\n * when a user clicks outside them.\n */\nexport function useInteractOutside(props: InteractOutsideProps) {\n  let {ref, onInteractOutside, isDisabled} = props;\n  let stateRef = useRef({\n    isPointerDown: false,\n    ignoreEmulatedMouseEvents: false\n  });\n  let state = stateRef.current;\n\n  useEffect(() => {\n    let onPointerDown = (e) => {\n      if (isDisabled) {\n        return;\n      }\n      if (isValidEvent(e, ref)) {\n        state.isPointerDown = true;\n      }\n    };\n    /*\n    // FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=1675846 prevents us from using this pointerevent\n    // once it's fixed we can uncomment\n    // Use pointer events if available. Otherwise, fall back to mouse and touch events.\n    if (typeof PointerEvent !== 'undefined') {\n      let onPointerUp = (e) => {\n        if (state.isPointerDown && onInteractOutside && isValidEvent(e, ref)) {\n          state.isPointerDown = false;\n          onInteractOutside(e);\n        }\n      };\n\n      // changing these to capture phase fixed combobox\n      document.addEventListener('pointerdown', onPointerDown, true);\n      document.addEventListener('pointerup', onPointerUp, true);\n\n      return () => {\n        document.removeEventListener('pointerdown', onPointerDown, true);\n        document.removeEventListener('pointerup', onPointerUp, true);\n      };\n    } else {*/\n    let onMouseUp = (e) => {\n      if (isDisabled) {\n        return;\n      }\n      if (state.ignoreEmulatedMouseEvents) {\n        state.ignoreEmulatedMouseEvents = false;\n      } else if (state.isPointerDown && onInteractOutside && isValidEvent(e, ref)) {\n        state.isPointerDown = false;\n        onInteractOutside(e);\n      }\n    };\n\n    let onTouchEnd = (e) => {\n      if (isDisabled) {\n        return;\n      }\n      state.ignoreEmulatedMouseEvents = true;\n      if (onInteractOutside && state.isPointerDown && isValidEvent(e, ref)) {\n        state.isPointerDown = false;\n        onInteractOutside(e);\n      }\n    };\n\n    document.addEventListener('mousedown', onPointerDown, true);\n    document.addEventListener('mouseup', onMouseUp, true);\n    document.addEventListener('touchstart', onPointerDown, true);\n    document.addEventListener('touchend', onTouchEnd, true);\n\n    return () => {\n      document.removeEventListener('mousedown', onPointerDown, true);\n      document.removeEventListener('mouseup', onMouseUp, true);\n      document.removeEventListener('touchstart', onPointerDown, true);\n      document.removeEventListener('touchend', onTouchEnd, true);\n    };\n  }, [onInteractOutside, ref, state.ignoreEmulatedMouseEvents, state.isPointerDown, isDisabled]);\n}\n\nfunction isValidEvent(event, ref) {\n  if (event.button > 0) {\n    return false;\n  }\n\n  // if the event target is no longer in the document\n  if (event.target) {\n    const ownerDocument = event.target.ownerDocument;\n    if (!ownerDocument || !ownerDocument.body.contains(event.target)) {\n      return false;\n    }\n  }\n\n  return ref.current && !ref.current.contains(event.target);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {BaseEvent} from '@react-types/shared';\nimport {SyntheticEvent} from 'react';\n\n/**\n * This function wraps a React event handler to make stopPropagation the default, and support continuePropagation instead.\n */\nexport function createEventHandler<T extends SyntheticEvent>(handler: (e: BaseEvent<T>) => void): (e: T) => void {\n  if (!handler) {\n    return;\n  }\n\n  let shouldStopPropagation = true;\n  return (e: T) => {\n    let event: BaseEvent<T> = {\n      ...e,\n      preventDefault() {\n        e.preventDefault();\n      },\n      isDefaultPrevented() {\n        return e.isDefaultPrevented();\n      },\n      stopPropagation() {\n        console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n      },\n      continuePropagation() {\n        shouldStopPropagation = false;\n      }\n    };\n\n    handler(event);\n\n    if (shouldStopPropagation) {\n      e.stopPropagation();\n    }\n  };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {createEventHandler} from './createEventHandler';\nimport {HTMLAttributes} from 'react';\nimport {KeyboardEvents} from '@react-types/shared';\n\nexport interface KeyboardProps extends KeyboardEvents {\n  /** Whether the keyboard events should be disabled. */\n  isDisabled?: boolean\n}\n\ninterface KeyboardResult {\n  /** Props to spread onto the target element. */\n  keyboardProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles keyboard interactions for a focusable element.\n */\nexport function useKeyboard(props: KeyboardProps): KeyboardResult {\n  return {\n    keyboardProps: props.isDisabled ? {} : {\n      onKeyDown: createEventHandler(props.onKeyDown),\n      onKeyUp: createEventHandler(props.onKeyUp)\n    }\n  };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {disableTextSelection, restoreTextSelection}  from './textSelection';\nimport {MoveEvents, PointerType} from '@react-types/shared';\nimport React, {HTMLAttributes, useMemo, useRef} from 'react';\nimport {useGlobalListeners} from '@react-aria/utils';\n\ninterface MoveResult {\n  /** Props to spread on the target element. */\n  moveProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles move interactions across mouse, touch, and keyboard, including dragging with\n * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and\n * platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useMove(props: MoveEvents): MoveResult {\n  let {onMoveStart, onMove, onMoveEnd} = props;\n\n  let state = useRef<{\n    didMove: boolean,\n    lastPosition: {pageX: number, pageY: number} | null,\n    id: number | null\n  }>({didMove: false, lastPosition: null, id: null});\n\n  let {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n  let moveProps = useMemo(() => {\n    let moveProps: HTMLAttributes<HTMLElement> = {};\n\n    let start = () => {\n      disableTextSelection();\n      state.current.didMove = false;\n    };\n    let move = (pointerType: PointerType, deltaX: number, deltaY: number) => {\n      if (deltaX === 0 && deltaY === 0) {\n        return;\n      }\n\n      if (!state.current.didMove) {\n        state.current.didMove = true;\n        onMoveStart?.({\n          type: 'movestart',\n          pointerType\n        });\n      }\n      onMove({\n        type: 'move',\n        pointerType,\n        deltaX: deltaX,\n        deltaY: deltaY\n      });\n    };\n    let end = (pointerType: PointerType) => {\n      restoreTextSelection();\n      if (state.current.didMove) {\n        onMoveEnd?.({\n          type: 'moveend',\n          pointerType\n        });\n      }\n    };\n\n    if (typeof PointerEvent === 'undefined') {\n      let onMouseMove = (e: MouseEvent) => {\n        if (e.button === 0) {\n          move('mouse', e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};\n        }\n      };\n      let onMouseUp = (e: MouseEvent) => {\n        if (e.button === 0) {\n          end('mouse');\n          removeGlobalListener(window, 'mousemove', onMouseMove, false);\n          removeGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n      moveProps.onMouseDown = (e: React.MouseEvent) => {\n        if (e.button === 0) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};\n          addGlobalListener(window, 'mousemove', onMouseMove, false);\n          addGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      let onTouchMove = (e: TouchEvent) => {\n        // @ts-ignore\n        let touch = [...e.changedTouches].findIndex(({identifier}) => identifier === state.current.id);\n        if (touch >= 0) {\n          let {pageX, pageY} = e.changedTouches[touch];\n          move('touch', pageX - state.current.lastPosition.pageX, pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {pageX, pageY};\n        }\n      };\n      let onTouchEnd = (e: TouchEvent) => {\n        // @ts-ignore\n        let touch = [...e.changedTouches].findIndex(({identifier}) => identifier === state.current.id);\n        if (touch >= 0) {\n          end('touch');\n          state.current.id = null;\n          removeGlobalListener(window, 'touchmove', onTouchMove);\n          removeGlobalListener(window, 'touchend', onTouchEnd);\n          removeGlobalListener(window, 'touchcancel', onTouchEnd);\n        }\n      };\n      moveProps.onTouchStart = (e: React.TouchEvent) => {\n        if (e.changedTouches.length === 0 || state.current.id != null) {\n          return;\n        }\n\n        let {pageX, pageY, identifier} = e.changedTouches[0];\n        start();\n        e.stopPropagation();\n        e.preventDefault();\n        state.current.lastPosition = {pageX, pageY};\n        state.current.id = identifier;\n        addGlobalListener(window, 'touchmove', onTouchMove, false);\n        addGlobalListener(window, 'touchend', onTouchEnd, false);\n        addGlobalListener(window, 'touchcancel', onTouchEnd, false);\n      };\n    } else {\n      let onPointerMove = (e: PointerEvent) => {\n        if (e.pointerId === state.current.id) {\n          // @ts-ignore\n          let pointerType: PointerType = e.pointerType || 'mouse';\n\n          // Problems with PointerEvent#movementX/movementY:\n          // 1. it is always 0 on macOS Safari.\n          // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS\n          move(pointerType, e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};\n        }\n      };\n\n      let onPointerUp = (e: PointerEvent) => {\n        if (e.pointerId === state.current.id) {\n            // @ts-ignore\n          let pointerType: PointerType = e.pointerType || 'mouse';\n          end(pointerType);\n          state.current.id = null;\n          removeGlobalListener(window, 'pointermove', onPointerMove, false);\n          removeGlobalListener(window, 'pointerup', onPointerUp, false);\n          removeGlobalListener(window, 'pointercancel', onPointerUp, false);\n        }\n      };\n\n      moveProps.onPointerDown = (e: React.PointerEvent) => {\n        if (e.button === 0 && state.current.id == null) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};\n          state.current.id = e.pointerId;\n          addGlobalListener(window, 'pointermove', onPointerMove, false);\n          addGlobalListener(window, 'pointerup', onPointerUp, false);\n          addGlobalListener(window, 'pointercancel', onPointerUp, false);\n        }\n      };\n    }\n\n    let triggerKeyboardMove = (deltaX: number, deltaY: number) => {\n      start();\n      move('keyboard', deltaX, deltaY);\n      end('keyboard');\n    };\n\n    moveProps.onKeyDown = (e) => {\n      switch (e.key) {\n        case 'Left':\n        case 'ArrowLeft':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(-1, 0);\n          break;\n        case 'Right':\n        case 'ArrowRight':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(1, 0);\n          break;\n        case 'Up':\n        case 'ArrowUp':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, -1);\n          break;\n        case 'Down':\n        case 'ArrowDown':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, 1);\n          break;\n      }\n    };\n\n    return moveProps;\n  }, [state, onMoveStart, onMove, onMoveEnd, addGlobalListener, removeGlobalListener]);\n\n  return {moveProps};\n}\n"]},"metadata":{},"sourceType":"module"}