{ "version": 3, "sources": ["../../../node_modules/react/cjs/react-jsx-runtime.production.min.js", "../../../node_modules/react/jsx-runtime.js", "../../../node_modules/hammerjs/hammer.js", "../../javascript/warp/components/Dialog.tsx", "../../../node_modules/@radix-ui/react-dialog/src/Dialog.tsx", "../../../node_modules/@radix-ui/primitive/src/primitive.tsx", "../../../node_modules/@radix-ui/react-compose-refs/src/composeRefs.tsx", "../../../node_modules/@radix-ui/react-context/src/createContext.tsx", "../../../node_modules/@radix-ui/react-id/src/id.tsx", "../../../node_modules/@radix-ui/react-use-layout-effect/src/useLayoutEffect.tsx", "../../../node_modules/@radix-ui/react-use-controllable-state/src/useControllableState.tsx", "../../../node_modules/@radix-ui/react-use-callback-ref/src/useCallbackRef.tsx", "../../../node_modules/@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../../node_modules/@radix-ui/react-primitive/src/Primitive.tsx", "../../../node_modules/@radix-ui/react-slot/src/Slot.tsx", "../../../node_modules/@radix-ui/react-use-escape-keydown/src/useEscapeKeydown.tsx", "../../../node_modules/@radix-ui/react-focus-scope/src/FocusScope.tsx", "../../../node_modules/@radix-ui/react-portal/src/Portal.tsx", "../../../node_modules/@radix-ui/react-presence/src/Presence.tsx", "../../../node_modules/@radix-ui/react-presence/src/useStateMachine.tsx", "../../../node_modules/@radix-ui/react-focus-guards/src/FocusGuards.tsx", "../../../node_modules/react-remove-scroll/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/react-remove-scroll/dist/es2015/Combination.js", "../../../node_modules/react-remove-scroll/dist/es2015/UI.js", "../../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js", "../../../node_modules/use-callback-ref/dist/es2015/assignRef.js", "../../../node_modules/use-callback-ref/dist/es2015/useRef.js", "../../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js", "../../../node_modules/tslib/tslib.es6.mjs", "../../../node_modules/use-sidecar/dist/es2015/medium.js", "../../../node_modules/use-sidecar/dist/es2015/exports.js", "../../../node_modules/react-remove-scroll/dist/es2015/medium.js", "../../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js", "../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js", "../../../node_modules/react-style-singleton/dist/es2015/hook.js", "../../../node_modules/get-nonce/dist/es2015/index.js", "../../../node_modules/react-style-singleton/dist/es2015/singleton.js", "../../../node_modules/react-style-singleton/dist/es2015/component.js", "../../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js", "../../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js", "../../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js", "../../../node_modules/react-remove-scroll/dist/es2015/sidecar.js", "../../../node_modules/aria-hidden/dist/es2015/index.js", "../../../node_modules/@radix-ui/react-visually-hidden/src/VisuallyHidden.tsx", "../../javascript/warp/icons/CloseIcon.tsx", "../../javascript/warp/utilities/images.ts", "../../javascript/warp/components/pdp/Zoom/ZoomableImage.tsx", "../../javascript/warp/components/pdp/Zoom/ZoomIcon.tsx", "../../javascript/warp/components/pdp/Badges/Badge.tsx", "../../javascript/warp/components/pdp/Badges/StarIcon.tsx", "../../javascript/warp/components/pdp/Badges/DiscountIcon.tsx", "../../javascript/warp/components/pdp/Badges/ColoursIcon.tsx", "../../javascript/warp/components/pdp/Badges/Badges.tsx", "../../javascript/warp/components/pdp/Zoom/ZoomAndPan.tsx"], "sourcesContent": ["/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n", "/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n", "import * as React from \"react\"\nimport * as RadixDialog from \"@radix-ui/react-dialog\"\nimport * as VisuallyHidden from \"@radix-ui/react-visually-hidden\"\nimport classNames from \"classnames\"\nimport { CloseIcon } from \"../icons/CloseIcon\"\nimport { useTranslation } from \"../context/TranslationContext\"\nexport interface DialogProps {\n title?: string | React.ReactNode\n description?: string | React.ReactNode\n modalName: string\n sidebar?: React.ReactNode\n children: React.ReactNode\n closeText?: string\n footer?: React.ReactNode\n contentClassName?: string\n headerClassName?: string\n headerWrapperClassName?: string\n footerClassName?: string\n onOpenCallback?: (event?: Event) => void\n onCloseCallback?: (event?: Event) => void\n}\n\nfunction Dialog({\n title,\n description,\n modalName,\n sidebar,\n children,\n footer,\n closeText,\n contentClassName,\n headerClassName,\n headerWrapperClassName,\n footerClassName,\n onOpenCallback,\n onCloseCallback\n}: DialogProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const translations = useTranslation()\n closeText = closeText || translations[\"components.products.dialog_close\"]\n\n const onOpen = (event?: Event) => {\n setIsOpen(true)\n onOpenCallback?.(event)\n }\n\n const onClose = (event?: Event) => {\n setIsOpen(false)\n onCloseCallback?.(event)\n }\n\n const handleOpenChange = (open: boolean) => (open ? onOpen() : onClose())\n\n React.useEffect(() => {\n document.addEventListener(`${modalName}ModalOpen`, onOpen)\n document.addEventListener(`${modalName}ModalClose`, onClose)\n\n return () => {\n document.removeEventListener(`${modalName}ModalOpen`, onOpen)\n document.removeEventListener(`${modalName}ModalClose`, onClose)\n }\n }, [])\n\n const contentProps = description\n ? {}\n : {\n \"aria-describedby\": undefined\n }\n\n return (\n \n \n \n \n {sidebar}\n \n \n {React.isValidElement(title) ? (\n title\n ) : (\n \n {title}\n \n )}\n \n \n {closeText && {closeText}}\n \n \n \n {description && (\n \n {description}\n \n )}\n \n {children}\n \n {footer && (\n \n
\n {footer}\n
\n \n )}\n \n
\n
\n )\n}\n\nexport default Dialog\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext, createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps

= P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject;\n contentRef: React.RefObject;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC = (props: ScopedProps) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n \n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n \n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC = (props: ScopedProps) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n \n {React.Children.map(children, (child) => (\n \n \n {child}\n \n \n ))}\n \n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n \n \n \n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst DialogOverlayImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n \n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n \n {context.modal ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit {}\n\nconst DialogContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ninterface DialogContentImplProps extends Omit {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (beacuse of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n \n context.onOpenChange(false)}\n />\n \n {process.env.NODE_ENV !== 'production' && (\n <>\n \n \n \n )}\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ElementRef;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ElementRef;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ElementRef;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n", "function composeEventHandlers(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport { composeEventHandlers };\n", "import * as React from 'react';\n\ntype PossibleRef = React.Ref | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef(ref: PossibleRef, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n (ref as React.MutableRefObject).current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs(...refs: PossibleRef[]) {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs(...refs: PossibleRef[]) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n", "import * as React from 'react';\n\nfunction createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext(defaultContext);\n\n function Provider(props: ContextValueType & { children: React.ReactNode }) {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n }\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope = { [scopeName: string]: React.Context[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n function Provider(\n props: ContextValueType & { scope: Scope; children: React.ReactNode }\n ) {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName][index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n }\n\n function useContext(consumerName: string, scope: Scope) {\n const Context = scope?.[scopeName][index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n", "import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)['useId'.toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n const [id, setId] = React.useState(useReactId());\n // React versions older than 18 will have client-side ids only.\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n", "import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n", "import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\ntype UseControllableStateParams = {\n prop?: T | undefined;\n defaultProp?: T | undefined;\n onChange?: (state: T) => void;\n};\n\ntype SetStateFn = (prevState?: T) => T;\n\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {},\n}: UseControllableStateParams) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n\n const setValue: React.Dispatch> = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const setter = nextValue as SetStateFn;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value as T);\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, handleChange]\n );\n\n return [value, setValue] as const;\n}\n\nfunction useUncontrolledState({\n defaultProp,\n onChange,\n}: Omit, 'prop'>) {\n const uncontrolledState = React.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React.useRef(value);\n const handleChange = useCallbackRef(onChange);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n handleChange(value as T);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef, handleChange]);\n\n return uncontrolledState;\n}\n\nexport { useControllableState };\n", "import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Slot } from '@radix-ui/react-slot';\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent };\ntype PrimitivePropsWithRef = React.ComponentPropsWithRef & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent\n extends React.ForwardRefExoticComponent> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Node = React.forwardRef((props: PrimitivePropsWithRef, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return ;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click \uD83D\uDC4E\n * target.dispatchEvent(new Event(\u2018click\u2019))\n *\n * dispatching a custom type within a non-discrete event \uD83D\uDC4E\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(\u2018customType\u2019))}\n *\n * dispatching a custom type within a `discrete` event \uD83D\uDC4D\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(\u2018customType\u2019))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n", "import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes {\n children?: React.ReactNode;\n}\n\nconst Slot = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children as React.ReactNode;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props.children as React.ReactNode)\n : null;\n } else {\n return child;\n }\n });\n\n return (\n \n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n \n );\n }\n\n return (\n \n {children}\n \n );\n});\n\nSlot.displayName = 'Slot';\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\nconst SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n // @ts-ignore\n ref: forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef,\n });\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nSlotClone.displayName = 'SlotClone';\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst Slottable = ({ children }: { children: React.ReactNode }) => {\n return <>{children};\n};\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n return React.isValidElement(child) && child.type === Slottable;\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Slot;\n\nexport {\n Slot,\n Slottable,\n //\n Root,\n};\nexport type { SlotProps };\n", "import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n", "import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n \n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n", "import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState();\n const stylesRef = React.useRef({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied\n // a frame after the animation ends, creating a flash of visible content.\n // By manually flushing we ensure they sync within a frame, removing the flash.\n ReactDOM.flushSync(() => send('ANIMATION_END'));\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n", "import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n", "export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n", "/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n", "import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n", "import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // \uD83D\uDC48 merge together\n * return

...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n", "import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n", "import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n", "import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if ('touches' in event && event.touches.length === 2) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n", "import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of d) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n", "import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n", "var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n", "import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * VisuallyHidden\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'VisuallyHidden';\n\ntype VisuallyHiddenElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface VisuallyHiddenProps extends PrimitiveSpanProps {}\n\nconst VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return (\n \n );\n }\n);\n\nVisuallyHidden.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = VisuallyHidden;\n\nexport {\n VisuallyHidden,\n //\n Root,\n};\nexport type { VisuallyHiddenProps };\n", "import React from \"react\"\n\nexport function CloseIcon() {\n return (\n \n \n \n )\n}\n", "const getLastSrcsetUrl = (srcset: { [key: string]: string }): string => {\n const sizes = Object.keys(srcset)\n const lastSize = sizes[sizes.length - 1]\n return srcset[lastSize]\n}\n\nconst buildSrcsetString = (srcset: { [key: string]: string }): string => {\n return Object.entries(srcset)\n .map(([size, url]) => `${url} ${size}`)\n .join(\", \")\n}\n\nexport { getLastSrcsetUrl, buildSrcsetString }\n", "import React from \"react\"\nimport { Image } from \"@warp/types/product\"\nimport { ZoomIcon } from \"./ZoomIcon\"\nimport { buildSrcsetString, getLastSrcsetUrl } from \"@warp/utilities/images\"\nimport Badge from \"../Badges/Badge\"\n\ntype PropType = {\n image: Image | Pick\n toggleZoom: React.MouseEventHandler\n width?: string\n height?: string\n sizes?: string\n className?: string\n}\n\nconst ZoomableImage: React.FC = ({\n image,\n toggleZoom: originalToggleZoom,\n sizes = \"100vw\",\n width = \"100%\",\n height = \"\",\n className = \"zoom-container\"\n}) => {\n const toggleZoom: React.MouseEventHandler<\n HTMLButtonElement | HTMLImageElement\n > = (event) => {\n originalToggleZoom(event)\n }\n\n return (\n
\n \n \n
\n )\n}\n\nexport default ZoomableImage\n", "import React from \"react\"\n\nconst ZoomIcon = () => {\n return (\n \n \n \n )\n}\n\nexport { ZoomIcon }\n", "import React, { ReactNode } from \"react\"\nimport {\n Badge as BadgeType,\n MultipleBadge,\n SingleBadge\n} from \"@warp/types/product\"\nimport { StarIcon } from \"./StarIcon\"\nimport { DiscountIcon } from \"./DiscountIcon\"\nimport { ColoursIcon } from \"./ColoursIcon\"\n\ntype PropType = {\n badge: BadgeType\n variantId?: number\n children?: ReactNode\n}\n\nconst renderBadgeIcon = (key: string) => {\n switch (key) {\n case \"new\":\n return \n case \"on_sale\":\n case \"variants_on_sale\":\n return \n case \"colours\":\n return \n default:\n return null\n }\n}\n\nfunction isSingleBadge(badge: BadgeType): badge is SingleBadge {\n return \"value\" in badge\n}\n\nfunction isMultipleBadge(badge: BadgeType): badge is MultipleBadge {\n return \"values\" in badge\n}\n\nconst Badge = ({ badge, children, variantId }: PropType) => {\n if (\n !badge.key ||\n (isSingleBadge(badge) && !badge.value) ||\n (isMultipleBadge(badge) && badge.values.length === 0)\n ) {\n return null\n }\n\n const text = isSingleBadge(badge)\n ? badge.value\n : badge.values.find((value) => value.variantId === variantId)?.text\n\n if (!text) {\n return null\n }\n\n const badgeIcon = renderBadgeIcon(badge.key)\n const badgeIconClasses = `badge__icon badge__icon--${badge.key}`\n\n return (\n \n {children ? (\n <>\n {children}\n \n \n ) : (\n <>\n {badgeIcon}\n \n \n )}\n \n )\n}\n\nexport default Badge\n", "import React from \"react\"\n\nconst StarIcon = () => {\n return (\n \n \n \n )\n}\n\nexport { StarIcon }\n", "import React from \"react\"\n\nconst DiscountIcon = () => {\n return (\n \n \n \n )\n}\n\nexport { DiscountIcon }\n", "import React from \"react\"\n\nconst ColoursIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { ColoursIcon }\n", "import React from \"react\"\nimport Badge from \"./Badge\"\nimport { Badge as BadgeType } from \"@warp/types/product\"\n\ntype PropType = {\n badges?: BadgeType[]\n variantId: number\n}\n\nconst Badges = ({ badges, variantId }: PropType) => {\n if (!badges || badges.length === 0) return null\n\n return (\n <>\n {badges.map((badge, index) => (\n \n ))}\n \n )\n}\n\nexport default Badges\n", "import React, { useEffect, useRef, useState } from \"react\"\nimport Hammer from \"hammerjs\"\n\ntype PropType = {\n largeImage: string\n alt: string\n minScale?: number\n maxScale?: number\n objectFit?: \"contain\" | \"cover\"\n}\n\nconst ZoomAndPan: React.FC = ({\n largeImage,\n alt,\n minScale = 1.5,\n maxScale = 4,\n objectFit = \"cover\"\n}) => {\n const zoomContainerRef = useRef(null)\n const imageRef = useRef(null)\n const [position, setPosition] = useState({ x: 0, y: 0 })\n const [scale, setScale] = useState(minScale)\n const positionRef = useRef({ x: 0, y: 0 })\n const scaleRef = useRef(minScale)\n const initialPanPositionRef = useRef({ x: 0, y: 0 })\n const initialScaleRef = useRef(minScale)\n\n useEffect(() => {\n // Initial centering of the image\n const centerImage = () => {\n if (zoomContainerRef.current && imageRef.current) {\n const containerWidth = zoomContainerRef.current.clientWidth\n const containerHeight = zoomContainerRef.current.clientHeight\n const imageWidth = imageRef.current.clientWidth\n const imageHeight = imageRef.current.clientHeight\n\n const initialX = (containerWidth - imageWidth) / 2\n const initialY = (containerHeight - imageHeight) / 2\n\n setPosition({ x: initialX, y: initialY })\n positionRef.current = { x: initialX, y: initialY }\n imageRef.current.style.transform = `translate(${initialX}px, ${initialY}px) scale(${scaleRef.current})`\n }\n }\n\n // apply boundaries to the image so it doesn't go out of the container while panning.\n const applyBoundaries = (x: number, y: number, scale: number) => {\n if (!zoomContainerRef.current || !imageRef.current) return { x, y }\n\n const containerWidth = zoomContainerRef.current.clientWidth\n const containerHeight = zoomContainerRef.current.clientHeight\n const imageWidth = imageRef.current.clientWidth * scale\n const imageHeight = imageRef.current.clientHeight * scale\n\n let minX = -(imageWidth - containerWidth) / 2\n let maxX = (imageWidth - containerWidth) / 2\n let minY = (containerHeight - imageHeight) / 2\n let maxY = -(containerHeight - imageHeight) / 2\n\n const boundedX = Math.max(minX, Math.min(maxX, x))\n const boundedY = Math.max(minY, Math.min(maxY, y))\n\n return { x: boundedX, y: boundedY }\n }\n\n if (imageRef.current) {\n if (imageRef.current.complete) {\n centerImage()\n } else {\n imageRef.current.onload = centerImage\n }\n\n // Hammer.js instantiation and event handling\n const hammer = new Hammer(imageRef.current, {\n inputClass: Hammer.TouchMouseInput\n })\n\n hammer.get(\"pan\").set({ direction: Hammer.DIRECTION_ALL })\n hammer.get(\"pinch\").set({ enable: true })\n\n hammer.on(\"panstart\", () => {\n initialPanPositionRef.current = {\n x: positionRef.current.x,\n y: positionRef.current.y\n }\n })\n\n hammer.on(\"pan\", (ev) => {\n let newPosX = initialPanPositionRef.current.x + ev.deltaX\n let newPosY = initialPanPositionRef.current.y + ev.deltaY\n\n const boundedPos = applyBoundaries(newPosX, newPosY, scaleRef.current)\n newPosX = boundedPos.x\n newPosY = boundedPos.y\n\n if (imageRef.current) {\n imageRef.current.style.transform = `translate(${newPosX}px, ${newPosY}px) scale(${scaleRef.current})`\n }\n })\n\n hammer.on(\"panend\", (ev) => {\n let finalPosX = initialPanPositionRef.current.x + ev.deltaX\n let finalPosY = initialPanPositionRef.current.y + ev.deltaY\n\n const boundedPos = applyBoundaries(\n finalPosX,\n finalPosY,\n scaleRef.current\n )\n finalPosX = boundedPos.x\n finalPosY = boundedPos.y\n\n positionRef.current = { x: finalPosX, y: finalPosY }\n setPosition({ x: finalPosX, y: finalPosY })\n })\n\n hammer.on(\"pinchstart\", () => {\n initialScaleRef.current = scaleRef.current\n })\n\n hammer.on(\"pinch\", (ev) => {\n let newScale = initialScaleRef.current * ev.scale\n\n if (newScale < minScale) newScale = minScale\n if (newScale > maxScale) newScale = maxScale\n\n scaleRef.current = newScale\n setScale(newScale)\n\n const boundedPos = applyBoundaries(\n positionRef.current.x,\n positionRef.current.y,\n newScale\n )\n const newPosX = boundedPos.x\n const newPosY = boundedPos.y\n\n positionRef.current = { x: newPosX, y: newPosY }\n setPosition({ x: newPosX, y: newPosY })\n\n if (imageRef.current) {\n imageRef.current.style.transform = `translate(${newPosX}px, ${newPosY}px) scale(${newScale})`\n }\n })\n }\n\n window.addEventListener(\"resize\", centerImage)\n\n return () => {\n window.removeEventListener(\"resize\", centerImage)\n }\n }, [])\n\n return (\n \n \n \n )\n}\n\nexport default ZoomAndPan\n"], "mappings": "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", "names": ["require_react_jsx_runtime_production_min", "__commonJSMin", "exports", "f", "g", "h", "m", "n", "p", "q", "c", "a", "k", "b", "d", "e", "l", "require_jsx_runtime", "__commonJSMin", "exports", "module", "require_hammer", "__commonJSMin", "exports", "module", "window", "document", "exportName", "undefined", "VENDOR_PREFIXES", "TEST_ELEMENT", "TYPE_FUNCTION", "round", "abs", "now", "setTimeoutContext", "fn", "timeout", "context", "bindFn", "invokeArrayArg", "arg", "each", "obj", "iterator", "i", "deprecate", "method", "name", "message", "deprecationMessage", "e", "stack", "log", "assign", "target", "output", "index", "source", "nextKey", "extend", "dest", "src", "merge", "keys", "inherit", "child", "base", "properties", "baseP", "childP", "boolOrFn", "val", "args", "ifUndefined", "val1", "val2", "addEventListeners", "types", "handler", "splitStr", "type", "removeEventListeners", "hasParent", "node", "parent", "inStr", "str", "find", "inArray", "findByKey", "toArray", "uniqueArray", "key", "sort", "results", "values", "a", "b", "prefixed", "property", "prefix", "prop", "camelProp", "_uniqueId", "uniqueId", "getWindowForElement", "element", "doc", "MOBILE_REGEX", "SUPPORT_TOUCH", "SUPPORT_POINTER_EVENTS", "SUPPORT_ONLY_TOUCH", "INPUT_TYPE_TOUCH", "INPUT_TYPE_PEN", "INPUT_TYPE_MOUSE", "INPUT_TYPE_KINECT", "COMPUTE_INTERVAL", "INPUT_START", "INPUT_MOVE", "INPUT_END", "INPUT_CANCEL", "DIRECTION_NONE", "DIRECTION_LEFT", "DIRECTION_RIGHT", "DIRECTION_UP", "DIRECTION_DOWN", "DIRECTION_HORIZONTAL", "DIRECTION_VERTICAL", "DIRECTION_ALL", "PROPS_XY", "PROPS_CLIENT_XY", "Input", "manager", "callback", "self", "ev", "createInputInstance", "Type", "inputClass", "PointerEventInput", "TouchInput", "TouchMouseInput", "MouseInput", "inputHandler", "eventType", "input", "pointersLen", "changedPointersLen", "isFirst", "isFinal", "computeInputData", "session", "pointers", "pointersLength", "simpleCloneInputData", "firstInput", "firstMultiple", "offsetCenter", "center", "getCenter", "getAngle", "getDistance", "computeDeltaXY", "getDirection", "overallVelocity", "getVelocity", "getScale", "getRotation", "computeIntervalInputData", "offset", "prevDelta", "prevInput", "last", "deltaTime", "velocity", "velocityX", "velocityY", "direction", "deltaX", "deltaY", "v", "x", "y", "p1", "p2", "props", "start", "end", "MOUSE_INPUT_MAP", "MOUSE_ELEMENT_EVENTS", "MOUSE_WINDOW_EVENTS", "POINTER_INPUT_MAP", "IE10_POINTER_TYPE_ENUM", "POINTER_ELEMENT_EVENTS", "POINTER_WINDOW_EVENTS", "store", "removePointer", "eventTypeNormalized", "pointerType", "isTouch", "storeIndex", "SINGLE_TOUCH_INPUT_MAP", "SINGLE_TOUCH_TARGET_EVENTS", "SINGLE_TOUCH_WINDOW_EVENTS", "SingleTouchInput", "touches", "normalizeSingleTouches", "all", "changed", "TOUCH_INPUT_MAP", "TOUCH_TARGET_EVENTS", "getTouches", "allTouches", "targetIds", "targetTouches", "changedTouches", "changedTargetTouches", "touch", "DEDUP_TIMEOUT", "DEDUP_DISTANCE", "inputEvent", "inputData", "isMouse", "recordTouches", "isSyntheticEvent", "eventData", "setLastTouch", "lastTouch", "lts", "removeLastTouch", "t", "dx", "dy", "PREFIXED_TOUCH_ACTION", "NATIVE_TOUCH_ACTION", "TOUCH_ACTION_COMPUTE", "TOUCH_ACTION_AUTO", "TOUCH_ACTION_MANIPULATION", "TOUCH_ACTION_NONE", "TOUCH_ACTION_PAN_X", "TOUCH_ACTION_PAN_Y", "TOUCH_ACTION_MAP", "getTouchActionProps", "TouchAction", "value", "actions", "recognizer", "cleanTouchActions", "srcEvent", "hasNone", "hasPanY", "hasPanX", "isTapPointer", "isTapMovement", "isTapTouchTime", "touchMap", "cssSupports", "STATE_POSSIBLE", "STATE_BEGAN", "STATE_CHANGED", "STATE_ENDED", "STATE_RECOGNIZED", "STATE_CANCELLED", "STATE_FAILED", "Recognizer", "options", "otherRecognizer", "simultaneous", "getRecognizerByNameIfManager", "requireFail", "state", "emit", "event", "stateStr", "inputDataClone", "directionStr", "AttrRecognizer", "optionPointers", "isRecognized", "isValid", "PanRecognizer", "hasMoved", "distance", "PinchRecognizer", "inOut", "PressRecognizer", "validPointers", "validMovement", "validTime", "RotateRecognizer", "SwipeRecognizer", "TapRecognizer", "validTouchTime", "validInterval", "validMultiTap", "tapCount", "Hammer", "Manager", "STOP", "FORCED_STOP", "toggleCssProps", "item", "force", "recognizers", "curRecognizer", "existing", "events", "handlers", "data", "triggerDomEvent", "add", "gestureEvent", "freeGlobal", "React", "React", "composeEventHandlers", "originalEventHandler", "ourEventHandler", "checkForDefaultPrevented", "event", "React", "setRef", "ref", "value", "composeRefs", "refs", "node", "useComposedRefs", "React", "import_jsx_runtime", "createContext", "rootComponentName", "defaultContext", "Context", "Provider", "props", "children", "context", "value", "useContext", "consumerName", "createContextScope", "scopeName", "createContextScopeDeps", "defaultContexts", "BaseContext", "index", "scope", "createScope", "scopeContexts", "contexts", "composeContextScopes", "scopes", "baseScope", "scopeHooks", "overrideScopes", "nextScopes", "useScope", "currentScope", "React", "React", "useLayoutEffect", "useReactId", "React", "count", "useId", "deterministicId", "id", "setId", "useLayoutEffect2", "reactId", "React", "React", "useCallbackRef", "callback", "callbackRef", "args", "useControllableState", "prop", "defaultProp", "onChange", "uncontrolledProp", "setUncontrolledProp", "useUncontrolledState", "isControlled", "value", "handleChange", "useCallbackRef", "setValue", "nextValue", "uncontrolledState", "prevValueRef", "React", "React", "ReactDOM", "React", "import_jsx_runtime", "Slot", "props", "forwardedRef", "children", "slotProps", "childrenArray", "slottable", "isSlottable", "newElement", "newChildren", "child", "SlotClone", "childrenRef", "getElementRef", "mergeProps", "composeRefs", "Slottable", "childProps", "overrideProps", "propName", "slotPropValue", "childPropValue", "args", "element", "getter", "mayWarn", "import_jsx_runtime", "NODES", "Primitive", "primitive", "node", "Node", "props", "forwardedRef", "asChild", "primitiveProps", "Comp", "Slot", "dispatchDiscreteCustomEvent", "target", "event", "React", "useEscapeKeydown", "onEscapeKeyDownProp", "ownerDocument", "onEscapeKeyDown", "useCallbackRef", "handleKeyDown", "event", "import_jsx_runtime", "DISMISSABLE_LAYER_NAME", "CONTEXT_UPDATE", "POINTER_DOWN_OUTSIDE", "FOCUS_OUTSIDE", "originalBodyPointerEvents", "DismissableLayerContext", "DismissableLayer", "props", "forwardedRef", "disableOutsidePointerEvents", "onEscapeKeyDown", "onPointerDownOutside", "onFocusOutside", "onInteractOutside", "onDismiss", "layerProps", "context", "node", "setNode", "ownerDocument", "force", "composedRefs", "useComposedRefs", "layers", "highestLayerWithOutsidePointerEventsDisabled", "highestLayerWithOutsidePointerEventsDisabledIndex", "index", "isBodyPointerEventsDisabled", "isPointerEventsEnabled", "pointerDownOutside", "usePointerDownOutside", "event", "target", "isPointerDownOnBranch", "branch", "focusOutside", "useFocusOutside", "useEscapeKeydown", "dispatchUpdate", "handleUpdate", "Primitive", "composeEventHandlers", "BRANCH_NAME", "DismissableLayerBranch", "ref", "handlePointerDownOutside", "useCallbackRef", "isPointerInsideReactTreeRef", "handleClickRef", "handlePointerDown", "handleAndDispatchPointerDownOutsideEvent", "handleAndDispatchCustomEvent", "eventDetail", "timerId", "handleFocusOutside", "isFocusInsideReactTreeRef", "handleFocus", "name", "handler", "detail", "discrete", "dispatchDiscreteCustomEvent", "React", "import_jsx_runtime", "AUTOFOCUS_ON_MOUNT", "AUTOFOCUS_ON_UNMOUNT", "EVENT_OPTIONS", "FOCUS_SCOPE_NAME", "FocusScope", "props", "forwardedRef", "loop", "trapped", "onMountAutoFocusProp", "onUnmountAutoFocusProp", "scopeProps", "container", "setContainer", "onMountAutoFocus", "useCallbackRef", "onUnmountAutoFocus", "lastFocusedElementRef", "composedRefs", "useComposedRefs", "node", "focusScope", "handleFocusIn", "event", "target", "focus", "handleFocusOut", "relatedTarget", "handleMutations", "mutations", "mutation", "mutationObserver", "focusScopesStack", "previouslyFocusedElement", "mountEvent", "focusFirst", "removeLinks", "getTabbableCandidates", "unmountEvent", "handleKeyDown", "isTabKey", "focusedElement", "first", "last", "getTabbableEdges", "Primitive", "candidates", "select", "candidate", "findVisible", "nodes", "walker", "isHiddenInput", "elements", "element", "isHidden", "upTo", "isSelectableInput", "createFocusScopesStack", "stack", "activeFocusScope", "arrayRemove", "array", "item", "updatedArray", "index", "items", "React", "import_react_dom", "import_jsx_runtime", "PORTAL_NAME", "Portal", "props", "forwardedRef", "containerProp", "portalProps", "mounted", "setMounted", "useLayoutEffect2", "container", "ReactDOM", "Primitive", "React2", "ReactDOM", "React", "useStateMachine", "initialState", "machine", "state", "event", "Presence", "props", "present", "children", "presence", "usePresence", "child", "ref", "useComposedRefs", "getElementRef", "node", "setNode", "stylesRef", "prevPresentRef", "prevAnimationNameRef", "send", "currentAnimationName", "getAnimationName", "useLayoutEffect2", "styles", "wasPresent", "prevAnimationName", "handleAnimationEnd", "isCurrentAnimation", "handleAnimationStart", "element", "getter", "mayWarn", "React", "count", "useFocusGuards", "edgeGuards", "createFocusGuard", "count", "node", "element", "__assign", "t", "s", "n", "p", "__rest", "e", "i", "__spreadArray", "to", "from", "pack", "l", "ar", "React", "React", "zeroRightClassName", "fullWidthClassName", "noScrollbarsClassName", "removedBarSizeVariable", "assignRef", "ref", "value", "import_react", "useCallbackRef", "initialValue", "callback", "ref", "value", "last", "React", "useIsomorphicLayoutEffect", "currentValues", "useMergeRefs", "refs", "defaultValue", "callbackRef", "useCallbackRef", "newValue", "ref", "assignRef", "oldValue", "prevRefs_1", "nextRefs_1", "current_1", "__assign", "t", "s", "n", "p", "__rest", "e", "i", "ItoI", "a", "innerCreateMedium", "defaults", "middleware", "buffer", "assigned", "medium", "data", "item", "x", "cb", "cbs", "pendingQueue", "executeQueue", "cycle", "filter", "createSidecarMedium", "options", "medium", "innerCreateMedium", "__assign", "React", "SideCar", "_a", "sideCar", "rest", "__rest", "Target", "__assign", "exportSidecar", "medium", "exported", "effectCar", "createSidecarMedium", "nothing", "RemoveScroll", "props", "parentRef", "ref", "_a", "callbacks", "setCallbacks", "forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "_b", "Container", "gapMode", "rest", "__rest", "SideCar", "containerRef", "useMergeRefs", "containerProps", "__assign", "effectCar", "fullWidthClassName", "zeroRightClassName", "React", "React", "React", "currentNonce", "getNonce", "currentNonce", "makeStyleTag", "tag", "nonce", "getNonce", "injectStyles", "css", "insertStyleTag", "head", "stylesheetSingleton", "counter", "stylesheet", "style", "styleHookSingleton", "sheet", "stylesheetSingleton", "styles", "isDynamic", "styleSingleton", "useStyle", "styleHookSingleton", "Sheet", "_a", "styles", "dynamic", "zeroGap", "parse", "x", "getOffset", "gapMode", "cs", "left", "top", "right", "getGapWidth", "offsets", "documentWidth", "windowWidth", "Style", "styleSingleton", "lockAttribute", "getStyles", "_a", "allowRelative", "gapMode", "important", "left", "top", "right", "gap", "noScrollbarsClassName", "zeroRightClassName", "fullWidthClassName", "removedBarSizeVariable", "getCurrentUseCounter", "counter", "useLockAttribute", "newCounter", "RemoveScrollBar", "noRelative", "noImportant", "_b", "getGapWidth", "passiveSupported", "options", "nonPassive", "alwaysContainsScroll", "node", "elementCanBeScrolled", "overflow", "styles", "elementCouldBeVScrolled", "elementCouldBeHScrolled", "locationCouldBeScrolled", "axis", "ownerDocument", "current", "isScrollable", "elementCouldBeScrolled", "_a", "getScrollVariables", "s", "d", "getVScrollVariables", "scrollTop", "scrollHeight", "clientHeight", "getHScrollVariables", "scrollLeft", "scrollWidth", "clientWidth", "getDirectionFactor", "direction", "handleScroll", "endTarget", "event", "sourceDelta", "noOverscroll", "directionFactor", "delta", "target", "targetInLock", "shouldCancelScroll", "isDeltaPositive", "availableScroll", "availableScrollTop", "position", "scroll_1", "capacity", "elementScroll", "getTouchXY", "event", "getDeltaXY", "extractRef", "ref", "deltaCompare", "x", "y", "generateStyle", "id", "idCounter", "lockStack", "RemoveScrollSideCar", "props", "shouldPreventQueue", "touchStartRef", "activeAxis", "Style", "styleSingleton", "lastProps", "allow_1", "__spreadArray", "el", "shouldCancelEvent", "parent", "touch", "touchStart", "deltaX", "deltaY", "currentAxis", "target", "moveDirection", "canBeScrolledInMainDirection", "locationCouldBeScrolled", "cancelingAxis", "handleScroll", "shouldPrevent", "_event", "delta", "sourceEvent", "e", "shardNodes", "node", "shouldStop", "shouldCancel", "name", "should", "getOutermostShadowParent", "scrollTouchStart", "scrollWheel", "scrollTouchMove", "nonPassive", "inst", "removeScrollBar", "inert", "RemoveScrollBar", "shadowParent", "sidecar_default", "exportSidecar", "effectCar", "RemoveScrollSideCar", "ReactRemoveScroll", "props", "ref", "RemoveScroll", "__assign", "sidecar_default", "Combination_default", "getDefaultParent", "originalTarget", "sampleTarget", "counterMap", "uncontrolledNodes", "markerMap", "lockCount", "unwrapHost", "node", "correctTargets", "parent", "targets", "target", "correctedTarget", "x", "applyAttributeToOthers", "parentNode", "markerName", "controlAttribute", "markerCounter", "hiddenNodes", "elementsToKeep", "elementsToStop", "keep", "el", "deep", "attr", "alreadyHidden", "counterValue", "markerValue", "e", "hideOthers", "activeParentNode", "import_jsx_runtime", "DIALOG_NAME", "createDialogContext", "createDialogScope", "createContextScope", "DialogProvider", "useDialogContext", "Dialog", "props", "__scopeDialog", "children", "openProp", "defaultOpen", "onOpenChange", "modal", "triggerRef", "contentRef", "open", "setOpen", "useControllableState", "useId", "prevOpen", "TRIGGER_NAME", "DialogTrigger", "forwardedRef", "triggerProps", "context", "composedTriggerRef", "useComposedRefs", "Primitive", "getState", "composeEventHandlers", "PORTAL_NAME", "PortalProvider", "usePortalContext", "DialogPortal", "forceMount", "container", "child", "Presence", "Portal", "OVERLAY_NAME", "DialogOverlay", "portalContext", "overlayProps", "DialogOverlayImpl", "Combination_default", "Slot", "CONTENT_NAME", "DialogContent", "contentProps", "DialogContentModal", "DialogContentNonModal", "composedRefs", "content", "hideOthers", "DialogContentImpl", "event", "originalEvent", "ctrlLeftClick", "hasInteractedOutsideRef", "hasPointerDownOutsideRef", "target", "trapFocus", "onOpenAutoFocus", "onCloseAutoFocus", "useFocusGuards", "FocusScope", "DismissableLayer", "TitleWarning", "DescriptionWarning", "TITLE_NAME", "DialogTitle", "titleProps", "DESCRIPTION_NAME", "DialogDescription", "descriptionProps", "CLOSE_NAME", "DialogClose", "closeProps", "TITLE_WARNING_NAME", "WarningProvider", "useWarningContext", "createContext2", "titleId", "titleWarningContext", "MESSAGE", "DESCRIPTION_WARNING_NAME", "descriptionId", "describedById", "Root", "Portal", "DialogPortal", "Overlay", "DialogOverlay", "Content", "DialogContent", "Title", "DialogTitle", "Description", "DialogDescription", "Close", "DialogClose", "React", "import_jsx_runtime", "NAME", "VisuallyHidden", "props", "forwardedRef", "Primitive", "Root", "import_classnames", "import_react", "CloseIcon", "React", "Dialog", "title", "description", "modalName", "sidebar", "children", "footer", "closeText", "contentClassName", "headerClassName", "headerWrapperClassName", "footerClassName", "onOpenCallback", "onCloseCallback", "isOpen", "setIsOpen", "translations", "useTranslation", "onOpen", "event", "onClose", "handleOpenChange", "open", "contentProps", "Root", "Portal", "Overlay", "Content", "__spreadValues", "classNames", "Title", "Close", "CloseIcon", "Description", "Dialog_default", "getLastSrcsetUrl", "srcset", "sizes", "lastSize", "buildSrcsetString", "size", "url", "import_react", "import_react", "ZoomIcon", "React", "import_react", "import_react", "StarIcon", "React", "import_react", "DiscountIcon", "React", "import_react", "ColoursIcon", "React", "renderBadgeIcon", "key", "React", "StarIcon", "DiscountIcon", "ColoursIcon", "isSingleBadge", "badge", "isMultipleBadge", "Badge", "children", "variantId", "_a", "text", "value", "badgeIcon", "badgeIconClasses", "Badge_default", "ZoomableImage", "image", "originalToggleZoom", "sizes", "width", "height", "className", "toggleZoom", "event", "React", "getLastSrcsetUrl", "buildSrcsetString", "Badge_default", "ZoomIcon", "ZoomableImage_default", "import_react", "Badges", "badges", "variantId", "React", "badge", "index", "Badge_default", "Badges_default", "import_react", "import_hammerjs", "ZoomAndPan", "largeImage", "alt", "minScale", "maxScale", "objectFit", "zoomContainerRef", "imageRef", "position", "setPosition", "scale", "setScale", "positionRef", "scaleRef", "initialPanPositionRef", "initialScaleRef", "centerImage", "containerWidth", "containerHeight", "imageWidth", "imageHeight", "initialX", "initialY", "applyBoundaries", "x", "y", "minX", "maxX", "minY", "maxY", "boundedX", "boundedY", "hammer", "Hammer", "ev", "newPosX", "newPosY", "boundedPos", "finalPosX", "finalPosY", "newScale", "React", "ZoomAndPan_default"] }