{"version":3,"sources":["../node_modules/@chakra-ui/image/node_modules/@chakra-ui/utils/dist/chakra-ui-utils.esm.js","../node_modules/@chakra-ui/image/dist/chakra-ui-image.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","_objectWithoutPropertiesLoose","excluded","sourceKeys","keys","indexOf","_excluded","_excluded2","NativeImage","React","props","ref","htmlWidth","htmlHeight","alt","rest","width","height","Image$1","forwardRef","fallbackSrc","src","srcSet","align","fit","loading","ignoreFallback","crossOrigin","shouldIgnore","status","onLoad","onError","sizes","_useState","useState","setStatus","useEffect","imageRef","useRef","load","useCallback","flush","img","Image","srcset","onload","event","onerror","error","current","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","object","forEach","includes","omit","chakra","as","className"],"mappings":"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","file":"static/js/3.e24e982f.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 { forwardRef, chakra } from '@chakra-ui/system';\nimport { omit, __DEV__ } from '@chakra-ui/utils';\nimport * as React from 'react';\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport { useSafeLayoutEffect } from '@chakra-ui/hooks';\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\n/**\n * React hook that loads an image in the browser,\n * and lets us know the `status` so we can show image\n * fallback if it is still `pending`\n *\n * @returns the status of the image loading progress\n *\n * @example\n *\n * ```jsx\n * function App(){\n * const status = useImage({ src: \"image.png\" })\n * return status === \"loaded\" ? <img src=\"image.png\" /> : <Placeholder />\n * }\n * ```\n */\nfunction useImage(props) {\n var loading = props.loading,\n src = props.src,\n srcSet = props.srcSet,\n onLoad = props.onLoad,\n onError = props.onError,\n crossOrigin = props.crossOrigin,\n sizes = props.sizes,\n ignoreFallback = props.ignoreFallback;\n\n var _useState = useState(\"pending\"),\n status = _useState[0],\n setStatus = _useState[1];\n\n useEffect(function () {\n setStatus(src ? \"loading\" : \"pending\");\n }, [src]);\n var imageRef = useRef();\n var load = useCallback(function () {\n if (!src) return;\n flush();\n var img = new Image();\n img.src = src;\n if (crossOrigin) img.crossOrigin = crossOrigin;\n if (srcSet) img.srcset = srcSet;\n if (sizes) img.sizes = sizes;\n if (loading) img.loading = loading;\n\n img.onload = function (event) {\n flush();\n setStatus(\"loaded\");\n onLoad == null ? void 0 : onLoad(event);\n };\n\n img.onerror = function (error) {\n flush();\n setStatus(\"failed\");\n onError == null ? void 0 : onError(error);\n };\n\n imageRef.current = img;\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError, loading]);\n\n var flush = function flush() {\n if (imageRef.current) {\n imageRef.current.onload = null;\n imageRef.current.onerror = null;\n imageRef.current = null;\n }\n };\n\n useSafeLayoutEffect(function () {\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's bail out.\n */\n if (ignoreFallback) return undefined;\n\n if (status === \"loading\") {\n load();\n }\n\n return function () {\n flush();\n };\n }, [status, load, ignoreFallback]);\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's just return 'loaded'\n */\n\n return ignoreFallback ? \"loaded\" : status;\n}\n\nvar _excluded = [\"htmlWidth\", \"htmlHeight\", \"alt\"],\n _excluded2 = [\"fallbackSrc\", \"fallback\", \"src\", \"srcSet\", \"align\", \"fit\", \"loading\", \"ignoreFallback\", \"crossOrigin\"];\nvar NativeImage = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var htmlWidth = props.htmlWidth,\n htmlHeight = props.htmlHeight,\n alt = props.alt,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n return /*#__PURE__*/React.createElement(\"img\", _extends({\n width: htmlWidth,\n height: htmlHeight,\n ref: ref,\n alt: alt\n }, rest));\n});\n\n/**\n * React component that renders an image with support\n * for fallbacks\n *\n * @see Docs https://chakra-ui.com/image\n */\nvar Image$1 = /*#__PURE__*/forwardRef(function (props, ref) {\n var fallbackSrc = props.fallbackSrc,\n fallback = props.fallback,\n src = props.src,\n srcSet = props.srcSet,\n align = props.align,\n fit = props.fit,\n loading = props.loading,\n ignoreFallback = props.ignoreFallback,\n crossOrigin = props.crossOrigin,\n rest = _objectWithoutPropertiesLoose(props, _excluded2);\n /**\n * Defer to native `img` tag if `loading` prop is passed\n * @see https://github.com/chakra-ui/chakra-ui/issues/1027\n */\n\n\n var shouldIgnore = loading != null || ignoreFallback || fallbackSrc === undefined && fallback === undefined; // if the user doesn't provide any kind of fallback we should ignore it\n\n var status = useImage(_extends({}, props, {\n ignoreFallback: shouldIgnore\n }));\n\n var shared = _extends({\n ref: ref,\n objectFit: fit,\n objectPosition: align\n }, shouldIgnore ? rest : omit(rest, [\"onError\", \"onLoad\"]));\n\n if (status !== \"loaded\") {\n /**\n * If user passed a custom fallback component,\n * let's render it here.\n */\n if (fallback) return fallback;\n return /*#__PURE__*/React.createElement(chakra.img, _extends({\n as: NativeImage,\n className: \"chakra-image__placeholder\",\n src: fallbackSrc\n }, shared));\n }\n\n return /*#__PURE__*/React.createElement(chakra.img, _extends({\n as: NativeImage,\n src: src,\n srcSet: srcSet,\n crossOrigin: crossOrigin,\n loading: loading,\n className: \"chakra-image\"\n }, shared));\n});\n\n/**\n * Fallback component for most SSR users who want to use the native `img` with\n * support for chakra props\n */\nvar Img = /*#__PURE__*/forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(chakra.img, _extends({\n ref: ref,\n as: NativeImage,\n className: \"chakra-image\"\n }, props));\n});\n\nif (__DEV__) {\n Image$1.displayName = \"Image\";\n}\n\nexport { Image$1 as Image, Img, useImage };\n"],"sourceRoot":""}