@lowentry/utils 1.25.3 → 2.0.2

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.
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["src/LeTypes.js","src/LeUtils.js","src/classes/EventEmitter.js","src/classes/LinkedList.js","src/classes/SerializableMap.js","src/classes/TreeSet.js"],"sourcesContent":["const REGEX_ALL_NON_FLOAT_CHARACTERS = /[^0-9.\\-]/g;\n\n\n/**\n * Returns true if the value is set (not undefined and not null).\n *\n * @param {*} value\n * @returns {boolean}\n */\nexport const ISSET = (value) => (typeof value !== 'undefined') && (value !== null);\n\n\n/**\n * Returns true if the value is an array.\n *\n * @param {*} value\n * @returns {boolean}\n */\nexport const IS_ARRAY = (value) => Array.isArray(value);\n\n/**\n * Ensures the given value is an array (returns the value wrapped in an array if it's not).\n *\n * @param {*} value\n * @returns {*[]}\n */\nexport const ARRAY = (value) => IS_ARRAY(value) ? value : ((typeof value !== 'undefined') ? [value] : []);\n\n\n/**\n * Returns true if the value is an object.\n *\n * @param {*} value\n * @returns {boolean}\n */\nexport const IS_OBJECT = (value) => (typeof value === 'object') && (value !== null) && !Array.isArray(value);\n\n/**\n * Ensures the given value is an object (returns an empty object if it's not).\n *\n * @param value\n * @returns {Object}\n */\nexport const OBJECT = (value) => IS_OBJECT(value) ? value : {};\n\n\n/**\n * Ensures the given value is a string (casts it to a string if it's not, null and undefined will return an empty string).\n *\n * @param {*} value\n * @returns {string}\n */\nexport const STRING = (value) => ISSET(value) ? ('' + value) : '';\n\n/**\n * Returns the first non-null non-undefined value as a string.\n *\n * @param {*} values\n * @returns {string}\n */\nexport const STRING_ANY = (...values) =>\n{\n\tfor(let value of values)\n\t{\n\t\tif(ISSET(value))\n\t\t{\n\t\t\treturn '' + value;\n\t\t}\n\t}\n\treturn '';\n};\n\n\n/**\n * Ensures the given value is a boolean.\n *\n * This will work differently than !!value, as it will try to figure out the most logical boolean value from the given value.\n *\n * @param {*} value\n * @returns {boolean}\n */\nexport const BOOL = (value) =>\n{\n\treturn BOOL_ANY(value);\n};\n\n/**\n * Returns the first non-null non-undefined boolean-castable value as a boolean.\n *\n * @param {*} values\n * @returns {boolean}\n */\nexport const BOOL_ANY = (...values) =>\n{\n\tfor(let value of values)\n\t{\n\t\tif(!ISSET(value))\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\tif(typeof value === 'boolean')\n\t\t{\n\t\t\treturn value;\n\t\t}\n\t\tif(typeof value === 'number')\n\t\t{\n\t\t\tif(!isNaN(value))\n\t\t\t{\n\t\t\t\treturn (value !== 0);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tif(typeof value === 'string')\n\t\t{\n\t\t\tvalue = value.toLowerCase().trim();\n\t\t\tif((value === '') || (value === 'false') || (value === 'no') || (value === 'off') || (value === '0'))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif((value === 'true') || (value === 'yes') || (value === 'on') || (value === '1'))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst float = +value;\n\t\t\tif(!isNaN(float))\n\t\t\t{\n\t\t\t\treturn (float !== 0);\n\t\t\t}\n\t\t\t// unrecognized string, let's try the next value, else we return false (after the loop)\n\t\t}\n\t\tif(IS_ARRAY(value) || IS_OBJECT(value))\n\t\t{\n\t\t\treturn !!value;\n\t\t}\n\t\t// unrecognized type, let's try the next value, else we return false (after the loop)\n\t}\n\treturn false;\n};\n\n\n/**\n * Ensures the given value is an integer (attempts to cast it to an integer if it's not, null and undefined will return 0).\n *\n * @param {*} value\n * @returns {number}\n */\nexport const INT = (value) => Math.round(FLOAT(value));\n\n/**\n * Returns the first non-null non-undefined int-castable value as an integer.\n *\n * @param {*} values\n * @returns {number}\n */\nexport const INT_ANY = (...values) => Math.round(FLOAT_ANY(...values));\n\n\n/**\n * Ensures the given value is a float (attempts to cast it to a float if it's not, null and undefined will return 0).\n *\n * @param {*} value\n * @returns {number}\n */\nexport const FLOAT = (value) =>\n{\n\tconst v = +value;\n\tif(!isNaN(v))\n\t{\n\t\treturn v;\n\t}\n\treturn 0;\n};\n\n/**\n * Returns the first non-null non-undefined float-castable value as a float.\n *\n * @param {*} values\n * @returns {number}\n */\nexport const FLOAT_ANY = (...values) =>\n{\n\tfor(let value of values)\n\t{\n\t\tif(value !== null)\n\t\t{\n\t\t\tconst v = +value;\n\t\t\tif(!isNaN(v))\n\t\t\t{\n\t\t\t\treturn v;\n\t\t\t}\n\t\t}\n\t}\n\treturn 0;\n};\n\n\n/**\n * Ensures the given value is an integer (attempts to cast it to an integer if it's not, null and undefined will return 0).\n * This version is less strict than INT, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.\n *\n * @param {*} value\n * @returns {number}\n */\nexport const INT_LAX = (value) => Math.round(FLOAT_LAX(value));\n\n/**\n * Returns the first non-null non-undefined int-castable value as an integer.\n * This version is less strict than INT_ANY, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.\n *\n * @param {*} values\n * @returns {number}\n */\nexport const INT_LAX_ANY = (...values) => Math.round(FLOAT_LAX_ANY(...values));\n\n\n/**\n * Ensures the given value is a float (attempts to cast it to a float if it's not, null and undefined will return 0).\n * This version is less strict than FLOAT, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.\n *\n * @param {*} value\n * @returns {number}\n */\nexport const FLOAT_LAX = (value) =>\n{\n\tconst v = (typeof value === 'number') ? value : parseFloat((value + '').replace(REGEX_ALL_NON_FLOAT_CHARACTERS, ''));\n\tif(!isNaN(v))\n\t{\n\t\treturn v;\n\t}\n\treturn 0;\n};\n\n/**\n * Returns the first non-null non-undefined float-castable value as a float.\n * This version is less strict than FLOAT_ANY, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.\n *\n * @param {*} values\n * @returns {number}\n */\nexport const FLOAT_LAX_ANY = (...values) =>\n{\n\tfor(let value of values)\n\t{\n\t\tif(value !== null)\n\t\t{\n\t\t\tconst v = (typeof value === 'number') ? value : parseFloat((value + '').replace(REGEX_ALL_NON_FLOAT_CHARACTERS, ''));\n\t\t\tif(!isNaN(v))\n\t\t\t{\n\t\t\t\treturn v;\n\t\t\t}\n\t\t}\n\t}\n\treturn 0;\n};\n","import CloneDeep from 'clone-deep';\nimport {ISSET, IS_OBJECT, IS_ARRAY, STRING, INT_LAX, FLOAT_LAX, INT_LAX_ANY, FLOAT_LAX_ANY, ARRAY} from './LeTypes.js';\n\n\n/**\n * @param {LeUtils_TransactionalValue} transactionalValue\n */\nconst checkTransactionalValue = (transactionalValue) =>\n{\n\tif(!LeUtils.isTransactionalValueValid(transactionalValue))\n\t{\n\t\tconsole.error('The given value is not a valid TransactionalValue:');\n\t\tconsole.error(transactionalValue);\n\t\tthrow new Error('The given value is not a valid TransactionalValue');\n\t}\n};\n\n/**\n * @param {LeUtils_TransactionalValue} transactionalValue\n * @param {string} changeId\n * @returns {{index:number, value:*}|null}\n */\nconst findTransactionalValueChange = (transactionalValue, changeId) =>\n{\n\tfor(let i = 0; i < transactionalValue.changes.length; i++)\n\t{\n\t\tconst change = transactionalValue.changes[i];\n\t\tif(change.id === changeId)\n\t\t{\n\t\t\treturn {index:i, value:change.value};\n\t\t}\n\t}\n\treturn null;\n};\n\n\nexport const LeUtils = {\n\t/**\n\t * A deep equals implementation.\n\t *\n\t * @param {*} a The value to compare.\n\t * @param {*} b The other value to compare.\n\t * @returns {boolean} Returns true if the values are equivalent.\n\t */\n\tequals:\n\t\t(a, b) =>\n\t\t{\n\t\t\tif(a === b)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\tif(a && b && typeof a == 'object' && typeof b == 'object')\n\t\t\t{\n\t\t\t\tif(a.constructor !== b.constructor)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(Array.isArray(a))\n\t\t\t\t{\n\t\t\t\t\tconst length = a.length;\n\t\t\t\t\tif(length != b.length)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(let i = length; i-- !== 0;)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!LeUtils.equals(a[i], b[i]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif((a instanceof Map) && (b instanceof Map))\n\t\t\t\t{\n\t\t\t\t\tif(a.size !== b.size)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(let i of a.entries())\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!b.has(i[0]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor(let i of a.entries())\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!LeUtils.equals(i[1], b.get(i[0])))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif((a instanceof Set) && (b instanceof Set))\n\t\t\t\t{\n\t\t\t\t\tif(a.size !== b.size)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(let i of a.entries())\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!b.has(i[0]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif(ArrayBuffer.isView(a) && ArrayBuffer.isView(b))\n\t\t\t\t{\n\t\t\t\t\tif(('length' in a) && ('length' in b) && (typeof a.length === 'number') && (typeof b.length === 'number'))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(a.length != b.length)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(let i = a.length; i-- !== 0;)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(a[i] !== b[i])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif(('byteLength' in a) && ('byteLength' in b) && (typeof a.byteLength === 'number') && (typeof b.byteLength === 'number') && ('getUint8' in a) && ('getUint8' in b) && (typeof a.getUint8 === 'function') && (typeof b.getUint8 === 'function'))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(a.byteLength !== b.byteLength)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(let i = a.byteLength; i-- !== 0;)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(a.getUint8(i) !== b.getUint8(i))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(a.constructor === RegExp)\n\t\t\t\t{\n\t\t\t\t\treturn a.source === b.source && a.flags === b.flags;\n\t\t\t\t}\n\t\t\t\tif(a.valueOf !== Object.prototype.valueOf)\n\t\t\t\t{\n\t\t\t\t\treturn a.valueOf() === b.valueOf();\n\t\t\t\t}\n\t\t\t\tif(a.toString !== Object.prototype.toString)\n\t\t\t\t{\n\t\t\t\t\treturn a.toString() === b.toString();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(a.constructor && (a.constructor !== Object) && (a.constructor !== Array) && (Object.getPrototypeOf(a) !== Object.prototype))\n\t\t\t\t{\n\t\t\t\t\tif(typeof a.equals === 'function')\n\t\t\t\t\t{\n\t\t\t\t\t\treturn a.equals(b);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst keys = Object.keys(a);\n\t\t\t\tconst length = keys.length;\n\t\t\t\tif(length !== Object.keys(b).length)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor(let i = length; i-- !== 0;)\n\t\t\t\t{\n\t\t\t\t\tif(!Object.prototype.hasOwnProperty.call(b, keys[i]))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(let i = length; i-- !== 0;)\n\t\t\t\t{\n\t\t\t\t\tconst key = keys[i];\n\t\t\t\t\tif((key === '_owner') && a.$$typeof)\n\t\t\t\t\t{\n\t\t\t\t\t\t// React-specific: avoid traversing _owner, it contains circular references, and is not needed when comparing the actual element\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif(!LeUtils.equals(a[key], b[key]))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\t// true if both are NaN, false otherwise\n\t\t\treturn ((a !== a) && (b !== b));\n\t\t},\n\t\n\t/**\n\t * Performs a deep equality comparison between two collections (objects, maps, arrays, etc), sorting on the keys before comparing them.\n\t *\n\t * This is useful for comparing objects that have the same properties, but in a different order, and/or in a different collection type (like Maps vs Objects).\n\t *\n\t * @param {*} elementsA The elements to compare.\n\t * @param {*} elementsB The other elements to compare.\n\t * @param {string[]} [ignoreKeys=[]] An array of keys to ignore when comparing the elements. This is useful for ignoring properties that are not relevant for the comparison.\n\t * @return {boolean} Returns true if the given values are equivalent, ignoring the order of properties.\n\t */\n\tequalsMapLike:\n\t\t(() =>\n\t\t{\n\t\t\tconst sortKeyValueArrays = (pairA, pairB) => LeUtils.compare(pairA[0], pairB[0]);\n\t\t\treturn (elementsA, elementsB, ignoreKeys = []) =>\n\t\t\t{\n\t\t\t\telementsA = LeUtils.mapToArray(elementsA, (value, key) => [key, value]).sort(sortKeyValueArrays);\n\t\t\t\telementsB = LeUtils.mapToArray(elementsB, (value, key) => [key, value]).sort(sortKeyValueArrays);\n\t\t\t\tignoreKeys = (typeof ignoreKeys === 'string') ? ARRAY(ignoreKeys) : LeUtils.mapToArray(ignoreKeys);\n\t\t\t\t\n\t\t\t\tlet indexA = 0;\n\t\t\t\tlet indexB = 0;\n\t\t\t\twhile((indexA < elementsA.length) && (indexB < elementsB.length))\n\t\t\t\t{\n\t\t\t\t\tconst [mapKey, mapValue] = elementsA[indexA];\n\t\t\t\t\tconst [ownMapKey, ownMapValue] = elementsB[indexB];\n\t\t\t\t\t\n\t\t\t\t\tconst ignoreKeysIncludesMapKey = ignoreKeys.includes(mapKey);\n\t\t\t\t\tconst ignoreKeysIncludesOwnMapKey = ignoreKeys.includes(ownMapKey);\n\t\t\t\t\tif(ignoreKeysIncludesMapKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tindexA++;\n\t\t\t\t\t\tif(ignoreKeysIncludesOwnMapKey)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tindexB++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if(ignoreKeysIncludesOwnMapKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tindexB++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(!LeUtils.equals(mapKey, ownMapKey) || !LeUtils.equals(mapValue, ownMapValue))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tindexA++;\n\t\t\t\t\tindexB++;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twhile((indexA < elementsA.length) && ignoreKeys.includes(elementsA[indexA][0]))\n\t\t\t\t{\n\t\t\t\t\tindexA++;\n\t\t\t\t}\n\t\t\t\tif(indexA < elementsA.length)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twhile((indexB < elementsB.length) && ignoreKeys.includes(elementsB[indexB][0]))\n\t\t\t\t{\n\t\t\t\t\tindexB++;\n\t\t\t\t}\n\t\t\t\treturn (indexB >= elementsB.length);\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns a deep copy of the given value.\n\t *\n\t * @param {*} value\n\t * @returns {*}\n\t */\n\tclone:\n\t\t(value) => CloneDeep(value, true),\n\t\n\t/**\n\t * Executes the given callback when the document is ready.\n\t *\n\t * @param {Function} callback\n\t * @returns {{remove:Function}}\n\t */\n\tonDomReady:\n\t\t(callback) =>\n\t\t{\n\t\t\tif(!globalThis?.document || !globalThis?.document?.addEventListener || !globalThis?.document?.removeEventListener)\n\t\t\t{\n\t\t\t\t// no document, so we can't wait for it to be ready\n\t\t\t\tconsole.warn('LeUtils.onDomReady() was called, but there is no document available. This might happen if the code is executed in a non-browser environment.');\n\t\t\t\treturn {\n\t\t\t\t\tremove:() =>\n\t\t\t\t\t {\n\t\t\t\t\t },\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tif((globalThis.document.readyState === 'interactive') || (globalThis.document.readyState === 'complete'))\n\t\t\t{\n\t\t\t\treturn LeUtils.setTimeout(() => callback(), 0);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet listening = true;\n\t\t\t\tconst callbackWrapper = () =>\n\t\t\t\t{\n\t\t\t\t\tif(listening)\n\t\t\t\t\t{\n\t\t\t\t\t\tlistening = false;\n\t\t\t\t\t\tglobalThis.document.removeEventListener('DOMContentLoaded', callbackWrapper);\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tglobalThis.document.addEventListener('DOMContentLoaded', callbackWrapper);\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\tremove:\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(listening)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlistening = false;\n\t\t\t\t\t\t\t\tglobalThis.document.removeEventListener('DOMContentLoaded', callbackWrapper);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t/**\n\t * Parses the given version string, and returns an object with the major, minor, and patch numbers, as well as some comparison functions.\n\t *\n\t * Expects a version string such as:\n\t * - \"1\"\n\t * - \"1.2\"\n\t * - \"1.2.3\"\n\t * - \"1.2.3 anything\"\n\t * - \"1.2.3-anything\"\n\t *\n\t * @param {string|*} versionString\n\t * @returns {{major: (number), minor: (number), patch: (number), toString: (function(): string), equals: (function(string|*): boolean), smallerThan: (function(string|*): boolean), smallerThanOrEquals: (function(string|*): boolean), largerThan: (function(string|*): boolean), largerThanOrEquals: (function(string|*): boolean)}}\n\t */\n\tparseVersionString:\n\t\t(versionString) =>\n\t\t{\n\t\t\tif(IS_OBJECT(versionString) && ISSET(versionString?.major) && ISSET(versionString?.minor) && ISSET(versionString?.patch))\n\t\t\t{\n\t\t\t\treturn versionString;\n\t\t\t}\n\t\t\t\n\t\t\tversionString = STRING(versionString).trim();\n\t\t\tconst partsVersion = versionString.split(' ')[0].split('-')[0].split('.');\n\t\t\tconst major = INT_LAX(partsVersion[0]);\n\t\t\tconst minor = INT_LAX(partsVersion[1]);\n\t\t\tconst patch = INT_LAX(partsVersion[2]);\n\t\t\t\n\t\t\tconst THIS = {\n\t\t\t\tmajor:major,\n\t\t\t\tminor:minor,\n\t\t\t\tpatch:patch,\n\t\t\t\t\n\t\t\t\ttoString:\n\t\t\t\t\t() => major + '.' + minor + '.' + patch,\n\t\t\t\t\n\t\t\t\tequals:\n\t\t\t\t\t(otherVersion) =>\n\t\t\t\t\t{\n\t\t\t\t\t\totherVersion = LeUtils.parseVersionString(otherVersion);\n\t\t\t\t\t\treturn (major === otherVersion.major) && (minor === otherVersion.minor) && (patch === otherVersion.patch);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\tlargerThan:\n\t\t\t\t\t(otherVersion) =>\n\t\t\t\t\t{\n\t\t\t\t\t\totherVersion = LeUtils.parseVersionString(otherVersion);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(major > otherVersion.major)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(major < otherVersion.major)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(minor > otherVersion.minor)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(minor < otherVersion.minor)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn (patch > otherVersion.patch);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\tlargerThanOrEquals:\n\t\t\t\t\t(otherVersion) =>\n\t\t\t\t\t{\n\t\t\t\t\t\totherVersion = LeUtils.parseVersionString(otherVersion);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(major > otherVersion.major)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(major < otherVersion.major)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(minor > otherVersion.minor)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(minor < otherVersion.minor)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn (patch >= otherVersion.patch);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\tsmallerThan:\n\t\t\t\t\t(otherVersion) => !THIS.largerThanOrEquals(otherVersion),\n\t\t\t\t\n\t\t\t\tsmallerThanOrEquals:\n\t\t\t\t\t(otherVersion) => !THIS.largerThan(otherVersion),\n\t\t\t};\n\t\t\treturn THIS;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains the given value.\n\t *\n\t * Values are compared by casting both of them to a string.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*} value\n\t * @returns {boolean}\n\t */\n\tcontains:\n\t\t(array, value) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tvalue = STRING(value);\n\t\t\tLeUtils.each(array, (val) =>\n\t\t\t{\n\t\t\t\tif(STRING(val) === value)\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains the given value.\n\t *\n\t * Values are compared by casting both of them to a string, and then lowercasing them.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*} value\n\t * @returns {boolean}\n\t */\n\tcontainsCaseInsensitive:\n\t\t(array, value) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tvalue = STRING(value).toLowerCase();\n\t\t\tLeUtils.each(array, (val) =>\n\t\t\t{\n\t\t\t\tif(STRING(val).toLowerCase() === value)\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains all the given values.\n\t *\n\t * Values are compared by casting both of them to a string.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsAll:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = true;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(!LeUtils.contains(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains all the given values.\n\t *\n\t * Values are compared by casting both of them to a string, and then lowercasing them.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsAllCaseInsensitive:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = true;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(!LeUtils.containsCaseInsensitive(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains any of the given values.\n\t *\n\t * Values are compared by casting both of them to a string.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsAny:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(LeUtils.contains(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains any of the given values.\n\t *\n\t * Values are compared by casting both of them to a string, and then lowercasing them.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsAnyCaseInsensitive:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(LeUtils.containsCaseInsensitive(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains none of the given values.\n\t *\n\t * Values are compared by casting both of them to a string.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsNone:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tlet result = true;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(LeUtils.contains(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the array or object contains none of the given values.\n\t *\n\t * Values are compared by casting both of them to a string, and then lowercasing them.\n\t *\n\t * @param {*[]|Object|Function} array\n\t * @param {*[]|Object|Function} values\n\t * @returns {boolean}\n\t */\n\tcontainsNoneCaseInsensitive:\n\t\t(array, values) =>\n\t\t{\n\t\t\tif(!array)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tlet result = true;\n\t\t\tLeUtils.each(values, (value) =>\n\t\t\t{\n\t\t\t\tif(LeUtils.containsCaseInsensitive(array, value))\n\t\t\t\t{\n\t\t\t\t\tresult = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Finds the first element in the given array or object that returns true from the callback, and returns an object with the index and value.\n\t *\n\t * @param {*[]|Object|Function} elements\n\t * @param {(value:*, index:*) => boolean|void} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {{index:*, value:*}|null}\n\t */\n\tfindIndexValue:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tlet result = null;\n\t\t\tLeUtils.each(elements, (value, index) =>\n\t\t\t{\n\t\t\t\tif(callback.call(elements[index], elements[index], index))\n\t\t\t\t{\n\t\t\t\t\tresult = {index, value};\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Finds the first element in the given array or object that returns true from the callback, and returns the index.\n\t *\n\t * @param {*[]|Object|Function} elements\n\t * @param {(value:*, index:*) => boolean|void} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*|null}\n\t */\n\tfindIndex:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) => LeUtils.findIndexValue(elements, callback, optionalSkipHasOwnPropertyCheck)?.index ?? null,\n\t\n\t/**\n\t * Finds the first element in the given array or object that returns true from the callback, and returns the value.\n\t *\n\t * @param {*[]|Object|Function} elements\n\t * @param {(value:*, index:*) => boolean|void} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*|null}\n\t */\n\tfind:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) => LeUtils.findIndexValue(elements, callback, optionalSkipHasOwnPropertyCheck)?.value ?? null,\n\t\n\t/**\n\t * Returns the value at the given index in the given elements.\n\t *\n\t * @param {*} elements\n\t * @param {*} index\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*}\n\t */\n\tgetValueAtIndex:\n\t\t(elements, index, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements === null) || (typeof elements === 'undefined'))\n\t\t\t{\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif(Array.isArray(elements))\n\t\t\t{\n\t\t\t\treturn elements[index];\n\t\t\t}\n\t\t\tif((typeof elements === 'object') && (elements?.constructor === Object))\n\t\t\t{\n\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t{\n\t\t\t\t\treturn elements[index];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif(elements instanceof Map)\n\t\t\t{\n\t\t\t\treturn elements.get(index);\n\t\t\t}\n\t\t\tif(elements instanceof Set)\n\t\t\t{\n\t\t\t\treturn index;\n\t\t\t}\n\t\t\tif(typeof elements !== 'string')\n\t\t\t{\n\t\t\t\tif(ArrayBuffer.isView(elements) && !(elements instanceof DataView))\n\t\t\t\t{\n\t\t\t\t\treturn elements[index];\n\t\t\t\t}\n\t\t\t\tif(typeof elements?.[Symbol.iterator] === 'function')\n\t\t\t\t{\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tfor(const value of elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(i === index)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif(typeof elements?.forEach === 'function')\n\t\t\t\t{\n\t\t\t\t\tlet result = undefined;\n\t\t\t\t\tlet shouldContinue = true;\n\t\t\t\t\telements.forEach((value, i) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif(shouldContinue)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(i === index)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tresult = value;\n\t\t\t\t\t\t\t\tshouldContinue = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t{\n\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t{\n\t\t\t\t\treturn elements[index];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\n\t/**\n\t * Checks if the given elements can be iterated over using LeUtils.each().\n\t *\n\t * @param {*} elements\n\t * @returns {boolean}\n\t */\n\tsupportsEach:\n\t\t(elements) =>\n\t\t{\n\t\t\tif((elements === null) || (typeof elements === 'undefined') || (typeof elements === 'string'))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn !!(\n\t\t\t\t(Array.isArray(elements))\n\t\t\t\t|| ((typeof elements === 'object') && (elements?.constructor === Object))\n\t\t\t\t|| (typeof elements?.[Symbol.iterator] === 'function')\n\t\t\t\t|| (typeof elements?.forEach === 'function')\n\t\t\t\t|| ((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t);\n\t\t},\n\t\n\t/**\n\t * Returns an iterator that iterates over each element in the given array or object, yielding an array with the value and the index/key.\n\t *\n\t * @param {*} elements\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @yields {[key:*, value:*]}\n\t */\n\teachIterator:\n\t\tfunction* (elements, optionalSkipHasOwnPropertyCheck = false)\n\t\t{\n\t\t\tif((elements === null) || (typeof elements === 'undefined'))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(Array.isArray(elements))\n\t\t\t{\n\t\t\t\tfor(let i = 0; i < elements.length; i++)\n\t\t\t\t{\n\t\t\t\t\tyield [elements[i], i];\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif((typeof elements === 'object') && (elements?.constructor === Object))\n\t\t\t{\n\t\t\t\tfor(const i in elements)\n\t\t\t\t{\n\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, i))\n\t\t\t\t\t{\n\t\t\t\t\t\tyield [elements[i], i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(elements instanceof Map)\n\t\t\t{\n\t\t\t\tfor(const [i, value] of elements)\n\t\t\t\t{\n\t\t\t\t\tyield [value, i];\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(elements instanceof Set)\n\t\t\t{\n\t\t\t\tfor(const value of elements)\n\t\t\t\t{\n\t\t\t\t\tyield [value, value];\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof elements !== 'string')\n\t\t\t{\n\t\t\t\tif(typeof elements?.[Symbol.iterator] === 'function')\n\t\t\t\t{\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tfor(const value of elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield [value, i];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(typeof elements?.forEach === 'function')\n\t\t\t\t{\n\t\t\t\t\tconst buffer = [];\n\t\t\t\t\telements.forEach((value, i) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tbuffer.push([value, i]);\n\t\t\t\t\t});\n\t\t\t\t\tfor(const entry of buffer)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield entry;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t{\n\t\t\t\tfor(const i in elements)\n\t\t\t\t{\n\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, i))\n\t\t\t\t\t{\n\t\t\t\t\t\tyield [elements[i], i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.warn('Executed LeUtils.eachIterator() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t},\n\t\n\t/**\n\t * Loops through each element in the given array or object, and calls the callback for each element.\n\t *\n\t * @param {*} elements\n\t * @param {(value:*, index?:*) => boolean|void} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*}\n\t */\n\teach:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tfor(const [value, key] of LeUtils.eachIterator(elements, optionalSkipHasOwnPropertyCheck))\n\t\t\t{\n\t\t\t\tif(callback.call(value, value, key) === false)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\t\n\t/**\n\t * Like LeUtils.each(), except that it expects an async callback.\n\t *\n\t * @param {*} elements\n\t * @param {(value:*, index?:*) => Promise<boolean|undefined>} asyncCallback\n\t * @param {number} [optionalParallelCount]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {Promise<*>}\n\t */\n\teachAsync:\n\t\t(() =>\n\t\t{\n\t\t\t/**\n\t\t\t * Instead of waiting for every promise individually, this function will queue up multiple promises at once, then wait for any of them to finish, before adding more, until it has looped through all elements.\n\t\t\t * Then, at the end, it will wait for the remaining promises to finish.\n\t\t\t */\n\t\t\tconst eachAsyncParallel = async (elements, asyncCallback, optionalParallelCount, optionalSkipHasOwnPropertyCheck) =>\n\t\t\t{\n\t\t\t\tconst runningPromises = new Set();\n\t\t\t\tlet doBreak = false;\n\t\t\t\tawait LeUtils.eachAsync(elements, async (value, index) =>// loop through each element\n\t\t\t\t{\n\t\t\t\t\tif(doBreak)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// if no spot is available, wait for one to finish\n\t\t\t\t\twhile(runningPromises.size >= optionalParallelCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tawait Promise.race(runningPromises);\n\t\t\t\t\t\tif(doBreak)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// process this element, by creating a promise, and adding it to the queue\n\t\t\t\t\tconst promise = (async () =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif((await asyncCallback.call(value, value, index)) === false)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdoBreak = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\trunningPromises.add(promise);\n\t\t\t\t\tpromise.finally(() =>\n\t\t\t\t\t{\n\t\t\t\t\t\trunningPromises.delete(promise);\n\t\t\t\t\t});\n\t\t\t\t}, 1, optionalSkipHasOwnPropertyCheck);\n\t\t\t\tawait Promise.all(runningPromises);\n\t\t\t\treturn elements;\n\t\t\t};\n\t\t\t\n\t\t\treturn async (elements, asyncCallback, parallelCount = 1, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t\t{\n\t\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t\t{\n\t\t\t\t\tparallelCount = INT_LAX(parallelCount);\n\t\t\t\t\tif(parallelCount > 1)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn await eachAsyncParallel(elements, asyncCallback, parallelCount, optionalSkipHasOwnPropertyCheck);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor(const [value, key] of LeUtils.eachIterator(elements, optionalSkipHasOwnPropertyCheck))\n\t\t\t\t\t{\n\t\t\t\t\t\tif((await asyncCallback.call(value, value, key)) === false)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn elements;\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns an empty simplified collection (array, object, or Map), based on the given elements.\n\t *\n\t * Usage:\n\t *\n\t * ```js\n\t * const [success, collection, add] = LeUtils.getEmptySimplifiedCollection(elements);\n\t * ```\n\t *\n\t * @param {*} elements\n\t * @returns {[boolean, *[]|Object|Map, (value:*,index:*)=>void]}\n\t */\n\tgetEmptySimplifiedCollection:\n\t\t(elements) =>\n\t\t{\n\t\t\tif((elements === null) || (typeof elements === 'undefined'))\n\t\t\t{\n\t\t\t\treturn [false, [], (value, index) =>\n\t\t\t\t{\n\t\t\t\t}];\n\t\t\t}\n\t\t\t\n\t\t\tlet collection = null;\n\t\t\tlet add = null;\n\t\t\tif(Array.isArray(elements))\n\t\t\t{\n\t\t\t\tcollection = [];\n\t\t\t\tadd = (value, index) =>\n\t\t\t\t{\n\t\t\t\t\tcollection.push(value);\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if((typeof elements === 'object') && (elements?.constructor === Object))\n\t\t\t{\n\t\t\t\tcollection = {};\n\t\t\t\tadd = (value, index) =>\n\t\t\t\t{\n\t\t\t\t\tcollection[index] = value;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if(elements instanceof Map)\n\t\t\t{\n\t\t\t\tcollection = new Map();\n\t\t\t\tadd = (value, index) =>\n\t\t\t\t{\n\t\t\t\t\tcollection.set(index, value);\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if((typeof elements !== 'string') && ((typeof elements?.[Symbol.iterator] === 'function') || (typeof elements?.forEach === 'function')))\n\t\t\t{\n\t\t\t\tcollection = [];\n\t\t\t\tadd = (value, index) =>\n\t\t\t\t{\n\t\t\t\t\tcollection.push(value);\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t{\n\t\t\t\tcollection = {};\n\t\t\t\tadd = (value, index) =>\n\t\t\t\t{\n\t\t\t\t\tcollection[index] = value;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.warn('Executed LeUtils.getEmptySimplifiedCollection() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\treturn [false, [], (value, index) =>\n\t\t\t\t{\n\t\t\t\t}];\n\t\t\t}\n\t\t\treturn [true, collection, add];\n\t\t},\n\t\n\t/**\n\t * Loops through the given elements, and returns a new collection, with only the elements that returned true (or a value equals to true) from the callback.\n\t * If no callback is given, it will return all elements that are of a true value (for example, values that are: not null, not undefined, not false, not 0, not an empty string, not an empty array, not an empty object).\n\t *\n\t * @param {*} elements\n\t * @param {(value:*, index:*) => boolean|undefined} [callback]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*}\n\t */\n\tfilter:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tconst [success, collection, add] = LeUtils.getEmptySimplifiedCollection(elements);\n\t\t\tif(!success)\n\t\t\t{\n\t\t\t\treturn elements;\n\t\t\t}\n\t\t\t\n\t\t\tLeUtils.each(elements, (value, index) =>\n\t\t\t{\n\t\t\t\tif(!callback)\n\t\t\t\t{\n\t\t\t\t\tif(value)\n\t\t\t\t\t{\n\t\t\t\t\t\tadd(value, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(callback.call(value, value, index))\n\t\t\t\t{\n\t\t\t\t\tadd(value, index);\n\t\t\t\t}\n\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\treturn collection;\n\t\t},\n\t\n\t/**\n\t * Loops through the given elements, and returns a new collection, with the elements that were returned from the callback.\n\t *\n\t * @param {*} elements\n\t * @param {(value:*, index:*) => *} [callback]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*}\n\t */\n\tmap:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tconst [success, collection, add] = LeUtils.getEmptySimplifiedCollection(elements);\n\t\t\tif(!success)\n\t\t\t{\n\t\t\t\treturn elements;\n\t\t\t}\n\t\t\t\n\t\t\tLeUtils.each(elements, (value, index) =>\n\t\t\t{\n\t\t\t\tif(!callback)\n\t\t\t\t{\n\t\t\t\t\tadd(value, index);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tadd(callback.call(value, value, index), index);\n\t\t\t\t}\n\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\treturn collection;\n\t\t},\n\t\n\t/**\n\t * Loops through the given elements, and returns a new array, with the elements that were returned from the callback. Always returns an array.\n\t *\n\t * @param {*} elements\n\t * @param {(value:*, index:*) => *} [callback]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]}\n\t */\n\tmapToArray:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tlet result = [];\n\t\t\tLeUtils.each(elements, (value, index) =>\n\t\t\t{\n\t\t\t\tif(!callback)\n\t\t\t\t{\n\t\t\t\t\tresult.push(value);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tresult.push(callback.call(value, value, index));\n\t\t\t\t}\n\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Loops through the given elements, and returns a new array, with the elements that were returned from the callback. The elements will be sorted by the result from the given comparator. Always returns an array.\n\t *\n\t * @param {*} elements\n\t * @param {(valueA:*, valueB:*) => number} comparator\n\t * @param {(value:*, index:*) => *} [callback]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]}\n\t */\n\tmapToArraySorted:\n\t\t(elements, comparator, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tconst keys = LeUtils.sortKeys(elements, comparator, optionalSkipHasOwnPropertyCheck);\n\t\t\tlet result = [];\n\t\t\tfor(const key of keys)\n\t\t\t{\n\t\t\t\tconst value = LeUtils.getValueAtIndex(elements, key, optionalSkipHasOwnPropertyCheck);\n\t\t\t\tif(!callback)\n\t\t\t\t{\n\t\t\t\t\tresult.push(value);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tresult.push(callback.call(value, value, key));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Loops through the given elements, and returns a new array, with the keys from the given elements, sorted by the result from the given comparator. Always returns an array.\n\t *\n\t * @param {*} elements\n\t * @param {(valueA:*, valueB:*) => number} comparator\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]}\n\t */\n\tsortKeys:\n\t\t(elements, comparator, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tlet keys = [];\n\t\t\tLeUtils.each(elements, (value, index) =>\n\t\t\t{\n\t\t\t\tkeys.push(index);\n\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\t\n\t\t\tkeys.sort((a, b) => comparator(LeUtils.getValueAtIndex(elements, a, optionalSkipHasOwnPropertyCheck), LeUtils.getValueAtIndex(elements, b, optionalSkipHasOwnPropertyCheck)));\n\t\t\treturn keys;\n\t\t},\n\t\n\t/**\n\t * Turns the given value(s) into a 1 dimensional array.\n\t *\n\t * Does the same thing as Array.flat(Infinity).\n\t *\n\t * @param {*} array\n\t * @returns {*[]}\n\t */\n\tflattenArray:\n\t\t(() =>\n\t\t{\n\t\t\tconst flattenArrayRecursive = (result, array) =>\n\t\t\t{\n\t\t\t\tif(!Array.isArray(array))\n\t\t\t\t{\n\t\t\t\t\tresult.push(array);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tarray.forEach((entry) =>\n\t\t\t\t{\n\t\t\t\t\tflattenArrayRecursive(result, entry);\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\treturn (array) =>\n\t\t\t{\n\t\t\t\tif(!Array.isArray(array))\n\t\t\t\t{\n\t\t\t\t\treturn [array];\n\t\t\t\t}\n\t\t\t\tlet result = [];\n\t\t\t\tarray.forEach((entry) =>\n\t\t\t\t{\n\t\t\t\t\tflattenArrayRecursive(result, entry);\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Turns the given value(s) into a 1 dimensional array.\n\t *\n\t * Compared to LeUtils.flattenArray(), this function also supports objects, Maps, Sets, and other iterable objects.\n\t *\n\t * @param {*} elements\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]}\n\t */\n\tflattenToArray:\n\t\t(() =>\n\t\t{\n\t\t\tconst flattenToArrayRecursive = (result, elements, optionalSkipHasOwnPropertyCheck) =>\n\t\t\t{\n\t\t\t\tif(!LeUtils.supportsEach(elements))\n\t\t\t\t{\n\t\t\t\t\tresult.push(elements);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tLeUtils.each(elements, entry =>\n\t\t\t\t{\n\t\t\t\t\tflattenToArrayRecursive(result, entry, optionalSkipHasOwnPropertyCheck);\n\t\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\t};\n\t\t\t\n\t\t\treturn (elements, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t\t{\n\t\t\t\tif(!LeUtils.supportsEach(elements))\n\t\t\t\t{\n\t\t\t\t\treturn [elements];\n\t\t\t\t}\n\t\t\t\tlet result = [];\n\t\t\t\tLeUtils.each(elements, entry =>\n\t\t\t\t{\n\t\t\t\t\tflattenToArrayRecursive(result, entry, optionalSkipHasOwnPropertyCheck);\n\t\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\t\treturn result;\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Compares two values. Primarily used for sorting.\n\t *\n\t * @param {*} a\n\t * @param {*} b\n\t * @returns {number}\n\t */\n\tcompare:\n\t\t(a, b) => (a < b) ? -1 : ((a > b) ? 1 : 0),\n\t\n\t/**\n\t * Compares two numbers. Primarily used for sorting.\n\t *\n\t * @param {number} a\n\t * @param {number} b\n\t * @returns {number}\n\t */\n\tcompareNumbers:\n\t\t(a, b) => a - b,\n\t\n\t/**\n\t * Compares two numeric strings. Primarily used for sorting.\n\t *\n\t * @param {string|number} a\n\t * @param {string|number} b\n\t * @returns {number}\n\t */\n\tcompareNumericStrings:\n\t\t(a, b) =>\n\t\t{\n\t\t\tconst aParts = STRING(a).split('.');\n\t\t\tconst bParts = STRING(b).split('.');\n\t\t\tfor(let i = 0; i < Math.min(aParts.length, bParts.length); i++)\n\t\t\t{\n\t\t\t\ta = aParts[i].trim();\n\t\t\t\tb = bParts[i].trim();\n\t\t\t\tif(a.length !== b.length)\n\t\t\t\t{\n\t\t\t\t\treturn (a.length < b.length) ? -1 : 1;\n\t\t\t\t}\n\t\t\t\tif(a !== b)\n\t\t\t\t{\n\t\t\t\t\treturn (a < b) ? -1 : 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(aParts.length !== bParts.length)\n\t\t\t{\n\t\t\t\treturn (aParts.length < bParts.length) ? -1 : 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\n\t/**\n\t * Compares two strings in a natural way, meaning that it will compare numbers in the strings as actual numbers.\n\t *\n\t * This will correctly sort numeric parts so that \"file5.txt\" comes before \"file10.txt\", as well as that \"file/5/test.txt\" comes before \"file/10/test.txt\".\n\t *\n\t * @param {string} a\n\t * @param {string} b\n\t * @returns {number}\n\t */\n\tcompareNaturalStrings:\n\t\t(a, b) =>\n\t\t{\n\t\t\tconst re = /(\\d+|\\D+)/g; // split into runs of digits or non-digits\n\t\t\tconst aTokens = a.match(re) ?? [];\n\t\t\tconst bTokens = b.match(re) ?? [];\n\t\t\t\n\t\t\tconst len = Math.min(aTokens.length, bTokens.length);\n\t\t\tfor(let i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tconst x = aTokens[i];\n\t\t\t\tconst y = bTokens[i];\n\t\t\t\tif(x === y)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// if both are numbers, compare as numbers\n\t\t\t\tconst nx = parseInt(x, 10);\n\t\t\t\tconst ny = parseInt(y, 10);\n\t\t\t\tif(!isNaN(nx) && !isNaN(ny))\n\t\t\t\t{\n\t\t\t\t\treturn nx - ny;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// otherwise compare lexically\n\t\t\t\treturn x < y ? -1 : 1;\n\t\t\t}\n\t\t\t\n\t\t\treturn aTokens.length - bTokens.length;\n\t\t},\n\t\n\t/**\n\t * Compares two strings generated by LeUtils.timestamp(). Primarily used for sorting.\n\t *\n\t * @param {string} a\n\t * @param {string} b\n\t * @returns {number}\n\t */\n\tcompareTimestampStrings:\n\t\t(a, b) =>\n\t\t{\n\t\t\ta = LeUtils.base64ToHex(STRING(a).replaceAll('-', '+').replaceAll('_', '/'));\n\t\t\tb = LeUtils.base64ToHex(STRING(b).replaceAll('-', '+').replaceAll('_', '/'));\n\t\t\treturn LeUtils.compare(a, b);\n\t\t},\n\t\n\t/**\n\t * Returns true if the given object is empty, false otherwise.\n\t *\n\t * @param {Object} obj\n\t * @param [optionalSkipHasOwnPropertyCheck]\n\t * @returns {boolean}\n\t */\n\tisEmptyObject:\n\t\t(obj, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tfor(let field in obj)\n\t\t\t{\n\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(obj, field))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\n\t/**\n\t * Returns the number of fields in the given object.\n\t *\n\t * @param {Object} obj\n\t * @param [optionalSkipHasOwnPropertyCheck]\n\t * @returns {number}\n\t */\n\tgetObjectFieldsCount:\n\t\t(obj, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tlet count = 0;\n\t\t\tfor(let field in obj)\n\t\t\t{\n\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(obj, field))\n\t\t\t\t{\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\t\n\t/**\n\t * Returns true if the given function is a generator function (like: \"function* (){}\"), returns false otherwise.\n\t *\n\t * @param {Function} func\n\t * @returns {boolean}\n\t */\n\tisGeneratorFunction:\n\t\t(() =>\n\t\t{\n\t\t\tconst GeneratorFunction = function* ()\n\t\t\t{\n\t\t\t}.constructor;\n\t\t\t\n\t\t\tconst AsyncGeneratorFunction = async function* ()\n\t\t\t{\n\t\t\t}.constructor;\n\t\t\t\n\t\t\tconst RegularFunction = function()\n\t\t\t{\n\t\t\t}.constructor;\n\t\t\t\n\t\t\tconst PossibleGeneratorFunctionNames = Array.from(new Set(['GeneratorFunction', 'AsyncFunction', 'AsyncGeneratorFunction', GeneratorFunction.name, AsyncGeneratorFunction.name])).filter((element) =>\n\t\t\t{\n\t\t\t\treturn (element && (element !== RegularFunction.name));\n\t\t\t});\n\t\t\t\n\t\t\treturn (func) =>\n\t\t\t{\n\t\t\t\tif(!func)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst constructor = func.constructor;\n\t\t\t\tif(!constructor)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// noinspection JSUnresolvedVariable\n\t\t\t\treturn ((constructor.name && PossibleGeneratorFunctionNames.includes(constructor.name)) || (constructor.displayName && PossibleGeneratorFunctionNames.includes(constructor.displayName)));\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Executes the callback after the given number of milliseconds. Passes the elapsed time in seconds to the callback.\n\t *\n\t * To cancel the timeout, call remove() on the result of this function (example: \"const timeoutHandler = LeUtils.setTimeout((deltaTime)=>{}, 1000); timeoutHandler.remove();\")\n\t *\n\t * @param {(deltaTime:number) => *} callback\n\t * @param {number} ms\n\t * @returns {{remove:Function}}\n\t */\n\tsetTimeout:\n\t\t(callback, ms) =>\n\t\t{\n\t\t\tif(!globalThis?.setTimeout || !globalThis?.clearTimeout)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.setTimeout() called in an environment without globalThis.setTimeout, returning a no-op handler.');\n\t\t\t\treturn {\n\t\t\t\t\tremove:() =>\n\t\t\t\t\t {\n\t\t\t\t\t },\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tms = FLOAT_LAX(ms);\n\t\t\t\n\t\t\tlet lastTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\t/** @type {number|null} */\n\t\t\tlet handler = globalThis.setTimeout(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tcallback((currentTime - lastTime) / 1000);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t\tlastTime = currentTime;\n\t\t\t}, ms);\n\t\t\t\n\t\t\treturn {\n\t\t\t\tremove:\n\t\t\t\t\t() =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif(handler !== null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tglobalThis.clearTimeout(handler);\n\t\t\t\t\t\t\thandler = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\n\t/**\n\t * Executes the callback every given number of milliseconds. Passes the time difference in seconds between the last frame and now to it.\n\t *\n\t * To remove the interval, call remove() on the result of this function (example: \"const intervalHandler = LeUtils.setInterval((deltaTime)=>{}, 1000); intervalHandler.remove();\")\n\t *\n\t * @param {(deltaTime:number) => *} callback\n\t * @param {number} [intervalMs]\n\t * @param {boolean} [fireImmediately]\n\t * @returns {{remove:Function}}\n\t */\n\tsetInterval:\n\t\t(callback, intervalMs = 1000, fireImmediately = false) =>\n\t\t{\n\t\t\tintervalMs = FLOAT_LAX_ANY(intervalMs, 1000);\n\t\t\t\n\t\t\tif(fireImmediately)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tcallback(0);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!globalThis?.setInterval || !globalThis?.clearInterval)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.setInterval() called in an environment without globalThis.setInterval, returning a no-op handler.');\n\t\t\t\treturn {\n\t\t\t\t\tremove:() =>\n\t\t\t\t\t {\n\t\t\t\t\t },\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tlet lastTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\t/** @type {number|null} */\n\t\t\tlet handler = globalThis.setInterval(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tcallback((currentTime - lastTime) / 1000);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t\tlastTime = currentTime;\n\t\t\t}, intervalMs);\n\t\t\t\n\t\t\treturn {\n\t\t\t\tremove:\n\t\t\t\t\t() =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif(handler !== null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tglobalThis.clearInterval(handler);\n\t\t\t\t\t\t\thandler = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\n\t/**\n\t * Executes the callback after the given number of frames. Passes the elapsed time in seconds to the callback.\n\t *\n\t * To cancel the timeout, call remove() on the result of this function (example: \"const timeoutHandler = LeUtils.setAnimationFrameTimeout((deltaTime){}, 5); timeoutHandler.remove();\")\n\t *\n\t * @param {(deltaTime:number) => *} callback\n\t * @param {number} [frames]\n\t * @returns {{remove:Function}}\n\t */\n\tsetAnimationFrameTimeout:\n\t\t(callback, frames = 1) =>\n\t\t{\n\t\t\tif(!globalThis?.requestAnimationFrame || !globalThis?.cancelAnimationFrame)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.setAnimationFrameTimeout() called in an environment without globalThis.requestAnimationFrame, returning a no-op handler.');\n\t\t\t\treturn {\n\t\t\t\t\tremove:() =>\n\t\t\t\t\t {\n\t\t\t\t\t },\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tframes = INT_LAX_ANY(frames, 1);\n\t\t\t\n\t\t\tlet run = true;\n\t\t\tlet requestAnimationFrameId = null;\n\t\t\tlet lastTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\tconst tick = () =>\n\t\t\t{\n\t\t\t\tif(run)\n\t\t\t\t{\n\t\t\t\t\tif(frames <= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\trun = false;\n\t\t\t\t\t\trequestAnimationFrameId = null;\n\t\t\t\t\t\tconst currentTime = globalThis?.performance?.now?.() ?? 0;\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcallback((currentTime - lastTime) / 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(e)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastTime = currentTime;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tframes--;\n\t\t\t\t\trequestAnimationFrameId = globalThis.requestAnimationFrame(tick);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttick();\n\t\t\t\n\t\t\treturn {\n\t\t\t\tremove:\n\t\t\t\t\t() =>\n\t\t\t\t\t{\n\t\t\t\t\t\trun = false;\n\t\t\t\t\t\tif(requestAnimationFrameId !== null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tglobalThis.cancelAnimationFrame(requestAnimationFrameId);\n\t\t\t\t\t\t\trequestAnimationFrameId = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\n\t/**\n\t * Executes the callback every given number of frames. Passes the time difference in seconds between the last frame and now to it.\n\t *\n\t * To remove the interval, call remove() on the result of this function (example: \"const intervalHandler = LeUtils.setAnimationFrameInterval((deltaTime)=>{}, 5); intervalHandler.remove();\")\n\t *\n\t * @param {(deltaTime:number) => *} callback\n\t * @param {number} [intervalFrames]\n\t * @param {boolean} [fireImmediately]\n\t * @returns {{remove:Function}}\n\t */\n\tsetAnimationFrameInterval:\n\t\t(callback, intervalFrames = 1, fireImmediately = false) =>\n\t\t{\n\t\t\tintervalFrames = INT_LAX_ANY(intervalFrames, 1);\n\t\t\t\n\t\t\tif(fireImmediately)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tcallback(0);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!globalThis?.requestAnimationFrame || !globalThis?.cancelAnimationFrame)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.setAnimationFrameInterval() called in an environment without globalThis.requestAnimationFrame, returning a no-op handler.');\n\t\t\t\treturn {\n\t\t\t\t\tremove:() =>\n\t\t\t\t\t {\n\t\t\t\t\t },\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tlet run = true;\n\t\t\tlet requestAnimationFrameId = null;\n\t\t\tlet lastTimestamp = 0;\n\t\t\tlet totalTime = 0;\n\t\t\tlet frames = intervalFrames;\n\t\t\tconst tick = (timestamp) =>\n\t\t\t{\n\t\t\t\tif(run)\n\t\t\t\t{\n\t\t\t\t\tif(lastTimestamp === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlastTimestamp = timestamp;\n\t\t\t\t\t}\n\t\t\t\t\ttotalTime += (timestamp - lastTimestamp);\n\t\t\t\t\tlastTimestamp = timestamp;\n\t\t\t\t\t\n\t\t\t\t\tframes--;\n\t\t\t\t\tif(frames <= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcallback(totalTime / 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(e)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttotalTime = 0;\n\t\t\t\t\t\tframes = intervalFrames;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(run)\n\t\t\t\t\t{\n\t\t\t\t\t\trequestAnimationFrameId = globalThis.requestAnimationFrame(tick);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tglobalThis.requestAnimationFrame(tick);\n\t\t\t\n\t\t\treturn {\n\t\t\t\tremove:\n\t\t\t\t\t() =>\n\t\t\t\t\t{\n\t\t\t\t\t\trun = false;\n\t\t\t\t\t\tif(requestAnimationFrameId !== null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tglobalThis.cancelAnimationFrame(requestAnimationFrameId);\n\t\t\t\t\t\t\trequestAnimationFrameId = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\n\t/**\n\t * Returns a promise, which will be resolved after the given number of milliseconds.\n\t *\n\t * @param {number} ms\n\t * @returns {Promise<number>}\n\t */\n\tpromiseTimeout:\n\t\t(ms) =>\n\t\t{\n\t\t\tms = FLOAT_LAX(ms);\n\t\t\tif(ms <= 0)\n\t\t\t{\n\t\t\t\treturn new Promise(resolve => resolve(0));\n\t\t\t}\n\t\t\treturn new Promise(resolve => LeUtils.setTimeout(resolve, ms));\n\t\t},\n\t\n\t/**\n\t * Returns a promise, which will be resolved after the given number of frames.\n\t *\n\t * @param {number} frames\n\t * @returns {Promise<number>}\n\t */\n\tpromiseAnimationFrameTimeout:\n\t\t(frames) =>\n\t\t{\n\t\t\tframes = INT_LAX(frames);\n\t\t\tif(frames <= 0)\n\t\t\t{\n\t\t\t\treturn new Promise(resolve => resolve(0));\n\t\t\t}\n\t\t\treturn new Promise(resolve => LeUtils.setAnimationFrameTimeout(resolve, frames));\n\t\t},\n\t\n\t/**\n\t * Allows you to do a fetch, with built-in retry and abort functionality.\n\t *\n\t * @param {string} url\n\t * @param {{retries?:number|null, delay?:number|((attempt:number)=>number)|null}|Object|null} [options]\n\t * @returns {{then:Function, catch:Function, finally:Function, remove:Function, isRemoved:Function}}\n\t */\n\tfetch:\n\t\t(url, options) =>\n\t\t{\n\t\t\tlet currentRetries = 0;\n\t\t\tconst retries = INT_LAX(options?.retries);\n\t\t\t\n\t\t\tlet controllerAborted = false;\n\t\t\tlet controller = null;\n\t\t\tif(globalThis?.AbortController)\n\t\t\t{\n\t\t\t\tcontroller = new AbortController();\n\t\t\t}\n\t\t\t\n\t\t\tlet promise = (async () =>\n\t\t\t{\n\t\t\t\tconst attemptFetch = async () =>\n\t\t\t\t{\n\t\t\t\t\tif(controllerAborted || controller?.signal?.aborted)\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error('Aborted');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tconst response = await fetch(url, {\n\t\t\t\t\t\t\tsignal:controller?.signal,\n\t\t\t\t\t\t\t...(options ?? {}),\n\t\t\t\t\t\t\tretries:undefined,\n\t\t\t\t\t\t\tdelay: undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(!response.ok)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error('Network request failed: ' + response.status + ' ' + response.statusText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t}\n\t\t\t\t\tcatch(error)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(controllerAborted || controller?.signal?.aborted)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error('Aborted');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(currentRetries >= retries)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentRetries++;\n\t\t\t\t\t\tawait LeUtils.promiseTimeout((typeof options?.delay === 'function') ? INT_LAX_ANY(options?.delay(currentRetries), 500) : (INT_LAX_ANY(options?.delay, 500)));\n\t\t\t\t\t\treturn await attemptFetch();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn await attemptFetch();\n\t\t\t})();\n\t\t\t\n\t\t\tlet result = {};\n\t\t\tresult.then = (...args) =>\n\t\t\t{\n\t\t\t\tpromise = promise.then(...args);\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\tresult.catch = (...args) =>\n\t\t\t{\n\t\t\t\tpromise = promise.catch(...args);\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\tresult.finally = (...args) =>\n\t\t\t{\n\t\t\t\tpromise = promise.finally(...args);\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\tresult.remove = (...args) =>\n\t\t\t{\n\t\t\t\tcontrollerAborted = true;\n\t\t\t\tif(controller)\n\t\t\t\t{\n\t\t\t\t\tcontroller.abort(...args);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\tresult.isRemoved = () => (controllerAborted || !!controller?.signal?.aborted);\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Allows you to do a fetch, with built-in retry functionality. Caches on the requested URL, so that the same URL will not be fetched multiple times.\n\t *\n\t * @param {string} url\n\t * @param {{retries?:number|null, delay?:number|((attempt:number)=>number)|null, [verify]:((data:*,response:*)=>void)|null}|null} [options]\n\t * @param {((response:*)=>*)|null} [responseFunction] A function that will be called with the response object, and should return the data to be cached.\n\t * @returns {Promise<*>}\n\t */\n\tcachedFetch:\n\t\t(() =>\n\t\t{\n\t\t\tconst cache = new Map();\n\t\t\treturn async (url, options, responseFunction) =>\n\t\t\t{\n\t\t\t\tif(cache.has(url))\n\t\t\t\t{\n\t\t\t\t\tconst result = cache.get(url);\n\t\t\t\t\tif(result.data)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn result.data;\n\t\t\t\t\t}\n\t\t\t\t\tif(result.promise)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn await result.promise;\n\t\t\t\t\t}\n\t\t\t\t\tif(result.error)\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow result.error;\n\t\t\t\t\t}\n\t\t\t\t\tconsole.warn('Failed to use the cachedFetch cache, for URL: ', url, ', it is in an unexpected state: ', result);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst promise = LeUtils.fetch(url, options)\n\t\t\t\t\t.then(async response =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst data = responseFunction ? (await responseFunction(response)) : response;\n\t\t\t\t\t\tif(typeof options?.verify === 'function')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tawait options.verify(data, response);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t})\n\t\t\t\t\t.then(data =>\n\t\t\t\t\t{\n\t\t\t\t\t\tcache.set(url, {data});\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error =>\n\t\t\t\t\t{\n\t\t\t\t\t\tcache.set(url, {error});\n\t\t\t\t\t\tconsole.error('Failed to fetch: ', error);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t});\n\t\t\t\tif(!cache.has(url))\n\t\t\t\t{\n\t\t\t\t\tcache.set(url, {promise});\n\t\t\t\t}\n\t\t\t\treturn await promise;\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns true if the user is on a smartphone device (mobile).\n\t * Will return false if the user is on a tablet or on a desktop.\n\t *\n\t * In short:\n\t * - Mobile: True\n\t * - Tablet: False\n\t * - Desktop: False\n\t *\n\t * @returns {boolean}\n\t */\n\tplatformIsMobile:\n\t\t() =>\n\t\t{\n\t\t\t// noinspection JSDeprecatedSymbols, JSUnresolvedReference\n\t\t\t/** navigator.userAgentData.mobile doesn't return the correct value on some platforms, so this is a work-around, code from: http://detectmobilebrowsers.com **/\n\t\t\tconst a = STRING(globalThis?.navigator?.userAgent || globalThis?.navigator?.vendor || globalThis?.opera || '');\n\t\t\tconst b = a.substring(0, 4);\n\t\t\treturn !!(\n\t\t\t\t/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series([46])0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n\t\t\t\t\t.test(a) ||\n\t\t\t\t/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \\-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i\n\t\t\t\t\t.test(b)\n\t\t\t);\n\t\t},\n\t\n\t/**\n\t * Returns true if the user has a cursor (mouse, touchpad, etc).\n\t * In this context, a cursor is defined as an input device that can hover over elements without necessarily interacting with them.\n\t *\n\t * @returns {boolean}\n\t */\n\tplatformHasCursor:\n\t\t() =>\n\t\t{\n\t\t\treturn !LeUtils.platformIsMobile() && !globalThis?.matchMedia?.('(any-hover: none)')?.matches;\n\t\t},\n\t\n\t/**\n\t * Returns the given string, with the first character capitalized.\n\t *\n\t * @param {String} string\n\t * @returns {string}\n\t */\n\tcapitalize:\n\t\t(string) =>\n\t\t{\n\t\t\tstring = STRING(string).trim();\n\t\t\tif(string.length <= 0)\n\t\t\t{\n\t\t\t\treturn string;\n\t\t\t}\n\t\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\n\t\t},\n\t\n\t/**\n\t * Returns true if the given string ends with any of the given characters or words.\n\t *\n\t * @param {string} string\n\t * @param {string|string[]} endingCharsStringOrArray\n\t * @returns {boolean}\n\t */\n\tendsWithAny:\n\t\t(string, endingCharsStringOrArray) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\tlet endingCharsArray;\n\t\t\tif(Array.isArray(endingCharsStringOrArray))\n\t\t\t{\n\t\t\t\tendingCharsArray = endingCharsStringOrArray;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tendingCharsArray = STRING(endingCharsStringOrArray).split('');\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tLeUtils.each(endingCharsArray, (chars) =>\n\t\t\t{\n\t\t\t\tif(string.endsWith(STRING(chars)))\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Returns true if the given string starts with any of the given characters or words.\n\t *\n\t * @param {string} string\n\t * @param {string|string[]} startingCharsStringOrArray\n\t * @returns {boolean}\n\t */\n\tstartsWithAny:\n\t\t(string, startingCharsStringOrArray) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\tlet startingCharsArray;\n\t\t\tif(Array.isArray(startingCharsStringOrArray))\n\t\t\t{\n\t\t\t\tstartingCharsArray = startingCharsStringOrArray;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstartingCharsArray = STRING(startingCharsStringOrArray).split('');\n\t\t\t}\n\t\t\tlet result = false;\n\t\t\tLeUtils.each(startingCharsArray, (chars) =>\n\t\t\t{\n\t\t\t\tif(string.startsWith(STRING(chars)))\n\t\t\t\t{\n\t\t\t\t\tresult = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * Trims the end of the given string, by removing the given characters from it.\n\t *\n\t * @param {string} string\n\t * @param {string|string[]} trimCharsStringOrArray\n\t */\n\ttrimEnd:\n\t\t(string, trimCharsStringOrArray) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\tlet endingCharsArray;\n\t\t\tif(Array.isArray(trimCharsStringOrArray))\n\t\t\t{\n\t\t\t\tendingCharsArray = trimCharsStringOrArray;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tendingCharsArray = STRING(trimCharsStringOrArray).split('');\n\t\t\t}\n\t\t\tconst trimChars = (chars) =>\n\t\t\t{\n\t\t\t\tchars = STRING(chars);\n\t\t\t\tif(string.endsWith(chars))\n\t\t\t\t{\n\t\t\t\t\tstring = string.substring(0, string.length - chars.length);\n\t\t\t\t\trun = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet run = true;\n\t\t\twhile(run)\n\t\t\t{\n\t\t\t\trun = false;\n\t\t\t\tLeUtils.each(endingCharsArray, trimChars);\n\t\t\t}\n\t\t\treturn string;\n\t\t},\n\t\n\t/**\n\t * Trims the start of the given string, by removing the given characters from it.\n\t *\n\t * @param {string} string\n\t * @param {string|string[]} trimCharsStringOrArray\n\t */\n\ttrimStart:\n\t\t(string, trimCharsStringOrArray) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\tlet startingCharsArray;\n\t\t\tif(Array.isArray(trimCharsStringOrArray))\n\t\t\t{\n\t\t\t\tstartingCharsArray = trimCharsStringOrArray;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstartingCharsArray = STRING(trimCharsStringOrArray).split('');\n\t\t\t}\n\t\t\tconst trimChars = (chars) =>\n\t\t\t{\n\t\t\t\tchars = STRING(chars);\n\t\t\t\tif(string.startsWith(chars))\n\t\t\t\t{\n\t\t\t\t\tstring = string.substring(chars.length);\n\t\t\t\t\trun = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet run = true;\n\t\t\twhile(run)\n\t\t\t{\n\t\t\t\trun = false;\n\t\t\t\tLeUtils.each(startingCharsArray, trimChars);\n\t\t\t}\n\t\t\treturn string;\n\t\t},\n\t\n\t/**\n\t * Trims the start and end of the given string, by removing the given characters from it.\n\t *\n\t * @param {string} string\n\t * @param {string|string[]} trimCharsStringOrArray\n\t */\n\ttrim:\n\t\t(string, trimCharsStringOrArray) => LeUtils.trimEnd(LeUtils.trimStart(string, trimCharsStringOrArray), trimCharsStringOrArray),\n\t\n\t/**\n\t * Returns the given string, trims the start and end, and makes sure it ends with a valid sentence ending character (such as !?;.).\n\t *\n\t * @param {string} sentence\n\t * @returns {string}\n\t */\n\tpurgeSentence:\n\t\t(sentence) =>\n\t\t{\n\t\t\tsentence = LeUtils.trimEnd(STRING(sentence).trim(), '.: \\r\\n\\t');\n\t\t\tsentence += (LeUtils.endsWithAny(sentence, '!?;') ? '' : '.');\n\t\t\treturn sentence;\n\t\t},\n\t\n\t/**\n\t * Attempts to obtain and return an error message from the given error, regardless of what is passed to this function.\n\t *\n\t * @param {*} error\n\t * @returns {string}\n\t */\n\tpurgeErrorMessage:\n\t\t(error) =>\n\t\t{\n\t\t\tif(error?.message)\n\t\t\t{\n\t\t\t\terror = error.message;\n\t\t\t}\n\t\t\tif(typeof error === 'string')\n\t\t\t{\n\t\t\t\tconst errorParts = error.split('threw an error:');\n\t\t\t\terror = errorParts[errorParts.length - 1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\terror = JSON.stringify(error);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\terror = 'An unknown error occurred';\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn error.trim();\n\t\t},\n\t\n\t/**\n\t * Generates all permutations of the given names.\n\t *\n\t * For example, if you pass \"foo\" and \"bar\", it will return:\n\t * - foobar\n\t * - fooBar\n\t * - FooBar\n\t * - foo-bar\n\t * - foo_bar\n\t *\n\t * @param {string[]} names\n\t * @returns {string[]}\n\t */\n\tgenerateNamePermutations:\n\t\t(...names) =>\n\t\t{\n\t\t\tnames = LeUtils.flattenToArray(names)\n\t\t\t\t.map(name => STRING(name).trim().toLowerCase())\n\t\t\t\t.filter(name => (name.length > 0));\n\t\t\tlet results = [];\n\t\t\tif(names.length > 0)\n\t\t\t{\n\t\t\t\tresults.push(names.join('')); //foobar\n\t\t\t\tresults.push(names.map(LeUtils.capitalize).join('')); //FooBar\n\t\t\t}\n\t\t\tif(names.length > 1)\n\t\t\t{\n\t\t\t\tresults.push([names[0]].concat(names.slice(1).map(LeUtils.capitalize)).join('')); //fooBar\n\t\t\t\tresults.push(names.join('-')); //foo-bar\n\t\t\t\tresults.push(names.join('_')); //foo_bar\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\n\t/**\n\t * Increases the given numeric string by 1, this allows you to increase a numeric string without a limit.\n\t *\n\t * @param {string} string\n\t * @returns {string}\n\t */\n\tincreaseNumericStringByOne:\n\t\t(string) =>\n\t\t{\n\t\t\tif(typeof string !== 'string')\n\t\t\t{\n\t\t\t\tstring = '' + string;\n\t\t\t\tfor(let i = string.length - 1; i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tconst c = string.charAt(i);\n\t\t\t\t\tif((c < '0') || (c > '9'))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn '1';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(string === '')\n\t\t\t{\n\t\t\t\treturn '1';\n\t\t\t}\n\t\t\tfor(let i = string.length - 1; i >= 0; i--)\n\t\t\t{\n\t\t\t\tlet c = string.charAt(i);\n\t\t\t\tif((c < '0') || (c > '9'))\n\t\t\t\t{\n\t\t\t\t\treturn '1';\n\t\t\t\t}\n\t\t\t\tif(c < '9')\n\t\t\t\t{\n\t\t\t\t\tc = String.fromCharCode(c.charCodeAt(0) + 1);\n\t\t\t\t\tstring = string.substring(0, i) + c + string.substring(i + 1);// string[i] = (char + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tstring = string.substring(0, i) + '0' + string.substring(i + 1);// string[i] = '0';\n\t\t\t}\n\t\t\tif(string.charAt(0) === '0')\n\t\t\t{\n\t\t\t\tstring = '1' + string;\n\t\t\t}\n\t\t\treturn string;\n\t\t},\n\t\n\t/**\n\t * Generates a base64 string (with +/ replaced by -_) that is guaranteed to be unique.\n\t *\n\t * @returns {string}\n\t */\n\tuniqueId:\n\t\t(() =>\n\t\t{\n\t\t\tlet previousUniqueIdsTime = null;\n\t\t\tlet previousUniqueIds = new Map();\n\t\t\t\n\t\t\tconst numberToBytes = (number) =>\n\t\t\t{\n\t\t\t\tconst size = (number === 0) ? 0 : Math.ceil((Math.floor(Math.log2(number)) + 1) / 8);\n\t\t\t\tconst bytes = new Uint8ClampedArray(size);\n\t\t\t\tlet x = number;\n\t\t\t\tfor(let i = (size - 1); i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tconst rightByte = x & 0xff;\n\t\t\t\t\tbytes[i] = rightByte;\n\t\t\t\t\tx = Math.floor(x / 0x100);\n\t\t\t\t}\n\t\t\t\treturn bytes;\n\t\t\t};\n\t\t\t\n\t\t\tconst generateUniqueId = () =>\n\t\t\t{\n\t\t\t\tlet now;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t// noinspection JSDeprecatedSymbols\n\t\t\t\t\tnow = (globalThis?.performance?.timeOrigin || globalThis?.performance?.timing?.navigationStart || 0) + (globalThis?.performance?.now?.() ?? 0);\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t}\n\t\t\t\tnow = now || (Date.now ? Date.now() : (new Date()).getTime());\n\t\t\t\tnow = Math.round(now);\n\t\t\t\tconst nowBytes = numberToBytes(now);\n\t\t\t\t\n\t\t\t\tlet uuid = null;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tuuid = crypto?.randomUUID();\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(uuid)\n\t\t\t\t{\n\t\t\t\t\tuuid = LeUtils.base64ToBytes(LeUtils.hexToBase64(uuid));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconst bytesChunkA = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));\n\t\t\t\t\tconst bytesChunkB = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));\n\t\t\t\t\tconst bytesChunkC = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));\n\t\t\t\t\tconst bytesChunkD = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));\n\t\t\t\t\tuuid = new Uint8Array(bytesChunkA.length + bytesChunkB.length + bytesChunkC.length + bytesChunkD.length);\n\t\t\t\t\tuuid.set(bytesChunkA, 0);\n\t\t\t\t\tuuid.set(bytesChunkB, bytesChunkA.length);\n\t\t\t\t\tuuid.set(bytesChunkC, bytesChunkA.length + bytesChunkB.length);\n\t\t\t\t\tuuid.set(bytesChunkD, bytesChunkA.length + bytesChunkB.length + bytesChunkC.length);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst bytes = new Uint8Array(nowBytes.length + uuid.length);\n\t\t\t\tbytes.set(nowBytes, 0);\n\t\t\t\tbytes.set(uuid, nowBytes.length);\n\t\t\t\tuuid = LeUtils.bytesToBase64(bytes).replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\ttime:now,\n\t\t\t\t\tid: uuid,\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\treturn () =>\n\t\t\t{\n\t\t\t\twhile(true)\n\t\t\t\t{\n\t\t\t\t\tconst result = generateUniqueId();\n\t\t\t\t\tif(previousUniqueIdsTime !== result.time)\n\t\t\t\t\t{\n\t\t\t\t\t\tpreviousUniqueIdsTime = result.time;\n\t\t\t\t\t\tpreviousUniqueIds.clear();\n\t\t\t\t\t\tpreviousUniqueIds.set(result.id, true);\n\t\t\t\t\t\treturn result.id;\n\t\t\t\t\t}\n\t\t\t\t\telse if(previousUniqueIds.get(result.id) !== true)\n\t\t\t\t\t{\n\t\t\t\t\t\tpreviousUniqueIds.set(result.id, true);\n\t\t\t\t\t\treturn result.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Generates a base64 string (with +/ replaced by -_) of the current time (in milliseconds since 1970).\n\t *\n\t * @param {number} [now] Optional time to use instead of the current time. If not set, the current time will be used.\n\t * @returns {string}\n\t */\n\ttimestamp:\n\t\t(() =>\n\t\t{\n\t\t\tconst numberToBytes = (number) =>\n\t\t\t{\n\t\t\t\tconst size = (number === 0) ? 0 : Math.ceil((Math.floor(Math.log2(number)) + 1) / 8);\n\t\t\t\tconst bytes = new Uint8ClampedArray(size);\n\t\t\t\tlet x = number;\n\t\t\t\tfor(let i = (size - 1); i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tconst rightByte = x & 0xff;\n\t\t\t\t\tbytes[i] = rightByte;\n\t\t\t\t\tx = Math.floor(x / 0x100);\n\t\t\t\t}\n\t\t\t\treturn bytes;\n\t\t\t};\n\t\t\t\n\t\t\treturn (/** @type {number|null|undefined} */ now = null) =>\n\t\t\t{\n\t\t\t\tif(ISSET(now))\n\t\t\t\t{\n\t\t\t\t\tnow = FLOAT_LAX(now);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\t// noinspection JSDeprecatedSymbols\n\t\t\t\t\t\tnow = (performance?.timeOrigin || performance?.timing?.navigationStart || 0) + (performance?.now?.() ?? 0);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(e)\n\t\t\t\t\t{\n\t\t\t\t\t}\n\t\t\t\t\tnow = now || (Date.now ? Date.now() : (new Date()).getTime());\n\t\t\t\t}\n\t\t\t\tnow = Math.round(now);\n\t\t\t\tconst nowBytes = numberToBytes(now);\n\t\t\t\t\n\t\t\t\treturn LeUtils.bytesToBase64(nowBytes).replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns a data URL of a 1x1 transparent pixel.\n\t *\n\t * @returns {string}\n\t */\n\tgetEmptyImageSrc:\n\t\t() =>\n\t\t{\n\t\t\t// noinspection SpellCheckingInspection\n\t\t\treturn 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n\t\t},\n\t\n\t/**\n\t * Calculates and returns the percentage of the part and total ((part / total) * 100).\n\t *\n\t * @param {number|string} part\n\t * @param {number|string} total\n\t * @returns {number}\n\t */\n\tgetPercentage:\n\t\t(part, total) =>\n\t\t{\n\t\t\tpart = FLOAT_LAX(part);\n\t\t\ttotal = FLOAT_LAX(total);\n\t\t\tif(total === 0)\n\t\t\t{\n\t\t\t\treturn 100;\n\t\t\t}\n\t\t\treturn Math.max(0, Math.min(100, ((part / total) * 100)));\n\t\t},\n\t\n\t/**\n\t * Returns the pixels of the given Image object.\n\t *\n\t * @param {HTMLImageElement} image\n\t * @returns {Uint8ClampedArray}\n\t */\n\tgetImagePixels:\n\t\t(image) =>\n\t\t{\n\t\t\tif(!globalThis?.document?.createElement || !globalThis?.document?.body?.appendChild)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.getImagePixels: Document is not available, returning empty pixels.');\n\t\t\t\treturn new Uint8ClampedArray();\n\t\t\t}\n\t\t\tconst canvas = globalThis.document.createElement('canvas');\n\t\t\tglobalThis.document.body.appendChild(canvas);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst ctx = canvas.getContext('2d');\n\t\t\t\tconst width = Math.floor(image.width);\n\t\t\t\tconst height = Math.floor(image.height);\n\t\t\t\tif(!ctx || (width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\treturn new Uint8ClampedArray();\n\t\t\t\t}\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\treturn ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tcanvas?.parentNode?.removeChild(canvas);\n\t\t\t}\n\t\t},\n\t\n\t/**\n\t * Returns the data URL (mimetype \"image/png\") of a colored version of the given Image object.\n\t *\n\t * @param {HTMLImageElement} image\n\t * @param {string} color\n\t * @returns {string}\n\t */\n\tgetColoredImage:\n\t\t(image, color) =>\n\t\t{\n\t\t\tif(!globalThis?.document?.createElement || !globalThis?.document?.body?.appendChild)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.getColoredImage: Document is not available, returning empty image src.');\n\t\t\t\treturn LeUtils.getEmptyImageSrc();\n\t\t\t}\n\t\t\tconst canvas = globalThis.document.createElement('canvas');\n\t\t\tglobalThis.document.body.appendChild(canvas);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst ctx = canvas.getContext('2d');\n\t\t\t\tconst width = Math.floor(image.width);\n\t\t\t\tconst height = Math.floor(image.height);\n\t\t\t\tif(!ctx || (width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\treturn LeUtils.getEmptyImageSrc();\n\t\t\t\t}\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\tctx.globalCompositeOperation = 'source-in';\n\t\t\t\tctx.fillStyle = color;\n\t\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\n\t\t\t\treturn canvas.toDataURL('image/png');\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tcanvas?.parentNode?.removeChild(canvas);\n\t\t\t}\n\t\t},\n\t\n\t/**\n\t * Returns the hex color of the given RGB(A).\n\t *\n\t * @param {number[]} rgb\n\t * @returns {string}\n\t */\n\trgbToHex:\n\t\t(rgb) =>\n\t\t{\n\t\t\treturn '#' + rgb.map((x) =>\n\t\t\t{\n\t\t\t\tconst hex = x.toString(16);\n\t\t\t\treturn ((hex.length === 1) ? '0' + hex : hex);\n\t\t\t}).join('');\n\t\t},\n\t\n\t/**\n\t * Returns the RGB(A) of the given hex color.\n\t *\n\t * @param {string} hexstring\n\t * @returns {number[]}\n\t */\n\thexToRgb:\n\t\t(hexstring) =>\n\t\t{\n\t\t\tconst initialHexstring = hexstring;\n\t\t\thexstring = hexstring.replace(/[^0-9A-F]/gi, '');\n\t\t\tconst hasAlpha = ((hexstring.length === 4) || (hexstring.length === 8));\n\t\t\twhile(hexstring.length < 6)\n\t\t\t{\n\t\t\t\thexstring = hexstring.replace(/(.)/g, '$1$1');\n\t\t\t}\n\t\t\tconst result = hexstring.match(/\\w{2}/g)?.map((a) => parseInt(a, 16));\n\t\t\tif(!result || (result.length < 3))\n\t\t\t{\n\t\t\t\tthrow new Error('Invalid hex color: \"' + hexstring + '\" (was given \"' + initialHexstring + '\")');\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tresult[0],\n\t\t\t\tresult[1],\n\t\t\t\tresult[2],\n\t\t\t\t...(hasAlpha ? [result[3]] : []),\n\t\t\t];\n\t\t},\n\t\n\t/**\n\t * Returns the HSL(A) of the given RGB(A).\n\t *\n\t * @param {number[]} rgb\n\t * @returns {number[]}\n\t */\n\trgbToHsl:\n\t\t(rgb) =>\n\t\t{\n\t\t\tconst r = rgb[0] / 255;\n\t\t\tconst g = rgb[1] / 255;\n\t\t\tconst b = rgb[2] / 255;\n\t\t\tconst max = Math.max(r, g, b);\n\t\t\tconst min = Math.min(r, g, b);\n\t\t\tlet h = 0;\n\t\t\tlet s = 0;\n\t\t\tlet l = (max + min) / 2;\n\t\t\tif(max !== min)\n\t\t\t{\n\t\t\t\tconst d = max - min;\n\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\tswitch(max)\n\t\t\t\t{\n\t\t\t\t\tcase r:\n\t\t\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase g:\n\t\t\t\t\t\th = (b - r) / d + 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase b:\n\t\t\t\t\t\th = (r - g) / d + 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\th /= 6;\n\t\t\t}\n\t\t\treturn [h, s, l, ...((rgb.length >= 4) ? [rgb[3] / 255] : [])];\n\t\t},\n\t\n\t/**\n\t * Returns the RGB(A) of the given HSL(A).\n\t *\n\t * @param {number[]} hsl\n\t * @returns {number[]}\n\t */\n\thslToRgb:\n\t\t(() =>\n\t\t{\n\t\t\tconst hue2rgb = (p, q, t) =>\n\t\t\t{\n\t\t\t\tif(t < 0)\n\t\t\t\t{\n\t\t\t\t\tt += 1;\n\t\t\t\t}\n\t\t\t\tif(t > 1)\n\t\t\t\t{\n\t\t\t\t\tt -= 1;\n\t\t\t\t}\n\t\t\t\tif(t < 1 / 6)\n\t\t\t\t{\n\t\t\t\t\treturn p + (q - p) * 6 * t;\n\t\t\t\t}\n\t\t\t\tif(t < 1 / 2)\n\t\t\t\t{\n\t\t\t\t\treturn q;\n\t\t\t\t}\n\t\t\t\tif(t < 2 / 3)\n\t\t\t\t{\n\t\t\t\t\treturn p + (q - p) * (2 / 3 - t) * 6;\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t};\n\t\t\treturn (hsl) =>\n\t\t\t{\n\t\t\t\tconst h = hsl[0];\n\t\t\t\tconst s = hsl[1];\n\t\t\t\tconst l = hsl[2];\n\t\t\t\tlet r = 1;\n\t\t\t\tlet g = 1;\n\t\t\t\tlet b = 1;\n\t\t\t\tif(s !== 0)\n\t\t\t\t{\n\t\t\t\t\tconst q = (l < 0.5) ? (l * (1 + s)) : (l + s - (l * s));\n\t\t\t\t\tconst p = (2 * l) - q;\n\t\t\t\t\tr = hue2rgb(p, q, h + (1 / 3));\n\t\t\t\t\tg = hue2rgb(p, q, h);\n\t\t\t\t\tb = hue2rgb(p, q, h - (1 / 3));\n\t\t\t\t}\n\t\t\t\treturn [r * 255, g * 255, b * 255, ...((hsl.length >= 4) ? [hsl[3] * 255] : [])].map((c) => Math.max(0, Math.min(255, Math.round(c))));\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns the LAB(A) of the given RGB(A).\n\t *\n\t * @param {number[]} rgb\n\t * @returns {number[]}\n\t */\n\trgbToLab:\n\t\t(rgb) =>\n\t\t{\n\t\t\tlet r = rgb[0] / 255;\n\t\t\tlet g = rgb[1] / 255;\n\t\t\tlet b = rgb[2] / 255;\n\t\t\tr = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : (r / 12.92);\n\t\t\tg = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : (g / 12.92);\n\t\t\tb = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : (b / 12.92);\n\t\t\tlet x = ((r * 0.4124) + (g * 0.3576) + (b * 0.1805)) / 0.95047;\n\t\t\tlet y = ((r * 0.2126) + (g * 0.7152) + (b * 0.0722));\n\t\t\tlet z = ((r * 0.0193) + (g * 0.1192) + (b * 0.9505)) / 1.08883;\n\t\t\tx = (x > 0.008856) ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\t\t\ty = (y > 0.008856) ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\t\t\tz = (z > 0.008856) ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\t\t\treturn [(116 * y) - 16, 500 * (x - y), 200 * (y - z), ...((rgb.length >= 4) ? [rgb[3] / 255] : [])];\n\t\t},\n\t\n\t/**\n\t * Returns the difference (calculated with DeltaE) of the LAB values of the given RGB values.\n\t *\n\t * Returns a number:\n\t *\n\t * ```js\n\t * < 1 is not perceptible by human eyes\n\t * 1-2 is perceptible through close observation\n\t * 2-10 is perceptible at a glance\n\t * 11-49 is more similar than opposite\n\t * 100 is exactly the opposite color\n\t * ```\n\t *\n\t * @param {number[]} rgbA\n\t * @param {number[]} rgbB\n\t * @returns {number}\n\t */\n\tgetDifferenceBetweenRgb:\n\t\t(rgbA, rgbB) =>\n\t\t{\n\t\t\tconst labA = LeUtils.rgbToLab(rgbA);\n\t\t\tconst labB = LeUtils.rgbToLab(rgbB);\n\t\t\treturn LeUtils.getDifferenceBetweenLab(labA, labB);\n\t\t},\n\t\n\t/**\n\t * Returns the difference (calculated with DeltaE) of the given LAB values. Ignores the Alpha channel.\n\t *\n\t * Returns a number:\n\t *\n\t * ```js\n\t * < 1 is not perceptible by human eyes\n\t * 1-2 is perceptible through close observation\n\t * 2-10 is perceptible at a glance\n\t * 11-49 is more similar than opposite\n\t * 100 is exactly the opposite color\n\t * ```\n\t *\n\t * @param {number[]} labA\n\t * @param {number[]} labB\n\t * @returns {number}\n\t */\n\tgetDifferenceBetweenLab:\n\t\t(labA, labB) =>\n\t\t{\n\t\t\tconst deltaL = labA[0] - labB[0];\n\t\t\tconst deltaA = labA[1] - labB[1];\n\t\t\tconst deltaB = labA[2] - labB[2];\n\t\t\tconst c1 = Math.sqrt(labA[1] * labA[1] + labA[2] * labA[2]);\n\t\t\tconst c2 = Math.sqrt(labB[1] * labB[1] + labB[2] * labB[2]);\n\t\t\tconst deltaC = c1 - c2;\n\t\t\tlet deltaH = deltaA * deltaA + deltaB * deltaB - deltaC * deltaC;\n\t\t\tdeltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH);\n\t\t\tconst sc = 1.0 + 0.045 * c1;\n\t\t\tconst sh = 1.0 + 0.015 * c1;\n\t\t\tconst deltaLKlsl = deltaL / (1.0);\n\t\t\tconst deltaCkcsc = deltaC / (sc);\n\t\t\tconst deltaHkhsh = deltaH / (sh);\n\t\t\tconst i = deltaLKlsl * deltaLKlsl + deltaCkcsc * deltaCkcsc + deltaHkhsh * deltaHkhsh;\n\t\t\treturn (i < 0) ? 0 : Math.sqrt(i);\n\t\t},\n\t\n\t/**\n\t * Returns the RGB(A) of the given RGB(A) values, based on the given percentage (0-100).\n\t * This allows you to define a gradient of colors to fade in between, rather than just having a start and an end color.\n\t *\n\t * Usage:\n\t *\n\t * ```js\n\t * LeUtils.getRgbOfGradient({\n\t * 0: [255, 0, 0],\n\t * 33: [255, 255, 0],\n\t * 66: [0, 255, 0],\n\t * 100:[0, 255, 255],\n\t * }, 45.1234);\n\t * ```\n\t *\n\t * @param {{percentage?:number[]}} gradient\n\t * @param {number} percentage\n\t * @returns {number[]}\n\t */\n\tgetRgbOfGradient:\n\t\t(gradient, percentage) =>\n\t\t{\n\t\t\tpercentage = Math.max(0, Math.min(100, FLOAT_LAX(percentage)));\n\t\t\t\n\t\t\tlet closest = null;\n\t\t\tLeUtils.each(gradient, (color, percent) =>\n\t\t\t{\n\t\t\t\tpercent = INT_LAX(percent);\n\t\t\t\tif(closest === null)\n\t\t\t\t{\n\t\t\t\t\tclosest = [percent, Math.abs(percentage - percent)];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconst difference = Math.abs(percentage - percent);\n\t\t\t\t\tif(difference < closest[1])\n\t\t\t\t\t{\n\t\t\t\t\t\tclosest = [percent, difference];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(closest === null)\n\t\t\t{\n\t\t\t\treturn [0, 0, 0];\n\t\t\t}\n\t\t\tclosest = closest[0];\n\t\t\t\n\t\t\tconst HIGHER = 99999;\n\t\t\tconst LOWER = -99999;\n\t\t\tlet higher = HIGHER;\n\t\t\tlet lower = LOWER;\n\t\t\tLeUtils.each(gradient, (color, percent) =>\n\t\t\t{\n\t\t\t\tpercent = INT_LAX(percent);\n\t\t\t\tif(percent < closest)\n\t\t\t\t{\n\t\t\t\t\tif(percent > lower)\n\t\t\t\t\t{\n\t\t\t\t\t\tlower = percent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(percent > closest)\n\t\t\t\t{\n\t\t\t\t\tif(percent < higher)\n\t\t\t\t\t{\n\t\t\t\t\t\thigher = percent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(((higher === HIGHER) && (lower === LOWER)) || (higher === lower))\n\t\t\t{\n\t\t\t\treturn gradient[closest];\n\t\t\t}\n\t\t\telse if((higher !== HIGHER) && (lower !== LOWER))\n\t\t\t{\n\t\t\t\tconst higherDifference = Math.abs(higher - percentage);\n\t\t\t\tconst lowerDifference = Math.abs(percentage - lower);\n\t\t\t\tif(higherDifference > lowerDifference)\n\t\t\t\t{\n\t\t\t\t\thigher = closest;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlower = closest;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(lower === LOWER)\n\t\t\t{\n\t\t\t\tlower = closest;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thigher = closest;\n\t\t\t}\n\t\t\t\n\t\t\tif(lower > higher)\n\t\t\t{\n\t\t\t\tconst tmp = higher;\n\t\t\t\thigher = lower;\n\t\t\t\tlower = tmp;\n\t\t\t}\n\t\t\t\n\t\t\tconst total = (higher - lower);\n\t\t\tconst part = (percentage - lower);\n\t\t\treturn LeUtils.getRgbBetween(gradient[lower], gradient[higher], ((part / total) * 100));\n\t\t},\n\t\n\t/**\n\t * Returns the RGB(A) between the two given RGB(A) values, based on the given percentage (0-100).\n\t *\n\t * @param {number[]} startRgb\n\t * @param {number[]} endRgb\n\t * @param {number} percentage\n\t * @returns {number[]}\n\t */\n\tgetRgbBetween:\n\t\t(startRgb, endRgb, percentage) =>\n\t\t{\n\t\t\tpercentage = FLOAT_LAX(percentage);\n\t\t\tconst partEnd = Math.max(0, Math.min(1, (percentage / 100.0)));\n\t\t\tconst partStart = (1 - partEnd);\n\t\t\tconst length = Math.min(startRgb.length, endRgb.length);\n\t\t\tlet result = [];\n\t\t\tfor(let i = 0; i < length; i++)\n\t\t\t{\n\t\t\t\tresult.push(Math.max(0, Math.min(255, Math.round((startRgb[i] * partStart) + (endRgb[i] * partEnd)))));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * An implementation of the btoa function, which should work in all environments.\n\t *\n\t * @param {string} string\n\t * @returns {string}\n\t */\n\tbtoa:\n\t\t(string) =>\n\t\t{\n\t\t\tif(typeof globalThis?.btoa === 'function')\n\t\t\t{\n\t\t\t\treturn globalThis.btoa(string);\n\t\t\t}\n\t\t\tif(typeof globalThis?.Buffer?.from === 'function')\n\t\t\t{\n\t\t\t\treturn globalThis.Buffer.from(string).toString('base64');\n\t\t\t}\n\t\t\tthrow new Error('LeUtils.btoa: No btoa implementation found in this environment.');\n\t\t},\n\t\n\t/**\n\t * An implementation of the atob function, which should work in all environments.\n\t *\n\t * @param {string} base64string\n\t * @returns {string}\n\t */\n\tatob:\n\t\t(base64string) =>\n\t\t{\n\t\t\tif(typeof globalThis?.atob === 'function')\n\t\t\t{\n\t\t\t\treturn globalThis.atob(base64string);\n\t\t\t}\n\t\t\tif(typeof globalThis?.Buffer?.from === 'function')\n\t\t\t{\n\t\t\t\treturn globalThis.Buffer.from(base64string, 'base64').toString();\n\t\t\t}\n\t\t\tthrow new Error('LeUtils.atob: No atob implementation found in this environment.');\n\t\t},\n\t\n\t/**\n\t * Encodes a UTF-8 string into a base64 string.\n\t *\n\t * @param {string} string\n\t * @returns {string}\n\t */\n\tutf8ToBase64:\n\t\t(string) =>\n\t\t{\n\t\t\treturn LeUtils.btoa(encodeURIComponent(string).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(parseInt(p1, 16))));\n\t\t},\n\t\n\t/**\n\t * Decodes a base64 string back into a UTF-8 string.\n\t *\n\t * @param {string} base64string\n\t * @returns {string}\n\t */\n\tbase64ToUtf8:\n\t\t(base64string) =>\n\t\t{\n\t\t\treturn decodeURIComponent(LeUtils.atob(base64string.trim()).split('').map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\n\t\t},\n\t\n\t/**\n\t * Converts a base64 string into a hex string.\n\t *\n\t * @param {string} base64string\n\t * @returns {string}\n\t */\n\tbase64ToHex:\n\t\t(base64string) =>\n\t\t{\n\t\t\treturn LeUtils.atob(base64string.trim()).split('').map((c) => ('0' + c.charCodeAt(0).toString(16)).slice(-2)).join('');\n\t\t},\n\t\n\t/**\n\t * Converts a hex string into a base64 string.\n\t *\n\t * @param {string} hexstring\n\t * @returns {string}\n\t */\n\thexToBase64:\n\t\t(hexstring) =>\n\t\t{\n\t\t\tconst hexResult = hexstring.replace(/[^0-9A-F]/gi, '').match(/\\w{2}/g)?.map((a) => String.fromCharCode(parseInt(a, 16)))?.join('');\n\t\t\tif(!hexResult)\n\t\t\t{\n\t\t\t\tthrow new Error('Invalid hex string: \"' + hexstring + '\"');\n\t\t\t}\n\t\t\treturn LeUtils.btoa(hexResult);\n\t\t},\n\t\n\t/**\n\t * Converts a base64 string into bytes (Uint8Array).\n\t *\n\t * @param {string} base64string\n\t * @returns {Uint8Array}\n\t */\n\tbase64ToBytes:\n\t\t(base64string) =>\n\t\t{\n\t\t\tconst binary = LeUtils.atob(base64string.trim());\n\t\t\tconst len = binary.length;\n\t\t\tlet data = new Uint8Array(len);\n\t\t\tfor(let i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tdata[i] = binary.charCodeAt(i);\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t\n\t/**\n\t * Converts bytes into a base64 string.\n\t *\n\t * @param {ArrayLike<number>|ArrayBuffer} arraybuffer\n\t * @returns {string}\n\t */\n\tbytesToBase64:\n\t\t(arraybuffer) =>\n\t\t{\n\t\t\tconst bytes = new Uint8Array(arraybuffer);\n\t\t\tconst len = bytes.byteLength;\n\t\t\tlet binary = '';\n\t\t\tfor(let i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tbinary += String.fromCharCode(bytes[i]);\n\t\t\t}\n\t\t\treturn LeUtils.btoa(binary);\n\t\t},\n\t\n\t/**\n\t * Downloads the given base64 string as a file.\n\t *\n\t * @param {string} base64string\n\t * @param {string} [fileName]\n\t * @param {string} [mimeType]\n\t */\n\tdownloadFile:\n\t\t(base64string, fileName, mimeType) =>\n\t\t{\n\t\t\tif(!globalThis?.document?.createElement)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.downloadFile: Document is not available, cannot download file.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst link = globalThis.document.createElement('a');\n\t\t\tlink.setAttribute('download', (typeof fileName === 'string') ? fileName : 'file');\n\t\t\tlink.href = 'data:' + mimeType + ';base64,' + base64string;\n\t\t\tlink.setAttribute('target', '_blank');\n\t\t\tlink.click();\n\t\t},\n\t\n\t/**\n\t * Loads the value from the browser, returns undefined if the value doesn't exist.\n\t *\n\t * @param {string} id\n\t * @returns {*}\n\t */\n\tlocalStorageGet:\n\t\t(id) =>\n\t\t{\n\t\t\tif(!globalThis?.localStorage?.getItem)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.localStorageGet: LocalStorage is not available, returning undefined.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet result = globalThis.localStorage.getItem('LeUtils_' + id);\n\t\t\tif(typeof result !== 'string')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\treturn JSON.parse(result)?.['-'];\n\t\t\t}\n\t\t\tcatch(e)\n\t\t\t{\n\t\t\t}\n\t\t},\n\t\n\t/**\n\t * Saves the given data in the browser.\n\t *\n\t * @param {string} id\n\t * @param {*} data\n\t */\n\tlocalStorageSet:\n\t\t(id, data) =>\n\t\t{\n\t\t\tif(!globalThis?.localStorage?.setItem)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.localStorageSet: LocalStorage is not available, cannot save data.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof data === 'undefined')\n\t\t\t{\n\t\t\t\tglobalThis.localStorage.removeItem('LeUtils_' + id);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tglobalThis.localStorage.setItem('LeUtils_' + id, JSON.stringify({'-':data}));\n\t\t},\n\t\n\t/**\n\t * Removes the data from the browser.\n\t *\n\t * @param {string} id\n\t */\n\tlocalStorageRemove:\n\t\t(id) =>\n\t\t{\n\t\t\tif(!globalThis?.localStorage?.removeItem)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.localStorageRemove: LocalStorage is not available, cannot remove data.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tglobalThis.localStorage.removeItem('LeUtils_' + id);\n\t\t},\n\t\n\t/**\n\t * Returns whether the current hostname (globalThis.location.hostname) is private (such as localhost, 192.168.1.1, etc).\n\t * This can be used to determine if the app is running in a development environment or not.\n\t *\n\t * Only \"localhost\" and IPv4 addresses are supported. IPv6 addresses will always return false.\n\t *\n\t * @returns {boolean}\n\t */\n\tisCurrentHostPrivate:\n\t\t(() =>\n\t\t{\n\t\t\tlet lastHostname = null;\n\t\t\tlet lastResult = false;\n\t\t\t\n\t\t\treturn () =>\n\t\t\t{\n\t\t\t\tif(!globalThis?.location?.hostname)\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('LeUtils.isCurrentHostPrivate: No location.hostname found, returning false.');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst hostname = globalThis.location.hostname;\n\t\t\t\tif(lastHostname === hostname)\n\t\t\t\t{\n\t\t\t\t\treturn lastResult;\n\t\t\t\t}\n\t\t\t\tlastHostname = hostname;\n\t\t\t\tlastResult = LeUtils.isGivenHostPrivate(lastHostname);\n\t\t\t\treturn lastResult;\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Returns true if the given hostname is private (such as localhost, 192.168.1.1, etc).\n\t *\n\t * Only \"localhost\" and IPv4 addresses are supported. IPv6 addresses will always return false.\n\t *\n\t * @param {string} host\n\t * @returns {boolean}\n\t */\n\tisGivenHostPrivate:\n\t\t(host) =>\n\t\t{\n\t\t\thost = STRING(host).trim();\n\t\t\tif(!host)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\thost = (new URL(host)).hostname;\n\t\t\t}\n\t\t\tcatch(e)\n\t\t\t{\n\t\t\t\thost = host.split(':')[0];\n\t\t\t}\n\t\t\thost = STRING(host).trim().toLowerCase();\n\t\t\t\n\t\t\tif((host === 'localhost') || (host === '127.0.0.1'))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(!/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(host))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst parts = host.split('.');\n\t\t\treturn (parts[0] === '10') || // 10.0.0.0 - 10.255.255.255\n\t\t\t\t((parts[0] === '172') && ((parseInt(parts[1], 10) >= 16) && (parseInt(parts[1], 10) <= 31))) || // 172.16.0.0 - 172.31.255.255\n\t\t\t\t((parts[0] === '192') && (parts[1] === '168')); // 192.168.0.0 - 192.168.255.255\n\t\t},\n\t\n\t/**\n\t * @typedef {Object} LeUtils_TransactionalValue\n\t * @property {*} value\n\t * @property {{id:string, value:*}[]} changes\n\t */\n\t/**\n\t * Creates and returns a new TransactionalValue object.\n\t * With a TransactionalValue, you can keep track of changes to a value, and commit or cancel them.\n\t *\n\t * Multiple uncommitted changes can be made at the same time, the last change will be the one that overwrites older changes.\n\t * If that change is cancelled, the previous change will be the one that overwrites older changes.\n\t * This allows you to make multiple unconfirmed changes, and confirm or cancel each of them individually at any time.\n\t *\n\t * @param {*} [value]\n\t * @returns {LeUtils_TransactionalValue}\n\t */\n\tcreateTransactionalValue:\n\t\t(value) =>\n\t\t{\n\t\t\tif(typeof value === 'undefined')\n\t\t\t{\n\t\t\t\tvalue = null;\n\t\t\t}\n\t\t\treturn {value:value, changes:[]};\n\t\t},\n\t\n\t/**\n\t * Returns true if the given value is a valid TransactionalValue, returns false if it isn't.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @returns {boolean}\n\t */\n\tisTransactionalValueValid:\n\t\t(transactionalValue) =>\n\t\t{\n\t\t\treturn ((typeof transactionalValue === 'object') && ('value' in transactionalValue) && ('changes' in transactionalValue) && Array.isArray(transactionalValue.changes));\n\t\t},\n\t\n\t/**\n\t * Returns true if the given value is a TransactionalValue, false otherwise.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @returns {string}\n\t */\n\ttransactionalValueToString:\n\t\t(transactionalValue) =>\n\t\t{\n\t\t\tif(!LeUtils.isTransactionalValueValid(transactionalValue))\n\t\t\t{\n\t\t\t\treturn transactionalValue + '';\n\t\t\t}\n\t\t\tif(transactionalValue.changes.length <= 0)\n\t\t\t{\n\t\t\t\treturn '' + transactionalValue.value;\n\t\t\t}\n\t\t\tlet valuesString = '' + transactionalValue.value;\n\t\t\tfor(let i = 0; i < transactionalValue.changes.length; i++)\n\t\t\t{\n\t\t\t\tvaluesString += ' -> ' + transactionalValue.changes[i].value;\n\t\t\t}\n\t\t\treturn transactionalValue.changes[transactionalValue.changes.length - 1].value + ' (' + valuesString + ')';\n\t\t},\n\t\n\t/**\n\t * Sets the committed value of the given TransactionalValue to the given value. Clears out the previously uncommitted changes.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @param {*} value\n\t */\n\ttransactionSetAndCommit:\n\t\t(transactionalValue, value) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\tif(typeof value === 'undefined')\n\t\t\t{\n\t\t\t\tvalue = null;\n\t\t\t}\n\t\t\ttransactionalValue.value = value;\n\t\t\ttransactionalValue.changes = [];\n\t\t},\n\t\n\t/**\n\t * Sets the value of the given TransactionalValue to the given value, without yet committing it, meaning it can be committed or cancelled later.\n\t * It returns the ID of the change, which can be used to commit or cancel the change later.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @param {*} value\n\t * @returns {string}\n\t */\n\ttransactionSetWithoutCommitting:\n\t\t(transactionalValue, value) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\tif(typeof value === 'undefined')\n\t\t\t{\n\t\t\t\tvalue = null;\n\t\t\t}\n\t\t\tconst id = LeUtils.uniqueId();\n\t\t\ttransactionalValue.changes.push({id:id, value:value});\n\t\t\treturn id;\n\t\t},\n\t\n\t/**\n\t * Commits the change with the given ID, making it the new committed value.\n\t * Returns true if the change was found and committed, returns false if it was already overwritten by a newer committed change.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @param {string} changeId\n\t * @returns {boolean}\n\t */\n\ttransactionCommitChange:\n\t\t(transactionalValue, changeId) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\tconst change = findTransactionalValueChange(transactionalValue, changeId);\n\t\t\tif(change === null)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttransactionalValue.value = change.value;\n\t\t\ttransactionalValue.changes.splice(0, change.index + 1);\n\t\t\treturn true;\n\t\t},\n\t\n\t/**\n\t * Cancels the change with the given ID, removing it from the uncommitted changes.\n\t * Returns true if the change was found and removed, returns false if it was already overwritten by a newer committed change.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @param {string} changeId\n\t * @returns {boolean}\n\t */\n\ttransactionCancelChange:\n\t\t(transactionalValue, changeId) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\tconst change = findTransactionalValueChange(transactionalValue, changeId);\n\t\t\tif(change === null)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttransactionalValue.changes.splice(change.index, 1);\n\t\t\treturn true;\n\t\t},\n\t\n\t/**\n\t * Returns true if the change was found, meaning it can still make a difference to the final committed value of this TransactionalValue.\n\t * Returns false if it was already overwritten by a newer committed change, meaning that this change can no longer make a difference to the final committed value of this TransactionalValue.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @param {string} changeId\n\t * @returns {boolean}\n\t */\n\ttransactionIsChangeRelevant:\n\t\t(transactionalValue, changeId) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\treturn (findTransactionalValueChange(transactionalValue, changeId) !== null);\n\t\t},\n\t\n\t/**\n\t * Returns the committed value of the given TransactionalValue.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @returns {*}\n\t */\n\ttransactionGetCommittedValue:\n\t\t(transactionalValue) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\treturn transactionalValue.value;\n\t\t},\n\t\n\t/**\n\t * Returns the value (including any uncommitted changes made to it) of the given TransactionalValue.\n\t *\n\t * @param {LeUtils_TransactionalValue} transactionalValue\n\t * @returns {*}\n\t */\n\ttransactionGetValue:\n\t\t(transactionalValue) =>\n\t\t{\n\t\t\tcheckTransactionalValue(transactionalValue);\n\t\t\tif(transactionalValue.changes.length <= 0)\n\t\t\t{\n\t\t\t\treturn transactionalValue.value;\n\t\t\t}\n\t\t\treturn transactionalValue.changes[transactionalValue.changes.length - 1].value;\n\t\t},\n\t\n\t/**\n\t * Creates a worker thread. Workers have to be stored at /workers/{workerName}.worker.js for this to work.\n\t *\n\t * Example of a worker file:\n\t *\n\t * ```js\n\t * onmessage = (message) =>\n\t * {\n\t * postMessage({\n\t * ...message.data,\n\t * results: ['...some expensive calculation involving message.data...'],\n\t * });\n\t * };\n\t * ```\n\t *\n\t * Usage:\n\t *\n\t * ```js\n\t * const {results} = await (async () =>\n\t * {\n\t * try\n\t * {\n\t * return await LeUtils.sendWorkerMessage('my-worker', {someData:[1, 2, 3, 4, 5]});\n\t * }\n\t * catch(error)\n\t * {\n\t * console.error('MyWorker: ', error);\n\t * return {results:[]};\n\t * }\n\t * })();\n\t * ```\n\t *\n\t * or, if you want more control over the number of threads you have (the above example will only create 1 thread per worker):\n\t *\n\t * ```js\n\t * const myWorker1 = LeUtils.createWorkerThread('my-worker'); // creates a thread, you can create multiple worker threads of the same worker, to run multiple instances in parallel\n\t * const myWorker2 = LeUtils.createWorkerThread('my-worker'); // same worker, another thread\n\t * const {results} = await (async () =>\n\t * {\n\t * try\n\t * {\n\t * return await myWorker1.sendMessage({someData:[1, 2, 3, 4, 5]});\n\t * }\n\t * catch(error)\n\t * {\n\t * console.error('MyWorker: ', error);\n\t * return {results:[]};\n\t * }\n\t * })();\n\t * ```\n\t *\n\t * @param {string} name\n\t * @returns {{worker:Worker|null, sendMessage:(data:Object,options:{timeout:number|undefined}|undefined)=>Promise<Object>}}\n\t */\n\tcreateWorkerThread:\n\t\t(name) =>\n\t\t{\n\t\t\tif(!globalThis?.Worker)\n\t\t\t{\n\t\t\t\tconsole.warn('LeUtils.createWorkerThread: Workers are not supported in this environment, returning a dummy worker.');\n\t\t\t\treturn {\n\t\t\t\t\tworker: null,\n\t\t\t\t\tsendMessage:(data, options) => new Promise((resolve, reject) =>\n\t\t\t\t\t{\n\t\t\t\t\t\treject('Workers are not supported in this environment');\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tconst worker = new globalThis.Worker('/workers/' + name + '.worker.js');\n\t\t\tlet listeners = new Map();\n\t\t\t\n\t\t\tconst addListener = (id, callback) =>\n\t\t\t{\n\t\t\t\tlisteners.set(id, callback);\n\t\t\t};\n\t\t\t\n\t\t\tconst removeListener = (id) =>\n\t\t\t{\n\t\t\t\tlisteners.delete(id);\n\t\t\t};\n\t\t\t\n\t\t\tconst sendMessage = (data, options) =>\n\t\t\t{\n\t\t\t\treturn new Promise((resolve, reject) =>\n\t\t\t\t{\n\t\t\t\t\tconst id = LeUtils.uniqueId();\n\t\t\t\t\taddListener(id, resolve);\n\t\t\t\t\tsetTimeout(() =>\n\t\t\t\t\t{\n\t\t\t\t\t\tremoveListener(id);\n\t\t\t\t\t\treject('timeout');\n\t\t\t\t\t}, options?.timeout ?? 10000);\n\t\t\t\t\t\n\t\t\t\t\tworker.postMessage({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t...data,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\tworker.onerror = (error) =>\n\t\t\t{\n\t\t\t\tconsole.error('Worker ' + name + ':', error);\n\t\t\t};\n\t\t\tworker.onmessage = (message) =>\n\t\t\t{\n\t\t\t\tconst data = message.data;\n\t\t\t\tif(data?.id)\n\t\t\t\t{\n\t\t\t\t\tconst callback = listeners.get(data.id);\n\t\t\t\t\tif(callback)\n\t\t\t\t\t{\n\t\t\t\t\t\tremoveListener(data.id);\n\t\t\t\t\t\tcallback(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\treturn {worker, sendMessage};\n\t\t},\n\t\n\t/**\n\t * Sends a message to the given worker. Creates a worker thread for this worker if it doesn't exist yet.\n\t *\n\t * See {@link LeUtils#createWorkerThread} for more info on how to use workers.\n\t *\n\t * @param {string} workerName\n\t * @param {Object} data\n\t * @param {{timeout:number|undefined}} [options]\n\t * @returns {Promise<Object>}\n\t */\n\tsendWorkerMessage:\n\t\t(() =>\n\t\t{\n\t\t\tconst workers = new Map();\n\t\t\treturn (workerName, data, options) =>\n\t\t\t{\n\t\t\t\tif(!workers.has(workerName))\n\t\t\t\t{\n\t\t\t\t\tworkers.set(workerName, LeUtils.createWorkerThread(workerName));\n\t\t\t\t}\n\t\t\t\treturn workers.get(workerName).sendMessage(data, options);\n\t\t\t};\n\t\t})(),\n\t\n\t/**\n\t * Purges the given email address, returning an empty string if it's invalid.\n\t *\n\t * @param {string} email\n\t * @returns {string}\n\t */\n\tpurgeEmail:\n\t\t(email) =>\n\t\t{\n\t\t\temail = STRING(email).trim().toLowerCase().replace(/\\s/g, '');\n\t\t\tif(!email.includes('@') || !email.includes('.'))\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn email;\n\t\t},\n\t\n\t/**\n\t * Returns true if the focus is effectively clear, meaning that the user is not typing in an input field.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFocusClear:(() =>\n\t{\n\t\tconst inputTypes = ['text', 'search', 'email', 'number', 'password', 'tel', 'time', 'url', 'week', 'month', 'date', 'datetime-local'];\n\t\treturn () => !((globalThis?.document?.activeElement?.tagName?.toLowerCase() === 'input') && inputTypes.includes(globalThis?.document?.activeElement?.getAttribute('type')?.toLowerCase() ?? ''));\n\t})(),\n\t\n\t/**\n\t * Returns the user's locale. Returns 'en-US' if it can't be determined.\n\t *\n\t * @returns {string}\n\t */\n\tgetUserLocale:(() =>\n\t{\n\t\tlet userLocale = null;\n\t\treturn () =>\n\t\t{\n\t\t\tif(userLocale === null)\n\t\t\t{\n\t\t\t\tuserLocale = (() =>\n\t\t\t\t{\n\t\t\t\t\tlet locales = globalThis?.navigator?.languages ?? [];\n\t\t\t\t\tif(!IS_ARRAY(locales) || (locales.length <= 0))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn 'en-US';\n\t\t\t\t\t}\n\t\t\t\t\tlocales = locales.filter(locale => ((typeof locale === 'string') && locale.includes('-') && (locale.toLowerCase() !== 'en-us')));\n\t\t\t\t\tif(locales.length <= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn 'en-US';\n\t\t\t\t\t}\n\t\t\t\t\tconst localesNoEnglish = locales.filter(locale => !locale.toLowerCase().startsWith('en-'));\n\t\t\t\t\tif(localesNoEnglish.length <= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn locales[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn localesNoEnglish[0];\n\t\t\t\t})();\n\t\t\t}\n\t\t\treturn userLocale;\n\t\t};\n\t})(),\n\t\n\t/**\n\t * Returns the user's locale date format. Always returns YYYY MM DD, with the character in between depending on the user's locale. Returns 'YYYY/MM/DD' if the user's locale can't be determined.\n\t *\n\t * @returns {string}\n\t */\n\tgetUserLocaleDateFormat:(() =>\n\t{\n\t\tlet userLocaleDateFormat = null;\n\t\treturn () =>\n\t\t{\n\t\t\tif(userLocaleDateFormat === null)\n\t\t\t{\n\t\t\t\tuserLocaleDateFormat = (() =>\n\t\t\t\t{\n\t\t\t\t\tlet char = '/';\n\t\t\t\t\tif(globalThis?.Intl?.DateTimeFormat)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst formattedDate = new globalThis.Intl.DateTimeFormat(LeUtils.getUserLocale()).format();\n\t\t\t\t\t\tif(formattedDate.includes('-'))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchar = '-';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(formattedDate.includes('. '))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchar = '.';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(formattedDate.includes('.'))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchar = '.';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn 'YYYY' + char + 'MM' + char + 'DD';\n\t\t\t\t})();\n\t\t\t}\n\t\t\treturn userLocaleDateFormat;\n\t\t};\n\t})(),\n};\n","/**\n * A simple event emitter class that allows you to register listeners for events, emit events, and remove listeners.\n */\nexport class EventEmitter\n{\n\t/** @type {Map<string, Set<Function>>} */\n\t#events;\n\t\n\t\n\t/**\n\t * Creates a new EventEmitter instance.\n\t */\n\tconstructor()\n\t{\n\t\tthis.#events = new Map();\n\t}\n\t\n\t\n\t/**\n\t * Registers a listener for a specific event.\n\t *\n\t * @param {string} event - The name of the event to listen for.\n\t * @param {Function} listener - The function to call when the event is emitted.\n\t * @returns {{remove:(()=>void)}}\n\t */\n\ton(event, listener)\n\t{\n\t\tif(!this.#events.has(event))\n\t\t{\n\t\t\tthis.#events.set(event, new Set());\n\t\t}\n\t\tthis.#events.get(event)?.add(listener);\n\t\t\n\t\treturn {\n\t\t\tremove:\n\t\t\t\t() => this.off(event, listener),\n\t\t};\n\t}\n\t\n\t/**\n\t * Registers a listener for a specific event, this listener will be called only once.\n\t *\n\t * @param {string} event - The name of the event to listen for.\n\t * @param {Function} listener - The function to call when the event is emitted.\n\t * @returns {{remove:()=>void}}\n\t */\n\tonce(event, listener)\n\t{\n\t\tconst wrapper = (/** @type {*[]} */ ...args) =>\n\t\t{\n\t\t\tthis.off(event, wrapper);\n\t\t\tlistener(...args);\n\t\t};\n\t\t\n\t\tthis.on(event, wrapper);\n\t\t\n\t\treturn {\n\t\t\tremove:\n\t\t\t\t() => this.off(event, wrapper),\n\t\t};\n\t}\n\t\n\t/**\n\t * Removes a listener for a specific event.\n\t *\n\t * @param {string} event - The name of the event to stop listening for.\n\t * @param {Function} listener - The function to remove from the event listeners.\n\t */\n\toff(event, listener)\n\t{\n\t\tconst listeners = this.#events.get(event);\n\t\tif(listeners)\n\t\t{\n\t\t\tlisteners.delete(listener);\n\t\t\tif(listeners.size === 0)\n\t\t\t{\n\t\t\t\tthis.#events.delete(event);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Emits an event, calling all registered listeners with the provided arguments.\n\t *\n\t * @param {string} event - The name of the event to emit.\n\t * @param {...*} args - The arguments to pass to the listeners.\n\t */\n\temit(event, ...args)\n\t{\n\t\tconst listeners = this.#events.get(event);\n\t\tif(listeners)\n\t\t{\n\t\t\tconst snapshot = [...listeners];\n\t\t\tfor(const listener of snapshot)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tlistener(...args);\n\t\t\t\t}\n\t\t\t\tcatch(err)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(`Error in listener for \"${event}\":`, err);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Clears all listeners for a specific event or all events if no event is specified.\n\t *\n\t * @param {string} [event] - The name of the event to clear listeners for. If not provided, all events will be cleared.\n\t */\n\tclear(event)\n\t{\n\t\tif(event !== undefined)\n\t\t{\n\t\t\tthis.#events.delete(event);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.#events.clear();\n\t\t}\n\t}\n}\n","class LinkedListNode\n{\n\t/** @type {*} */\n\tvalue;\n\t\n\t/** @type {LinkedListNode|null} */\n\tnext = null;\n\t\n\t/** @type {LinkedListNode|null} */\n\tprevious = null;\n\t\n\t/**\n\t * @param {*} value\n\t */\n\tconstructor(value)\n\t{\n\t\tthis.value = value;\n\t}\n}\n\nexport class LinkedList\n{\n\t/** @type {LinkedListNode|null} */\n\t#head = null;\n\t\n\t/** @type {LinkedListNode|null} */\n\t#tail = null;\n\t\n\t/** @type {number} */\n\t#size = 0;\n\t\n\tconstructor()\n\t{\n\t}\n\t\n\t/**\n\t * Returns the number of elements in the list.\n\t *\n\t * @returns {number}\n\t */\n\tget size()\n\t{\n\t\treturn this.#size;\n\t}\n\t\n\t/**\n\t * Adds a new value to the beginning of the list.\n\t *\n\t * @param {*} value\n\t */\n\tunshift(value)\n\t{\n\t\tconst newNode = new LinkedListNode(value);\n\t\tif(this.#head === null)\n\t\t{\n\t\t\tthis.#head = newNode;\n\t\t\tthis.#tail = newNode;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnewNode.next = this.#head;\n\t\t\tthis.#head.previous = newNode;\n\t\t\tthis.#head = newNode;\n\t\t}\n\t\tthis.#size++;\n\t}\n\t\n\t/**\n\t * Adds a new value to the end of the list.\n\t *\n\t * @param {*} value\n\t */\n\tpush(value)\n\t{\n\t\tconst newNode = new LinkedListNode(value);\n\t\tif(this.#tail === null)\n\t\t{\n\t\t\tthis.#head = newNode;\n\t\t\tthis.#tail = newNode;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnewNode.previous = this.#tail;\n\t\t\tthis.#tail.next = newNode;\n\t\t\tthis.#tail = newNode;\n\t\t}\n\t\tthis.#size++;\n\t}\n\t\n\t/**\n\t * Removes the first value from the list and returns it.\n\t *\n\t * @returns {*|undefined}\n\t */\n\tshift()\n\t{\n\t\tif(this.#head === null)\n\t\t{\n\t\t\treturn undefined;\n\t\t}\n\t\t\n\t\tconst value = this.#head.value;\n\t\tthis.#head = this.#head.next;\n\t\t\n\t\tif(this.#head !== null)\n\t\t{\n\t\t\tthis.#head.previous = null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.#tail = null;\n\t\t}\n\t\t\n\t\tthis.#size--;\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Removes the last value from the list and returns it.\n\t *\n\t * @returns {*|undefined}\n\t */\n\tpop()\n\t{\n\t\tif(this.#tail === null)\n\t\t{\n\t\t\treturn undefined;\n\t\t}\n\t\t\n\t\tconst value = this.#tail.value;\n\t\tthis.#tail = this.#tail.previous;\n\t\t\n\t\tif(this.#tail !== null)\n\t\t{\n\t\t\tthis.#tail.next = null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.#head = null;\n\t\t}\n\t\t\n\t\tthis.#size--;\n\t\treturn value;\n\t}\n}\n","/**\n * SerializableMap class extends the native Map to provide a JSON representation.\n *\n * This class can only have string keys, as JSON does not support non-string keys.\n */\nexport class SerializableMap extends Map\n{\n\t/**\n\t * Returns a JSON representation of the map.\n\t *\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn Object.fromEntries(this);\n\t}\n}\n","import {LeUtils} from '../LeUtils.js';\n\n\n/**\n * A TreeSet is a set of elements, sorted by a comparator.\n * Binary search is used to find elements, which makes it very fast to find elements.\n *\n * The comparator is also used to determine if two values are equal to each other.\n * This way, you can have values that aren't the same be treated as if they are. This can be used to deal with issues such as floating point errors for example.\n */\nexport class TreeSet\n{\n\t/** @type {*[]} */\n\t#elements;\n\t\n\t/** @type {(valueA:*, valueB:*) => number} */\n\t#comparator;\n\t\n\t\n\t/**\n\t * Creates a new TreeSet with the given elements and comparator.\n\t *\n\t * @param {*[]} [elements=[]] - The initial elements of the set.\n\t * @param {(valueA:*, valueB:*) => number} [comparator=LeUtils.compare] - The comparator function to use for sorting.\n\t */\n\tconstructor(elements, comparator)\n\t{\n\t\tthis.#comparator = comparator || LeUtils.compare;\n\t\tthis.#elements = elements || [];\n\t\tthis.#elements.sort(this.#comparator);\n\t}\n\t\n\t\n\t/**\n\t *\n\t *\n\t * @param {*} value - The value to search for in the set.\n\t * @returns {{found:boolean, index:number, value:*|undefined}} - An object containing whether the value was found, the index where it would be inserted, and the value at that index (if found).\n\t * @private\n\t */\n\tbinarySearch(value)\n\t{\n\t\tlet low = 0;\n\t\tlet high = this.#elements.length - 1;\n\t\twhile(low <= high)\n\t\t{\n\t\t\tconst mid = Math.floor((low + high) / 2);\n\t\t\tconst midValue = this.#elements[mid];\n\t\t\tconst cmp = this.#comparator(midValue, value);\n\t\t\tif(cmp < 0)\n\t\t\t{\n\t\t\t\tlow = mid + 1;\n\t\t\t}\n\t\t\telse if(cmp > 0)\n\t\t\t{\n\t\t\t\thigh = mid - 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn {found:true, index:mid, value:midValue};\n\t\t\t}\n\t\t}\n\t\treturn {found:false, index:low, value:undefined};\n\t};\n\t\n\t\n\t/**\n\t * Returns the elements of the set.\n\t */\n\tgetElements()\n\t{\n\t\treturn this.#elements;\n\t}\n\t\n\t/**\n\t * Returns the comparator of the set.\n\t *\n\t * @returns {(valueA:*, valueB:*) => number}\n\t */\n\tgetComparator()\n\t{\n\t\treturn this.#comparator;\n\t}\n\t\n\t/**\n\t * Returns the size of the set.\n\t *\n\t * @returns {number}\n\t */\n\tsize()\n\t{\n\t\treturn this.#elements.length;\n\t}\n\t\n\t/**\n\t * Returns true if the set is empty, false otherwise.\n\t *\n\t * @returns {boolean}\n\t */\n\tisEmpty()\n\t{\n\t\treturn (this.#elements.length <= 0);\n\t}\n\t\n\t/**\n\t * Returns true if the set contains a value that is equal to the given value, returns false otherwise.\n\t *\n\t * @param {*} value - The value to check for in the set.\n\t * @return {boolean} - True if the set contains the value, false otherwise.\n\t */\n\tcontains(value)\n\t{\n\t\treturn this.binarySearch(value).found;\n\t}\n\t\n\t/**\n\t * Returns the first element of the set, or undefined if it is empty.\n\t *\n\t * @return {*|undefined} - The first element of the set, or undefined if it is empty.\n\t */\n\tfirst()\n\t{\n\t\treturn (this.#elements.length > 0) ? this.#elements[0] : undefined;\n\t}\n\t\n\t/**\n\t * Returns the last element of the set, or undefined if it is empty.\n\t *\n\t * @return {*|undefined} - The last element of the set, or undefined if it is empty.\n\t */\n\tlast()\n\t{\n\t\treturn (this.#elements.length > 0) ? this.#elements[this.#elements.length - 1] : undefined;\n\t}\n\t\n\t/**\n\t * Removes and returns the first element of the set, or undefined if it is empty.\n\t *\n\t * @returns {*|undefined} - The first element of the set, or undefined if it is empty.\n\t */\n\tpollFirst()\n\t{\n\t\treturn (this.#elements.length > 0) ? this.#elements.splice(0, 1)[0] : undefined;\n\t}\n\t\n\t/**\n\t * Removes and returns the last element of the set, or undefined if it is empty.\n\t *\n\t * @returns {*|undefined} - The last element of the set, or undefined if it is empty.\n\t */\n\tpollLast()\n\t{\n\t\treturn (this.#elements.length > 0) ? this.#elements.splice(this.#elements.length - 1, 1)[0] : undefined;\n\t}\n\t\n\t/**\n\t * Adds the given value to the set. Will only do so if no equal value already exists.\n\t * @param {*} value - The value to add to the set.\n\t */\n\tadd(value)\n\t{\n\t\tconst result = this.binarySearch(value);\n\t\tif(result.found)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tthis.#elements.splice(result.index, 0, value);\n\t}\n\t\n\t/**\n\t * Adds all the given values to the set. Will only do so if no equal value already exists.\n\t *\n\t * @param {*} values - The values to add to the set.\n\t */\n\taddAll(values)\n\t{\n\t\tLeUtils.each(values, this.add.bind(this));\n\t}\n\t\n\t/**\n\t * Returns an equal value that's already in the tree set, or undefined if no equal values in it exist.\n\t *\n\t * @param {*} value - The value to search for in the set.\n\t * @return {*|undefined} - The equal value if found, or undefined if not found.\n\t */\n\tgetEqualValue(value)\n\t{\n\t\tconst result = this.binarySearch(value);\n\t\tif(result.found)\n\t\t{\n\t\t\treturn result.value;\n\t\t}\n\t\treturn undefined;\n\t}\n\t\n\t/**\n\t * Returns an equal value that's already in the tree set. If no equal values in it exist, the given value will be added and returned.\n\t *\n\t * @param {*} value - The value to search for in the set.\n\t * @return {*} - The equal value if found, or the added value if not found.\n\t */\n\tgetEqualValueOrAdd(value)\n\t{\n\t\tconst result = this.binarySearch(value);\n\t\tif(result.found)\n\t\t{\n\t\t\treturn result.value;\n\t\t}\n\t\tthis.#elements.splice(result.index, 0, value);\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Returns a string representation of the TreeSet.\n\t *\n\t * @returns {string} - A string representation of the TreeSet, including its elements and comparator.\n\t */\n\ttoString()\n\t{\n\t\treturn `TreeSet{elements:${this.#elements}, comparator:${this.#comparator}}`;\n\t}\n\t\n\t/**\n\t * Returns a JSON representation of the TreeSet.\n\t *\n\t * @returns {Object} - An object containing the elements and comparator of the TreeSet.\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\telements: this.#elements,\n\t\t\tcomparator:this.#comparator.toString(),\n\t\t};\n\t}\n}\n"],"names":["REGEX_ALL_NON_FLOAT_CHARACTERS","ISSET","value","IS_ARRAY","Array","isArray","ARRAY","IS_OBJECT","_typeof","OBJECT","STRING","STRING_ANY","_len","arguments","length","values","_key","_i","_values","BOOL","BOOL_ANY","_len2","_key2","_i2","_values2","isNaN","toLowerCase","trim","float","INT","Math","round","FLOAT","INT_ANY","FLOAT_ANY","apply","v","_len3","_key3","_i3","_values3","INT_LAX","FLOAT_LAX","INT_LAX_ANY","FLOAT_LAX_ANY","parseFloat","replace","_len4","_key4","_i4","_values4","checkTransactionalValue","transactionalValue","LeUtils","isTransactionalValueValid","console","error","Error","findTransactionalValueChange","changeId","i","changes","change","id","index","equals","a","b","constructor","Map","size","_iterator","_createForOfIteratorHelper","entries","_step","s","n","done","has","err","e","f","_iterator2","_step2","get","Set","_iterator3","_step3","ArrayBuffer","isView","byteLength","getUint8","RegExp","source","flags","valueOf","Object","prototype","toString","getPrototypeOf","keys","hasOwnProperty","call","key","$$typeof","equalsMapLike","sortKeyValueArrays","pairA","pairB","compare","elementsA","elementsB","ignoreKeys","undefined","mapToArray","sort","indexA","indexB","_elementsA$indexA","_slicedToArray","mapKey","mapValue","_elementsB$indexB","ownMapKey","ownMapValue","ignoreKeysIncludesMapKey","includes","ignoreKeysIncludesOwnMapKey","clone","CloneDeep","onDomReady","callback","_globalThis$document","_globalThis$document2","globalThis","document","addEventListener","removeEventListener","warn","remove","readyState","setTimeout","listening","callbackWrapper","parseVersionString","versionString","_versionString","_versionString2","_versionString3","major","minor","patch","partsVersion","split","THIS","otherVersion","largerThan","largerThanOrEquals","smallerThan","smallerThanOrEquals","contains","array","result","each","val","containsCaseInsensitive","containsAll","containsAllCaseInsensitive","containsAny","containsAnyCaseInsensitive","containsNone","containsNoneCaseInsensitive","findIndexValue","elements","optionalSkipHasOwnPropertyCheck","findIndex","_LeUtils$findIndexVal","_LeUtils$findIndexVal2","find","_LeUtils$findIndexVal3","_LeUtils$findIndexVal4","getValueAtIndex","DataView","Symbol","iterator","_iterator4","_step4","forEach","shouldContinue","supportsEach","eachIterator","_regeneratorRuntime","mark","_callee","_i8","_iterator5","_step5","_step5$value","_i9","_iterator6","_step6","_value","_i0","_iterator7","_step7","_value2","buffer","_i1","_buffer","entry","_i10","_t","_t2","_t3","_t4","_t5","_t6","_t7","wrap","_context","prev","next","abrupt","finish","push","stop","_iterator8","_step8","_step8$value","eachAsync","eachAsyncParallel","_ref2","_asyncToGenerator","_callee4","asyncCallback","optionalParallelCount","runningPromises","doBreak","_context4","_ref3","_callee3","promise","_context3","Promise","race","_callee2","_t8","_context2","sent","add","_x5","_x6","all","_x","_x2","_x3","_x4","_ref5","_callee5","parallelCount","_iterator9","_step9","_step9$value","_args5","_t9","_t0","_context5","_x7","_x8","getEmptySimplifiedCollection","collection","set","filter","_LeUtils$getEmptySimp","_LeUtils$getEmptySimp2","success","map","_LeUtils$getEmptySimp3","_LeUtils$getEmptySimp4","mapToArraySorted","comparator","sortKeys","_iterator0","_step0","flattenArray","flattenArrayRecursive","flattenToArray","flattenToArrayRecursive","compareNumbers","compareNumericStrings","aParts","bParts","min","compareNaturalStrings","_a$match","_b$match","re","aTokens","match","bTokens","len","x","y","nx","parseInt","ny","compareTimestampStrings","base64ToHex","replaceAll","isEmptyObject","obj","field","getObjectFieldsCount","count","isGeneratorFunction","GeneratorFunction","_callee6","_context6","AsyncGeneratorFunction","_wrapAsyncGenerator","_callee7","_context7","RegularFunction","PossibleGeneratorFunctionNames","from","name","element","func","displayName","ms","_globalThis$performan","_globalThis$performan2","_globalThis$performan3","clearTimeout","lastTime","performance","now","handler","_globalThis$performan4","_globalThis$performan5","_globalThis$performan6","currentTime","setInterval","_globalThis$performan7","_globalThis$performan8","_globalThis$performan9","intervalMs","fireImmediately","clearInterval","_globalThis$performan0","_globalThis$performan1","_globalThis$performan10","setAnimationFrameTimeout","_globalThis$performan11","_globalThis$performan12","_globalThis$performan13","frames","requestAnimationFrame","cancelAnimationFrame","run","requestAnimationFrameId","tick","_globalThis$performan14","_globalThis$performan15","_globalThis$performan16","setAnimationFrameInterval","intervalFrames","lastTimestamp","totalTime","timestamp","promiseTimeout","resolve","promiseAnimationFrameTimeout","fetch","_fetch","_x9","_x0","url","options","currentRetries","retries","controllerAborted","controller","AbortController","_callee9","_attemptFetch","_context9","attemptFetch","_ref7","_callee8","_controller","_controller2","response","_controller3","_t1","_context8","signal","aborted","_objectSpread","delay","ok","status","statusText","then","_promise","_promise2","_promise3","_controller4","abort","isRemoved","_controller5","cachedFetch","cache","_ref8","_callee1","responseFunction","_context1","data","_ref9","_callee0","_t10","_context0","verify","_x12","_x1","_x10","_x11","platformIsMobile","_globalThis$navigator","_globalThis$navigator2","navigator","userAgent","vendor","opera","substring","test","platformHasCursor","_globalThis$matchMedi","matchMedia","matches","capitalize","string","charAt","toUpperCase","slice","endsWithAny","endingCharsStringOrArray","endingCharsArray","chars","endsWith","startsWithAny","startingCharsStringOrArray","startingCharsArray","startsWith","trimEnd","trimCharsStringOrArray","trimChars","trimStart","purgeSentence","sentence","purgeErrorMessage","_error","message","errorParts","JSON","stringify","generateNamePermutations","names","results","join","concat","increaseNumericStringByOne","c","String","fromCharCode","charCodeAt","uniqueId","previousUniqueIdsTime","previousUniqueIds","numberToBytes","number","ceil","floor","log2","bytes","Uint8ClampedArray","rightByte","generateUniqueId","_globalThis$performan17","_globalThis$performan18","_globalThis$performan19","_globalThis$performan20","_globalThis$performan21","timeOrigin","timing","navigationStart","Date","getTime","nowBytes","uuid","_crypto","crypto","randomUUID","base64ToBytes","hexToBase64","bytesChunkA","random","padEnd","bytesChunkB","bytesChunkC","bytesChunkD","Uint8Array","bytesToBase64","time","clear","_performance","_performance2","_performance$now","_performance3","_performance3$now","getEmptyImageSrc","getPercentage","part","total","max","getImagePixels","image","_globalThis$document3","_globalThis$document4","createElement","body","appendChild","canvas","ctx","getContext","width","height","drawImage","getImageData","_canvas$parentNode","parentNode","removeChild","getColoredImage","color","_globalThis$document5","_globalThis$document6","globalCompositeOperation","fillStyle","fillRect","toDataURL","_canvas$parentNode2","rgbToHex","rgb","hex","hexToRgb","hexstring","_hexstring$match","initialHexstring","hasAlpha","_toConsumableArray","rgbToHsl","r","g","h","l","d","hslToRgb","hue2rgb","p","q","t","hsl","rgbToLab","pow","z","getDifferenceBetweenRgb","rgbA","rgbB","labA","labB","getDifferenceBetweenLab","deltaL","deltaA","deltaB","c1","sqrt","c2","deltaC","deltaH","sc","sh","deltaLKlsl","deltaCkcsc","deltaHkhsh","getRgbOfGradient","gradient","percentage","closest","percent","abs","difference","HIGHER","LOWER","higher","lower","higherDifference","lowerDifference","tmp","getRgbBetween","startRgb","endRgb","partEnd","partStart","btoa","_globalThis$Buffer","Buffer","atob","base64string","_globalThis$Buffer2","utf8ToBase64","encodeURIComponent","p1","base64ToUtf8","decodeURIComponent","_hexstring$replace$ma","hexResult","binary","arraybuffer","downloadFile","fileName","mimeType","_globalThis$document7","link","setAttribute","href","click","localStorageGet","_globalThis$localStor","localStorage","getItem","_JSON$parse","parse","localStorageSet","_globalThis$localStor2","setItem","removeItem","localStorageRemove","_globalThis$localStor3","isCurrentHostPrivate","lastHostname","lastResult","_globalThis$location","location","hostname","isGivenHostPrivate","host","URL","parts","createTransactionalValue","transactionalValueToString","valuesString","transactionSetAndCommit","transactionSetWithoutCommitting","transactionCommitChange","splice","transactionCancelChange","transactionIsChangeRelevant","transactionGetCommittedValue","transactionGetValue","createWorkerThread","Worker","worker","sendMessage","reject","listeners","addListener","removeListener","_options$timeout","timeout","postMessage","onerror","onmessage","sendWorkerMessage","workers","workerName","purgeEmail","email","isFocusClear","inputTypes","_globalThis$document8","_globalThis$document$","_globalThis$document9","activeElement","tagName","getAttribute","getUserLocale","userLocale","_globalThis$navigator3","_globalThis$navigator4","locales","languages","locale","localesNoEnglish","getUserLocaleDateFormat","userLocaleDateFormat","_globalThis$Intl","char","Intl","DateTimeFormat","formattedDate","format","EventEmitter","_classCallCheck","_classPrivateFieldInitSpec","_events","_classPrivateFieldSet","_createClass","on","event","listener","_classPrivateFieldGet2","_this","_classPrivateFieldGet","off","once","_this2","wrapper","emit","snapshot","args","LinkedListNode","_defineProperty","_head","WeakMap","_tail","_size","LinkedList","unshift","_this$size","newNode","previous","_this$size3","shift","_this$size5","pop","_this$size7","SerializableMap","_Map","_callSuper","_inherits","toJSON","fromEntries","_wrapNativeSuper","_elements","_comparator","TreeSet","binarySearch","low","high","mid","midValue","cmp","found","getElements","getComparator","isEmpty","first","last","pollFirst","pollLast","addAll","bind","getEqualValue","getEqualValueOrAdd"],"mappings":"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"}