{"version":3,"sources":["../node_modules/@chakra-ui/spinner/node_modules/@chakra-ui/utils/dist/chakra-ui-utils.esm.js","../node_modules/@chakra-ui/spinner/dist/chakra-ui-spinner.esm.js"],"names":["fn","cache","WeakMap","memoize","obj","path","fallback","index","key","split","length","undefined","window","document","createElement","join","once","result","_len5","arguments","args","Array","_key5","apply","this","options","condition","message","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","Object","freeze","_extends","assign","target","i","source","prototype","hasOwnProperty","call","_excluded","spin","keyframes","transform","Spinner","forwardRef","props","ref","styles","useStyleConfig","_omitThemingProps","omitThemingProps","_omitThemingProps$lab","label","_omitThemingProps$thi","thickness","_omitThemingProps$spe","speed","_omitThemingProps$emp","emptyColor","className","rest","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","_className","_len","classNames","_key","filter","Boolean","cx","spinnerStyles","display","borderColor","borderStyle","borderRadius","borderWidth","borderBottomColor","borderLeftColor","animation","React","chakra","div","__css","VisuallyHidden"],"mappings":"0KAkRc,SAAiBA,GAC7B,IAAIC,EAAQ,IAAIC,QAwBAC,EAnClB,SAAaC,EAAKC,EAAMC,EAAUC,GAChC,IAAIC,EAAsB,kBAATH,EAAoBA,EAAKI,MAAM,KAAO,CAACJ,GAExD,IAAKE,EAAQ,EAAGA,EAAQC,EAAIE,QACrBN,EAD6BG,GAAS,EAE3CH,EAAMA,EAAII,EAAID,IAGhB,YAAeI,IAARP,EAAoBE,EAAWF,KAyPV,qBAAXQ,SAA0BA,OAAOC,UAAYD,OAAOC,SAASC,cAqH1D,CAAC,wBAAyB,yBAA0B,2BAA4B,QAAS,SAAU,SAAU,UAAW,aAAc,yBAA0B,aAAc,kBAAmB,kBAAmB,mCAAoC,sBACpOC,OAgK1C,SAASC,EAAKhB,GACZ,IAAIiB,EACJ,OAAO,WACL,GAAIjB,EAAI,CACN,IAAK,IAAIkB,EAAQC,UAAUT,OAAQU,EAAO,IAAIC,MAAMH,GAAQI,EAAQ,EAAGA,EAAQJ,EAAOI,IACpFF,EAAKE,GAASH,UAAUG,GAG1BL,EAASjB,EAAGuB,MAAMC,KAAMJ,GACxBpB,EAAK,KAGP,OAAOiB,GAIAD,GAAK,SAAUS,GACxB,OAAO,WACWA,EAAQC,UACVD,EAAQE,YAOdX,GAAK,SAAUS,GACzB,OAAO,WACWA,EAAQC,UACVD,EAAQE,YA8MLC,OAAOC,iBACPD,OAAOE,iBA+dVC,OAAOC,OAAO,CAAC,OAAQ,KAAM,KAAM,KAAM,KAAM,Q,qBCr+CjE,SAASC,IAeP,OAdAA,EAAWF,OAAOG,QAAU,SAAUC,GACpC,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,UAAUT,OAAQ0B,IAAK,CACzC,IAAIC,EAASlB,UAAUiB,GAEvB,IAAK,IAAI5B,KAAO6B,EACVN,OAAOO,UAAUC,eAAeC,KAAKH,EAAQ7B,KAC/C2B,EAAO3B,GAAO6B,EAAO7B,IAK3B,OAAO2B,IAGOZ,MAAMC,KAAML,WAkB9B,IAAIsB,EAAY,CAAC,QAAS,YAAa,QAAS,aAAc,aAC1DC,EAAOC,YAAU,CACnB,KAAM,CACJC,UAAW,gBAEb,OAAQ,CACNA,UAAW,oBAUXC,EAAuBC,aAAW,SAAUC,EAAOC,GACrD,IAAIC,EAASC,YAAe,UAAWH,GAEnCI,EAAoBC,YAAiBL,GACrCM,EAAwBF,EAAkBG,MAC1CA,OAAkC,IAA1BD,EAAmC,aAAeA,EAC1DE,EAAwBJ,EAAkBK,UAC1CA,OAAsC,IAA1BD,EAAmC,MAAQA,EACvDE,EAAwBN,EAAkBO,MAC1CA,OAAkC,IAA1BD,EAAmC,QAAUA,EACrDE,EAAwBR,EAAkBS,WAC1CA,OAAuC,IAA1BD,EAAmC,cAAgBA,EAChEE,EAAYV,EAAkBU,UAC9BC,EA5CN,SAAuCzB,EAAQ0B,GAC7C,GAAc,MAAV1B,EAAgB,MAAO,GAC3B,IAEI7B,EAAK4B,EAFLD,EAAS,GACT6B,EAAajC,OAAOkC,KAAK5B,GAG7B,IAAKD,EAAI,EAAGA,EAAI4B,EAAWtD,OAAQ0B,IACjC5B,EAAMwD,EAAW5B,GACb2B,EAASG,QAAQ1D,IAAQ,IAC7B2B,EAAO3B,GAAO6B,EAAO7B,IAGvB,OAAO2B,EAgCIgC,CAA8BhB,EAAmBV,GAExD2B,ED6cG,WACP,IAAK,IAAIC,EAAOlD,UAAUT,OAAQ4D,EAAa,IAAIjD,MAAMgD,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IACrFD,EAAWC,GAAQpD,UAAUoD,GAG/B,OAAOD,EAAWE,OAAOC,SAAS1D,KAAK,KCldtB2D,CAAG,iBAAkBb,GAElCc,EAAgB1C,EAAS,CAC3B2C,QAAS,eACTC,YAAa,eACbC,YAAa,QACbC,aAAc,UACdC,YAAaxB,EACbyB,kBAAmBrB,EACnBsB,gBAAiBtB,EACjBuB,UAAWzC,EAAO,IAAMgB,EAAQ,oBAC/BT,GAEH,OAAoBmC,gBAAoBC,IAAOC,IAAKrD,EAAS,CAC3De,IAAKA,EACLuC,MAAOZ,EACPd,UAAWO,GACVN,GAAOR,GAAsB8B,gBAAoBI,IAAgB,KAAMlC","file":"static/js/1.dfbab2b1.chunk.js","sourcesContent":["export * from 'css-box-model';\nexport { default as mergeWith } from 'lodash.mergewith';\nimport sync, { cancelSync, getFrameData } from 'framesync';\n\nfunction getFirstItem(array) {\n  return array != null && array.length ? array[0] : undefined;\n}\nfunction getLastItem(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\nfunction getPrevItem(index, array, loop) {\n  if (loop === void 0) {\n    loop = true;\n  }\n\n  var prevIndex = getPrevIndex(index, array.length, loop);\n  return array[prevIndex];\n}\nfunction getNextItem(index, array, loop) {\n  if (loop === void 0) {\n    loop = true;\n  }\n\n  var nextIndex = getNextIndex(index, array.length, 1, loop);\n  return array[nextIndex];\n}\nfunction removeIndex(array, index) {\n  return array.filter(function (_, idx) {\n    return idx !== index;\n  });\n}\nfunction addItem(array, item) {\n  return [].concat(array, [item]);\n}\nfunction removeItem(array, item) {\n  return array.filter(function (eachItem) {\n    return eachItem !== item;\n  });\n}\n/**\n * Get the next index based on the current index and step.\n *\n * @param currentIndex the current index\n * @param length the total length or count of items\n * @param step the number of steps\n * @param loop whether to circle back once `currentIndex` is at the start/end\n */\n\nfunction getNextIndex(currentIndex, length, step, loop) {\n  if (step === void 0) {\n    step = 1;\n  }\n\n  if (loop === void 0) {\n    loop = true;\n  }\n\n  var lastIndex = length - 1;\n\n  if (currentIndex === -1) {\n    return step > 0 ? 0 : lastIndex;\n  }\n\n  var nextIndex = currentIndex + step;\n\n  if (nextIndex < 0) {\n    return loop ? lastIndex : 0;\n  }\n\n  if (nextIndex >= length) {\n    if (loop) return 0;\n    return currentIndex > length ? length : currentIndex;\n  }\n\n  return nextIndex;\n}\n/**\n * Get's the previous index based on the current index.\n * Mostly used for keyboard navigation.\n *\n * @param index - the current index\n * @param count - the length or total count of items in the array\n * @param loop - whether we should circle back to the\n * first/last once `currentIndex` is at the start/end\n */\n\nfunction getPrevIndex(index, count, loop) {\n  if (loop === void 0) {\n    loop = true;\n  }\n\n  return getNextIndex(index, count, -1, loop);\n}\n/**\n * Converts an array into smaller chunks or groups.\n *\n * @param array the array to chunk into group\n * @param size the length of each chunk\n */\n\nfunction chunk(array, size) {\n  return array.reduce(function (rows, currentValue, index) {\n    if (index % size === 0) {\n      rows.push([currentValue]);\n    } else {\n      rows[rows.length - 1].push(currentValue);\n    }\n\n    return rows;\n  }, []);\n}\n/**\n * Gets the next item based on a search string\n *\n * @param items array of items\n * @param searchString the search string\n * @param itemToString resolves an item to string\n * @param currentItem the current selected item\n */\n\nfunction getNextItemFromSearch(items, searchString, itemToString, currentItem) {\n  if (searchString == null) {\n    return currentItem;\n  } // If current item doesn't exist, find the item that matches the search string\n\n\n  if (!currentItem) {\n    var foundItem = items.find(function (item) {\n      return itemToString(item).toLowerCase().startsWith(searchString.toLowerCase());\n    });\n    return foundItem;\n  } // Filter items for ones that match the search string (case insensitive)\n\n\n  var matchingItems = items.filter(function (item) {\n    return itemToString(item).toLowerCase().startsWith(searchString.toLowerCase());\n  }); // If there's a match, let's get the next item to select\n\n  if (matchingItems.length > 0) {\n    var nextIndex; // If the currentItem is in the available items, we move to the next available option\n\n    if (matchingItems.includes(currentItem)) {\n      var currentIndex = matchingItems.indexOf(currentItem);\n      nextIndex = currentIndex + 1;\n\n      if (nextIndex === matchingItems.length) {\n        nextIndex = 0;\n      }\n\n      return matchingItems[nextIndex];\n    } // Else, we pick the first item in the available items\n\n\n    nextIndex = items.indexOf(matchingItems[0]);\n    return items[nextIndex];\n  } // a decent fallback to the currentItem\n\n\n  return currentItem;\n}\n\n// Number assertions\nfunction isNumber(value) {\n  return typeof value === \"number\";\n}\nfunction isNotNumber(value) {\n  return typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value);\n}\nfunction isNumeric(value) {\n  return value != null && value - parseFloat(value) + 1 >= 0;\n} // Array assertions\n\nfunction isArray(value) {\n  return Array.isArray(value);\n}\nfunction isEmptyArray(value) {\n  return isArray(value) && value.length === 0;\n} // Function assertions\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n} // Generic assertions\n\nfunction isDefined(value) {\n  return typeof value !== \"undefined\" && value !== undefined;\n}\nfunction isUndefined(value) {\n  return typeof value === \"undefined\" || value === undefined;\n} // Object assertions\n\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type === \"object\" || type === \"function\") && !isArray(value);\n}\nfunction isEmptyObject(value) {\n  return isObject(value) && Object.keys(value).length === 0;\n}\nfunction isNotEmptyObject(value) {\n  return value && !isEmptyObject(value);\n}\nfunction isNull(value) {\n  return value == null;\n} // String assertions\n\nfunction isString(value) {\n  return Object.prototype.toString.call(value) === \"[object String]\";\n}\nfunction isCssVar(value) {\n  return /^var\\(--.+\\)$/.test(value);\n} // Empty assertions\n\nfunction isEmpty(value) {\n  if (isArray(value)) return isEmptyArray(value);\n  if (isObject(value)) return isEmptyObject(value);\n  if (value == null || value === \"\") return true;\n  return false;\n}\nvar __DEV__ = process.env.NODE_ENV !== \"production\";\nvar __TEST__ = process.env.NODE_ENV === \"test\";\nfunction isRefObject(val) {\n  return \"current\" in val;\n}\nfunction isInputEvent(value) {\n  return value && isObject(value) && isObject(value.target);\n}\n\nfunction omit(object, keys) {\n  var result = {};\n  Object.keys(object).forEach(function (key) {\n    if (keys.includes(key)) return;\n    result[key] = object[key];\n  });\n  return result;\n}\nfunction pick(object, keys) {\n  var result = {};\n  keys.forEach(function (key) {\n    if (key in object) {\n      result[key] = object[key];\n    }\n  });\n  return result;\n}\nfunction split(object, keys) {\n  var picked = {};\n  var omitted = {};\n  Object.keys(object).forEach(function (key) {\n    if (keys.includes(key)) {\n      picked[key] = object[key];\n    } else {\n      omitted[key] = object[key];\n    }\n  });\n  return [picked, omitted];\n}\n/**\n * Get value from a deeply nested object using a string path.\n * Memoizes the value.\n * @param obj - the object\n * @param path - the string path\n * @param def  - the fallback value\n */\n\nfunction get(obj, path, fallback, index) {\n  var key = typeof path === \"string\" ? path.split(\".\") : [path];\n\n  for (index = 0; index < key.length; index += 1) {\n    if (!obj) break;\n    obj = obj[key[index]];\n  }\n\n  return obj === undefined ? fallback : obj;\n}\nvar memoize = function memoize(fn) {\n  var cache = new WeakMap();\n\n  var memoizedFn = function memoizedFn(obj, path, fallback, index) {\n    if (typeof obj === \"undefined\") {\n      return fn(obj, path, fallback);\n    }\n\n    if (!cache.has(obj)) {\n      cache.set(obj, new Map());\n    }\n\n    var map = cache.get(obj);\n\n    if (map.has(path)) {\n      return map.get(path);\n    }\n\n    var value = fn(obj, path, fallback, index);\n    map.set(path, value);\n    return value;\n  };\n\n  return memoizedFn;\n};\nvar memoizedGet = memoize(get);\n/**\n * Get value from deeply nested object, based on path\n * It returns the path value if not found in object\n *\n * @param path - the string path or value\n * @param scale - the string path or value\n */\n\nfunction getWithDefault(path, scale) {\n  return memoizedGet(scale, path, path);\n}\n\n/**\n * Returns the items of an object that meet the condition specified in a callback function.\n *\n * @param object the object to loop through\n * @param fn The filter function\n */\nfunction objectFilter(object, fn) {\n  var result = {};\n  Object.keys(object).forEach(function (key) {\n    var value = object[key];\n    var shouldPass = fn(value, key, object);\n\n    if (shouldPass) {\n      result[key] = value;\n    }\n  });\n  return result;\n}\nvar filterUndefined = function filterUndefined(object) {\n  return objectFilter(object, function (val) {\n    return val !== null && val !== undefined;\n  });\n};\nvar objectKeys = function objectKeys(obj) {\n  return Object.keys(obj);\n};\n/**\n * Object.entries polyfill for Nodev10 compatibility\n */\n\nvar fromEntries = function fromEntries(entries) {\n  return entries.reduce(function (carry, _ref) {\n    var key = _ref[0],\n        value = _ref[1];\n    carry[key] = value;\n    return carry;\n  }, {});\n};\n/**\n * Get the CSS variable ref stored in the theme\n */\n\nvar getCSSVar = function getCSSVar(theme, scale, value) {\n  var _theme$__cssMap$$varR, _theme$__cssMap$;\n\n  return (_theme$__cssMap$$varR = (_theme$__cssMap$ = theme.__cssMap[scale + \".\" + value]) == null ? void 0 : _theme$__cssMap$.varRef) != null ? _theme$__cssMap$$varR : value;\n};\n\nfunction analyzeCSSValue(value) {\n  var num = parseFloat(value.toString());\n  var unit = value.toString().replace(String(num), \"\");\n  return {\n    unitless: !unit,\n    value: num,\n    unit: unit\n  };\n}\n\nfunction px(value) {\n  if (value == null) return value;\n\n  var _analyzeCSSValue = analyzeCSSValue(value),\n      unitless = _analyzeCSSValue.unitless;\n\n  return unitless || isNumber(value) ? value + \"px\" : value;\n}\n\nvar sortByBreakpointValue = function sortByBreakpointValue(a, b) {\n  return parseInt(a[1], 10) > parseInt(b[1], 10) ? 1 : -1;\n};\n\nvar sortBps = function sortBps(breakpoints) {\n  return fromEntries(Object.entries(breakpoints).sort(sortByBreakpointValue));\n};\n\nfunction normalize(breakpoints) {\n  var sorted = sortBps(breakpoints);\n  return Object.assign(Object.values(sorted), sorted);\n}\n\nfunction keys(breakpoints) {\n  var value = Object.keys(sortBps(breakpoints));\n  return new Set(value);\n}\n\nfunction subtract(value) {\n  var _px;\n\n  if (!value) return value;\n  value = (_px = px(value)) != null ? _px : value;\n  var factor = value.endsWith(\"px\") ? -1 : // the equivalent of 1px in em using a 16px base\n  -0.0635;\n  return isNumber(value) ? \"\" + (value + factor) : value.replace(/([0-9]+\\.?[0-9]*)/, function (m) {\n    return \"\" + (parseFloat(m) + factor);\n  });\n}\n\nfunction queryString(min, max) {\n  var query = [\"@media screen\"];\n  if (min) query.push(\"and\", \"(min-width: \" + px(min) + \")\");\n  if (max) query.push(\"and\", \"(max-width: \" + px(max) + \")\");\n  return query.join(\" \");\n}\n\nfunction analyzeBreakpoints(breakpoints) {\n  var _breakpoints$base;\n\n  if (!breakpoints) return null;\n  breakpoints.base = (_breakpoints$base = breakpoints.base) != null ? _breakpoints$base : \"0px\";\n  var normalized = normalize(breakpoints);\n  var queries = Object.entries(breakpoints).sort(sortByBreakpointValue).map(function (_ref, index, entry) {\n    var _entry;\n\n    var breakpoint = _ref[0],\n        minW = _ref[1];\n\n    var _ref2 = (_entry = entry[index + 1]) != null ? _entry : [],\n        maxW = _ref2[1];\n\n    maxW = parseFloat(maxW) > 0 ? subtract(maxW) : undefined;\n    return {\n      breakpoint: breakpoint,\n      minW: minW,\n      maxW: maxW,\n      maxWQuery: queryString(null, maxW),\n      minWQuery: queryString(minW),\n      minMaxQuery: queryString(minW, maxW)\n    };\n  });\n\n  var _keys = keys(breakpoints);\n\n  var _keysArr = Array.from(_keys.values());\n\n  return {\n    keys: _keys,\n    normalized: normalized,\n    isResponsive: function isResponsive(test) {\n      var keys = Object.keys(test);\n      return keys.length > 0 && keys.every(function (key) {\n        return _keys.has(key);\n      });\n    },\n    asObject: sortBps(breakpoints),\n    asArray: normalize(breakpoints),\n    details: queries,\n    media: [null].concat(normalized.map(function (minW) {\n      return queryString(minW);\n    }).slice(1)),\n    toArrayValue: function toArrayValue(test) {\n      if (!isObject(test)) {\n        throw new Error(\"toArrayValue: value must be an object\");\n      }\n\n      var result = _keysArr.map(function (bp) {\n        var _test$bp;\n\n        return (_test$bp = test[bp]) != null ? _test$bp : null;\n      });\n\n      while (getLastItem(result) === null) {\n        result.pop();\n      }\n\n      return result;\n    },\n    toObjectValue: function toObjectValue(test) {\n      if (!Array.isArray(test)) {\n        throw new Error(\"toObjectValue: value must be an array\");\n      }\n\n      return test.reduce(function (acc, value, index) {\n        var key = _keysArr[index];\n        if (key != null && value != null) acc[key] = value;\n        return acc;\n      }, {});\n    }\n  };\n}\n\nfunction isElement(el) {\n  return el != null && typeof el == \"object\" && \"nodeType\" in el && el.nodeType === Node.ELEMENT_NODE;\n}\nfunction isHTMLElement(el) {\n  var _el$ownerDocument$def;\n\n  if (!isElement(el)) {\n    return false;\n  }\n\n  var win = (_el$ownerDocument$def = el.ownerDocument.defaultView) != null ? _el$ownerDocument$def : window;\n  return el instanceof win.HTMLElement;\n}\nfunction getOwnerWindow(node) {\n  var _getOwnerDocument$def, _getOwnerDocument;\n\n  return isElement(node) ? (_getOwnerDocument$def = (_getOwnerDocument = getOwnerDocument(node)) == null ? void 0 : _getOwnerDocument.defaultView) != null ? _getOwnerDocument$def : window : window;\n}\nfunction getOwnerDocument(node) {\n  var _node$ownerDocument;\n\n  return isElement(node) ? (_node$ownerDocument = node.ownerDocument) != null ? _node$ownerDocument : document : document;\n}\nfunction getEventWindow(event) {\n  var _view;\n\n  return (_view = event.view) != null ? _view : window;\n}\nfunction canUseDOM() {\n  return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n}\nvar isBrowser = canUseDOM();\nvar dataAttr = function dataAttr(condition) {\n  return condition ? \"\" : undefined;\n};\nvar ariaAttr = function ariaAttr(condition) {\n  return condition ? true : undefined;\n};\nvar cx = function cx() {\n  for (var _len = arguments.length, classNames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classNames[_key] = arguments[_key];\n  }\n\n  return classNames.filter(Boolean).join(\" \");\n};\nfunction getActiveElement(node) {\n  var doc = getOwnerDocument(node);\n  return doc == null ? void 0 : doc.activeElement;\n}\nfunction contains(parent, child) {\n  if (!parent) return false;\n  return parent === child || parent.contains(child);\n}\nfunction addDomEvent(target, eventName, handler, options) {\n  target.addEventListener(eventName, handler, options);\n  return function () {\n    target.removeEventListener(eventName, handler, options);\n  };\n}\n/**\n * Get the normalized event key across all browsers\n * @param event keyboard event\n */\n\nfunction normalizeEventKey(event) {\n  var key = event.key,\n      keyCode = event.keyCode;\n  var isArrowKey = keyCode >= 37 && keyCode <= 40 && key.indexOf(\"Arrow\") !== 0;\n  var eventKey = isArrowKey ? \"Arrow\" + key : key;\n  return eventKey;\n}\nfunction getRelatedTarget(event) {\n  var _event$target, _event$relatedTarget;\n\n  var target = (_event$target = event.target) != null ? _event$target : event.currentTarget;\n  var activeElement = getActiveElement(target);\n  return (_event$relatedTarget = event.relatedTarget) != null ? _event$relatedTarget : activeElement;\n}\nfunction isRightClick(event) {\n  return event.button !== 0;\n}\n\n// Really great work done by Diego Haz on this one\nvar hasDisplayNone = function hasDisplayNone(element) {\n  return window.getComputedStyle(element).display === \"none\";\n};\nvar hasTabIndex = function hasTabIndex(element) {\n  return element.hasAttribute(\"tabindex\");\n};\nvar hasNegativeTabIndex = function hasNegativeTabIndex(element) {\n  return hasTabIndex(element) && element.tabIndex === -1;\n};\nfunction isDisabled(element) {\n  return Boolean(element.getAttribute(\"disabled\")) === true || Boolean(element.getAttribute(\"aria-disabled\")) === true;\n}\nfunction isInputElement(element) {\n  return isHTMLElement(element) && element.tagName.toLowerCase() === \"input\" && \"select\" in element;\n}\nfunction isActiveElement(element) {\n  var doc = isHTMLElement(element) ? getOwnerDocument(element) : document;\n  return doc.activeElement === element;\n}\nfunction hasFocusWithin(element) {\n  if (!document.activeElement) return false;\n  return element.contains(document.activeElement);\n}\nfunction isHidden(element) {\n  if (element.parentElement && isHidden(element.parentElement)) return true;\n  return element.hidden;\n}\nfunction isContentEditable(element) {\n  var value = element.getAttribute(\"contenteditable\");\n  return value !== \"false\" && value != null;\n}\nfunction isFocusable(element) {\n  if (!isHTMLElement(element) || isHidden(element) || isDisabled(element)) {\n    return false;\n  }\n\n  var localName = element.localName;\n  var focusableTags = [\"input\", \"select\", \"textarea\", \"button\"];\n  if (focusableTags.indexOf(localName) >= 0) return true;\n  var others = {\n    a: function a() {\n      return element.hasAttribute(\"href\");\n    },\n    audio: function audio() {\n      return element.hasAttribute(\"controls\");\n    },\n    video: function video() {\n      return element.hasAttribute(\"controls\");\n    }\n  };\n\n  if (localName in others) {\n    return others[localName]();\n  }\n\n  if (isContentEditable(element)) return true;\n  return hasTabIndex(element);\n}\nfunction isTabbable(element) {\n  if (!element) return false;\n  return isHTMLElement(element) && isFocusable(element) && !hasNegativeTabIndex(element);\n}\n\nvar focusableElList = [\"input:not([disabled])\", \"select:not([disabled])\", \"textarea:not([disabled])\", \"embed\", \"iframe\", \"object\", \"a[href]\", \"area[href]\", \"button:not([disabled])\", \"[tabindex]\", \"audio[controls]\", \"video[controls]\", \"*[tabindex]:not([aria-disabled])\", \"*[contenteditable]\"];\nvar focusableElSelector = focusableElList.join();\nfunction getAllFocusable(container) {\n  var focusableEls = Array.from(container.querySelectorAll(focusableElSelector));\n  focusableEls.unshift(container);\n  return focusableEls.filter(isFocusable).filter(function (el) {\n    return window.getComputedStyle(el).display !== \"none\";\n  });\n}\nfunction getFirstFocusable(container) {\n  var allFocusable = getAllFocusable(container);\n  return allFocusable.length ? allFocusable[0] : null;\n}\nfunction getAllTabbable(container, fallbackToFocusable) {\n  var allFocusable = Array.from(container.querySelectorAll(focusableElSelector));\n  var allTabbable = allFocusable.filter(isTabbable);\n\n  if (isTabbable(container)) {\n    allTabbable.unshift(container);\n  }\n\n  if (!allTabbable.length && fallbackToFocusable) {\n    return allFocusable;\n  }\n\n  return allTabbable;\n}\nfunction getFirstTabbableIn(container, fallbackToFocusable) {\n  var _getAllTabbable = getAllTabbable(container, fallbackToFocusable),\n      first = _getAllTabbable[0];\n\n  return first || null;\n}\nfunction getLastTabbableIn(container, fallbackToFocusable) {\n  var allTabbable = getAllTabbable(container, fallbackToFocusable);\n  return allTabbable[allTabbable.length - 1] || null;\n}\nfunction getNextTabbable(container, fallbackToFocusable) {\n  var allFocusable = getAllFocusable(container);\n  var index = allFocusable.indexOf(document.activeElement);\n  var slice = allFocusable.slice(index + 1);\n  return slice.find(isTabbable) || allFocusable.find(isTabbable) || (fallbackToFocusable ? slice[0] : null);\n}\nfunction getPreviousTabbable(container, fallbackToFocusable) {\n  var allFocusable = getAllFocusable(container).reverse();\n  var index = allFocusable.indexOf(document.activeElement);\n  var slice = allFocusable.slice(index + 1);\n  return slice.find(isTabbable) || allFocusable.find(isTabbable) || (fallbackToFocusable ? slice[0] : null);\n}\nfunction focusNextTabbable(container, fallbackToFocusable) {\n  var nextTabbable = getNextTabbable(container, fallbackToFocusable);\n\n  if (nextTabbable && isHTMLElement(nextTabbable)) {\n    nextTabbable.focus();\n  }\n}\nfunction focusPreviousTabbable(container, fallbackToFocusable) {\n  var previousTabbable = getPreviousTabbable(container, fallbackToFocusable);\n\n  if (previousTabbable && isHTMLElement(previousTabbable)) {\n    previousTabbable.focus();\n  }\n}\n\nfunction matches(element, selectors) {\n  if (\"matches\" in element) return element.matches(selectors);\n  if (\"msMatchesSelector\" in element) return element.msMatchesSelector(selectors);\n  return element.webkitMatchesSelector(selectors);\n}\n\nfunction closest(element, selectors) {\n  if (\"closest\" in element) return element.closest(selectors);\n\n  do {\n    if (matches(element, selectors)) return element;\n    element = element.parentElement || element.parentNode;\n  } while (element !== null && element.nodeType === 1);\n\n  return null;\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n  var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n  if (it) return (it = it.call(o)).next.bind(it);\n\n  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n    if (it) o = it;\n    var i = 0;\n    return function () {\n      if (i >= o.length) return {\n        done: true\n      };\n      return {\n        done: false,\n        value: o[i++]\n      };\n    };\n  }\n\n  throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/* eslint-disable no-nested-ternary */\nfunction runIfFn(valueOrFn) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  return isFunction(valueOrFn) ? valueOrFn.apply(void 0, args) : valueOrFn;\n}\nfunction callAllHandlers() {\n  for (var _len2 = arguments.length, fns = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    fns[_key2] = arguments[_key2];\n  }\n\n  return function func(event) {\n    fns.some(function (fn) {\n      fn == null ? void 0 : fn(event);\n      return event == null ? void 0 : event.defaultPrevented;\n    });\n  };\n}\nfunction callAll() {\n  for (var _len3 = arguments.length, fns = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    fns[_key3] = arguments[_key3];\n  }\n\n  return function mergedFn(arg) {\n    fns.forEach(function (fn) {\n      fn == null ? void 0 : fn(arg);\n    });\n  };\n}\nvar compose = function compose(fn1) {\n  for (var _len4 = arguments.length, fns = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    fns[_key4 - 1] = arguments[_key4];\n  }\n\n  return fns.reduce(function (f1, f2) {\n    return function () {\n      return f1(f2.apply(void 0, arguments));\n    };\n  }, fn1);\n};\nfunction once(fn) {\n  var result;\n  return function func() {\n    if (fn) {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      result = fn.apply(this, args);\n      fn = null;\n    }\n\n    return result;\n  };\n}\nvar noop = function noop() {};\nvar warn = once(function (options) {\n  return function () {\n    var condition = options.condition,\n        message = options.message;\n\n    if (condition && __DEV__) {\n      console.warn(message);\n    }\n  };\n});\nvar error = once(function (options) {\n  return function () {\n    var condition = options.condition,\n        message = options.message;\n\n    if (condition && __DEV__) {\n      console.error(message);\n    }\n  };\n});\nvar pipe = function pipe() {\n  for (var _len6 = arguments.length, fns = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    fns[_key6] = arguments[_key6];\n  }\n\n  return function (v) {\n    return fns.reduce(function (a, b) {\n      return b(a);\n    }, v);\n  };\n};\n\nvar distance1D = function distance1D(a, b) {\n  return Math.abs(a - b);\n};\n\nvar isPoint = function isPoint(point) {\n  return \"x\" in point && \"y\" in point;\n};\n\nfunction distance(a, b) {\n  if (isNumber(a) && isNumber(b)) {\n    return distance1D(a, b);\n  }\n\n  if (isPoint(a) && isPoint(b)) {\n    var xDelta = distance1D(a.x, b.x);\n    var yDelta = distance1D(a.y, b.y);\n    return Math.sqrt(Math.pow(xDelta, 2) + Math.pow(yDelta, 2));\n  }\n\n  return 0;\n}\n\nfunction focus(element, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$isActive = _options.isActive,\n      isActive = _options$isActive === void 0 ? isActiveElement : _options$isActive,\n      nextTick = _options.nextTick,\n      _options$preventScrol = _options.preventScroll,\n      preventScroll = _options$preventScrol === void 0 ? true : _options$preventScrol,\n      _options$selectTextIf = _options.selectTextIfInput,\n      selectTextIfInput = _options$selectTextIf === void 0 ? true : _options$selectTextIf;\n  if (!element || isActive(element)) return -1;\n\n  function triggerFocus() {\n    if (!element) {\n      warn({\n        condition: true,\n        message: \"[chakra-ui]: can't call focus() on `null` or `undefined` element\"\n      });\n      return;\n    }\n\n    if (supportsPreventScroll()) {\n      element.focus({\n        preventScroll: preventScroll\n      });\n    } else {\n      element.focus();\n\n      if (preventScroll) {\n        var scrollableElements = getScrollableElements(element);\n        restoreScrollPosition(scrollableElements);\n      }\n    }\n\n    if (isInputElement(element) && selectTextIfInput) {\n      element.select();\n    }\n  }\n\n  if (nextTick) {\n    return requestAnimationFrame(triggerFocus);\n  }\n\n  triggerFocus();\n  return -1;\n}\nvar supportsPreventScrollCached = null;\n\nfunction supportsPreventScroll() {\n  if (supportsPreventScrollCached == null) {\n    supportsPreventScrollCached = false;\n\n    try {\n      var div = document.createElement(\"div\");\n      div.focus({\n        get preventScroll() {\n          supportsPreventScrollCached = true;\n          return true;\n        }\n\n      });\n    } catch (e) {// Ignore\n    }\n  }\n\n  return supportsPreventScrollCached;\n}\n\nfunction getScrollableElements(element) {\n  var _doc$defaultView;\n\n  var doc = getOwnerDocument(element);\n  var win = (_doc$defaultView = doc.defaultView) != null ? _doc$defaultView : window;\n  var parent = element.parentNode;\n  var scrollableElements = [];\n  var rootScrollingElement = doc.scrollingElement || doc.documentElement;\n\n  while (parent instanceof win.HTMLElement && parent !== rootScrollingElement) {\n    if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) {\n      scrollableElements.push({\n        element: parent,\n        scrollTop: parent.scrollTop,\n        scrollLeft: parent.scrollLeft\n      });\n    }\n\n    parent = parent.parentNode;\n  }\n\n  if (rootScrollingElement instanceof win.HTMLElement) {\n    scrollableElements.push({\n      element: rootScrollingElement,\n      scrollTop: rootScrollingElement.scrollTop,\n      scrollLeft: rootScrollingElement.scrollLeft\n    });\n  }\n\n  return scrollableElements;\n}\n\nfunction restoreScrollPosition(scrollableElements) {\n  for (var _iterator = _createForOfIteratorHelperLoose(scrollableElements), _step; !(_step = _iterator()).done;) {\n    var _step$value = _step.value,\n        element = _step$value.element,\n        scrollTop = _step$value.scrollTop,\n        scrollLeft = _step$value.scrollLeft;\n    element.scrollTop = scrollTop;\n    element.scrollLeft = scrollLeft;\n  }\n}\n\nfunction flatten(target, maxDepth) {\n  if (maxDepth === void 0) {\n    maxDepth = Infinity;\n  }\n\n  if (!isObject(target) && !Array.isArray(target) || !maxDepth) {\n    return target;\n  }\n\n  return Object.entries(target).reduce(function (result, _ref) {\n    var key = _ref[0],\n        value = _ref[1];\n\n    if (isObject(value) || isArray(value)) {\n      Object.entries(flatten(value, maxDepth - 1)).forEach(function (_ref2) {\n        var childKey = _ref2[0],\n            childValue = _ref2[1];\n        // e.g. gray.500\n        result[key + \".\" + childKey] = childValue;\n      });\n    } else {\n      // e.g. transparent\n      result[key] = value;\n    }\n\n    return result;\n  }, {});\n}\n\n/**\n * Determines whether the children of a disclosure widget\n * should be rendered or not, depending on the lazy behavior.\n *\n * Used in accordion, tabs, popover, menu and other disclosure\n * widgets.\n */\nfunction determineLazyBehavior(options) {\n  var hasBeenSelected = options.hasBeenSelected,\n      isLazy = options.isLazy,\n      isSelected = options.isSelected,\n      _options$lazyBehavior = options.lazyBehavior,\n      lazyBehavior = _options$lazyBehavior === void 0 ? \"unmount\" : _options$lazyBehavior; // if not lazy, always render the disclosure's content\n\n  if (!isLazy) return true; // if the diclosure is selected, render the disclosure's content\n\n  if (isSelected) return true; // if the disclosure was selected but not active, keep its content active\n\n  if (lazyBehavior === \"keepMounted\" && hasBeenSelected) return true;\n  return false;\n}\n\nvar minSafeInteger = Number.MIN_SAFE_INTEGER || -9007199254740991;\nvar maxSafeInteger = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nfunction toNumber(value) {\n  var num = parseFloat(value);\n  return isNotNumber(num) ? 0 : num;\n}\n/**\n * Converts a value to a specific precision (or decimal points).\n *\n * Returns a string representing a number in fixed-point notation.\n *\n * @param value the value to convert\n * @param precision the precision or decimal points\n */\n\n\nfunction toPrecision(value, precision) {\n  var nextValue = toNumber(value);\n  var scaleFactor = Math.pow(10, precision != null ? precision : 10);\n  nextValue = Math.round(nextValue * scaleFactor) / scaleFactor;\n  return precision ? nextValue.toFixed(precision) : nextValue.toString();\n}\n/**\n * Counts the number of decimal places a number has\n *\n * @param value the decimal value to count\n */\n\nfunction countDecimalPlaces(value) {\n  if (!Number.isFinite(value)) return 0;\n  var e = 1;\n  var p = 0;\n\n  while (Math.round(value * e) / e !== value) {\n    e *= 10;\n    p += 1;\n  }\n\n  return p;\n}\n/**\n * Convert a value to percentage based on lower and upper bound values\n *\n * @param value the value in number\n * @param min the minimum value\n * @param max the maximum value\n */\n\nfunction valueToPercent(value, min, max) {\n  return (value - min) * 100 / (max - min);\n}\n/**\n * Calculate the value based on percentage, lower and upper bound values\n *\n * @param percent the percent value in decimals (e.g 0.6, 0.3)\n * @param min the minimum value\n * @param max the maximum value\n */\n\nfunction percentToValue(percent, min, max) {\n  return (max - min) * percent + min;\n}\n/**\n * Rounds a specific value to the next or previous step\n *\n * @param value the value to round\n * @param from the number that stepping started from\n * @param step the specified step\n */\n\nfunction roundValueToStep(value, from, step) {\n  var nextValue = Math.round((value - from) / step) * step + from;\n  var precision = countDecimalPlaces(step);\n  return toPrecision(nextValue, precision);\n}\n/**\n * Clamps a value to ensure it stays within the min and max range.\n *\n * @param value the value to clamp\n * @param min the minimum value\n * @param max the maximum value\n */\n\nfunction clampValue(value, min, max) {\n  if (value == null) return value;\n  warn({\n    condition: max < min,\n    message: \"clamp: max cannot be less than min\"\n  });\n  return Math.min(Math.max(value, min), max);\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\n/**\n * Credit goes to `framer-motion` of this useful utilities.\n * License can be found here: https://github.com/framer/motion\n */\nfunction isMouseEvent(event) {\n  var win = getEventWindow(event); // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check.\n\n  if (typeof win.PointerEvent !== \"undefined\" && event instanceof win.PointerEvent) {\n    return !!(event.pointerType === \"mouse\");\n  }\n\n  return event instanceof win.MouseEvent;\n}\nfunction isTouchEvent(event) {\n  var hasTouches = !!event.touches;\n  return hasTouches;\n}\n\n/**\n * Filters out events not attached to the primary pointer (currently left mouse button)\n * @param eventHandler\n */\nfunction filterPrimaryPointer(eventHandler) {\n  return function (event) {\n    var win = getEventWindow(event);\n    var isMouseEvent = event instanceof win.MouseEvent;\n    var isPrimaryPointer = !isMouseEvent || isMouseEvent && event.button === 0;\n\n    if (isPrimaryPointer) {\n      eventHandler(event);\n    }\n  };\n}\n\nvar defaultPagePoint = {\n  pageX: 0,\n  pageY: 0\n};\n\nfunction pointFromTouch(e, pointType) {\n  if (pointType === void 0) {\n    pointType = \"page\";\n  }\n\n  var primaryTouch = e.touches[0] || e.changedTouches[0];\n  var point = primaryTouch || defaultPagePoint;\n  return {\n    x: point[pointType + \"X\"],\n    y: point[pointType + \"Y\"]\n  };\n}\n\nfunction pointFromMouse(point, pointType) {\n  if (pointType === void 0) {\n    pointType = \"page\";\n  }\n\n  return {\n    x: point[pointType + \"X\"],\n    y: point[pointType + \"Y\"]\n  };\n}\n\nfunction extractEventInfo(event, pointType) {\n  if (pointType === void 0) {\n    pointType = \"page\";\n  }\n\n  return {\n    point: isTouchEvent(event) ? pointFromTouch(event, pointType) : pointFromMouse(event, pointType)\n  };\n}\nfunction getViewportPointFromEvent(event) {\n  return extractEventInfo(event, \"client\");\n}\nvar wrapPointerEventHandler = function wrapPointerEventHandler(handler, shouldFilterPrimaryPointer) {\n  if (shouldFilterPrimaryPointer === void 0) {\n    shouldFilterPrimaryPointer = false;\n  }\n\n  var listener = function listener(event) {\n    return handler(event, extractEventInfo(event));\n  };\n\n  return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener;\n}; // We check for event support via functions in case they've been mocked by a testing suite.\n\nvar supportsPointerEvents = function supportsPointerEvents() {\n  return isBrowser && window.onpointerdown === null;\n};\n\nvar supportsTouchEvents = function supportsTouchEvents() {\n  return isBrowser && window.ontouchstart === null;\n};\n\nvar supportsMouseEvents = function supportsMouseEvents() {\n  return isBrowser && window.onmousedown === null;\n};\n\nvar mouseEventNames = {\n  pointerdown: \"mousedown\",\n  pointermove: \"mousemove\",\n  pointerup: \"mouseup\",\n  pointercancel: \"mousecancel\",\n  pointerover: \"mouseover\",\n  pointerout: \"mouseout\",\n  pointerenter: \"mouseenter\",\n  pointerleave: \"mouseleave\"\n};\nvar touchEventNames = {\n  pointerdown: \"touchstart\",\n  pointermove: \"touchmove\",\n  pointerup: \"touchend\",\n  pointercancel: \"touchcancel\"\n};\nfunction getPointerEventName(name) {\n  if (supportsPointerEvents()) {\n    return name;\n  }\n\n  if (supportsTouchEvents()) {\n    return touchEventNames[name];\n  }\n\n  if (supportsMouseEvents()) {\n    return mouseEventNames[name];\n  }\n\n  return name;\n}\nfunction addPointerEvent(target, eventName, handler, options) {\n  return addDomEvent(target, getPointerEventName(eventName), wrapPointerEventHandler(handler, eventName === \"pointerdown\"), options);\n}\nfunction isMultiTouchEvent(event) {\n  return isTouchEvent(event) && event.touches.length > 1;\n}\n\n/**\n * The event information passed to pan event handlers like `onPan`, `onPanStart`.\n *\n * It contains information about the current state of the tap gesture such as its\n * `point`, `delta`, and `offset`\n */\n\n/**\n * @internal\n *\n * A Pan Session is recognized when the pointer is down\n * and moved in the allowed direction.\n */\nvar PanSession = /*#__PURE__*/function () {\n  /**\n   * We use this to keep track of the `x` and `y` pan session history\n   * as the pan event happens. It helps to calculate the `offset` and `delta`\n   */\n  // The pointer event that started the pan session\n  // The current pointer event for the pan session\n  // The current pointer event info for the pan session\n\n  /**\n   * Minimal pan distance required before recognizing the pan.\n   * @default \"3px\"\n   */\n  function PanSession(_event, handlers, threshold) {\n    var _this = this;\n\n    this.history = [];\n    this.startEvent = null;\n    this.lastEvent = null;\n    this.lastEventInfo = null;\n    this.handlers = {};\n    this.removeListeners = noop;\n    this.threshold = 3;\n    this.win = void 0;\n\n    this.updatePoint = function () {\n      if (!(_this.lastEvent && _this.lastEventInfo)) return;\n      var info = getPanInfo(_this.lastEventInfo, _this.history);\n      var isPanStarted = _this.startEvent !== null;\n\n      var isDistancePastThreshold = distance(info.offset, {\n        x: 0,\n        y: 0\n      }) >= _this.threshold;\n\n      if (!isPanStarted && !isDistancePastThreshold) return;\n\n      var _getFrameData = getFrameData(),\n          timestamp = _getFrameData.timestamp;\n\n      _this.history.push(_extends({}, info.point, {\n        timestamp: timestamp\n      }));\n\n      var _this$handlers = _this.handlers,\n          onStart = _this$handlers.onStart,\n          onMove = _this$handlers.onMove;\n\n      if (!isPanStarted) {\n        onStart == null ? void 0 : onStart(_this.lastEvent, info);\n        _this.startEvent = _this.lastEvent;\n      }\n\n      onMove == null ? void 0 : onMove(_this.lastEvent, info);\n    };\n\n    this.onPointerMove = function (event, info) {\n      _this.lastEvent = event;\n      _this.lastEventInfo = info; // Because Safari doesn't trigger mouseup events when it's above a `<select>`\n\n      if (isMouseEvent(event) && event.buttons === 0) {\n        _this.onPointerUp(event, info);\n\n        return;\n      } // Throttle mouse move event to once per frame\n\n\n      sync.update(_this.updatePoint, true);\n    };\n\n    this.onPointerUp = function (event, info) {\n      // notify pan session ended\n      var panInfo = getPanInfo(info, _this.history);\n      var _this$handlers2 = _this.handlers,\n          onEnd = _this$handlers2.onEnd,\n          onSessionEnd = _this$handlers2.onSessionEnd;\n      onSessionEnd == null ? void 0 : onSessionEnd(event, panInfo);\n\n      _this.end(); // if panning never started, no need to call `onEnd`\n      // panning requires a pointermove of at least 3px\n\n\n      if (!onEnd || !_this.startEvent) return;\n      onEnd == null ? void 0 : onEnd(event, panInfo);\n    };\n\n    this.win = getEventWindow(_event); // If we have more than one touch, don't start detecting this gesture\n\n    if (isMultiTouchEvent(_event)) return;\n    this.handlers = handlers;\n\n    if (threshold) {\n      this.threshold = threshold;\n    } // stop default browser behavior\n\n\n    _event.stopPropagation();\n\n    _event.preventDefault(); // get and save the `pointerdown` event info in history\n    // we'll use it to compute the `offset`\n\n\n    var _info = extractEventInfo(_event);\n\n    var _getFrameData2 = getFrameData(),\n        _timestamp = _getFrameData2.timestamp;\n\n    this.history = [_extends({}, _info.point, {\n      timestamp: _timestamp\n    })]; // notify pan session start\n\n    var onSessionStart = handlers.onSessionStart;\n    onSessionStart == null ? void 0 : onSessionStart(_event, getPanInfo(_info, this.history)); // attach event listeners and return a single function to remove them all\n\n    this.removeListeners = pipe(addPointerEvent(this.win, \"pointermove\", this.onPointerMove), addPointerEvent(this.win, \"pointerup\", this.onPointerUp), addPointerEvent(this.win, \"pointercancel\", this.onPointerUp));\n  }\n\n  var _proto = PanSession.prototype;\n\n  _proto.updateHandlers = function updateHandlers(handlers) {\n    this.handlers = handlers;\n  };\n\n  _proto.end = function end() {\n    var _this$removeListeners;\n\n    (_this$removeListeners = this.removeListeners) == null ? void 0 : _this$removeListeners.call(this);\n    cancelSync.update(this.updatePoint);\n  };\n\n  return PanSession;\n}();\n\nfunction subtractPoint(a, b) {\n  return {\n    x: a.x - b.x,\n    y: a.y - b.y\n  };\n}\n\nfunction startPanPoint(history) {\n  return history[0];\n}\n\nfunction lastPanPoint(history) {\n  return history[history.length - 1];\n}\n\nfunction getPanInfo(info, history) {\n  return {\n    point: info.point,\n    delta: subtractPoint(info.point, lastPanPoint(history)),\n    offset: subtractPoint(info.point, startPanPoint(history)),\n    velocity: getVelocity(history, 0.1)\n  };\n}\n\nfunction lastDevicePoint(history) {\n  return history[history.length - 1];\n}\n\nvar toMilliseconds = function toMilliseconds(seconds) {\n  return seconds * 1000;\n};\n\nfunction getVelocity(history, timeDelta) {\n  if (history.length < 2) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var i = history.length - 1;\n  var timestampedPoint = null;\n  var lastPoint = lastDevicePoint(history);\n\n  while (i >= 0) {\n    timestampedPoint = history[i];\n\n    if (lastPoint.timestamp - timestampedPoint.timestamp > toMilliseconds(timeDelta)) {\n      break;\n    }\n\n    i--;\n  }\n\n  if (!timestampedPoint) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var time = (lastPoint.timestamp - timestampedPoint.timestamp) / 1000;\n\n  if (time === 0) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var currentVelocity = {\n    x: (lastPoint.x - timestampedPoint.x) / time,\n    y: (lastPoint.y - timestampedPoint.y) / time\n  };\n\n  if (currentVelocity.x === Infinity) {\n    currentVelocity.x = 0;\n  }\n\n  if (currentVelocity.y === Infinity) {\n    currentVelocity.y = 0;\n  }\n\n  return currentVelocity;\n}\n\nvar breakpoints = Object.freeze([\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"]);\nfunction mapResponsive(prop, mapper) {\n  if (isArray(prop)) {\n    return prop.map(function (item) {\n      if (item === null) {\n        return null;\n      }\n\n      return mapper(item);\n    });\n  }\n\n  if (isObject(prop)) {\n    return objectKeys(prop).reduce(function (result, key) {\n      result[key] = mapper(prop[key]);\n      return result;\n    }, {});\n  }\n\n  if (prop != null) {\n    return mapper(prop);\n  }\n\n  return null;\n}\nfunction objectToArrayNotation(obj, bps) {\n  if (bps === void 0) {\n    bps = breakpoints;\n  }\n\n  var result = bps.map(function (br) {\n    var _obj$br;\n\n    return (_obj$br = obj[br]) != null ? _obj$br : null;\n  });\n\n  while (getLastItem(result) === null) {\n    result.pop();\n  }\n\n  return result;\n}\nfunction arrayToObjectNotation(values, bps) {\n  if (bps === void 0) {\n    bps = breakpoints;\n  }\n\n  var result = {};\n  values.forEach(function (value, index) {\n    var key = bps[index];\n    if (value == null) return;\n    result[key] = value;\n  });\n  return result;\n}\nfunction isResponsiveObjectLike(obj, bps) {\n  if (bps === void 0) {\n    bps = breakpoints;\n  }\n\n  var keys = Object.keys(obj);\n  return keys.length > 0 && keys.every(function (key) {\n    return bps.includes(key);\n  });\n}\n/**\n * since breakpoints are defined as custom properties on an array, you may\n * `Object.keys(theme.breakpoints)` to retrieve both regular numeric indices\n * and custom breakpoints as string.\n *\n * This function returns true given a custom array property.\n */\n\nvar isCustomBreakpoint = function isCustomBreakpoint(maybeBreakpoint) {\n  return Number.isNaN(Number(maybeBreakpoint));\n};\n\nfunction getUserAgentBrowser(navigator) {\n  var ua = navigator.userAgent,\n      vendor = navigator.vendor;\n  var android = /(android)/i.test(ua);\n\n  switch (true) {\n    case /CriOS/.test(ua):\n      return \"Chrome for iOS\";\n\n    case /Edg\\//.test(ua):\n      return \"Edge\";\n\n    case android && /Silk\\//.test(ua):\n      return \"Silk\";\n\n    case /Chrome/.test(ua) && /Google Inc/.test(vendor):\n      return \"Chrome\";\n\n    case /Firefox\\/\\d+\\.\\d+$/.test(ua):\n      return \"Firefox\";\n\n    case android:\n      return \"AOSP\";\n\n    case /MSIE|Trident/.test(ua):\n      return \"IE\";\n\n    case /Safari/.test(navigator.userAgent) && /Apple Computer/.test(ua):\n      return \"Safari\";\n\n    case /AppleWebKit/.test(ua):\n      return \"WebKit\";\n\n    default:\n      return null;\n  }\n}\n\nfunction getUserAgentOS(navigator) {\n  var ua = navigator.userAgent,\n      platform = navigator.platform;\n\n  switch (true) {\n    case /Android/.test(ua):\n      return \"Android\";\n\n    case /iPhone|iPad|iPod/.test(platform):\n      return \"iOS\";\n\n    case /Win/.test(platform):\n      return \"Windows\";\n\n    case /Mac/.test(platform):\n      return \"Mac\";\n\n    case /CrOS/.test(ua):\n      return \"Chrome OS\";\n\n    case /Firefox/.test(ua):\n      return \"Firefox OS\";\n\n    default:\n      return null;\n  }\n}\n\nfunction detectDeviceType(navigator) {\n  var ua = navigator.userAgent;\n  if (/(tablet)|(iPad)|(Nexus 9)/i.test(ua)) return \"tablet\";\n  if (/(mobi)/i.test(ua)) return \"phone\";\n  return \"desktop\";\n}\nfunction detectOS(os) {\n  if (!isBrowser) return false;\n  return getUserAgentOS(window.navigator) === os;\n}\nfunction detectBrowser(browser) {\n  if (!isBrowser) return false;\n  return getUserAgentBrowser(window.navigator) === browser;\n}\nfunction detectTouch() {\n  if (!isBrowser) return false;\n  return window.ontouchstart === null && window.ontouchmove === null && window.ontouchend === null;\n}\n\nfunction walkObject(target, predicate) {\n  function inner(value, path) {\n    if (path === void 0) {\n      path = [];\n    }\n\n    if (isArray(value)) {\n      return value.map(function (item, index) {\n        return inner(item, [].concat(path, [String(index)]));\n      });\n    }\n\n    if (isObject(value)) {\n      return fromEntries(Object.entries(value).map(function (_ref) {\n        var key = _ref[0],\n            child = _ref[1];\n        return [key, inner(child, [].concat(path, [key]))];\n      }));\n    }\n\n    return predicate(value, path);\n  }\n\n  return inner(target);\n}\n\nexport { PanSession, __DEV__, __TEST__, addDomEvent, addItem, addPointerEvent, analyzeBreakpoints, ariaAttr, arrayToObjectNotation, breakpoints, callAll, callAllHandlers, canUseDOM, chunk, clampValue, closest, compose, contains, countDecimalPlaces, cx, dataAttr, detectBrowser, detectDeviceType, detectOS, detectTouch, determineLazyBehavior, distance, error, extractEventInfo, filterUndefined, flatten, focus, focusNextTabbable, focusPreviousTabbable, fromEntries, get, getActiveElement, getAllFocusable, getAllTabbable, getCSSVar, getEventWindow, getFirstFocusable, getFirstItem, getFirstTabbableIn, getLastItem, getLastTabbableIn, getNextIndex, getNextItem, getNextItemFromSearch, getNextTabbable, getOwnerDocument, getOwnerWindow, getPointerEventName, getPrevIndex, getPrevItem, getPreviousTabbable, getRelatedTarget, getViewportPointFromEvent, getWithDefault, hasDisplayNone, hasFocusWithin, hasNegativeTabIndex, hasTabIndex, isActiveElement, isArray, isBrowser, isContentEditable, isCssVar, isCustomBreakpoint, isDefined, isDisabled, isElement, isEmpty, isEmptyArray, isEmptyObject, isFocusable, isFunction, isHTMLElement, isHidden, isInputElement, isInputEvent, isMouseEvent, isMultiTouchEvent, isNotEmptyObject, isNotNumber, isNull, isNumber, isNumeric, isObject, isRefObject, isResponsiveObjectLike, isRightClick, isString, isTabbable, isTouchEvent, isUndefined, mapResponsive, maxSafeInteger, memoize, memoizedGet, minSafeInteger, noop, normalizeEventKey, objectFilter, objectKeys, objectToArrayNotation, omit, once, percentToValue, pick, pipe, px, removeIndex, removeItem, roundValueToStep, runIfFn, split, toPrecision, valueToPercent, walkObject, warn, wrapPointerEventHandler };\n","import { keyframes, forwardRef, useStyleConfig, omitThemingProps, chakra } from '@chakra-ui/system';\nimport { cx, __DEV__ } from '@chakra-ui/utils';\nimport { VisuallyHidden } from '@chakra-ui/visually-hidden';\nimport * as React from 'react';\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar _excluded = [\"label\", \"thickness\", \"speed\", \"emptyColor\", \"className\"];\nvar spin = keyframes({\n  \"0%\": {\n    transform: \"rotate(0deg)\"\n  },\n  \"100%\": {\n    transform: \"rotate(360deg)\"\n  }\n});\n\n/**\n * Spinner is used to indicate the loading state of a page or a component,\n * It renders a `div` by default.\n *\n * @see Docs https://chakra-ui.com/spinner\n */\nvar Spinner = /*#__PURE__*/forwardRef(function (props, ref) {\n  var styles = useStyleConfig(\"Spinner\", props);\n\n  var _omitThemingProps = omitThemingProps(props),\n      _omitThemingProps$lab = _omitThemingProps.label,\n      label = _omitThemingProps$lab === void 0 ? \"Loading...\" : _omitThemingProps$lab,\n      _omitThemingProps$thi = _omitThemingProps.thickness,\n      thickness = _omitThemingProps$thi === void 0 ? \"2px\" : _omitThemingProps$thi,\n      _omitThemingProps$spe = _omitThemingProps.speed,\n      speed = _omitThemingProps$spe === void 0 ? \"0.45s\" : _omitThemingProps$spe,\n      _omitThemingProps$emp = _omitThemingProps.emptyColor,\n      emptyColor = _omitThemingProps$emp === void 0 ? \"transparent\" : _omitThemingProps$emp,\n      className = _omitThemingProps.className,\n      rest = _objectWithoutPropertiesLoose(_omitThemingProps, _excluded);\n\n  var _className = cx(\"chakra-spinner\", className);\n\n  var spinnerStyles = _extends({\n    display: \"inline-block\",\n    borderColor: \"currentColor\",\n    borderStyle: \"solid\",\n    borderRadius: \"99999px\",\n    borderWidth: thickness,\n    borderBottomColor: emptyColor,\n    borderLeftColor: emptyColor,\n    animation: spin + \" \" + speed + \" linear infinite\"\n  }, styles);\n\n  return /*#__PURE__*/React.createElement(chakra.div, _extends({\n    ref: ref,\n    __css: spinnerStyles,\n    className: _className\n  }, rest), label && /*#__PURE__*/React.createElement(VisuallyHidden, null, label));\n});\n\nif (__DEV__) {\n  Spinner.displayName = \"Spinner\";\n}\n\nexport { Spinner };\n"],"sourceRoot":""}