@tdh-keyboard/react 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tdh-keyboard-react.js","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"],"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/assets/icons/keyboard-collapse.svg","../src/assets/icons/keyboard-mode-keyboard.svg","../src/assets/icons/keyboard-mode-touch.svg","../src/components/KeyboardToolbar.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/TdhKeyboard.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 '@tdh-keyboard/core'\nimport { useEffect, useRef, useState } from 'react'\n\nexport function useHandwritingRecognizer(enableHandwriting = false) {\n const [recognizerInitialized, setRecognizerInitialized] = useState(false)\n const [recognizerProgress, setRecognizerProgress] = useState(0)\n const initializedRef = useRef(false)\n\n useEffect(() => {\n initializedRef.current = recognizerInitialized\n }, [recognizerInitialized])\n\n useEffect(() => {\n if (!enableHandwriting) {\n setRecognizerInitialized(false)\n setRecognizerProgress(0)\n return\n }\n\n let disposed = false\n\n async function initializeRecognizer() {\n const recognizer = getHandwritingRecognizer()\n if (recognizer) {\n try {\n const initialized = await recognizer.initialize({\n onProgress: (progress) => {\n if (!disposed) {\n setRecognizerProgress(progress)\n }\n },\n })\n if (!disposed) {\n setRecognizerInitialized(initialized)\n }\n } catch (error) {\n console.error('初始化手写识别服务失败:', error)\n if (!disposed) {\n setRecognizerInitialized(false)\n }\n }\n } else {\n console.warn('未注册手写识别服务')\n if (!disposed) {\n setRecognizerInitialized(false)\n }\n }\n }\n\n initializeRecognizer()\n\n return () => {\n disposed = true\n const recognizer = getHandwritingRecognizer()\n if (recognizer && initializedRef.current) {\n recognizer.close().catch((error) => {\n console.error('关闭手写识别服务失败:', error)\n })\n }\n }\n }, [enableHandwriting])\n\n return {\n recognizerInitialized,\n recognizerProgress,\n }\n}\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 '@tdh-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=\"tdhk-candidate-list\">\n {candidates.map((candidate, index) => (\n <button\n key={`candidate-${index}`}\n className=\"tdhk-candidate-list__item\"\n onClick={() => onSelect(index)}\n >\n {candidate}\n </button>\n ))}\n </div>\n )\n}\n\nexport default CandidateList\n","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M7%2011L14%2018L21%2011'%20stroke='%235E6773'%20stroke-width='2.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='4.5'%20y='5.5'%20width='19'%20height='17'%20rx='3.5'%20stroke='%235E6773'%20stroke-width='2'/%3e%3cpath%20d='M8.5%2010H10'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M12%2010H13.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M15.5%2010H17'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M19%2010H20.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M8%2014H10.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M12%2014H14.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M16%2014H18.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3cpath%20d='M10%2018.5H18'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='6.5'%20y='3.5'%20width='15'%20height='21'%20rx='3.5'%20stroke='%235E6773'%20stroke-width='2'/%3e%3cpath%20d='M14%207H14.01'%20stroke='%235E6773'%20stroke-width='2.4'%20stroke-linecap='round'/%3e%3cpath%20d='M17.5%2016.5V14C17.5%2012.6193%2016.3807%2011.5%2015%2011.5C13.6193%2011.5%2012.5%2012.6193%2012.5%2014V19L11.25%2017.75C10.4697%2016.9697%209.20435%2016.9697%208.42401%2017.75C7.64366%2018.5303%207.64366%2019.7956%208.42401%2020.576L11.6766%2023.8284C12.0516%2024.2034%2012.5603%2024.4141%2013.0909%2024.4141H16C18.4853%2024.4141%2020.5%2022.3994%2020.5%2019.9141V16.5'%20stroke='%235E6773'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\"","import React, { useMemo } from 'react'\nimport keyboardCollapseIconUrl from '../assets/icons/keyboard-collapse.svg'\nimport keyboardIconUrl from '../assets/icons/keyboard-mode-keyboard.svg'\nimport touchIconUrl from '../assets/icons/keyboard-mode-touch.svg'\nimport '../styles/KeyboardToolbar.scss'\n\ninterface KeyboardToolbarProps {\n enableHandwriting?: boolean\n isHandwritingMode?: boolean\n onToggleKeyboard: () => void\n onCollapse: () => void\n}\n\nconst KeyboardToolbar: React.FC<KeyboardToolbarProps> = ({\n enableHandwriting = false,\n isHandwritingMode = false,\n onToggleKeyboard,\n onCollapse,\n}) => {\n const switchAriaLabel = useMemo(() => {\n return isHandwritingMode ? '切换到输入键盘' : '切换到手写键盘'\n }, [isHandwritingMode])\n\n const switchIconUrl = useMemo(() => {\n return isHandwritingMode ? keyboardIconUrl : touchIconUrl\n }, [isHandwritingMode])\n\n function preventContextMenu(e: React.MouseEvent) {\n e.preventDefault()\n }\n\n return (\n <div className=\"tdhk-toolbar\">\n <button\n className={`tdhk-toolbar__button ${!enableHandwriting ? 'tdhk-toolbar__button--disabled' : ''}`}\n type=\"button\"\n aria-label={switchAriaLabel}\n disabled={!enableHandwriting}\n onClick={onToggleKeyboard}\n onContextMenu={preventContextMenu}\n >\n <img src={switchIconUrl} className=\"tdhk-toolbar__icon\" alt={switchAriaLabel} />\n </button>\n <div className=\"tdhk-toolbar__spacer\" />\n <div className=\"tdhk-toolbar__divider\" />\n <button\n className=\"tdhk-toolbar__button tdhk-toolbar__button--collapse\"\n type=\"button\"\n aria-label=\"收起键盘\"\n onClick={onCollapse}\n onContextMenu={preventContextMenu}\n >\n <img src={keyboardCollapseIconUrl} className=\"tdhk-toolbar__icon\" alt=\"收起键盘\" />\n </button>\n </div>\n )\n}\n\nexport default KeyboardToolbar\n","import type { KeyEvent } from '../types'\nimport { useElementSize } from '@reactuses/core'\nimport { CanvasDrawer, getHandwritingRecognizer } from '@tdh-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 KeyboardToolbar from './KeyboardToolbar'\nimport '../styles/HandwritingInput.scss'\n\ninterface HandwritingInputProps {\n recognizerInitialized: boolean\n recognizerProgress: number\n onKey: (payload: KeyEvent) => void\n onCollapse: () => void\n onSwitchToSymbol: () => void\n onToggleKeyboard: () => void\n}\n\nconst HandwritingInput: React.FC<HandwritingInputProps> = ({\n recognizerInitialized,\n recognizerProgress,\n onKey,\n onCollapse,\n onSwitchToSymbol,\n onToggleKeyboard,\n}) => {\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 <div className=\"handwriting-input__header\">\n {candidates.length > 0\n ? (\n <div className=\"handwriting-input__candidates\">\n <CandidateList candidates={candidates} onSelect={handleSelection} />\n </div>\n )\n : (\n <KeyboardToolbar\n enableHandwriting\n isHandwritingMode\n onToggleKeyboard={onToggleKeyboard}\n onCollapse={onCollapse}\n />\n )}\n </div>\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 onClick={onSwitchToSymbol}\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 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: '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=\"tdhk-selection\">\n <div className=\"tdhk-selection__list\">\n {candidates.map((candidate, index) => (\n <div key={index} className={`tdhk-selection__text tdhk-selection__text--span-${getNumberCount(candidate)}`} onClick={() => onSelect(index)}>\n {candidate}\n </div>\n ))}\n </div>\n <div className=\"tdhk-selection__func\">\n <button className=\"tdhk-selection__func-btn\" onClick={onClose}>\n 返回\n </button>\n </div>\n </div>\n )\n}\n\nexport default CandidateSelection\n","import type { PinyinEngine, PinyinState } from '@tdh-keyboard/core'\nimport type { KeyEvent } from '../types'\nimport { getPinyinEngine } from '@tdh-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 [engineReady, setEngineReady] = useState(false)\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 // 使用外部注册的引擎,不持有所有权\n engineRef.current = engine\n setEngineReady(true)\n } else {\n throw new Error('未找到拼音引擎实例,请确保已正确注册引擎')\n }\n\n return () => {\n engineRef.current?.processInput('')?.catch(() => {})\n setEngineReady(false)\n }\n }, [])\n\n // 处理拼音变化\n useLayoutEffect(() => {\n const eng = engineRef.current\n if (!eng || !engineReady)\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, engineReady])\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 return (\n <div className=\"tdhk-candidate\">\n <div className=\"tdhk-candidate__container\">\n {showedPinyin && (\n <div className=\"tdhk-candidate__pinyin\">\n {showedPinyin}\n </div>\n )}\n <div className=\"tdhk-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=\"tdhk-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 KeyboardToolbar from './KeyboardToolbar'\nimport '../styles/KeyboardBase.scss'\n\ninterface KeyboardBaseProps {\n enableHandwriting?: boolean\n capsReturnToChinese: boolean\n mode: KeyBoardMode\n onKey: (payload: KeyEvent) => void\n onCollapse: () => void\n onToggleKeyboard: () => void\n setCapsReturnToChinese: (value: boolean) => void\n setMode: (mode: KeyBoardMode) => void\n}\n\nconst KeyboardBase: React.FC<KeyboardBaseProps> = ({\n enableHandwriting,\n capsReturnToChinese,\n mode,\n onKey,\n onCollapse,\n onToggleKeyboard,\n setCapsReturnToChinese,\n setMode,\n}) => {\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 setPinyin('')\n setCapsReturnToChinese(true)\n setMode('en_cap')\n } else if (isUpperCase && capsReturnToChinese) {\n setCapsReturnToChinese(false)\n setMode('zh')\n } else {\n setCapsReturnToChinese(false)\n setMode(isUpperCase ? 'en' : 'en_cap')\n }\n }\n\n function handleSwitchToNum() {\n setMode('num')\n }\n\n function handleSwitchToSymbol() {\n setMode('symbol')\n }\n\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 setCapsReturnToChinese(false)\n setMode(mode === 'zh' ? 'en' : 'zh')\n }\n\n function preventContextMenu(e: React.MouseEvent) {\n e.preventDefault()\n }\n\n const showCandidateBar = useMemo(() => isChineseMode && pinyin.length > 0, [isChineseMode, pinyin.length])\n\n return (\n <div className=\"tdhk-base\">\n <div className=\"tdhk-base__row tdhk-base__row--header\">\n {showCandidateBar\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 <KeyboardToolbar\n enableHandwriting={enableHandwriting}\n onToggleKeyboard={onToggleKeyboard}\n onCollapse={onCollapse}\n />\n )}\n </div>\n\n {keyboardRows.map((row, rowIndex) => (\n <div key={`row-${row.join('')}`} className=\"tdhk-base__row\">\n {rowIndex === 2 && (\n <button\n className={`tdhk-base__key tdhk-base__key--function tdhk-base__key--shift ${\n isUpperCase ? 'tdhk-base__key--active' : ''\n }`}\n onClick={handleShift}\n onContextMenu={preventContextMenu}\n >\n <img src={keyboardCaps} className=\"tdhk-base__key-icon\" alt=\"Shift\" />\n </button>\n )}\n {row.map(key => (\n <button\n key={key}\n className=\"tdhk-base__key tdhk-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 className=\"tdhk-base__key tdhk-base__key--function tdhk-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=\"tdhk-base__key-icon\" alt=\"Delete\" />\n </button>\n )}\n </div>\n ))}\n\n <div className=\"tdhk-base__row\">\n <button className=\"tdhk-base__key tdhk-base__key--function\" onClick={handleSwitchToSymbol} onContextMenu={preventContextMenu}>\n 符\n </button>\n <button className=\"tdhk-base__key tdhk-base__key--function\" onClick={handleSwitchToNum} onContextMenu={preventContextMenu}>\n 123\n </button>\n <button\n className=\"tdhk-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=\"tdhk-base__key tdhk-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=\"tdhk-base__key-icon\" alt=\"Space\" />\n </button>\n <button\n className=\"tdhk-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=\"tdhk-base__key tdhk-base__key--function\" onClick={handleToggleLang} onContextMenu={preventContextMenu}>\n <span className=\"tdhk-base__toggle-main\">{mode === 'zh' ? '中' : '英'}</span>\n <span className=\"tdhk-base__toggle-sub\">\n /\n {mode === 'zh' ? '英' : '中'}\n </span>\n </button>\n <button\n className=\"tdhk-base__key tdhk-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=\"tdhk-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 '@tdh-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=\"tdhk-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 '@tdh-keyboard/core'\nimport type { TextInputElement } from '@tdh-keyboard/core'\nimport type { KeyBoardMode, KeyEvent, KeyboardInstance } from '../types'\nimport { useActiveElement, useElementSize, useEventListener } from '@reactuses/core'\nimport { calculateKeyboardPosition, delToInputElement, getKeyboardConfig, isInputElement, writeToInputElement } from '@tdh-keyboard/core'\nimport classNames from 'classnames'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, 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/TdhKeyboard.scss'\n\nexport interface TdhKeyboardProps {\n defaultMode?: KeyBoardMode\n enableHandwriting?: boolean\n position?: 'static' | 'float' | 'bottom'\n floatMarginTop?: number\n disableWhenNoFocus?: boolean\n manual?: boolean\n onKey?: (payload: KeyEvent) => void\n className?: string\n style?: React.CSSProperties\n numKeys?: string[][]\n}\n\ntype InputKeyboardMode = Extract<KeyBoardMode, 'zh' | 'en' | 'en_cap'>\n\nfunction isInputKeyboardMode(mode: KeyBoardMode): mode is InputKeyboardMode {\n return mode === 'zh' || mode === 'en' || mode === 'en_cap'\n}\n\nfunction getInitialInputMode(mode: KeyBoardMode): InputKeyboardMode {\n if (isInputKeyboardMode(mode)) {\n return mode\n }\n return 'zh'\n}\n\nconst TdhKeyboardContent = forwardRef<KeyboardInstance, TdhKeyboardProps>((props, ref) => {\n const {\n defaultMode = getKeyboardConfig().defaultMode ?? 'en',\n enableHandwriting = getKeyboardConfig().enableHandwriting ?? false,\n position = getKeyboardConfig().position ?? 'static',\n floatMarginTop = getKeyboardConfig().floatMarginTop ?? 0,\n disableWhenNoFocus = getKeyboardConfig().disableWhenNoFocus ?? true,\n manual = getKeyboardConfig().manual ?? false,\n onKey,\n className,\n style,\n numKeys,\n } = props\n\n const [mode, setMode] = useState<KeyBoardMode>(defaultMode)\n const [isCollapsed, setIsCollapsed] = useState(false)\n const [capsReturnToChinese, setCapsReturnToChinese] = useState(false)\n const [symbolReturnToHandwriting, setSymbolReturnToHandwriting] = useState(false)\n const lastInputModeRef = useRef<InputKeyboardMode>(getInitialInputMode(defaultMode))\n const [keyboardPosition, setKeyboardPosition] = useState<KeyboardPosition | null>(null)\n const keyboardRef = useRef<HTMLDivElement>(null)\n const activeElement = useActiveElement<HTMLInputElement | HTMLTextAreaElement>()\n const [manualInputElement, setManualInputElement] = useState<TextInputElement | null>(null)\n const [isOpened, setIsOpened] = useState(!manual)\n const [isDestroyed, setIsDestroyed] = useState(false)\n const inputElement = useMemo(() => {\n if (manual) {\n return manualInputElement\n }\n if (activeElement && isInputElement(activeElement)) {\n return activeElement\n }\n return null\n }, [activeElement, manual, manualInputElement])\n\n const [_, keyboardHeight] = useElementSize(keyboardRef)\n\n const { recognizerInitialized, recognizerProgress } = useHandwritingRecognizer(enableHandwriting)\n\n useEffect(() => {\n if (isInputKeyboardMode(mode)) {\n lastInputModeRef.current = mode\n }\n }, [mode])\n\n const [isPositioned, setIsPositioned] = useState(false)\n const prevActiveElementRef = useRef<TextInputElement | null>(null)\n const prevObservedInputRef = useRef<TextInputElement | null>(null)\n\n useEffect(() => {\n if (!manual && !isDestroyed && inputElement && inputElement !== prevObservedInputRef.current) {\n setIsOpened(true)\n }\n prevObservedInputRef.current = inputElement\n }, [inputElement, isDestroyed, manual])\n\n // 位置更新函数\n const updatePosition = useCallback(() => {\n if (!keyboardHeight)\n return\n\n const newPosition = calculateKeyboardPosition(\n inputElement,\n keyboardRef.current,\n position,\n floatMarginTop,\n )\n setKeyboardPosition(newPosition)\n }, [floatMarginTop, inputElement, keyboardHeight, position])\n\n const showKeyboard = useMemo(() => {\n if (isDestroyed) {\n return false\n }\n if (!isOpened) {\n return false\n }\n if (isCollapsed && !inputElement)\n return false\n\n return manual || position === 'static' || !!inputElement\n }, [inputElement, isCollapsed, isDestroyed, isOpened, manual, position])\n\n // 当showKeyboard或activeElement变化时更新位置\n useLayoutEffect(() => {\n // 检查activeElement是否真的变化了\n const activeElementChanged = prevActiveElementRef.current !== inputElement\n\n if (showKeyboard && keyboardHeight && activeElementChanged) {\n prevActiveElementRef.current = inputElement\n updatePosition()\n }\n }, [showKeyboard, inputElement, 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 (!isOpened)\n return\n\n if (inputElement) {\n setIsCollapsed(false)\n const inputmode = inputElement.dataset.inputmode as KeyBoardMode | undefined\n setMode((prevMode) => {\n if (!inputmode)\n return prevMode\n\n setCapsReturnToChinese(false)\n setSymbolReturnToHandwriting(false)\n if (isInputKeyboardMode(inputmode)) {\n lastInputModeRef.current = inputmode\n } else if (inputmode === 'hand') {\n lastInputModeRef.current = 'zh'\n }\n return inputmode\n })\n }\n }, [inputElement, isOpened])\n\n const isKeyboardDisabled = useMemo(() => {\n if (manual) {\n return !manualInputElement\n }\n if (disableWhenNoFocus === false)\n return false\n return !inputElement\n }, [disableWhenNoFocus, inputElement, manual, manualInputElement])\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 (inputElement)\n delToInputElement(inputElement)\n break\n case 'more':\n break\n default:\n break\n }\n } else {\n if (inputElement)\n writeToInputElement(inputElement, payload.key)\n }\n if (onKey) {\n onKey(payload)\n }\n }, [inputElement, onKey])\n\n const goBack = useCallback(() => {\n if (mode === 'symbol' && symbolReturnToHandwriting) {\n setSymbolReturnToHandwriting(false)\n setMode('hand')\n return\n }\n\n setSymbolReturnToHandwriting(false)\n setMode(lastInputModeRef.current)\n }, [mode, symbolReturnToHandwriting])\n\n const handleToggleKeyboard = useCallback(() => {\n if (!enableHandwriting)\n return\n\n if (mode === 'hand') {\n setMode(lastInputModeRef.current)\n return\n }\n\n if (isInputKeyboardMode(mode)) {\n lastInputModeRef.current = mode\n setMode('hand')\n }\n }, [enableHandwriting, mode])\n\n const handleCollapse = useCallback(() => {\n close()\n inputElement?.blur()\n }, [inputElement])\n\n const handleSwitchToSymbolFromHandwriting = useCallback(() => {\n setSymbolReturnToHandwriting(true)\n setMode('symbol')\n }, [])\n\n const open = useCallback((target?: TextInputElement | null) => {\n setIsDestroyed(false)\n if (target) {\n setManualInputElement(target)\n target.focus()\n } else if (activeElement && isInputElement(activeElement)) {\n setManualInputElement(activeElement)\n }\n setIsCollapsed(false)\n setIsOpened(true)\n updatePosition()\n }, [activeElement, updatePosition])\n\n const close = useCallback(() => {\n setIsCollapsed(true)\n setIsOpened(false)\n }, [])\n\n const destroy = useCallback(() => {\n setIsCollapsed(true)\n setIsOpened(false)\n setManualInputElement(null)\n setKeyboardPosition(null)\n setIsDestroyed(true)\n }, [])\n\n useEffect(() => {\n if (!manual) {\n setIsOpened(true)\n setManualInputElement(null)\n setIsDestroyed(false)\n return\n }\n setIsOpened(false)\n setManualInputElement(null)\n }, [manual])\n\n useImperativeHandle(ref, () => ({\n open,\n close,\n destroy,\n }), [close, destroy, open])\n\n return (\n <div\n ref={keyboardRef}\n className={classNames('tdhk', {\n 'tdhk--floating': position === 'float',\n 'tdhk--bottom': position === 'bottom',\n 'tdhk--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('tdhk__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 onToggleKeyboard={handleToggleKeyboard}\n onSwitchToSymbol={handleSwitchToSymbolFromHandwriting}\n onCollapse={handleCollapse}\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 capsReturnToChinese={capsReturnToChinese}\n mode={mode}\n setMode={setMode}\n setCapsReturnToChinese={setCapsReturnToChinese}\n enableHandwriting={enableHandwriting}\n onKey={handleKeyEvent}\n onToggleKeyboard={handleToggleKeyboard}\n onCollapse={handleCollapse}\n />\n )}\n </>\n )}\n </div>\n )\n})\n\nconst TdhKeyboard = forwardRef<KeyboardInstance, TdhKeyboardProps>((props, ref) => {\n const { position = 'static' } = props\n\n const keyboardContent = <TdhKeyboardContent {...props} ref={ref} />\n return position === 'static' ? keyboardContent : ReactDOM.createPortal(keyboardContent, document.body)\n})\n\nexport default TdhKeyboard\n","import TdhKeyboard from './components/TdhKeyboard'\n\nexport * from '@tdh-keyboard/core'\nexport type * from './types'\n\nexport { TdhKeyboard }\nexport default TdhKeyboard\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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"}