{"version":3,"file":"zh-keyboard-react.umd.cjs","names":["Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","Symbol","Symbol","funcTag","isFunction","funcToString","objectProto","hasOwnProperty","isFunction","WeakMap","MAX_SAFE_INTEGER","isFunction","objectProto","argsTag","hasOwnProperty","propertyIsEnumerable","freeExports","freeModule","Buffer","argsTag","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","hasOwnProperty","hasOwnProperty","HASH_UNDEFINED","hasOwnProperty","hasOwnProperty","HASH_UNDEFINED","Map","Map","Map","Promise","Set","mapTag","objectTag","setTag","dataViewTag","Map","Promise","Set","WeakMap","Uint8Array","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","COMPARE_PARTIAL_FLAG","Symbol","Uint8Array","COMPARE_PARTIAL_FLAG","hasOwnProperty","getTag","React","useLayoutEffect","useEffect","React"],"sources":["../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqual.js","../../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs","../../../node_modules/.pnpm/screenfull@5.2.0/node_modules/screenfull/dist/screenfull.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@18.3.1/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/.pnpm/@reactuses+core@6.0.3_react@18.3.1/node_modules/@reactuses/core/dist/index.mjs","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/utils/useHandwritingRecognizer.ts","../src/assets/icons/keyboard-backspace.svg","../src/assets/icons/keyboard-return.svg","../src/hooks/useKeyRepeater.ts","../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","../src/components/CandidateList.tsx","../src/components/HandwritingInput.tsx","../src/assets/icons/keyboard-caps.svg","../src/assets/icons/keyboard-space.svg","../src/assets/icons/chevron-right.svg","../src/components/CandidateSelection.tsx","../src/components/CandidateBar.tsx","../src/components/KeyboardBase.tsx","../src/components/NumericKeyboard.tsx","../src/assets/icons/lock-open-outline.svg","../src/assets/icons/lock-outline.svg","../src/components/SymbolKeyboard.tsx","../src/components/ZhKeyboard.tsx","../src/lib.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n  function set (name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get (name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        jar[found] = converter.read(value, found);\n\n        if (name === found) {\n          break\n        }\n      } catch (e) {}\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set,\n      get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","/*!\n* screenfull\n* v5.2.0 - 2021-11-03\n* (c) Sindre Sorhus; MIT License\n*/\n(function () {\n\t'use strict';\n\n\tvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\n\tvar isCommonjs = typeof module !== 'undefined' && module.exports;\n\n\tvar fn = (function () {\n\t\tvar val;\n\n\t\tvar fnMap = [\n\t\t\t[\n\t\t\t\t'requestFullscreen',\n\t\t\t\t'exitFullscreen',\n\t\t\t\t'fullscreenElement',\n\t\t\t\t'fullscreenEnabled',\n\t\t\t\t'fullscreenchange',\n\t\t\t\t'fullscreenerror'\n\t\t\t],\n\t\t\t// New WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullscreen',\n\t\t\t\t'webkitExitFullscreen',\n\t\t\t\t'webkitFullscreenElement',\n\t\t\t\t'webkitFullscreenEnabled',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t// Old WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullScreen',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitCurrentFullScreenElement',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t[\n\t\t\t\t'mozRequestFullScreen',\n\t\t\t\t'mozCancelFullScreen',\n\t\t\t\t'mozFullScreenElement',\n\t\t\t\t'mozFullScreenEnabled',\n\t\t\t\t'mozfullscreenchange',\n\t\t\t\t'mozfullscreenerror'\n\t\t\t],\n\t\t\t[\n\t\t\t\t'msRequestFullscreen',\n\t\t\t\t'msExitFullscreen',\n\t\t\t\t'msFullscreenElement',\n\t\t\t\t'msFullscreenEnabled',\n\t\t\t\t'MSFullscreenChange',\n\t\t\t\t'MSFullscreenError'\n\t\t\t]\n\t\t];\n\n\t\tvar i = 0;\n\t\tvar l = fnMap.length;\n\t\tvar ret = {};\n\n\t\tfor (; i < l; i++) {\n\t\t\tval = fnMap[i];\n\t\t\tif (val && val[1] in document) {\n\t\t\t\tfor (i = 0; i < val.length; i++) {\n\t\t\t\t\tret[fnMap[0][i]] = val[i];\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tvar eventNameMap = {\n\t\tchange: fn.fullscreenchange,\n\t\terror: fn.fullscreenerror\n\t};\n\n\tvar screenfull = {\n\t\trequest: function (element, options) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar onFullScreenEntered = function () {\n\t\t\t\t\tthis.off('change', onFullScreenEntered);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenEntered);\n\n\t\t\t\telement = element || document.documentElement;\n\n\t\t\t\tvar returnPromise = element[fn.requestFullscreen](options);\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\texit: function () {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tif (!this.isFullscreen) {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar onFullScreenExit = function () {\n\t\t\t\t\tthis.off('change', onFullScreenExit);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenExit);\n\n\t\t\t\tvar returnPromise = document[fn.exitFullscreen]();\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\ttoggle: function (element, options) {\n\t\t\treturn this.isFullscreen ? this.exit() : this.request(element, options);\n\t\t},\n\t\tonchange: function (callback) {\n\t\t\tthis.on('change', callback);\n\t\t},\n\t\tonerror: function (callback) {\n\t\t\tthis.on('error', callback);\n\t\t},\n\t\ton: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\toff: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\traw: fn\n\t};\n\n\tif (!fn) {\n\t\tif (isCommonjs) {\n\t\t\tmodule.exports = {isEnabled: false};\n\t\t} else {\n\t\t\twindow.screenfull = {isEnabled: false};\n\t\t}\n\n\t\treturn;\n\t}\n\n\tObject.defineProperties(screenfull, {\n\t\tisFullscreen: {\n\t\t\tget: function () {\n\t\t\t\treturn Boolean(document[fn.fullscreenElement]);\n\t\t\t}\n\t\t},\n\t\telement: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn document[fn.fullscreenElement];\n\t\t\t}\n\t\t},\n\t\tisEnabled: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\t// Coerce to boolean in case of old WebKit\n\t\t\t\treturn Boolean(document[fn.fullscreenEnabled]);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (isCommonjs) {\n\t\tmodule.exports = screenfull;\n\t} else {\n\t\twindow.screenfull = screenfull;\n\t}\n})();\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function is(x, y) {\n      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n    }\n    function useSyncExternalStore$2(subscribe, getSnapshot) {\n      didWarnOld18Alpha ||\n        void 0 === React.startTransition ||\n        ((didWarnOld18Alpha = !0),\n        console.error(\n          \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n        ));\n      var value = getSnapshot();\n      if (!didWarnUncachedGetSnapshot) {\n        var cachedValue = getSnapshot();\n        objectIs(value, cachedValue) ||\n          (console.error(\n            \"The result of getSnapshot should be cached to avoid an infinite loop\"\n          ),\n          (didWarnUncachedGetSnapshot = !0));\n      }\n      cachedValue = useState({\n        inst: { value: value, getSnapshot: getSnapshot }\n      });\n      var inst = cachedValue[0].inst,\n        forceUpdate = cachedValue[1];\n      useLayoutEffect(\n        function () {\n          inst.value = value;\n          inst.getSnapshot = getSnapshot;\n          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n        },\n        [subscribe, value, getSnapshot]\n      );\n      useEffect(\n        function () {\n          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n          return subscribe(function () {\n            checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n          });\n        },\n        [subscribe]\n      );\n      useDebugValue(value);\n      return value;\n    }\n    function checkIfSnapshotChanged(inst) {\n      var latestGetSnapshot = inst.getSnapshot;\n      inst = inst.value;\n      try {\n        var nextValue = latestGetSnapshot();\n        return !objectIs(inst, nextValue);\n      } catch (error) {\n        return !0;\n      }\n    }\n    function useSyncExternalStore$1(subscribe, getSnapshot) {\n      return getSnapshot();\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var React = require(\"react\"),\n      objectIs = \"function\" === typeof Object.is ? Object.is : is,\n      useState = React.useState,\n      useEffect = React.useEffect,\n      useLayoutEffect = React.useLayoutEffect,\n      useDebugValue = React.useDebugValue,\n      didWarnOld18Alpha = !1,\n      didWarnUncachedGetSnapshot = !1,\n      shim =\n        \"undefined\" === typeof window ||\n        \"undefined\" === typeof window.document ||\n        \"undefined\" === typeof window.document.createElement\n          ? useSyncExternalStore$1\n          : useSyncExternalStore$2;\n    exports.useSyncExternalStore =\n      void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import React, { useLayoutEffect, useEffect, useRef, useReducer, useState, useCallback, useMemo } from 'react';\nimport { isEqual, debounce, throttle } from 'lodash-es';\nimport Cookies from 'js-cookie';\nimport screenfull from 'screenfull';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\n\nvar _window_navigator, _window;\nfunction isFunction(val) {\n    return typeof val === 'function';\n}\nfunction isString(val) {\n    return typeof val === 'string';\n}\nconst isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test';\nconst isBrowser = typeof window !== 'undefined';\nconst isNavigator = typeof navigator !== 'undefined';\nfunction noop() {}\nconst isIOS = isBrowser && ((_window = window) == null ? void 0 : (_window_navigator = _window.navigator) == null ? void 0 : _window_navigator.userAgent) && /iP(?:ad|hone|od)/.test(window.navigator.userAgent);\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nconst useLatest = (value)=>{\n    const ref = useRef(value);\n    useIsomorphicLayoutEffect(()=>{\n        ref.current = value;\n    }, [\n        value\n    ]);\n    return ref;\n};\n\nfunction on(obj, ...args) {\n    if (obj && obj.addEventListener) {\n        obj.addEventListener(...args);\n    }\n}\nfunction off(obj, ...args) {\n    if (obj && obj.removeEventListener) {\n        obj.removeEventListener(...args);\n    }\n}\nconst defaultWindow =  typeof window !== 'undefined' ? window : undefined;\nconst defaultDocument =  typeof document !== 'undefined' ? document : undefined;\n\nconst defaultOptions$1 = {};\nfunction defaultOnError(e) {\n    console.error(e);\n}\n\nfunction getTargetElement(target, defaultElement) {\n    if (!isBrowser) {\n        return undefined;\n    }\n    if (!target) {\n        return defaultElement;\n    }\n    let targetElement;\n    if (isFunction(target)) {\n        targetElement = target();\n    } else if ('current' in target) {\n        targetElement = target.current;\n    } else {\n        targetElement = target;\n    }\n    return targetElement;\n}\n\nconst updateReducer = (num)=>(num + 1) % 1000000;\nfunction useUpdate() {\n    const [, update] = useReducer(updateReducer, 0);\n    return update;\n}\n\nconst useCustomCompareEffect = (effect, deps, depsEqual)=>{\n    if (process.env.NODE_ENV !== 'production') {\n        if (!Array.isArray(deps) || !deps.length) {\n            console.warn('`useCustomCompareEffect` should not be used with no dependencies. Use React.useEffect instead.');\n        }\n        if (typeof depsEqual !== 'function') {\n            console.warn('`useCustomCompareEffect` should be used with depsEqual callback for comparing deps list');\n        }\n    }\n    const ref = useRef(undefined);\n    const forceUpdate = useUpdate();\n    if (!ref.current) {\n        ref.current = deps;\n    }\n    useIsomorphicLayoutEffect(()=>{\n        if (!depsEqual(deps, ref.current)) {\n            ref.current = deps;\n            forceUpdate();\n        }\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    useEffect(effect, ref.current);\n};\n\nconst useDeepCompareEffect = (effect, deps)=>{\n    if (process.env.NODE_ENV !== 'production') {\n        if (!Array.isArray(deps) || !deps.length) {\n            console.warn('`useDeepCompareEffect` should not be used with no dependencies. Use React.useEffect instead.');\n        }\n    }\n    useCustomCompareEffect(effect, deps, isEqual);\n};\n\nfunction useEventListener(eventName, handler, element, options = defaultOptions$1) {\n    const savedHandler = useLatest(handler);\n    useDeepCompareEffect(()=>{\n        const targetElement = getTargetElement(element, defaultWindow);\n        if (!(targetElement && targetElement.addEventListener)) {\n            return;\n        }\n        const eventListener = (event)=>savedHandler.current(event);\n        on(targetElement, eventName, eventListener, options);\n        return ()=>{\n            if (!(targetElement && targetElement.removeEventListener)) {\n                return;\n            }\n            off(targetElement, eventName, eventListener);\n        };\n    }, [\n        eventName,\n        element,\n        options\n    ]);\n}\n\nconst useMount = (fn)=>{\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(`useMount: parameter \\`fn\\` expected to be a function, but got \"${typeof fn}\".`);\n        }\n    }\n    useEffect(()=>{\n        fn == null ? void 0 : fn();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n};\n\nconst useActiveElement = ()=>{\n    const [active, setActive] = useState(null);\n    const listener = useCallback(()=>{\n        var _window;\n        setActive((_window = window) == null ? void 0 : _window.document.activeElement);\n    }, []);\n    useEventListener('blur', listener, defaultWindow, true);\n    useEventListener('focus', listener, defaultWindow, true);\n    useMount(()=>{\n        var _window;\n        setActive((_window = window) == null ? void 0 : _window.document.activeElement);\n    });\n    return active;\n};\n\nfunction useMountedState() {\n    const mountedRef = useRef(false);\n    const get = useCallback(()=>mountedRef.current, []);\n    useEffect(()=>{\n        mountedRef.current = true;\n        return ()=>{\n            mountedRef.current = false;\n        };\n    }, []);\n    return get;\n}\n\nfunction asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$7(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nconst useAsyncEffect = (effect, cleanup = noop, deps)=>{\n    const mounted = useMountedState();\n    useEffect(()=>{\n        const execute = /*#__PURE__*/ _async_to_generator$7(function*() {\n            if (!mounted()) {\n                return;\n            }\n            yield effect();\n        });\n        execute();\n        return ()=>{\n            cleanup();\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n};\n\nconst listerOptions = {\n    passive: true\n};\nconst useClickOutside = (target, handler, enabled = true)=>{\n    const savedHandler = useLatest(handler);\n    const listener = (event)=>{\n        if (!enabled) {\n            return;\n        }\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        const elements = event.composedPath();\n        if (element === event.target || elements.includes(element)) {\n            return;\n        }\n        savedHandler.current(event);\n    };\n    useEventListener('mousedown', listener, defaultWindow, listerOptions);\n    useEventListener('touchstart', listener, defaultWindow, listerOptions);\n};\n\nfunction getInitialState$5(key, defaultValue) {\n    // Prevent a React hydration mismatch when a default value is provided.\n    if (defaultValue !== undefined) {\n        return defaultValue;\n    }\n    if (isBrowser) {\n        return Cookies.get(key);\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`useCookie` When server side rendering, defaultValue should be defined to prevent a hydration mismatches.');\n    }\n    return '';\n}\nconst useCookie = (key, options = defaultOptions$1, defaultValue)=>{\n    const [cookieValue, setCookieValue] = useState(getInitialState$5(key, defaultValue));\n    useEffect(()=>{\n        const getStoredValue = ()=>{\n            const raw = Cookies.get(key);\n            if (raw !== undefined && raw !== null) {\n                return raw;\n            } else {\n                if (defaultValue === undefined) {\n                    Cookies.remove(key);\n                } else {\n                    Cookies.set(key, defaultValue, options);\n                }\n                return defaultValue;\n            }\n        };\n        setCookieValue(getStoredValue());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        defaultValue,\n        key,\n        JSON.stringify(options)\n    ]);\n    const updateCookie = useCallback((newValue)=>{\n        const value = isFunction(newValue) ? newValue(cookieValue) : newValue;\n        if (value === undefined) {\n            Cookies.remove(key);\n        } else {\n            Cookies.set(key, value, options);\n        }\n        setCookieValue(value);\n    }, // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        key,\n        cookieValue,\n        JSON.stringify(options)\n    ]);\n    const refreshCookie = useCallback(()=>{\n        const cookieValue = Cookies.get(key);\n        if (isString(cookieValue)) {\n            setCookieValue(cookieValue);\n        }\n    }, [\n        key\n    ]);\n    return [\n        cookieValue,\n        updateCookie,\n        refreshCookie\n    ];\n};\n\n/**\n * keep function reference immutable\n */ const useEvent = (fn)=>{\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(`useEvent expected parameter is a function, got ${typeof fn}`);\n        }\n    }\n    const handlerRef = useRef(fn);\n    useIsomorphicLayoutEffect(()=>{\n        handlerRef.current = fn;\n    }, [\n        fn\n    ]);\n    return useCallback((...args)=>{\n        const fn = handlerRef.current;\n        return fn(...args);\n    }, []);\n};\n\nconst useInterval = (callback, delay, options = defaultOptions$1)=>{\n    const { immediate, controls } = options;\n    const savedCallback = useLatest(callback);\n    const isActive = useRef(false);\n    const timer = useRef(null);\n    const clean = ()=>{\n        timer.current && clearInterval(timer.current);\n    };\n    const resume = useEvent(()=>{\n        isActive.current = true;\n        timer.current = setInterval(()=>savedCallback.current(), delay || 0);\n    });\n    const pause = useEvent(()=>{\n        isActive.current = false;\n        clean();\n    });\n    useEffect(()=>{\n        if (immediate) {\n            savedCallback.current();\n        }\n        if (controls) {\n            return;\n        }\n        if (delay !== null) {\n            resume();\n            return ()=>{\n                clean();\n            };\n        }\n        return undefined;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        delay,\n        immediate\n    ]);\n    return {\n        isActive,\n        pause,\n        resume\n    };\n};\n\nfunction padZero(time) {\n    return `${time}`.length < 2 ? `0${time}` : `${time}`;\n}\nfunction getHMSTime(timeDiff) {\n    if (timeDiff <= 0) {\n        return [\n            '00',\n            '00',\n            '00'\n        ];\n    }\n    if (timeDiff > 100 * 3600) {\n        return [\n            '99',\n            '59',\n            '59'\n        ];\n    }\n    const hour = Math.floor(timeDiff / 3600);\n    const minute = Math.floor((timeDiff - hour * 3600) / 60);\n    const second = timeDiff - hour * 3600 - minute * 60;\n    return [\n        padZero(hour),\n        padZero(minute),\n        padZero(second)\n    ];\n}\nconst useCountDown = (time, format = getHMSTime, callback)=>{\n    const [remainTime, setRemainTime] = useState(time);\n    const [delay, setDelay] = useState(1000);\n    useInterval(()=>{\n        if (remainTime <= 0) {\n            setDelay(null);\n            return;\n        }\n        setRemainTime(remainTime - 1);\n    }, delay);\n    useEffect(()=>{\n        if (time > 0 && remainTime <= 0) {\n            callback && callback();\n        }\n    }, [\n        callback,\n        remainTime,\n        time\n    ]);\n    const [hour, minute, secoud] = format(remainTime);\n    return [\n        hour,\n        minute,\n        secoud\n    ];\n};\n\nconst useCounter = (initialValue = 0, max = null, min = null)=>{\n    // avoid exec init code every render\n    const initFunc = ()=>{\n        let init = typeof initialValue === 'function' ? initialValue() : initialValue;\n        typeof init !== 'number' && console.error(`initialValue has to be a number, got ${typeof initialValue}`);\n        if (typeof min === 'number') {\n            init = Math.max(init, min);\n        } else if (min !== null) {\n            console.error(`min has to be a number, got ${typeof min}`);\n        }\n        if (typeof max === 'number') {\n            init = Math.min(init, max);\n        } else if (max !== null) {\n            console.error(`max has to be a number, got ${typeof max}`);\n        }\n        return init;\n    };\n    const [value, setValue] = useState(initFunc);\n    const set = useEvent((newState)=>{\n        setValue((v)=>{\n            let nextValue = typeof newState === 'function' ? newState(v) : newState;\n            if (typeof min === 'number') {\n                nextValue = Math.max(nextValue, min);\n            }\n            if (typeof max === 'number') {\n                nextValue = Math.min(nextValue, max);\n            }\n            return nextValue;\n        });\n    });\n    const inc = (delta = 1)=>{\n        set((value)=>value + delta);\n    };\n    const dec = (delta = 1)=>{\n        set((value)=>value - delta);\n    };\n    const reset = ()=>{\n        set(initFunc);\n    };\n    return [\n        value,\n        set,\n        inc,\n        dec,\n        reset\n    ];\n};\n\nconst defaultOptions = {\n    observe: false\n};\n\nfunction getInitialState$4(defaultValue) {\n    // Prevent a React hydration mismatch when a default value is provided.\n    if (defaultValue !== undefined) {\n        return defaultValue;\n    }\n    if (isBrowser) {\n        return '';\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`useCssVar` When server side rendering, defaultValue should be defined to prevent a hydration mismatches.');\n    }\n    return '';\n}\nconst useCssVar = (prop, target, defaultValue, options = defaultOptions)=>{\n    const { observe } = options;\n    const [variable, setVariable] = useState(getInitialState$4(defaultValue));\n    const observerRef = useRef();\n    const set = useCallback((v)=>{\n        const element = getTargetElement(target);\n        if (element == null ? void 0 : element.style) {\n            element == null ? void 0 : element.style.setProperty(prop, v);\n            setVariable(v);\n        }\n    }, [\n        prop,\n        target\n    ]);\n    const updateCssVar = useCallback(()=>{\n        const element = getTargetElement(target);\n        if (element) {\n            var _window_getComputedStyle_getPropertyValue;\n            const value = (_window_getComputedStyle_getPropertyValue = window.getComputedStyle(element).getPropertyValue(prop)) == null ? void 0 : _window_getComputedStyle_getPropertyValue.trim();\n            setVariable(value);\n        }\n    }, [\n        target,\n        prop\n    ]);\n    useEffect(()=>{\n        var _window_getComputedStyle_getPropertyValue;\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        const value = (_window_getComputedStyle_getPropertyValue = window.getComputedStyle(element).getPropertyValue(prop)) == null ? void 0 : _window_getComputedStyle_getPropertyValue.trim();\n        /** if var don't has value and defaultValue exist */ if (!value && defaultValue) {\n            set(defaultValue);\n        } else {\n            updateCssVar();\n        }\n        if (!observe) {\n            return;\n        }\n        observerRef.current = new MutationObserver(updateCssVar);\n        observerRef.current.observe(element, {\n            attributeFilter: [\n                'style',\n                'class'\n            ]\n        });\n        return ()=>{\n            if (observerRef.current) {\n                observerRef.current.disconnect();\n            }\n        };\n    }, [\n        observe,\n        target,\n        updateCssVar,\n        set,\n        defaultValue,\n        prop\n    ]);\n    return [\n        variable,\n        set\n    ];\n};\n\nconst useCycleList = (list, i = 0)=>{\n    const [index, setIndex] = useState(i);\n    const set = (i)=>{\n        const length = list.length;\n        const nextIndex = ((index + i) % length + length) % length;\n        setIndex(nextIndex);\n    };\n    const next = (i = 1)=>{\n        set(i);\n    };\n    const prev = (i = 1)=>{\n        set(-i);\n    };\n    return [\n        list[index],\n        next,\n        prev\n    ];\n};\n\nfunction guessSerializerType(rawInit) {\n    return rawInit == null || rawInit === undefined ? 'any' : rawInit instanceof Set ? 'set' : rawInit instanceof Map ? 'map' : rawInit instanceof Date ? 'date' : typeof rawInit === 'boolean' ? 'boolean' : typeof rawInit === 'string' ? 'string' : typeof rawInit === 'object' ? 'object' : Array.isArray(rawInit) ? 'object' : !Number.isNaN(rawInit) ? 'number' : 'any';\n}\n\nconst StorageSerializers = {\n    boolean: {\n        read: (v)=>v === 'true',\n        write: (v)=>String(v)\n    },\n    object: {\n        read: (v)=>JSON.parse(v),\n        write: (v)=>JSON.stringify(v)\n    },\n    number: {\n        read: (v)=>Number.parseFloat(v),\n        write: (v)=>String(v)\n    },\n    any: {\n        read: (v)=>v,\n        write: (v)=>String(v)\n    },\n    string: {\n        read: (v)=>v,\n        write: (v)=>String(v)\n    },\n    map: {\n        read: (v)=>new Map(JSON.parse(v)),\n        write: (v)=>JSON.stringify(Array.from(v.entries()))\n    },\n    set: {\n        read: (v)=>new Set(JSON.parse(v)),\n        write: (v)=>JSON.stringify(Array.from(v))\n    },\n    date: {\n        read: (v)=>new Date(v),\n        write: (v)=>v.toISOString()\n    }\n};\nfunction getInitialState$3(key, defaultValue, storage, serializer, onError) {\n    // Prevent a React hydration mismatch when a default value is provided.\n    if (defaultValue !== undefined) {\n        return defaultValue;\n    }\n    if (isBrowser) {\n        try {\n            const raw = storage == null ? void 0 : storage.getItem(key);\n            if (raw !== undefined && raw !== null) {\n                return serializer == null ? void 0 : serializer.read(raw);\n            }\n            return null;\n        } catch (error) {\n            onError == null ? void 0 : onError(error);\n        }\n    }\n    // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`createStorage` When server side rendering, defaultValue should be defined to prevent a hydration mismatches.');\n    }\n    return null;\n}\nfunction useStorage(key, defaultValue, getStorage = ()=>isBrowser ? sessionStorage : undefined, options = defaultOptions$1) {\n    let storage;\n    const { onError = defaultOnError, effectStorageValue, mountStorageValue, listenToStorageChanges = true } = options;\n    const storageValue = mountStorageValue != null ? mountStorageValue : effectStorageValue;\n    try {\n        storage = getStorage();\n    } catch (err) {\n        onError(err);\n    }\n    const type = guessSerializerType(defaultValue);\n    var _options_serializer;\n    const serializer = (_options_serializer = options.serializer) != null ? _options_serializer : StorageSerializers[type];\n    const [state, setState] = useState(getInitialState$3(key, defaultValue, storage, serializer, onError));\n    useDeepCompareEffect(()=>{\n        var _ref;\n        const data = (_ref = storageValue ? isFunction(storageValue) ? storageValue() : storageValue : defaultValue) != null ? _ref : null;\n        const getStoredValue = ()=>{\n            try {\n                const raw = storage == null ? void 0 : storage.getItem(key);\n                if (raw !== undefined && raw !== null) {\n                    return serializer.read(raw);\n                } else {\n                    storage == null ? void 0 : storage.setItem(key, serializer.write(data));\n                    return data;\n                }\n            } catch (e) {\n                onError(e);\n            }\n        };\n        setState(getStoredValue());\n    }, [\n        key,\n        serializer,\n        storage,\n        onError,\n        storageValue\n    ]);\n    const updateState = useEvent((valOrFunc)=>{\n        const currentState = isFunction(valOrFunc) ? valOrFunc(state) : valOrFunc;\n        setState(currentState);\n        if (currentState === null) {\n            storage == null ? void 0 : storage.removeItem(key);\n        } else {\n            try {\n                storage == null ? void 0 : storage.setItem(key, serializer.write(currentState));\n            } catch (e) {\n                onError(e);\n            }\n        }\n    });\n    const listener = useEvent(()=>{\n        try {\n            const raw = storage == null ? void 0 : storage.getItem(key);\n            if (raw !== undefined && raw !== null) {\n                updateState(serializer.read(raw));\n            } else {\n                updateState(null);\n            }\n        } catch (e) {\n            onError(e);\n        }\n    });\n    useEffect(()=>{\n        if (listenToStorageChanges) {\n            window.addEventListener('storage', listener);\n            return ()=>window.removeEventListener('storage', listener);\n        }\n        return ()=>{};\n    }, [\n        listenToStorageChanges,\n        listener\n    ]);\n    return [\n        state,\n        updateState\n    ];\n}\n\nfunction value() {\n    return window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\nconst useDarkMode = (options)=>{\n    const { selector = 'html', attribute = 'class', classNameDark = '', classNameLight = '', storageKey = 'reactuses-color-scheme', storage = ()=>isBrowser ? localStorage : undefined, defaultValue = false } = options;\n    const [dark, setDark] = useStorage(storageKey, defaultValue, storage, {\n        mountStorageValue: value\n    });\n    useEffect(()=>{\n        var _window;\n        const element = (_window = window) == null ? void 0 : _window.document.querySelector(selector);\n        if (!element) {\n            return;\n        }\n        if (attribute === 'class') {\n            dark && classNameDark && element.classList.add(classNameDark);\n            !dark && classNameLight && element.classList.add(classNameLight);\n        } else {\n            dark && classNameDark && element.setAttribute(attribute, classNameDark);\n            !dark && classNameLight && element.setAttribute(attribute, classNameLight);\n        }\n        return ()=>{\n            if (!element) {\n                return;\n            }\n            if (attribute === 'class') {\n                dark && classNameDark && element.classList.remove(classNameDark);\n                !dark && classNameLight && element.classList.remove(classNameLight);\n            } else {\n                dark && classNameDark && element.removeAttribute(attribute);\n                !dark && classNameLight && element.removeAttribute(attribute);\n            }\n        };\n    }, [\n        attribute,\n        classNameDark,\n        classNameLight,\n        dark,\n        selector\n    ]);\n    return [\n        dark,\n        ()=>setDark((dark)=>!dark),\n        setDark\n    ];\n};\n\nfunction useUnmount(fn) {\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(`useUnmount expected parameter is a function, got ${typeof fn}`);\n        }\n    }\n    const fnRef = useLatest(fn);\n    useEffect(()=>()=>{\n            fnRef.current();\n        }, [\n        fnRef\n    ]);\n}\n\nconst useDebounceFn = (fn, wait, options)=>{\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(`useDebounceFn expected parameter is a function, got ${typeof fn}`);\n        }\n    }\n    const fnRef = useLatest(fn);\n    const debounced = useMemo(()=>debounce((...args)=>{\n            return fnRef.current(...args);\n        }, wait, options), // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        JSON.stringify(options),\n        wait\n    ]);\n    useUnmount(()=>{\n        debounced.cancel();\n    });\n    return {\n        run: debounced,\n        cancel: debounced.cancel,\n        flush: debounced.flush\n    };\n};\n\nconst useDebounce = (value, wait, options)=>{\n    const [debounced, setDebounced] = useState(value);\n    const { run } = useDebounceFn(()=>{\n        setDebounced(value);\n    }, wait, options);\n    useEffect(()=>{\n        run();\n    }, [\n        run,\n        value\n    ]);\n    return debounced;\n};\n\nfunction getInitialState$2(defaultValue) {\n    // Prevent a React hydration mismatch when a default value is provided.\n    if (defaultValue !== undefined) {\n        return defaultValue;\n    }\n    if (isBrowser) {\n        return document.visibilityState;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`useDocumentVisibility` When server side rendering, defaultValue should be defined to prevent a hydration mismatches.');\n    }\n    return 'visible';\n}\nfunction useDocumentVisibility(defaultValue) {\n    const [visible, setVisible] = useState(getInitialState$2(defaultValue));\n    useEventListener('visibilitychange', ()=>{\n        setVisible(document.visibilityState);\n    }, ()=>document);\n    useEffect(()=>{\n        setVisible(document.visibilityState);\n    }, []);\n    return visible;\n}\n\nconst useDoubleClick = ({ target, latency = 300, onSingleClick = ()=>{}, onDoubleClick = ()=>{} })=>{\n    const handle = useCallback((onSingleClick, onDoubleClick)=>{\n        let count = 0;\n        return (e)=>{\n            // prevent ios double click slide\n            if (e.type === 'touchend') {\n                e.stopPropagation();\n                e.preventDefault();\n            }\n            count += 1;\n            setTimeout(()=>{\n                if (count === 1) {\n                    onSingleClick(e);\n                } else if (count === 2) {\n                    onDoubleClick(e);\n                }\n                count = 0;\n            }, latency);\n        };\n    }, [\n        latency\n    ]);\n    const handleClick = handle(onSingleClick, onDoubleClick);\n    const handleTouchEnd = handle(onSingleClick, onDoubleClick);\n    useEventListener('click', handleClick, target);\n    useEventListener('touchend', handleTouchEnd, target, {\n        passive: false\n    });\n};\n\nfunction isScrollX(node) {\n    if (!node) {\n        return false;\n    }\n    return getComputedStyle(node).overflowX === 'auto' || getComputedStyle(node).overflowX === 'scroll';\n}\nfunction isScrollY(node) {\n    if (!node) {\n        return false;\n    }\n    return getComputedStyle(node).overflowY === 'auto' || getComputedStyle(node).overflowY === 'scroll';\n}\nconst useDraggable = (target, options = {})=>{\n    const { draggingElement, containerElement } = options;\n    var _options_handle;\n    const draggingHandle = (_options_handle = options.handle) != null ? _options_handle : target;\n    var _options_initialValue;\n    const [position, setPositon] = useState((_options_initialValue = options.initialValue) != null ? _options_initialValue : {\n        x: 0,\n        y: 0\n    });\n    useDeepCompareEffect(()=>{\n        var _options_initialValue;\n        setPositon((_options_initialValue = options.initialValue) != null ? _options_initialValue : {\n            x: 0,\n            y: 0\n        });\n    }, [\n        options.initialValue\n    ]);\n    const [pressedDelta, setPressedDelta] = useState();\n    const filterEvent = (e)=>{\n        if (options.pointerTypes) {\n            return options.pointerTypes.includes(e.pointerType);\n        }\n        return true;\n    };\n    const handleEvent = (e)=>{\n        if (options.preventDefault) {\n            e.preventDefault();\n        }\n        if (options.stopPropagation) {\n            e.stopPropagation();\n        }\n    };\n    const start = (e)=>{\n        var _container_getBoundingClientRect;\n        const element = getTargetElement(target);\n        if (!filterEvent(e) || !element) {\n            return;\n        }\n        if (options.exact && e.target !== element) {\n            return;\n        }\n        const container = getTargetElement(containerElement);\n        const containerRect = container == null ? void 0 : (_container_getBoundingClientRect = container.getBoundingClientRect) == null ? void 0 : _container_getBoundingClientRect.call(container);\n        const targetRect = element.getBoundingClientRect();\n        const pos = {\n            x: e.clientX - (container && containerRect ? targetRect.left - (containerRect == null ? void 0 : containerRect.left) + container.scrollLeft : targetRect.left),\n            y: e.clientY - (container && containerRect ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n        };\n        if ((options.onStart == null ? void 0 : options.onStart.call(options, pos, e)) === false) {\n            return;\n        }\n        setPressedDelta(pos);\n        handleEvent(e);\n    };\n    const move = (e)=>{\n        const element = getTargetElement(target);\n        if (!filterEvent(e) || !element) {\n            return;\n        }\n        if (!pressedDelta) {\n            return;\n        }\n        const container = getTargetElement(containerElement);\n        const targetRect = element.getBoundingClientRect();\n        let { x, y } = position;\n        x = e.clientX - pressedDelta.x;\n        y = e.clientY - pressedDelta.y;\n        if (container) {\n            const containerWidth = isScrollX(container) ? container.scrollWidth : container.clientWidth;\n            const containerHeight = isScrollY(container) ? container.scrollHeight : container.clientHeight;\n            x = Math.min(Math.max(0, x), containerWidth - targetRect.width);\n            y = Math.min(Math.max(0, y), containerHeight - targetRect.height);\n        }\n        setPositon({\n            x,\n            y\n        });\n        options.onMove == null ? void 0 : options.onMove.call(options, position, e);\n        handleEvent(e);\n    };\n    const end = (e)=>{\n        if (!filterEvent(e)) {\n            return;\n        }\n        if (!pressedDelta) {\n            return;\n        }\n        setPressedDelta(undefined);\n        options.onEnd == null ? void 0 : options.onEnd.call(options, position, e);\n        handleEvent(e);\n    };\n    useEventListener('pointerdown', start, draggingHandle, true);\n    useEventListener('pointermove', move, draggingElement, true);\n    useEventListener('pointerup', end, draggingElement, true);\n    return [\n        position.x,\n        position.y,\n        !!pressedDelta,\n        setPositon\n    ];\n};\n\nconst useDropZone = (target, onDrop)=>{\n    const [over, setOver] = useState(false);\n    const counter = useRef(0);\n    useEventListener('dragenter', (event)=>{\n        event.preventDefault();\n        counter.current += 1;\n        setOver(true);\n    }, target);\n    useEventListener('dragover', (event)=>{\n        event.preventDefault();\n    }, target);\n    useEventListener('dragleave', (event)=>{\n        event.preventDefault();\n        counter.current -= 1;\n        if (counter.current === 0) {\n            setOver(false);\n        }\n    }, target);\n    useEventListener('drop', (event)=>{\n        var _event_dataTransfer;\n        event.preventDefault();\n        counter.current = 0;\n        setOver(false);\n        var _event_dataTransfer_files;\n        const files = Array.from((_event_dataTransfer_files = (_event_dataTransfer = event.dataTransfer) == null ? void 0 : _event_dataTransfer.files) != null ? _event_dataTransfer_files : []);\n        onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n    }, target);\n    return over;\n};\n\nconst useResizeObserver = (target, callback, options = defaultOptions$1)=>{\n    const savedCallback = useLatest(callback);\n    const observerRef = useRef();\n    const stop = useCallback(()=>{\n        if (observerRef.current) {\n            observerRef.current.disconnect();\n        }\n    }, []);\n    useDeepCompareEffect(()=>{\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        observerRef.current = new ResizeObserver(savedCallback.current);\n        observerRef.current.observe(element, options);\n        return stop;\n    }, [\n        savedCallback,\n        stop,\n        target,\n        options\n    ]);\n    return stop;\n};\n\nconst useElementBounding = (target, options = defaultOptions$1)=>{\n    const { reset = true, windowResize = true, windowScroll = true, immediate = true } = options;\n    const [height, setHeight] = useState(0);\n    const [bottom, setBottom] = useState(0);\n    const [left, setLeft] = useState(0);\n    const [right, setRight] = useState(0);\n    const [top, setTop] = useState(0);\n    const [width, setWidth] = useState(0);\n    const [x, setX] = useState(0);\n    const [y, setY] = useState(0);\n    const update = useEvent(()=>{\n        const element = getTargetElement(target);\n        if (!element) {\n            if (reset) {\n                setHeight(0);\n                setBottom(0);\n                setLeft(0);\n                setRight(0);\n                setTop(0);\n                setWidth(0);\n                setX(0);\n                setY(0);\n            }\n            return;\n        }\n        const rect = element.getBoundingClientRect();\n        setHeight(rect.height);\n        setBottom(rect.bottom);\n        setLeft(rect.left);\n        setRight(rect.right);\n        setTop(rect.top);\n        setWidth(rect.width);\n        setX(rect.x);\n        setY(rect.y);\n    });\n    useResizeObserver(target, update);\n    useEffect(()=>{\n        if (immediate) {\n            update();\n        }\n    }, [\n        immediate,\n        update\n    ]);\n    useEffect(()=>{\n        if (windowScroll) {\n            window.addEventListener('scroll', update, {\n                passive: true\n            });\n        }\n        if (windowResize) {\n            window.addEventListener('resize', update, {\n                passive: true\n            });\n        }\n        return ()=>{\n            if (windowScroll) {\n                window.removeEventListener('scroll', update);\n            }\n            if (windowResize) {\n                window.removeEventListener('resize', update);\n            }\n        };\n    }, [\n        update,\n        windowResize,\n        windowScroll\n    ]);\n    return {\n        height,\n        bottom,\n        left,\n        right,\n        top,\n        width,\n        x,\n        y,\n        update\n    };\n};\n\nconst useElementSize = (target, options = defaultOptions$1)=>{\n    const { box = 'content-box' } = options;\n    const [width, setWidth] = useState(0);\n    const [height, setHeight] = useState(0);\n    useResizeObserver(target, ([entry])=>{\n        const boxSize = box === 'border-box' ? entry.borderBoxSize : box === 'content-box' ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n        if (boxSize) {\n            setWidth(boxSize.reduce((acc, { inlineSize })=>acc + inlineSize, 0));\n            setHeight(boxSize.reduce((acc, { blockSize })=>acc + blockSize, 0));\n        } else {\n            // fallback\n            setWidth(entry.contentRect.width);\n            setHeight(entry.contentRect.height);\n        }\n    }, options);\n    return [\n        width,\n        height\n    ];\n};\n\nconst useIntersectionObserver = (target, callback, options = defaultOptions$1)=>{\n    const savedCallback = useLatest(callback);\n    const observerRef = useRef();\n    const stop = useCallback(()=>{\n        if (observerRef.current) {\n            observerRef.current.disconnect();\n        }\n    }, []);\n    useDeepCompareEffect(()=>{\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        observerRef.current = new IntersectionObserver(savedCallback.current, options);\n        observerRef.current.observe(element);\n        return stop;\n    }, [\n        options\n    ]);\n    return stop;\n};\n\nconst useElementVisibility = (target, options = defaultOptions$1)=>{\n    const [visible, setVisible] = useState(false);\n    const callback = useCallback((entries)=>{\n        const rect = entries[0].boundingClientRect;\n        setVisible(rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0);\n    }, []);\n    const stop = useIntersectionObserver(target, callback, options);\n    return [\n        visible,\n        stop\n    ];\n};\n\nfunction useEventEmitter() {\n    const listeners = useRef([]);\n    const _disposed = useRef(false);\n    const _event = useRef((listener)=>{\n        listeners.current.push(listener);\n        const disposable = {\n            dispose: ()=>{\n                if (!_disposed.current) {\n                    for(let i = 0; i < listeners.current.length; i++){\n                        if (listeners.current[i] === listener) {\n                            listeners.current.splice(i, 1);\n                            return;\n                        }\n                    }\n                }\n            }\n        };\n        return disposable;\n    });\n    const fire = (arg1, arg2)=>{\n        const queue = [];\n        for(let i = 0; i < listeners.current.length; i++){\n            queue.push(listeners.current[i]);\n        }\n        for(let i = 0; i < queue.length; i++){\n            queue[i].call(undefined, arg1, arg2);\n        }\n    };\n    const dispose = ()=>{\n        if (listeners.current.length !== 0) {\n            listeners.current.length = 0;\n        }\n        _disposed.current = true;\n    };\n    return [\n        _event.current,\n        fire,\n        dispose\n    ];\n}\n\nfunction useSupported(callback, sync = false) {\n    const [supported, setSupported] = useState(false);\n    const effect = sync ? useIsomorphicLayoutEffect : useEffect;\n    effect(()=>{\n        setSupported(Boolean(callback()));\n    }, []);\n    return supported;\n}\n\nfunction asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$6(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nconst useEyeDropper = ()=>{\n    const isSupported = useSupported(()=>typeof window !== 'undefined' && 'EyeDropper' in window, true);\n    const open = useCallback(/*#__PURE__*/ _async_to_generator$6(function*(options = {}) {\n        if (!isSupported) {\n            return {\n                sRGBHex: ''\n            };\n        }\n        const eyeDropper = new window.EyeDropper();\n        return eyeDropper.open(options);\n    }), [\n        isSupported\n    ]);\n    return [\n        isSupported,\n        open\n    ];\n};\n\nfunction useFavicon(href, baseUrl = '', rel = 'icon') {\n    useEffect(()=>{\n        const url = `${baseUrl}${href}`;\n        const element = document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n        element.forEach((el)=>el.href = url);\n        if (element.length === 0) {\n            const link = document.createElement('link');\n            link.rel = rel;\n            link.href = url;\n            document.getElementsByTagName('head')[0].appendChild(link);\n        }\n    }, [\n        baseUrl,\n        href,\n        rel\n    ]);\n}\n\nfunction asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$5(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nfunction _extends$3() {\n    _extends$3 = Object.assign || function(target) {\n        for(var i = 1; i < arguments.length; i++){\n            var source = arguments[i];\n            for(var key in source){\n                if (Object.prototype.hasOwnProperty.call(source, key)) {\n                    target[key] = source[key];\n                }\n            }\n        }\n        return target;\n    };\n    return _extends$3.apply(this, arguments);\n}\nconst DEFAULT_OPTIONS = {\n    multiple: true,\n    accept: '*'\n};\nconst useFileDialog = (options = defaultOptions$1)=>{\n    const [files, setFiles] = useState(null);\n    const inputRef = useRef();\n    const fileOpenPromiseRef = useRef(null);\n    const resolveFileOpenPromiseRef = useRef();\n    const initFn = useCallback(()=>{\n        if (typeof document === 'undefined') {\n            return undefined;\n        }\n        const input = document.createElement('input');\n        input.type = 'file';\n        input.onchange = (event)=>{\n            const result = event.target;\n            setFiles(result.files);\n            resolveFileOpenPromiseRef.current == null ? void 0 : resolveFileOpenPromiseRef.current.call(resolveFileOpenPromiseRef, result.files);\n        };\n        return input;\n    }, []);\n    inputRef.current = initFn();\n    const open = /*#__PURE__*/ _async_to_generator$5(function*(localOptions) {\n        if (!inputRef.current) {\n            return;\n        }\n        const _options = _extends$3({}, DEFAULT_OPTIONS, options, localOptions);\n        inputRef.current.multiple = _options.multiple;\n        inputRef.current.accept = _options.accept;\n        inputRef.current.capture = _options.capture;\n        fileOpenPromiseRef.current = new Promise((resolve)=>{\n            resolveFileOpenPromiseRef.current = resolve;\n        });\n        inputRef.current.click();\n        return fileOpenPromiseRef.current;\n    });\n    const reset = ()=>{\n        setFiles(null);\n        resolveFileOpenPromiseRef.current == null ? void 0 : resolveFileOpenPromiseRef.current.call(resolveFileOpenPromiseRef, null);\n        if (inputRef.current) {\n            inputRef.current.value = '';\n        }\n    };\n    return [\n        files,\n        open,\n        reset\n    ];\n};\n\nconst useFirstMountState = ()=>{\n    const isFirst = useRef(true);\n    if (isFirst.current) {\n        isFirst.current = false;\n        return true;\n    }\n    return isFirst.current;\n};\n\nconst useFocus = (target, initialValue = false)=>{\n    const [focus, innerSetFocus] = useState(initialValue);\n    useEventListener('focus', ()=>innerSetFocus(true), target);\n    useEventListener('blur', ()=>innerSetFocus(false), target);\n    const setFocus = (value)=>{\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        if (!value) {\n            element.blur();\n        } else if (value) {\n            element.focus();\n        }\n    };\n    useMount(()=>{\n        setFocus(focus);\n    });\n    return [\n        focus,\n        setFocus\n    ];\n};\n\nconst useRafFn = (callback, initiallyActive = true)=>{\n    const raf = useRef(null);\n    const rafActivity = useRef(false);\n    const rafCallback = useLatest(callback);\n    const step = useCallback((time)=>{\n        if (rafActivity.current) {\n            rafCallback.current(time);\n            raf.current = requestAnimationFrame(step);\n        }\n    }, [\n        rafCallback\n    ]);\n    const result = useMemo(()=>[\n            ()=>{\n                // stop\n                if (rafActivity.current) {\n                    rafActivity.current = false;\n                    raf.current && cancelAnimationFrame(raf.current);\n                }\n            },\n            ()=>{\n                // start\n                if (!rafActivity.current) {\n                    rafActivity.current = true;\n                    raf.current = requestAnimationFrame(step);\n                }\n            },\n            ()=>rafActivity.current\n        ], [\n        step\n    ]);\n    useEffect(()=>{\n        if (initiallyActive) {\n            result[1]();\n        }\n        return result[0];\n    }, [\n        initiallyActive,\n        result\n    ]);\n    return result;\n};\n\nfunction useFps(options = defaultOptions$1) {\n    const [fps, setFps] = useState(0);\n    var _options_every;\n    const every = (_options_every = options.every) != null ? _options_every : 10;\n    const last = useRef(performance.now());\n    const ticks = useRef(0);\n    useRafFn(()=>{\n        ticks.current += 1;\n        if (ticks.current >= every) {\n            const now = performance.now();\n            const diff = now - last.current;\n            setFps(Math.round(1000 / (diff / ticks.current)));\n            last.current = now;\n            ticks.current = 0;\n        }\n    });\n    return fps;\n}\n\nconst useFullscreen = (target, options = defaultOptions$1)=>{\n    const { onExit, onEnter } = options;\n    const [state, setState] = useState(false);\n    const onChange = ()=>{\n        if (screenfull.isEnabled) {\n            const { isFullscreen } = screenfull;\n            if (isFullscreen) {\n                onEnter == null ? void 0 : onEnter();\n            } else {\n                screenfull.off('change', onChange);\n                onExit == null ? void 0 : onExit();\n            }\n            setState(isFullscreen);\n        }\n    };\n    const enterFullscreen = ()=>{\n        const el = getTargetElement(target);\n        if (!el) {\n            return;\n        }\n        if (screenfull.isEnabled) {\n            try {\n                screenfull.request(el);\n                screenfull.on('change', onChange);\n            } catch (error) {\n                console.error(error);\n            }\n        }\n    };\n    const exitFullscreen = ()=>{\n        if (screenfull.isEnabled) {\n            screenfull.exit();\n        }\n    };\n    const toggleFullscreen = ()=>{\n        if (state) {\n            exitFullscreen();\n        } else {\n            enterFullscreen();\n        }\n    };\n    useUnmount(()=>{\n        if (screenfull.isEnabled) {\n            screenfull.off('change', onChange);\n        }\n    });\n    return [\n        state,\n        {\n            enterFullscreen: useEvent(enterFullscreen),\n            exitFullscreen: useEvent(exitFullscreen),\n            toggleFullscreen: useEvent(toggleFullscreen),\n            isEnabled: screenfull.isEnabled\n        }\n    ];\n};\n\nconst initCoord = {\n    accuracy: 0,\n    latitude: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_INFINITY,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n};\nconst useGeolocation = (options = defaultOptions$1)=>{\n    const { enableHighAccuracy = true, maximumAge = 30000, timeout = 27000 } = options;\n    const isSupported = useSupported(()=>navigator && 'geolocation' in navigator);\n    const [coordinates, setCoordinates] = useState(initCoord);\n    const [locatedAt, setLocatedAt] = useState(null);\n    const [error, setError] = useState(null);\n    const updatePosition = useCallback((position)=>{\n        setCoordinates(position.coords);\n        setLocatedAt(position.timestamp);\n        setError(null);\n    }, []);\n    const updateError = useCallback((err)=>{\n        setCoordinates(initCoord);\n        setLocatedAt(null);\n        setError(err);\n    }, []);\n    useEffect(()=>{\n        if (!isSupported) {\n            return;\n        }\n        navigator.geolocation.getCurrentPosition(updatePosition, updateError);\n        const watchId = navigator.geolocation.watchPosition(updatePosition, updateError, {\n            enableHighAccuracy,\n            maximumAge,\n            timeout\n        });\n        return ()=>{\n            if (watchId) {\n                navigator.geolocation.clearWatch(watchId);\n            }\n        };\n    }, [\n        enableHighAccuracy,\n        isSupported,\n        maximumAge,\n        timeout,\n        updateError,\n        updatePosition\n    ]);\n    return {\n        coordinates,\n        locatedAt,\n        error,\n        isSupported\n    };\n};\n\nconst useHover = (target)=>{\n    const [hovered, setHovered] = useState(false);\n    const onMouseEnter = useCallback(()=>setHovered(true), []);\n    const onMouseLeave = useCallback(()=>setHovered(false), []);\n    useEventListener('mouseenter', onMouseEnter, target);\n    useEventListener('mouseleave', onMouseLeave, target);\n    return hovered;\n};\n\nconst defaultEvents$1 = [\n    'mousemove',\n    'mousedown',\n    'resize',\n    'keydown',\n    'touchstart',\n    'wheel'\n];\nconst oneMinute = 60e3;\nconst useIdle = (ms = oneMinute, initialState = false, events = defaultEvents$1)=>{\n    const [state, setState] = useState(initialState);\n    useEffect(()=>{\n        let mounted = true;\n        let timeout;\n        let localState = state;\n        const set = (newState)=>{\n            if (mounted) {\n                localState = newState;\n                setState(newState);\n            }\n        };\n        const onEvent = throttle(()=>{\n            if (localState) {\n                set(false);\n            }\n            clearTimeout(timeout);\n            timeout = setTimeout(()=>set(true), ms);\n        }, 50);\n        const onVisibility = ()=>{\n            if (!document.hidden) {\n                onEvent();\n            }\n        };\n        for(let i = 0; i < events.length; i++){\n            on(window, events[i], onEvent);\n        }\n        on(document, 'visibilitychange', onVisibility);\n        timeout = setTimeout(()=>set(true), ms);\n        return ()=>{\n            mounted = false;\n            for(let i = 0; i < events.length; i++){\n                off(window, events[i], onEvent);\n            }\n            off(document, 'visibilitychange', onVisibility);\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        ms,\n        events\n    ]);\n    return state;\n};\n\nfunction useThrottleFn(fn, wait, options) {\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(`useThrottleFn expected parameter is a function, got ${typeof fn}`);\n        }\n    }\n    const fnRef = useLatest(fn);\n    const throttled = useMemo(()=>throttle((...args)=>{\n            return fnRef.current(...args);\n        }, wait, options), // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        wait,\n        JSON.stringify(options)\n    ]);\n    useUnmount(()=>{\n        throttled.cancel();\n    });\n    return {\n        run: throttled,\n        cancel: throttled.cancel,\n        flush: throttled.flush\n    };\n}\n\n/**\n * We have to check if the scroll amount is close enough to some threshold in order to\n * more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n * numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n */ const ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nconst defaultListerOptions = {\n    capture: false,\n    passive: true\n};\nconst useScroll = (target, options = defaultOptions$1)=>{\n    const { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0\n    }, eventListenerOptions = defaultListerOptions } = options;\n    const [x, setX] = useState(0);\n    const [y, setY] = useState(0);\n    const [isScrolling, setIsScrolling] = useState(false);\n    const [arrivedState, setArrivedState] = useState({\n        left: true,\n        right: false,\n        top: true,\n        bottom: false\n    });\n    const [directions, setDirections] = useState({\n        left: false,\n        right: false,\n        top: false,\n        bottom: false\n    });\n    const { run: onScrollEnd } = useDebounceFn((e)=>{\n        setIsScrolling(false);\n        setDirections({\n            left: false,\n            right: false,\n            top: false,\n            bottom: false\n        });\n        onStop(e);\n    }, throttle + idle);\n    const onScrollHandler = useEvent((e)=>{\n        const eventTarget = e.target === document ? e.target.documentElement : e.target;\n        const scrollLeft = eventTarget.scrollLeft;\n        let scrollTop = eventTarget.scrollTop;\n        // patch for mobile compatible\n        if (e.target === document && !scrollTop) scrollTop = document.body.scrollTop;\n        setX(scrollLeft);\n        setY(scrollTop);\n        setDirections({\n            left: scrollLeft < x,\n            right: scrollLeft > x,\n            top: scrollTop < y,\n            bottom: scrollTop > y\n        });\n        setArrivedState({\n            left: scrollLeft <= 0 + (offset.left || 0),\n            right: scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS,\n            top: scrollTop <= 0 + (offset.top || 0),\n            bottom: scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS\n        });\n        setIsScrolling(true);\n        onScrollEnd(e);\n        onScroll(e);\n    });\n    const { run: throttleOnScroll } = useThrottleFn(onScrollHandler, throttle);\n    useEventListener('scroll', throttle ? throttleOnScroll : onScrollHandler, target, eventListenerOptions);\n    return [\n        x,\n        y,\n        isScrolling,\n        arrivedState,\n        directions\n    ];\n};\n\nconst createUpdateEffect = (hook)=>(effect, deps)=>{\n        const isFirstMount = useFirstMountState();\n        hook(()=>{\n            if (!isFirstMount) {\n                return effect();\n            }\n        }, deps);\n    };\n\nconst useUpdateEffect = createUpdateEffect(useEffect);\n\nfunction asyncGeneratorStep$4(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$4(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$4(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$4(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nfunction _extends$2() {\n    _extends$2 = Object.assign || function(target) {\n        for(var i = 1; i < arguments.length; i++){\n            var source = arguments[i];\n            for(var key in source){\n                if (Object.prototype.hasOwnProperty.call(source, key)) {\n                    target[key] = source[key];\n                }\n            }\n        }\n        return target;\n    };\n    return _extends$2.apply(this, arguments);\n}\nconst useInfiniteScroll = (target, onLoadMore, options = defaultOptions$1)=>{\n    const savedLoadMore = useLatest(onLoadMore);\n    var _options_direction;\n    const direction = (_options_direction = options.direction) != null ? _options_direction : 'bottom';\n    var _options_distance;\n    const state = useScroll(target, _extends$2({}, options, {\n        offset: _extends$2({\n            [direction]: (_options_distance = options.distance) != null ? _options_distance : 0\n        }, options.offset)\n    }));\n    const di = state[3][direction];\n    useUpdateEffect(()=>{\n        const element = getTargetElement(target);\n        const fn = /*#__PURE__*/ _async_to_generator$4(function*() {\n            var _element_scrollHeight, _element_scrollWidth;\n            const previous = {\n                height: (_element_scrollHeight = element == null ? void 0 : element.scrollHeight) != null ? _element_scrollHeight : 0,\n                width: (_element_scrollWidth = element == null ? void 0 : element.scrollWidth) != null ? _element_scrollWidth : 0\n            };\n            yield savedLoadMore.current(state);\n            if (options.preserveScrollPosition && element) {\n                element.scrollTo({\n                    top: element.scrollHeight - previous.height,\n                    left: element.scrollWidth - previous.width\n                });\n            }\n        });\n        fn();\n    }, [\n        di,\n        options.preserveScrollPosition,\n        target\n    ]);\n};\n\nconst defaultEvents = [\n    'mousedown',\n    'mouseup',\n    'keydown',\n    'keyup'\n];\nconst useKeyModifier = (modifier, options = defaultOptions$1)=>{\n    const { events = defaultEvents, initial = false } = options;\n    const [state, setState] = useState(initial);\n    useMount(()=>{\n        events.forEach((listenEvent)=>{\n            on(document, listenEvent, (evt)=>{\n                if (typeof evt.getModifierState === 'function') {\n                    setState(evt.getModifierState(modifier));\n                }\n            });\n        });\n        return ()=>{\n            events.forEach((listenerEvent)=>{\n                off(document, listenerEvent, (evt)=>{\n                    if (typeof evt.getModifierState === 'function') {\n                        setState(evt.getModifierState(modifier));\n                    }\n                });\n            });\n        };\n    });\n    return state;\n};\n\nfunction useLocalStorage(key, defaultValue, options = defaultOptions$1) {\n    return useStorage(key, defaultValue, ()=>isBrowser ? localStorage : undefined, options);\n}\n\nfunction subscribe$1(callback) {\n    window.addEventListener('popstate', callback);\n    window.addEventListener('hashchange', callback);\n    return ()=>{\n        window.removeEventListener('popstate', callback);\n        window.removeEventListener('hashchange', callback);\n    };\n}\nconst useLocationSelector = (selector, /**\n   * @description server fallback\n   * @default undefined\n   */ fallback)=>{\n    return useSyncExternalStore(subscribe$1, ()=>selector(location), ()=>fallback);\n};\n\nfunction isTouchEvent(ev) {\n    return 'touches' in ev;\n}\nfunction preventDefault$1(ev) {\n    if (!isTouchEvent(ev)) {\n        return;\n    }\n    if (ev.touches.length < 2 && ev.preventDefault) {\n        ev.preventDefault();\n    }\n}\nconst useLongPress = (callback, { isPreventDefault = true, delay = 300 } = defaultOptions$1)=>{\n    const timeout = useRef();\n    const target = useRef();\n    const start = useCallback((event)=>{\n        // prevent ghost click on mobile devices\n        if (isPreventDefault && event.target) {\n            on(event.target, 'touchend', preventDefault$1, {\n                passive: false\n            });\n            target.current = event.target;\n        }\n        timeout.current = setTimeout(()=>callback(event), delay);\n    }, [\n        callback,\n        delay,\n        isPreventDefault\n    ]);\n    const clear = useCallback(()=>{\n        // clearTimeout and removeEventListener\n        timeout.current && clearTimeout(timeout.current);\n        if (isPreventDefault && target.current) {\n            off(target.current, 'touchend', preventDefault$1);\n        }\n    }, [\n        isPreventDefault\n    ]);\n    return {\n        onMouseDown: (e)=>start(e),\n        onTouchStart: (e)=>start(e),\n        onMouseUp: clear,\n        onMouseLeave: clear,\n        onTouchEnd: clear\n    };\n};\n\nconst defaultState$1 = {\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0,\n    top: 0,\n    left: 0,\n    bottom: 0,\n    right: 0\n};\nconst useMeasure = (target, options = defaultOptions$1)=>{\n    const [rect, setRect] = useState(defaultState$1);\n    const stop = useResizeObserver(target, (entries)=>{\n        if (entries[0]) {\n            const { x, y, width, height, top, left, bottom, right } = entries[0].contentRect;\n            setRect({\n                x,\n                y,\n                width,\n                height,\n                top,\n                left,\n                bottom,\n                right\n            });\n        }\n    }, options);\n    return [\n        rect,\n        stop\n    ];\n};\n\nfunction asyncGeneratorStep$3(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$3(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$3(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$3(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nconst defaultConstints = {\n    audio: true,\n    video: true\n};\nconst useMediaDevices = (options = {})=>{\n    const { requestPermissions, constraints = defaultConstints } = options;\n    const [state, setState] = useState({\n        devices: []\n    });\n    const isSupported = useSupported(()=>navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n    const permissionGranted = useRef(false);\n    const stream = useRef(null);\n    const onChange = useCallback(()=>{\n        navigator.mediaDevices.enumerateDevices().then((devices)=>{\n            if (stream.current) {\n                stream.current.getTracks().forEach((t)=>t.stop());\n                stream.current = null;\n            }\n            setState({\n                devices: devices.map(({ deviceId, groupId, kind, label })=>({\n                        deviceId,\n                        groupId,\n                        kind,\n                        label\n                    }))\n            });\n        }).catch(noop);\n    }, []);\n    const ensurePermissions = useCallback(/*#__PURE__*/ _async_to_generator$3(function*() {\n        if (!isSupported) {\n            return false;\n        }\n        if (permissionGranted.current) {\n            return true;\n        }\n        let state;\n        try {\n            state = (yield navigator.permissions.query({\n                name: 'camera'\n            })).state;\n        } catch (error) {\n            state = 'prompt';\n        }\n        if (state !== 'granted') {\n            stream.current = yield navigator.mediaDevices.getUserMedia(constraints);\n            onChange();\n            permissionGranted.current = true;\n        } else {\n            permissionGranted.current = false;\n        }\n        return permissionGranted.current;\n    }), [\n        onChange,\n        isSupported,\n        constraints\n    ]);\n    useEffect(()=>{\n        if (!isSupported) {\n            return;\n        }\n        if (requestPermissions) {\n            ensurePermissions();\n        }\n        on(navigator.mediaDevices, 'devicechange', onChange);\n        onChange();\n        return ()=>{\n            off(navigator.mediaDevices, 'devicechange', onChange);\n        };\n    }, [\n        onChange,\n        isSupported,\n        requestPermissions,\n        ensurePermissions\n    ]);\n    return [\n        state,\n        ensurePermissions\n    ];\n};\n\nfunction getInitialState$1(query, defaultState) {\n    // Prevent a React hydration mismatch when a default value is provided by not defaulting to window.matchMedia(query).matches.\n    if (defaultState !== undefined) {\n        return defaultState;\n    }\n    if (isBrowser) {\n        return window.matchMedia(query).matches;\n    }\n    // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`useMediaQuery` When server side rendering, defaultState should be defined to prevent a hydration mismatches.');\n    }\n    return false;\n}\nconst useMediaQuery = (query, defaultState)=>{\n    const [state, setState] = useState(getInitialState$1(query, defaultState));\n    useEffect(()=>{\n        let mounted = true;\n        const mql = window.matchMedia(query);\n        const onChange = ()=>{\n            if (!mounted) {\n                return;\n            }\n            setState(!!mql.matches);\n        };\n        if ('addEventListener' in mql) {\n            mql.addEventListener('change', onChange);\n        } else {\n            mql.addListener == null ? void 0 : mql.addListener.call(mql, onChange);\n        }\n        setState(mql.matches);\n        return ()=>{\n            mounted = false;\n            if ('removeEventListener' in mql) {\n                mql.removeEventListener('change', onChange);\n            } else {\n                mql.removeListener == null ? void 0 : mql.removeListener.call(mql, onChange);\n            }\n        };\n    }, [\n        query\n    ]);\n    return state;\n};\n\nfunction useRafState(initialState) {\n    const frame = useRef(0);\n    const [state, setState] = useState(initialState);\n    const setRafState = useCallback((value)=>{\n        cancelAnimationFrame(frame.current);\n        frame.current = requestAnimationFrame(()=>{\n            setState(value);\n        });\n    }, []);\n    useUnmount(()=>{\n        cancelAnimationFrame(frame.current);\n    });\n    return [\n        state,\n        setRafState\n    ];\n}\n\nconst initState = {\n    screenX: Number.NaN,\n    screenY: Number.NaN,\n    clientX: Number.NaN,\n    clientY: Number.NaN,\n    pageX: Number.NaN,\n    pageY: Number.NaN,\n    elementX: Number.NaN,\n    elementY: Number.NaN,\n    elementH: Number.NaN,\n    elementW: Number.NaN,\n    elementPosX: Number.NaN,\n    elementPosY: Number.NaN\n};\nconst useMouse = (target)=>{\n    const [state, setState] = useRafState(initState);\n    useEventListener('mousemove', (event)=>{\n        const { screenX, screenY, clientX, clientY, pageX, pageY } = event;\n        const newState = {\n            screenX,\n            screenY,\n            clientX,\n            clientY,\n            pageX,\n            pageY,\n            elementX: Number.NaN,\n            elementY: Number.NaN,\n            elementH: Number.NaN,\n            elementW: Number.NaN,\n            elementPosX: Number.NaN,\n            elementPosY: Number.NaN\n        };\n        const targetElement = getTargetElement(target);\n        if (targetElement) {\n            const { left, top, width, height } = targetElement.getBoundingClientRect();\n            newState.elementPosX = left + window.pageXOffset;\n            newState.elementPosY = top + window.pageYOffset;\n            newState.elementX = pageX - newState.elementPosX;\n            newState.elementY = pageY - newState.elementPosY;\n            newState.elementW = width;\n            newState.elementH = height;\n        }\n        setState(newState);\n    }, defaultDocument);\n    return state;\n};\n\nconst listenerOptions$2 = {\n    passive: true\n};\nconst useMousePressed = (target, options = defaultOptions$1)=>{\n    const { touch = true, drag = true, initialValue = false } = options;\n    const [pressed, setPressed] = useState(initialValue);\n    const [sourceType, setSourceType] = useState(null);\n    const element = getTargetElement(target);\n    const onPressed = useCallback((srcType)=>()=>{\n            setPressed(true);\n            setSourceType(srcType);\n        }, []);\n    const onReleased = useCallback(()=>{\n        setPressed(false);\n        setSourceType(null);\n    }, []);\n    useEventListener('mousedown', onPressed('mouse'), target, listenerOptions$2);\n    useEventListener('mouseleave', onReleased, ()=>window, listenerOptions$2);\n    useEventListener('mouseup', onReleased, ()=>window, listenerOptions$2);\n    useEffect(()=>{\n        if (drag) {\n            element == null ? void 0 : element.addEventListener('dragstart', onPressed('mouse'), listenerOptions$2);\n            element == null ? void 0 : element.addEventListener('drop', onReleased, listenerOptions$2);\n            element == null ? void 0 : element.addEventListener('dragend', onReleased, listenerOptions$2);\n        }\n        if (touch) {\n            element == null ? void 0 : element.addEventListener('touchstart', onPressed('touch'), listenerOptions$2);\n            element == null ? void 0 : element.addEventListener('touchend', onReleased, listenerOptions$2);\n            element == null ? void 0 : element.addEventListener('touchcancel', onReleased, listenerOptions$2);\n        }\n        return ()=>{\n            if (drag) {\n                element == null ? void 0 : element.removeEventListener('dragstart', onPressed('mouse'));\n                element == null ? void 0 : element.removeEventListener('drop', onReleased);\n                element == null ? void 0 : element.removeEventListener('dragend', onReleased);\n            }\n            if (touch) {\n                element == null ? void 0 : element.removeEventListener('touchstart', onPressed('touch'));\n                element == null ? void 0 : element.removeEventListener('touchend', onReleased);\n                element == null ? void 0 : element.removeEventListener('touchcancel', onReleased);\n            }\n        };\n    }, [\n        drag,\n        onPressed,\n        onReleased,\n        touch,\n        element\n    ]);\n    return [\n        pressed,\n        sourceType\n    ];\n};\n\nconst useMutationObserver = (callback, target, options = defaultOptions$1)=>{\n    const callbackRef = useLatest(callback);\n    const observerRef = useRef();\n    const stop = useCallback(()=>{\n        if (observerRef.current) {\n            observerRef.current.disconnect();\n        }\n    }, []);\n    useDeepCompareEffect(()=>{\n        const element = getTargetElement(target);\n        if (!element) {\n            return;\n        }\n        observerRef.current = new MutationObserver(callbackRef.current);\n        observerRef.current.observe(element, options);\n        return stop;\n    }, [\n        options\n    ]);\n    return stop;\n};\n\nconst nav = isNavigator ? navigator : undefined;\nconst conn = nav && (nav.connection || nav.mozConnection || nav.webkitConnection);\nfunction getConnectionState(previousState) {\n    const online = nav == null ? void 0 : nav.onLine;\n    const previousOnline = previousState == null ? void 0 : previousState.online;\n    return {\n        online,\n        previous: previousOnline,\n        since: online !== previousOnline ? new Date() : previousState == null ? void 0 : previousState.since,\n        downlink: conn == null ? void 0 : conn.downlink,\n        downlinkMax: conn == null ? void 0 : conn.downlinkMax,\n        effectiveType: conn == null ? void 0 : conn.effectiveType,\n        rtt: conn == null ? void 0 : conn.rtt,\n        saveData: conn == null ? void 0 : conn.saveData,\n        type: conn == null ? void 0 : conn.type\n    };\n}\nconst useNetwork = ()=>{\n    const [state, setState] = useState(getConnectionState);\n    useEffect(()=>{\n        const handleStateChange = ()=>{\n            setState(getConnectionState);\n        };\n        on(window, 'online', handleStateChange, {\n            passive: true\n        });\n        on(window, 'offline', handleStateChange, {\n            passive: true\n        });\n        if (conn) {\n            on(conn, 'change', handleStateChange, {\n                passive: true\n            });\n        }\n        return ()=>{\n            off(window, 'online', handleStateChange);\n            off(window, 'offline', handleStateChange);\n            if (conn) {\n                off(conn, 'change', handleStateChange);\n            }\n        };\n    }, []);\n    return state;\n};\n\nconst useObjectUrl = (object)=>{\n    const [url, setUrl] = useState();\n    useEffect(()=>{\n        if (object) {\n            setUrl(URL.createObjectURL(object));\n        }\n        return ()=>{\n            if (url) {\n                URL.revokeObjectURL(url);\n            }\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        object\n    ]);\n    return url;\n};\n\nconst record = new WeakSet();\nconst createOnceEffect = (hook)=>(effect, deps)=>{\n        const onceWrapper = ()=>{\n            const shouldStart = !record.has(effect);\n            if (shouldStart) {\n                record.add(effect);\n                return effect();\n            }\n        };\n        hook(()=>{\n            return onceWrapper();\n        }, deps);\n    };\n\nconst useOnceEffect = createOnceEffect(useEffect);\n\nconst useOnceLayoutEffect = createOnceEffect(useLayoutEffect);\n\nconst useOnline = ()=>{\n    const { online } = useNetwork();\n    return online;\n};\n\nconst defaultState = {\n    angle: 0,\n    type: 'landscape-primary'\n};\nconst useOrientation = (initialState = defaultState)=>{\n    const [state, setState] = useState(initialState);\n    useEffect(()=>{\n        const screen = window.screen;\n        let mounted = true;\n        const onChange = ()=>{\n            if (mounted) {\n                const { orientation } = screen;\n                if (orientation) {\n                    const { angle, type } = orientation;\n                    setState({\n                        angle,\n                        type\n                    });\n                } else if (window.orientation !== undefined) {\n                    setState({\n                        angle: typeof window.orientation === 'number' ? window.orientation : 0,\n                        type: void 0\n                    });\n                }\n            }\n        };\n        on(window, 'orientationchange', onChange);\n        onChange();\n        return ()=>{\n            mounted = false;\n            off(window, 'orientationchange', onChange);\n        };\n    }, []);\n    const lockOrientation = (type)=>{\n        if (isBrowser) {\n            return;\n        }\n        if (!(window && 'screen' in window && 'orientation' in window.screen)) {\n            return Promise.reject(new Error('Not supported'));\n        }\n        return window.screen.orientation.lock(type);\n    };\n    const unlockOrientation = ()=>{\n        if (isBrowser) {\n            return;\n        }\n        if (!(window && 'screen' in window && 'orientation' in window.screen)) {\n            return;\n        }\n        return window.screen.orientation.unlock();\n    };\n    return [\n        state,\n        lockOrientation,\n        unlockOrientation\n    ];\n};\n\nfunction usePageLeave() {\n    const [isLeft, setIsLeft] = useState(false);\n    const handler = (event)=>{\n        if (!window) return;\n        event = event || window.event;\n        // @ts-expect-error missing types\n        const from = event.relatedTarget || event.toElement;\n        setIsLeft(!from);\n    };\n    useEventListener('mouseout', handler, ()=>window, {\n        passive: true\n    });\n    useEventListener('mouseleave', handler, ()=>document, {\n        passive: true\n    });\n    useEventListener('mouseenter', handler, ()=>document, {\n        passive: true\n    });\n    return isLeft;\n}\n\nconst usePermission = (permissionDesc)=>{\n    const [state, setState] = useState('');\n    useEffect(()=>{\n        var _navigator_permissions;\n        const desc = typeof permissionDesc === 'string' ? {\n            name: permissionDesc\n        } : permissionDesc;\n        let mounted = true;\n        let permissionStatus = null;\n        const onChange = ()=>{\n            if (!mounted) {\n                return;\n            }\n            setState(()=>{\n                var _permissionStatus_state;\n                return (_permissionStatus_state = permissionStatus == null ? void 0 : permissionStatus.state) != null ? _permissionStatus_state : '';\n            });\n        };\n        (_navigator_permissions = navigator.permissions) == null ? void 0 : _navigator_permissions.query(desc).then((status)=>{\n            permissionStatus = status;\n            on(permissionStatus, 'change', onChange);\n            onChange();\n        }).catch(noop);\n        return ()=>{\n            permissionStatus && off(permissionStatus, 'change', onChange);\n            mounted = false;\n            permissionStatus = null;\n        };\n    }, [\n        permissionDesc\n    ]);\n    return state;\n};\n\nconst usePreferredColorScheme = (defaultState = 'no-preference')=>{\n    const isLight = useMediaQuery('(prefers-color-scheme: light)', false);\n    const isDark = useMediaQuery('(prefers-color-scheme: dark)', false);\n    return isDark ? 'dark' : isLight ? 'light' : defaultState;\n};\n\nconst usePreferredContrast = (defaultState = 'no-preference')=>{\n    const isMore = useMediaQuery('(prefexrs-contrast: more)', false);\n    const isLess = useMediaQuery('(prefers-contrast: less)', false);\n    const isCustom = useMediaQuery('(prefers-contrast: custom)', false);\n    return isMore ? 'more' : isLess ? 'less' : isCustom ? 'custom' : defaultState;\n};\n\nfunction usePreferredDark(defaultState) {\n    return useMediaQuery('(prefers-color-scheme: dark)', defaultState);\n}\n\n// Following these issues I think this is the best way to implement usePrevious:\n// https://github.com/childrentime/reactuse/issues/115\n// https://github.com/streamich/react-use/issues/2605\n// https://github.com/alibaba/hooks/issues/2162\nfunction usePrevious(value) {\n    const [current, setCurrent] = useState(value);\n    const [previous, setPrevious] = useState();\n    if (value !== current) {\n        setPrevious(current);\n        setCurrent(value);\n    }\n    return previous;\n}\n\nfunction useReducedMotion(defaultState) {\n    return useMediaQuery('(prefers-reduced-motion: reduce)', defaultState);\n}\n\nconst topVarName = '--reactuse-safe-area-top';\nconst rightVarName = '--reactuse-safe-area-right';\nconst bottomVarName = '--reactuse-safe-area-bottom';\nconst leftVarName = '--reactuse-safe-area-left';\nconst defaultElement = ()=>document.documentElement;\nfunction useScreenSafeArea() {\n    const top = useRef('');\n    const right = useRef('');\n    const bottom = useRef('');\n    const left = useRef('');\n    const forceUpdate = useUpdate();\n    useCssVar(topVarName, defaultElement, 'env(safe-area-inset-top, 0px)');\n    useCssVar(rightVarName, defaultElement, 'env(safe-area-inset-right, 0px)');\n    useCssVar(bottomVarName, defaultElement, 'env(safe-area-inset-bottom, 0px)');\n    useCssVar(leftVarName, defaultElement, 'env(safe-area-inset-left, 0px)');\n    const { run: update } = useDebounceFn(()=>{\n        top.current = getValue(topVarName);\n        right.current = getValue(rightVarName);\n        bottom.current = getValue(bottomVarName);\n        left.current = getValue(leftVarName);\n        forceUpdate();\n    });\n    useEffect(()=>{\n        update();\n    }, [\n        update\n    ]);\n    useEventListener('resize', update);\n    return [\n        top.current,\n        right.current,\n        bottom.current,\n        left.current,\n        update\n    ];\n}\nfunction getValue(position) {\n    return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst useScriptTag = (src, onLoaded = noop, options = defaultOptions$1)=>{\n    const { immediate = true, manual = false, type = 'text/javascript', async = true, crossOrigin, referrerPolicy, noModule, defer, attrs = {} } = options;\n    const scriptTag = useRef(null);\n    const _promise = useRef(null);\n    const [status, setStatus] = useState(src ? 'loading' : 'idle');\n    /**\n   * Load the script specified via `src`.\n   *\n   * @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n   * @returns Promise<HTMLScriptElement>\n   */ const loadScript = (waitForScriptLoad)=>new Promise((resolve, reject)=>{\n            // Some little closure for resolving the Promise.\n            const resolveWithElement = (el)=>{\n                scriptTag.current = el;\n                resolve(el);\n                return el;\n            };\n            // Check if document actually exists, otherwise resolve the Promise (SSR Support).\n            if (!document) {\n                resolve(false);\n                return;\n            }\n            if (!src) {\n                setStatus('idle');\n                resolve(false);\n                return;\n            }\n            // Local variable defining if the <script> tag should be appended or not.\n            let shouldAppend = false;\n            let el = document.querySelector(`script[src=\"${src}\"]`);\n            // Script tag not found, preparing the element for appending\n            if (!el) {\n                el = document.createElement('script');\n                el.type = type;\n                el.async = async;\n                el.src = src;\n                // Optional attributes\n                if (defer) {\n                    el.defer = defer;\n                }\n                if (crossOrigin) {\n                    el.crossOrigin = crossOrigin;\n                }\n                if (noModule) {\n                    el.noModule = noModule;\n                }\n                if (referrerPolicy) {\n                    el.referrerPolicy = referrerPolicy;\n                }\n                Object.entries(attrs).forEach(([name, value])=>el == null ? void 0 : el.setAttribute(name, value));\n                // Enables shouldAppend\n                shouldAppend = true;\n            } else if (el.hasAttribute('data-loaded')) {\n                setStatus(el.getAttribute('data-status'));\n                resolveWithElement(el);\n            }\n            // Event listeners\n            el.addEventListener('error', (event)=>{\n                setStatus(event.type === 'load' ? 'ready' : 'error');\n                return reject(event);\n            });\n            el.addEventListener('abort', (event)=>{\n                setStatus(event.type === 'load' ? 'ready' : 'error');\n                return reject(event);\n            });\n            el.addEventListener('load', (event)=>{\n                setStatus(event.type === 'load' ? 'ready' : 'error');\n                el.setAttribute('data-loaded', 'true');\n                onLoaded(el);\n                resolveWithElement(el);\n            });\n            // Append the <script> tag to head.\n            if (shouldAppend) {\n                el = document.head.appendChild(el);\n            }\n            // If script load awaiting isn't needed, we can resolve the Promise.\n            if (!waitForScriptLoad) {\n                resolveWithElement(el);\n            }\n        });\n    /**\n   * Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n   *\n   * @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n   * @returns Promise<HTMLScriptElement>\n   */ const load = (waitForScriptLoad = true)=>{\n        if (!_promise.current) {\n            _promise.current = loadScript(waitForScriptLoad);\n        }\n        return _promise.current;\n    };\n    /**\n   * Unload the script specified by `src`.\n   */ const unload = ()=>{\n        if (!document) {\n            return;\n        }\n        _promise.current = null;\n        if (scriptTag.current) {\n            scriptTag.current = null;\n        }\n        const el = document.querySelector(`script[src=\"${src}\"]`);\n        if (el) {\n            document.head.removeChild(el);\n        }\n    };\n    useMount(()=>{\n        if (immediate && !manual) {\n            load();\n        }\n    });\n    useUnmount(()=>{\n        if (!manual) {\n            unload();\n        }\n    });\n    return [\n        scriptTag.current,\n        status,\n        load,\n        unload\n    ];\n};\n\nfunction setScrollParam({ axis, parent, distance }) {\n    if (!parent && typeof document === 'undefined') {\n        return;\n    }\n    const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n    if (parent) {\n        parent[method] = distance;\n    } else {\n        const { body, documentElement } = document;\n        body[method] = distance;\n        documentElement[method] = distance;\n    }\n}\nfunction isScrollElement(axis, node) {\n    if (!node) {\n        return false;\n    }\n    const AXIS = axis === 'x' ? 'X' : 'Y';\n    return getComputedStyle(node)[`overflow${AXIS}`] === 'auto' || getComputedStyle(node)[`overflow${AXIS}`] === 'scroll';\n}\nconst cache = new Map();\nfunction getScrollParent(axis, node) {\n    if (!node || !node.parentElement) {\n        return null;\n    }\n    if (cache.has(node)) {\n        return cache.get(node) || null;\n    }\n    let parent = node.parentElement;\n    while(parent && !isScrollElement(axis, parent)){\n        parent = parent.parentElement;\n    }\n    if (parent) {\n        cache.set(node, parent);\n    }\n    return parent;\n}\nfunction getScrollStart({ axis, parent }) {\n    if (!parent && typeof document === 'undefined') {\n        return 0;\n    }\n    const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n    if (parent) {\n        return parent[method];\n    }\n    const { body, documentElement } = document;\n    // while one of it has a value the second is equal 0\n    return body[method] + documentElement[method];\n}\n\nfunction easeInOutQuad(t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }) {\n    if (!target || !parent && typeof document === 'undefined') {\n        return 0;\n    }\n    const isCustomParent = !!parent;\n    const parentElement = parent || document.body;\n    const parentPosition = parentElement.getBoundingClientRect();\n    const targetPosition = target.getBoundingClientRect();\n    const getDiff = (property)=>targetPosition[property] - parentPosition[property];\n    if (axis === 'y') {\n        const diff = getDiff('top');\n        if (diff === 0) {\n            return 0;\n        }\n        if (alignment === 'start') {\n            const distance = diff - offset;\n            const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n            return shouldScroll ? distance : 0;\n        }\n        const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n        if (alignment === 'end') {\n            const distance = diff + offset - parentHeight + targetPosition.height;\n            const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n            return shouldScroll ? distance : 0;\n        }\n        if (alignment === 'center') {\n            return diff - parentHeight / 2 + targetPosition.height / 2;\n        }\n        return 0;\n    }\n    if (axis === 'x') {\n        const diff = getDiff('left');\n        if (diff === 0) {\n            return 0;\n        }\n        if (alignment === 'start') {\n            const distance = diff - offset;\n            const shouldScroll = distance <= targetPosition.width || !isList;\n            return shouldScroll ? distance : 0;\n        }\n        const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n        if (alignment === 'end') {\n            const distance = diff + offset - parentWidth + targetPosition.width;\n            const shouldScroll = distance >= -targetPosition.width || !isList;\n            return shouldScroll ? distance : 0;\n        }\n        if (alignment === 'center') {\n            return diff - parentWidth / 2 + targetPosition.width / 2;\n        }\n        return 0;\n    }\n    return 0;\n}\n\nconst listenerOptions$1 = {\n    passive: true\n};\nconst useScrollIntoView = (targetElement, { duration = 1250, axis = 'y', onScrollFinish, easing = easeInOutQuad, offset = 0, cancelable = true, isList = false } = defaultOptions$1, scrollElement)=>{\n    const frameID = useRef(0);\n    const startTime = useRef(0);\n    const shouldStop = useRef(false);\n    const reducedMotion = useReducedMotion(false);\n    const cancel = ()=>{\n        if (frameID.current) {\n            cancelAnimationFrame(frameID.current);\n        }\n    };\n    const element = getTargetElement(targetElement);\n    const scrollIntoView = ({ alignment = 'start' } = {})=>{\n        const parent = getTargetElement(scrollElement) || getScrollParent(axis, element);\n        shouldStop.current = false;\n        if (frameID.current) {\n            cancel();\n        }\n        var _getScrollStart;\n        const start = (_getScrollStart = getScrollStart({\n            parent,\n            axis\n        })) != null ? _getScrollStart : 0;\n        const change = getRelativePosition({\n            parent,\n            target: element,\n            axis,\n            alignment,\n            offset,\n            isList\n        }) - (parent ? 0 : start);\n        const animateScroll = ()=>{\n            if (startTime.current === 0) {\n                startTime.current = performance.now();\n            }\n            const now = performance.now();\n            const elapsed = now - startTime.current;\n            // easing timing progress\n            const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n            const distance = start + change * easing(t);\n            setScrollParam({\n                parent,\n                axis,\n                distance\n            });\n            if (!shouldStop.current && t < 1) {\n                frameID.current = requestAnimationFrame(animateScroll);\n            } else {\n                typeof onScrollFinish === 'function' && onScrollFinish();\n                startTime.current = 0;\n                frameID.current = 0;\n                cancel();\n            }\n        };\n        animateScroll();\n    };\n    const handleStop = ()=>{\n        if (cancelable) {\n            shouldStop.current = true;\n        }\n    };\n    useEventListener('wheel', handleStop, null, listenerOptions$1);\n    useEventListener('touchmove', handleStop, null, listenerOptions$1);\n    useEffect(()=>cancel, []);\n    return {\n        scrollIntoView,\n        cancel\n    };\n};\n\nfunction preventDefault(rawEvent) {\n    const e = rawEvent || window.event;\n    // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n    if (e.touches.length > 1) {\n        return true;\n    }\n    if (e.preventDefault) {\n        e.preventDefault();\n    }\n    return false;\n}\nconst useScrollLock = (target, initialState = false)=>{\n    const [locked, setLocked] = useState(initialState);\n    const initialOverflowRef = useRef('scroll');\n    useEffect(()=>{\n        const element = getTargetElement(target);\n        if (element) {\n            initialOverflowRef.current = element.style.overflow;\n            if (locked) {\n                element.style.overflow = 'hidden';\n            }\n        }\n    }, [\n        locked,\n        target\n    ]);\n    const lock = useEvent(()=>{\n        const element = getTargetElement(target);\n        if (!element || locked) {\n            return;\n        }\n        if (isIOS) {\n            element.addEventListener('touchmove', preventDefault, {\n                passive: false\n            });\n        }\n        setLocked(true);\n    });\n    const unlock = useEvent(()=>{\n        const element = getTargetElement(target);\n        if (!element || !locked) {\n            return;\n        }\n        if (isIOS) {\n            element.removeEventListener('touchmove', preventDefault);\n        }\n        element.style.overflow = initialOverflowRef.current;\n        setLocked(false);\n    });\n    const set = useEvent((flag)=>{\n        if (flag) {\n            lock();\n        } else {\n            unlock();\n        }\n    });\n    return [\n        locked,\n        set\n    ];\n};\n\nfunction useSessionStorage(key, defaultValue, options = defaultOptions$1) {\n    return useStorage(key, defaultValue, ()=>isBrowser ? sessionStorage : undefined, options);\n}\n\nfunction _extends$1() {\n    _extends$1 = Object.assign || function(target) {\n        for(var i = 1; i < arguments.length; i++){\n            var source = arguments[i];\n            for(var key in source){\n                if (Object.prototype.hasOwnProperty.call(source, key)) {\n                    target[key] = source[key];\n                }\n            }\n        }\n        return target;\n    };\n    return _extends$1.apply(this, arguments);\n}\nconst useSetState = (initialState)=>{\n    const [state, _setState] = useState(initialState);\n    const setState = useCallback((statePartial)=>_setState((current)=>_extends$1({}, current, typeof statePartial === 'function' ? statePartial(current) : statePartial)), []);\n    return [\n        state,\n        setState\n    ];\n};\n\nfunction useSticky(targetElement, { axis = 'y', nav = 0 }, scrollElement) {\n    const [isSticky, setSticky] = useState(false);\n    const { run: scrollHandler } = useThrottleFn(()=>{\n        const element = getTargetElement(targetElement);\n        if (!element) {\n            return;\n        }\n        const rect = element.getBoundingClientRect();\n        if (axis === 'y') {\n            setSticky((rect == null ? void 0 : rect.top) <= nav);\n        } else {\n            setSticky((rect == null ? void 0 : rect.left) <= nav);\n        }\n    }, 50);\n    useEffect(()=>{\n        const element = getTargetElement(targetElement);\n        const scrollParent = getTargetElement(scrollElement) || getScrollParent(axis, element);\n        if (!element || !scrollParent) {\n            return;\n        }\n        scrollParent.addEventListener('scroll', scrollHandler);\n        scrollHandler();\n        return ()=>{\n            scrollParent.removeEventListener('scroll', scrollHandler);\n        };\n    }, [\n        axis,\n        targetElement,\n        scrollElement,\n        scrollHandler\n    ]);\n    return [\n        isSticky,\n        setSticky\n    ];\n}\n\nconst useTextDirection = (options = defaultOptions$1)=>{\n    const { selector = 'html', initialValue = 'ltr' } = options;\n    const getValue = ()=>{\n        if (initialValue !== undefined) {\n            return initialValue;\n        }\n        if (isBrowser) {\n            var _document_querySelector, _document;\n            var _document_querySelector_getAttribute;\n            return (_document_querySelector_getAttribute = (_document = document) == null ? void 0 : (_document_querySelector = _document.querySelector(selector)) == null ? void 0 : _document_querySelector.getAttribute('dir')) != null ? _document_querySelector_getAttribute : initialValue;\n        }\n        // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.\n        if (process.env.NODE_ENV !== 'production') {\n            console.warn('`useTextDirection` When server side rendering, defaultState should be defined to prevent a hydration mismatches.');\n        }\n        return initialValue;\n    };\n    const [value, setValue] = useState(getValue());\n    useEffect(()=>{\n        var _document_querySelector, _document;\n        var _document_querySelector_getAttribute;\n        setValue((_document_querySelector_getAttribute = (_document = document) == null ? void 0 : (_document_querySelector = _document.querySelector(selector)) == null ? void 0 : _document_querySelector.getAttribute('dir')) != null ? _document_querySelector_getAttribute : initialValue);\n    }, [\n        initialValue,\n        selector\n    ]);\n    const set = (value)=>{\n        if (!isBrowser) {\n            return;\n        }\n        if (value !== null) {\n            var _document_querySelector;\n            (_document_querySelector = document.querySelector(selector)) == null ? void 0 : _document_querySelector.setAttribute('dir', value);\n        } else {\n            var _document_querySelector1;\n            (_document_querySelector1 = document.querySelector(selector)) == null ? void 0 : _document_querySelector1.removeAttribute('dir');\n        }\n        setValue(value);\n    };\n    return [\n        value,\n        set\n    ];\n};\n\nconst useTextSelection = ()=>{\n    const [selection, setSelection] = useState(null);\n    const forceUpdate = useUpdate();\n    const handleSelectionChange = ()=>{\n        setSelection(document.getSelection());\n        // this is because `document.getSelection` will always return the same object\n        forceUpdate();\n    };\n    useEventListener('selectionchange', handleSelectionChange, ()=>document);\n    useEffect(()=>{\n        setSelection(document.getSelection());\n    }, []);\n    return selection;\n};\n\nconst useThrottle = (value, wait, options)=>{\n    const [throttled, setThrottled] = useState(value);\n    const { run } = useThrottleFn(()=>{\n        setThrottled(value);\n    }, wait, options);\n    useEffect(()=>{\n        run();\n    }, [\n        run,\n        value\n    ]);\n    return throttled;\n};\n\n/**\n * Wrapper for `setTimeout` with controls.\n *\n * @param cb\n * @param interval\n * @param options\n */ const useTimeoutFn = (cb, interval, options = defaultOptions$1)=>{\n    const { immediate = true } = options;\n    const [pending, setPending] = useState(false);\n    const savedCallback = useLatest(cb);\n    const timer = useRef();\n    const stop = useEvent(()=>{\n        // will still be true when component unmount\n        setPending(false);\n        if (timer.current) {\n            clearTimeout(timer.current);\n        }\n    });\n    const start = useEvent((...args)=>{\n        if (timer) {\n            clearTimeout(timer.current);\n        }\n        timer.current = setTimeout(()=>{\n            setPending(false);\n            savedCallback.current(...args);\n        }, interval);\n        setPending(true);\n    });\n    useEffect(()=>{\n        if (immediate) {\n            start();\n        }\n        return stop;\n    }, [\n        stop,\n        immediate,\n        interval,\n        start\n    ]);\n    return [\n        pending,\n        start,\n        stop\n    ];\n};\n\nconst useTimeout = (ms = 0, options = {})=>{\n    const update = useUpdate();\n    return useTimeoutFn(update, ms, options);\n};\n\nconst useTitle = (title)=>{\n    useEffect(()=>{\n        document.title = title;\n    }, [\n        title\n    ]);\n};\n\nfunction toggleReducer(state, nextValue) {\n    return typeof nextValue === 'boolean' ? nextValue : !state;\n}\nconst useToggle = (initialValue)=>{\n    return useReducer(toggleReducer, initialValue);\n};\n\nconst useUpdateLayoutEffect = createUpdateEffect(useLayoutEffect);\n\nfunction asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$2(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nconst useWebNotification = (requestPermissions = false)=>{\n    const isSupported = useSupported(()=>!!window && 'Notification' in window);\n    const permissionGranted = useRef(false);\n    const notificationRef = useRef(null);\n    const show = (title, options = defaultOptions$1)=>{\n        // If either the browser does not support notifications or the user has\n        // not granted permission, do nothing:\n        if (!isSupported && !permissionGranted.current) {\n            return;\n        }\n        notificationRef.current = new Notification(title || '', options);\n        return notificationRef.current;\n    };\n    const close = useCallback(()=>{\n        if (notificationRef.current) {\n            notificationRef.current.close();\n        }\n        notificationRef.current = null;\n    }, []);\n    useEffect(()=>{\n        permissionGranted.current = isSupported && 'permission' in Notification && Notification.permission === 'granted';\n    }, [\n        isSupported\n    ]);\n    const ensurePermissions = useCallback(/*#__PURE__*/ _async_to_generator$2(function*() {\n        if (!isSupported) return;\n        if (!permissionGranted.current && Notification.permission !== 'denied') {\n            const result = yield Notification.requestPermission();\n            if (result === 'granted') permissionGranted.current = true;\n        }\n        return permissionGranted.current;\n    }), [\n        isSupported\n    ]);\n    useEffect(()=>{\n        if (requestPermissions) {\n            ensurePermissions();\n        }\n    }, [\n        requestPermissions,\n        ensurePermissions\n    ]);\n    useUnmount(close);\n    return {\n        isSupported,\n        show,\n        close,\n        ensurePermissions,\n        permissionGranted\n    };\n};\n\nfunction useWindowsFocus(defauleValue = false) {\n    const [focused, setFocused] = useState(defauleValue);\n    useEffect(()=>{\n        setFocused(window.document.hasFocus());\n    }, []);\n    useEventListener('blur', ()=>{\n        setFocused(false);\n    });\n    useEventListener('focus', ()=>{\n        setFocused(true);\n    });\n    return focused;\n}\n\nconst listenerOptions = {\n    capture: false,\n    passive: true\n};\nfunction useWindowScroll() {\n    const [state, setState] = useRafState(()=>({\n            x: 0,\n            y: 0\n        }));\n    const handleScroll = ()=>{\n        setState({\n            x: window.scrollX,\n            y: window.scrollY\n        });\n    };\n    useEventListener('scroll', handleScroll, defaultWindow, listenerOptions);\n    // Set scroll at the first client-side load\n    useIsomorphicLayoutEffect(()=>{\n        handleScroll();\n    }, []);\n    return state;\n}\n\nfunction subscribe(callback) {\n    window.addEventListener('resize', callback);\n    return ()=>{\n        window.removeEventListener('resize', callback);\n    };\n}\nconst useWindowSize = ()=>{\n    const stateDependencies = useRef({}).current;\n    const previous = useRef({\n        width: 0,\n        height: 0\n    });\n    const isEqual = (prev, current)=>{\n        for(const _ in stateDependencies){\n            const t = _;\n            if (current[t] !== prev[t]) {\n                return false;\n            }\n        }\n        return true;\n    };\n    const cached = useSyncExternalStore(subscribe, ()=>{\n        const data = {\n            width: window.innerWidth,\n            height: window.innerHeight\n        };\n        if (!isEqual(previous.current, data)) {\n            previous.current = data;\n            return data;\n        }\n        return previous.current;\n    }, ()=>{\n        return previous.current;\n    });\n    return {\n        get width () {\n            stateDependencies.width = true;\n            return cached.width;\n        },\n        get height () {\n            stateDependencies.height = true;\n            return cached.height;\n        }\n    };\n};\n\nfunction asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator$1(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nconst useClipboard = ()=>{\n    const [text, setText] = useState('');\n    const updateText = useCallback(()=>{\n        window.navigator.clipboard.readText().then((value)=>{\n            setText(value);\n        });\n    }, []);\n    useEventListener('copy', updateText);\n    useEventListener('cut', updateText);\n    const copy = useCallback(/*#__PURE__*/ _async_to_generator$1(function*(txt) {\n        setText(txt);\n        yield window.navigator.clipboard.writeText(txt);\n    }), []);\n    return [\n        text,\n        copy\n    ];\n};\n\nfunction getPlatform(userAgent) {\n    if (/iPad|iPhone|iPod|ios/i.test(userAgent)) {\n        return 'ios';\n    } else if (/android/i.test(userAgent)) {\n        return 'android';\n    } else {\n        return 'unknown';\n    }\n}\nconst usePlatform = ({ userAgent } = {\n    userAgent: ''\n})=>{\n    const [ua, setUa] = useState(userAgent || '');\n    const [platform, setPlatform] = useState(()=>{\n        if (userAgent) {\n            return getPlatform(userAgent);\n        }\n        return 'unknown';\n    });\n    useEffect(()=>{\n        setPlatform(getPlatform(navigator.userAgent));\n        setUa(navigator.userAgent);\n    }, []);\n    const isInMiniProgram = useCallback(()=>{\n        return /miniprogram/i.test(ua);\n    }, [\n        ua\n    ]);\n    const isInWechat = useCallback(()=>{\n        return /micromessenger/i.test(ua);\n    }, [\n        ua\n    ]);\n    const isiPhoneX = useCallback(()=>{\n        return /iPhoneX/i.test(ua);\n    }, [\n        ua\n    ]);\n    return {\n        platform,\n        isInMiniProgram,\n        isInWechat,\n        isiPhoneX\n    };\n};\n\nfunction useMobileLandscape() {\n    const [isMobileLandscape, setIsMobileLandscape] = useState(false);\n    const [orientation] = useOrientation();\n    useEffect(()=>{\n        const userAgent = window.navigator.userAgent;\n        const isMobile = /Mobi|Android｜iphone/i.test(userAgent);\n        setIsMobileLandscape(isMobile && orientation.type === 'landscape-primary');\n    }, [\n        orientation.type\n    ]);\n    return isMobileLandscape;\n}\n\nconst useControlled = (value, defaultValue, onChange)=>{\n    const [stateValue, setStateValue] = useState(value !== undefined ? value : defaultValue);\n    const isControlled = value !== undefined;\n    const onChangeRef = useLatest(onChange);\n    const setValue = useCallback((newValue)=>{\n        if (!isControlled) {\n            setStateValue(newValue);\n        }\n        onChangeRef.current == null ? void 0 : onChangeRef.current.call(onChangeRef, newValue);\n    }, [\n        isControlled,\n        onChangeRef\n    ]);\n    return [\n        isControlled ? value : stateValue,\n        setValue\n    ];\n};\n\nfunction useDisclosure(props = {}) {\n    const { defaultOpen, isOpen: isOpenProp, onClose: onCloseProp, onOpen: onOpenProp, onChange = ()=>{} } = props;\n    const onOpenPropRef = useLatest(onOpenProp);\n    const onClosePropRef = useLatest(onCloseProp);\n    const [isOpen, setIsOpen] = useControlled(isOpenProp, defaultOpen || false, onChange);\n    const isControlled = isOpenProp !== undefined;\n    const onClose = useCallback(()=>{\n        if (!isControlled) {\n            setIsOpen(false);\n        }\n        onClosePropRef.current == null ? void 0 : onClosePropRef.current.call(onClosePropRef);\n    }, [\n        isControlled,\n        onClosePropRef,\n        setIsOpen\n    ]);\n    const onOpen = useCallback(()=>{\n        if (!isControlled) {\n            setIsOpen(true);\n        }\n        onOpenPropRef.current == null ? void 0 : onOpenPropRef.current.call(onOpenPropRef);\n    }, [\n        isControlled,\n        onOpenPropRef,\n        setIsOpen\n    ]);\n    const onOpenChange = useCallback(()=>{\n        const action = isOpen ? onClose : onOpen;\n        action();\n    }, [\n        isOpen,\n        onOpen,\n        onClose\n    ]);\n    return {\n        isOpen: !!isOpen,\n        onOpen,\n        onClose,\n        onOpenChange,\n        isControlled\n    };\n}\n\nconst useEventSource = (url, events = [], options = defaultOptions$1)=>{\n    const [data, setData] = useState(null);\n    const [error, setError] = useState(null);\n    const [status, setStatus] = useState('DISCONNECTED');\n    const [event, setEvent] = useState(null);\n    const [lastEventId, setLastEventId] = useState(null);\n    const retries = useRef(0);\n    const explicitlyClosed = useRef(false);\n    const eventSourceRef = useRef(null);\n    const eventListenerRef = useRef();\n    if (!eventListenerRef.current) {\n        eventListenerRef.current = new Map();\n    }\n    const clean = useEvent(()=>{\n        const listeners = eventListenerRef.current;\n        events.forEach((name)=>{\n            const handler = listeners == null ? void 0 : listeners.get(name);\n            if (handler) {\n                var _eventSourceRef_current;\n                (_eventSourceRef_current = eventSourceRef.current) == null ? void 0 : _eventSourceRef_current.removeEventListener(name, handler);\n            }\n        });\n    });\n    const close = useCallback((explicit = false)=>{\n        var _eventSourceRef_current;\n        setStatus('DISCONNECTED');\n        clean();\n        (_eventSourceRef_current = eventSourceRef.current) == null ? void 0 : _eventSourceRef_current.close();\n        eventSourceRef.current = null;\n        explicitlyClosed.current = explicit;\n    }, [\n        clean\n    ]);\n    const explicitlyClose = useCallback(()=>{\n        close(true);\n    }, [\n        close\n    ]);\n    const open = useEvent(()=>{\n        close();\n        setStatus('CONNECTING');\n        retries.current = 0;\n        if (!eventSourceRef.current) {\n            eventSourceRef.current = new EventSource(url, {\n                withCredentials: options.withCredentials\n            });\n        }\n        const es = eventSourceRef.current;\n        es.onopen = ()=>{\n            setStatus('CONNECTED');\n            setError(null);\n        };\n        es.onmessage = (ev)=>{\n            setData(ev.data);\n            setLastEventId(ev.lastEventId);\n            setStatus('CONNECTED');\n        };\n        es.onerror = (err)=>{\n            setError(err);\n            setStatus('DISCONNECTED');\n            if (options.autoReconnect && !explicitlyClosed.current) {\n                const { retries: maxRetries = -1, delay = 1000, onFailed } = options.autoReconnect;\n                retries.current += 1;\n                if (typeof maxRetries === 'number' && (maxRetries < 0 || retries.current < maxRetries) || typeof maxRetries === 'function' && maxRetries()) {\n                    setTimeout(open, delay);\n                } else {\n                    onFailed == null ? void 0 : onFailed();\n                }\n            }\n        };\n        const listeners = eventListenerRef.current;\n        events.forEach((name)=>{\n            const handler = (event)=>{\n                setEvent(name);\n                var _event_data;\n                setData((_event_data = event.data) != null ? _event_data : null);\n            };\n            es.addEventListener(name, handler);\n            listeners == null ? void 0 : listeners.set(name, handler);\n        });\n    });\n    useEffect(()=>{\n        if (options.immediate !== false) {\n            open();\n        }\n        return close;\n    }, [\n        open,\n        close,\n        options.immediate\n    ]);\n    useUnmount(()=>{\n        close();\n    });\n    return {\n        eventSourceRef,\n        data,\n        error,\n        status,\n        lastEventId,\n        event,\n        close: explicitlyClose,\n        open\n    };\n};\n\nfunction assignRef(ref, value) {\n    if (ref == null) return;\n    if (typeof ref === 'function') {\n        ref(value);\n        return;\n    }\n    try {\n        ref.current = value;\n    } catch (error) {\n        throw new Error(`Cannot assign value '${value}' to ref '${ref}'`);\n    }\n}\nfunction mergeRefs(...refs) {\n    return (node)=>{\n        refs.forEach((ref)=>{\n            assignRef(ref, node);\n        });\n    };\n}\nfunction useMergedRefs(...refs) {\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    return useMemo(()=>mergeRefs(...refs), refs);\n}\n\n/**\n * @description copy from swr\n */ const use = React.use || ((thenable)=>{\n    switch(thenable.status){\n        case 'pending':\n            throw thenable;\n        case 'fulfilled':\n            return thenable.value;\n        case 'rejected':\n            throw thenable.reason;\n        default:\n            thenable.status = 'pending';\n            thenable.then((v)=>{\n                thenable.status = 'fulfilled';\n                thenable.value = v;\n            }, (e)=>{\n                thenable.status = 'rejected';\n                thenable.reason = e;\n            });\n            throw thenable;\n    }\n});\n\nfunction getInitialState(defaultState) {\n    // Prevent a React hydration mismatch when a default value is provided by not defaulting to window.matchMedia(query).matches.\n    if (defaultState !== undefined) {\n        return defaultState;\n    }\n    if (isBrowser) {\n        const navigator1 = window.navigator;\n        return navigator1.languages;\n    }\n    // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn('`usePreferredLanguage` When server side rendering, defaultState should be defined to prevent a hydration mismatches.');\n    }\n    return [\n        'en'\n    ];\n}\nconst usePreferredLanguages = (defaultLanguages)=>{\n    const [state, setState] = useState(getInitialState(defaultLanguages));\n    useEventListener('languagechange', ()=>{\n        setState(navigator.languages);\n    });\n    return state;\n};\n\nconst useBroadcastChannel = (options)=>{\n    const { name } = options;\n    const isSupported = useSupported(()=>window && 'BroadcastChannel' in window);\n    const [isClosed, setIsClosed] = useState(false);\n    const [data, setData] = useState();\n    const [error, setError] = useState(null);\n    const [timeStamp, setTimeStamp] = useState(0);\n    const channelRef = useRef();\n    const post = useCallback((data)=>{\n        if (channelRef.current) {\n            channelRef.current.postMessage(data);\n        }\n    }, []);\n    const close = useCallback(()=>{\n        if (channelRef.current) {\n            channelRef.current.close();\n        }\n        setIsClosed(true);\n    }, []);\n    useEffect(()=>{\n        if (isSupported) {\n            channelRef.current = new BroadcastChannel(name);\n            setError(null);\n            const handleMessage = (e)=>{\n                setData(e.data);\n                // avoid data is same between two messages\n                setTimeStamp(Date.now());\n            };\n            const handleError = (e)=>{\n                setError(e);\n            };\n            const handleClose = ()=>{\n                setIsClosed(true);\n            };\n            channelRef.current.addEventListener('message', handleMessage, {\n                passive: true\n            });\n            channelRef.current.addEventListener('messageerror', handleError, {\n                passive: true\n            });\n            channelRef.current.addEventListener('close', handleClose);\n            return ()=>{\n                if (channelRef.current) {\n                    channelRef.current.removeEventListener('message', handleMessage);\n                    channelRef.current.removeEventListener('messageerror', handleError);\n                    channelRef.current.removeEventListener('close', handleClose);\n                    close();\n                }\n            };\n        }\n        return close;\n    }, [\n        isSupported,\n        name,\n        close\n    ]);\n    return {\n        isSupported,\n        channel: channelRef.current,\n        data,\n        post,\n        close,\n        error,\n        isClosed,\n        timeStamp\n    };\n};\n\nconst useDevicePixelRatio = ()=>{\n    const [pixelRatio, setPixelRatio] = useState(1);\n    const observe = useCallback(()=>{\n        if (!window) return;\n        setPixelRatio(window.devicePixelRatio);\n        const media = window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\n        const handleChange = ()=>{\n            observe();\n        };\n        media.addEventListener('change', handleChange, {\n            once: true\n        });\n        return ()=>{\n            media.removeEventListener('change', handleChange);\n        };\n    }, []);\n    useEffect(()=>{\n        const cleanup = observe();\n        return cleanup;\n    }, [\n        observe\n    ]);\n    return {\n        pixelRatio\n    };\n};\n\nconst useElementByPoint = (options)=>{\n    const { x, y, document: doc = typeof document !== 'undefined' ? document : null, multiple = false, interval = 'requestAnimationFrame', immediate = true } = options;\n    const isSupported = useSupported(()=>{\n        if (multiple) return doc && 'elementsFromPoint' in doc;\n        return doc && 'elementFromPoint' in doc;\n    });\n    const [element, setElement] = useState(null);\n    const [isActive, setIsActive] = useState(immediate);\n    const rafIdRef = useRef(null);\n    const intervalIdRef = useRef(null);\n    const getXY = useCallback(()=>{\n        // 需要判断 NaN\n        const currentX = typeof x === 'function' ? x() : x;\n        const currentY = typeof y === 'function' ? y() : y;\n        return {\n            x: Number.isNaN(currentX) ? 0 : currentX,\n            y: Number.isNaN(currentY) ? 0 : currentY\n        };\n    }, [\n        x,\n        y\n    ]);\n    const cb = useCallback(()=>{\n        const { x: currentX, y: currentY } = getXY();\n        var _doc_elementsFromPoint, _doc_elementFromPoint;\n        setElement(multiple ? (_doc_elementsFromPoint = doc == null ? void 0 : doc.elementsFromPoint(currentX, currentY)) != null ? _doc_elementsFromPoint : [] : (_doc_elementFromPoint = doc == null ? void 0 : doc.elementFromPoint(currentX, currentY)) != null ? _doc_elementFromPoint : null);\n    }, [\n        doc,\n        multiple,\n        getXY\n    ]);\n    const cleanup = useCallback(()=>{\n        if (rafIdRef.current !== null) {\n            cancelAnimationFrame(rafIdRef.current);\n            rafIdRef.current = null;\n        }\n        if (intervalIdRef.current !== null) {\n            clearInterval(intervalIdRef.current);\n            intervalIdRef.current = null;\n        }\n    }, []);\n    const pause = useCallback(()=>{\n        setIsActive(false);\n        cleanup();\n    }, [\n        cleanup\n    ]);\n    const resume = useCallback(()=>{\n        setIsActive(true);\n    }, []);\n    useEffect(()=>{\n        if (!isActive) {\n            return;\n        }\n        if (interval === 'requestAnimationFrame') {\n            const runRaf = ()=>{\n                cb();\n                rafIdRef.current = requestAnimationFrame(runRaf);\n            };\n            runRaf();\n        } else {\n            cb();\n            intervalIdRef.current = setInterval(cb, interval);\n        }\n        return cleanup;\n    }, [\n        isActive,\n        interval,\n        cb,\n        cleanup\n    ]);\n    useEffect(()=>{\n        if (immediate) {\n            resume();\n        }\n        return pause;\n    }, [\n        immediate,\n        resume,\n        pause\n    ]);\n    return {\n        isSupported,\n        element,\n        pause,\n        resume,\n        isActive\n    };\n};\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) {\n        resolve(value);\n    } else {\n        Promise.resolve(value).then(_next, _throw);\n    }\n}\nfunction _async_to_generator(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\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            for(var key in source){\n                if (Object.prototype.hasOwnProperty.call(source, key)) {\n                    target[key] = source[key];\n                }\n            }\n        }\n        return target;\n    };\n    return _extends.apply(this, arguments);\n}\nfunction _object_without_properties_loose(source, excluded) {\n    if (source == null) return {};\n    var target = {};\n    var sourceKeys = Object.keys(source);\n    var key, i;\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    return target;\n}\nconst useFetchEventSource = (url, options = {})=>{\n    const [data, setData] = useState(null);\n    const [error, setError] = useState(null);\n    const [status, setStatus] = useState('DISCONNECTED');\n    const [event, setEvent] = useState(null);\n    const [lastEventId, setLastEventId] = useState(null);\n    const retries = useRef(0);\n    const abortController = useRef(null);\n    const explicitlyClosed = useRef(false);\n    const close = useEvent(()=>{\n        if (!explicitlyClosed.current) {\n            var _abortController_current;\n            explicitlyClosed.current = true;\n            (_abortController_current = abortController.current) == null ? void 0 : _abortController_current.abort();\n            abortController.current = null;\n            setStatus('DISCONNECTED');\n            options.onClose == null ? void 0 : options.onClose.call(options);\n        }\n    });\n    const open = useEvent(/*#__PURE__*/ _async_to_generator(function*() {\n        close();\n        setStatus('CONNECTING');\n        explicitlyClosed.current = false;\n        retries.current = 0;\n        // 创建新的 AbortController\n        abortController.current = new AbortController();\n        try {\n            // 从选项中提取 FetchEventSourceInit 相关的选项\n            const { immediate, autoReconnect, onOpen, onMessage, onError, onClose, withCredentials, body } = options, fetchOptions = _object_without_properties_loose(options, [\n                \"immediate\",\n                \"autoReconnect\",\n                \"onOpen\",\n                \"onMessage\",\n                \"onError\",\n                \"onClose\",\n                \"withCredentials\",\n                \"body\"\n            ]);\n            // 构建请求配置\n            const finalOptions = _extends({\n                method: options.method || 'GET',\n                headers: _extends({\n                    'Accept': 'text/event-stream',\n                    'Cache-Control': 'no-cache',\n                    'Connection': 'keep-alive'\n                }, options.headers),\n                signal: abortController.current.signal,\n                credentials: withCredentials ? 'include' : 'same-origin'\n            }, fetchOptions);\n            // 只在 POST 请求时添加 body\n            if (options.method === 'POST' && body) {\n                finalOptions.body = body;\n                finalOptions.headers = _extends({}, finalOptions.headers, {\n                    'Content-Type': 'application/json'\n                });\n            }\n            yield fetchEventSource(url.toString(), _extends({}, finalOptions, {\n                onopen (response) {\n                    return _async_to_generator(function*() {\n                        if (response.ok) {\n                            setStatus('CONNECTED');\n                            setError(null);\n                            options.onOpen == null ? void 0 : options.onOpen.call(options);\n                        } else {\n                            const error = new Error(`Failed to connect: ${response.status} ${response.statusText}`);\n                            setError(error);\n                            throw error;\n                        }\n                    })();\n                },\n                onmessage (msg) {\n                    if (!explicitlyClosed.current) {\n                        setData(msg.data);\n                        var _msg_id;\n                        setLastEventId((_msg_id = msg.id) != null ? _msg_id : null);\n                        setEvent(msg.event || null);\n                        options.onMessage == null ? void 0 : options.onMessage.call(options, msg);\n                    }\n                },\n                onerror (err) {\n                    setError(err);\n                    setStatus('DISCONNECTED');\n                    const retryDelay = options.onError == null ? void 0 : options.onError.call(options, err);\n                    if (options.autoReconnect && !explicitlyClosed.current) {\n                        const { retries: maxRetries = -1, delay = 1000, onFailed } = options.autoReconnect;\n                        retries.current += 1;\n                        if (typeof maxRetries === 'number' && (maxRetries < 0 || retries.current < maxRetries) || typeof maxRetries === 'function' && maxRetries()) {\n                            return retryDelay != null ? retryDelay : delay;\n                        } else {\n                            onFailed == null ? void 0 : onFailed();\n                            throw err;\n                        }\n                    }\n                    throw err;\n                },\n                onclose () {\n                    if (!explicitlyClosed.current) {\n                        setStatus('DISCONNECTED');\n                        options.onClose == null ? void 0 : options.onClose.call(options);\n                    }\n                }\n            }));\n        } catch (err) {\n            // 只处理非主动关闭导致的错误\n            if (!explicitlyClosed.current) {\n                console.error('EventSource Error:', err);\n                setError(err);\n                setStatus('DISCONNECTED');\n            }\n        }\n    }));\n    useEffect(()=>{\n        if (options.immediate !== false) {\n            open();\n        }\n        return ()=>{\n            // 组件卸载时关闭连接\n            close();\n        };\n    }, [\n        open,\n        close,\n        options.immediate\n    ]);\n    // 组件卸载时确保连接关闭\n    useUnmount(()=>{\n        close();\n    });\n    return {\n        data,\n        error,\n        status,\n        lastEventId,\n        event,\n        close,\n        open\n    };\n};\n\nexport { assignRef, defaultOptions, mergeRefs, use, useActiveElement, useAsyncEffect, useBroadcastChannel, useClickOutside, useClipboard, useControlled, useCookie, useCountDown, useCounter, useCssVar, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDevicePixelRatio, useDisclosure, useDocumentVisibility, useDoubleClick, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetchEventSource, useFileDialog, useFirstMountState, useFocus, useFps, useFullscreen, useGeolocation, useHover, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLocationSelector, useLongPress, useMeasure, useMediaDevices, useMediaQuery, useMergedRefs, useMobileLandscape, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, useOnceEffect, useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePlatform, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScreenSafeArea, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSetState, useSticky, useSupported, useTextDirection, useTextSelection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, useUpdateEffect, useUpdateLayoutEffect, useWebNotification, useWindowScroll, useWindowSize, useWindowsFocus };\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { getHandwritingRecognizer } from '@zh-keyboard/core'\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport function useHandwritingRecognizer(enableHandwriting = false) {\r\n  const [recognizerInitialized, setRecognizerInitialized] = useState(false)\r\n  const [recognizerProgress, setRecognizerProgress] = useState(0)\r\n\r\n  useEffect(() => {\r\n    async function initializeRecognizer() {\r\n      const recognizer = getHandwritingRecognizer()\r\n      if (recognizer) {\r\n        try {\r\n          setRecognizerInitialized(await recognizer.initialize({\r\n            onProgress: (progress) => {\r\n              setRecognizerProgress(progress)\r\n            },\r\n          }))\r\n        } catch (error) {\r\n          console.error('初始化手写识别服务失败:', error)\r\n          setRecognizerInitialized(false)\r\n        }\r\n      } else {\r\n        console.warn('未注册手写识别服务')\r\n        setRecognizerInitialized(false)\r\n      }\r\n    }\r\n\r\n    async function closeRecognizer() {\r\n      const recognizer = getHandwritingRecognizer()\r\n      if (recognizer && recognizerInitialized) {\r\n        try {\r\n          await recognizer.close()\r\n          setRecognizerInitialized(false)\r\n        } catch (error) {\r\n          console.error('关闭手写识别服务失败:', error)\r\n        }\r\n      }\r\n    }\r\n\r\n    if (enableHandwriting) {\r\n      initializeRecognizer()\r\n    }\r\n\r\n    return () => {\r\n      closeRecognizer()\r\n    }\r\n  }, [enableHandwriting, recognizerInitialized])\r\n\r\n  return {\r\n    recognizerInitialized,\r\n    recognizerProgress,\r\n  }\r\n}\r\n","export default \"data:image/svg+xml,%3csvg%20t='1777011781316'%20class='icon'%20viewBox='0%200%201439%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5887'%20width='200'%20height='200'%3e%3cpath%20d='M1283.03672%200.000187H465.243153a158.045778%20158.045778%200%200%200-122.329921%2057.680486L24.083875%20440.475014c-0.622227%200.68445-1.182232%201.431123-1.742237%202.177796A115.672087%20115.672087%200%200%200%200.003672%20511.906728a118.658779%20118.658779%200%200%200%2026.818004%2074.667297l316.713783%20380.492099a158.232446%20158.232446%200%200%200%20121.707694%2056.933814H1283.03672a156.303541%20156.303541%200%200%200%20156.05465-156.116873V156.054837A156.241318%20156.241318%200%200%200%201283.03672%200.000187z%20m-257.477728%20689.863598a47.538179%2047.538179%200%200%201-33.600284%2013.937896%2047.662624%2047.662624%200%200%201-33.662506-13.937896L847.72638%20579.293963l-110.569822%20110.569822a47.911515%2047.911515%200%200%201-33.724729%2013.937896%2047.662624%2047.662624%200%200%201-33.662506-81.325131l110.383154-110.569822-110.569822-110.569822a47.662624%2047.662624%200%200%201%200-67.387235%2047.600402%2047.600402%200%200%201%2067.325012%200l110.632045%20110.632045%20110.569822-110.632045A47.625291%2047.625291%200%200%201%201025.434546%20401.336906l-110.383153%20110.569822%20110.569821%20110.569822a47.662624%2047.662624%200%200%201-0.062222%2067.387235z'%20fill='%232C2C2C'%20p-id='5888'%3e%3c/path%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M19,7V11H5.83L9.41,7.41L8,6L2,12L8,18L9.41,16.58L5.83,13H21V7H19Z'%20/%3e%3c/svg%3e\"","import type React from 'react'\nimport { createKeyRepeater } from '@zh-keyboard/core'\nimport { useCallback, useEffect, useRef } from 'react'\n\nexport function useKeyRepeater() {\n  const repeaterRef = useRef(createKeyRepeater())\n\n  useEffect(() => {\n    const repeater = repeaterRef.current\n    return () => {\n      repeater.stop()\n    }\n  }, [])\n\n  const startRepeat = useCallback((e: React.PointerEvent, action: () => void) => {\n    e.preventDefault()\n    ;(e.currentTarget as HTMLElement | null)?.setPointerCapture?.(e.pointerId)\n    repeaterRef.current.start(action)\n  }, [])\n\n  const stopRepeat = useCallback(() => {\n    repeaterRef.current.stop()\n  }, [])\n\n  return {\n    startRepeat,\n    stopRepeat,\n  }\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from 'react'\nimport '../styles/CandidateList.scss'\n\ninterface CandidateListProps {\n  candidates: string[]\n  onSelect: (index: number) => void\n}\n\nconst CandidateList: React.FC<CandidateListProps> = ({ candidates, onSelect }) => {\n  return (\n    <div className=\"zhk-candidate-list\">\n      {candidates.map((candidate, index) => (\n        <button\n          key={candidate}\n          className=\"zhk-candidate-list__item\"\n          onClick={() => onSelect(index)}\n        >\n          {candidate}\n        </button>\n      ))}\n    </div>\n  )\n}\n\nexport default CandidateList\n","import type { KeyEvent } from '../types'\nimport { useElementSize } from '@reactuses/core'\nimport { CanvasDrawer, getHandwritingRecognizer } from '@zh-keyboard/core'\nimport React, { useCallback, useLayoutEffect, useRef, useState } from 'react'\nimport keyboardBackspace from '../assets/icons/keyboard-backspace.svg'\nimport keyboardReturn from '../assets/icons/keyboard-return.svg'\nimport { useKeyRepeater } from '../hooks/useKeyRepeater'\nimport CandidateList from './CandidateList'\nimport '../styles/HandwritingInput.scss'\n\ninterface HandwritingInputProps {\n  recognizerInitialized: boolean\n  recognizerProgress: number\n  onKey: (payload: KeyEvent) => void\n  onExit: () => void\n}\n\nconst HandwritingInput: React.FC<HandwritingInputProps> = ({ recognizerInitialized, recognizerProgress, onKey, onExit }) => {\n  const canvasRef = useRef<HTMLCanvasElement>(null)\n  const canvasDrawer = useRef<CanvasDrawer | null>(null)\n  const isRecognizing = useRef(false)\n  const [candidates, setCandidates] = useState<string[]>([])\n\n  const { startRepeat, stopRepeat } = useKeyRepeater()\n\n  const recognizeStroke = useCallback(async () => {\n    if (!canvasDrawer.current || canvasDrawer.current.getStrokeData().length === 0 || isRecognizing.current)\n      return\n\n    const recognizer = getHandwritingRecognizer()\n    if (recognizer) {\n      isRecognizing.current = true\n      try {\n        const strokeData = [...canvasDrawer.current.getStrokeData()]\n        const results = await recognizer.recognize(strokeData)\n        setCandidates(results)\n      } catch (error) {\n        console.error('识别笔迹失败:', error)\n      } finally {\n        isRecognizing.current = false\n      }\n    } else {\n      console.warn('手写识别服务不可用')\n    }\n  }, [])\n\n  const setupCanvas = useCallback(() => {\n    if (!canvasRef.current)\n      return\n\n    if (canvasDrawer.current) {\n      canvasDrawer.current.destroy()\n    }\n\n    canvasRef.current.width = canvasRef.current.clientWidth\n    canvasRef.current.height = canvasRef.current.clientHeight\n\n    canvasDrawer.current = new CanvasDrawer(canvasRef.current, {\n      onDrawEnd: recognizeStroke,\n    })\n  }, [recognizeStroke])\n\n  const [canvasWidth, canvasHeight] = useElementSize(canvasRef)\n\n  useLayoutEffect(() => {\n    if (canvasWidth && canvasHeight && recognizerInitialized) {\n      setupCanvas()\n      return () => {\n        if (canvasDrawer.current) {\n          canvasDrawer.current.destroy()\n        }\n      }\n    }\n  }, [canvasWidth, canvasHeight, recognizerInitialized, setupCanvas])\n\n  function clearCanvas() {\n    if (!canvasDrawer.current)\n      return\n    canvasDrawer.current.clearCanvas()\n  }\n\n  function handleSelection(index: number) {\n    const candidate = candidates[index]\n    if (!candidate)\n      return\n    onKey({ key: candidate })\n    setCandidates([])\n    clearCanvas()\n  }\n\n  function preventContextMenu(e: React.MouseEvent) {\n    e.preventDefault()\n  }\n\n  return (\n    <div className=\"handwriting-input\">\n      <CandidateList candidates={candidates} onSelect={handleSelection} />\n      <div className=\"handwriting-content\">\n        <div className=\"handwriting-buttons\">\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: '。' }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            。\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: '？' }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            ？\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: '！' }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            ！\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: '、' }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            、\n          </button>\n        </div>\n        <div className=\"handwriting-canvas-container\">\n          {!recognizerInitialized\n            ? (\n                <div className=\"handwriting-loading\">\n                  <div className=\"loading-text\">\n                    正在加载手写识别...\n                  </div>\n                  <div className=\"progress-bar\">\n                    <div className=\"progress-fill\" style={{ width: `${recognizerProgress * 100}%` }}></div>\n                  </div>\n                  <div className=\"progress-text\">\n                    {Math.round(recognizerProgress * 100)}%\n                  </div>\n                </div>\n              )\n            : (\n                <canvas\n                  ref={canvasRef}\n                  className=\"handwriting-canvas\"\n                >\n                </canvas>\n              )}\n        </div>\n        <div className=\"handwriting-buttons\">\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: 'delete', isControl: true }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            <img src={keyboardBackspace} alt=\"删除\" />\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onClick={onExit}\n            onContextMenu={preventContextMenu}\n          >\n            拼音\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: '，' }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            ，\n          </button>\n          <button\n            className=\"handwriting-btn handwriting-btn--function\"\n            onPointerDown={e => startRepeat(e, () => onKey({ key: 'enter', isControl: true }))}\n            onPointerUp={stopRepeat}\n            onPointerLeave={stopRepeat}\n            onPointerCancel={stopRepeat}\n            onContextMenu={preventContextMenu}\n          >\n            <img src={keyboardReturn} alt=\"回车\" />\n          </button>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default HandwritingInput\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M6,18H18V16H6M12,8.41L16.59,13L18,11.58L12,5.58L6,11.58L7.41,13L12,8.41Z'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M3%2015H5V19H19V15H21V19C21%2020.1%2020.1%2021%2019%2021H5C3.9%2021%203%2020.1%203%2019V15Z'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z'%20/%3e%3c/svg%3e\"","import React from 'react'\nimport '../styles/CandidateSelection.scss'\n\ninterface CandidateSelectionProps {\n  candidates: string[]\n  onSelect: (index: number) => void\n  onClose: () => void\n}\n\nconst CandidateSelection: React.FC<CandidateSelectionProps> = ({ candidates, onSelect, onClose }) => {\n  function getNumberCount(candidate: string) {\n    const length = Array.from(candidate).length\n    if (length >= 2 && length <= 3) {\n      return 2\n    } else if (length >= 4) {\n      return 3\n    }\n    return 1\n  }\n\n  return (\n    <div className=\"zhk-selection\">\n      <div className=\"zhk-selection__list\">\n        {candidates.map((candidate, index) => (\n          <div key={candidate} className={`zhk-selection__text zhk-selection__text--span-${getNumberCount(candidate)}`} onClick={() => onSelect(index)}>\n            {candidate}\n          </div>\n        ))}\n      </div>\n      <div className=\"zhk-selection__func\">\n        <button className=\"zhk-selection__func-btn\" onClick={onClose}>\n          返回\n        </button>\n      </div>\n    </div>\n  )\n}\n\nexport default CandidateSelection\n","import type { PinyinEngine, PinyinState } from '@zh-keyboard/core'\nimport type { KeyEvent } from '../types'\nimport { getPinyinEngine } from '@zh-keyboard/core'\nimport { forwardRef, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport chevronRight from '../assets/icons/chevron-right.svg'\nimport CandidateList from './CandidateList'\nimport CandidateSelection from './CandidateSelection'\nimport '../styles/CandidateBar.scss'\n\ninterface CandidateBarProps {\n  currentPinyin: string\n  onKey: (payload: KeyEvent) => void\n  onInput: (text: string) => void\n  setCurrentPinyin: (pinyin: string) => void\n}\n\nexport interface CandidateBarRef {\n  handleSelection: (globalIndex: number) => Promise<void>\n}\n\nconst CandidateBar = forwardRef<CandidateBarRef, CandidateBarProps>(({\n  currentPinyin,\n  onInput,\n  setCurrentPinyin,\n}, ref) => {\n  const engineRef = useRef<PinyinEngine | null>(null)\n  const [engineLoading, setEngineLoading] = useState(true)\n  const [pinyinState, setPinyinState] = useState<PinyinState | null>(null)\n  const [isSelectionOpen, setIsSelectionOpen] = useState(false)\n\n  const candidates = useMemo(() => pinyinState?.candidates.map(c => c.text) ?? [], [pinyinState])\n\n  const showedPinyin = useMemo(() => {\n    if (!pinyinState)\n      return ''\n    return pinyinState.preeditHead + pinyinState.preeditBody\n  }, [pinyinState])\n\n  useImperativeHandle(ref, () => ({\n    handleSelection,\n  }))\n\n  // 初始化引擎（仅执行一次）\n  useLayoutEffect(() => {\n    const engine = getPinyinEngine()\n    if (!engine) {\n      throw new Error('未找到拼音引擎实例，请确保已正确注册引擎')\n    }\n\n    engineRef.current = engine\n    setEngineLoading(true)\n\n    // 等待引擎真正就绪\n    ;(async () => {\n      try {\n        await engine.whenReady?.()\n      } catch (e) {\n        console.error('拼音引擎就绪失败:', e)\n      }\n      setEngineLoading(false)\n    })()\n\n    return () => {\n      engineRef.current?.syncData?.()\n      engineRef.current?.processInput('')?.catch(() => {})\n      setEngineLoading(true)\n    }\n  }, [])\n\n  // 处理拼音变化\n  useLayoutEffect(() => {\n    const eng = engineRef.current\n    if (!eng || engineLoading)\n      return\n\n    if (currentPinyin === '') {\n      eng.processInput('')?.catch(() => {})\n      setPinyinState(null)\n      return\n    }\n\n    ;(async () => {\n      const state = await eng.processInput(currentPinyin)\n      setPinyinState(state)\n    })()\n  }, [currentPinyin, engineLoading])\n\n  async function handleSelection(globalIndex: number) {\n    const eng = engineRef.current\n    if (!eng)\n      return\n\n    const state = await eng.pickCandidate(globalIndex)\n    setPinyinState(state)\n\n    if (!state.preeditBody) {\n      onInput(state.committed || '')\n      setCurrentPinyin('')\n      setPinyinState(null)\n      setIsSelectionOpen(false)\n    }\n  }\n\n  if (engineLoading) {\n    return (\n      <div className=\"zhk-candidate\">\n        <div className=\"zhk-candidate__container zhk-candidate__container--loading\">\n          <span className=\"zhk-candidate__loading-text\">加载拼音引擎中…</span>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"zhk-candidate\">\n      <div className=\"zhk-candidate__container\">\n        {showedPinyin && (\n          <div className=\"zhk-candidate__pinyin\">\n            {showedPinyin}\n          </div>\n        )}\n        <div className=\"zhk-candidate__bottom-container\">\n          {candidates.length > 0 && (\n            <CandidateList\n              candidates={candidates}\n              onSelect={handleSelection}\n            />\n          )}\n          {candidates.length > 0 && (\n            <button\n              className=\"zhk-candidate__more\"\n              onClick={() => setIsSelectionOpen(true)}\n            >\n              <img src={chevronRight} alt=\"更多\" />\n            </button>\n          )}\n        </div>\n      </div>\n      {isSelectionOpen && (\n        <CandidateSelection\n          candidates={candidates}\n          onSelect={handleSelection}\n          onClose={() => setIsSelectionOpen(false)}\n        />\n      )}\n    </div>\n  )\n})\n\nexport default CandidateBar\n","import type { KeyBoardMode, KeyEvent } from '../types'\nimport type { CandidateBarRef } from './CandidateBar'\nimport React, { useMemo, useRef, useState } from 'react'\nimport keyboardBackspace from '../assets/icons/keyboard-backspace.svg'\nimport keyboardCaps from '../assets/icons/keyboard-caps.svg'\nimport keyboardReturn from '../assets/icons/keyboard-return.svg'\nimport keyboardSpace from '../assets/icons/keyboard-space.svg'\nimport { useKeyRepeater } from '../hooks/useKeyRepeater'\nimport CandidateBar from './CandidateBar'\nimport '../styles/KeyboardBase.scss'\n\ninterface KeyboardBaseProps {\n  enableHandwriting?: boolean\n  mode: KeyBoardMode\n  onKey: (payload: KeyEvent) => void\n  setMode: (mode: KeyBoardMode) => void\n}\n\nconst KeyboardBase: React.FC<KeyboardBaseProps> = ({ enableHandwriting, mode, onKey, setMode }) => {\n  const [pinyin, setPinyin] = useState('')\n  const candidateBarRef = useRef<CandidateBarRef>(null)\n\n  const { startRepeat, stopRepeat } = useKeyRepeater()\n\n  const isChineseMode = useMemo(() => mode === 'zh', [mode])\n  const isUpperCase = useMemo(() => mode === 'en_cap', [mode])\n  const showUpperCase = useMemo(() => isChineseMode ? true : isUpperCase, [isChineseMode, isUpperCase])\n\n  function handleSpecialKey(key: string, isControl = false) {\n    onKey({ key, isControl })\n  }\n\n  function handleShift() {\n    if (isChineseMode) {\n      setMode('hand')\n    } else {\n      setMode(mode === 'en_cap' ? 'en' : 'en_cap')\n    }\n  }\n\n  function handleSwitchToNum() {\n    setMode('num')\n  }\n\n  function handleSwitchToSymbol() {\n    setMode('symbol')\n  }\n\n  const numbersRow = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']\n  const keyboardRows = [\n    ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],\n    ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],\n    ['z', 'x', 'c', 'v', 'b', 'n', 'm'],\n  ]\n\n  function handleDelete() {\n    if (mode === 'zh' && pinyin) {\n      setPinyin(pinyin.slice(0, -1))\n      return\n    }\n    handleSpecialKey('delete', true)\n  }\n\n  function handleSpace() {\n    if (mode === 'zh' && pinyin) {\n      candidateBarRef.current?.handleSelection(0)\n      return\n    }\n    handleSpecialKey(' ')\n  }\n\n  function handleEnter() {\n    if (mode === 'zh' && pinyin) {\n      handleSpecialKey(pinyin)\n      setPinyin('')\n      return\n    }\n    handleSpecialKey('enter', true)\n  }\n\n  function handleKeyPress(key: string) {\n    if (mode === 'zh') {\n      setPinyin(pinyin + key)\n      return\n    }\n    const outputKey = isUpperCase ? key.toUpperCase() : key\n    handleSpecialKey(outputKey)\n  }\n\n  function handleToggleLang() {\n    setMode(mode === 'zh' ? 'en' : 'zh')\n  }\n\n  const handwritingButtonText = useMemo(() => {\n    if (!enableHandwriting)\n      return '-'\n    return '手写'\n  }, [enableHandwriting])\n\n  const isHandwritingButtonDisabled = useMemo(() => {\n    return !enableHandwriting\n  }, [enableHandwriting])\n\n  function preventContextMenu(e: React.MouseEvent) {\n    e.preventDefault()\n  }\n\n  return (\n    <div className=\"zhk-base\">\n      <div className=\"zhk-base__row\">\n        {mode === 'zh'\n          ? (\n              <CandidateBar\n                ref={candidateBarRef}\n                currentPinyin={pinyin}\n                onInput={e => handleSpecialKey(e, false)}\n                onKey={onKey}\n                setCurrentPinyin={setPinyin}\n              />\n            )\n          : (\n              numbersRow.map(key => (\n                <button\n                  key={`number-${key}`}\n\n                  className=\"zhk-base__key zhk-base__key--letter\"\n                  onPointerDown={e => startRepeat(e, () => handleKeyPress(key))}\n                  onPointerUp={stopRepeat}\n                  onPointerLeave={stopRepeat}\n                  onPointerCancel={stopRepeat}\n                  onContextMenu={preventContextMenu}\n                >\n                  {key}\n                </button>\n              ))\n            )}\n      </div>\n\n      {keyboardRows.map((row, rowIndex) => (\n        <div key={`row-${row.join('')}`} className=\"zhk-base__row\">\n          {rowIndex === 2 && (\n            <button\n\n              className={`zhk-base__key zhk-base__key--function zhk-base__key--shift ${\n                !isChineseMode && isUpperCase ? 'zhk-base__key--active' : ''\n              } ${\n                isChineseMode && isHandwritingButtonDisabled ? 'zhk-base__key--disabled' : ''\n              }`}\n              disabled={isChineseMode && isHandwritingButtonDisabled}\n              onClick={handleShift}\n              onContextMenu={preventContextMenu}\n            >\n              {isChineseMode\n                ? handwritingButtonText\n                : <img src={keyboardCaps} className=\"zhk-base__key-icon\" alt=\"Shift\" />}\n            </button>\n          )}\n          {row.map(key => (\n            <button\n              key={key}\n\n              className=\"zhk-base__key zhk-base__key--letter\"\n              onPointerDown={e => startRepeat(e, () => handleKeyPress(key))}\n              onPointerUp={stopRepeat}\n              onPointerLeave={stopRepeat}\n              onPointerCancel={stopRepeat}\n              onContextMenu={preventContextMenu}\n            >\n              {showUpperCase ? key.toUpperCase() : key}\n            </button>\n          ))}\n          {rowIndex === 2 && (\n            <button\n\n              className=\"zhk-base__key zhk-base__key--function zhk-base__key--delete\"\n              onPointerDown={e => startRepeat(e, () => handleDelete())}\n              onPointerUp={stopRepeat}\n              onPointerLeave={stopRepeat}\n              onPointerCancel={stopRepeat}\n              onContextMenu={preventContextMenu}\n            >\n              <img src={keyboardBackspace} className=\"zhk-base__key-icon\" alt=\"Delete\" />\n            </button>\n          )}\n        </div>\n      ))}\n\n      <div className=\"zhk-base__row\">\n        <button className=\"zhk-base__key zhk-base__key--function\" onClick={handleSwitchToSymbol} onContextMenu={preventContextMenu}>\n          符\n        </button>\n        <button className=\"zhk-base__key zhk-base__key--function\" onClick={handleSwitchToNum} onContextMenu={preventContextMenu}>\n          123\n        </button>\n        <button\n          className=\"zhk-base__key\"\n          onPointerDown={e => startRepeat(e, () => handleSpecialKey(','))}\n          onPointerUp={stopRepeat}\n          onPointerLeave={stopRepeat}\n          onPointerCancel={stopRepeat}\n          onContextMenu={preventContextMenu}\n        >\n          ，\n        </button>\n        <button\n          className=\"zhk-base__key zhk-base__key--space\"\n          onPointerDown={e => startRepeat(e, () => handleSpace())}\n          onPointerUp={stopRepeat}\n          onPointerLeave={stopRepeat}\n          onPointerCancel={stopRepeat}\n          onContextMenu={preventContextMenu}\n        >\n          <img src={keyboardSpace} className=\"zhk-base__key-icon\" alt=\"Space\" />\n        </button>\n        <button\n          className=\"zhk-base__key\"\n          onPointerDown={e => startRepeat(e, () => handleSpecialKey('。'))}\n          onPointerUp={stopRepeat}\n          onPointerLeave={stopRepeat}\n          onPointerCancel={stopRepeat}\n          onContextMenu={preventContextMenu}\n        >\n          。\n        </button>\n        <button className=\"zhk-base__key zhk-base__key--function\" onClick={handleToggleLang} onContextMenu={preventContextMenu}>\n          <span className=\"zhk-base__toggle-main\">{mode === 'zh' ? '中' : '英'}</span>\n          <span className=\"zhk-base__toggle-sub\">\n            /\n            {mode === 'zh' ? '英' : '中'}\n          </span>\n        </button>\n        <button\n          className=\"zhk-base__key zhk-base__key--function\"\n          onPointerDown={e => startRepeat(e, () => handleEnter())}\n          onPointerUp={stopRepeat}\n          onPointerLeave={stopRepeat}\n          onPointerCancel={stopRepeat}\n          onContextMenu={preventContextMenu}\n        >\n          <img src={keyboardReturn} className=\"zhk-base__key-icon\" alt=\"Enter\" />\n        </button>\n      </div>\n    </div>\n  )\n}\n\nexport default KeyboardBase\n","import type { KeyEvent } from '../types'\nimport { getKeyboardConfig } from '@zh-keyboard/core'\nimport React from 'react'\nimport keyboardBackspace from '../assets/icons/keyboard-backspace.svg'\nimport keyboardReturn from '../assets/icons/keyboard-return.svg'\nimport keyboardSpace from '../assets/icons/keyboard-space.svg'\nimport { useKeyRepeater } from '../hooks/useKeyRepeater'\nimport '../styles/NumericKeyboard.scss'\n\ninterface NumericKeyboardProps {\n  onKey: (payload: KeyEvent) => void\n  onExit: () => void\n  keyboardRows?: string[][]\n}\n\nconst DEFAULT_KEYBOARD_ROWS = [\n  ['1', '2', '3'],\n  ['4', '5', '6'],\n  ['7', '8', '9'],\n  ['back', '0', 'space'],\n]\n\nconst NumericKeyboard: React.FC<NumericKeyboardProps> = ({\n  onKey,\n  onExit,\n  keyboardRows = getKeyboardConfig().numKeys || DEFAULT_KEYBOARD_ROWS,\n}) => {\n  const { startRepeat, stopRepeat } = useKeyRepeater()\n\n  const functionKeys = [\n    { key: 'delete', icon: keyboardBackspace, text: '', alt: 'Delete' },\n    { key: '.', icon: '', text: '.', alt: '.' },\n    { key: '@', icon: '', text: '@', alt: '@' },\n    { key: 'enter', icon: keyboardReturn, text: '', alt: 'Enter' },\n  ]\n\n  function handleKeyPress(key: string) {\n    onKey({ key })\n  }\n\n  function handleSpecialKey(key: string, isControl = true) {\n    onKey({ key, isControl })\n  }\n\n  function goBack() {\n    onExit()\n  }\n\n  function preventContextMenu(e: React.MouseEvent) {\n    e.preventDefault()\n  }\n\n  function onKeyDown(key: string, e: React.PointerEvent<Element>) {\n    if (key === 'back') {\n    // 返回按钮特殊处理，从onclick触发\n    } else {\n      if (key === 'space') {\n        key = ' '\n      }\n      if (key === 'delete' || key === 'enter') {\n        startRepeat(e, () => handleSpecialKey(key))\n      } else {\n        startRepeat(e, () => handleKeyPress(key))\n      }\n    }\n  }\n\n  const renderKeyContent = (key: string) => {\n    if (key === 'back')\n      return '返回'\n    if (key === 'space')\n      return <img src={keyboardSpace} className=\"zhk-base__key-icon\" alt=\"Space\" />\n    return key\n  }\n\n  return (\n    <div className=\"num-keyboard\">\n      <div className=\"num-keyboard__container\">\n        <div className=\"num-keyboard__left\">\n          <div className=\"num-keyboard__rows\">\n            {keyboardRows.map(row => (\n              <div key={`row-${row.join('')}`} className=\"num-keyboard__row\">\n                {row.map(key => (\n                  <button\n                    key={`key-${row.join('')}-${key}`}\n                    className={`num-keyboard__key ${\n                      key === 'back' ? 'num-keyboard__key--back' : ''\n                    } ${\n                      key === 'space' ? 'num-keyboard__key--space' : ''\n                    }`}\n                    onClick={() => key === 'back' && goBack()}\n                    onPointerDown={e => onKeyDown(key, e)}\n                    onPointerUp={stopRepeat}\n                    onPointerLeave={stopRepeat}\n                    onPointerCancel={stopRepeat}\n                    onContextMenu={preventContextMenu}\n                  >\n                    {renderKeyContent(key)}\n                  </button>\n                ))}\n              </div>\n            ))}\n          </div>\n        </div>\n\n        <div className=\"num-keyboard__right\">\n          {functionKeys.map(fKey => (\n            <button\n              key={`func-${fKey.key}`}\n              className=\"num-keyboard__key num-keyboard__key--function\"\n              onPointerDown={(e) => {\n                if (fKey.key === '.' || fKey.key === '@') {\n                  startRepeat(e, () => handleKeyPress(fKey.key))\n                  return\n                }\n                startRepeat(e, () => handleSpecialKey(fKey.key))\n              }}\n              onPointerUp={stopRepeat}\n              onPointerLeave={stopRepeat}\n              onPointerCancel={stopRepeat}\n              onContextMenu={preventContextMenu}\n            >\n              {fKey.icon\n                ? (\n                    <img src={fKey.icon} className=\"num-keyboard__key-icon\" alt={fKey.alt} />\n                  )\n                : (\n                    <span>{fKey.text}</span>\n                  )}\n            </button>\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default NumericKeyboard\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M18,20V10H6V20H18M18,8A2,2%200%200,1%2020,10V20A2,2%200%200,1%2018,22H6C4.89,22%204,21.1%204,20V10A2,2%200%200,1%206,8H15V6A3,3%200%200,0%2012,3A3,3%200%200,0%209,6H7A5,5%200%200,1%2012,1A5,5%200%200,1%2017,6V8H18M12,17A2,2%200%200,1%2010,15A2,2%200%200,1%2012,13A2,2%200%200,1%2014,15A2,2%200%200,1%2012,17Z'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,17C10.89,17%2010,16.1%2010,15C10,13.89%2010.89,13%2012,13A2,2%200%200,1%2014,15A2,2%200%200,1%2012,17M18,20V10H6V20H18M18,8A2,2%200%200,1%2020,10V20A2,2%200%200,1%2018,22H6C4.89,22%204,21.1%204,20V10C4,8.89%204.89,8%206,8H7V6A5,5%200%200,1%2012,1A5,5%200%200,1%2017,6V8H18M12,3A3,3%200%200,0%209,6V8H15V6A3,3%200%200,0%2012,3Z'%20/%3e%3c/svg%3e\"","import type { KeyEvent } from '../types'\nimport React, { useMemo, useState } from 'react'\nimport lockOpenIconUrl from '../assets/icons/lock-open-outline.svg'\nimport lockClosedIconUrl from '../assets/icons/lock-outline.svg'\nimport { useKeyRepeater } from '../hooks/useKeyRepeater'\nimport '../styles/SymbolKeyboard.scss'\n\ninterface SymbolKeyboardProps {\n  onKey: (payload: KeyEvent) => void\n  onExit: () => void\n}\n\nconst SymbolKeyboard: React.FC<SymbolKeyboardProps> = ({ onKey, onExit }) => {\n  const enSymbolStr = '!@#$%^&*(){}[]<>/\\\\|:;\"\\',.?+-=_~`€£¥₹©®™°'\n  const zhSymbolStr = '！＠＃￥％…＆＊（）｛｝［］＜＞／＼｜：；＂＇，。？＋－＝＿～·€£¥₹©®™°'\n  const [symbolType, setSymbolType] = useState('en')\n  const currentSymbolStr = useMemo(() => (symbolType === 'zh' ? zhSymbolStr : enSymbolStr), [symbolType])\n  const [isLocked, setIsLocked] = useState(false)\n\n  const { startRepeat, stopRepeat } = useKeyRepeater()\n\n  function handleKeyPress(key: string) {\n    onKey({ key })\n    if (!isLocked) {\n      onExit()\n    }\n  }\n\n  function goBack() {\n    onExit()\n  }\n\n  function toggleLock() {\n    setIsLocked(!isLocked)\n  }\n\n  function preventContextMenu(e: React.MouseEvent) {\n    e.preventDefault()\n  }\n\n  function onSymbolDown(char: string, e: React.PointerEvent) {\n    if (!isLocked) {\n      return\n    }\n    startRepeat(e, () => handleKeyPress(char))\n  }\n\n  return (\n    <div className=\"symbol-keyboard\">\n      <div className=\"symbol-keyboard__content\">\n        <div className=\"symbol-keyboard__functions\">\n          <div className=\"symbol-keyboard__lang-selector\">\n            <button\n              type=\"button\"\n              className={`symbol-keyboard__lang-btn ${\n                symbolType === 'zh' ? 'symbol-keyboard__lang-btn--active' : ''\n              }`}\n              onClick={() => setSymbolType('zh')}\n              onContextMenu={preventContextMenu}\n            >\n              中文\n            </button>\n            <button\n              className={`symbol-keyboard__lang-btn ${\n                symbolType === 'en' ? 'symbol-keyboard__lang-btn--active' : ''\n              }`}\n              onClick={() => setSymbolType('en')}\n              onContextMenu={preventContextMenu}\n            >\n              英文\n            </button>\n          </div>\n          <div className=\"symbol-keyboard__control-group\">\n            <button\n              className={`symbol-keyboard__key symbol-keyboard__key--function symbol-keyboard__key--lock ${\n                isLocked ? 'symbol-keyboard__key--locked' : ''\n              }`}\n              onClick={toggleLock}\n              onContextMenu={preventContextMenu}\n            >\n              {!isLocked\n                ? (\n                    <img src={lockOpenIconUrl} alt=\"Lock open\" />\n                  )\n                : (\n                    <img src={lockClosedIconUrl} alt=\"Lock closed\" />\n                  )}\n            </button>\n            <button\n              className=\"symbol-keyboard__key symbol-keyboard__key--function symbol-keyboard__key--back\"\n              onClick={goBack}\n              onContextMenu={preventContextMenu}\n            >\n              返回\n            </button>\n          </div>\n        </div>\n\n        <div className=\"symbol-keyboard__symbols-container\">\n          <div className=\"symbol-keyboard__symbols-grid\">\n            {currentSymbolStr.split('').map(char => (\n              <button\n                key={`key-${char}`}\n                className=\"symbol-keyboard__key\"\n                onClick={() => !isLocked && handleKeyPress(char)}\n                onPointerDown={e => onSymbolDown(char, e)}\n                onPointerUp={stopRepeat}\n                onPointerLeave={stopRepeat}\n                onPointerCancel={stopRepeat}\n                onContextMenu={preventContextMenu}\n              >\n                {char}\n              </button>\n            ))}\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default SymbolKeyboard\n","import type { KeyboardPosition } from '@zh-keyboard/core'\nimport type { KeyBoardMode, KeyEvent } from '../types'\nimport { useActiveElement, useElementSize, useEventListener } from '@reactuses/core'\nimport { calculateKeyboardPosition, delToInputElement, getKeyboardConfig, isInputElement, writeToInputElement } from '@zh-keyboard/core'\nimport classNames from 'classnames'\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport { useHandwritingRecognizer } from '../utils/useHandwritingRecognizer'\nimport HandwritingInput from './HandwritingInput'\nimport KeyboardBase from './KeyboardBase'\nimport NumericKeyboard from './NumericKeyboard'\nimport SymbolKeyboard from './SymbolKeyboard'\nimport '../styles/ZhKeyboard.scss'\n\ninterface ZhKeyboardProps {\n  defaultMode?: KeyBoardMode\n  enableHandwriting?: boolean\n  position?: 'static' | 'float' | 'bottom'\n  floatMarginTop?: number\n  disableWhenNoFocus?: boolean\n  requireInputmode?: boolean\n  onKey?: (payload: KeyEvent) => void\n  className?: string\n  style?: React.CSSProperties\n  numKeys?: string[][]\n}\n\nconst ZHKeyboardContent: React.FC<ZhKeyboardProps> = (props) => {\n  const {\n    defaultMode = getKeyboardConfig().defaultMode ?? 'en',\n    enableHandwriting = getKeyboardConfig().enableHandwriting ?? false,\n    position = getKeyboardConfig().position ?? 'static',\n    floatMarginTop = getKeyboardConfig().floatMarginTop ?? 10,\n    disableWhenNoFocus = getKeyboardConfig().disableWhenNoFocus ?? true,\n    requireInputmode = getKeyboardConfig().requireInputmode ?? false,\n    onKey,\n    className,\n    style,\n    numKeys,\n  } = props\n\n  const [mode, setMode] = useState<KeyBoardMode>(defaultMode)\n  const previousModeRef = useRef<KeyBoardMode>(defaultMode)\n  const [keyboardPosition, setKeyboardPosition] = useState<KeyboardPosition | null>(null)\n  const keyboardRef = useRef<HTMLDivElement>(null)\n  const activeElement = useActiveElement<HTMLInputElement>()\n\n  const [_, keyboardHeight] = useElementSize(keyboardRef)\n\n  const { recognizerInitialized, recognizerProgress } = useHandwritingRecognizer(enableHandwriting)\n\n  useEffect(() => {\n    // 仅在基础输入模式下更新 previousModeRef，以便 goBack 正确返回\n    if (mode === 'en' || mode === 'en_cap' || mode === 'zh') {\n      previousModeRef.current = mode\n    }\n  }, [mode])\n\n  const [isPositioned, setIsPositioned] = useState(false)\n  const prevActiveElementRef = useRef<HTMLInputElement | null>(null)\n\n  // 位置更新函数\n  const updatePosition = useCallback(() => {\n    if (!keyboardHeight)\n      return\n\n    const newPosition = calculateKeyboardPosition(\n      activeElement,\n      keyboardRef.current,\n      position,\n      floatMarginTop,\n    )\n    setKeyboardPosition(newPosition)\n  }, [activeElement, position, keyboardHeight, floatMarginTop])\n\n  const showKeyboard = useMemo(() => {\n    if (position === 'static')\n      return true\n    if (!isInputElement(activeElement))\n      return false\n    if (requireInputmode && !activeElement?.dataset.inputmode)\n      return false\n    return true\n  }, [activeElement, position, requireInputmode])\n\n  // 当showKeyboard或activeElement变化时更新位置\n  useLayoutEffect(() => {\n    // 检查activeElement是否真的变化了\n    const activeElementChanged = prevActiveElementRef.current !== activeElement\n\n    if (showKeyboard && keyboardHeight && activeElementChanged) {\n      prevActiveElementRef.current = activeElement\n      updatePosition()\n    }\n  }, [showKeyboard, activeElement, updatePosition, keyboardHeight])\n\n  // 键盘首次挂载时的初始化\n  useLayoutEffect(() => {\n    if (keyboardHeight && !isPositioned) {\n      updatePosition()\n      const timer = setTimeout(() => {\n        setIsPositioned(true)\n      }, 0)\n      return () => clearTimeout(timer)\n    }\n  }, [keyboardHeight, isPositioned, updatePosition])\n\n  useLayoutEffect(() => {\n    if (activeElement && isInputElement(activeElement)) {\n      const inputmode = activeElement.dataset.inputmode as KeyBoardMode | undefined\n      setMode((prevMode) => {\n        return inputmode || prevMode\n      })\n    }\n  }, [activeElement])\n\n  const isKeyboardDisabled = useMemo(() => {\n    if (disableWhenNoFocus === false)\n      return false\n    return !isInputElement(activeElement)\n  }, [disableWhenNoFocus, activeElement])\n\n  // 使用防抖来处理scroll和resize事件，避免频繁更新\n  const debouncedUpdatePosition = useMemo(() => {\n    let timer: ReturnType<typeof setTimeout>\n    return () => {\n      clearTimeout(timer)\n      timer = setTimeout(updatePosition, 100)\n    }\n  }, [updatePosition])\n\n  useEventListener('scroll', debouncedUpdatePosition, window, { passive: true })\n  useEventListener('resize', debouncedUpdatePosition, window, { passive: true })\n\n  const handleKeyEvent = useCallback((payload: KeyEvent) => {\n    if (payload.isControl) {\n      switch (payload.key) {\n        case 'delete':\n          if (isInputElement(activeElement))\n            delToInputElement(activeElement)\n          break\n        default:\n          break\n      }\n    } else {\n      if (activeElement && isInputElement(activeElement))\n        writeToInputElement(activeElement, payload.key)\n    }\n    if (onKey) {\n      onKey(payload)\n    }\n  }, [onKey, activeElement])\n\n  const goBack = useCallback(() => {\n    if (mode === 'hand') {\n      previousModeRef.current = 'zh'\n    }\n    if (['num', 'symbol'].includes(previousModeRef.current)) {\n      previousModeRef.current = defaultMode\n    }\n    setMode(previousModeRef.current)\n  }, [defaultMode, mode])\n\n  return (\n    <div\n      ref={keyboardRef}\n      className={classNames('zhk', {\n        'zhk--floating': position === 'float',\n        'zhk--bottom': position === 'bottom',\n        'zhk--disabled': isKeyboardDisabled,\n      }, className)}\n      style={{\n        '--keyboard-height': `${keyboardHeight}px`,\n        ...keyboardPosition,\n        ...style,\n        'display': !showKeyboard ? 'none' : undefined,\n        'opacity': isPositioned ? 1 : 0,\n      } as React.CSSProperties}\n      onMouseDown={e => e.preventDefault()}\n    >\n      {isKeyboardDisabled || !showKeyboard || !keyboardHeight\n        ? (\n            <div className={classNames('zhk__disabled-overlay')}>\n              <span>请选择输入框以启用键盘</span>\n            </div>\n          )\n        : (\n            <>\n              {mode === 'hand' && (\n                <HandwritingInput\n                  recognizerInitialized={recognizerInitialized}\n                  recognizerProgress={recognizerProgress}\n                  onKey={handleKeyEvent}\n                  onExit={goBack}\n                />\n              )}\n              {mode === 'num' && (\n                <NumericKeyboard\n                  onKey={handleKeyEvent}\n                  onExit={goBack}\n                  keyboardRows={numKeys}\n                />\n              )}\n              {mode === 'symbol' && <SymbolKeyboard onKey={handleKeyEvent} onExit={goBack} />}\n              {(mode === 'en' || mode === 'en_cap' || mode === 'zh') && (\n                <KeyboardBase\n                  mode={mode}\n                  setMode={setMode}\n                  enableHandwriting={enableHandwriting}\n                  onKey={handleKeyEvent}\n                />\n              )}\n            </>\n          )}\n    </div>\n  )\n}\n\nconst ZhKeyboard: React.FC<ZhKeyboardProps> = (props) => {\n  const { position = 'static' } = props\n\n  const keyboardContent = <ZHKeyboardContent {...props} />\n  return position === 'static' ? keyboardContent : ReactDOM.createPortal(keyboardContent, document.body)\n}\n\nexport default ZhKeyboard\n","import ZhKeyboard from './components/ZhKeyboard'\n\nexport * from '@zh-keyboard/core'\n\nexport { ZhKeyboard }\nexport default ZhKeyboard\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,100,101,102],"mappings":"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"}