@lowentry/utils 1.11.2 → 1.11.3

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 CHANGED
@@ -1364,7 +1364,7 @@ var LeUtils = {
1364
1364
  *
1365
1365
  * @param {string} url
1366
1366
  * @param {Object} [options]
1367
- * @returns {{promise:Promise<*>, then:Function, catch:Function, finally:Function, remove:Function, isRemoved:Function}}
1367
+ * @returns {{then:Function, catch:Function, finally:Function, remove:Function, isRemoved:Function}}
1368
1368
  */
1369
1369
  fetch: function (_fetch) {
1370
1370
  function fetch(_x12, _x13) {
@@ -1413,17 +1413,19 @@ var LeUtils = {
1413
1413
  attemptFetch();
1414
1414
  });
1415
1415
  var result = {};
1416
- result.promise = promise;
1417
1416
  result.then = function () {
1418
- promise.then.apply(promise, arguments);
1417
+ var _promise;
1418
+ promise = (_promise = promise).then.apply(_promise, arguments);
1419
1419
  return result;
1420
1420
  };
1421
1421
  result["catch"] = function () {
1422
- promise["catch"].apply(promise, arguments);
1422
+ var _promise2;
1423
+ promise = (_promise2 = promise)["catch"].apply(_promise2, arguments);
1423
1424
  return result;
1424
1425
  };
1425
1426
  result["finally"] = function () {
1426
- promise["finally"].apply(promise, arguments);
1427
+ var _promise3;
1428
+ promise = (_promise3 = promise)["finally"].apply(_promise3, arguments);
1427
1429
  return result;
1428
1430
  };
1429
1431
  result.remove = function () {
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["src/LeTypes.js","src/LeUtils.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 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 FastDeepEqual from 'fast-deep-equal';\nimport CloneDeep from 'clone-deep';\nimport {ISSET, IS_OBJECT, IS_ARRAY, STRING, INT_LAX, FLOAT_LAX, INT_LAX_ANY, FLOAT_LAX_ANY} 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 (npm package \"fast-deep-equal\").\n\t *\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns true if the values are equivalent.\n\t */\n\tequals:FastDeepEqual,\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((typeof window === 'undefined') || !document)\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\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((document.readyState === 'interactive') || (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\tdocument.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\tdocument.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\tdocument.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 {array|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 {array|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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 * @callback LeUtils~__eachCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__eachCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\teach:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) === 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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) === false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbreak;\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}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.each() on an invalid type: [' + (typeof elements) + ']', elements);\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 {*[]|object|function} elements\n\t * @param {LeUtils~__eachCallback} asyncCallback\n\t * @param {number} [optionalParallelCount]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|function}\n\t */\n\teachAsync:\n\t\t(() =>\n\t\t{\n\t\t\tconst eachAsyncParallel = async (elements, asyncCallback, optionalParallelCount, optionalSkipHasOwnPropertyCheck) =>\n\t\t\t{\n\t\t\t\tlet promises = [];\n\t\t\t\tlet doBreak = false;\n\t\t\t\tawait LeUtils.eachAsync(elements, async (element, index) =>\n\t\t\t\t{\n\t\t\t\t\twhile(promises.length > optionalParallelCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet newPromises = [];\n\t\t\t\t\t\tLeUtils.each(promises, (promise) =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(!promise.__lowentry_utils__promise_is_done__)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnewPromises.push(promise);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises = newPromises;\n\t\t\t\t\t\tif(promises.length > optionalParallelCount)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tawait Promise.any(promises);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\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\tconst promise = (async () =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif((await asyncCallback.call(element, element, 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\tpromise.__lowentry_utils__promise_is_done__ = true;\n\t\t\t\t\t})();\n\t\t\t\t\tpromises.push(promise);\n\t\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\t\tawait Promise.all(promises);\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\tif(Array.isArray(elements))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif((await asyncCallback.call(elements[index], elements[index], index)) === false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbreak;\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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((await asyncCallback.call(elements[index], elements[index], index)) === false)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.warn('Executed LeUtils.eachAsync() on an invalid type: [' + (typeof elements) + ']', elements);\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 * @callback LeUtils~__filterCallback\n\t * @param {*} value\n\t * @param {*} index\n\t */\n\t/**\n\t * Loops through the given elements, and returns a new array or object, with only the elements that didn't return false from the callback.\n\t *\n\t * @param {*[]|object|Function} elements\n\t * @param {LeUtils~__filterCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\tfilter:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) !== false)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.push(elements[index]);\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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tlet result = {};\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) !== false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tresult[index] = elements[index];\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\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.filter() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapCallback\n\t * @param {*} value\n\t * @param {*} index\n\t */\n\t/**\n\t * Loops through the given elements, and returns a new array or object, with the elements that were returned from the callback.\n\t *\n\t * @param {*[]|object|Function} elements\n\t * @param {LeUtils~__mapCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\tmap:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[index] = callback.call(elements[index], elements[index], index);\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tlet result = {};\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult[index] = callback.call(elements[index], elements[index], index);\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\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.map() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapToArrayCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__mapToArrayCallback} 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\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.push(callback.call(elements[index], elements[index], index));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.push(callback.call(elements[index], elements[index], index));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.mapToArray() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapToArraySortedCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__sortKeysComparatorCallback} comparator\n\t * @param {LeUtils~__mapToArraySortedCallback} 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(let i = 0; i < keys.length; i++)\n\t\t\t{\n\t\t\t\tresult.push(callback.call(elements[keys[i]], elements[keys[i]], keys[i]));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__sortKeysComparatorCallback\n\t * @param {*} elementA\n\t * @param {*} elementB\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__sortKeysComparatorCallback} 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\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tkeys.push(index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkeys.push(index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.sortKeys() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\tkeys.sort((a, b) => comparator(elements[a], elements[b]));\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 * 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\ta = STRING(a).trim();\n\t\t\tb = STRING(b).trim();\n\t\t\tif(a.length === b.length)\n\t\t\t{\n\t\t\t\treturn (a < b) ? -1 : ((a > b) ? 1 : 0);\n\t\t\t}\n\t\t\treturn (a.length < b.length) ? -1 : 1;\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, GeneratorFunction.displayName, AsyncGeneratorFunction.name, AsyncGeneratorFunction.displayName])).filter((element) =>\n\t\t\t{\n\t\t\t\treturn (element && (element !== RegularFunction.name) && (element !== RegularFunction.displayName));\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\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 * @callback LeUtils~__setTimeoutCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setTimeoutCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\n\t\t\tlet handler = setTimeout(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = performance.now();\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\tclearTimeout(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 * @callback LeUtils~__setIntervalCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setIntervalCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\n\t\t\tlet handler = setInterval(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = performance.now();\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\tclearInterval(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 * @callback LeUtils~__setAnimationFrameTimeoutCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setAnimationFrameTimeoutCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\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 = performance.now();\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 = (typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : 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\t(typeof window === 'undefined') ? clearTimeout(requestAnimationFrameId) : 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 * @callback LeUtils~__setAnimationFrameIntervalCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setAnimationFrameIntervalCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 lastTime = performance.now();\n\t\t\tlet frames = intervalFrames;\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\tlet currentTime = performance.now();\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\tframes = intervalFrames;\n\t\t\t\t\t}\n\t\t\t\t\tframes--;\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 = (typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : requestAnimationFrame(tick);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t(typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : 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\t(typeof window === 'undefined') ? clearTimeout(requestAnimationFrameId) : 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}\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());\n\t\t\t}\n\t\t\treturn new Promise(resolve => 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}\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());\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 {Object} [options]\n\t * @returns {{promise:Promise<*>, 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, 0);\n\t\t\t\n\t\t\tlet controllerAborted = false;\n\t\t\tlet controller = null;\n\t\t\tif((typeof window !== 'undefined') && (typeof window.AbortController !== 'undefined'))\n\t\t\t{\n\t\t\t\tcontroller = new AbortController();\n\t\t\t}\n\t\t\t\n\t\t\tconst promise = new Promise((resolve, reject) =>\n\t\t\t{\n\t\t\t\tconst attemptFetch = () =>\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\treject(new Error('Aborted'));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfetch(url, {\n\t\t\t\t\t\tsignal:controller?.signal,\n\t\t\t\t\t\t...(options ?? {}),\n\t\t\t\t\t\tretries:undefined,\n\t\t\t\t\t\tdelay: undefined,\n\t\t\t\t\t}).then((response) =>\n\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}).then((response) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}).catch((error) =>\n\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\treject(error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentRetries++;\n\t\t\t\t\t\tsetTimeout(attemptFetch, (typeof options?.delay === 'function') ? INT_LAX_ANY(options?.delay(currentRetries), 500) : (INT_LAX_ANY(options?.delay, 500)));\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tattemptFetch();\n\t\t\t});\n\t\t\t\n\t\t\tlet result = {};\n\t\t\tresult.promise = promise;\n\t\t\tresult.then = (...args) =>\n\t\t\t{\n\t\t\t\tpromise.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.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.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 * 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\tif(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn false;\n\t\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(window.navigator?.userAgent || window.navigator?.vendor || window.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\tif(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !LeUtils.platformIsMobile() && !window.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.flattenArray(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++;\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 = {};\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\tif(typeof window === 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t}\n\t\t\t\t\t// noinspection JSDeprecatedSymbols\n\t\t\t\t\tnow = (performance.timeOrigin || performance.timing.navigationStart) + performance.now();\n\t\t\t\t\tif(typeof now !== 'number')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tnow = (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\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 = {[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[result.id] !== true)\n\t\t\t\t\t{\n\t\t\t\t\t\tpreviousUniqueIds[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 (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\tif(typeof window === 'undefined')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error();\n\t\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) + performance.now();\n\t\t\t\t\t\tif(typeof now !== 'number')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t\t}\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\tnow = (Date.now ? Date.now() : (new Date()).getTime());\n\t\t\t\t\t}\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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn new Uint8ClampedArray();\n\t\t\t}\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tdocument.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((width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = 1;\n\t\t\t\t\tcanvas.height = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\t}\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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn LeUtils.getEmptyImageSrc();\n\t\t\t}\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tdocument.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((width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = 1;\n\t\t\t\t\tcanvas.height = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\t}\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\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\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, s, l = (max + min) / 2;\n\t\t\tif(max === min)\n\t\t\t{\n\t\t\t\th = s = 0;\n\t\t\t}\n\t\t\telse\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, g, b;\n\t\t\t\tif(s === 0)\n\t\t\t\t{\n\t\t\t\t\tr = g = b = l;\n\t\t\t\t}\n\t\t\t\telse\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 * <pre>\n\t * < 1.0 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 * </pre>\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 * <pre>\n\t * < 1.0 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 * </pre>\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 * <pre>\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 * </pre>\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 null;\n\t\t\t}\n\t\t\tclosest = closest[0];\n\t\t\t\n\t\t\tlet higher = 99999;\n\t\t\tlet lower = -99999;\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\tif(higher === 99999)\n\t\t\t{\n\t\t\t\thigher = null;\n\t\t\t}\n\t\t\tif(lower === -99999)\n\t\t\t{\n\t\t\t\tlower = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(((higher === null) && (lower === null)) || (higher === lower))\n\t\t\t{\n\t\t\t\treturn gradient[closest];\n\t\t\t}\n\t\t\telse if((higher !== null) && (lower !== null))\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 === null)\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 btoa === 'function')\n\t\t\t{\n\t\t\t\treturn btoa(string);\n\t\t\t}\n\t\t\treturn Buffer.from(string).toString('base64');\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 atob === 'function')\n\t\t\t{\n\t\t\t\treturn atob(base64string);\n\t\t\t}\n\t\t\treturn Buffer.from(base64string, 'base64').toString();\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\treturn LeUtils.btoa(hexstring.replace(/[^0-9A-F]/gi, '').match(/\\w{2}/g).map((a) => String.fromCharCode(parseInt(a, 16))).join(''));\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>|ArrayBufferLike} 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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst link = 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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet result = window.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\tresult = JSON.parse(result);\n\t\t\t\tif(typeof result['-'] !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn result['-'];\n\t\t\t\t}\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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof data === 'undefined')\n\t\t\t{\n\t\t\t\twindow.localStorage.removeItem('LeUtils_' + id);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.localStorage.removeItem('LeUtils_' + id);\n\t\t},\n\t\n\t/**\n\t * Returns whether the current hostname (window.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(typeof window === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn false; // server-side rendering, who knows to who it is being served to, assume it's public\n\t\t\t\t}\n\t\t\t\tconst hostname = window.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().toLowerCase();\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 * Creates and returns a new TreeSet.\n\t * A TreeSet is a set of elements, sorted by a comparator.\n\t * Binary search is used to find elements, which makes it very fast to find elements.\n\t *\n\t * The comparator is also used to determine if two values are equal to each other.\n\t * 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\t *\n\t * @param {*[]} elements\n\t * @param {Function} comparator\n\t * @returns {{getElements: (function(): *[]), getComparator: (function(): Function), size: (function(): number), isEmpty: (function(): boolean), contains: (function(*): boolean), first: (function(): *|undefined), last: (function(): *|undefined), pollFirst: (function(): *|undefined), pollLast: (function(): *|undefined), add: function(*), addAll: function(*[]|object), getEqualValue: (function(*): (*)), getEqualValueOrAdd: (function(*): (*))}}\n\t */\n\tcreateTreeSet:\n\t\t(elements, comparator) =>\n\t\t{\n\t\t\tcomparator = comparator || LeUtils.compare;\n\t\t\telements = elements || [];\n\t\t\telements.sort(comparator);\n\t\t\t\n\t\t\t/**\n\t\t\t * Performs a binary search on the elements, and returns the result.\n\t\t\t *\n\t\t\t * @param {*} value\n\t\t\t * @returns {{found: boolean, index: number, value: *|undefined}}\n\t\t\t */\n\t\t\tconst binarySearch = (value) =>\n\t\t\t{\n\t\t\t\tlet low = 0;\n\t\t\t\tlet high = elements.length - 1;\n\t\t\t\twhile(low <= high)\n\t\t\t\t{\n\t\t\t\t\tconst mid = Math.floor((low + high) / 2);\n\t\t\t\t\tconst midValue = elements[mid];\n\t\t\t\t\tconst cmp = comparator(midValue, value);\n\t\t\t\t\tif(cmp < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlow = mid + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse if(cmp > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\thigh = mid - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn {found:true, index:mid, value:midValue};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {found:false, index:low, value:undefined};\n\t\t\t};\n\t\t\t\n\t\t\tconst treeSet = {\n\t\t\t\t/**\n\t\t\t\t * Returns the elements of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {*[]}\n\t\t\t\t */\n\t\t\t\tgetElements:\n\t\t\t\t\t() => elements,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the comparator of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {Function}\n\t\t\t\t */\n\t\t\t\tgetComparator:\n\t\t\t\t\t() => comparator,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the size of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {number}\n\t\t\t\t */\n\t\t\t\tsize:\n\t\t\t\t\t() => elements.length,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns true if the set is empty, false otherwise.\n\t\t\t\t *\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\tisEmpty:\n\t\t\t\t\t() => (elements.length <= 0),\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns true if the set contains a value that is equal to the given value, returns false otherwise.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\tcontains:\n\t\t\t\t\t(value) => binarySearch(value).found,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the first element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tfirst:\n\t\t\t\t\t() => (elements.length > 0) ? elements[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the last element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tlast:\n\t\t\t\t\t() => (elements.length > 0) ? elements[elements.length - 1] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Removes and returns the first element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tpollFirst:\n\t\t\t\t\t() => (elements.length > 0) ? elements.splice(0, 1)[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Removes and returns the last element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tpollLast:\n\t\t\t\t\t() => (elements.length > 0) ? elements.splice(elements.length - 1, 1)[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Adds the given value to the set. Will only do so if no equal value already exists.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t */\n\t\t\t\tadd:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements.splice(result.index, 0, value);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Adds all the given values to the set. Will only do so if no equal value already exists.\n\t\t\t\t *\n\t\t\t\t * @param {*[]|object} values\n\t\t\t\t */\n\t\t\t\taddAll:\n\t\t\t\t\t(values) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tLeUtils.each(values, treeSet.add);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns an equal value that's already in the tree set, or undefined if no equal values in it exist.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tgetEqualValue:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\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\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\tgetEqualValueOrAdd:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements.splice(result.index, 0, value);\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t};\n\t\t\treturn treeSet;\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, sendMessage: function(Object, {timeout: number|undefined}|undefined): Promise<Object>}}\n\t */\n\tcreateWorkerThread:\n\t\t(name) =>\n\t\t{\n\t\t\tif((typeof window === 'undefined') || (typeof Worker === 'undefined'))\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tworker: null,\n\t\t\t\t\tsendMessage: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 Worker('/workers/' + name + '.worker.js');\n\t\t\tlet listeners = {};\n\t\t\t\n\t\t\tconst addListener = (id, callback) =>\n\t\t\t{\n\t\t\t\tlisteners[id] = callback;\n\t\t\t};\n\t\t\t\n\t\t\tconst removeListener = (id) =>\n\t\t\t{\n\t\t\t\tdelete listeners[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[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 = {};\n\t\t\treturn (workerName, data, options) =>\n\t\t\t{\n\t\t\t\tif(!workers[workerName])\n\t\t\t\t{\n\t\t\t\t\tworkers[workerName] = LeUtils.createWorkerThread(workerName);\n\t\t\t\t}\n\t\t\t\treturn workers[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\tif((typeof window === 'undefined') || !document)\n\t\t{\n\t\t\treturn () => true;\n\t\t}\n\t\tconst inputTypes = ['text', 'search', 'email', 'number', 'password', 'tel', 'time', 'url', 'week', 'month', 'date', 'datetime-local'];\n\t\treturn () => !((document?.activeElement?.tagName?.toLowerCase() === 'input') && inputTypes.includes(document?.activeElement?.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\tif((typeof window === 'undefined') || !navigator)\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\tlet locales = 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((typeof window !== 'undefined') && (typeof window.Intl !== 'undefined') && (typeof window.Intl.DateTimeFormat !== 'undefined'))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst formattedDate = new window.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"],"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","INT","Math","round","FLOAT","INT_ANY","FLOAT_ANY","apply","v","isNaN","_len2","_key2","_i2","_values2","INT_LAX","FLOAT_LAX","INT_LAX_ANY","FLOAT_LAX_ANY","parseFloat","replace","_len3","_key3","_i3","_values3","checkTransactionalValue","transactionalValue","LeUtils","isTransactionalValueValid","console","error","Error","findTransactionalValueChange","changeId","i","changes","change","id","index","equals","FastDeepEqual","clone","CloneDeep","onDomReady","callback","window","document","remove","readyState","setTimeout","listening","callbackWrapper","removeEventListener","addEventListener","parseVersionString","versionString","_versionString","_versionString2","_versionString3","major","minor","patch","trim","partsVersion","split","THIS","toString","otherVersion","largerThan","largerThanOrEquals","smallerThan","smallerThanOrEquals","contains","array","result","each","val","containsCaseInsensitive","toLowerCase","containsAll","containsAllCaseInsensitive","containsAny","containsAnyCaseInsensitive","containsNone","containsNoneCaseInsensitive","elements","optionalSkipHasOwnPropertyCheck","undefined","call","Object","prototype","hasOwnProperty","warn","eachAsync","eachAsyncParallel","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","asyncCallback","optionalParallelCount","promises","doBreak","wrap","_callee3$","_context4","prev","next","_ref3","_callee2","element","_loop","promise","_callee2$","_context3","newPromises","_loop$","_context2","__lowentry_utils__promise_is_done__","push","Promise","any","stop","delegateYield","abrupt","_callee","_callee$","_context","t0","sent","_x5","_x6","all","_x","_x2","_x3","_x4","_ref5","_callee4","parallelCount","_index2","_args5","_callee4$","_context5","t1","keys","t2","done","t3","_x7","_x8","filter","map","mapToArray","mapToArraySorted","comparator","sortKeys","sort","a","b","flattenArray","flattenArrayRecursive","forEach","entry","compare","compareNumbers","compareNumericStrings","compareTimestampStrings","base64ToHex","replaceAll","isEmptyObject","obj","field","getObjectFieldsCount","count","isGeneratorFunction","GeneratorFunction","_callee5","_callee5$","_context6","constructor","AsyncGeneratorFunction","_wrapAsyncGenerator","_callee6","_callee6$","_context7","RegularFunction","PossibleGeneratorFunctionNames","from","Set","name","displayName","func","includes","_setTimeout","_x9","_x10","ms","lastTime","performance","now","handler","currentTime","e","clearTimeout","setInterval","_setInterval","_x11","intervalMs","fireImmediately","clearInterval","setAnimationFrameTimeout","frames","run","requestAnimationFrameId","tick","requestAnimationFrame","cancelAnimationFrame","setAnimationFrameInterval","intervalFrames","promiseTimeout","resolve","promiseAnimationFrameTimeout","fetch","_fetch","_x12","_x13","url","options","currentRetries","retries","controllerAborted","controller","AbortController","reject","attemptFetch","_controller","_controller2","signal","aborted","_objectSpread","delay","then","response","ok","status","statusText","_controller3","abort","isRemoved","_controller4","platformIsMobile","_window$navigator","_window$navigator2","navigator","userAgent","vendor","opera","substring","test","platformHasCursor","_window$matchMedia","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","uniqueId","previousUniqueIdsTime","previousUniqueIds","numberToBytes","number","size","ceil","floor","log2","bytes","Uint8ClampedArray","x","rightByte","generateUniqueId","timeOrigin","timing","navigationStart","Date","getTime","nowBytes","uuid","_crypto","crypto","randomUUID","base64ToBytes","hexToBase64","bytesChunkA","random","padEnd","bytesChunkB","bytesChunkC","bytesChunkD","Uint8Array","set","bytesToBase64","time","_defineProperty","timestamp","getEmptyImageSrc","getPercentage","part","total","max","min","getImagePixels","image","canvas","createElement","body","appendChild","ctx","getContext","width","height","drawImage","getImageData","data","parentNode","removeChild","getColoredImage","color","globalCompositeOperation","fillStyle","fillRect","toDataURL","rgbToHex","rgb","hex","hexToRgb","hexstring","hasAlpha","match","parseInt","_toConsumableArray","rgbToHsl","r","g","h","s","l","d","hslToRgb","hue2rgb","p","q","t","hsl","rgbToLab","pow","y","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","higherDifference","lowerDifference","tmp","getRgbBetween","startRgb","endRgb","partEnd","partStart","btoa","_btoa","_x14","Buffer","atob","_atob","_x15","base64string","utf8ToBase64","encodeURIComponent","p1","String","fromCharCode","base64ToUtf8","decodeURIComponent","charCodeAt","binary","len","arraybuffer","byteLength","downloadFile","fileName","mimeType","link","setAttribute","href","click","localStorageGet","localStorage","getItem","parse","localStorageSet","removeItem","setItem","localStorageRemove","isCurrentHostPrivate","lastHostname","lastResult","hostname","location","isGivenHostPrivate","host","parts","createTreeSet","binarySearch","low","high","mid","midValue","cmp","found","treeSet","getElements","getComparator","isEmpty","first","last","pollFirst","splice","pollLast","add","addAll","getEqualValue","getEqualValueOrAdd","createTransactionalValue","transactionalValueToString","valuesString","transactionSetAndCommit","transactionSetWithoutCommitting","transactionCommitChange","transactionCancelChange","transactionIsChangeRelevant","transactionGetCommittedValue","transactionGetValue","createWorkerThread","Worker","worker","sendMessage","listeners","addListener","removeListener","_options$timeout","timeout","postMessage","onerror","onmessage","sendWorkerMessage","workers","workerName","purgeEmail","email","isFocusClear","inputTypes","_document","_document2","activeElement","tagName","type","getUserLocale","userLocale","_navigator$languages","_navigator","locales","languages","locale","localesNoEnglish","getUserLocaleDateFormat","userLocaleDateFormat","char","Intl","DateTimeFormat","formattedDate","format"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["src/LeTypes.js","src/LeUtils.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 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 FastDeepEqual from 'fast-deep-equal';\nimport CloneDeep from 'clone-deep';\nimport {ISSET, IS_OBJECT, IS_ARRAY, STRING, INT_LAX, FLOAT_LAX, INT_LAX_ANY, FLOAT_LAX_ANY} 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 (npm package \"fast-deep-equal\").\n\t *\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns true if the values are equivalent.\n\t */\n\tequals:FastDeepEqual,\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((typeof window === 'undefined') || !document)\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\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((document.readyState === 'interactive') || (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\tdocument.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\tdocument.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\tdocument.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 {array|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 {array|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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 {array|object|Function} array\n\t * @param {array|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, function(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 * @callback LeUtils~__eachCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__eachCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\teach:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) === 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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) === false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbreak;\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}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.each() on an invalid type: [' + (typeof elements) + ']', elements);\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 {*[]|object|function} elements\n\t * @param {LeUtils~__eachCallback} asyncCallback\n\t * @param {number} [optionalParallelCount]\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|function}\n\t */\n\teachAsync:\n\t\t(() =>\n\t\t{\n\t\t\tconst eachAsyncParallel = async (elements, asyncCallback, optionalParallelCount, optionalSkipHasOwnPropertyCheck) =>\n\t\t\t{\n\t\t\t\tlet promises = [];\n\t\t\t\tlet doBreak = false;\n\t\t\t\tawait LeUtils.eachAsync(elements, async (element, index) =>\n\t\t\t\t{\n\t\t\t\t\twhile(promises.length > optionalParallelCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet newPromises = [];\n\t\t\t\t\t\tLeUtils.each(promises, (promise) =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(!promise.__lowentry_utils__promise_is_done__)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnewPromises.push(promise);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises = newPromises;\n\t\t\t\t\t\tif(promises.length > optionalParallelCount)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tawait Promise.any(promises);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\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\tconst promise = (async () =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif((await asyncCallback.call(element, element, 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\tpromise.__lowentry_utils__promise_is_done__ = true;\n\t\t\t\t\t})();\n\t\t\t\t\tpromises.push(promise);\n\t\t\t\t}, optionalSkipHasOwnPropertyCheck);\n\t\t\t\tawait Promise.all(promises);\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\tif(Array.isArray(elements))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif((await asyncCallback.call(elements[index], elements[index], index)) === false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbreak;\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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((await asyncCallback.call(elements[index], elements[index], index)) === false)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.warn('Executed LeUtils.eachAsync() on an invalid type: [' + (typeof elements) + ']', elements);\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 * @callback LeUtils~__filterCallback\n\t * @param {*} value\n\t * @param {*} index\n\t */\n\t/**\n\t * Loops through the given elements, and returns a new array or object, with only the elements that didn't return false from the callback.\n\t *\n\t * @param {*[]|object|Function} elements\n\t * @param {LeUtils~__filterCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\tfilter:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) !== false)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.push(elements[index]);\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\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tlet result = {};\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(callback.call(elements[index], elements[index], index) !== false)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tresult[index] = elements[index];\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\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.filter() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapCallback\n\t * @param {*} value\n\t * @param {*} index\n\t */\n\t/**\n\t * Loops through the given elements, and returns a new array or object, with the elements that were returned from the callback.\n\t *\n\t * @param {*[]|object|Function} elements\n\t * @param {LeUtils~__mapCallback} callback\n\t * @param {boolean} [optionalSkipHasOwnPropertyCheck]\n\t * @returns {*[]|object|Function}\n\t */\n\tmap:\n\t\t(elements, callback, optionalSkipHasOwnPropertyCheck = false) =>\n\t\t{\n\t\t\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[index] = callback.call(elements[index], elements[index], index);\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tlet result = {};\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult[index] = callback.call(elements[index], elements[index], index);\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\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.map() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapToArrayCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__mapToArrayCallback} 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\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.push(callback.call(elements[index], elements[index], index));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.push(callback.call(elements[index], elements[index], index));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.mapToArray() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__mapToArraySortedCallback\n\t * @param {*} value\n\t * @param {*} index\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__sortKeysComparatorCallback} comparator\n\t * @param {LeUtils~__mapToArraySortedCallback} 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(let i = 0; i < keys.length; i++)\n\t\t\t{\n\t\t\t\tresult.push(callback.call(elements[keys[i]], elements[keys[i]], keys[i]));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\n\t/**\n\t * @callback LeUtils~__sortKeysComparatorCallback\n\t * @param {*} elementA\n\t * @param {*} elementB\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 {*[]|object|Function} elements\n\t * @param {LeUtils~__sortKeysComparatorCallback} 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\tif((elements !== null) && (typeof elements !== 'undefined'))\n\t\t\t{\n\t\t\t\tif(Array.isArray(elements))\n\t\t\t\t{\n\t\t\t\t\tfor(let index = 0; index < elements.length; index++)\n\t\t\t\t\t{\n\t\t\t\t\t\tkeys.push(index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if((typeof elements === 'object') || (typeof elements === 'function'))\n\t\t\t\t{\n\t\t\t\t\tfor(let index in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((optionalSkipHasOwnPropertyCheck === true) || Object.prototype.hasOwnProperty.call(elements, index))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkeys.push(index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn('Executed LeUtils.sortKeys() on an invalid type: [' + (typeof elements) + ']', elements);\n\t\t\t\t}\n\t\t\t}\n\t\t\tkeys.sort((a, b) => comparator(elements[a], elements[b]));\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 * 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\ta = STRING(a).trim();\n\t\t\tb = STRING(b).trim();\n\t\t\tif(a.length === b.length)\n\t\t\t{\n\t\t\t\treturn (a < b) ? -1 : ((a > b) ? 1 : 0);\n\t\t\t}\n\t\t\treturn (a.length < b.length) ? -1 : 1;\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, GeneratorFunction.displayName, AsyncGeneratorFunction.name, AsyncGeneratorFunction.displayName])).filter((element) =>\n\t\t\t{\n\t\t\t\treturn (element && (element !== RegularFunction.name) && (element !== RegularFunction.displayName));\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\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 * @callback LeUtils~__setTimeoutCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setTimeoutCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\n\t\t\tlet handler = setTimeout(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = performance.now();\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\tclearTimeout(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 * @callback LeUtils~__setIntervalCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setIntervalCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\n\t\t\tlet handler = setInterval(() =>\n\t\t\t{\n\t\t\t\tconst currentTime = performance.now();\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\tclearInterval(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 * @callback LeUtils~__setAnimationFrameTimeoutCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setAnimationFrameTimeoutCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 = performance.now();\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 = performance.now();\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 = (typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : 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\t(typeof window === 'undefined') ? clearTimeout(requestAnimationFrameId) : 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 * @callback LeUtils~__setAnimationFrameIntervalCallback\n\t * @param {number} deltaTime\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 {LeUtils~__setAnimationFrameIntervalCallback} callback ([number] deltaTime)\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(typeof window === 'undefined')\n\t\t\t{\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 lastTime = performance.now();\n\t\t\tlet frames = intervalFrames;\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\tlet currentTime = performance.now();\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\tframes = intervalFrames;\n\t\t\t\t\t}\n\t\t\t\t\tframes--;\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 = (typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : requestAnimationFrame(tick);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t(typeof window === 'undefined') ? setTimeout(tick, 1000 / 60) : 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\t(typeof window === 'undefined') ? clearTimeout(requestAnimationFrameId) : 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}\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());\n\t\t\t}\n\t\t\treturn new Promise(resolve => 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}\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());\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 {Object} [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, 0);\n\t\t\t\n\t\t\tlet controllerAborted = false;\n\t\t\tlet controller = null;\n\t\t\tif((typeof window !== 'undefined') && (typeof window.AbortController !== 'undefined'))\n\t\t\t{\n\t\t\t\tcontroller = new AbortController();\n\t\t\t}\n\t\t\t\n\t\t\tlet promise = new Promise((resolve, reject) =>\n\t\t\t{\n\t\t\t\tconst attemptFetch = () =>\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\treject(new Error('Aborted'));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfetch(url, {\n\t\t\t\t\t\tsignal:controller?.signal,\n\t\t\t\t\t\t...(options ?? {}),\n\t\t\t\t\t\tretries:undefined,\n\t\t\t\t\t\tdelay: undefined,\n\t\t\t\t\t}).then((response) =>\n\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}).then((response) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}).catch((error) =>\n\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\treject(error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentRetries++;\n\t\t\t\t\t\tsetTimeout(attemptFetch, (typeof options?.delay === 'function') ? INT_LAX_ANY(options?.delay(currentRetries), 500) : (INT_LAX_ANY(options?.delay, 500)));\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tattemptFetch();\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 * 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\tif(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn false;\n\t\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(window.navigator?.userAgent || window.navigator?.vendor || window.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\tif(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !LeUtils.platformIsMobile() && !window.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.flattenArray(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++;\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 = {};\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\tif(typeof window === 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t}\n\t\t\t\t\t// noinspection JSDeprecatedSymbols\n\t\t\t\t\tnow = (performance.timeOrigin || performance.timing.navigationStart) + performance.now();\n\t\t\t\t\tif(typeof now !== 'number')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e)\n\t\t\t\t{\n\t\t\t\t\tnow = (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\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 = {[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[result.id] !== true)\n\t\t\t\t\t{\n\t\t\t\t\t\tpreviousUniqueIds[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 (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\tif(typeof window === 'undefined')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error();\n\t\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) + performance.now();\n\t\t\t\t\t\tif(typeof now !== 'number')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t\t}\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\tnow = (Date.now ? Date.now() : (new Date()).getTime());\n\t\t\t\t\t}\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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn new Uint8ClampedArray();\n\t\t\t}\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tdocument.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((width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = 1;\n\t\t\t\t\tcanvas.height = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\t}\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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn LeUtils.getEmptyImageSrc();\n\t\t\t}\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tdocument.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((width <= 0) || (height <= 0))\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = 1;\n\t\t\t\t\tcanvas.height = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\t\t\t\t}\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\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\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, s, l = (max + min) / 2;\n\t\t\tif(max === min)\n\t\t\t{\n\t\t\t\th = s = 0;\n\t\t\t}\n\t\t\telse\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, g, b;\n\t\t\t\tif(s === 0)\n\t\t\t\t{\n\t\t\t\t\tr = g = b = l;\n\t\t\t\t}\n\t\t\t\telse\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 * <pre>\n\t * < 1.0 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 * </pre>\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 * <pre>\n\t * < 1.0 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 * </pre>\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 * <pre>\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 * </pre>\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 null;\n\t\t\t}\n\t\t\tclosest = closest[0];\n\t\t\t\n\t\t\tlet higher = 99999;\n\t\t\tlet lower = -99999;\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\tif(higher === 99999)\n\t\t\t{\n\t\t\t\thigher = null;\n\t\t\t}\n\t\t\tif(lower === -99999)\n\t\t\t{\n\t\t\t\tlower = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(((higher === null) && (lower === null)) || (higher === lower))\n\t\t\t{\n\t\t\t\treturn gradient[closest];\n\t\t\t}\n\t\t\telse if((higher !== null) && (lower !== null))\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 === null)\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 btoa === 'function')\n\t\t\t{\n\t\t\t\treturn btoa(string);\n\t\t\t}\n\t\t\treturn Buffer.from(string).toString('base64');\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 atob === 'function')\n\t\t\t{\n\t\t\t\treturn atob(base64string);\n\t\t\t}\n\t\t\treturn Buffer.from(base64string, 'base64').toString();\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\treturn LeUtils.btoa(hexstring.replace(/[^0-9A-F]/gi, '').match(/\\w{2}/g).map((a) => String.fromCharCode(parseInt(a, 16))).join(''));\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>|ArrayBufferLike} 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((typeof window === 'undefined') || !document)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst link = 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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet result = window.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\tresult = JSON.parse(result);\n\t\t\t\tif(typeof result['-'] !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn result['-'];\n\t\t\t\t}\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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof data === 'undefined')\n\t\t\t{\n\t\t\t\twindow.localStorage.removeItem('LeUtils_' + id);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.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(typeof window === 'undefined')\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.localStorage.removeItem('LeUtils_' + id);\n\t\t},\n\t\n\t/**\n\t * Returns whether the current hostname (window.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(typeof window === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn false; // server-side rendering, who knows to who it is being served to, assume it's public\n\t\t\t\t}\n\t\t\t\tconst hostname = window.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().toLowerCase();\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 * Creates and returns a new TreeSet.\n\t * A TreeSet is a set of elements, sorted by a comparator.\n\t * Binary search is used to find elements, which makes it very fast to find elements.\n\t *\n\t * The comparator is also used to determine if two values are equal to each other.\n\t * 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\t *\n\t * @param {*[]} elements\n\t * @param {Function} comparator\n\t * @returns {{getElements: (function(): *[]), getComparator: (function(): Function), size: (function(): number), isEmpty: (function(): boolean), contains: (function(*): boolean), first: (function(): *|undefined), last: (function(): *|undefined), pollFirst: (function(): *|undefined), pollLast: (function(): *|undefined), add: function(*), addAll: function(*[]|object), getEqualValue: (function(*): (*)), getEqualValueOrAdd: (function(*): (*))}}\n\t */\n\tcreateTreeSet:\n\t\t(elements, comparator) =>\n\t\t{\n\t\t\tcomparator = comparator || LeUtils.compare;\n\t\t\telements = elements || [];\n\t\t\telements.sort(comparator);\n\t\t\t\n\t\t\t/**\n\t\t\t * Performs a binary search on the elements, and returns the result.\n\t\t\t *\n\t\t\t * @param {*} value\n\t\t\t * @returns {{found: boolean, index: number, value: *|undefined}}\n\t\t\t */\n\t\t\tconst binarySearch = (value) =>\n\t\t\t{\n\t\t\t\tlet low = 0;\n\t\t\t\tlet high = elements.length - 1;\n\t\t\t\twhile(low <= high)\n\t\t\t\t{\n\t\t\t\t\tconst mid = Math.floor((low + high) / 2);\n\t\t\t\t\tconst midValue = elements[mid];\n\t\t\t\t\tconst cmp = comparator(midValue, value);\n\t\t\t\t\tif(cmp < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlow = mid + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse if(cmp > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\thigh = mid - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn {found:true, index:mid, value:midValue};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {found:false, index:low, value:undefined};\n\t\t\t};\n\t\t\t\n\t\t\tconst treeSet = {\n\t\t\t\t/**\n\t\t\t\t * Returns the elements of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {*[]}\n\t\t\t\t */\n\t\t\t\tgetElements:\n\t\t\t\t\t() => elements,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the comparator of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {Function}\n\t\t\t\t */\n\t\t\t\tgetComparator:\n\t\t\t\t\t() => comparator,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the size of the set.\n\t\t\t\t *\n\t\t\t\t * @returns {number}\n\t\t\t\t */\n\t\t\t\tsize:\n\t\t\t\t\t() => elements.length,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns true if the set is empty, false otherwise.\n\t\t\t\t *\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\tisEmpty:\n\t\t\t\t\t() => (elements.length <= 0),\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns true if the set contains a value that is equal to the given value, returns false otherwise.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\tcontains:\n\t\t\t\t\t(value) => binarySearch(value).found,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the first element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tfirst:\n\t\t\t\t\t() => (elements.length > 0) ? elements[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns the last element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tlast:\n\t\t\t\t\t() => (elements.length > 0) ? elements[elements.length - 1] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Removes and returns the first element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tpollFirst:\n\t\t\t\t\t() => (elements.length > 0) ? elements.splice(0, 1)[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Removes and returns the last element of the set, or undefined if it is empty.\n\t\t\t\t *\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tpollLast:\n\t\t\t\t\t() => (elements.length > 0) ? elements.splice(elements.length - 1, 1)[0] : undefined,\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Adds the given value to the set. Will only do so if no equal value already exists.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t */\n\t\t\t\tadd:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements.splice(result.index, 0, value);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Adds all the given values to the set. Will only do so if no equal value already exists.\n\t\t\t\t *\n\t\t\t\t * @param {*[]|object} values\n\t\t\t\t */\n\t\t\t\taddAll:\n\t\t\t\t\t(values) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tLeUtils.each(values, treeSet.add);\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Returns an equal value that's already in the tree set, or undefined if no equal values in it exist.\n\t\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {*|undefined}\n\t\t\t\t */\n\t\t\t\tgetEqualValue:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\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\t\t\t *\n\t\t\t\t * @param {*} value\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\tgetEqualValueOrAdd:\n\t\t\t\t\t(value) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst result = binarySearch(value);\n\t\t\t\t\t\tif(result.found)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements.splice(result.index, 0, value);\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t};\n\t\t\treturn treeSet;\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, sendMessage: function(Object, {timeout: number|undefined}|undefined): Promise<Object>}}\n\t */\n\tcreateWorkerThread:\n\t\t(name) =>\n\t\t{\n\t\t\tif((typeof window === 'undefined') || (typeof Worker === 'undefined'))\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tworker: null,\n\t\t\t\t\tsendMessage: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 Worker('/workers/' + name + '.worker.js');\n\t\t\tlet listeners = {};\n\t\t\t\n\t\t\tconst addListener = (id, callback) =>\n\t\t\t{\n\t\t\t\tlisteners[id] = callback;\n\t\t\t};\n\t\t\t\n\t\t\tconst removeListener = (id) =>\n\t\t\t{\n\t\t\t\tdelete listeners[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[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 = {};\n\t\t\treturn (workerName, data, options) =>\n\t\t\t{\n\t\t\t\tif(!workers[workerName])\n\t\t\t\t{\n\t\t\t\t\tworkers[workerName] = LeUtils.createWorkerThread(workerName);\n\t\t\t\t}\n\t\t\t\treturn workers[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\tif((typeof window === 'undefined') || !document)\n\t\t{\n\t\t\treturn () => true;\n\t\t}\n\t\tconst inputTypes = ['text', 'search', 'email', 'number', 'password', 'tel', 'time', 'url', 'week', 'month', 'date', 'datetime-local'];\n\t\treturn () => !((document?.activeElement?.tagName?.toLowerCase() === 'input') && inputTypes.includes(document?.activeElement?.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\tif((typeof window === 'undefined') || !navigator)\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\tlet locales = 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((typeof window !== 'undefined') && (typeof window.Intl !== 'undefined') && (typeof window.Intl.DateTimeFormat !== 'undefined'))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst formattedDate = new window.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"],"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","INT","Math","round","FLOAT","INT_ANY","FLOAT_ANY","apply","v","isNaN","_len2","_key2","_i2","_values2","INT_LAX","FLOAT_LAX","INT_LAX_ANY","FLOAT_LAX_ANY","parseFloat","replace","_len3","_key3","_i3","_values3","checkTransactionalValue","transactionalValue","LeUtils","isTransactionalValueValid","console","error","Error","findTransactionalValueChange","changeId","i","changes","change","id","index","equals","FastDeepEqual","clone","CloneDeep","onDomReady","callback","window","document","remove","readyState","setTimeout","listening","callbackWrapper","removeEventListener","addEventListener","parseVersionString","versionString","_versionString","_versionString2","_versionString3","major","minor","patch","trim","partsVersion","split","THIS","toString","otherVersion","largerThan","largerThanOrEquals","smallerThan","smallerThanOrEquals","contains","array","result","each","val","containsCaseInsensitive","toLowerCase","containsAll","containsAllCaseInsensitive","containsAny","containsAnyCaseInsensitive","containsNone","containsNoneCaseInsensitive","elements","optionalSkipHasOwnPropertyCheck","undefined","call","Object","prototype","hasOwnProperty","warn","eachAsync","eachAsyncParallel","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","asyncCallback","optionalParallelCount","promises","doBreak","wrap","_callee3$","_context4","prev","next","_ref3","_callee2","element","_loop","promise","_callee2$","_context3","newPromises","_loop$","_context2","__lowentry_utils__promise_is_done__","push","Promise","any","stop","delegateYield","abrupt","_callee","_callee$","_context","t0","sent","_x5","_x6","all","_x","_x2","_x3","_x4","_ref5","_callee4","parallelCount","_index2","_args5","_callee4$","_context5","t1","keys","t2","done","t3","_x7","_x8","filter","map","mapToArray","mapToArraySorted","comparator","sortKeys","sort","a","b","flattenArray","flattenArrayRecursive","forEach","entry","compare","compareNumbers","compareNumericStrings","compareTimestampStrings","base64ToHex","replaceAll","isEmptyObject","obj","field","getObjectFieldsCount","count","isGeneratorFunction","GeneratorFunction","_callee5","_callee5$","_context6","constructor","AsyncGeneratorFunction","_wrapAsyncGenerator","_callee6","_callee6$","_context7","RegularFunction","PossibleGeneratorFunctionNames","from","Set","name","displayName","func","includes","_setTimeout","_x9","_x10","ms","lastTime","performance","now","handler","currentTime","e","clearTimeout","setInterval","_setInterval","_x11","intervalMs","fireImmediately","clearInterval","setAnimationFrameTimeout","frames","run","requestAnimationFrameId","tick","requestAnimationFrame","cancelAnimationFrame","setAnimationFrameInterval","intervalFrames","promiseTimeout","resolve","promiseAnimationFrameTimeout","fetch","_fetch","_x12","_x13","url","options","currentRetries","retries","controllerAborted","controller","AbortController","reject","attemptFetch","_controller","_controller2","signal","aborted","_objectSpread","delay","then","response","ok","status","statusText","_promise","_promise2","_promise3","_controller3","abort","isRemoved","_controller4","platformIsMobile","_window$navigator","_window$navigator2","navigator","userAgent","vendor","opera","substring","test","platformHasCursor","_window$matchMedia","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","uniqueId","previousUniqueIdsTime","previousUniqueIds","numberToBytes","number","size","ceil","floor","log2","bytes","Uint8ClampedArray","x","rightByte","generateUniqueId","timeOrigin","timing","navigationStart","Date","getTime","nowBytes","uuid","_crypto","crypto","randomUUID","base64ToBytes","hexToBase64","bytesChunkA","random","padEnd","bytesChunkB","bytesChunkC","bytesChunkD","Uint8Array","set","bytesToBase64","time","_defineProperty","timestamp","getEmptyImageSrc","getPercentage","part","total","max","min","getImagePixels","image","canvas","createElement","body","appendChild","ctx","getContext","width","height","drawImage","getImageData","data","parentNode","removeChild","getColoredImage","color","globalCompositeOperation","fillStyle","fillRect","toDataURL","rgbToHex","rgb","hex","hexToRgb","hexstring","hasAlpha","match","parseInt","_toConsumableArray","rgbToHsl","r","g","h","s","l","d","hslToRgb","hue2rgb","p","q","t","hsl","rgbToLab","pow","y","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","higherDifference","lowerDifference","tmp","getRgbBetween","startRgb","endRgb","partEnd","partStart","btoa","_btoa","_x14","Buffer","atob","_atob","_x15","base64string","utf8ToBase64","encodeURIComponent","p1","String","fromCharCode","base64ToUtf8","decodeURIComponent","charCodeAt","binary","len","arraybuffer","byteLength","downloadFile","fileName","mimeType","link","setAttribute","href","click","localStorageGet","localStorage","getItem","parse","localStorageSet","removeItem","setItem","localStorageRemove","isCurrentHostPrivate","lastHostname","lastResult","hostname","location","isGivenHostPrivate","host","parts","createTreeSet","binarySearch","low","high","mid","midValue","cmp","found","treeSet","getElements","getComparator","isEmpty","first","last","pollFirst","splice","pollLast","add","addAll","getEqualValue","getEqualValueOrAdd","createTransactionalValue","transactionalValueToString","valuesString","transactionSetAndCommit","transactionSetWithoutCommitting","transactionCommitChange","transactionCancelChange","transactionIsChangeRelevant","transactionGetCommittedValue","transactionGetValue","createWorkerThread","Worker","worker","sendMessage","listeners","addListener","removeListener","_options$timeout","timeout","postMessage","onerror","onmessage","sendWorkerMessage","workers","workerName","purgeEmail","email","isFocusClear","inputTypes","_document","_document2","activeElement","tagName","type","getUserLocale","userLocale","_navigator$languages","_navigator","locales","languages","locale","localesNoEnglish","getUserLocaleDateFormat","userLocaleDateFormat","char","Intl","DateTimeFormat","formattedDate","format"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowentry/utils",
3
- "version": "1.11.2",
3
+ "version": "1.11.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./index.js",
package/src/LeUtils.js CHANGED
@@ -1288,7 +1288,7 @@ export const LeUtils = {
1288
1288
  *
1289
1289
  * @param {string} url
1290
1290
  * @param {Object} [options]
1291
- * @returns {{promise:Promise<*>, then:Function, catch:Function, finally:Function, remove:Function, isRemoved:Function}}
1291
+ * @returns {{then:Function, catch:Function, finally:Function, remove:Function, isRemoved:Function}}
1292
1292
  */
1293
1293
  fetch:
1294
1294
  (url, options) =>
@@ -1303,7 +1303,7 @@ export const LeUtils = {
1303
1303
  controller = new AbortController();
1304
1304
  }
1305
1305
 
1306
- const promise = new Promise((resolve, reject) =>
1306
+ let promise = new Promise((resolve, reject) =>
1307
1307
  {
1308
1308
  const attemptFetch = () =>
1309
1309
  {
@@ -1343,20 +1343,19 @@ export const LeUtils = {
1343
1343
  });
1344
1344
 
1345
1345
  let result = {};
1346
- result.promise = promise;
1347
1346
  result.then = (...args) =>
1348
1347
  {
1349
- promise.then(...args);
1348
+ promise = promise.then(...args);
1350
1349
  return result;
1351
1350
  };
1352
1351
  result.catch = (...args) =>
1353
1352
  {
1354
- promise.catch(...args);
1353
+ promise = promise.catch(...args);
1355
1354
  return result;
1356
1355
  };
1357
1356
  result.finally = (...args) =>
1358
1357
  {
1359
- promise.finally(...args);
1358
+ promise = promise.finally(...args);
1360
1359
  return result;
1361
1360
  };
1362
1361
  result.remove = (...args) =>