diff --git a/dist/fquery.js b/dist/fquery.js index ba06c52..e4f11c3 100644 --- a/dist/fquery.js +++ b/dist/fquery.js @@ -4214,17 +4214,46 @@ } Object.defineProperty(event, 'currentTarget', { - value: delegate, configurable: true, + enumerable: true, + value: delegate, }); Object.defineProperty(event, 'delegateTarget', { + configurable: true, + enumerable: true, value: node, + }); + + return callback(event); + }; + } + /** + * Return a wrapped event callback that cleans up delegate events. + * @param {HTMLElement|ShadowRoot|Document} node The input node. + * @param {function} callback The event callback. + * @return {DOM~eventCallback} The cleaned event callback. + */ + function delegateFactoryClean(node, callback) { + return (event) => { + if (!event.delegateTarget) { + return callback(event); + } + + Object.defineProperty(event, 'currentTarget', { configurable: true, + enumerable: true, + value: node, }); + Object.defineProperty(event, 'delegateTarget', { + writable: true, + }); + + delete event.delegateTarget; return callback(event); }; } + /** * Return a wrapped mouse drag event (optionally debounced). * @param {DOM~eventCallback} down The callback to execute on mousedown. @@ -4403,6 +4432,8 @@ if (delegate) { realCallback = delegateFactory(node, delegate, realCallback); + } else { + realCallback = delegateFactoryClean(node, realCallback); } realCallback = namespaceFactory(eventName, realCallback); diff --git a/dist/fquery.js.map b/dist/fquery.js.map index 86e39bd..bb1d163 100644 --- a/dist/fquery.js.map +++ b/dist/fquery.js.map @@ -1 +1 @@ -{"version":3,"file":"fquery.js","sources":["../node_modules/@fr0st/core/src/testing.js","../node_modules/@fr0st/core/src/math.js","../node_modules/@fr0st/core/src/array.js","../node_modules/@fr0st/core/src/function.js","../node_modules/@fr0st/core/src/object.js","../node_modules/@fr0st/core/src/string.js","../src/config.js","../src/helpers.js","../src/vars.js","../src/ajax/helpers.js","../src/ajax/ajax-request.js","../src/ajax/ajax.js","../src/animation/helpers.js","../src/animation/animation.js","../src/animation/animation-set.js","../src/manipulation/create.js","../src/parser/parser.js","../src/query/query-set.js","../src/traversal/find.js","../src/filters.js","../src/animation/animate.js","../src/animation/animations.js","../src/utility/utility.js","../src/traversal/traversal.js","../src/events/event-factory.js","../src/events/event-handlers.js","../src/manipulation/manipulation.js","../src/attributes/attributes.js","../src/attributes/data.js","../src/attributes/styles.js","../src/attributes/position.js","../src/attributes/scroll.js","../src/attributes/size.js","../src/cookie/cookie.js","../src/events/events.js","../src/manipulation/move.js","../src/manipulation/wrap.js","../src/query/animation/animate.js","../src/query/animation/animations.js","../src/query/attributes/attributes.js","../src/query/attributes/data.js","../src/query/attributes/position.js","../src/query/attributes/scroll.js","../src/query/attributes/size.js","../src/query/attributes/styles.js","../src/query/events/event-handlers.js","../src/query/events/events.js","../src/query/manipulation/create.js","../src/query/manipulation/manipulation.js","../src/query/manipulation/move.js","../src/query/manipulation/wrap.js","../src/queue/queue.js","../src/query/queue/queue.js","../src/traversal/filter.js","../src/query/traversal/filter.js","../src/query/traversal/find.js","../src/query/traversal/traversal.js","../src/utility/selection.js","../src/query/utility/selection.js","../src/utility/tests.js","../src/query/utility/tests.js","../src/query/utility/utility.js","../src/query/proto.js","../src/query/query.js","../src/scripts/scripts.js","../src/styles/styles.js","../src/utility/sanitize.js","../src/fquery.js","../src/globals.js","../src/index.js"],"sourcesContent":["/**\n * Testing methods\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst DOCUMENT_NODE = 9;\nconst DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Returns true if the value is an array.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is an array, otherwise FALSE.\n */\nexport const isArray = Array.isArray;\n\n/**\n * Returns true if the value is array-like.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is array-like, otherwise FALSE.\n */\nexport const isArrayLike = (value) =>\n isArray(value) ||\n (\n isObject(value) &&\n !isFunction(value) &&\n !isWindow(value) &&\n !isElement(value) &&\n (\n (\n Symbol.iterator in value &&\n isFunction(value[Symbol.iterator])\n ) ||\n (\n 'length' in value &&\n isNumeric(value.length) &&\n (\n !value.length ||\n value.length - 1 in value\n )\n )\n )\n );\n\n/**\n * Returns true if the value is a Boolean.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is boolean, otherwise FALSE.\n */\nexport const isBoolean = (value) =>\n value === !!value;\n\n/**\n * Returns true if the value is a Document.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Document, otherwise FALSE.\n */\nexport const isDocument = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_NODE;\n\n/**\n * Returns true if the value is a HTMLElement.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a HTMLElement, otherwise FALSE.\n */\nexport const isElement = (value) =>\n !!value &&\n value.nodeType === ELEMENT_NODE;\n\n/**\n * Returns true if the value is a DocumentFragment.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a DocumentFragment, otherwise FALSE.\n */\nexport const isFragment = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !value.host;\n\n/**\n * Returns true if the value is a function.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a function, otherwise FALSE.\n */\nexport const isFunction = (value) =>\n typeof value === 'function';\n\n/**\n * Returns true if the value is NaN.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is NaN, otherwise FALSE.\n */\nexport const isNaN = Number.isNaN;\n\n/**\n * Returns true if the value is a Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Node, otherwise FALSE.\n */\nexport const isNode = (value) =>\n !!value &&\n (\n value.nodeType === ELEMENT_NODE ||\n value.nodeType === TEXT_NODE ||\n value.nodeType === COMMENT_NODE\n );\n\n/**\n * Returns true if the value is null.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is null, otherwise FALSE.\n */\nexport const isNull = (value) =>\n value === null;\n\n/**\n * Returns true if the value is numeric.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is numeric, otherwise FALSE.\n */\nexport const isNumeric = (value) =>\n !isNaN(parseFloat(value)) &&\n isFinite(value);\n\n/**\n * Returns true if the value is an object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is an object, otherwise FALSE.\n */\nexport const isObject = (value) =>\n !!value &&\n value === Object(value);\n\n/**\n * Returns true if the value is a plain object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a plain object, otherwise FALSE.\n */\nexport const isPlainObject = (value) =>\n !!value &&\n value.constructor === Object;\n\n/**\n * Returns true if the value is a ShadowRoot.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a ShadowRoot, otherwise FALSE.\n */\nexport const isShadow = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !!value.host;\n\n/**\n * Returns true if the value is a string.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a string, otherwise FALSE.\n */\nexport const isString = (value) =>\n value === `${value}`;\n\n/**\n * Returns true if the value is a text Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a text Node, otherwise FALSE.\n */\nexport const isText = (value) =>\n !!value &&\n value.nodeType === TEXT_NODE;\n\n/**\n * Returns true if the value is undefined.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is undefined, otherwise FALSE.\n */\nexport const isUndefined = (value) =>\n value === undefined;\n\n/**\n * Returns true if the value is a Window.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a Window, otherwise FALSE.\n */\nexport const isWindow = (value) =>\n !!value &&\n !!value.document &&\n value.document.defaultView === value;\n","import { isNull } from './testing.js';\n\n/**\n * Math methods\n */\n\n/**\n * Clamp a value between a min and max.\n * @param {number} value The value to clamp.\n * @param {number} [min=0] The minimum value of the clamped range.\n * @param {number} [max=1] The maximum value of the clamped range.\n * @return {number} The clamped value.\n */\nexport const clamp = (value, min = 0, max = 1) =>\n Math.max(\n min,\n Math.min(\n max,\n value,\n ),\n );\n\n/**\n * Clamp a value between 0 and 100.\n * @param {number} value The value to clamp.\n * @return {number} The clamped value.\n */\nexport const clampPercent = (value) =>\n clamp(value, 0, 100);\n\n/**\n * Get the distance between two vectors.\n * @param {number} x1 The first vector X co-ordinate.\n * @param {number} y1 The first vector Y co-ordinate.\n * @param {number} x2 The second vector X co-ordinate.\n * @param {number} y2 The second vector Y co-ordinate.\n * @return {number} The distance between the vectors.\n */\nexport const dist = (x1, y1, x2, y2) =>\n len(\n x1 - x2,\n y1 - y2,\n );\n\n/**\n * Inverse linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} value The value to inverse interpolate.\n * @return {number} The interpolated amount.\n */\nexport const inverseLerp = (v1, v2, value) =>\n (value - v1) / (v2 - v1);\n\n/**\n * Get the length of an X,Y vector.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @returns {number} The length of the vector.\n */\nexport const len = Math.hypot;\n\n/**\n * Linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} amount The amount to interpolate.\n * @return {number} The interpolated value.\n */\nexport const lerp = (v1, v2, amount) =>\n v1 *\n (1 - amount) +\n v2 *\n amount;\n\n/**\n * Map a value from one range to another.\n * @param {number} value The value to map.\n * @param {number} fromMin The minimum value of the current range.\n * @param {number} fromMax The maximum value of the current range.\n * @param {number} toMin The minimum value of the target range.\n * @param {number} toMax The maximum value of the target range.\n * @return {number} The mapped value.\n */\nexport const map = (value, fromMin, fromMax, toMin, toMax) =>\n (value - fromMin) *\n (toMax - toMin) /\n (fromMax - fromMin) +\n toMin;\n\n/**\n * Return a random floating-point number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const random = (a = 1, b = null) =>\n isNull(b) ?\n Math.random() * a :\n map(\n Math.random(),\n 0,\n 1,\n a,\n b,\n );\n\n/**\n * Return a random number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const randomInt = (a = 1, b = null) =>\n random(a, b) | 0;\n\n/**\n * Constrain a number to a specified step-size.\n * @param {number} value The value to constrain.\n * @param {number} step The minimum step-size.\n * @return {number} The constrained value.\n */\nexport const toStep = (value, step = 0.01) =>\n parseFloat(\n (\n Math.round(value / step) *\n step\n ).toFixed(\n `${step}`.replace(/\\d*\\.?/, '').length,\n ),\n );\n","import { randomInt, toStep } from './math.js';\nimport { isArray, isArrayLike, isUndefined } from './testing.js';\n\n/**\n * Array methods\n */\n\n/**\n * Create a new array containing the values of the first array, that do not exist in any of the additional passed arrays.\n * @param {array} array The input array.\n * @param {...array} arrays The arrays to compare against.\n * @return {array} The output array.\n */\nexport const diff = (array, ...arrays) => {\n arrays = arrays.map(unique);\n return array.filter(\n (value) => !arrays\n .some((other) => other.includes(value)),\n );\n};\n\n/**\n * Create a new array containing the unique values that exist in all of the passed arrays.\n * @param {...array} arrays The input arrays.\n * @return {array} The output array.\n */\nexport const intersect = (...arrays) =>\n unique(\n arrays\n .reduce(\n (acc, array, index) => {\n array = unique(array);\n return merge(\n acc,\n array.filter(\n (value) =>\n arrays.every(\n (other, otherIndex) =>\n index == otherIndex ||\n other.includes(value),\n ),\n ),\n );\n },\n [],\n ),\n );\n\n/**\n * Merge the values from one or more arrays or array-like objects onto an array.\n * @param {array} array The input array.\n * @param {...array|object} arrays The arrays or array-like objects to merge.\n * @return {array} The output array.\n */\nexport const merge = (array = [], ...arrays) =>\n arrays.reduce(\n (acc, other) => {\n Array.prototype.push.apply(acc, other);\n return array;\n },\n array,\n );\n\n/**\n * Return a random value from an array.\n * @param {array} array The input array.\n * @return {*} A random value from the array, or null if it is empty.\n */\nexport const randomValue = (array) =>\n array.length ?\n array[randomInt(array.length)] :\n null;\n\n/**\n * Return an array containing a range of values.\n * @param {number} start The first value of the sequence.\n * @param {number} end The value to end the sequence on.\n * @param {number} [step=1] The increment between values in the sequence.\n * @return {number[]} The array of values from start to end.\n */\nexport const range = (start, end, step = 1) => {\n const sign = Math.sign(end - start);\n return new Array(\n (\n (\n Math.abs(end - start) /\n step\n ) +\n 1\n ) | 0,\n )\n .fill()\n .map(\n (_, i) =>\n start + toStep(\n (i * step * sign),\n step,\n ),\n );\n};\n\n/**\n * Remove duplicate elements in an array.\n * @param {array} array The input array.\n * @return {array} The filtered array.\n */\nexport const unique = (array) =>\n Array.from(\n new Set(array),\n );\n\n/**\n * Create an array from any value.\n * @param {*} value The input value.\n * @return {array} The wrapped array.\n */\nexport const wrap = (value) =>\n isUndefined(value) ?\n [] :\n (\n isArray(value) ?\n value :\n (\n isArrayLike(value) ?\n merge([], value) :\n [value]\n )\n );\n","import { isFunction, isUndefined } from './testing.js';\n\n/**\n * Function methods\n */\n\nconst isBrowser = typeof window !== 'undefined' && 'requestAnimationFrame' in window;\n\n/**\n * Execute a callback on the next animation frame\n * @param {function} callback Callback function to execute.\n * @return {number} The request ID.\n */\nconst _requestAnimationFrame = isBrowser ?\n (...args) => window.requestAnimationFrame(...args) :\n (callback) => setTimeout(callback, 1000 / 60);\n\n/**\n * Create a wrapped version of a function that executes at most once per animation frame\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the animation frame.\n * @return {function} The wrapped function.\n */\nexport const animation = (callback, { leading = false } = {}) => {\n let animationReference;\n let newArgs;\n let running;\n\n const animation = (...args) => {\n newArgs = args;\n\n if (running) {\n return;\n }\n\n if (leading) {\n callback(...newArgs);\n }\n\n running = true;\n animationReference = _requestAnimationFrame((_) => {\n if (!leading) {\n callback(...newArgs);\n }\n\n running = false;\n animationReference = null;\n });\n };\n\n animation.cancel = (_) => {\n if (!animationReference) {\n return;\n }\n\n if (isBrowser) {\n global.cancelAnimationFrame(animationReference);\n } else {\n clearTimeout(animationReference);\n }\n\n running = false;\n animationReference = null;\n };\n\n return animation;\n};\n\n/**\n * Create a wrapped function that will execute each callback in reverse order,\n * passing the result from each function to the previous.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const compose = (...callbacks) =>\n (arg) =>\n callbacks.reduceRight(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function, that will return new functions\n * until the number of total arguments passed reaches the arguments length\n * of the original function (at which point the function will execute).\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const curry = (callback) => {\n const curried = (...args) =>\n args.length >= callback.length ?\n callback(...args) :\n (...newArgs) =>\n curried(\n ...args.concat(newArgs),\n );\n\n return curried;\n};\n\n/**\n * Create a wrapped version of a function that executes once per wait period\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const debounce = (callback, wait = 0, { leading = false, trailing = true } = {}) => {\n let debounceReference;\n let lastRan;\n let newArgs;\n\n const debounced = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (!trailing) {\n return;\n }\n\n if (debounceReference) {\n clearTimeout(debounceReference);\n }\n\n debounceReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n debounceReference = null;\n },\n wait,\n );\n };\n\n debounced.cancel = (_) => {\n if (!debounceReference) {\n return;\n }\n\n clearTimeout(debounceReference);\n\n debounceReference = null;\n };\n\n return debounced;\n};\n\n/**\n * Evaluate a value from a function or value.\n * @param {*} value The value to evaluate.\n * @return {*} The evaluated value.\n */\nexport const evaluate = (value) =>\n isFunction(value) ?\n value() :\n value;\n\n/**\n * Create a wrapped version of a function that will only ever execute once.\n * Subsequent calls to the wrapped function will return the result of the initial call.\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const once = (callback) => {\n let ran;\n let result;\n\n return (...args) => {\n if (ran) {\n return result;\n }\n\n ran = true;\n result = callback(...args);\n return result;\n };\n};\n\n/**\n * Create a wrapped version of a function with predefined arguments.\n * @param {function} callback Callback function to execute.\n * @param {...*} [defaultArgs] Default arguments to pass to the function.\n * @return {function} The wrapped function.\n */\nexport const partial = (callback, ...defaultArgs) =>\n (...args) =>\n callback(\n ...(defaultArgs\n .slice()\n .map((v) =>\n isUndefined(v) ?\n args.shift() :\n v,\n ).concat(args)\n ),\n );\n\n/**\n * Create a wrapped function that will execute each callback in order,\n * passing the result from each function to the next.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const pipe = (...callbacks) =>\n (arg) =>\n callbacks.reduce(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function that executes at most once per wait period.\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=true] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const throttle = (callback, wait = 0, { leading = true, trailing = true } = {}) => {\n let throttleReference;\n let lastRan;\n let newArgs;\n let running;\n\n const throttled = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (running || !trailing) {\n return;\n }\n\n running = true;\n throttleReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n running = false;\n throttleReference = null;\n },\n delta === null ?\n wait :\n wait - delta,\n );\n };\n\n throttled.cancel = (_) => {\n if (!throttleReference) {\n return;\n }\n\n clearTimeout(throttleReference);\n\n running = false;\n throttleReference = null;\n };\n\n return throttled;\n};\n\n/**\n * Execute a function a specified number of times.\n * @param {function} callback Callback function to execute.\n * @param {number} amount The amount of times to execute the callback.\n */\nexport const times = (callback, amount) => {\n while (amount--) {\n if (callback() === false) {\n break;\n }\n }\n};\n","import { isArray, isObject, isPlainObject } from './testing.js';\n\n/**\n * Object methods\n */\n\n/**\n * Merge the values from one or more objects onto an object (recursively).\n * @param {object} object The input object.\n * @param {...object} objects The objects to merge.\n * @return {object} The output objects.\n */\nexport const extend = (object, ...objects) =>\n objects.reduce(\n (acc, val) => {\n for (const k in val) {\n if (isArray(val[k])) {\n acc[k] = extend(\n isArray(acc[k]) ?\n acc[k] :\n [],\n val[k],\n );\n } else if (isPlainObject(val[k])) {\n acc[k] = extend(\n isPlainObject(acc[k]) ?\n acc[k] :\n {},\n val[k],\n );\n } else {\n acc[k] = val[k];\n }\n }\n return acc;\n },\n object,\n );\n\n/**\n * Remove a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to remove from the object.\n */\nexport const forgetDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n break;\n }\n\n if (keys.length) {\n object = object[key];\n } else {\n delete object[key];\n }\n }\n};\n\n/**\n * Retrieve the value of a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to retrieve from the object.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {*} The value retrieved from the object.\n */\nexport const getDot = (object, key, defaultValue) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return defaultValue;\n }\n\n object = object[key];\n }\n\n return object;\n};\n\n/**\n * Returns true if a specified key exists in an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to test for in the object.\n * @return {Boolean} TRUE if the key exists, otherwise FALSE.\n */\nexport const hasDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return false;\n }\n\n object = object[key];\n }\n\n return true;\n};\n\n/**\n * Retrieve values of a specified key from an array of objects using dot notation.\n * @param {object[]} objects The input objects.\n * @param {string} key The key to retrieve from the objects.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {array} An array of values retrieved from the objects.\n */\nexport const pluckDot = (objects, key, defaultValue) =>\n objects\n .map((pointer) =>\n getDot(pointer, key, defaultValue),\n );\n\n/**\n * Set a specified value of a key for an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to set in the object.\n * @param {*} value The value to set.\n * @param {object} [options] The options for setting the value.\n * @param {Boolean} [options.overwrite=true] Whether to overwrite, if the key already exists.\n */\nexport const setDot = (object, key, value, { overwrite = true } = {}) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (key === '*') {\n for (const k in object) {\n if (!{}.hasOwnProperty.call(object, k)) {\n continue;\n }\n\n setDot(\n object,\n [k].concat(keys).join('.'),\n value,\n overwrite,\n );\n }\n return;\n }\n\n if (keys.length) {\n if (\n !isObject(object[key]) ||\n !(key in object)\n ) {\n object[key] = {};\n }\n\n object = object[key];\n } else if (\n overwrite ||\n !(key in object)\n ) {\n object[key] = value;\n }\n }\n};\n","import { random } from './math.js';\n\n// HTML escape characters\nconst escapeChars = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n};\n\nconst unescapeChars = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: '\\'',\n};\n\n/**\n * String methods\n */\n\n/**\n * Split a string into individual words.\n * @param {string} string The input string.\n * @return {string[]} The split parts of the string.\n */\nconst _splitString = (string) =>\n `${string}`\n .split(/[^a-zA-Z0-9']|(?=[A-Z])/)\n .reduce(\n (acc, word) => {\n word = word.replace(/[^\\w]/, '').toLowerCase();\n if (word) {\n acc.push(word);\n }\n return acc;\n },\n [],\n );\n\n/**\n * Convert a string to camelCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const camelCase = (string) =>\n _splitString(string)\n .map(\n (word, index) =>\n index ?\n capitalize(word) :\n word,\n )\n .join('');\n\n/**\n * Convert the first character of string to upper case and the remaining to lower case.\n * @param {string} string The input string.\n * @return {string} The capitalized string.\n */\nexport const capitalize = (string) =>\n string.charAt(0).toUpperCase() +\n string.substring(1).toLowerCase();\n\n/**\n * Convert HTML special characters in a string to their corresponding HTML entities.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escape = (string) =>\n string.replace(\n /[&<>\"']/g,\n (match) =>\n escapeChars[match],\n );\n\n/**\n * Escape RegExp special characters in a string.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escapeRegExp = (string) =>\n string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n/**\n * Convert a string to a humanized form.\n * @param {string} string The input string.\n * @return {string} The humanized string.\n */\nexport const humanize = (string) =>\n capitalize(\n _splitString(string)\n .join(' '),\n );\n\n/**\n * Convert a string to kebab-case.\n * @param {string} string The input string.\n * @return {string} The kebab-cased string.\n */\nexport const kebabCase = (string) =>\n _splitString(string)\n .join('-')\n .toLowerCase();\n\n/**\n * Convert a string to PascalCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const pascalCase = (string) =>\n _splitString(string)\n .map(\n (word) =>\n word.charAt(0).toUpperCase() +\n word.substring(1),\n )\n .join('');\n\n/**\n * Return a random string.\n * @param {number} [length=16] The length of the output string.\n * @param {string} [chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789] The characters to generate the string from.\n * @return {string} The random string.\n */\nexport const randomString = (length = 16, chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789') =>\n new Array(length)\n .fill()\n .map(\n (_) =>\n chars[random(chars.length) | 0],\n )\n .join('');\n\n/**\n * Convert a string to snake_case.\n * @param {string} string The input string.\n * @return {string} The snake_cased string.\n */\nexport const snakeCase = (string) =>\n _splitString(string)\n .join('_')\n .toLowerCase();\n\n/**\n * Convert HTML entities in a string to their corresponding characters.\n * @param {string} string The input string.\n * @return {string} The unescaped string.\n */\nexport const unescape = (string) =>\n string.replace(\n /&(amp|lt|gt|quot|apos);/g,\n (_, code) =>\n unescapeChars[code],\n );\n","import { extend, isDocument, isWindow } from '@fr0st/core';\n\n/**\n * DOM Config\n */\n\nconst ajaxDefaults = {\n afterSend: null,\n beforeSend: null,\n cache: true,\n contentType: 'application/x-www-form-urlencoded',\n data: null,\n headers: {},\n isLocal: null,\n method: 'GET',\n onProgress: null,\n onUploadProgress: null,\n processData: true,\n rejectOnCancel: true,\n responseType: null,\n url: null,\n xhr: (_) => new XMLHttpRequest,\n};\n\nconst animationDefaults = {\n duration: 1000,\n type: 'ease-in-out',\n infinite: false,\n debug: false,\n};\n\nexport const config = {\n ajaxDefaults,\n animationDefaults,\n context: null,\n useTimeout: false,\n window: null,\n};\n\n/**\n * Get the AJAX defaults.\n * @return {object} The AJAX defaults.\n */\nexport function getAjaxDefaults() {\n return ajaxDefaults;\n};\n\n/**\n * Get the animation defaults.\n * @return {object} The animation defaults.\n */\nexport function getAnimationDefaults() {\n return animationDefaults;\n};\n\n/**\n * Get the document context.\n * @return {Document} The document context.\n */\nexport function getContext() {\n return config.context;\n};\n\n/**\n * Get the window.\n * @return {Window} The window.\n */\nexport function getWindow() {\n return config.window;\n};\n\n/**\n * Set the AJAX defaults.\n * @param {object} options The ajax default options.\n */\nexport function setAjaxDefaults(options) {\n extend(ajaxDefaults, options);\n};\n\n/**\n * Set the animation defaults.\n * @param {object} options The animation default options.\n */\nexport function setAnimationDefaults(options) {\n extend(animationDefaults, options);\n};\n\n/**\n * Set the document context.\n * @param {Document} context The document context.\n */\nexport function setContext(context) {\n if (!isDocument(context)) {\n throw new Error('FrostDOM requires a valid Document.');\n }\n\n config.context = context;\n};\n\n/**\n * Set the window.\n * @param {Window} window The window.\n */\nexport function setWindow(window) {\n if (!isWindow(window)) {\n throw new Error('FrostDOM requires a valid Window.');\n }\n\n config.window = window;\n};\n\n/**\n * Set whether animations should use setTimeout.\n * @param {Boolean} [enable=true] Whether animations should use setTimeout.\n */\nexport function useTimeout(enable = true) {\n config.useTimeout = enable;\n};\n","import { escapeRegExp, isArray, isNumeric, isObject, isString, isUndefined } from '@fr0st/core';\n\n/**\n * DOM Helpers\n */\n\n/**\n * Create a wrapped version of a function that executes once per tick.\n * @param {function} callback Callback function to debounce.\n * @return {function} The wrapped function.\n */\nexport function debounce(callback) {\n let running;\n\n return (...args) => {\n if (running) {\n return;\n }\n\n running = true;\n\n Promise.resolve().then((_) => {\n callback(...args);\n running = false;\n });\n };\n};\n\n/**\n * Return a RegExp for testing a namespaced event.\n * @param {string} event The namespaced event.\n * @return {RegExp} The namespaced event RegExp.\n */\nexport function eventNamespacedRegExp(event) {\n return new RegExp(`^${escapeRegExp(event)}(?:\\\\.|$)`, 'i');\n};\n\n/**\n * Return a single dimensional array of classes (from a multi-dimensional array or space-separated strings).\n * @param {array} classList The classes to parse.\n * @return {string[]} The parsed classes.\n */\nexport function parseClasses(classList) {\n return classList\n .flat()\n .flatMap((val) => val.split(' '))\n .filter((val) => !!val);\n};\n\n/**\n * Return a data object from a key and value, or a data object.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @param {object} [options] The options for parsing data.\n * @param {Boolean} [options.json=false] Whether to JSON encode the values.\n * @return {object} The data object.\n */\nexport function parseData(key, value, { json = false } = {}) {\n const result = isString(key) ?\n { [key]: value } :\n key;\n\n if (!json) {\n return result;\n }\n\n return Object.fromEntries(\n Object.entries(result)\n .map(([key, value]) => [key, isObject(value) || isArray(value) ? JSON.stringify(value) : value]),\n );\n};\n\n/**\n * Return a JS primitive from a dataset string.\n * @param {string} value The input value.\n * @return {*} The parsed value.\n */\nexport function parseDataset(value) {\n if (isUndefined(value)) {\n return value;\n }\n\n const lower = value.toLowerCase().trim();\n\n if (['true', 'on'].includes(lower)) {\n return true;\n }\n\n if (['false', 'off'].includes(lower)) {\n return false;\n }\n\n if (lower === 'null') {\n return null;\n }\n\n if (isNumeric(lower)) {\n return parseFloat(lower);\n }\n\n if (['{', '['].includes(lower.charAt(0))) {\n try {\n const result = JSON.parse(value);\n return result;\n } catch (e) { }\n }\n\n return value;\n};\n\n/**\n * Return a \"real\" event from a namespaced event.\n * @param {string} event The namespaced event.\n * @return {string} The real event.\n */\nexport function parseEvent(event) {\n return event.split('.')\n .shift();\n};\n\n/**\n * Return an array of events from a space-separated string.\n * @param {string} events The events.\n * @return {array} The parsed events.\n */\nexport function parseEvents(events) {\n return events.split(' ');\n};\n","/**\n * DOM Variables\n */\n\nexport const CONTENT_BOX = 0;\nexport const PADDING_BOX = 1;\nexport const BORDER_BOX = 2;\nexport const MARGIN_BOX = 3;\nexport const SCROLL_BOX = 4;\n\nexport const allowedTags = {\n '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\\w-]*$/i],\n 'a': ['target', 'href', 'title', 'rel'],\n 'area': [],\n 'b': [],\n 'br': [],\n 'col': [],\n 'code': [],\n 'div': [],\n 'em': [],\n 'hr': [],\n 'h1': [],\n 'h2': [],\n 'h3': [],\n 'h4': [],\n 'h5': [],\n 'h6': [],\n 'i': [],\n 'img': ['src', 'alt', 'title', 'width', 'height'],\n 'li': [],\n 'ol': [],\n 'p': [],\n 'pre': [],\n 's': [],\n 'small': [],\n 'span': [],\n 'sub': [],\n 'sup': [],\n 'strong': [],\n 'u': [],\n 'ul': [],\n};\n\nexport const eventLookup = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend'],\n};\n\nexport const animations = new Map();\n\nexport const data = new WeakMap();\n\nexport const events = new WeakMap();\n\nexport const queues = new WeakMap();\n\nexport const styles = new WeakMap();\n","import { isArray, isObject, isUndefined } from '@fr0st/core';\nimport { getWindow } from './../config.js';\n\n/**\n * Ajax Helpers\n */\n\n/**\n * Append a query string to a URL.\n * @param {string} url The input URL.\n * @param {string} key The query string key.\n * @param {string} value The query string value.\n * @return {string} The new URL.\n */\nexport function appendQueryString(url, key, value) {\n const searchParams = getSearchParams(url);\n\n searchParams.append(key, value);\n\n return setSearchParams(url, searchParams);\n};\n\n/**\n * Get the URLSearchParams from a URL string.\n * @param {string} url The URL.\n * @return {URLSearchParams} The URLSearchParams.\n */\nexport function getSearchParams(url) {\n return getURL(url).searchParams;\n};\n\n/**\n * Get the URL from a URL string.\n * @param {string} url The URL.\n * @return {URL} The URL.\n */\nfunction getURL(url) {\n const window = getWindow();\n const baseHref = (window.location.origin + window.location.pathname).replace(/\\/$/, '');\n\n return new URL(url, baseHref);\n};\n\n/**\n * Return a FormData object from an array or object.\n * @param {array|object} data The input data.\n * @return {FormData} The FormData object.\n */\nexport function parseFormData(data) {\n const values = parseValues(data);\n\n const formData = new FormData;\n\n for (const [key, value] of values) {\n if (key.substring(key.length - 2) === '[]') {\n formData.append(key, value);\n } else {\n formData.set(key, value);\n }\n }\n\n return formData;\n};\n\n/**\n * Return a URI-encoded attribute string from an array or object.\n * @param {array|object} data The input data.\n * @return {string} The URI-encoded attribute string.\n */\nexport function parseParams(data) {\n const values = parseValues(data);\n\n const paramString = values\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n return encodeURI(paramString);\n};\n\n/**\n * Return an attributes array, or a flat array of attributes from a key and value.\n * @param {string} key The input key.\n * @param {array|object|string} [value] The input value.\n * @return {array} The parsed attributes.\n */\nfunction parseValue(key, value) {\n if (value === null || isUndefined(value)) {\n return [];\n }\n\n if (isArray(value)) {\n if (key.substring(key.length - 2) !== '[]') {\n key += '[]';\n }\n\n return value.flatMap((val) => parseValue(key, val));\n }\n\n if (isObject(value)) {\n return Object.entries(value)\n .flatMap(([subKey, val]) => parseValue(`${key}[${subKey}]`, val));\n }\n\n return [[key, value]];\n};\n\n/**\n * Return an attributes array from a data array or data object.\n * @param {array|object} data The input data.\n * @return {array} The parsed attributes.\n */\nfunction parseValues(data) {\n if (isArray(data)) {\n return data.flatMap((value) => parseValue(value.name, value.value));\n }\n\n if (isObject(data)) {\n return Object.entries(data)\n .flatMap(([key, value]) => parseValue(key, value));\n }\n\n return data;\n};\n\n/**\n * Set the URLSearchParams for a URL string.\n * @param {string} url The URL.\n * @param {URLSearchParams} searchParams The URLSearchParams.\n * @return {string} The new URL string.\n */\nexport function setSearchParams(url, searchParams) {\n const urlData = getURL(url);\n\n urlData.search = searchParams.toString();\n\n const newUrl = urlData.toString();\n\n const pos = newUrl.indexOf(url);\n return newUrl.substring(pos);\n};\n","import { extend, isObject } from '@fr0st/core';\nimport { appendQueryString, getSearchParams, parseFormData, parseParams, setSearchParams } from './helpers.js';\nimport { getAjaxDefaults, getWindow } from './../config.js';\n\n/**\n * AjaxRequest Class\n * @class\n */\nexport default class AjaxRequest {\n /**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n */\n constructor(options) {\n this._options = extend(\n {},\n getAjaxDefaults(),\n options,\n );\n\n if (!this._options.url) {\n this._options.url = getWindow().location.href;\n }\n\n if (!this._options.cache) {\n this._options.url = appendQueryString(this._options.url, '_', Date.now());\n }\n\n if (!('Content-Type' in this._options.headers) && this._options.contentType) {\n this._options.headers['Content-Type'] = this._options.contentType;\n }\n\n if (this._options.isLocal === null) {\n this._options.isLocal = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol);\n }\n\n if (!this._options.isLocal && !('X-Requested-With' in this._options.headers)) {\n this._options.headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = (value) => {\n this._isResolved = true;\n resolve(value);\n };\n\n this._reject = (error) => {\n this._isRejected = true;\n reject(error);\n };\n });\n\n this.xhr = this._options.xhr();\n\n if (this._options.data) {\n if (this._options.processData && isObject(this._options.data)) {\n if (this._options.contentType === 'application/json') {\n this._options.data = JSON.stringify(this._options.data);\n } else if (this._options.contentType === 'application/x-www-form-urlencoded') {\n this._options.data = parseParams(this._options.data);\n } else {\n this._options.data = parseFormData(this._options.data);\n }\n }\n\n if (this._options.method === 'GET') {\n const dataParams = new URLSearchParams(this._options.data);\n\n const searchParams = getSearchParams(this._options.url);\n for (const [key, value] of dataParams.entries()) {\n searchParams.append(key, value);\n }\n\n this._options.url = setSearchParams(this._options.url, searchParams);\n this._options.data = null;\n }\n }\n\n this.xhr.open(this._options.method, this._options.url, true, this._options.username, this._options.password);\n\n for (const [key, value] of Object.entries(this._options.headers)) {\n this.xhr.setRequestHeader(key, value);\n }\n\n if (this._options.responseType) {\n this.xhr.responseType = this._options.responseType;\n }\n\n if (this._options.mimeType) {\n this.xhr.overrideMimeType(this._options.mimeType);\n }\n\n if (this._options.timeout) {\n this.xhr.timeout = this._options.timeout;\n }\n\n this.xhr.onload = (e) => {\n if (this.xhr.status > 400) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n } else {\n this._resolve({\n response: this.xhr.response,\n xhr: this.xhr,\n event: e,\n });\n }\n };\n\n if (!this._options.isLocal) {\n this.xhr.onerror = (e) =>\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n }\n\n if (this._options.onProgress) {\n this.xhr.onprogress = (e) =>\n this._options.onProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.onUploadProgress) {\n this.xhr.upload.onprogress = (e) =>\n this._options.onUploadProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.beforeSend) {\n this._options.beforeSend(this.xhr);\n }\n\n this.xhr.send(this._options.data);\n\n if (this._options.afterSend) {\n this._options.afterSend(this.xhr);\n }\n }\n\n /**\n * Cancel a pending request.\n * @param {string} [reason=Request was cancelled] The reason for cancelling the request.\n */\n cancel(reason = 'Request was cancelled') {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n\n this.xhr.abort();\n\n this._isCancelled = true;\n\n if (this._options.rejectOnCancel) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n reason,\n });\n }\n }\n\n /**\n * Execute a callback if the request is rejected.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the request is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the request is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Execute a callback once the request is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the request is resolved.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AjaxRequest.prototype, Promise.prototype);\n","import AjaxRequest from './ajax-request.js';\n\n/**\n * DOM Ajax\n */\n\n/**\n * Perform an XHR DELETE request.\n * @param {string} url The URL of the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=DELETE] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function _delete(url, options) {\n return new AjaxRequest({\n url,\n method: 'DELETE',\n ...options,\n });\n};\n\n/**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function ajax(options) {\n return new AjaxRequest(options);\n};\n\n/**\n * Perform an XHR GET request.\n * @param {string} url The URL of the request.\n * @param {string|array|object} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function get(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n ...options,\n });\n};\n\n/**\n * Perform an XHR PATCH request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PATCH] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function patch(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PATCH',\n ...options,\n });\n};\n\n/**\n * Perform an XHR POST request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=POST] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function post(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'POST',\n ...options,\n });\n};\n\n/**\n * Perform an XHR PUT request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PUT] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function put(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PUT',\n ...options,\n });\n};\n","import { config, getWindow } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Helpers\n */\n\nlet animating = false;\n\n/**\n * Get the current time.\n * @return {number} The current time.\n */\nexport function getTime() {\n return document.timeline ?\n document.timeline.currentTime :\n performance.now();\n};\n\n/**\n * Start the animation loop (if not already started).\n */\nexport function start() {\n if (animating) {\n return;\n }\n\n animating = true;\n update();\n};\n\n/**\n * Run a single frame of all animations, and then queue up the next frame.\n */\nfunction update() {\n const time = getTime();\n\n for (const [node, currentAnimations] of animations) {\n const otherAnimations = currentAnimations.filter((animation) => !animation.update(time));\n\n if (!otherAnimations.length) {\n animations.delete(node);\n } else {\n animations.set(node, otherAnimations);\n }\n }\n\n if (!animations.size) {\n animating = false;\n } else if (config.useTimeout) {\n setTimeout(update, 1000 / 60);\n } else {\n getWindow().requestAnimationFrame(update);\n }\n};\n","import { clamp } from '@fr0st/core';\nimport { getTime } from './helpers.js';\nimport { getAnimationDefaults } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Class\n * @class\n */\nexport default class Animation {\n /**\n * New Animation constructor.\n * @param {HTMLElement} node The input node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for the animation.\n * @param {string} [options.type=ease-in-out] The type of animation\n * @param {number} [options.duration=1000] The duration the animation should last.\n * @param {Boolean} [options.infinite] Whether to repeat the animation.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n */\n constructor(node, callback, options) {\n this._node = node;\n this._callback = callback;\n\n this._options = {\n ...getAnimationDefaults(),\n ...options,\n };\n\n if (!('start' in this._options)) {\n this._options.start = getTime();\n }\n\n if (this._options.debug) {\n this._node.dataset.animationStart = this._options.start;\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n if (!animations.has(node)) {\n animations.set(node, []);\n }\n\n animations.get(node).push(this);\n }\n\n /**\n * Execute a callback if the animation is rejected.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Clone the animation to a new node.\n * @param {HTMLElement} node The input node.\n * @return {Animation} The cloned Animation.\n */\n clone(node) {\n return new Animation(node, this._callback, this._options);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animation.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animation.\n */\n stop({ finish = true } = {}) {\n if (this._isStopped || this._isFinished) {\n return;\n }\n\n const otherAnimations = animations.get(this._node)\n .filter((animation) => animation !== this);\n\n if (!otherAnimations.length) {\n animations.delete(this._node);\n } else {\n animations.set(this._node, otherAnimations);\n }\n\n if (finish) {\n this.update();\n }\n\n this._isStopped = true;\n\n if (!finish) {\n this._reject(this._node);\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n\n /**\n * Run a single frame of the animation.\n * @param {number} [time] The current time.\n * @return {Boolean} TRUE if the animation is finished, otherwise FALSE.\n */\n update(time = null) {\n if (this._isStopped) {\n return true;\n }\n\n let progress;\n\n if (time === null) {\n progress = 1;\n } else {\n progress = (time - this._options.start) / this._options.duration;\n\n if (this._options.infinite) {\n progress %= 1;\n } else {\n progress = clamp(progress);\n }\n\n if (this._options.type === 'ease-in') {\n progress = progress ** 2;\n } else if (this._options.type === 'ease-out') {\n progress = Math.sqrt(progress);\n } else if (this._options.type === 'ease-in-out') {\n if (progress <= 0.5) {\n progress = progress ** 2 * 2;\n } else {\n progress = 1 - ((1 - progress) ** 2 * 2);\n }\n }\n }\n\n if (this._options.debug) {\n this._node.dataset.animationTime = time;\n this._node.dataset.animationProgress = progress;\n }\n\n this._callback(this._node, progress, this._options);\n\n if (progress < 1) {\n return false;\n }\n\n if (this._options.debug) {\n delete this._node.dataset.animationStart;\n delete this._node.dataset.animationTime;\n delete this._node.dataset.animationProgress;\n }\n\n if (!this._isFinished) {\n this._isFinished = true;\n\n this._resolve(this._node);\n }\n\n return true;\n }\n}\n\nObject.setPrototypeOf(Animation.prototype, Promise.prototype);\n","/**\n* AnimationSet Class\n* @class\n*/\nexport default class AnimationSet {\n /**\n * New AnimationSet constructor.\n * @param {array} animations The animations.\n */\n constructor(animations) {\n this._animations = animations;\n this._promise = Promise.all(animations);\n }\n\n /**\n * Execute a callback if any of the animations is rejected.\n * @param {function} [onRejected] The callback to execute if an animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animations.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animations.\n */\n stop({ finish = true } = {}) {\n for (const animation of this._animations) {\n animation.stop({ finish });\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AnimationSet.prototype, Promise.prototype);\n","import { camelCase, isNumeric, kebabCase, wrap } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNode } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\n\n/**\n * DOM Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {string|array|HTMLElement|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for attaching the shadow DOM.\n * @param {Boolean} [options.open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {ShadowRoot} The new ShadowRoot.\n */\nexport function attachShadow(selector, { open = true } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.attachShadow({\n mode: open ?\n 'open' :\n 'closed',\n });\n};\n\n/**\n * Create a new DOM element.\n * @param {string} [tagName=div] The type of HTML element to create.\n * @param {object} [options] The options to use for creating the element.\n * @param {string} [options.html] The HTML contents.\n * @param {string} [options.text] The text contents.\n * @param {string|array} [options.class] The classes.\n * @param {object} [options.style] An object containing style properties.\n * @param {string} [options.value] The value.\n * @param {object} [options.attributes] An object containing attributes.\n * @param {object} [options.properties] An object containing properties.\n * @param {object} [options.dataset] An object containing dataset values.\n * @return {HTMLElement} The new HTMLElement.\n */\nexport function create(tagName = 'div', options = {}) {\n const node = getContext().createElement(tagName);\n\n if ('html' in options) {\n node.innerHTML = options.html;\n } else if ('text' in options) {\n node.textContent = options.text;\n }\n\n if ('class' in options) {\n const classes = parseClasses(wrap(options.class));\n\n node.classList.add(...classes);\n }\n\n if ('style' in options) {\n for (let [style, value] of Object.entries(options.style)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n node.style.setProperty(style, value);\n }\n }\n\n if ('value' in options) {\n node.value = options.value;\n }\n\n if ('attributes' in options) {\n for (const [key, value] of Object.entries(options.attributes)) {\n node.setAttribute(key, value);\n }\n }\n\n if ('properties' in options) {\n for (const [key, value] of Object.entries(options.properties)) {\n node[key] = value;\n }\n }\n\n if ('dataset' in options) {\n const dataset = parseData(options.dataset, null, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n node.dataset[key] = value;\n }\n }\n\n return node;\n};\n\n/**\n * Create a new comment node.\n * @param {string} comment The comment contents.\n * @return {Node} The new comment node.\n */\nexport function createComment(comment) {\n return getContext().createComment(comment);\n};\n\n/**\n * Create a new document fragment.\n * @return {DocumentFragment} The new DocumentFragment.\n */\nexport function createFragment() {\n return getContext().createDocumentFragment();\n};\n\n/**\n * Create a new range object.\n * @return {Range} The new Range.\n */\nexport function createRange() {\n return getContext().createRange();\n};\n\n/**\n * Create a new text node.\n * @param {string} text The text contents.\n * @return {Node} The new text node.\n */\nexport function createText(text) {\n return getContext().createTextNode(text);\n};\n","\nimport { merge } from '@fr0st/core';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Parser\n */\n\nconst parser = new DOMParser();\n\n/**\n * Create a Document object from a string.\n * @param {string} input The input string.\n * @param {object} [options] The options for parsing the string.\n * @param {string} [options.contentType=text/html] The content type.\n * @return {Document} A new Document object.\n */\nexport function parseDocument(input, { contentType = 'text/html' } = {}) {\n return parser.parseFromString(input, contentType);\n};\n\n/**\n * Create an Array containing nodes parsed from a HTML string.\n * @param {string} html The HTML input string.\n * @return {array} An array of nodes.\n */\nexport function parseHTML(html) {\n const childNodes = createRange()\n .createContextualFragment(html)\n .children;\n\n return merge([], childNodes);\n};\n","/**\n * QuerySet Class\n * @class\n */\nexport default class QuerySet {\n /**\n * New DOM constructor.\n * @param {array} nodes The input nodes.\n */\n constructor(nodes = []) {\n this._nodes = nodes;\n }\n\n /**\n * Get the number of nodes.\n * @return {number} The number of nodes.\n */\n get length() {\n return this._nodes.length;\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} The QuerySet object.\n */\n each(callback) {\n this._nodes.forEach(\n (v, i) => callback(v, i),\n );\n\n return this;\n }\n\n /**\n * Retrieve the DOM node(s) contained in the QuerySet.\n * @param {number} [index=null] The index of the node.\n * @return {array|Node|Document|Window} The node(s).\n */\n get(index = null) {\n if (index === null) {\n return this._nodes;\n }\n\n return index < 0 ?\n this._nodes[index + this._nodes.length] :\n this._nodes[index];\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} A new QuerySet object.\n */\n map(callback) {\n const nodes = this._nodes.map(callback);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Reduce the set of matched nodes to a subset specified by a range of indices.\n * @param {number} [begin] The index to slice from.\n * @param {number} [end] The index to slice to.\n * @return {QuerySet} A new QuerySet object.\n */\n slice(begin, end) {\n const nodes = this._nodes.slice(begin, end);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Return an iterable from the nodes.\n * @return {ArrayIterator} The iterator object.\n */\n [Symbol.iterator]() {\n return this._nodes.values();\n }\n}\n","import { isDocument, isElement, isFragment, isShadow, merge, unique } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Find\n */\n\n/**\n * Return all nodes matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function find(selector, context = getContext()) {\n if (!selector) {\n return [];\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findByClass(match[2], context);\n }\n\n return findByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(selector));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(selector);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByClassName(className));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`.${className}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(`.${className}`) :\n node.getElementsByClassName(className);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findById(id, context = getContext()) {\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`#${id}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(`#${id}`);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByTagName(tagName));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(tagName));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(tagName) :\n node.getElementsByTagName(tagName);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a single node matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOne(selector, context = getContext()) {\n if (!selector) {\n return null;\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findOneById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findOneByClass(match[2], context);\n }\n\n return findOneByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(selector);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = node.querySelector(selector);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByClassName(className).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(`.${className}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(`.${className}`) :\n node.getElementsByClassName(className).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching element.\n */\nexport function findOneById(id, context = getContext()) {\n if (isDocument(context)) {\n return context.getElementById(id);\n }\n\n if (isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(`#${id}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isDocument(node) ?\n node.getElementById(id) :\n node.querySelector(`#${id}`);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByTagName(tagName).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(tagName);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(tagName) :\n node.getElementsByTagName(tagName).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n","import { isArray, isDocument, isElement, isFragment, isFunction, isNode, isShadow, isString, isWindow, merge, unique } from '@fr0st/core';\nimport { getContext } from './config.js';\nimport { parseHTML } from './parser/parser.js';\nimport QuerySet from './query/query-set.js';\nimport { find, findOne } from './traversal/find.js';\n\n/**\n * DOM Filters\n */\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNode(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes).shift();\n }\n\n return findOne(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return nodes;\n }\n\n if (nodes instanceof QuerySet) {\n const node = nodes.get(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n const node = nodes.item(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n};\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNodes(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes);\n }\n\n return find(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return [nodes];\n }\n\n if (nodes instanceof QuerySet) {\n return nodes.get().filter(nodeFilter);\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n return merge([], nodes).filter(nodeFilter);\n }\n\n return [];\n};\n\n/**\n * Return a node filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node filter callback.\n */\nexport function parseFilter(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return filter;\n }\n\n if (isString(filter)) {\n return (node) => isElement(node) && node.matches(filter);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.isSameNode(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.includes(node);\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return a node contains filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node contains filter callback.\n */\nexport function parseFilterContains(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return (node) => merge([], node.querySelectorAll('*')).some(filter);\n }\n\n if (isString(filter)) {\n return (node) => !!findOne(filter, node);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.contains(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.some((other) => node.contains(other));\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|Document} [options.context=getContext()] The Document context.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window} The matching node.\n */\nexport function parseNode(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNode(nodes, options.context || getContext(), filter, options);\n }\n\n for (const node of nodes) {\n const result = _parseNode(node, options.context || getContext(), filter, options);\n\n if (result) {\n return result;\n }\n }\n};\n\n/**\n * Return a filtered array of nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|DocumentFragment|ShadowRoot|Document} [options.context=getContext()] The Document context.\n * @return {array} The filtered array of nodes.\n */\nexport function parseNodes(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNodes(nodes, options.context || getContext(), filter, options);\n }\n\n const results = nodes.flatMap((node) => _parseNodes(node, options.context || getContext(), filter, options));\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a function for filtering nodes.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @return {DOM~nodeCallback} The node filter function.\n */\nfunction parseNodesFilter(options) {\n if (!options) {\n return isElement;\n }\n\n const callbacks = [];\n\n if (options.node) {\n callbacks.push(isNode);\n } else {\n callbacks.push(isElement);\n }\n\n if (options.document) {\n callbacks.push(isDocument);\n }\n\n if (options.window) {\n callbacks.push(isWindow);\n }\n\n if (options.fragment) {\n callbacks.push(isFragment);\n }\n\n if (options.shadow) {\n callbacks.push(isShadow);\n }\n\n return (node) => callbacks.some((callback) => callback(node));\n};\n","import Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\nimport { animations } from './../vars.js';\n\n/**\n * DOM Animate\n */\n\n/**\n * Add an animation to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function animate(selector, callback, options) {\n const nodes = parseNodes(selector);\n\n const newAnimations = nodes.map((node) => new Animation(node, callback, options));\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Stop all animations for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n */\nexport function stop(selector, { finish = true } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!animations.has(node)) {\n continue;\n }\n\n const currentAnimations = animations.get(node);\n for (const animation of currentAnimations) {\n animation.stop({ finish });\n }\n }\n};\n","import { evaluate } from '@fr0st/core';\nimport { animate } from './animate.js';\nimport Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Animations\n */\n\n/**\n * Drop each node into place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropIn(selector, options) {\n return slideIn(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Drop each node out of place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropOut(selector, options) {\n return slideOut(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Fade the opacity of each node in.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeIn(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n progress.toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Fade the opacity of each node out.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeOut(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n (1 - progress).toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Rotate each node in on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((90 - (progress * 90)) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Rotate each node out on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((progress * 90) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = ((size - (size * progress)) * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = (size * progress * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Squeeze each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeIn(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size * progress).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Squeeze each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeOut(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size - (size * progress)).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n","import { isDocument, isElement, isFragment, isShadow, isWindow, merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { parseParams } from './../ajax/helpers.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Execute a command in the document context.\n * @param {string} command The command to execute.\n * @param {string} [value] The value to give the command.\n * @return {Boolean} TRUE if the command was executed, otherwise FALSE.\n */\nexport function exec(command, value = null) {\n return getContext().execCommand(command, false, value);\n};\n\n/**\n * Get the index of the first node relative to it's parent.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The index.\n */\nexport function index(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (!node || !node.parentNode) {\n return;\n }\n\n return merge([], node.parentNode.children).indexOf(node);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).findIndex(nodeFilter);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function normalize(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n node.normalize();\n }\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The serialized string.\n */\nexport function serialize(selector) {\n return parseParams(\n serializeArray(selector),\n );\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The serialized array.\n */\nexport function serializeArray(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n }).reduce(\n (values, node) => {\n if (\n (isElement(node) && node.matches('form')) ||\n isFragment(node) ||\n isShadow(node)\n ) {\n return values.concat(\n serializeArray(\n node.querySelectorAll(\n 'input, select, textarea',\n ),\n ),\n );\n }\n\n if (\n isElement(node) &&\n node.matches('[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)')\n ) {\n return values;\n }\n\n const name = node.getAttribute('name');\n if (!name) {\n return values;\n }\n\n if (\n isElement(node) &&\n node.matches('select[multiple]')\n ) {\n for (const option of node.selectedOptions) {\n values.push(\n {\n name,\n value: option.value || '',\n },\n );\n }\n } else {\n values.push(\n {\n name,\n value: node.value || '',\n },\n );\n }\n\n return values;\n },\n [],\n );\n}\n\n/**\n * Sort nodes by their position in the document.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The sorted array of nodes.\n */\nexport function sort(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).sort((node, other) => {\n if (isWindow(node)) {\n return 1;\n }\n\n if (isWindow(other)) {\n return -1;\n }\n\n if (isDocument(node)) {\n return 1;\n }\n\n if (isDocument(other)) {\n return -1;\n }\n\n if (isFragment(other)) {\n return 1;\n }\n\n if (isFragment(node)) {\n return -1;\n }\n\n if (isShadow(node)) {\n node = node.host;\n }\n\n if (isShadow(other)) {\n other = other.host;\n }\n\n if (node.isSameNode(other)) {\n return 0;\n }\n\n const pos = node.compareDocumentPosition(other);\n\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING || pos & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n\n if (pos & Node.DOCUMENT_POSITION_PRECEDING || pos & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n\n return 0;\n });\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.tagName.toLowerCase();\n};\n","import { isDocument, isElement, merge, unique } from '@fr0st/core';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\nimport { sort } from './../utility/utility.js';\n\n/**\n * DOM Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function child(selector, nodeFilter) {\n return children(selector, nodeFilter, { first: true });\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.first=false] Whether to only return the first matching node for each node.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function children(selector, nodeFilter, { first = false, elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const childNodes = elementsOnly ?\n merge([], node.children) :\n merge([], node.childNodes);\n\n for (const child of childNodes) {\n if (!nodeFilter(child)) {\n continue;\n }\n\n results.push(child);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function closest(selector, nodeFilter, limitFilter) {\n return parents(selector, nodeFilter, limitFilter, { first: true });\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The common ancestor.\n */\nexport function commonAncestor(selector) {\n const nodes = sort(selector);\n\n if (!nodes.length) {\n return;\n }\n\n // Make sure all nodes have a parent\n if (nodes.some((node) => !node.parentNode)) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length === 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n return range.commonAncestorContainer;\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function contents(selector) {\n return children(selector, false, { elementsOnly: false });\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {DocumentFragment} The DocumentFragment.\n */\nexport function fragment(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.content;\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function next(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function nextAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The offset parent.\n */\nexport function offsetParent(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.offsetParent;\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function parent(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n node = node.parentNode;\n\n if (!node) {\n continue;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function parents(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const parents = [];\n while (node = node.parentNode) {\n if (isDocument(node)) {\n break;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n parents.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...parents);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function prev(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function prevAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const siblings = [];\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n siblings.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...siblings);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {ShadowRoot} The ShadowRoot.\n */\nexport function shadow(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.shadowRoot;\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function siblings(selector, nodeFilter, { elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const siblings = elementsOnly ?\n parent.children :\n parent.childNodes;\n\n let sibling;\n for (sibling of siblings) {\n if (node.isSameNode(sibling)) {\n continue;\n }\n\n if (!nodeFilter(sibling)) {\n continue;\n }\n\n results.push(sibling);\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n","import { merge } from '@fr0st/core';\nimport { addEvent, removeEvent } from './event-handlers.js';\nimport { debounce as _debounce } from './../helpers.js';\nimport { closest } from './../traversal/traversal.js';\nimport { eventLookup } from './../vars.js';\n\n/**\n * DOM Event Factory\n */\n\n/**\n * Return a function for matching a delegate target to a custom selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateContainsFactory(node, selector) {\n return (target) => {\n const matches = merge([], node.querySelectorAll(selector));\n\n if (!matches.length) {\n return false;\n }\n\n if (matches.includes(target)) {\n return target;\n }\n\n return closest(\n target,\n (parent) => matches.includes(parent),\n (parent) => parent.isSameNode(node),\n ).shift();\n };\n};\n\n/**\n * Return a function for matching a delegate target to a standard selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateMatchFactory(node, selector) {\n return (target) =>\n target.matches && target.matches(selector) ?\n target :\n closest(\n target,\n (parent) => parent.matches(selector),\n (parent) => parent.isSameNode(node),\n ).shift();\n};\n\n/**\n * Return a wrapped event callback that executes on a delegate selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The delegated event callback.\n */\nexport function delegateFactory(node, selector, callback) {\n const getDelegate = selector.match(/(?:^\\s*\\:scope|\\,(?=(?:(?:[^\"']*[\"']){2})*[^\"']*$)\\s*\\:scope)/) ?\n getDelegateContainsFactory(node, selector) :\n getDelegateMatchFactory(node, selector);\n\n return (event) => {\n if (node.isSameNode(event.target)) {\n return;\n }\n\n const delegate = getDelegate(event.target);\n\n if (!delegate) {\n return;\n }\n\n Object.defineProperty(event, 'currentTarget', {\n value: delegate,\n configurable: true,\n });\n Object.defineProperty(event, 'delegateTarget', {\n value: node,\n configurable: true,\n });\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped mouse drag event (optionally debounced).\n * @param {DOM~eventCallback} down The callback to execute on mousedown.\n * @param {DOM~eventCallback} move The callback to execute on mousemove.\n * @param {DOM~eventCallback} up The callback to execute on mouseup.\n * @param {object} [options] The options for the mouse drag event.\n * @param {Boolean} [options.debounce=true] Whether to debounce the move event.\n * @param {Boolean} [options.passive=true] Whether to use passive event listeners.\n * @param {Boolean} [options.preventDefault=true] Whether to prevent the default event.\n * @param {number} [options.touches=1] The number of touches to trigger the event for.\n * @return {DOM~eventCallback} The mouse drag event callback.\n */\nexport function mouseDragFactory(down, move, up, { debounce = true, passive = true, preventDefault = true, touches = 1 } = {}) {\n if (move && debounce) {\n move = _debounce(move);\n\n // needed to make sure up callback executes after final move callback\n if (up) {\n up = _debounce(up);\n }\n }\n\n return (event) => {\n const isTouch = event.type === 'touchstart';\n\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (down && down(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (!move && !up) {\n return;\n }\n\n const [moveEvent, upEvent] = event.type in eventLookup ?\n eventLookup[event.type] :\n eventLookup.mousedown;\n\n const realMove = (event) => {\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (preventDefault && !passive) {\n event.preventDefault();\n }\n\n if (!move) {\n return;\n }\n\n move(event);\n };\n\n const realUp = (event) => {\n if (isTouch && event.touches.length !== touches - 1) {\n return;\n }\n\n if (up && up(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n removeEvent(window, moveEvent, realMove);\n removeEvent(window, upEvent, realUp);\n };\n\n addEvent(window, moveEvent, realMove, { passive });\n addEvent(window, upEvent, realUp);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a namespace match.\n * @param {string} eventName The namespaced event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function namespaceFactory(eventName, callback) {\n return (event) => {\n if ('namespaceRegExp' in event && !event.namespaceRegExp.test(eventName)) {\n return;\n }\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a return false for preventing default.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function preventFactory(callback) {\n return (event) => {\n if (callback(event) === false) {\n event.preventDefault();\n }\n };\n};\n\n/**\n * Return a wrapped event callback that removes itself after execution.\n * @param {HTMLElement|ShadowRoot|Document|Window} node The input node.\n * @param {string} eventName The event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [optoins.delegate] The delegate selector.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function selfDestructFactory(node, eventName, callback, { capture = null, delegate = null } = {}) {\n return (event) => {\n removeEvent(node, eventName, callback, { capture, delegate });\n return callback(event);\n };\n};\n","import { delegateFactory, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js';\nimport { events } from './../vars.js';\n\n/**\n * DOM Event Handlers\n */\n\n/**\n * Add events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} eventNames The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @param {Boolean} [options.selfDestruct] Whether to use a self-destructing event.\n */\nexport function addEvent(selector, eventNames, callback, { capture = false, delegate = null, passive = false, selfDestruct = false } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n eventNames = parseEvents(eventNames);\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n const eventData = {\n callback,\n delegate,\n selfDestruct,\n capture,\n passive,\n };\n\n for (const node of nodes) {\n if (!events.has(node)) {\n events.set(node, {});\n }\n\n const nodeEvents = events.get(node);\n\n let realCallback = callback;\n\n if (selfDestruct) {\n realCallback = selfDestructFactory(node, eventName, realCallback, { capture, delegate });\n }\n\n realCallback = preventFactory(realCallback);\n\n if (delegate) {\n realCallback = delegateFactory(node, delegate, realCallback);\n }\n\n realCallback = namespaceFactory(eventName, realCallback);\n\n eventData.realCallback = realCallback;\n eventData.eventName = eventName;\n eventData.realEventName = realEventName;\n\n if (!nodeEvents[realEventName]) {\n nodeEvents[realEventName] = [];\n }\n\n nodeEvents[realEventName].push({ ...eventData });\n\n node.addEventListener(realEventName, realCallback, { capture, passive });\n }\n }\n};\n\n/**\n * Add delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegate(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive });\n};\n\n/**\n * Add self-destructing delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegateOnce(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive, selfDestruct: true });\n};\n\n/**\n * Add self-destructing events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventOnce(selector, events, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, passive, selfDestruct: true });\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneEvents(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n const nodeEvents = events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n otherSelector,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n passive: eventData.passive,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n};\n\n/**\n * Remove events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [eventNames] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n */\nexport function removeEvent(selector, eventNames, callback, { capture = null, delegate = null } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n let eventLookup;\n if (eventNames) {\n eventNames = parseEvents(eventNames);\n\n eventLookup = {};\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n if (!(realEventName in eventLookup)) {\n eventLookup[realEventName] = [];\n }\n\n eventLookup[realEventName].push(eventName);\n }\n }\n\n for (const node of nodes) {\n if (!events.has(node)) {\n continue;\n }\n\n const nodeEvents = events.get(node);\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n if (eventLookup && !(realEventName in eventLookup)) {\n continue;\n }\n\n const otherEvents = realEvents.filter((eventData) => {\n if (eventLookup && !eventLookup[realEventName].some((eventName) => {\n if (eventName === realEventName) {\n return true;\n }\n\n const regExp = eventNamespacedRegExp(eventName);\n\n return eventData.eventName.match(regExp);\n })) {\n return true;\n }\n\n if (callback && callback !== eventData.callback) {\n return true;\n }\n\n if (delegate && delegate !== eventData.delegate) {\n return true;\n }\n\n if (capture !== null && capture !== eventData.capture) {\n return true;\n }\n\n node.removeEventListener(realEventName, eventData.realCallback, eventData.capture);\n\n return false;\n });\n\n if (!otherEvents.length) {\n delete nodeEvents[realEventName];\n }\n }\n\n if (!Object.keys(nodeEvents).length) {\n events.delete(node);\n }\n }\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n */\nexport function removeEventDelegate(selector, events, delegate, callback, { capture = null } = {}) {\n removeEvent(selector, events, callback, { capture, delegate });\n};\n\n/**\n * Trigger events on each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n */\nexport function triggerEvent(selector, events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n events = parseEvents(events);\n\n for (const event of events) {\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n for (const node of nodes) {\n node.dispatchEvent(eventData);\n }\n }\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(selector, event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const node = parseNode(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n return node.dispatchEvent(eventData);\n};\n","import { isElement, isFragment, isNode, isShadow, merge } from '@fr0st/core';\nimport { createFragment } from './create.js';\nimport { parseNodes } from './../filters.js';\nimport { animations as _animations, data as _data, events as _events, queues, styles } from './../vars.js';\nimport { addEvent } from './../events/event-handlers.js';\n\n/**\n * DOM Manipulation\n */\n\n/**\n * Clone each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {array} The cloned nodes.\n */\nexport function clone(selector, { deep = true, events = false, data = false, animations = false } = {}) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n });\n\n return nodes.map((node) => {\n const clone = node.cloneNode(deep);\n\n if (events || data || animations) {\n deepClone(node, clone, { deep, events, data, animations });\n }\n\n return clone;\n });\n};\n\n/**\n * Deep clone a single node.\n * @param {Node|HTMLElement|DocumentFragment} node The node.\n * @param {Node|HTMLElement|DocumentFragment} clone The clone.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n */\nfunction deepClone(node, clone, { deep = true, events = false, data = false, animations = false } = {}) {\n if (events && _events.has(node)) {\n const nodeEvents = _events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n clone,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n\n if (data && _data.has(node)) {\n const nodeData = _data.get(node);\n _data.set(clone, { ...nodeData });\n }\n\n if (animations && _animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n\n for (const animation of nodeAnimations) {\n animation.clone(clone);\n }\n }\n\n if (deep) {\n for (const [i, child] of node.childNodes.entries()) {\n const childClone = clone.childNodes.item(i);\n deepClone(child, childClone, { deep, events, data, animations });\n }\n }\n};\n\n/**\n * Detach each node from the DOM.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The detached nodes.\n */\nexport function detach(selector) {\n // DocumentFragment and ShadowRoot nodes can not be detached\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n for (const node of nodes) {\n node.remove();\n }\n\n return nodes;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function empty(selector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n const childNodes = merge([], node.childNodes);\n\n // Remove descendent elements\n for (const child of childNodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(child);\n }\n\n child.remove();\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n }\n};\n\n/**\n * Remove each node from the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function remove(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n for (const node of nodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(node);\n }\n\n // DocumentFragment and ShadowRoot nodes can not be removed\n if (isNode(node)) {\n node.remove();\n }\n }\n};\n\n/**\n * Remove all data for a single node.\n * @param {Node|HTMLElement|DocumentFragment|ShadowRoot} node The node.\n */\nexport function removeNode(node) {\n if (_events.has(node)) {\n const nodeEvents = _events.get(node);\n\n if ('remove' in nodeEvents) {\n const eventData = new CustomEvent('remove', {\n bubbles: false,\n cancelable: false,\n });\n\n node.dispatchEvent(eventData);\n }\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n for (const eventData of realEvents) {\n node.removeEventListener(realEventName, eventData.realCallback, { capture: eventData.capture });\n }\n }\n\n _events.delete(node);\n }\n\n if (queues.has(node)) {\n queues.delete(node);\n }\n\n if (_animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n for (const animation of nodeAnimations) {\n animation.stop();\n }\n }\n\n if (styles.has(node)) {\n styles.delete(node);\n }\n\n if (_data.has(node)) {\n _data.delete(node);\n }\n\n // Remove descendent elements\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n */\nexport function replaceAll(selector, otherSelector) {\n replaceWith(otherSelector, selector);\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n */\nexport function replaceWith(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be removed\n let nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n let others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n // Move nodes to a fragment so they don't get removed\n const fragment = createFragment();\n\n for (const other of others) {\n fragment.insertBefore(other, null);\n }\n\n others = merge([], fragment.childNodes);\n\n nodes = nodes.filter((node) =>\n !others.includes(node) &&\n !nodes.some((other) =>\n !other.isSameNode(node) &&\n other.contains(node),\n ),\n );\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n\n remove(nodes);\n};\n","import { camelCase, merge } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseData, parseDataset } from './../helpers.js';\nimport { removeNode } from './../manipulation/manipulation.js';\n\n/**\n * DOM Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [attribute] The attribute name.\n * @return {string|object} The attribute value, or an object containing attributes.\n */\nexport function getAttribute(selector, attribute) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (attribute) {\n return node.getAttribute(attribute);\n }\n\n return Object.fromEntries(\n merge([], node.attributes)\n .map((attribute) => [attribute.nodeName, attribute.nodeValue]),\n );\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(selector, key) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (key) {\n key = camelCase(key);\n\n return parseDataset(node.dataset[key]);\n }\n\n return Object.fromEntries(\n Object.entries(node.dataset)\n .map(([key, value]) => [key, parseDataset(value)]),\n );\n};\n\n/**\n * Get the HTML contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The HTML contents.\n */\nexport function getHTML(selector) {\n return getProperty(selector, 'innerHTML');\n};\n\n/**\n * Get a property value for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(selector, property) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node[property];\n};\n\n/**\n * Get the text contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The text contents.\n */\nexport function getText(selector) {\n return getProperty(selector, 'textContent');\n};\n\n/**\n * Get the value property of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The value.\n */\nexport function getValue(selector) {\n return getProperty(selector, 'value');\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n */\nexport function removeAttribute(selector, attribute) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.removeAttribute(attribute);\n }\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} key The dataset key.\n */\nexport function removeDataset(selector, key) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n key = camelCase(key);\n\n delete node.dataset[key];\n }\n};\n\n/**\n * Remove a property from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n */\nexport function removeProperty(selector, property) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n delete node[property];\n }\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n */\nexport function setAttribute(selector, attribute, value) {\n const nodes = parseNodes(selector);\n\n const attributes = parseData(attribute, value);\n\n for (const [key, value] of Object.entries(attributes)) {\n for (const node of nodes) {\n node.setAttribute(key, value);\n }\n }\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n */\nexport function setDataset(selector, key, value) {\n const nodes = parseNodes(selector);\n\n const dataset = parseData(key, value, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n for (const node of nodes) {\n node.dataset[key] = value;\n }\n }\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} html The HTML contents.\n */\nexport function setHTML(selector, html) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.innerHTML = html;\n }\n};\n\n/**\n * Set a property value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n */\nexport function setProperty(selector, property, value) {\n const nodes = parseNodes(selector);\n\n const properties = parseData(property, value);\n\n for (const [key, value] of Object.entries(properties)) {\n for (const node of nodes) {\n node[key] = value;\n }\n }\n};\n\n/**\n * Set the text contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} text The text contents.\n */\nexport function setText(selector, text) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.textContent = text;\n }\n};\n\n/**\n * Set the value property of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} value The value.\n */\nexport function setValue(selector, value) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.value = value;\n }\n};\n","import { parseNode, parseNodes } from './../filters.js';\nimport { parseData } from './../helpers.js';\nimport { data } from './../vars.js';\n\n/**\n * DOM Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneData(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const others = parseNodes(otherSelector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n setData(others, { ...nodeData });\n }\n};\n\n/**\n * Get custom data for the first node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(selector, key) {\n const node = parseNode(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n if (!node || !data.has(node)) {\n return;\n }\n\n const nodeData = data.get(node);\n\n return key ?\n nodeData[key] :\n nodeData;\n};\n\n/**\n * Remove custom data from each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n */\nexport function removeData(selector, key) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n\n if (key) {\n delete nodeData[key];\n }\n\n if (!key || !Object.keys(nodeData).length) {\n data.delete(node);\n }\n }\n};\n\n/**\n * Set custom data for each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n */\nexport function setData(selector, key, value) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const newData = parseData(key, value);\n\n for (const node of nodes) {\n if (!data.has(node)) {\n data.set(node, {});\n }\n\n const nodeData = data.get(node);\n\n Object.assign(nodeData, newData);\n }\n};\n","import { isNumeric, kebabCase } from '@fr0st/core';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\nimport { styles } from './../vars.js';\n\n/**\n * DOM Styles\n */\n\n/**\n * Add classes to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function addClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.add(...classes);\n }\n};\n\n/**\n * Get computed CSS style value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (!styles.has(node)) {\n styles.set(\n node,\n getWindow().getComputedStyle(node),\n );\n }\n\n const nodeStyles = styles.get(node);\n\n if (!style) {\n return { ...nodeStyles };\n }\n\n style = kebabCase(style);\n\n return nodeStyles.getPropertyValue(style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (style) {\n style = kebabCase(style);\n\n return node.style[style];\n }\n\n const styles = {};\n\n for (const style of node.style) {\n styles[style] = node.style[style];\n }\n\n return styles;\n};\n\n/**\n * Hide each node from display.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function hide(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', 'none');\n }\n};\n\n/**\n * Remove classes from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function removeClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.remove(...classes);\n }\n};\n\n/**\n * Set style properties for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n */\nexport function setStyle(selector, style, value, { important = false } = {}) {\n const nodes = parseNodes(selector);\n\n const styles = parseData(style, value);\n\n for (let [style, value] of Object.entries(styles)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n for (const node of nodes) {\n node.style.setProperty(\n style,\n value,\n important ?\n 'important' :\n '',\n );\n }\n }\n};\n\n/**\n * Display each hidden node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function show(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', '');\n }\n};\n\n/**\n * Toggle the visibility of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function toggle(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty(\n 'display',\n node.style.display === 'none' ?\n '' :\n 'none',\n );\n }\n};\n\n/**\n * Toggle classes for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function toggleClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n for (const className of classes) {\n node.classList.toggle(className);\n }\n }\n};\n","import { clampPercent, dist } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { getContext, getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center(selector, { offset = false } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n return {\n x: nodeBox.left + nodeBox.width / 2,\n y: nodeBox.top + nodeBox.height / 2,\n };\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} containerSelector The container node, or a query selector string.\n */\nexport function constrain(selector, containerSelector) {\n const containerBox = rect(containerSelector);\n\n if (!containerBox) {\n return;\n }\n\n const nodes = parseNodes(selector);\n\n const context = getContext();\n const window = getWindow();\n const getScrollX = (_) => context.documentElement.scrollHeight > window.outerHeight;\n const getScrollY = (_) => context.documentElement.scrollWidth > window.outerWidth;\n\n const preScrollX = getScrollX();\n const preScrollY = getScrollY();\n\n for (const node of nodes) {\n const nodeBox = rect(node);\n\n if (nodeBox.height > containerBox.height) {\n node.style.setProperty('height', `${containerBox.height}px`);\n }\n\n if (nodeBox.width > containerBox.width) {\n node.style.setProperty('width', `${containerBox.width}px`);\n }\n\n let leftOffset;\n if (nodeBox.left - containerBox.left < 0) {\n leftOffset = nodeBox.left - containerBox.left;\n } else if (nodeBox.right - containerBox.right > 0) {\n leftOffset = nodeBox.right - containerBox.right;\n }\n\n if (leftOffset) {\n const oldLeft = css(node, 'left');\n const trueLeft = oldLeft && oldLeft !== 'auto' ? parseFloat(oldLeft) : 0;\n node.style.setProperty('left', `${trueLeft - leftOffset}px`);\n }\n\n let topOffset;\n if (nodeBox.top - containerBox.top < 0) {\n topOffset = nodeBox.top - containerBox.top;\n } else if (nodeBox.bottom - containerBox.bottom > 0) {\n topOffset = nodeBox.bottom - containerBox.bottom;\n }\n\n if (topOffset) {\n const oldTop = css(node, 'top');\n const trueTop = oldTop && oldTop !== 'auto' ? parseFloat(oldTop) : 0;\n node.style.setProperty('top', `${trueTop - topOffset}px`);\n }\n\n if (css(node, 'position') === 'static') {\n node.style.setProperty('position', 'relative');\n }\n }\n\n const postScrollX = getScrollX();\n const postScrollY = getScrollY();\n\n if (preScrollX !== postScrollX || preScrollY !== postScrollY) {\n constrain(nodes, containerSelector);\n }\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the element.\n */\nexport function distTo(selector, x, y, { offset = false } = {}) {\n const nodeCenter = center(selector, { offset });\n\n if (!nodeCenter) {\n return;\n }\n\n return dist(nodeCenter.x, nodeCenter.y, x, y);\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return distTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestTo(selector, x, y, { offset = false } = {}) {\n let closest;\n let closestDistance = Number.MAX_VALUE;\n\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const dist = distTo(node, x, y, { offset });\n if (dist && dist < closestDistance) {\n closestDistance = dist;\n closest = node;\n }\n }\n\n return closest;\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return nearestTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(selector, x, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (x - nodeBox.left) /\n nodeBox.width *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(selector, y, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (y - nodeBox.top) /\n nodeBox.height *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the X and Y co-ordinates.\n */\nexport function position(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = {\n x: node.offsetLeft,\n y: node.offsetTop,\n };\n\n if (offset) {\n let offsetParent = node;\n\n while (offsetParent = offsetParent.offsetParent) {\n result.x += offsetParent.offsetLeft;\n result.y += offsetParent.offsetTop;\n }\n }\n\n return result;\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = node.getBoundingClientRect();\n\n if (offset) {\n const window = getWindow();\n result.x += window.scrollX;\n result.y += window.scrollY;\n }\n\n return result;\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll X position.\n */\nexport function getScrollX(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollX;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollLeft;\n }\n\n return node.scrollLeft;\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollY;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollTop;\n }\n\n return node.scrollTop;\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n */\nexport function setScroll(selector, x, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n }\n};\n\n/**\n * Scroll each node to an X position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n */\nexport function setScrollX(selector, x) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, node.scrollY);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n } else {\n node.scrollLeft = x;\n }\n }\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The scroll Y position.\n */\nexport function setScrollY(selector, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(node.scrollX, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollTop = y;\n }\n }\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { parseNode } from './../filters.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './../vars.js';\n\n/**\n * DOM Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerHeight :\n node.innerHeight;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollHeight;\n }\n\n let result = node.clientHeight;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-top'));\n result -= parseInt(css(node, 'padding-bottom'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-top-width'));\n result += parseInt(css(node, 'border-bottom-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-top'));\n result += parseInt(css(node, 'margin-bottom'));\n }\n\n return result;\n};\n\n/**\n * Get the computed width of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerWidth :\n node.innerWidth;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollWidth;\n }\n\n let result = node.clientWidth;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-left'));\n result -= parseInt(css(node, 'padding-right'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-left-width'));\n result += parseInt(css(node, 'border-right-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-left'));\n result += parseInt(css(node, 'margin-right'));\n }\n\n return result;\n};\n","import { getContext } from './../config.js';\n\n/**\n * DOM Cookie\n */\n\n/**\n * Get a cookie value.\n * @param {string} name The cookie name.\n * @return {*} The cookie value.\n */\nexport function getCookie(name) {\n const cookie = getContext().cookie\n .split(';')\n .find((cookie) =>\n cookie\n .trimStart()\n .substring(0, name.length) === name,\n )\n .trimStart();\n\n if (!cookie) {\n return null;\n }\n\n return decodeURIComponent(\n cookie.substring(name.length + 1),\n );\n};\n\n/**\n * Remove a cookie.\n * @param {string} name The cookie name.\n * @param {object} [options] The options to use for the cookie.\n * @param {string} [options.path] The cookie path.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function removeCookie(name, { path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n\n/**\n * Set a cookie value.\n * @param {string} name The cookie name.\n * @param {*} value The cookie value.\n * @param {object} [options] The options to use for the cookie.\n * @param {number} [options.expires] The number of seconds until the cookie will expire.\n * @param {string} [options.path] The path to use for the cookie.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function setCookie(name, value, { expires = null, path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=${value}`;\n\n if (expires) {\n const date = new Date;\n date.setTime(\n date.getTime() +\n expires * 1000,\n );\n cookie += `;expires=${date.toUTCString()}`;\n }\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n","import { getContext, getWindow } from './../config.js';\nimport { parseNode } from './../filters.js';\n\n/**\n * DOM Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function blur(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.blur();\n};\n\n/**\n * Trigger a click event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function click(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.click();\n};\n\n/**\n * Trigger a focus event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function focus(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.focus();\n};\n\n/**\n * Add a function to the ready queue.\n * @param {DOM~eventCallback} callback The callback to execute.\n */\nexport function ready(callback) {\n if (getContext().readyState === 'complete') {\n callback();\n } else {\n getWindow().addEventListener('DOMContentLoaded', callback, { once: true });\n }\n};\n","import { clone } from './manipulation.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Move\n */\n\n/**\n * Insert each other node after each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function after(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node.nextSibling);\n }\n }\n};\n\n/**\n * Append each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function append(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n }\n};\n\n/**\n * Append each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function appendTo(selector, otherSelector) {\n append(otherSelector, selector);\n};\n\n/**\n * Insert each other node before each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function before(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n};\n\n/**\n * Insert each node after each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertAfter(selector, otherSelector) {\n after(otherSelector, selector);\n};\n\n/**\n * Insert each node before each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertBefore(selector, otherSelector) {\n before(otherSelector, selector);\n};\n\n/**\n * Prepend each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function prepend(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const firstChild = node.firstChild;\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, firstChild);\n }\n }\n};\n\n/**\n * Prepend each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function prependTo(selector, otherSelector) {\n prepend(otherSelector, selector);\n};\n","import { isFragment, merge } from '@fr0st/core';\nimport { clone, remove } from './manipulation.js';\nimport { parseFilter, parseNodes } from './../filters.js';\n\n/**\n * DOM Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n */\nexport function unwrap(selector, nodeFilter) {\n // DocumentFragment and ShadowRoot nodes can not be unwrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n nodeFilter = parseFilter(nodeFilter);\n\n const parents = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n if (parents.includes(parent)) {\n continue;\n }\n\n if (!nodeFilter(parent)) {\n continue;\n }\n\n parents.push(parent);\n }\n\n for (const parent of parents) {\n const outerParent = parent.parentNode;\n\n if (!outerParent) {\n continue;\n }\n\n const children = merge([], parent.childNodes);\n\n for (const child of children) {\n outerParent.insertBefore(child, parent);\n }\n }\n\n remove(parents);\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrap(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapAll(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstNode = nodes[0];\n\n if (!firstNode) {\n return;\n }\n\n const parent = firstNode.parentNode;\n\n if (!parent) {\n return;\n }\n\n const firstClone = clones[0];\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, firstNode);\n }\n\n for (const node of nodes) {\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapInner(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const children = merge([], node.childNodes);\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n\n for (const child of children) {\n deepest.insertBefore(child, null);\n }\n }\n};\n","import { animate as _animate, stop as _stop } from './../../animation/animate.js';\n\n/**\n * QuerySet Animate\n */\n\n/**\n * Add an animation to the queue for each node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function animate(callback, { queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _animate(node, callback, options),\n { queueName },\n );\n};\n\n/**\n * Stop all animations and clear the queue of each node.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n * @return {QuerySet} The QuerySet object.\n */\nexport function stop({ finish = true } = {}) {\n this.clearQueue();\n _stop(this, { finish });\n\n return this;\n};\n","import { dropIn as _dropIn, dropOut as _dropOut, fadeIn as _fadeIn, fadeOut as _fadeOut, rotateIn as _rotateIn, rotateOut as _rotateOut, slideIn as _slideIn, slideOut as _slideOut, squeezeIn as _squeezeIn, squeezeOut as _squeezeOut } from './../../animation/animations.js';\n\n/**\n * QuerySet Animations\n */\n\n/**\n * Add a drop in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a drop out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeOut(node, options),\n { queueName },\n );\n};\n","import { getAttribute as _getAttribute, getDataset as _getDataset, getHTML as _getHTML, getProperty as _getProperty, getText as _getText, getValue as _getValue, removeAttribute as _removeAttribute, removeDataset as _removeDataset, removeProperty as _removeProperty, setAttribute as _setAttribute, setDataset as _setDataset, setHTML as _setHTML, setProperty as _setProperty, setText as _setText, setValue as _setValue } from './../../attributes/attributes.js';\n\n/**\n * QuerySet Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string} [attribute] The attribute name.\n * @return {string} The attribute value.\n */\nexport function getAttribute(attribute) {\n return _getAttribute(this, attribute);\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(key) {\n return _getDataset(this, key);\n};\n\n/**\n * Get the HTML contents of the first node.\n * @return {string} The HTML contents.\n */\nexport function getHTML() {\n return _getHTML(this);\n};\n\n/**\n * Get a property value for the first node.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(property) {\n return _getProperty(this, property);\n};\n\n/**\n * Get the text contents of the first node.\n * @return {string} The text contents.\n */\nexport function getText() {\n return _getText(this);\n};\n\n/**\n * Get the value property of the first node.\n * @return {string} The value.\n */\nexport function getValue() {\n return _getValue(this);\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeAttribute(attribute) {\n _removeAttribute(this, attribute);\n\n return this;\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string} key The dataset key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeDataset(key) {\n _removeDataset(this, key);\n\n return this;\n};\n\n/**\n * Remove a property from each node.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeProperty(property) {\n _removeProperty(this, property);\n\n return this;\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setAttribute(attribute, value) {\n _setAttribute(this, attribute, value);\n\n return this;\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setDataset(key, value) {\n _setDataset(this, key, value);\n\n return this;\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string} html The HTML contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setHTML(html) {\n _setHTML(this, html);\n\n return this;\n};\n\n/**\n * Set a property value for each node.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setProperty(property, value) {\n _setProperty(this, property, value);\n\n return this;\n};\n\n/**\n * Set the text contents of each node.\n * @param {string} text The text contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setText(text) {\n _setText(this, text);\n\n return this;\n};\n\n/**\n * Set the value property of each node.\n * @param {string} value The value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setValue(value) {\n _setValue(this, value);\n\n return this;\n};\n","import { cloneData as _cloneData, getData as _getData, removeData as _removeData, setData as _setData } from './../../attributes/data.js';\n\n/**\n * QuerySet Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneData(otherSelector) {\n _cloneData(this, otherSelector);\n\n return this;\n};\n\n/**\n * Get custom data for the first node.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(key) {\n return _getData(this, key);\n};\n\n/**\n * Remove custom data from each node.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeData(key) {\n _removeData(this, key);\n\n return this;\n};\n\n/**\n * Set custom data for each node.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setData(key, value) {\n _setData(this, key, value);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { center as _center, constrain as _constrain, distTo as _distTo, distToNode as _distToNode, nearestTo as _nearestTo, nearestToNode as _nearestToNode, percentX as _percentX, percentY as _percentY, position as _position, rect as _rect } from './../../attributes/position.js';\n\n/**\n * QuerySet Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center({ offset = false } = {}) {\n return _center(this, { offset });\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} container The container node, or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function constrain(container) {\n _constrain(this, container);\n\n return this;\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the node.\n */\nexport function distTo(x, y, { offset = false } = {}) {\n return _distTo(this, x, y, { offset });\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(otherSelector) {\n return _distToNode(this, otherSelector);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestTo(x, y, { offset = false } = {}) {\n const node = _nearestTo(this, x, y, { offset });\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestToNode(otherSelector) {\n const node = _nearestToNode(this, otherSelector);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(x, { offset = false, clamp = true } = {}) {\n return _percentX(this, x, { offset, clamp });\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(y, { offset = false, clamp = true } = {}) {\n return _percentY(this, y, { offset, clamp });\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function position({ offset = false } = {}) {\n return _position(this, { offset });\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect({ offset = false } = {}) {\n return _rect(this, { offset });\n};\n","import { getScrollX as _getScrollX, getScrollY as _getScrollY, setScroll as _setScroll, setScrollX as _setScrollX, setScrollY as _setScrollY } from './../../attributes/scroll.js';\n\n/**\n * QuerySet Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @return {number} The scroll X position.\n */\nexport function getScrollX() {\n return _getScrollX(this);\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY() {\n return _getScrollY(this);\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScroll(x, y) {\n _setScroll(this, x, y);\n\n return this;\n};\n\n/**\n * Scroll each node to an X position.\n * @param {number} x The scroll X position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollX(x) {\n _setScrollX(this, x);\n\n return this;\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollY(y) {\n _setScrollY(this, y);\n\n return this;\n};\n","\nimport { PADDING_BOX } from './../../vars.js';\nimport { height as _height, width as _width } from './../../attributes/size.js';\n\n/**\n * QuerySet Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _height(this, { boxSize, outer });\n};\n\n/**\n * Get the computed width of the first node.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _width(this, { boxSize, outer });\n};\n","import { addClass as _addClass, css as _css, getStyle as _getStyle, hide as _hide, removeClass as _removeClass, setStyle as _setStyle, show as _show, toggle as _toggle, toggleClass as _toggleClass } from './../../attributes/styles.js';\n\n/**\n * QuerySet Styles\n */\n\n/**\n * Add classes to each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addClass(...classes) {\n _addClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Get computed CSS style values for the first node.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(style) {\n return _css(this, style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(style) {\n return _getStyle(this, style);\n};\n\n/**\n * Hide each node from display.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hide() {\n _hide(this);\n\n return this;\n};\n\n/**\n * Remove classes from each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeClass(...classes) {\n _removeClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Set style properties for each node.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setStyle(style, value, { important = false } = {}) {\n _setStyle(this, style, value, { important });\n\n return this;\n};\n\n/**\n * Display each hidden node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function show() {\n _show(this);\n\n return this;\n};\n\n/**\n * Toggle the visibility of each node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggle() {\n _toggle(this);\n\n return this;\n};\n\n/**\n * Toggle classes for each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggleClass(...classes) {\n _toggleClass(this, ...classes);\n\n return this;\n};\n","import { addEvent as _addEvent, addEventDelegate as _addEventDelegate, addEventDelegateOnce as _addEventDelegateOnce, addEventOnce as _addEventOnce, cloneEvents as _cloneEvents, removeEvent as _removeEvent, removeEventDelegate as _removeEventDelegate, triggerEvent as _triggerEvent, triggerOne as _triggerOne } from './../../events/event-handlers.js';\n\n/**\n * QuerySet Event Handlers\n */\n\n/**\n * Add an event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEvent(events, callback, { capture = false, passive = false } = {}) {\n _addEvent(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegate(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegate(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegateOnce(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegateOnce(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventOnce(events, callback, { capture = false, passive = false } = {}) {\n _addEventOnce(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneEvents(otherSelector) {\n _cloneEvents(this, otherSelector);\n\n return this;\n};\n\n/**\n * Remove events from each node.\n * @param {string} [events] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEvent(events, callback, { capture = null } = {}) {\n _removeEvent(this, events, callback, { capture });\n\n return this;\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEventDelegate(events, delegate, callback, { capture = null } = {}) {\n _removeEventDelegate(this, events, delegate, callback, { capture });\n\n return this;\n};\n\n/**\n * Trigger events on each node.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {QuerySet} The QuerySet object.\n */\nexport function triggerEvent(events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n _triggerEvent(this, events, { data, detail, bubbles, cancelable });\n\n return this;\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n return _triggerOne(this, event, { data, detail, bubbles, cancelable });\n};\n","import { blur as _blur, click as _click, focus as _focus } from './../../events/events.js';\n\n/**\n * QuerySet Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function blur() {\n _blur(this);\n\n return this;\n};\n\n/**\n * Trigger a click event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function click() {\n _click(this);\n\n return this;\n};\n\n/**\n * Trigger a focus event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function focus() {\n _focus(this);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { attachShadow as _attachShadow } from './../../manipulation/create.js';\n\n/**\n * QuerySet Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {Boolean} [open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function attachShadow({ open = true } = {}) {\n const shadow = _attachShadow(this, { open });\n\n return new QuerySet(shadow ? [shadow] : []);\n}\n","import QuerySet from './../query-set.js';\nimport { clone as _clone, detach as _detach, empty as _empty, remove as _remove, replaceAll as _replaceAll, replaceWith as _replaceWith } from './../../manipulation/manipulation.js';\n\n/**\n * QuerySet Manipulation\n */\n\n/**\n * Clone each node.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function clone(options) {\n const clones = _clone(this, options);\n\n return new QuerySet(clones);\n};\n\n/**\n * Detach each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function detach() {\n _detach(this);\n\n return this;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function empty() {\n _empty(this);\n\n return this;\n};\n\n/**\n * Remove each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function remove() {\n _remove(this);\n\n return this;\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceAll(otherSelector) {\n _replaceAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceWith(otherSelector) {\n _replaceWith(this, otherSelector);\n\n return this;\n};\n","import { after as _after, append as _append, appendTo as _appendTo, before as _before, insertAfter as _insertAfter, insertBefore as _insertBefore, prepend as _prepend, prependTo as _prependTo } from './../../manipulation/move.js';\n\n/**\n * QuerySet Move\n */\n\n/**\n * Insert each other node after the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function after(otherSelector) {\n _after(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function append(otherSelector) {\n _append(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function appendTo(otherSelector) {\n _appendTo(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each other node before the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function before(otherSelector) {\n _before(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node after the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertAfter(otherSelector) {\n _insertAfter(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node before the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertBefore(otherSelector) {\n _insertBefore(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prepend(otherSelector) {\n _prepend(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prependTo(otherSelector) {\n _prependTo(this, otherSelector);\n\n return this;\n};\n","import { unwrap as _unwrap, wrap as _wrap, wrapAll as _wrapAll, wrapInner as _wrapInner } from './../../manipulation/wrap.js';\n\n/**\n * QuerySet Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function unwrap(nodeFilter) {\n _unwrap(this, nodeFilter);\n\n return this;\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrap(otherSelector) {\n _wrap(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapAll(otherSelector) {\n _wrapAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapInner(otherSelector) {\n _wrapInner(this, otherSelector);\n\n return this;\n};\n","import { parseNodes } from './../filters.js';\nimport { queues } from './../vars.js';\n\n/**\n * DOM Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName] The name of the queue to use.\n */\nexport function clearQueue(selector, { queueName = null } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n continue;\n }\n\n const queue = queues.get(node);\n\n if (queueName) {\n delete queue[queueName];\n }\n\n if (!queueName || !Object.keys(queue).length) {\n queues.delete(node);\n }\n }\n};\n\n/**\n * Run the next callback for a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nfunction dequeue(node, { queueName = 'default' } = {}) {\n const queue = queues.get(node);\n\n if (!queue || !(queueName in queue)) {\n return;\n }\n\n const next = queue[queueName].shift();\n\n if (!next) {\n queues.delete(node);\n return;\n }\n\n Promise.resolve(next(node))\n .then((_) => {\n dequeue(node, { queueName });\n }).catch((_) => {\n queues.delete(node);\n });\n};\n\n/**\n * Queue a callback on each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nexport function queue(selector, callback, { queueName = 'default' } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n queues.set(node, {});\n }\n\n const queue = queues.get(node);\n const runningQueue = queueName in queue;\n\n if (!runningQueue) {\n queue[queueName] = [\n (_) => new Promise((resolve) => {\n setTimeout(resolve, 1);\n }),\n ];\n }\n\n queue[queueName].push(callback);\n\n if (!runningQueue) {\n dequeue(node, { queueName });\n }\n }\n};\n","import { clearQueue as _clearQueue, queue as _queue } from './../../queue/queue.js';\n\n/**\n * QuerySet Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to clear.\n * @return {QuerySet} The QuerySet object.\n */\nexport function clearQueue({ queueName = 'default' } = {}) {\n _clearQueue(this, { queueName });\n\n return this;\n};\n\n/**\n * Delay execution of subsequent items in the queue for each node.\n * @param {number} duration The number of milliseconds to delay execution by.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function delay(duration, { queueName = 'default' } = {}) {\n return this.queue((_) =>\n new Promise((resolve) =>\n setTimeout(resolve, duration),\n ),\n { queueName },\n );\n};\n\n/**\n * Queue a callback on each node.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function queue(callback, { queueName = 'default' } = {}) {\n _queue(this, callback, { queueName });\n\n return this;\n};\n","import { isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function connected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) => node.isConnected);\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function equal(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isEqualNode(other),\n ),\n );\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function filter(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function filterOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find(nodeFilter) || null;\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function fixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).filter((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Return all hidden nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function hidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function not(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node, index) => !nodeFilter(node, index));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function notOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find((node, index) => !nodeFilter(node, index)) || null;\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function same(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isSameNode(other),\n ),\n );\n};\n\n/**\n * Return all visible nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function visible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n\n/**\n * Return all nodes with an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n animations.has(node),\n );\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {array} The filtered nodes.\n */\nexport function withAttribute(selector, attribute) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasAttribute(attribute),\n );\n};\n\n/**\n * Return all nodes with child elements.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter((node) =>\n !!node.childElementCount,\n );\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {array} The filtered nodes.\n */\nexport function withClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .filter((node) =>\n classes.some((className) =>\n node.classList.contains(className),\n ),\n );\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSTransition(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {array} The filtered nodes.\n */\nexport function withData(selector, key) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Return all nodes with a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function withDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {array} The filtered nodes.\n */\nexport function withProperty(selector, property) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasOwnProperty(property),\n );\n};\n","import QuerySet from './../query-set.js';\nimport { connected as _connected, equal as _equal, filter as _filter, filterOne as _filterOne, fixed as _fixed, hidden as _hidden, not as _not, notOne as _notOne, same as _same, visible as _visible, withAnimation as _withAnimation, withAttribute as _withAttribute, withChildren as _withChildren, withClass as _withClass, withCSSAnimation as _withCSSAnimation, withCSSTransition as _withCSSTransition, withData as _withData, withDescendent as _withDescendent, withProperty as _withProperty } from './../../traversal/filter.js';\n\n/**\n * QuerySet Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function connected() {\n return new QuerySet(_connected(this));\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function equal(otherSelector) {\n return new QuerySet(_equal(this, otherSelector));\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filter(nodeFilter) {\n return new QuerySet(_filter(this, nodeFilter));\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filterOne(nodeFilter) {\n const node = _filterOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fixed() {\n return new QuerySet(_fixed(this));\n};\n\n/**\n * Return all hidden nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hidden() {\n return new QuerySet(_hidden(this));\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function not(nodeFilter) {\n return new QuerySet(_not(this, nodeFilter));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function notOne(nodeFilter) {\n const node = _notOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function same(otherSelector) {\n return new QuerySet(_same(this, otherSelector));\n};\n\n/**\n * Return all visible nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function visible() {\n return new QuerySet(_visible(this));\n};\n\n/**\n * Return all nodes with an animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withAnimation() {\n return new QuerySet(_withAnimation(this));\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withAttribute(attribute) {\n return new QuerySet(_withAttribute(this, attribute));\n};\n\n/**\n * Return all nodes with child elements.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withChildren() {\n return new QuerySet(_withChildren(this));\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withClass(classes) {\n return new QuerySet(_withClass(this, classes));\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withCSSAnimation() {\n return new QuerySet(_withCSSAnimation(this));\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withCSSTransition() {\n return new QuerySet(_withCSSTransition(this));\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withData(key) {\n return new QuerySet(_withData(this, key));\n};\n\n/**\n * Return all elements with a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withDescendent(nodeFilter) {\n return new QuerySet(_withDescendent(this, nodeFilter));\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withProperty(property) {\n return new QuerySet(_withProperty(this, property));\n};\n","import QuerySet from './../query-set.js';\nimport { find as _find, findByClass as _findByClass, findById as _findById, findByTag as _findByTag, findOne as _findOne, findOneByClass as _findOneByClass, findOneById as _findOneById, findOneByTag as _findOneByTag } from './../../traversal/find.js';\n\n/**\n * QuerySet Find\n */\n\n/**\n * Return all descendent nodes matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function find(selector) {\n return new QuerySet(_find(selector, this));\n};\n\n/**\n * Return all descendent nodes with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByClass(className) {\n return new QuerySet(_findByClass(className, this));\n};\n\n/**\n * Return all descendent nodes with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findById(id) {\n return new QuerySet(_findById(id, this));\n};\n\n/**\n * Return all descendent nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByTag(tagName) {\n return new QuerySet(_findByTag(tagName, this));\n};\n\n/**\n * Return a single descendent node matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOne(selector) {\n const node = _findOne(selector, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByClass(className) {\n const node = _findOneByClass(className, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneById(id) {\n const node = _findOneById(id, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByTag(tagName) {\n const node = _findOneByTag(tagName, this);\n\n return new QuerySet(node ? [node] : []);\n};\n","import QuerySet from './../query-set.js';\nimport { child as _child, children as _children, closest as _closest, commonAncestor as _commonAncestor, contents as _contents, fragment as _fragment, next as _next, nextAll as _nextAll, offsetParent as _offsetParent, parent as _parent, parents as _parents, prev as _prev, prevAll as _prevAll, shadow as _shadow, siblings as _siblings } from './../../traversal/traversal.js';\n\n/**\n * QuerySet Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function child(nodeFilter) {\n return new QuerySet(_child(this, nodeFilter));\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function children(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_children(this, nodeFilter, { elementsOnly }));\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function closest(nodeFilter, limitFilter) {\n return new QuerySet(_closest(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function commonAncestor() {\n const node = _commonAncestor(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function contents() {\n return new QuerySet(_contents(this));\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fragment() {\n const node = _fragment(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function next(nodeFilter) {\n return new QuerySet(_next(this, nodeFilter));\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function nextAll(nodeFilter, limitFilter) {\n return new QuerySet(_nextAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function offsetParent() {\n const node = _offsetParent(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parent(nodeFilter) {\n return new QuerySet(_parent(this, nodeFilter));\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parents(nodeFilter, limitFilter) {\n return new QuerySet(_parents(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prev(nodeFilter) {\n return new QuerySet(_prev(this, nodeFilter));\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prevAll(nodeFilter, limitFilter) {\n return new QuerySet(_prevAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function shadow() {\n const node = _shadow(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [elementsOnly=true] Whether to only return element nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function siblings(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_siblings(this, nodeFilter, { elementsOnly }));\n};\n","import { isElement, merge, unique } from '@fr0st/core';\nimport { sort } from './utility.js';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Selection\n */\n\n/**\n * Insert each node after the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function afterSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n range.collapse();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Insert each node before the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function beforeSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Extract selected nodes from the DOM.\n * @return {array} The selected nodes.\n */\nexport function extractSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const fragment = range.extractContents();\n\n return merge([], fragment.childNodes);\n};\n\n/**\n * Return all selected nodes.\n * @return {array} The selected nodes.\n */\nexport function getSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n const nodes = merge([], range.commonAncestorContainer.querySelectorAll('*'));\n\n if (!nodes.length) {\n return [range.commonAncestorContainer];\n }\n\n if (nodes.length === 1) {\n return nodes;\n }\n\n const startContainer = range.startContainer;\n const endContainer = range.endContainer;\n const start = isElement(startContainer) ?\n startContainer :\n startContainer.parentNode;\n const end = isElement(endContainer) ?\n endContainer :\n endContainer.parentNode;\n\n const selectedNodes = nodes.slice(\n nodes.indexOf(start),\n nodes.indexOf(end) + 1,\n );\n const results = [];\n\n let lastNode;\n for (const node of selectedNodes) {\n if (lastNode && lastNode.contains(node)) {\n continue;\n }\n\n lastNode = node;\n results.push(node);\n }\n\n return results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Create a selection on the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function select(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (node && 'select' in node) {\n node.select();\n return;\n }\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n\n if (!node) {\n return;\n }\n\n const range = createRange();\n range.selectNode(node);\n selection.addRange(range);\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function selectAll(selector) {\n const nodes = sort(selector);\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount) {\n selection.removeAllRanges();\n }\n\n if (!nodes.length) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length == 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n selection.addRange(range);\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function wrapSelection(selector) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n fragment: true,\n html: true,\n });\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const node = nodes.slice().shift();\n const deepest = merge([], node.querySelectorAll('*')).find((node) => !node.childElementCount) || node;\n\n const fragment = range.extractContents();\n\n const childNodes = merge([], fragment.childNodes);\n\n for (const child of childNodes) {\n deepest.insertBefore(child, null);\n }\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n","import { afterSelection as _afterSelection, beforeSelection as _beforeSelection, select as _select, selectAll as _selectAll, wrapSelection as _wrapSelection } from './../../utility/selection.js';\n\n/**\n * QuerySet Selection\n */\n\n/**\n * Insert each node after the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function afterSelection() {\n _afterSelection(this);\n\n return this;\n};\n\n/**\n * Insert each node before the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function beforeSelection() {\n _beforeSelection(this);\n\n return this;\n};\n\n/**\n * Create a selection on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function select() {\n _select(this);\n\n return this;\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function selectAll() {\n _selectAll(this);\n\n return this;\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapSelection() {\n _wrapSelection(this);\n\n return this;\n};\n","import { camelCase, isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation(selector) {\n return parseNodes(selector)\n .some((node) => animations.has(node));\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(selector, attribute) {\n return parseNodes(selector)\n .some((node) => node.hasAttribute(attribute));\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some((node) => node.childElementCount);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .some((node) =>\n classes.some((className) => node.classList.contains(className)),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(selector, key) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).some((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(selector, key) {\n key = camelCase(key);\n\n return parseNodes(selector)\n .some((node) => !!node.dataset[key]);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment(selector) {\n return parseNodes(selector)\n .some((node) => node.content);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(selector, property) {\n return parseNodes(selector)\n .some((node) => node.hasOwnProperty(property));\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow(selector) {\n return parseNodes(selector)\n .some((node) => node.shadowRoot);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) => node.isConnected);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isEqualNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes or a parent of any of the nodes is \"fixed\".\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).some((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isSameNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n","import { hasAnimation as _hasAnimation, hasAttribute as _hasAttribute, hasChildren as _hasChildren, hasClass as _hasClass, hasCSSAnimation as _hasCSSAnimation, hasCSSTransition as _hasCSSTransition, hasData as _hasData, hasDataset as _hasDataset, hasDescendent as _hasDescendent, hasFragment as _hasFragment, hasProperty as _hasProperty, hasShadow as _hasShadow, is as _is, isConnected as _isConnected, isEqual as _isEqual, isFixed as _isFixed, isHidden as _isHidden, isSame as _isSame, isVisible as _isVisible } from './../../utility/tests.js';\n\n/**\n * QuerySet Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation() {\n return _hasAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(attribute) {\n return _hasAttribute(this, attribute);\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren() {\n return _hasChildren(this);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(...classes) {\n return _hasClass(this, ...classes);\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation() {\n return _hasCSSAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition() {\n return _hasCSSTransition(this);\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(key) {\n return _hasData(this, key);\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(key) {\n return _hasDataset(this, key);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(nodeFilter) {\n return _hasDescendent(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment() {\n return _hasFragment(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(property) {\n return _hasProperty(this, property);\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow() {\n return _hasShadow(this);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(nodeFilter) {\n return _is(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected() {\n return _isConnected(this);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(otherSelector) {\n return _isEqual(this, otherSelector);\n};\n\n/**\n * Returns true if any of the elements or a parent of any of the elements is \"fixed\".\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed() {\n return _isFixed(this);\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden() {\n return _isHidden(this);\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(otherSelector) {\n return _isSame(this, otherSelector);\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible() {\n return _isVisible(this);\n};\n","import { merge, unique } from '@fr0st/core';\nimport { query } from './../query.js';\nimport QuerySet from './../query-set.js';\nimport { index as _index, indexOf as _indexOf, normalize as _normalize, serialize as _serialize, serializeArray as _serializeArray, sort as _sort, tagName as _tagName } from './../../utility/utility.js';\n\n/**\n * QuerySet Utility\n */\n\n/**\n * Merge with new nodes and sort the results.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The QuerySet object.\n */\nexport function add(selector, context = null) {\n const nodes = _sort(unique(merge([], this.get(), query(selector, context).get())));\n\n return new QuerySet(nodes);\n};\n\n/**\n * Reduce the set of nodes to the one at the specified index.\n * @param {number} index The index of the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function eq(index) {\n const node = this.get(index);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Reduce the set of nodes to the first.\n * @return {QuerySet} The QuerySet object.\n */\nexport function first() {\n return this.eq(0);\n};\n\n/**\n * Get the index of the first node relative to it's parent node.\n * @return {number} The index.\n */\nexport function index() {\n return _index(this);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(nodeFilter) {\n return _indexOf(this, nodeFilter);\n};\n\n/**\n * Reduce the set of nodes to the last.\n * @return {QuerySet} The QuerySet object.\n */\nexport function last() {\n return this.eq(-1);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function normalize() {\n _normalize(this);\n\n return this;\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @return {string} The serialized string.\n */\nexport function serialize() {\n return _serialize(this);\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @return {array} The serialized array.\n */\nexport function serializeArray() {\n return _serializeArray(this);\n};\n\n/**\n * Sort nodes by their position in the document.\n * @return {QuerySet} The QuerySet object.\n */\nexport function sort() {\n return new QuerySet(_sort(this));\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName() {\n return _tagName(this);\n};\n","import QuerySet from './query-set.js';\nimport { animate, stop } from './animation/animate.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus } from './events/events.js';\nimport { attachShadow } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { clearQueue, delay, queue } from './queue/queue.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { afterSelection, beforeSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { add, eq, first, index, indexOf, last, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nconst proto = QuerySet.prototype;\n\nproto.add = add;\nproto.addClass = addClass;\nproto.addEvent = addEvent;\nproto.addEventDelegate = addEventDelegate;\nproto.addEventDelegateOnce = addEventDelegateOnce;\nproto.addEventOnce = addEventOnce;\nproto.after = after;\nproto.afterSelection = afterSelection;\nproto.animate = animate;\nproto.append = append;\nproto.appendTo = appendTo;\nproto.attachShadow = attachShadow;\nproto.before = before;\nproto.beforeSelection = beforeSelection;\nproto.blur = blur;\nproto.center = center;\nproto.child = child;\nproto.children = children;\nproto.clearQueue = clearQueue;\nproto.click = click;\nproto.clone = clone;\nproto.cloneData = cloneData;\nproto.cloneEvents = cloneEvents;\nproto.closest = closest;\nproto.commonAncestor = commonAncestor;\nproto.connected = connected;\nproto.constrain = constrain;\nproto.contents = contents;\nproto.css = css;\nproto.delay = delay;\nproto.detach = detach;\nproto.distTo = distTo;\nproto.distToNode = distToNode;\nproto.dropIn = dropIn;\nproto.dropOut = dropOut;\nproto.empty = empty;\nproto.eq = eq;\nproto.equal = equal;\nproto.fadeIn = fadeIn;\nproto.fadeOut = fadeOut;\nproto.filter = filter;\nproto.filterOne = filterOne;\nproto.find = find;\nproto.findByClass = findByClass;\nproto.findById = findById;\nproto.findByTag = findByTag;\nproto.findOne = findOne;\nproto.findOneByClass = findOneByClass;\nproto.findOneById = findOneById;\nproto.findOneByTag = findOneByTag;\nproto.first = first;\nproto.fixed = fixed;\nproto.focus = focus;\nproto.fragment = fragment;\nproto.getAttribute = getAttribute;\nproto.getData = getData;\nproto.getDataset = getDataset;\nproto.getHTML = getHTML;\nproto.getProperty = getProperty;\nproto.getScrollX = getScrollX;\nproto.getScrollY = getScrollY;\nproto.getStyle = getStyle;\nproto.getText = getText;\nproto.getValue = getValue;\nproto.hasAnimation = hasAnimation;\nproto.hasAttribute = hasAttribute;\nproto.hasChildren = hasChildren;\nproto.hasClass = hasClass;\nproto.hasCSSAnimation = hasCSSAnimation;\nproto.hasCSSTransition = hasCSSTransition;\nproto.hasData = hasData;\nproto.hasDataset = hasDataset;\nproto.hasDescendent = hasDescendent;\nproto.hasFragment = hasFragment;\nproto.hasProperty = hasProperty;\nproto.hasShadow = hasShadow;\nproto.height = height;\nproto.hidden = hidden;\nproto.hide = hide;\nproto.index = index;\nproto.indexOf = indexOf;\nproto.insertAfter = insertAfter;\nproto.insertBefore = insertBefore;\nproto.is = is;\nproto.isConnected = isConnected;\nproto.isEqual = isEqual;\nproto.isFixed = isFixed;\nproto.isHidden = isHidden;\nproto.isSame = isSame;\nproto.isVisible = isVisible;\nproto.last = last;\nproto.nearestTo = nearestTo;\nproto.nearestToNode = nearestToNode;\nproto.next = next;\nproto.nextAll = nextAll;\nproto.normalize = normalize;\nproto.not = not;\nproto.notOne = notOne;\nproto.offsetParent = offsetParent;\nproto.parent = parent;\nproto.parents = parents;\nproto.percentX = percentX;\nproto.percentY = percentY;\nproto.position = position;\nproto.prepend = prepend;\nproto.prependTo = prependTo;\nproto.prev = prev;\nproto.prevAll = prevAll;\nproto.queue = queue;\nproto.rect = rect;\nproto.remove = remove;\nproto.removeAttribute = removeAttribute;\nproto.removeClass = removeClass;\nproto.removeData = removeData;\nproto.removeDataset = removeDataset;\nproto.removeEvent = removeEvent;\nproto.removeEventDelegate = removeEventDelegate;\nproto.removeProperty = removeProperty;\nproto.replaceAll = replaceAll;\nproto.replaceWith = replaceWith;\nproto.rotateIn = rotateIn;\nproto.rotateOut = rotateOut;\nproto.same = same;\nproto.select = select;\nproto.selectAll = selectAll;\nproto.serialize = serialize;\nproto.serializeArray = serializeArray;\nproto.setAttribute = setAttribute;\nproto.setData = setData;\nproto.setDataset = setDataset;\nproto.setHTML = setHTML;\nproto.setProperty = setProperty;\nproto.setScroll = setScroll;\nproto.setScrollX = setScrollX;\nproto.setScrollY = setScrollY;\nproto.setStyle = setStyle;\nproto.setText = setText;\nproto.setValue = setValue;\nproto.shadow = shadow;\nproto.show = show;\nproto.siblings = siblings;\nproto.slideIn = slideIn;\nproto.slideOut = slideOut;\nproto.sort = sort;\nproto.squeezeIn = squeezeIn;\nproto.squeezeOut = squeezeOut;\nproto.stop = stop;\nproto.tagName = tagName;\nproto.toggle = toggle;\nproto.toggleClass = toggleClass;\nproto.triggerEvent = triggerEvent;\nproto.triggerOne = triggerOne;\nproto.unwrap = unwrap;\nproto.visible = visible;\nproto.width = width;\nproto.withAnimation = withAnimation;\nproto.withAttribute = withAttribute;\nproto.withChildren = withChildren;\nproto.withClass = withClass;\nproto.withCSSAnimation = withCSSAnimation;\nproto.withCSSTransition = withCSSTransition;\nproto.withData = withData;\nproto.withDescendent = withDescendent;\nproto.withProperty = withProperty;\nproto.wrap = wrap;\nproto.wrapAll = wrapAll;\nproto.wrapInner = wrapInner;\nproto.wrapSelection = wrapSelection;\n\nexport default QuerySet;\n","import { isFunction } from '@fr0st/core';\nimport QuerySet from './proto.js';\nimport { getContext } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { ready } from './../events/events.js';\n\n/**\n * DOM Query\n */\n\n/**\n * Add a function to the ready queue or return a QuerySet.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet|function} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function query(selector, context = null) {\n if (isFunction(selector)) {\n return ready(selector);\n }\n\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(nodes);\n};\n\n/**\n * Return a QuerySet for the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function queryOne(selector, context = null) {\n const node = parseNode(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(node ? [node] : []);\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Scripts\n */\n\n/**\n * Load and execute a JavaScript file.\n * @param {string} url The URL of the script.\n * @param {object} [attributes] Additional attributes to set on the script tag.\n * @param {object} [options] The options for loading the script.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the script is loaded, or rejects on failure.\n */\nexport function loadScript(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n src: url,\n type: 'text/javascript',\n ...attributes,\n };\n\n if (!('async' in attributes)) {\n attributes.defer = '';\n }\n\n if (!cache) {\n attributes.src = appendQueryString(attributes.src, '_', Date.now());\n }\n\n const script = context.createElement('script');\n\n for (const [key, value] of Object.entries(attributes)) {\n script.setAttribute(key, value);\n }\n\n context.head.appendChild(script);\n\n return new Promise((resolve, reject) => {\n script.onload = (_) => resolve();\n script.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Load and executes multiple JavaScript files (in order).\n * @param {array} urls An array of script URLs or attribute objects.\n * @param {object} [options] The options for loading the scripts.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadScripts(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadScript(url, null, { cache, context }) :\n loadScript(null, url, { cache, context }),\n ),\n );\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Styles\n */\n\n/**\n * Import a CSS Stylesheet file.\n * @param {string} url The URL of the stylesheet.\n * @param {object} [attributes] Additional attributes to set on the style tag.\n * @param {object} [options] The options for loading the stylesheet.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the stylesheet is loaded, or rejects on failure.\n */\nexport function loadStyle(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n href: url,\n rel: 'stylesheet',\n ...attributes,\n };\n\n if (!cache) {\n attributes.href = appendQueryString(attributes.href, '_', Date.now());\n }\n\n const link = context.createElement('link');\n\n for (const [key, value] of Object.entries(attributes)) {\n link.setAttribute(key, value);\n }\n\n context.head.appendChild(link);\n\n return new Promise((resolve, reject) => {\n link.onload = (_) => resolve();\n link.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Import multiple CSS Stylesheet files.\n * @param {array} urls An array of stylesheet URLs or attribute objects.\n * @param {object} [options] The options for loading the stylesheets.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadStyles(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadStyle(url, null, { cache, context }) :\n loadStyle(null, url, { cache, context }),\n ),\n );\n};\n","import { merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { allowedTags as _allowedTags } from './../vars.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Sanitize a HTML string.\n * @param {string} html The input HTML string.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n * @return {string} The sanitized HTML string.\n */\nexport function sanitize(html, allowedTags = _allowedTags) {\n const template = getContext().createElement('template');\n template.innerHTML = html;\n const fragment = template.content;\n const childNodes = merge([], fragment.children);\n\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n\n return template.innerHTML;\n};\n\n/**\n * Sanitize a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n */\nfunction sanitizeNode(node, allowedTags = _allowedTags) {\n // check node\n const name = node.tagName.toLowerCase();\n\n if (!(name in allowedTags)) {\n node.remove();\n return;\n }\n\n // check node attributes\n const allowedAttributes = [];\n\n if ('*' in allowedTags) {\n allowedAttributes.push(...allowedTags['*']);\n }\n\n allowedAttributes.push(...allowedTags[name]);\n\n const attributes = merge([], node.attributes);\n\n for (const attribute of attributes) {\n if (!allowedAttributes.find((test) => attribute.nodeName.match(test))) {\n node.removeAttribute(attribute.nodeName);\n }\n }\n\n // check children\n const childNodes = merge([], node.children);\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n};\n","import * as _ from '@fr0st/core';\nimport { getAjaxDefaults, getAnimationDefaults, getContext, getWindow, setAjaxDefaults, setAnimationDefaults, setContext, setWindow, useTimeout } from './config.js';\nimport { noConflict } from './globals.js';\nimport { debounce } from './helpers.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './vars.js';\nimport { ajax, _delete, get, patch, post, put } from './ajax/ajax.js';\nimport { parseFormData, parseParams } from './ajax/helpers.js';\nimport { animate, stop } from './animation/animate.js';\nimport Animation from './animation/animation.js';\nimport AnimationSet from './animation/animation-set.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { getCookie, removeCookie, setCookie } from './cookie/cookie.js';\nimport { mouseDragFactory } from './events/event-factory.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus, ready } from './events/events.js';\nimport { attachShadow, create, createComment, createFragment, createRange, createText } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { parseDocument, parseHTML } from './parser/parser.js';\nimport { query, queryOne } from './query/query.js';\nimport QuerySet from './query/query-set.js';\nimport { clearQueue, queue } from './queue/queue.js';\nimport { loadScript, loadScripts } from './scripts/scripts.js';\nimport { loadStyle, loadStyles } from './styles/styles.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { sanitize } from './utility/sanitize.js';\nimport { afterSelection, beforeSelection, extractSelection, getSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { exec, index, indexOf, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nObject.assign(query, {\n BORDER_BOX,\n CONTENT_BOX,\n MARGIN_BOX,\n PADDING_BOX,\n SCROLL_BOX,\n Animation,\n AnimationSet,\n QuerySet,\n addClass,\n addEvent,\n addEventDelegate,\n addEventDelegateOnce,\n addEventOnce,\n after,\n afterSelection,\n ajax,\n animate,\n append,\n appendTo,\n attachShadow,\n before,\n beforeSelection,\n blur,\n center,\n child,\n children,\n clearQueue,\n click,\n clone,\n cloneData,\n cloneEvents,\n closest,\n commonAncestor,\n connected,\n constrain,\n contents,\n create,\n createComment,\n createFragment,\n createRange,\n createText,\n css,\n debounce,\n delete: _delete,\n detach,\n distTo,\n distToNode,\n dropIn,\n dropOut,\n empty,\n equal,\n exec,\n extractSelection,\n fadeIn,\n fadeOut,\n filter,\n filterOne,\n find,\n findByClass,\n findById,\n findByTag,\n findOne,\n findOneByClass,\n findOneById,\n findOneByTag,\n fixed,\n focus,\n fragment,\n get,\n getAjaxDefaults,\n getAnimationDefaults,\n getAttribute,\n getContext,\n getCookie,\n getData,\n getDataset,\n getHTML,\n getProperty,\n getScrollX,\n getScrollY,\n getSelection,\n getStyle,\n getText,\n getValue,\n getWindow,\n hasAnimation,\n hasAttribute,\n hasCSSAnimation,\n hasCSSTransition,\n hasChildren,\n hasClass,\n hasData,\n hasDataset,\n hasDescendent,\n hasFragment,\n hasProperty,\n hasShadow,\n height,\n hidden,\n hide,\n index,\n indexOf,\n insertAfter,\n insertBefore,\n is,\n isConnected,\n isEqual,\n isFixed,\n isHidden,\n isSame,\n isVisible,\n loadScript,\n loadScripts,\n loadStyle,\n loadStyles,\n mouseDragFactory,\n nearestTo,\n nearestToNode,\n next,\n nextAll,\n noConflict,\n normalize,\n not,\n notOne,\n offsetParent,\n parent,\n parents,\n parseDocument,\n parseFormData,\n parseHTML,\n parseParams,\n patch,\n percentX,\n percentY,\n position,\n post,\n prepend,\n prependTo,\n prev,\n prevAll,\n put,\n query,\n queryOne,\n queue,\n ready,\n rect,\n remove,\n removeAttribute,\n removeClass,\n removeCookie,\n removeData,\n removeDataset,\n removeEvent,\n removeEventDelegate,\n removeProperty,\n replaceAll,\n replaceWith,\n rotateIn,\n rotateOut,\n same,\n sanitize,\n select,\n selectAll,\n serialize,\n serializeArray,\n setAjaxDefaults,\n setAnimationDefaults,\n setAttribute,\n setContext,\n setCookie,\n setData,\n setDataset,\n setHTML,\n setProperty,\n setScroll,\n setScrollX,\n setScrollY,\n setStyle,\n setText,\n setValue,\n setWindow,\n shadow,\n show,\n siblings,\n slideIn,\n slideOut,\n sort,\n squeezeIn,\n squeezeOut,\n stop,\n tagName,\n toggle,\n toggleClass,\n triggerEvent,\n triggerOne,\n unwrap,\n useTimeout,\n visible,\n width,\n withAnimation,\n withAttribute,\n withCSSAnimation,\n withCSSTransition,\n withChildren,\n withClass,\n withData,\n withDescendent,\n withProperty,\n wrap,\n wrapAll,\n wrapInner,\n wrapSelection,\n});\n\nfor (const [key, value] of Object.entries(_)) {\n query[`_${key}`] = value;\n}\n\nexport default query;\n","import { getWindow, setContext, setWindow } from './config.js';\nimport $ from './fquery.js';\n\nlet _$;\n\n/**\n * Reset the global $ variable.\n */\nexport function noConflict() {\n const window = getWindow();\n\n if (window.$ === $) {\n window.$ = _$;\n }\n};\n\n/**\n * Register the global variables.\n * @param {Window} window The window.\n * @param {Document} [document] The document.\n * @return {object} The fQuery object.\n */\nexport function registerGlobals(window, document) {\n setWindow(window);\n setContext(document || window.document);\n\n _$ = window.$;\n window.$ = $;\n\n return $;\n};\n","import { isWindow } from '@fr0st/core';\nimport { registerGlobals } from './globals.js';\n\nexport default isWindow(globalThis) ? registerGlobals(globalThis) : registerGlobals;\n"],"names":["wrap","debounce","attachShadow","find","findById","findByClass","findByTag","findOne","findOneById","findOneByClass","findOneByTag","animate","stop","dropIn","slideIn","dropOut","slideOut","fadeIn","fadeOut","rotateIn","rotateOut","squeezeIn","squeezeOut","index","indexOf","normalize","serialize","serializeArray","sort","tagName","child","children","closest","parents","commonAncestor","contents","fragment","next","nextAll","offsetParent","parent","prev","prevAll","shadow","siblings","_debounce","removeEvent","addEvent","addEventDelegate","addEventDelegateOnce","addEventOnce","cloneEvents","removeEventDelegate","triggerEvent","triggerOne","clone","events","data","animations","_events","_data","_animations","detach","empty","remove","replaceAll","replaceWith","getAttribute","getDataset","getHTML","getProperty","getText","getValue","removeAttribute","removeDataset","removeProperty","setAttribute","setDataset","setHTML","setProperty","setText","setValue","cloneData","setData","getData","removeData","addClass","css","getStyle","hide","removeClass","setStyle","show","toggle","toggleClass","center","rect","constrain","distTo","distToNode","nearestTo","nearestToNode","percentX","percentY","position","getScrollX","getScrollY","setScroll","setScrollX","setScrollY","height","width","blur","click","focus","after","append","appendTo","before","insertAfter","insertBefore","prepend","prependTo","unwrap","wrapAll","wrapInner","_animate","_stop","_dropIn","_dropOut","_fadeIn","_fadeOut","_rotateIn","_rotateOut","_slideIn","_slideOut","_squeezeIn","_squeezeOut","_getAttribute","_getDataset","_getHTML","_getProperty","_getText","_getValue","_removeAttribute","_removeDataset","_removeProperty","_setAttribute","_setDataset","_setHTML","_setProperty","_setText","_setValue","_cloneData","_getData","_removeData","_setData","_center","_constrain","_distTo","_distToNode","_nearestTo","_nearestToNode","_percentX","_percentY","_position","_rect","_getScrollX","_getScrollY","_setScroll","_setScrollX","_setScrollY","_height","_width","_addClass","_css","_getStyle","_hide","_removeClass","_setStyle","_show","_toggle","_toggleClass","_addEvent","_addEventDelegate","_addEventDelegateOnce","_addEventOnce","_cloneEvents","_removeEvent","_removeEventDelegate","_triggerEvent","_triggerOne","_blur","_click","_focus","_attachShadow","_clone","_detach","_empty","_remove","_replaceAll","_replaceWith","_after","_append","_appendTo","_before","_insertAfter","_insertBefore","_prepend","_prependTo","_unwrap","_wrap","_wrapAll","_wrapInner","clearQueue","queue","_clearQueue","_queue","connected","equal","filter","filterOne","fixed","hidden","not","notOne","same","visible","withAnimation","withAttribute","withChildren","withClass","withCSSAnimation","withCSSTransition","withData","withDescendent","withProperty","_connected","_equal","_filter","_filterOne","_fixed","_hidden","_not","_notOne","_same","_visible","_withAnimation","_withAttribute","_withChildren","_withClass","_withCSSAnimation","_withCSSTransition","_withData","_withDescendent","_withProperty","_find","_findByClass","_findById","_findByTag","_findOne","_findOneByClass","_findOneById","_findOneByTag","_child","_children","_closest","_commonAncestor","_contents","_fragment","_next","_nextAll","_offsetParent","_parent","_parents","_prev","_prevAll","_shadow","_siblings","afterSelection","beforeSelection","select","selectAll","wrapSelection","_afterSelection","_beforeSelection","_select","_selectAll","_wrapSelection","hasAnimation","hasAttribute","hasChildren","hasClass","hasCSSAnimation","hasCSSTransition","hasData","hasDataset","hasDescendent","hasFragment","hasProperty","hasShadow","is","isConnected","isEqual","isFixed","isHidden","isSame","isVisible","_hasAnimation","_hasAttribute","_hasChildren","_hasClass","_hasCSSAnimation","_hasCSSTransition","_hasData","_hasDataset","_hasDescendent","_hasFragment","_hasProperty","_hasShadow","_is","_isConnected","_isEqual","_isFixed","_isHidden","_isSame","_isVisible","_sort","_index","_indexOf","_normalize","_serialize","_serializeArray","_tagName","allowedTags","_allowedTags","$"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file +{"version":3,"file":"fquery.js","sources":["../node_modules/@fr0st/core/src/testing.js","../node_modules/@fr0st/core/src/math.js","../node_modules/@fr0st/core/src/array.js","../node_modules/@fr0st/core/src/function.js","../node_modules/@fr0st/core/src/object.js","../node_modules/@fr0st/core/src/string.js","../src/config.js","../src/helpers.js","../src/vars.js","../src/ajax/helpers.js","../src/ajax/ajax-request.js","../src/ajax/ajax.js","../src/animation/helpers.js","../src/animation/animation.js","../src/animation/animation-set.js","../src/manipulation/create.js","../src/parser/parser.js","../src/query/query-set.js","../src/traversal/find.js","../src/filters.js","../src/animation/animate.js","../src/animation/animations.js","../src/utility/utility.js","../src/traversal/traversal.js","../src/events/event-factory.js","../src/events/event-handlers.js","../src/manipulation/manipulation.js","../src/attributes/attributes.js","../src/attributes/data.js","../src/attributes/styles.js","../src/attributes/position.js","../src/attributes/scroll.js","../src/attributes/size.js","../src/cookie/cookie.js","../src/events/events.js","../src/manipulation/move.js","../src/manipulation/wrap.js","../src/query/animation/animate.js","../src/query/animation/animations.js","../src/query/attributes/attributes.js","../src/query/attributes/data.js","../src/query/attributes/position.js","../src/query/attributes/scroll.js","../src/query/attributes/size.js","../src/query/attributes/styles.js","../src/query/events/event-handlers.js","../src/query/events/events.js","../src/query/manipulation/create.js","../src/query/manipulation/manipulation.js","../src/query/manipulation/move.js","../src/query/manipulation/wrap.js","../src/queue/queue.js","../src/query/queue/queue.js","../src/traversal/filter.js","../src/query/traversal/filter.js","../src/query/traversal/find.js","../src/query/traversal/traversal.js","../src/utility/selection.js","../src/query/utility/selection.js","../src/utility/tests.js","../src/query/utility/tests.js","../src/query/utility/utility.js","../src/query/proto.js","../src/query/query.js","../src/scripts/scripts.js","../src/styles/styles.js","../src/utility/sanitize.js","../src/fquery.js","../src/globals.js","../src/index.js"],"sourcesContent":["/**\n * Testing methods\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst DOCUMENT_NODE = 9;\nconst DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Returns true if the value is an array.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is an array, otherwise FALSE.\n */\nexport const isArray = Array.isArray;\n\n/**\n * Returns true if the value is array-like.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is array-like, otherwise FALSE.\n */\nexport const isArrayLike = (value) =>\n isArray(value) ||\n (\n isObject(value) &&\n !isFunction(value) &&\n !isWindow(value) &&\n !isElement(value) &&\n (\n (\n Symbol.iterator in value &&\n isFunction(value[Symbol.iterator])\n ) ||\n (\n 'length' in value &&\n isNumeric(value.length) &&\n (\n !value.length ||\n value.length - 1 in value\n )\n )\n )\n );\n\n/**\n * Returns true if the value is a Boolean.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is boolean, otherwise FALSE.\n */\nexport const isBoolean = (value) =>\n value === !!value;\n\n/**\n * Returns true if the value is a Document.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Document, otherwise FALSE.\n */\nexport const isDocument = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_NODE;\n\n/**\n * Returns true if the value is a HTMLElement.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a HTMLElement, otherwise FALSE.\n */\nexport const isElement = (value) =>\n !!value &&\n value.nodeType === ELEMENT_NODE;\n\n/**\n * Returns true if the value is a DocumentFragment.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a DocumentFragment, otherwise FALSE.\n */\nexport const isFragment = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !value.host;\n\n/**\n * Returns true if the value is a function.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a function, otherwise FALSE.\n */\nexport const isFunction = (value) =>\n typeof value === 'function';\n\n/**\n * Returns true if the value is NaN.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is NaN, otherwise FALSE.\n */\nexport const isNaN = Number.isNaN;\n\n/**\n * Returns true if the value is a Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Node, otherwise FALSE.\n */\nexport const isNode = (value) =>\n !!value &&\n (\n value.nodeType === ELEMENT_NODE ||\n value.nodeType === TEXT_NODE ||\n value.nodeType === COMMENT_NODE\n );\n\n/**\n * Returns true if the value is null.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is null, otherwise FALSE.\n */\nexport const isNull = (value) =>\n value === null;\n\n/**\n * Returns true if the value is numeric.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is numeric, otherwise FALSE.\n */\nexport const isNumeric = (value) =>\n !isNaN(parseFloat(value)) &&\n isFinite(value);\n\n/**\n * Returns true if the value is an object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is an object, otherwise FALSE.\n */\nexport const isObject = (value) =>\n !!value &&\n value === Object(value);\n\n/**\n * Returns true if the value is a plain object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a plain object, otherwise FALSE.\n */\nexport const isPlainObject = (value) =>\n !!value &&\n value.constructor === Object;\n\n/**\n * Returns true if the value is a ShadowRoot.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a ShadowRoot, otherwise FALSE.\n */\nexport const isShadow = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !!value.host;\n\n/**\n * Returns true if the value is a string.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a string, otherwise FALSE.\n */\nexport const isString = (value) =>\n value === `${value}`;\n\n/**\n * Returns true if the value is a text Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a text Node, otherwise FALSE.\n */\nexport const isText = (value) =>\n !!value &&\n value.nodeType === TEXT_NODE;\n\n/**\n * Returns true if the value is undefined.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is undefined, otherwise FALSE.\n */\nexport const isUndefined = (value) =>\n value === undefined;\n\n/**\n * Returns true if the value is a Window.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a Window, otherwise FALSE.\n */\nexport const isWindow = (value) =>\n !!value &&\n !!value.document &&\n value.document.defaultView === value;\n","import { isNull } from './testing.js';\n\n/**\n * Math methods\n */\n\n/**\n * Clamp a value between a min and max.\n * @param {number} value The value to clamp.\n * @param {number} [min=0] The minimum value of the clamped range.\n * @param {number} [max=1] The maximum value of the clamped range.\n * @return {number} The clamped value.\n */\nexport const clamp = (value, min = 0, max = 1) =>\n Math.max(\n min,\n Math.min(\n max,\n value,\n ),\n );\n\n/**\n * Clamp a value between 0 and 100.\n * @param {number} value The value to clamp.\n * @return {number} The clamped value.\n */\nexport const clampPercent = (value) =>\n clamp(value, 0, 100);\n\n/**\n * Get the distance between two vectors.\n * @param {number} x1 The first vector X co-ordinate.\n * @param {number} y1 The first vector Y co-ordinate.\n * @param {number} x2 The second vector X co-ordinate.\n * @param {number} y2 The second vector Y co-ordinate.\n * @return {number} The distance between the vectors.\n */\nexport const dist = (x1, y1, x2, y2) =>\n len(\n x1 - x2,\n y1 - y2,\n );\n\n/**\n * Inverse linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} value The value to inverse interpolate.\n * @return {number} The interpolated amount.\n */\nexport const inverseLerp = (v1, v2, value) =>\n (value - v1) / (v2 - v1);\n\n/**\n * Get the length of an X,Y vector.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @returns {number} The length of the vector.\n */\nexport const len = Math.hypot;\n\n/**\n * Linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} amount The amount to interpolate.\n * @return {number} The interpolated value.\n */\nexport const lerp = (v1, v2, amount) =>\n v1 *\n (1 - amount) +\n v2 *\n amount;\n\n/**\n * Map a value from one range to another.\n * @param {number} value The value to map.\n * @param {number} fromMin The minimum value of the current range.\n * @param {number} fromMax The maximum value of the current range.\n * @param {number} toMin The minimum value of the target range.\n * @param {number} toMax The maximum value of the target range.\n * @return {number} The mapped value.\n */\nexport const map = (value, fromMin, fromMax, toMin, toMax) =>\n (value - fromMin) *\n (toMax - toMin) /\n (fromMax - fromMin) +\n toMin;\n\n/**\n * Return a random floating-point number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const random = (a = 1, b = null) =>\n isNull(b) ?\n Math.random() * a :\n map(\n Math.random(),\n 0,\n 1,\n a,\n b,\n );\n\n/**\n * Return a random number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const randomInt = (a = 1, b = null) =>\n random(a, b) | 0;\n\n/**\n * Constrain a number to a specified step-size.\n * @param {number} value The value to constrain.\n * @param {number} step The minimum step-size.\n * @return {number} The constrained value.\n */\nexport const toStep = (value, step = 0.01) =>\n parseFloat(\n (\n Math.round(value / step) *\n step\n ).toFixed(\n `${step}`.replace(/\\d*\\.?/, '').length,\n ),\n );\n","import { randomInt, toStep } from './math.js';\nimport { isArray, isArrayLike, isUndefined } from './testing.js';\n\n/**\n * Array methods\n */\n\n/**\n * Create a new array containing the values of the first array, that do not exist in any of the additional passed arrays.\n * @param {array} array The input array.\n * @param {...array} arrays The arrays to compare against.\n * @return {array} The output array.\n */\nexport const diff = (array, ...arrays) => {\n arrays = arrays.map(unique);\n return array.filter(\n (value) => !arrays\n .some((other) => other.includes(value)),\n );\n};\n\n/**\n * Create a new array containing the unique values that exist in all of the passed arrays.\n * @param {...array} arrays The input arrays.\n * @return {array} The output array.\n */\nexport const intersect = (...arrays) =>\n unique(\n arrays\n .reduce(\n (acc, array, index) => {\n array = unique(array);\n return merge(\n acc,\n array.filter(\n (value) =>\n arrays.every(\n (other, otherIndex) =>\n index == otherIndex ||\n other.includes(value),\n ),\n ),\n );\n },\n [],\n ),\n );\n\n/**\n * Merge the values from one or more arrays or array-like objects onto an array.\n * @param {array} array The input array.\n * @param {...array|object} arrays The arrays or array-like objects to merge.\n * @return {array} The output array.\n */\nexport const merge = (array = [], ...arrays) =>\n arrays.reduce(\n (acc, other) => {\n Array.prototype.push.apply(acc, other);\n return array;\n },\n array,\n );\n\n/**\n * Return a random value from an array.\n * @param {array} array The input array.\n * @return {*} A random value from the array, or null if it is empty.\n */\nexport const randomValue = (array) =>\n array.length ?\n array[randomInt(array.length)] :\n null;\n\n/**\n * Return an array containing a range of values.\n * @param {number} start The first value of the sequence.\n * @param {number} end The value to end the sequence on.\n * @param {number} [step=1] The increment between values in the sequence.\n * @return {number[]} The array of values from start to end.\n */\nexport const range = (start, end, step = 1) => {\n const sign = Math.sign(end - start);\n return new Array(\n (\n (\n Math.abs(end - start) /\n step\n ) +\n 1\n ) | 0,\n )\n .fill()\n .map(\n (_, i) =>\n start + toStep(\n (i * step * sign),\n step,\n ),\n );\n};\n\n/**\n * Remove duplicate elements in an array.\n * @param {array} array The input array.\n * @return {array} The filtered array.\n */\nexport const unique = (array) =>\n Array.from(\n new Set(array),\n );\n\n/**\n * Create an array from any value.\n * @param {*} value The input value.\n * @return {array} The wrapped array.\n */\nexport const wrap = (value) =>\n isUndefined(value) ?\n [] :\n (\n isArray(value) ?\n value :\n (\n isArrayLike(value) ?\n merge([], value) :\n [value]\n )\n );\n","import { isFunction, isUndefined } from './testing.js';\n\n/**\n * Function methods\n */\n\nconst isBrowser = typeof window !== 'undefined' && 'requestAnimationFrame' in window;\n\n/**\n * Execute a callback on the next animation frame\n * @param {function} callback Callback function to execute.\n * @return {number} The request ID.\n */\nconst _requestAnimationFrame = isBrowser ?\n (...args) => window.requestAnimationFrame(...args) :\n (callback) => setTimeout(callback, 1000 / 60);\n\n/**\n * Create a wrapped version of a function that executes at most once per animation frame\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the animation frame.\n * @return {function} The wrapped function.\n */\nexport const animation = (callback, { leading = false } = {}) => {\n let animationReference;\n let newArgs;\n let running;\n\n const animation = (...args) => {\n newArgs = args;\n\n if (running) {\n return;\n }\n\n if (leading) {\n callback(...newArgs);\n }\n\n running = true;\n animationReference = _requestAnimationFrame((_) => {\n if (!leading) {\n callback(...newArgs);\n }\n\n running = false;\n animationReference = null;\n });\n };\n\n animation.cancel = (_) => {\n if (!animationReference) {\n return;\n }\n\n if (isBrowser) {\n global.cancelAnimationFrame(animationReference);\n } else {\n clearTimeout(animationReference);\n }\n\n running = false;\n animationReference = null;\n };\n\n return animation;\n};\n\n/**\n * Create a wrapped function that will execute each callback in reverse order,\n * passing the result from each function to the previous.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const compose = (...callbacks) =>\n (arg) =>\n callbacks.reduceRight(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function, that will return new functions\n * until the number of total arguments passed reaches the arguments length\n * of the original function (at which point the function will execute).\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const curry = (callback) => {\n const curried = (...args) =>\n args.length >= callback.length ?\n callback(...args) :\n (...newArgs) =>\n curried(\n ...args.concat(newArgs),\n );\n\n return curried;\n};\n\n/**\n * Create a wrapped version of a function that executes once per wait period\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const debounce = (callback, wait = 0, { leading = false, trailing = true } = {}) => {\n let debounceReference;\n let lastRan;\n let newArgs;\n\n const debounced = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (!trailing) {\n return;\n }\n\n if (debounceReference) {\n clearTimeout(debounceReference);\n }\n\n debounceReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n debounceReference = null;\n },\n wait,\n );\n };\n\n debounced.cancel = (_) => {\n if (!debounceReference) {\n return;\n }\n\n clearTimeout(debounceReference);\n\n debounceReference = null;\n };\n\n return debounced;\n};\n\n/**\n * Evaluate a value from a function or value.\n * @param {*} value The value to evaluate.\n * @return {*} The evaluated value.\n */\nexport const evaluate = (value) =>\n isFunction(value) ?\n value() :\n value;\n\n/**\n * Create a wrapped version of a function that will only ever execute once.\n * Subsequent calls to the wrapped function will return the result of the initial call.\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const once = (callback) => {\n let ran;\n let result;\n\n return (...args) => {\n if (ran) {\n return result;\n }\n\n ran = true;\n result = callback(...args);\n return result;\n };\n};\n\n/**\n * Create a wrapped version of a function with predefined arguments.\n * @param {function} callback Callback function to execute.\n * @param {...*} [defaultArgs] Default arguments to pass to the function.\n * @return {function} The wrapped function.\n */\nexport const partial = (callback, ...defaultArgs) =>\n (...args) =>\n callback(\n ...(defaultArgs\n .slice()\n .map((v) =>\n isUndefined(v) ?\n args.shift() :\n v,\n ).concat(args)\n ),\n );\n\n/**\n * Create a wrapped function that will execute each callback in order,\n * passing the result from each function to the next.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const pipe = (...callbacks) =>\n (arg) =>\n callbacks.reduce(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function that executes at most once per wait period.\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=true] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const throttle = (callback, wait = 0, { leading = true, trailing = true } = {}) => {\n let throttleReference;\n let lastRan;\n let newArgs;\n let running;\n\n const throttled = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (running || !trailing) {\n return;\n }\n\n running = true;\n throttleReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n running = false;\n throttleReference = null;\n },\n delta === null ?\n wait :\n wait - delta,\n );\n };\n\n throttled.cancel = (_) => {\n if (!throttleReference) {\n return;\n }\n\n clearTimeout(throttleReference);\n\n running = false;\n throttleReference = null;\n };\n\n return throttled;\n};\n\n/**\n * Execute a function a specified number of times.\n * @param {function} callback Callback function to execute.\n * @param {number} amount The amount of times to execute the callback.\n */\nexport const times = (callback, amount) => {\n while (amount--) {\n if (callback() === false) {\n break;\n }\n }\n};\n","import { isArray, isObject, isPlainObject } from './testing.js';\n\n/**\n * Object methods\n */\n\n/**\n * Merge the values from one or more objects onto an object (recursively).\n * @param {object} object The input object.\n * @param {...object} objects The objects to merge.\n * @return {object} The output objects.\n */\nexport const extend = (object, ...objects) =>\n objects.reduce(\n (acc, val) => {\n for (const k in val) {\n if (isArray(val[k])) {\n acc[k] = extend(\n isArray(acc[k]) ?\n acc[k] :\n [],\n val[k],\n );\n } else if (isPlainObject(val[k])) {\n acc[k] = extend(\n isPlainObject(acc[k]) ?\n acc[k] :\n {},\n val[k],\n );\n } else {\n acc[k] = val[k];\n }\n }\n return acc;\n },\n object,\n );\n\n/**\n * Remove a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to remove from the object.\n */\nexport const forgetDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n break;\n }\n\n if (keys.length) {\n object = object[key];\n } else {\n delete object[key];\n }\n }\n};\n\n/**\n * Retrieve the value of a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to retrieve from the object.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {*} The value retrieved from the object.\n */\nexport const getDot = (object, key, defaultValue) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return defaultValue;\n }\n\n object = object[key];\n }\n\n return object;\n};\n\n/**\n * Returns true if a specified key exists in an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to test for in the object.\n * @return {Boolean} TRUE if the key exists, otherwise FALSE.\n */\nexport const hasDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return false;\n }\n\n object = object[key];\n }\n\n return true;\n};\n\n/**\n * Retrieve values of a specified key from an array of objects using dot notation.\n * @param {object[]} objects The input objects.\n * @param {string} key The key to retrieve from the objects.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {array} An array of values retrieved from the objects.\n */\nexport const pluckDot = (objects, key, defaultValue) =>\n objects\n .map((pointer) =>\n getDot(pointer, key, defaultValue),\n );\n\n/**\n * Set a specified value of a key for an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to set in the object.\n * @param {*} value The value to set.\n * @param {object} [options] The options for setting the value.\n * @param {Boolean} [options.overwrite=true] Whether to overwrite, if the key already exists.\n */\nexport const setDot = (object, key, value, { overwrite = true } = {}) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (key === '*') {\n for (const k in object) {\n if (!{}.hasOwnProperty.call(object, k)) {\n continue;\n }\n\n setDot(\n object,\n [k].concat(keys).join('.'),\n value,\n overwrite,\n );\n }\n return;\n }\n\n if (keys.length) {\n if (\n !isObject(object[key]) ||\n !(key in object)\n ) {\n object[key] = {};\n }\n\n object = object[key];\n } else if (\n overwrite ||\n !(key in object)\n ) {\n object[key] = value;\n }\n }\n};\n","import { random } from './math.js';\n\n// HTML escape characters\nconst escapeChars = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n};\n\nconst unescapeChars = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: '\\'',\n};\n\n/**\n * String methods\n */\n\n/**\n * Split a string into individual words.\n * @param {string} string The input string.\n * @return {string[]} The split parts of the string.\n */\nconst _splitString = (string) =>\n `${string}`\n .split(/[^a-zA-Z0-9']|(?=[A-Z])/)\n .reduce(\n (acc, word) => {\n word = word.replace(/[^\\w]/, '').toLowerCase();\n if (word) {\n acc.push(word);\n }\n return acc;\n },\n [],\n );\n\n/**\n * Convert a string to camelCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const camelCase = (string) =>\n _splitString(string)\n .map(\n (word, index) =>\n index ?\n capitalize(word) :\n word,\n )\n .join('');\n\n/**\n * Convert the first character of string to upper case and the remaining to lower case.\n * @param {string} string The input string.\n * @return {string} The capitalized string.\n */\nexport const capitalize = (string) =>\n string.charAt(0).toUpperCase() +\n string.substring(1).toLowerCase();\n\n/**\n * Convert HTML special characters in a string to their corresponding HTML entities.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escape = (string) =>\n string.replace(\n /[&<>\"']/g,\n (match) =>\n escapeChars[match],\n );\n\n/**\n * Escape RegExp special characters in a string.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escapeRegExp = (string) =>\n string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n/**\n * Convert a string to a humanized form.\n * @param {string} string The input string.\n * @return {string} The humanized string.\n */\nexport const humanize = (string) =>\n capitalize(\n _splitString(string)\n .join(' '),\n );\n\n/**\n * Convert a string to kebab-case.\n * @param {string} string The input string.\n * @return {string} The kebab-cased string.\n */\nexport const kebabCase = (string) =>\n _splitString(string)\n .join('-')\n .toLowerCase();\n\n/**\n * Convert a string to PascalCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const pascalCase = (string) =>\n _splitString(string)\n .map(\n (word) =>\n word.charAt(0).toUpperCase() +\n word.substring(1),\n )\n .join('');\n\n/**\n * Return a random string.\n * @param {number} [length=16] The length of the output string.\n * @param {string} [chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789] The characters to generate the string from.\n * @return {string} The random string.\n */\nexport const randomString = (length = 16, chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789') =>\n new Array(length)\n .fill()\n .map(\n (_) =>\n chars[random(chars.length) | 0],\n )\n .join('');\n\n/**\n * Convert a string to snake_case.\n * @param {string} string The input string.\n * @return {string} The snake_cased string.\n */\nexport const snakeCase = (string) =>\n _splitString(string)\n .join('_')\n .toLowerCase();\n\n/**\n * Convert HTML entities in a string to their corresponding characters.\n * @param {string} string The input string.\n * @return {string} The unescaped string.\n */\nexport const unescape = (string) =>\n string.replace(\n /&(amp|lt|gt|quot|apos);/g,\n (_, code) =>\n unescapeChars[code],\n );\n","import { extend, isDocument, isWindow } from '@fr0st/core';\n\n/**\n * DOM Config\n */\n\nconst ajaxDefaults = {\n afterSend: null,\n beforeSend: null,\n cache: true,\n contentType: 'application/x-www-form-urlencoded',\n data: null,\n headers: {},\n isLocal: null,\n method: 'GET',\n onProgress: null,\n onUploadProgress: null,\n processData: true,\n rejectOnCancel: true,\n responseType: null,\n url: null,\n xhr: (_) => new XMLHttpRequest,\n};\n\nconst animationDefaults = {\n duration: 1000,\n type: 'ease-in-out',\n infinite: false,\n debug: false,\n};\n\nexport const config = {\n ajaxDefaults,\n animationDefaults,\n context: null,\n useTimeout: false,\n window: null,\n};\n\n/**\n * Get the AJAX defaults.\n * @return {object} The AJAX defaults.\n */\nexport function getAjaxDefaults() {\n return ajaxDefaults;\n};\n\n/**\n * Get the animation defaults.\n * @return {object} The animation defaults.\n */\nexport function getAnimationDefaults() {\n return animationDefaults;\n};\n\n/**\n * Get the document context.\n * @return {Document} The document context.\n */\nexport function getContext() {\n return config.context;\n};\n\n/**\n * Get the window.\n * @return {Window} The window.\n */\nexport function getWindow() {\n return config.window;\n};\n\n/**\n * Set the AJAX defaults.\n * @param {object} options The ajax default options.\n */\nexport function setAjaxDefaults(options) {\n extend(ajaxDefaults, options);\n};\n\n/**\n * Set the animation defaults.\n * @param {object} options The animation default options.\n */\nexport function setAnimationDefaults(options) {\n extend(animationDefaults, options);\n};\n\n/**\n * Set the document context.\n * @param {Document} context The document context.\n */\nexport function setContext(context) {\n if (!isDocument(context)) {\n throw new Error('FrostDOM requires a valid Document.');\n }\n\n config.context = context;\n};\n\n/**\n * Set the window.\n * @param {Window} window The window.\n */\nexport function setWindow(window) {\n if (!isWindow(window)) {\n throw new Error('FrostDOM requires a valid Window.');\n }\n\n config.window = window;\n};\n\n/**\n * Set whether animations should use setTimeout.\n * @param {Boolean} [enable=true] Whether animations should use setTimeout.\n */\nexport function useTimeout(enable = true) {\n config.useTimeout = enable;\n};\n","import { escapeRegExp, isArray, isNumeric, isObject, isString, isUndefined } from '@fr0st/core';\n\n/**\n * DOM Helpers\n */\n\n/**\n * Create a wrapped version of a function that executes once per tick.\n * @param {function} callback Callback function to debounce.\n * @return {function} The wrapped function.\n */\nexport function debounce(callback) {\n let running;\n\n return (...args) => {\n if (running) {\n return;\n }\n\n running = true;\n\n Promise.resolve().then((_) => {\n callback(...args);\n running = false;\n });\n };\n};\n\n/**\n * Return a RegExp for testing a namespaced event.\n * @param {string} event The namespaced event.\n * @return {RegExp} The namespaced event RegExp.\n */\nexport function eventNamespacedRegExp(event) {\n return new RegExp(`^${escapeRegExp(event)}(?:\\\\.|$)`, 'i');\n};\n\n/**\n * Return a single dimensional array of classes (from a multi-dimensional array or space-separated strings).\n * @param {array} classList The classes to parse.\n * @return {string[]} The parsed classes.\n */\nexport function parseClasses(classList) {\n return classList\n .flat()\n .flatMap((val) => val.split(' '))\n .filter((val) => !!val);\n};\n\n/**\n * Return a data object from a key and value, or a data object.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @param {object} [options] The options for parsing data.\n * @param {Boolean} [options.json=false] Whether to JSON encode the values.\n * @return {object} The data object.\n */\nexport function parseData(key, value, { json = false } = {}) {\n const result = isString(key) ?\n { [key]: value } :\n key;\n\n if (!json) {\n return result;\n }\n\n return Object.fromEntries(\n Object.entries(result)\n .map(([key, value]) => [key, isObject(value) || isArray(value) ? JSON.stringify(value) : value]),\n );\n};\n\n/**\n * Return a JS primitive from a dataset string.\n * @param {string} value The input value.\n * @return {*} The parsed value.\n */\nexport function parseDataset(value) {\n if (isUndefined(value)) {\n return value;\n }\n\n const lower = value.toLowerCase().trim();\n\n if (['true', 'on'].includes(lower)) {\n return true;\n }\n\n if (['false', 'off'].includes(lower)) {\n return false;\n }\n\n if (lower === 'null') {\n return null;\n }\n\n if (isNumeric(lower)) {\n return parseFloat(lower);\n }\n\n if (['{', '['].includes(lower.charAt(0))) {\n try {\n const result = JSON.parse(value);\n return result;\n } catch (e) { }\n }\n\n return value;\n};\n\n/**\n * Return a \"real\" event from a namespaced event.\n * @param {string} event The namespaced event.\n * @return {string} The real event.\n */\nexport function parseEvent(event) {\n return event.split('.')\n .shift();\n};\n\n/**\n * Return an array of events from a space-separated string.\n * @param {string} events The events.\n * @return {array} The parsed events.\n */\nexport function parseEvents(events) {\n return events.split(' ');\n};\n","/**\n * DOM Variables\n */\n\nexport const CONTENT_BOX = 0;\nexport const PADDING_BOX = 1;\nexport const BORDER_BOX = 2;\nexport const MARGIN_BOX = 3;\nexport const SCROLL_BOX = 4;\n\nexport const allowedTags = {\n '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\\w-]*$/i],\n 'a': ['target', 'href', 'title', 'rel'],\n 'area': [],\n 'b': [],\n 'br': [],\n 'col': [],\n 'code': [],\n 'div': [],\n 'em': [],\n 'hr': [],\n 'h1': [],\n 'h2': [],\n 'h3': [],\n 'h4': [],\n 'h5': [],\n 'h6': [],\n 'i': [],\n 'img': ['src', 'alt', 'title', 'width', 'height'],\n 'li': [],\n 'ol': [],\n 'p': [],\n 'pre': [],\n 's': [],\n 'small': [],\n 'span': [],\n 'sub': [],\n 'sup': [],\n 'strong': [],\n 'u': [],\n 'ul': [],\n};\n\nexport const eventLookup = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend'],\n};\n\nexport const animations = new Map();\n\nexport const data = new WeakMap();\n\nexport const events = new WeakMap();\n\nexport const queues = new WeakMap();\n\nexport const styles = new WeakMap();\n","import { isArray, isObject, isUndefined } from '@fr0st/core';\nimport { getWindow } from './../config.js';\n\n/**\n * Ajax Helpers\n */\n\n/**\n * Append a query string to a URL.\n * @param {string} url The input URL.\n * @param {string} key The query string key.\n * @param {string} value The query string value.\n * @return {string} The new URL.\n */\nexport function appendQueryString(url, key, value) {\n const searchParams = getSearchParams(url);\n\n searchParams.append(key, value);\n\n return setSearchParams(url, searchParams);\n};\n\n/**\n * Get the URLSearchParams from a URL string.\n * @param {string} url The URL.\n * @return {URLSearchParams} The URLSearchParams.\n */\nexport function getSearchParams(url) {\n return getURL(url).searchParams;\n};\n\n/**\n * Get the URL from a URL string.\n * @param {string} url The URL.\n * @return {URL} The URL.\n */\nfunction getURL(url) {\n const window = getWindow();\n const baseHref = (window.location.origin + window.location.pathname).replace(/\\/$/, '');\n\n return new URL(url, baseHref);\n};\n\n/**\n * Return a FormData object from an array or object.\n * @param {array|object} data The input data.\n * @return {FormData} The FormData object.\n */\nexport function parseFormData(data) {\n const values = parseValues(data);\n\n const formData = new FormData;\n\n for (const [key, value] of values) {\n if (key.substring(key.length - 2) === '[]') {\n formData.append(key, value);\n } else {\n formData.set(key, value);\n }\n }\n\n return formData;\n};\n\n/**\n * Return a URI-encoded attribute string from an array or object.\n * @param {array|object} data The input data.\n * @return {string} The URI-encoded attribute string.\n */\nexport function parseParams(data) {\n const values = parseValues(data);\n\n const paramString = values\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n return encodeURI(paramString);\n};\n\n/**\n * Return an attributes array, or a flat array of attributes from a key and value.\n * @param {string} key The input key.\n * @param {array|object|string} [value] The input value.\n * @return {array} The parsed attributes.\n */\nfunction parseValue(key, value) {\n if (value === null || isUndefined(value)) {\n return [];\n }\n\n if (isArray(value)) {\n if (key.substring(key.length - 2) !== '[]') {\n key += '[]';\n }\n\n return value.flatMap((val) => parseValue(key, val));\n }\n\n if (isObject(value)) {\n return Object.entries(value)\n .flatMap(([subKey, val]) => parseValue(`${key}[${subKey}]`, val));\n }\n\n return [[key, value]];\n};\n\n/**\n * Return an attributes array from a data array or data object.\n * @param {array|object} data The input data.\n * @return {array} The parsed attributes.\n */\nfunction parseValues(data) {\n if (isArray(data)) {\n return data.flatMap((value) => parseValue(value.name, value.value));\n }\n\n if (isObject(data)) {\n return Object.entries(data)\n .flatMap(([key, value]) => parseValue(key, value));\n }\n\n return data;\n};\n\n/**\n * Set the URLSearchParams for a URL string.\n * @param {string} url The URL.\n * @param {URLSearchParams} searchParams The URLSearchParams.\n * @return {string} The new URL string.\n */\nexport function setSearchParams(url, searchParams) {\n const urlData = getURL(url);\n\n urlData.search = searchParams.toString();\n\n const newUrl = urlData.toString();\n\n const pos = newUrl.indexOf(url);\n return newUrl.substring(pos);\n};\n","import { extend, isObject } from '@fr0st/core';\nimport { appendQueryString, getSearchParams, parseFormData, parseParams, setSearchParams } from './helpers.js';\nimport { getAjaxDefaults, getWindow } from './../config.js';\n\n/**\n * AjaxRequest Class\n * @class\n */\nexport default class AjaxRequest {\n /**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n */\n constructor(options) {\n this._options = extend(\n {},\n getAjaxDefaults(),\n options,\n );\n\n if (!this._options.url) {\n this._options.url = getWindow().location.href;\n }\n\n if (!this._options.cache) {\n this._options.url = appendQueryString(this._options.url, '_', Date.now());\n }\n\n if (!('Content-Type' in this._options.headers) && this._options.contentType) {\n this._options.headers['Content-Type'] = this._options.contentType;\n }\n\n if (this._options.isLocal === null) {\n this._options.isLocal = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol);\n }\n\n if (!this._options.isLocal && !('X-Requested-With' in this._options.headers)) {\n this._options.headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = (value) => {\n this._isResolved = true;\n resolve(value);\n };\n\n this._reject = (error) => {\n this._isRejected = true;\n reject(error);\n };\n });\n\n this.xhr = this._options.xhr();\n\n if (this._options.data) {\n if (this._options.processData && isObject(this._options.data)) {\n if (this._options.contentType === 'application/json') {\n this._options.data = JSON.stringify(this._options.data);\n } else if (this._options.contentType === 'application/x-www-form-urlencoded') {\n this._options.data = parseParams(this._options.data);\n } else {\n this._options.data = parseFormData(this._options.data);\n }\n }\n\n if (this._options.method === 'GET') {\n const dataParams = new URLSearchParams(this._options.data);\n\n const searchParams = getSearchParams(this._options.url);\n for (const [key, value] of dataParams.entries()) {\n searchParams.append(key, value);\n }\n\n this._options.url = setSearchParams(this._options.url, searchParams);\n this._options.data = null;\n }\n }\n\n this.xhr.open(this._options.method, this._options.url, true, this._options.username, this._options.password);\n\n for (const [key, value] of Object.entries(this._options.headers)) {\n this.xhr.setRequestHeader(key, value);\n }\n\n if (this._options.responseType) {\n this.xhr.responseType = this._options.responseType;\n }\n\n if (this._options.mimeType) {\n this.xhr.overrideMimeType(this._options.mimeType);\n }\n\n if (this._options.timeout) {\n this.xhr.timeout = this._options.timeout;\n }\n\n this.xhr.onload = (e) => {\n if (this.xhr.status > 400) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n } else {\n this._resolve({\n response: this.xhr.response,\n xhr: this.xhr,\n event: e,\n });\n }\n };\n\n if (!this._options.isLocal) {\n this.xhr.onerror = (e) =>\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n }\n\n if (this._options.onProgress) {\n this.xhr.onprogress = (e) =>\n this._options.onProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.onUploadProgress) {\n this.xhr.upload.onprogress = (e) =>\n this._options.onUploadProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.beforeSend) {\n this._options.beforeSend(this.xhr);\n }\n\n this.xhr.send(this._options.data);\n\n if (this._options.afterSend) {\n this._options.afterSend(this.xhr);\n }\n }\n\n /**\n * Cancel a pending request.\n * @param {string} [reason=Request was cancelled] The reason for cancelling the request.\n */\n cancel(reason = 'Request was cancelled') {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n\n this.xhr.abort();\n\n this._isCancelled = true;\n\n if (this._options.rejectOnCancel) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n reason,\n });\n }\n }\n\n /**\n * Execute a callback if the request is rejected.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the request is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the request is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Execute a callback once the request is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the request is resolved.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AjaxRequest.prototype, Promise.prototype);\n","import AjaxRequest from './ajax-request.js';\n\n/**\n * DOM Ajax\n */\n\n/**\n * Perform an XHR DELETE request.\n * @param {string} url The URL of the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=DELETE] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function _delete(url, options) {\n return new AjaxRequest({\n url,\n method: 'DELETE',\n ...options,\n });\n};\n\n/**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function ajax(options) {\n return new AjaxRequest(options);\n};\n\n/**\n * Perform an XHR GET request.\n * @param {string} url The URL of the request.\n * @param {string|array|object} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function get(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n ...options,\n });\n};\n\n/**\n * Perform an XHR PATCH request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PATCH] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function patch(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PATCH',\n ...options,\n });\n};\n\n/**\n * Perform an XHR POST request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=POST] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function post(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'POST',\n ...options,\n });\n};\n\n/**\n * Perform an XHR PUT request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PUT] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function put(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PUT',\n ...options,\n });\n};\n","import { config, getWindow } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Helpers\n */\n\nlet animating = false;\n\n/**\n * Get the current time.\n * @return {number} The current time.\n */\nexport function getTime() {\n return document.timeline ?\n document.timeline.currentTime :\n performance.now();\n};\n\n/**\n * Start the animation loop (if not already started).\n */\nexport function start() {\n if (animating) {\n return;\n }\n\n animating = true;\n update();\n};\n\n/**\n * Run a single frame of all animations, and then queue up the next frame.\n */\nfunction update() {\n const time = getTime();\n\n for (const [node, currentAnimations] of animations) {\n const otherAnimations = currentAnimations.filter((animation) => !animation.update(time));\n\n if (!otherAnimations.length) {\n animations.delete(node);\n } else {\n animations.set(node, otherAnimations);\n }\n }\n\n if (!animations.size) {\n animating = false;\n } else if (config.useTimeout) {\n setTimeout(update, 1000 / 60);\n } else {\n getWindow().requestAnimationFrame(update);\n }\n};\n","import { clamp } from '@fr0st/core';\nimport { getTime } from './helpers.js';\nimport { getAnimationDefaults } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Class\n * @class\n */\nexport default class Animation {\n /**\n * New Animation constructor.\n * @param {HTMLElement} node The input node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for the animation.\n * @param {string} [options.type=ease-in-out] The type of animation\n * @param {number} [options.duration=1000] The duration the animation should last.\n * @param {Boolean} [options.infinite] Whether to repeat the animation.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n */\n constructor(node, callback, options) {\n this._node = node;\n this._callback = callback;\n\n this._options = {\n ...getAnimationDefaults(),\n ...options,\n };\n\n if (!('start' in this._options)) {\n this._options.start = getTime();\n }\n\n if (this._options.debug) {\n this._node.dataset.animationStart = this._options.start;\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n if (!animations.has(node)) {\n animations.set(node, []);\n }\n\n animations.get(node).push(this);\n }\n\n /**\n * Execute a callback if the animation is rejected.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Clone the animation to a new node.\n * @param {HTMLElement} node The input node.\n * @return {Animation} The cloned Animation.\n */\n clone(node) {\n return new Animation(node, this._callback, this._options);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animation.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animation.\n */\n stop({ finish = true } = {}) {\n if (this._isStopped || this._isFinished) {\n return;\n }\n\n const otherAnimations = animations.get(this._node)\n .filter((animation) => animation !== this);\n\n if (!otherAnimations.length) {\n animations.delete(this._node);\n } else {\n animations.set(this._node, otherAnimations);\n }\n\n if (finish) {\n this.update();\n }\n\n this._isStopped = true;\n\n if (!finish) {\n this._reject(this._node);\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n\n /**\n * Run a single frame of the animation.\n * @param {number} [time] The current time.\n * @return {Boolean} TRUE if the animation is finished, otherwise FALSE.\n */\n update(time = null) {\n if (this._isStopped) {\n return true;\n }\n\n let progress;\n\n if (time === null) {\n progress = 1;\n } else {\n progress = (time - this._options.start) / this._options.duration;\n\n if (this._options.infinite) {\n progress %= 1;\n } else {\n progress = clamp(progress);\n }\n\n if (this._options.type === 'ease-in') {\n progress = progress ** 2;\n } else if (this._options.type === 'ease-out') {\n progress = Math.sqrt(progress);\n } else if (this._options.type === 'ease-in-out') {\n if (progress <= 0.5) {\n progress = progress ** 2 * 2;\n } else {\n progress = 1 - ((1 - progress) ** 2 * 2);\n }\n }\n }\n\n if (this._options.debug) {\n this._node.dataset.animationTime = time;\n this._node.dataset.animationProgress = progress;\n }\n\n this._callback(this._node, progress, this._options);\n\n if (progress < 1) {\n return false;\n }\n\n if (this._options.debug) {\n delete this._node.dataset.animationStart;\n delete this._node.dataset.animationTime;\n delete this._node.dataset.animationProgress;\n }\n\n if (!this._isFinished) {\n this._isFinished = true;\n\n this._resolve(this._node);\n }\n\n return true;\n }\n}\n\nObject.setPrototypeOf(Animation.prototype, Promise.prototype);\n","/**\n* AnimationSet Class\n* @class\n*/\nexport default class AnimationSet {\n /**\n * New AnimationSet constructor.\n * @param {array} animations The animations.\n */\n constructor(animations) {\n this._animations = animations;\n this._promise = Promise.all(animations);\n }\n\n /**\n * Execute a callback if any of the animations is rejected.\n * @param {function} [onRejected] The callback to execute if an animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animations.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animations.\n */\n stop({ finish = true } = {}) {\n for (const animation of this._animations) {\n animation.stop({ finish });\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AnimationSet.prototype, Promise.prototype);\n","import { camelCase, isNumeric, kebabCase, wrap } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNode } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\n\n/**\n * DOM Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {string|array|HTMLElement|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for attaching the shadow DOM.\n * @param {Boolean} [options.open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {ShadowRoot} The new ShadowRoot.\n */\nexport function attachShadow(selector, { open = true } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.attachShadow({\n mode: open ?\n 'open' :\n 'closed',\n });\n};\n\n/**\n * Create a new DOM element.\n * @param {string} [tagName=div] The type of HTML element to create.\n * @param {object} [options] The options to use for creating the element.\n * @param {string} [options.html] The HTML contents.\n * @param {string} [options.text] The text contents.\n * @param {string|array} [options.class] The classes.\n * @param {object} [options.style] An object containing style properties.\n * @param {string} [options.value] The value.\n * @param {object} [options.attributes] An object containing attributes.\n * @param {object} [options.properties] An object containing properties.\n * @param {object} [options.dataset] An object containing dataset values.\n * @return {HTMLElement} The new HTMLElement.\n */\nexport function create(tagName = 'div', options = {}) {\n const node = getContext().createElement(tagName);\n\n if ('html' in options) {\n node.innerHTML = options.html;\n } else if ('text' in options) {\n node.textContent = options.text;\n }\n\n if ('class' in options) {\n const classes = parseClasses(wrap(options.class));\n\n node.classList.add(...classes);\n }\n\n if ('style' in options) {\n for (let [style, value] of Object.entries(options.style)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n node.style.setProperty(style, value);\n }\n }\n\n if ('value' in options) {\n node.value = options.value;\n }\n\n if ('attributes' in options) {\n for (const [key, value] of Object.entries(options.attributes)) {\n node.setAttribute(key, value);\n }\n }\n\n if ('properties' in options) {\n for (const [key, value] of Object.entries(options.properties)) {\n node[key] = value;\n }\n }\n\n if ('dataset' in options) {\n const dataset = parseData(options.dataset, null, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n node.dataset[key] = value;\n }\n }\n\n return node;\n};\n\n/**\n * Create a new comment node.\n * @param {string} comment The comment contents.\n * @return {Node} The new comment node.\n */\nexport function createComment(comment) {\n return getContext().createComment(comment);\n};\n\n/**\n * Create a new document fragment.\n * @return {DocumentFragment} The new DocumentFragment.\n */\nexport function createFragment() {\n return getContext().createDocumentFragment();\n};\n\n/**\n * Create a new range object.\n * @return {Range} The new Range.\n */\nexport function createRange() {\n return getContext().createRange();\n};\n\n/**\n * Create a new text node.\n * @param {string} text The text contents.\n * @return {Node} The new text node.\n */\nexport function createText(text) {\n return getContext().createTextNode(text);\n};\n","\nimport { merge } from '@fr0st/core';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Parser\n */\n\nconst parser = new DOMParser();\n\n/**\n * Create a Document object from a string.\n * @param {string} input The input string.\n * @param {object} [options] The options for parsing the string.\n * @param {string} [options.contentType=text/html] The content type.\n * @return {Document} A new Document object.\n */\nexport function parseDocument(input, { contentType = 'text/html' } = {}) {\n return parser.parseFromString(input, contentType);\n};\n\n/**\n * Create an Array containing nodes parsed from a HTML string.\n * @param {string} html The HTML input string.\n * @return {array} An array of nodes.\n */\nexport function parseHTML(html) {\n const childNodes = createRange()\n .createContextualFragment(html)\n .children;\n\n return merge([], childNodes);\n};\n","/**\n * QuerySet Class\n * @class\n */\nexport default class QuerySet {\n /**\n * New DOM constructor.\n * @param {array} nodes The input nodes.\n */\n constructor(nodes = []) {\n this._nodes = nodes;\n }\n\n /**\n * Get the number of nodes.\n * @return {number} The number of nodes.\n */\n get length() {\n return this._nodes.length;\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} The QuerySet object.\n */\n each(callback) {\n this._nodes.forEach(\n (v, i) => callback(v, i),\n );\n\n return this;\n }\n\n /**\n * Retrieve the DOM node(s) contained in the QuerySet.\n * @param {number} [index=null] The index of the node.\n * @return {array|Node|Document|Window} The node(s).\n */\n get(index = null) {\n if (index === null) {\n return this._nodes;\n }\n\n return index < 0 ?\n this._nodes[index + this._nodes.length] :\n this._nodes[index];\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} A new QuerySet object.\n */\n map(callback) {\n const nodes = this._nodes.map(callback);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Reduce the set of matched nodes to a subset specified by a range of indices.\n * @param {number} [begin] The index to slice from.\n * @param {number} [end] The index to slice to.\n * @return {QuerySet} A new QuerySet object.\n */\n slice(begin, end) {\n const nodes = this._nodes.slice(begin, end);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Return an iterable from the nodes.\n * @return {ArrayIterator} The iterator object.\n */\n [Symbol.iterator]() {\n return this._nodes.values();\n }\n}\n","import { isDocument, isElement, isFragment, isShadow, merge, unique } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Find\n */\n\n/**\n * Return all nodes matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function find(selector, context = getContext()) {\n if (!selector) {\n return [];\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findByClass(match[2], context);\n }\n\n return findByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(selector));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(selector);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByClassName(className));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`.${className}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(`.${className}`) :\n node.getElementsByClassName(className);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findById(id, context = getContext()) {\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`#${id}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(`#${id}`);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByTagName(tagName));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(tagName));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(tagName) :\n node.getElementsByTagName(tagName);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a single node matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOne(selector, context = getContext()) {\n if (!selector) {\n return null;\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findOneById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findOneByClass(match[2], context);\n }\n\n return findOneByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(selector);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = node.querySelector(selector);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByClassName(className).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(`.${className}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(`.${className}`) :\n node.getElementsByClassName(className).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching element.\n */\nexport function findOneById(id, context = getContext()) {\n if (isDocument(context)) {\n return context.getElementById(id);\n }\n\n if (isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(`#${id}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isDocument(node) ?\n node.getElementById(id) :\n node.querySelector(`#${id}`);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByTagName(tagName).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(tagName);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(tagName) :\n node.getElementsByTagName(tagName).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n","import { isArray, isDocument, isElement, isFragment, isFunction, isNode, isShadow, isString, isWindow, merge, unique } from '@fr0st/core';\nimport { getContext } from './config.js';\nimport { parseHTML } from './parser/parser.js';\nimport QuerySet from './query/query-set.js';\nimport { find, findOne } from './traversal/find.js';\n\n/**\n * DOM Filters\n */\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNode(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes).shift();\n }\n\n return findOne(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return nodes;\n }\n\n if (nodes instanceof QuerySet) {\n const node = nodes.get(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n const node = nodes.item(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n};\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNodes(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes);\n }\n\n return find(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return [nodes];\n }\n\n if (nodes instanceof QuerySet) {\n return nodes.get().filter(nodeFilter);\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n return merge([], nodes).filter(nodeFilter);\n }\n\n return [];\n};\n\n/**\n * Return a node filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node filter callback.\n */\nexport function parseFilter(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return filter;\n }\n\n if (isString(filter)) {\n return (node) => isElement(node) && node.matches(filter);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.isSameNode(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.includes(node);\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return a node contains filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node contains filter callback.\n */\nexport function parseFilterContains(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return (node) => merge([], node.querySelectorAll('*')).some(filter);\n }\n\n if (isString(filter)) {\n return (node) => !!findOne(filter, node);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.contains(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.some((other) => node.contains(other));\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|Document} [options.context=getContext()] The Document context.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window} The matching node.\n */\nexport function parseNode(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNode(nodes, options.context || getContext(), filter, options);\n }\n\n for (const node of nodes) {\n const result = _parseNode(node, options.context || getContext(), filter, options);\n\n if (result) {\n return result;\n }\n }\n};\n\n/**\n * Return a filtered array of nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|DocumentFragment|ShadowRoot|Document} [options.context=getContext()] The Document context.\n * @return {array} The filtered array of nodes.\n */\nexport function parseNodes(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNodes(nodes, options.context || getContext(), filter, options);\n }\n\n const results = nodes.flatMap((node) => _parseNodes(node, options.context || getContext(), filter, options));\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a function for filtering nodes.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @return {DOM~nodeCallback} The node filter function.\n */\nfunction parseNodesFilter(options) {\n if (!options) {\n return isElement;\n }\n\n const callbacks = [];\n\n if (options.node) {\n callbacks.push(isNode);\n } else {\n callbacks.push(isElement);\n }\n\n if (options.document) {\n callbacks.push(isDocument);\n }\n\n if (options.window) {\n callbacks.push(isWindow);\n }\n\n if (options.fragment) {\n callbacks.push(isFragment);\n }\n\n if (options.shadow) {\n callbacks.push(isShadow);\n }\n\n return (node) => callbacks.some((callback) => callback(node));\n};\n","import Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\nimport { animations } from './../vars.js';\n\n/**\n * DOM Animate\n */\n\n/**\n * Add an animation to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function animate(selector, callback, options) {\n const nodes = parseNodes(selector);\n\n const newAnimations = nodes.map((node) => new Animation(node, callback, options));\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Stop all animations for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n */\nexport function stop(selector, { finish = true } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!animations.has(node)) {\n continue;\n }\n\n const currentAnimations = animations.get(node);\n for (const animation of currentAnimations) {\n animation.stop({ finish });\n }\n }\n};\n","import { evaluate } from '@fr0st/core';\nimport { animate } from './animate.js';\nimport Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Animations\n */\n\n/**\n * Drop each node into place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropIn(selector, options) {\n return slideIn(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Drop each node out of place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropOut(selector, options) {\n return slideOut(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Fade the opacity of each node in.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeIn(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n progress.toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Fade the opacity of each node out.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeOut(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n (1 - progress).toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Rotate each node in on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((90 - (progress * 90)) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Rotate each node out on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((progress * 90) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = ((size - (size * progress)) * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = (size * progress * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Squeeze each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeIn(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size * progress).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Squeeze each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeOut(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size - (size * progress)).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n","import { isDocument, isElement, isFragment, isShadow, isWindow, merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { parseParams } from './../ajax/helpers.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Execute a command in the document context.\n * @param {string} command The command to execute.\n * @param {string} [value] The value to give the command.\n * @return {Boolean} TRUE if the command was executed, otherwise FALSE.\n */\nexport function exec(command, value = null) {\n return getContext().execCommand(command, false, value);\n};\n\n/**\n * Get the index of the first node relative to it's parent.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The index.\n */\nexport function index(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (!node || !node.parentNode) {\n return;\n }\n\n return merge([], node.parentNode.children).indexOf(node);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).findIndex(nodeFilter);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function normalize(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n node.normalize();\n }\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The serialized string.\n */\nexport function serialize(selector) {\n return parseParams(\n serializeArray(selector),\n );\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The serialized array.\n */\nexport function serializeArray(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n }).reduce(\n (values, node) => {\n if (\n (isElement(node) && node.matches('form')) ||\n isFragment(node) ||\n isShadow(node)\n ) {\n return values.concat(\n serializeArray(\n node.querySelectorAll(\n 'input, select, textarea',\n ),\n ),\n );\n }\n\n if (\n isElement(node) &&\n node.matches('[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)')\n ) {\n return values;\n }\n\n const name = node.getAttribute('name');\n if (!name) {\n return values;\n }\n\n if (\n isElement(node) &&\n node.matches('select[multiple]')\n ) {\n for (const option of node.selectedOptions) {\n values.push(\n {\n name,\n value: option.value || '',\n },\n );\n }\n } else {\n values.push(\n {\n name,\n value: node.value || '',\n },\n );\n }\n\n return values;\n },\n [],\n );\n}\n\n/**\n * Sort nodes by their position in the document.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The sorted array of nodes.\n */\nexport function sort(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).sort((node, other) => {\n if (isWindow(node)) {\n return 1;\n }\n\n if (isWindow(other)) {\n return -1;\n }\n\n if (isDocument(node)) {\n return 1;\n }\n\n if (isDocument(other)) {\n return -1;\n }\n\n if (isFragment(other)) {\n return 1;\n }\n\n if (isFragment(node)) {\n return -1;\n }\n\n if (isShadow(node)) {\n node = node.host;\n }\n\n if (isShadow(other)) {\n other = other.host;\n }\n\n if (node.isSameNode(other)) {\n return 0;\n }\n\n const pos = node.compareDocumentPosition(other);\n\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING || pos & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n\n if (pos & Node.DOCUMENT_POSITION_PRECEDING || pos & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n\n return 0;\n });\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.tagName.toLowerCase();\n};\n","import { isDocument, isElement, merge, unique } from '@fr0st/core';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\nimport { sort } from './../utility/utility.js';\n\n/**\n * DOM Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function child(selector, nodeFilter) {\n return children(selector, nodeFilter, { first: true });\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.first=false] Whether to only return the first matching node for each node.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function children(selector, nodeFilter, { first = false, elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const childNodes = elementsOnly ?\n merge([], node.children) :\n merge([], node.childNodes);\n\n for (const child of childNodes) {\n if (!nodeFilter(child)) {\n continue;\n }\n\n results.push(child);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function closest(selector, nodeFilter, limitFilter) {\n return parents(selector, nodeFilter, limitFilter, { first: true });\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The common ancestor.\n */\nexport function commonAncestor(selector) {\n const nodes = sort(selector);\n\n if (!nodes.length) {\n return;\n }\n\n // Make sure all nodes have a parent\n if (nodes.some((node) => !node.parentNode)) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length === 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n return range.commonAncestorContainer;\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function contents(selector) {\n return children(selector, false, { elementsOnly: false });\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {DocumentFragment} The DocumentFragment.\n */\nexport function fragment(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.content;\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function next(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function nextAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The offset parent.\n */\nexport function offsetParent(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.offsetParent;\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function parent(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n node = node.parentNode;\n\n if (!node) {\n continue;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function parents(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const parents = [];\n while (node = node.parentNode) {\n if (isDocument(node)) {\n break;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n parents.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...parents);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function prev(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function prevAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const siblings = [];\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n siblings.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...siblings);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {ShadowRoot} The ShadowRoot.\n */\nexport function shadow(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.shadowRoot;\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function siblings(selector, nodeFilter, { elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const siblings = elementsOnly ?\n parent.children :\n parent.childNodes;\n\n let sibling;\n for (sibling of siblings) {\n if (node.isSameNode(sibling)) {\n continue;\n }\n\n if (!nodeFilter(sibling)) {\n continue;\n }\n\n results.push(sibling);\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n","import { merge } from '@fr0st/core';\nimport { addEvent, removeEvent } from './event-handlers.js';\nimport { debounce as _debounce } from './../helpers.js';\nimport { closest } from './../traversal/traversal.js';\nimport { eventLookup } from './../vars.js';\n\n/**\n * DOM Event Factory\n */\n\n/**\n * Return a function for matching a delegate target to a custom selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateContainsFactory(node, selector) {\n return (target) => {\n const matches = merge([], node.querySelectorAll(selector));\n\n if (!matches.length) {\n return false;\n }\n\n if (matches.includes(target)) {\n return target;\n }\n\n return closest(\n target,\n (parent) => matches.includes(parent),\n (parent) => parent.isSameNode(node),\n ).shift();\n };\n};\n\n/**\n * Return a function for matching a delegate target to a standard selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateMatchFactory(node, selector) {\n return (target) =>\n target.matches && target.matches(selector) ?\n target :\n closest(\n target,\n (parent) => parent.matches(selector),\n (parent) => parent.isSameNode(node),\n ).shift();\n};\n\n/**\n * Return a wrapped event callback that executes on a delegate selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The delegated event callback.\n */\nexport function delegateFactory(node, selector, callback) {\n const getDelegate = selector.match(/(?:^\\s*\\:scope|\\,(?=(?:(?:[^\"']*[\"']){2})*[^\"']*$)\\s*\\:scope)/) ?\n getDelegateContainsFactory(node, selector) :\n getDelegateMatchFactory(node, selector);\n\n return (event) => {\n if (node.isSameNode(event.target)) {\n return;\n }\n\n const delegate = getDelegate(event.target);\n\n if (!delegate) {\n return;\n }\n\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n enumerable: true,\n value: delegate,\n });\n Object.defineProperty(event, 'delegateTarget', {\n configurable: true,\n enumerable: true,\n value: node,\n });\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that cleans up delegate events.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The cleaned event callback.\n */\nexport function delegateFactoryClean(node, callback) {\n return (event) => {\n if (!event.delegateTarget) {\n return callback(event);\n }\n\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n enumerable: true,\n value: node,\n });\n Object.defineProperty(event, 'delegateTarget', {\n writable: true,\n });\n\n delete event.delegateTarget;\n\n return callback(event);\n };\n}\n\n/**\n * Return a wrapped mouse drag event (optionally debounced).\n * @param {DOM~eventCallback} down The callback to execute on mousedown.\n * @param {DOM~eventCallback} move The callback to execute on mousemove.\n * @param {DOM~eventCallback} up The callback to execute on mouseup.\n * @param {object} [options] The options for the mouse drag event.\n * @param {Boolean} [options.debounce=true] Whether to debounce the move event.\n * @param {Boolean} [options.passive=true] Whether to use passive event listeners.\n * @param {Boolean} [options.preventDefault=true] Whether to prevent the default event.\n * @param {number} [options.touches=1] The number of touches to trigger the event for.\n * @return {DOM~eventCallback} The mouse drag event callback.\n */\nexport function mouseDragFactory(down, move, up, { debounce = true, passive = true, preventDefault = true, touches = 1 } = {}) {\n if (move && debounce) {\n move = _debounce(move);\n\n // needed to make sure up callback executes after final move callback\n if (up) {\n up = _debounce(up);\n }\n }\n\n return (event) => {\n const isTouch = event.type === 'touchstart';\n\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (down && down(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (!move && !up) {\n return;\n }\n\n const [moveEvent, upEvent] = event.type in eventLookup ?\n eventLookup[event.type] :\n eventLookup.mousedown;\n\n const realMove = (event) => {\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (preventDefault && !passive) {\n event.preventDefault();\n }\n\n if (!move) {\n return;\n }\n\n move(event);\n };\n\n const realUp = (event) => {\n if (isTouch && event.touches.length !== touches - 1) {\n return;\n }\n\n if (up && up(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n removeEvent(window, moveEvent, realMove);\n removeEvent(window, upEvent, realUp);\n };\n\n addEvent(window, moveEvent, realMove, { passive });\n addEvent(window, upEvent, realUp);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a namespace match.\n * @param {string} eventName The namespaced event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function namespaceFactory(eventName, callback) {\n return (event) => {\n if ('namespaceRegExp' in event && !event.namespaceRegExp.test(eventName)) {\n return;\n }\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a return false for preventing default.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function preventFactory(callback) {\n return (event) => {\n if (callback(event) === false) {\n event.preventDefault();\n }\n };\n};\n\n/**\n * Return a wrapped event callback that removes itself after execution.\n * @param {HTMLElement|ShadowRoot|Document|Window} node The input node.\n * @param {string} eventName The event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [optoins.delegate] The delegate selector.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function selfDestructFactory(node, eventName, callback, { capture = null, delegate = null } = {}) {\n return (event) => {\n removeEvent(node, eventName, callback, { capture, delegate });\n return callback(event);\n };\n};\n","import { delegateFactory, delegateFactoryClean, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js';\nimport { events } from './../vars.js';\n\n/**\n * DOM Event Handlers\n */\n\n/**\n * Add events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} eventNames The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @param {Boolean} [options.selfDestruct] Whether to use a self-destructing event.\n */\nexport function addEvent(selector, eventNames, callback, { capture = false, delegate = null, passive = false, selfDestruct = false } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n eventNames = parseEvents(eventNames);\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n const eventData = {\n callback,\n delegate,\n selfDestruct,\n capture,\n passive,\n };\n\n for (const node of nodes) {\n if (!events.has(node)) {\n events.set(node, {});\n }\n\n const nodeEvents = events.get(node);\n\n let realCallback = callback;\n\n if (selfDestruct) {\n realCallback = selfDestructFactory(node, eventName, realCallback, { capture, delegate });\n }\n\n realCallback = preventFactory(realCallback);\n\n if (delegate) {\n realCallback = delegateFactory(node, delegate, realCallback);\n } else {\n realCallback = delegateFactoryClean(node, realCallback);\n }\n\n realCallback = namespaceFactory(eventName, realCallback);\n\n eventData.realCallback = realCallback;\n eventData.eventName = eventName;\n eventData.realEventName = realEventName;\n\n if (!nodeEvents[realEventName]) {\n nodeEvents[realEventName] = [];\n }\n\n nodeEvents[realEventName].push({ ...eventData });\n\n node.addEventListener(realEventName, realCallback, { capture, passive });\n }\n }\n};\n\n/**\n * Add delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegate(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive });\n};\n\n/**\n * Add self-destructing delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegateOnce(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive, selfDestruct: true });\n};\n\n/**\n * Add self-destructing events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventOnce(selector, events, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, passive, selfDestruct: true });\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneEvents(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n const nodeEvents = events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n otherSelector,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n passive: eventData.passive,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n};\n\n/**\n * Remove events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [eventNames] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n */\nexport function removeEvent(selector, eventNames, callback, { capture = null, delegate = null } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n let eventLookup;\n if (eventNames) {\n eventNames = parseEvents(eventNames);\n\n eventLookup = {};\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n if (!(realEventName in eventLookup)) {\n eventLookup[realEventName] = [];\n }\n\n eventLookup[realEventName].push(eventName);\n }\n }\n\n for (const node of nodes) {\n if (!events.has(node)) {\n continue;\n }\n\n const nodeEvents = events.get(node);\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n if (eventLookup && !(realEventName in eventLookup)) {\n continue;\n }\n\n const otherEvents = realEvents.filter((eventData) => {\n if (eventLookup && !eventLookup[realEventName].some((eventName) => {\n if (eventName === realEventName) {\n return true;\n }\n\n const regExp = eventNamespacedRegExp(eventName);\n\n return eventData.eventName.match(regExp);\n })) {\n return true;\n }\n\n if (callback && callback !== eventData.callback) {\n return true;\n }\n\n if (delegate && delegate !== eventData.delegate) {\n return true;\n }\n\n if (capture !== null && capture !== eventData.capture) {\n return true;\n }\n\n node.removeEventListener(realEventName, eventData.realCallback, eventData.capture);\n\n return false;\n });\n\n if (!otherEvents.length) {\n delete nodeEvents[realEventName];\n }\n }\n\n if (!Object.keys(nodeEvents).length) {\n events.delete(node);\n }\n }\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n */\nexport function removeEventDelegate(selector, events, delegate, callback, { capture = null } = {}) {\n removeEvent(selector, events, callback, { capture, delegate });\n};\n\n/**\n * Trigger events on each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n */\nexport function triggerEvent(selector, events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n events = parseEvents(events);\n\n for (const event of events) {\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n for (const node of nodes) {\n node.dispatchEvent(eventData);\n }\n }\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(selector, event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const node = parseNode(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n return node.dispatchEvent(eventData);\n};\n","import { isElement, isFragment, isNode, isShadow, merge } from '@fr0st/core';\nimport { createFragment } from './create.js';\nimport { parseNodes } from './../filters.js';\nimport { animations as _animations, data as _data, events as _events, queues, styles } from './../vars.js';\nimport { addEvent } from './../events/event-handlers.js';\n\n/**\n * DOM Manipulation\n */\n\n/**\n * Clone each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {array} The cloned nodes.\n */\nexport function clone(selector, { deep = true, events = false, data = false, animations = false } = {}) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n });\n\n return nodes.map((node) => {\n const clone = node.cloneNode(deep);\n\n if (events || data || animations) {\n deepClone(node, clone, { deep, events, data, animations });\n }\n\n return clone;\n });\n};\n\n/**\n * Deep clone a single node.\n * @param {Node|HTMLElement|DocumentFragment} node The node.\n * @param {Node|HTMLElement|DocumentFragment} clone The clone.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n */\nfunction deepClone(node, clone, { deep = true, events = false, data = false, animations = false } = {}) {\n if (events && _events.has(node)) {\n const nodeEvents = _events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n clone,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n\n if (data && _data.has(node)) {\n const nodeData = _data.get(node);\n _data.set(clone, { ...nodeData });\n }\n\n if (animations && _animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n\n for (const animation of nodeAnimations) {\n animation.clone(clone);\n }\n }\n\n if (deep) {\n for (const [i, child] of node.childNodes.entries()) {\n const childClone = clone.childNodes.item(i);\n deepClone(child, childClone, { deep, events, data, animations });\n }\n }\n};\n\n/**\n * Detach each node from the DOM.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The detached nodes.\n */\nexport function detach(selector) {\n // DocumentFragment and ShadowRoot nodes can not be detached\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n for (const node of nodes) {\n node.remove();\n }\n\n return nodes;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function empty(selector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n const childNodes = merge([], node.childNodes);\n\n // Remove descendent elements\n for (const child of childNodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(child);\n }\n\n child.remove();\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n }\n};\n\n/**\n * Remove each node from the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function remove(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n for (const node of nodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(node);\n }\n\n // DocumentFragment and ShadowRoot nodes can not be removed\n if (isNode(node)) {\n node.remove();\n }\n }\n};\n\n/**\n * Remove all data for a single node.\n * @param {Node|HTMLElement|DocumentFragment|ShadowRoot} node The node.\n */\nexport function removeNode(node) {\n if (_events.has(node)) {\n const nodeEvents = _events.get(node);\n\n if ('remove' in nodeEvents) {\n const eventData = new CustomEvent('remove', {\n bubbles: false,\n cancelable: false,\n });\n\n node.dispatchEvent(eventData);\n }\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n for (const eventData of realEvents) {\n node.removeEventListener(realEventName, eventData.realCallback, { capture: eventData.capture });\n }\n }\n\n _events.delete(node);\n }\n\n if (queues.has(node)) {\n queues.delete(node);\n }\n\n if (_animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n for (const animation of nodeAnimations) {\n animation.stop();\n }\n }\n\n if (styles.has(node)) {\n styles.delete(node);\n }\n\n if (_data.has(node)) {\n _data.delete(node);\n }\n\n // Remove descendent elements\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n */\nexport function replaceAll(selector, otherSelector) {\n replaceWith(otherSelector, selector);\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n */\nexport function replaceWith(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be removed\n let nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n let others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n // Move nodes to a fragment so they don't get removed\n const fragment = createFragment();\n\n for (const other of others) {\n fragment.insertBefore(other, null);\n }\n\n others = merge([], fragment.childNodes);\n\n nodes = nodes.filter((node) =>\n !others.includes(node) &&\n !nodes.some((other) =>\n !other.isSameNode(node) &&\n other.contains(node),\n ),\n );\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n\n remove(nodes);\n};\n","import { camelCase, merge } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseData, parseDataset } from './../helpers.js';\nimport { removeNode } from './../manipulation/manipulation.js';\n\n/**\n * DOM Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [attribute] The attribute name.\n * @return {string|object} The attribute value, or an object containing attributes.\n */\nexport function getAttribute(selector, attribute) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (attribute) {\n return node.getAttribute(attribute);\n }\n\n return Object.fromEntries(\n merge([], node.attributes)\n .map((attribute) => [attribute.nodeName, attribute.nodeValue]),\n );\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(selector, key) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (key) {\n key = camelCase(key);\n\n return parseDataset(node.dataset[key]);\n }\n\n return Object.fromEntries(\n Object.entries(node.dataset)\n .map(([key, value]) => [key, parseDataset(value)]),\n );\n};\n\n/**\n * Get the HTML contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The HTML contents.\n */\nexport function getHTML(selector) {\n return getProperty(selector, 'innerHTML');\n};\n\n/**\n * Get a property value for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(selector, property) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node[property];\n};\n\n/**\n * Get the text contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The text contents.\n */\nexport function getText(selector) {\n return getProperty(selector, 'textContent');\n};\n\n/**\n * Get the value property of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The value.\n */\nexport function getValue(selector) {\n return getProperty(selector, 'value');\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n */\nexport function removeAttribute(selector, attribute) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.removeAttribute(attribute);\n }\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} key The dataset key.\n */\nexport function removeDataset(selector, key) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n key = camelCase(key);\n\n delete node.dataset[key];\n }\n};\n\n/**\n * Remove a property from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n */\nexport function removeProperty(selector, property) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n delete node[property];\n }\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n */\nexport function setAttribute(selector, attribute, value) {\n const nodes = parseNodes(selector);\n\n const attributes = parseData(attribute, value);\n\n for (const [key, value] of Object.entries(attributes)) {\n for (const node of nodes) {\n node.setAttribute(key, value);\n }\n }\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n */\nexport function setDataset(selector, key, value) {\n const nodes = parseNodes(selector);\n\n const dataset = parseData(key, value, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n for (const node of nodes) {\n node.dataset[key] = value;\n }\n }\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} html The HTML contents.\n */\nexport function setHTML(selector, html) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.innerHTML = html;\n }\n};\n\n/**\n * Set a property value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n */\nexport function setProperty(selector, property, value) {\n const nodes = parseNodes(selector);\n\n const properties = parseData(property, value);\n\n for (const [key, value] of Object.entries(properties)) {\n for (const node of nodes) {\n node[key] = value;\n }\n }\n};\n\n/**\n * Set the text contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} text The text contents.\n */\nexport function setText(selector, text) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.textContent = text;\n }\n};\n\n/**\n * Set the value property of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} value The value.\n */\nexport function setValue(selector, value) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.value = value;\n }\n};\n","import { parseNode, parseNodes } from './../filters.js';\nimport { parseData } from './../helpers.js';\nimport { data } from './../vars.js';\n\n/**\n * DOM Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneData(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const others = parseNodes(otherSelector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n setData(others, { ...nodeData });\n }\n};\n\n/**\n * Get custom data for the first node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(selector, key) {\n const node = parseNode(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n if (!node || !data.has(node)) {\n return;\n }\n\n const nodeData = data.get(node);\n\n return key ?\n nodeData[key] :\n nodeData;\n};\n\n/**\n * Remove custom data from each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n */\nexport function removeData(selector, key) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n\n if (key) {\n delete nodeData[key];\n }\n\n if (!key || !Object.keys(nodeData).length) {\n data.delete(node);\n }\n }\n};\n\n/**\n * Set custom data for each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n */\nexport function setData(selector, key, value) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const newData = parseData(key, value);\n\n for (const node of nodes) {\n if (!data.has(node)) {\n data.set(node, {});\n }\n\n const nodeData = data.get(node);\n\n Object.assign(nodeData, newData);\n }\n};\n","import { isNumeric, kebabCase } from '@fr0st/core';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\nimport { styles } from './../vars.js';\n\n/**\n * DOM Styles\n */\n\n/**\n * Add classes to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function addClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.add(...classes);\n }\n};\n\n/**\n * Get computed CSS style value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (!styles.has(node)) {\n styles.set(\n node,\n getWindow().getComputedStyle(node),\n );\n }\n\n const nodeStyles = styles.get(node);\n\n if (!style) {\n return { ...nodeStyles };\n }\n\n style = kebabCase(style);\n\n return nodeStyles.getPropertyValue(style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (style) {\n style = kebabCase(style);\n\n return node.style[style];\n }\n\n const styles = {};\n\n for (const style of node.style) {\n styles[style] = node.style[style];\n }\n\n return styles;\n};\n\n/**\n * Hide each node from display.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function hide(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', 'none');\n }\n};\n\n/**\n * Remove classes from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function removeClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.remove(...classes);\n }\n};\n\n/**\n * Set style properties for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n */\nexport function setStyle(selector, style, value, { important = false } = {}) {\n const nodes = parseNodes(selector);\n\n const styles = parseData(style, value);\n\n for (let [style, value] of Object.entries(styles)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n for (const node of nodes) {\n node.style.setProperty(\n style,\n value,\n important ?\n 'important' :\n '',\n );\n }\n }\n};\n\n/**\n * Display each hidden node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function show(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', '');\n }\n};\n\n/**\n * Toggle the visibility of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function toggle(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty(\n 'display',\n node.style.display === 'none' ?\n '' :\n 'none',\n );\n }\n};\n\n/**\n * Toggle classes for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function toggleClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n for (const className of classes) {\n node.classList.toggle(className);\n }\n }\n};\n","import { clampPercent, dist } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { getContext, getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center(selector, { offset = false } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n return {\n x: nodeBox.left + nodeBox.width / 2,\n y: nodeBox.top + nodeBox.height / 2,\n };\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} containerSelector The container node, or a query selector string.\n */\nexport function constrain(selector, containerSelector) {\n const containerBox = rect(containerSelector);\n\n if (!containerBox) {\n return;\n }\n\n const nodes = parseNodes(selector);\n\n const context = getContext();\n const window = getWindow();\n const getScrollX = (_) => context.documentElement.scrollHeight > window.outerHeight;\n const getScrollY = (_) => context.documentElement.scrollWidth > window.outerWidth;\n\n const preScrollX = getScrollX();\n const preScrollY = getScrollY();\n\n for (const node of nodes) {\n const nodeBox = rect(node);\n\n if (nodeBox.height > containerBox.height) {\n node.style.setProperty('height', `${containerBox.height}px`);\n }\n\n if (nodeBox.width > containerBox.width) {\n node.style.setProperty('width', `${containerBox.width}px`);\n }\n\n let leftOffset;\n if (nodeBox.left - containerBox.left < 0) {\n leftOffset = nodeBox.left - containerBox.left;\n } else if (nodeBox.right - containerBox.right > 0) {\n leftOffset = nodeBox.right - containerBox.right;\n }\n\n if (leftOffset) {\n const oldLeft = css(node, 'left');\n const trueLeft = oldLeft && oldLeft !== 'auto' ? parseFloat(oldLeft) : 0;\n node.style.setProperty('left', `${trueLeft - leftOffset}px`);\n }\n\n let topOffset;\n if (nodeBox.top - containerBox.top < 0) {\n topOffset = nodeBox.top - containerBox.top;\n } else if (nodeBox.bottom - containerBox.bottom > 0) {\n topOffset = nodeBox.bottom - containerBox.bottom;\n }\n\n if (topOffset) {\n const oldTop = css(node, 'top');\n const trueTop = oldTop && oldTop !== 'auto' ? parseFloat(oldTop) : 0;\n node.style.setProperty('top', `${trueTop - topOffset}px`);\n }\n\n if (css(node, 'position') === 'static') {\n node.style.setProperty('position', 'relative');\n }\n }\n\n const postScrollX = getScrollX();\n const postScrollY = getScrollY();\n\n if (preScrollX !== postScrollX || preScrollY !== postScrollY) {\n constrain(nodes, containerSelector);\n }\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the element.\n */\nexport function distTo(selector, x, y, { offset = false } = {}) {\n const nodeCenter = center(selector, { offset });\n\n if (!nodeCenter) {\n return;\n }\n\n return dist(nodeCenter.x, nodeCenter.y, x, y);\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return distTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestTo(selector, x, y, { offset = false } = {}) {\n let closest;\n let closestDistance = Number.MAX_VALUE;\n\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const dist = distTo(node, x, y, { offset });\n if (dist && dist < closestDistance) {\n closestDistance = dist;\n closest = node;\n }\n }\n\n return closest;\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return nearestTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(selector, x, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (x - nodeBox.left) /\n nodeBox.width *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(selector, y, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (y - nodeBox.top) /\n nodeBox.height *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the X and Y co-ordinates.\n */\nexport function position(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = {\n x: node.offsetLeft,\n y: node.offsetTop,\n };\n\n if (offset) {\n let offsetParent = node;\n\n while (offsetParent = offsetParent.offsetParent) {\n result.x += offsetParent.offsetLeft;\n result.y += offsetParent.offsetTop;\n }\n }\n\n return result;\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = node.getBoundingClientRect();\n\n if (offset) {\n const window = getWindow();\n result.x += window.scrollX;\n result.y += window.scrollY;\n }\n\n return result;\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll X position.\n */\nexport function getScrollX(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollX;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollLeft;\n }\n\n return node.scrollLeft;\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollY;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollTop;\n }\n\n return node.scrollTop;\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n */\nexport function setScroll(selector, x, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n }\n};\n\n/**\n * Scroll each node to an X position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n */\nexport function setScrollX(selector, x) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, node.scrollY);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n } else {\n node.scrollLeft = x;\n }\n }\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The scroll Y position.\n */\nexport function setScrollY(selector, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(node.scrollX, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollTop = y;\n }\n }\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { parseNode } from './../filters.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './../vars.js';\n\n/**\n * DOM Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerHeight :\n node.innerHeight;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollHeight;\n }\n\n let result = node.clientHeight;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-top'));\n result -= parseInt(css(node, 'padding-bottom'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-top-width'));\n result += parseInt(css(node, 'border-bottom-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-top'));\n result += parseInt(css(node, 'margin-bottom'));\n }\n\n return result;\n};\n\n/**\n * Get the computed width of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerWidth :\n node.innerWidth;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollWidth;\n }\n\n let result = node.clientWidth;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-left'));\n result -= parseInt(css(node, 'padding-right'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-left-width'));\n result += parseInt(css(node, 'border-right-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-left'));\n result += parseInt(css(node, 'margin-right'));\n }\n\n return result;\n};\n","import { getContext } from './../config.js';\n\n/**\n * DOM Cookie\n */\n\n/**\n * Get a cookie value.\n * @param {string} name The cookie name.\n * @return {*} The cookie value.\n */\nexport function getCookie(name) {\n const cookie = getContext().cookie\n .split(';')\n .find((cookie) =>\n cookie\n .trimStart()\n .substring(0, name.length) === name,\n )\n .trimStart();\n\n if (!cookie) {\n return null;\n }\n\n return decodeURIComponent(\n cookie.substring(name.length + 1),\n );\n};\n\n/**\n * Remove a cookie.\n * @param {string} name The cookie name.\n * @param {object} [options] The options to use for the cookie.\n * @param {string} [options.path] The cookie path.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function removeCookie(name, { path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n\n/**\n * Set a cookie value.\n * @param {string} name The cookie name.\n * @param {*} value The cookie value.\n * @param {object} [options] The options to use for the cookie.\n * @param {number} [options.expires] The number of seconds until the cookie will expire.\n * @param {string} [options.path] The path to use for the cookie.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function setCookie(name, value, { expires = null, path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=${value}`;\n\n if (expires) {\n const date = new Date;\n date.setTime(\n date.getTime() +\n expires * 1000,\n );\n cookie += `;expires=${date.toUTCString()}`;\n }\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n","import { getContext, getWindow } from './../config.js';\nimport { parseNode } from './../filters.js';\n\n/**\n * DOM Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function blur(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.blur();\n};\n\n/**\n * Trigger a click event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function click(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.click();\n};\n\n/**\n * Trigger a focus event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function focus(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.focus();\n};\n\n/**\n * Add a function to the ready queue.\n * @param {DOM~eventCallback} callback The callback to execute.\n */\nexport function ready(callback) {\n if (getContext().readyState === 'complete') {\n callback();\n } else {\n getWindow().addEventListener('DOMContentLoaded', callback, { once: true });\n }\n};\n","import { clone } from './manipulation.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Move\n */\n\n/**\n * Insert each other node after each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function after(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node.nextSibling);\n }\n }\n};\n\n/**\n * Append each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function append(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n }\n};\n\n/**\n * Append each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function appendTo(selector, otherSelector) {\n append(otherSelector, selector);\n};\n\n/**\n * Insert each other node before each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function before(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n};\n\n/**\n * Insert each node after each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertAfter(selector, otherSelector) {\n after(otherSelector, selector);\n};\n\n/**\n * Insert each node before each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertBefore(selector, otherSelector) {\n before(otherSelector, selector);\n};\n\n/**\n * Prepend each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function prepend(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const firstChild = node.firstChild;\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, firstChild);\n }\n }\n};\n\n/**\n * Prepend each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function prependTo(selector, otherSelector) {\n prepend(otherSelector, selector);\n};\n","import { isFragment, merge } from '@fr0st/core';\nimport { clone, remove } from './manipulation.js';\nimport { parseFilter, parseNodes } from './../filters.js';\n\n/**\n * DOM Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n */\nexport function unwrap(selector, nodeFilter) {\n // DocumentFragment and ShadowRoot nodes can not be unwrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n nodeFilter = parseFilter(nodeFilter);\n\n const parents = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n if (parents.includes(parent)) {\n continue;\n }\n\n if (!nodeFilter(parent)) {\n continue;\n }\n\n parents.push(parent);\n }\n\n for (const parent of parents) {\n const outerParent = parent.parentNode;\n\n if (!outerParent) {\n continue;\n }\n\n const children = merge([], parent.childNodes);\n\n for (const child of children) {\n outerParent.insertBefore(child, parent);\n }\n }\n\n remove(parents);\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrap(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapAll(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstNode = nodes[0];\n\n if (!firstNode) {\n return;\n }\n\n const parent = firstNode.parentNode;\n\n if (!parent) {\n return;\n }\n\n const firstClone = clones[0];\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, firstNode);\n }\n\n for (const node of nodes) {\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapInner(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const children = merge([], node.childNodes);\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n\n for (const child of children) {\n deepest.insertBefore(child, null);\n }\n }\n};\n","import { animate as _animate, stop as _stop } from './../../animation/animate.js';\n\n/**\n * QuerySet Animate\n */\n\n/**\n * Add an animation to the queue for each node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function animate(callback, { queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _animate(node, callback, options),\n { queueName },\n );\n};\n\n/**\n * Stop all animations and clear the queue of each node.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n * @return {QuerySet} The QuerySet object.\n */\nexport function stop({ finish = true } = {}) {\n this.clearQueue();\n _stop(this, { finish });\n\n return this;\n};\n","import { dropIn as _dropIn, dropOut as _dropOut, fadeIn as _fadeIn, fadeOut as _fadeOut, rotateIn as _rotateIn, rotateOut as _rotateOut, slideIn as _slideIn, slideOut as _slideOut, squeezeIn as _squeezeIn, squeezeOut as _squeezeOut } from './../../animation/animations.js';\n\n/**\n * QuerySet Animations\n */\n\n/**\n * Add a drop in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a drop out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeOut(node, options),\n { queueName },\n );\n};\n","import { getAttribute as _getAttribute, getDataset as _getDataset, getHTML as _getHTML, getProperty as _getProperty, getText as _getText, getValue as _getValue, removeAttribute as _removeAttribute, removeDataset as _removeDataset, removeProperty as _removeProperty, setAttribute as _setAttribute, setDataset as _setDataset, setHTML as _setHTML, setProperty as _setProperty, setText as _setText, setValue as _setValue } from './../../attributes/attributes.js';\n\n/**\n * QuerySet Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string} [attribute] The attribute name.\n * @return {string} The attribute value.\n */\nexport function getAttribute(attribute) {\n return _getAttribute(this, attribute);\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(key) {\n return _getDataset(this, key);\n};\n\n/**\n * Get the HTML contents of the first node.\n * @return {string} The HTML contents.\n */\nexport function getHTML() {\n return _getHTML(this);\n};\n\n/**\n * Get a property value for the first node.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(property) {\n return _getProperty(this, property);\n};\n\n/**\n * Get the text contents of the first node.\n * @return {string} The text contents.\n */\nexport function getText() {\n return _getText(this);\n};\n\n/**\n * Get the value property of the first node.\n * @return {string} The value.\n */\nexport function getValue() {\n return _getValue(this);\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeAttribute(attribute) {\n _removeAttribute(this, attribute);\n\n return this;\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string} key The dataset key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeDataset(key) {\n _removeDataset(this, key);\n\n return this;\n};\n\n/**\n * Remove a property from each node.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeProperty(property) {\n _removeProperty(this, property);\n\n return this;\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setAttribute(attribute, value) {\n _setAttribute(this, attribute, value);\n\n return this;\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setDataset(key, value) {\n _setDataset(this, key, value);\n\n return this;\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string} html The HTML contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setHTML(html) {\n _setHTML(this, html);\n\n return this;\n};\n\n/**\n * Set a property value for each node.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setProperty(property, value) {\n _setProperty(this, property, value);\n\n return this;\n};\n\n/**\n * Set the text contents of each node.\n * @param {string} text The text contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setText(text) {\n _setText(this, text);\n\n return this;\n};\n\n/**\n * Set the value property of each node.\n * @param {string} value The value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setValue(value) {\n _setValue(this, value);\n\n return this;\n};\n","import { cloneData as _cloneData, getData as _getData, removeData as _removeData, setData as _setData } from './../../attributes/data.js';\n\n/**\n * QuerySet Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneData(otherSelector) {\n _cloneData(this, otherSelector);\n\n return this;\n};\n\n/**\n * Get custom data for the first node.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(key) {\n return _getData(this, key);\n};\n\n/**\n * Remove custom data from each node.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeData(key) {\n _removeData(this, key);\n\n return this;\n};\n\n/**\n * Set custom data for each node.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setData(key, value) {\n _setData(this, key, value);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { center as _center, constrain as _constrain, distTo as _distTo, distToNode as _distToNode, nearestTo as _nearestTo, nearestToNode as _nearestToNode, percentX as _percentX, percentY as _percentY, position as _position, rect as _rect } from './../../attributes/position.js';\n\n/**\n * QuerySet Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center({ offset = false } = {}) {\n return _center(this, { offset });\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} container The container node, or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function constrain(container) {\n _constrain(this, container);\n\n return this;\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the node.\n */\nexport function distTo(x, y, { offset = false } = {}) {\n return _distTo(this, x, y, { offset });\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(otherSelector) {\n return _distToNode(this, otherSelector);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestTo(x, y, { offset = false } = {}) {\n const node = _nearestTo(this, x, y, { offset });\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestToNode(otherSelector) {\n const node = _nearestToNode(this, otherSelector);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(x, { offset = false, clamp = true } = {}) {\n return _percentX(this, x, { offset, clamp });\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(y, { offset = false, clamp = true } = {}) {\n return _percentY(this, y, { offset, clamp });\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function position({ offset = false } = {}) {\n return _position(this, { offset });\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect({ offset = false } = {}) {\n return _rect(this, { offset });\n};\n","import { getScrollX as _getScrollX, getScrollY as _getScrollY, setScroll as _setScroll, setScrollX as _setScrollX, setScrollY as _setScrollY } from './../../attributes/scroll.js';\n\n/**\n * QuerySet Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @return {number} The scroll X position.\n */\nexport function getScrollX() {\n return _getScrollX(this);\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY() {\n return _getScrollY(this);\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScroll(x, y) {\n _setScroll(this, x, y);\n\n return this;\n};\n\n/**\n * Scroll each node to an X position.\n * @param {number} x The scroll X position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollX(x) {\n _setScrollX(this, x);\n\n return this;\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollY(y) {\n _setScrollY(this, y);\n\n return this;\n};\n","\nimport { PADDING_BOX } from './../../vars.js';\nimport { height as _height, width as _width } from './../../attributes/size.js';\n\n/**\n * QuerySet Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _height(this, { boxSize, outer });\n};\n\n/**\n * Get the computed width of the first node.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _width(this, { boxSize, outer });\n};\n","import { addClass as _addClass, css as _css, getStyle as _getStyle, hide as _hide, removeClass as _removeClass, setStyle as _setStyle, show as _show, toggle as _toggle, toggleClass as _toggleClass } from './../../attributes/styles.js';\n\n/**\n * QuerySet Styles\n */\n\n/**\n * Add classes to each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addClass(...classes) {\n _addClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Get computed CSS style values for the first node.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(style) {\n return _css(this, style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(style) {\n return _getStyle(this, style);\n};\n\n/**\n * Hide each node from display.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hide() {\n _hide(this);\n\n return this;\n};\n\n/**\n * Remove classes from each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeClass(...classes) {\n _removeClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Set style properties for each node.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setStyle(style, value, { important = false } = {}) {\n _setStyle(this, style, value, { important });\n\n return this;\n};\n\n/**\n * Display each hidden node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function show() {\n _show(this);\n\n return this;\n};\n\n/**\n * Toggle the visibility of each node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggle() {\n _toggle(this);\n\n return this;\n};\n\n/**\n * Toggle classes for each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggleClass(...classes) {\n _toggleClass(this, ...classes);\n\n return this;\n};\n","import { addEvent as _addEvent, addEventDelegate as _addEventDelegate, addEventDelegateOnce as _addEventDelegateOnce, addEventOnce as _addEventOnce, cloneEvents as _cloneEvents, removeEvent as _removeEvent, removeEventDelegate as _removeEventDelegate, triggerEvent as _triggerEvent, triggerOne as _triggerOne } from './../../events/event-handlers.js';\n\n/**\n * QuerySet Event Handlers\n */\n\n/**\n * Add an event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEvent(events, callback, { capture = false, passive = false } = {}) {\n _addEvent(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegate(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegate(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegateOnce(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegateOnce(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventOnce(events, callback, { capture = false, passive = false } = {}) {\n _addEventOnce(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneEvents(otherSelector) {\n _cloneEvents(this, otherSelector);\n\n return this;\n};\n\n/**\n * Remove events from each node.\n * @param {string} [events] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEvent(events, callback, { capture = null } = {}) {\n _removeEvent(this, events, callback, { capture });\n\n return this;\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEventDelegate(events, delegate, callback, { capture = null } = {}) {\n _removeEventDelegate(this, events, delegate, callback, { capture });\n\n return this;\n};\n\n/**\n * Trigger events on each node.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {QuerySet} The QuerySet object.\n */\nexport function triggerEvent(events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n _triggerEvent(this, events, { data, detail, bubbles, cancelable });\n\n return this;\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n return _triggerOne(this, event, { data, detail, bubbles, cancelable });\n};\n","import { blur as _blur, click as _click, focus as _focus } from './../../events/events.js';\n\n/**\n * QuerySet Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function blur() {\n _blur(this);\n\n return this;\n};\n\n/**\n * Trigger a click event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function click() {\n _click(this);\n\n return this;\n};\n\n/**\n * Trigger a focus event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function focus() {\n _focus(this);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { attachShadow as _attachShadow } from './../../manipulation/create.js';\n\n/**\n * QuerySet Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {Boolean} [open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function attachShadow({ open = true } = {}) {\n const shadow = _attachShadow(this, { open });\n\n return new QuerySet(shadow ? [shadow] : []);\n}\n","import QuerySet from './../query-set.js';\nimport { clone as _clone, detach as _detach, empty as _empty, remove as _remove, replaceAll as _replaceAll, replaceWith as _replaceWith } from './../../manipulation/manipulation.js';\n\n/**\n * QuerySet Manipulation\n */\n\n/**\n * Clone each node.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function clone(options) {\n const clones = _clone(this, options);\n\n return new QuerySet(clones);\n};\n\n/**\n * Detach each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function detach() {\n _detach(this);\n\n return this;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function empty() {\n _empty(this);\n\n return this;\n};\n\n/**\n * Remove each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function remove() {\n _remove(this);\n\n return this;\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceAll(otherSelector) {\n _replaceAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceWith(otherSelector) {\n _replaceWith(this, otherSelector);\n\n return this;\n};\n","import { after as _after, append as _append, appendTo as _appendTo, before as _before, insertAfter as _insertAfter, insertBefore as _insertBefore, prepend as _prepend, prependTo as _prependTo } from './../../manipulation/move.js';\n\n/**\n * QuerySet Move\n */\n\n/**\n * Insert each other node after the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function after(otherSelector) {\n _after(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function append(otherSelector) {\n _append(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function appendTo(otherSelector) {\n _appendTo(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each other node before the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function before(otherSelector) {\n _before(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node after the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertAfter(otherSelector) {\n _insertAfter(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node before the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertBefore(otherSelector) {\n _insertBefore(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prepend(otherSelector) {\n _prepend(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prependTo(otherSelector) {\n _prependTo(this, otherSelector);\n\n return this;\n};\n","import { unwrap as _unwrap, wrap as _wrap, wrapAll as _wrapAll, wrapInner as _wrapInner } from './../../manipulation/wrap.js';\n\n/**\n * QuerySet Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function unwrap(nodeFilter) {\n _unwrap(this, nodeFilter);\n\n return this;\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrap(otherSelector) {\n _wrap(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapAll(otherSelector) {\n _wrapAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapInner(otherSelector) {\n _wrapInner(this, otherSelector);\n\n return this;\n};\n","import { parseNodes } from './../filters.js';\nimport { queues } from './../vars.js';\n\n/**\n * DOM Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName] The name of the queue to use.\n */\nexport function clearQueue(selector, { queueName = null } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n continue;\n }\n\n const queue = queues.get(node);\n\n if (queueName) {\n delete queue[queueName];\n }\n\n if (!queueName || !Object.keys(queue).length) {\n queues.delete(node);\n }\n }\n};\n\n/**\n * Run the next callback for a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nfunction dequeue(node, { queueName = 'default' } = {}) {\n const queue = queues.get(node);\n\n if (!queue || !(queueName in queue)) {\n return;\n }\n\n const next = queue[queueName].shift();\n\n if (!next) {\n queues.delete(node);\n return;\n }\n\n Promise.resolve(next(node))\n .then((_) => {\n dequeue(node, { queueName });\n }).catch((_) => {\n queues.delete(node);\n });\n};\n\n/**\n * Queue a callback on each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nexport function queue(selector, callback, { queueName = 'default' } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n queues.set(node, {});\n }\n\n const queue = queues.get(node);\n const runningQueue = queueName in queue;\n\n if (!runningQueue) {\n queue[queueName] = [\n (_) => new Promise((resolve) => {\n setTimeout(resolve, 1);\n }),\n ];\n }\n\n queue[queueName].push(callback);\n\n if (!runningQueue) {\n dequeue(node, { queueName });\n }\n }\n};\n","import { clearQueue as _clearQueue, queue as _queue } from './../../queue/queue.js';\n\n/**\n * QuerySet Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to clear.\n * @return {QuerySet} The QuerySet object.\n */\nexport function clearQueue({ queueName = 'default' } = {}) {\n _clearQueue(this, { queueName });\n\n return this;\n};\n\n/**\n * Delay execution of subsequent items in the queue for each node.\n * @param {number} duration The number of milliseconds to delay execution by.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function delay(duration, { queueName = 'default' } = {}) {\n return this.queue((_) =>\n new Promise((resolve) =>\n setTimeout(resolve, duration),\n ),\n { queueName },\n );\n};\n\n/**\n * Queue a callback on each node.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function queue(callback, { queueName = 'default' } = {}) {\n _queue(this, callback, { queueName });\n\n return this;\n};\n","import { isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function connected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) => node.isConnected);\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function equal(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isEqualNode(other),\n ),\n );\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function filter(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function filterOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find(nodeFilter) || null;\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function fixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).filter((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Return all hidden nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function hidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function not(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node, index) => !nodeFilter(node, index));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function notOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find((node, index) => !nodeFilter(node, index)) || null;\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function same(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isSameNode(other),\n ),\n );\n};\n\n/**\n * Return all visible nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function visible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n\n/**\n * Return all nodes with an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n animations.has(node),\n );\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {array} The filtered nodes.\n */\nexport function withAttribute(selector, attribute) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasAttribute(attribute),\n );\n};\n\n/**\n * Return all nodes with child elements.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter((node) =>\n !!node.childElementCount,\n );\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {array} The filtered nodes.\n */\nexport function withClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .filter((node) =>\n classes.some((className) =>\n node.classList.contains(className),\n ),\n );\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSTransition(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {array} The filtered nodes.\n */\nexport function withData(selector, key) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Return all nodes with a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function withDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {array} The filtered nodes.\n */\nexport function withProperty(selector, property) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasOwnProperty(property),\n );\n};\n","import QuerySet from './../query-set.js';\nimport { connected as _connected, equal as _equal, filter as _filter, filterOne as _filterOne, fixed as _fixed, hidden as _hidden, not as _not, notOne as _notOne, same as _same, visible as _visible, withAnimation as _withAnimation, withAttribute as _withAttribute, withChildren as _withChildren, withClass as _withClass, withCSSAnimation as _withCSSAnimation, withCSSTransition as _withCSSTransition, withData as _withData, withDescendent as _withDescendent, withProperty as _withProperty } from './../../traversal/filter.js';\n\n/**\n * QuerySet Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function connected() {\n return new QuerySet(_connected(this));\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function equal(otherSelector) {\n return new QuerySet(_equal(this, otherSelector));\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filter(nodeFilter) {\n return new QuerySet(_filter(this, nodeFilter));\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filterOne(nodeFilter) {\n const node = _filterOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fixed() {\n return new QuerySet(_fixed(this));\n};\n\n/**\n * Return all hidden nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hidden() {\n return new QuerySet(_hidden(this));\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function not(nodeFilter) {\n return new QuerySet(_not(this, nodeFilter));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function notOne(nodeFilter) {\n const node = _notOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function same(otherSelector) {\n return new QuerySet(_same(this, otherSelector));\n};\n\n/**\n * Return all visible nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function visible() {\n return new QuerySet(_visible(this));\n};\n\n/**\n * Return all nodes with an animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withAnimation() {\n return new QuerySet(_withAnimation(this));\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withAttribute(attribute) {\n return new QuerySet(_withAttribute(this, attribute));\n};\n\n/**\n * Return all nodes with child elements.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withChildren() {\n return new QuerySet(_withChildren(this));\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withClass(classes) {\n return new QuerySet(_withClass(this, classes));\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withCSSAnimation() {\n return new QuerySet(_withCSSAnimation(this));\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withCSSTransition() {\n return new QuerySet(_withCSSTransition(this));\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withData(key) {\n return new QuerySet(_withData(this, key));\n};\n\n/**\n * Return all elements with a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withDescendent(nodeFilter) {\n return new QuerySet(_withDescendent(this, nodeFilter));\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withProperty(property) {\n return new QuerySet(_withProperty(this, property));\n};\n","import QuerySet from './../query-set.js';\nimport { find as _find, findByClass as _findByClass, findById as _findById, findByTag as _findByTag, findOne as _findOne, findOneByClass as _findOneByClass, findOneById as _findOneById, findOneByTag as _findOneByTag } from './../../traversal/find.js';\n\n/**\n * QuerySet Find\n */\n\n/**\n * Return all descendent nodes matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function find(selector) {\n return new QuerySet(_find(selector, this));\n};\n\n/**\n * Return all descendent nodes with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByClass(className) {\n return new QuerySet(_findByClass(className, this));\n};\n\n/**\n * Return all descendent nodes with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findById(id) {\n return new QuerySet(_findById(id, this));\n};\n\n/**\n * Return all descendent nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByTag(tagName) {\n return new QuerySet(_findByTag(tagName, this));\n};\n\n/**\n * Return a single descendent node matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOne(selector) {\n const node = _findOne(selector, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByClass(className) {\n const node = _findOneByClass(className, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneById(id) {\n const node = _findOneById(id, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByTag(tagName) {\n const node = _findOneByTag(tagName, this);\n\n return new QuerySet(node ? [node] : []);\n};\n","import QuerySet from './../query-set.js';\nimport { child as _child, children as _children, closest as _closest, commonAncestor as _commonAncestor, contents as _contents, fragment as _fragment, next as _next, nextAll as _nextAll, offsetParent as _offsetParent, parent as _parent, parents as _parents, prev as _prev, prevAll as _prevAll, shadow as _shadow, siblings as _siblings } from './../../traversal/traversal.js';\n\n/**\n * QuerySet Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function child(nodeFilter) {\n return new QuerySet(_child(this, nodeFilter));\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function children(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_children(this, nodeFilter, { elementsOnly }));\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function closest(nodeFilter, limitFilter) {\n return new QuerySet(_closest(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function commonAncestor() {\n const node = _commonAncestor(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function contents() {\n return new QuerySet(_contents(this));\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fragment() {\n const node = _fragment(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function next(nodeFilter) {\n return new QuerySet(_next(this, nodeFilter));\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function nextAll(nodeFilter, limitFilter) {\n return new QuerySet(_nextAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function offsetParent() {\n const node = _offsetParent(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parent(nodeFilter) {\n return new QuerySet(_parent(this, nodeFilter));\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parents(nodeFilter, limitFilter) {\n return new QuerySet(_parents(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prev(nodeFilter) {\n return new QuerySet(_prev(this, nodeFilter));\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prevAll(nodeFilter, limitFilter) {\n return new QuerySet(_prevAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function shadow() {\n const node = _shadow(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [elementsOnly=true] Whether to only return element nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function siblings(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_siblings(this, nodeFilter, { elementsOnly }));\n};\n","import { isElement, merge, unique } from '@fr0st/core';\nimport { sort } from './utility.js';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Selection\n */\n\n/**\n * Insert each node after the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function afterSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n range.collapse();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Insert each node before the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function beforeSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Extract selected nodes from the DOM.\n * @return {array} The selected nodes.\n */\nexport function extractSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const fragment = range.extractContents();\n\n return merge([], fragment.childNodes);\n};\n\n/**\n * Return all selected nodes.\n * @return {array} The selected nodes.\n */\nexport function getSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n const nodes = merge([], range.commonAncestorContainer.querySelectorAll('*'));\n\n if (!nodes.length) {\n return [range.commonAncestorContainer];\n }\n\n if (nodes.length === 1) {\n return nodes;\n }\n\n const startContainer = range.startContainer;\n const endContainer = range.endContainer;\n const start = isElement(startContainer) ?\n startContainer :\n startContainer.parentNode;\n const end = isElement(endContainer) ?\n endContainer :\n endContainer.parentNode;\n\n const selectedNodes = nodes.slice(\n nodes.indexOf(start),\n nodes.indexOf(end) + 1,\n );\n const results = [];\n\n let lastNode;\n for (const node of selectedNodes) {\n if (lastNode && lastNode.contains(node)) {\n continue;\n }\n\n lastNode = node;\n results.push(node);\n }\n\n return results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Create a selection on the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function select(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (node && 'select' in node) {\n node.select();\n return;\n }\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n\n if (!node) {\n return;\n }\n\n const range = createRange();\n range.selectNode(node);\n selection.addRange(range);\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function selectAll(selector) {\n const nodes = sort(selector);\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount) {\n selection.removeAllRanges();\n }\n\n if (!nodes.length) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length == 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n selection.addRange(range);\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function wrapSelection(selector) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n fragment: true,\n html: true,\n });\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const node = nodes.slice().shift();\n const deepest = merge([], node.querySelectorAll('*')).find((node) => !node.childElementCount) || node;\n\n const fragment = range.extractContents();\n\n const childNodes = merge([], fragment.childNodes);\n\n for (const child of childNodes) {\n deepest.insertBefore(child, null);\n }\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n","import { afterSelection as _afterSelection, beforeSelection as _beforeSelection, select as _select, selectAll as _selectAll, wrapSelection as _wrapSelection } from './../../utility/selection.js';\n\n/**\n * QuerySet Selection\n */\n\n/**\n * Insert each node after the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function afterSelection() {\n _afterSelection(this);\n\n return this;\n};\n\n/**\n * Insert each node before the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function beforeSelection() {\n _beforeSelection(this);\n\n return this;\n};\n\n/**\n * Create a selection on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function select() {\n _select(this);\n\n return this;\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function selectAll() {\n _selectAll(this);\n\n return this;\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapSelection() {\n _wrapSelection(this);\n\n return this;\n};\n","import { camelCase, isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation(selector) {\n return parseNodes(selector)\n .some((node) => animations.has(node));\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(selector, attribute) {\n return parseNodes(selector)\n .some((node) => node.hasAttribute(attribute));\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some((node) => node.childElementCount);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .some((node) =>\n classes.some((className) => node.classList.contains(className)),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(selector, key) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).some((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(selector, key) {\n key = camelCase(key);\n\n return parseNodes(selector)\n .some((node) => !!node.dataset[key]);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment(selector) {\n return parseNodes(selector)\n .some((node) => node.content);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(selector, property) {\n return parseNodes(selector)\n .some((node) => node.hasOwnProperty(property));\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow(selector) {\n return parseNodes(selector)\n .some((node) => node.shadowRoot);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) => node.isConnected);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isEqualNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes or a parent of any of the nodes is \"fixed\".\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).some((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isSameNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n","import { hasAnimation as _hasAnimation, hasAttribute as _hasAttribute, hasChildren as _hasChildren, hasClass as _hasClass, hasCSSAnimation as _hasCSSAnimation, hasCSSTransition as _hasCSSTransition, hasData as _hasData, hasDataset as _hasDataset, hasDescendent as _hasDescendent, hasFragment as _hasFragment, hasProperty as _hasProperty, hasShadow as _hasShadow, is as _is, isConnected as _isConnected, isEqual as _isEqual, isFixed as _isFixed, isHidden as _isHidden, isSame as _isSame, isVisible as _isVisible } from './../../utility/tests.js';\n\n/**\n * QuerySet Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation() {\n return _hasAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(attribute) {\n return _hasAttribute(this, attribute);\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren() {\n return _hasChildren(this);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(...classes) {\n return _hasClass(this, ...classes);\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation() {\n return _hasCSSAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition() {\n return _hasCSSTransition(this);\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(key) {\n return _hasData(this, key);\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(key) {\n return _hasDataset(this, key);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(nodeFilter) {\n return _hasDescendent(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment() {\n return _hasFragment(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(property) {\n return _hasProperty(this, property);\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow() {\n return _hasShadow(this);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(nodeFilter) {\n return _is(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected() {\n return _isConnected(this);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(otherSelector) {\n return _isEqual(this, otherSelector);\n};\n\n/**\n * Returns true if any of the elements or a parent of any of the elements is \"fixed\".\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed() {\n return _isFixed(this);\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden() {\n return _isHidden(this);\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(otherSelector) {\n return _isSame(this, otherSelector);\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible() {\n return _isVisible(this);\n};\n","import { merge, unique } from '@fr0st/core';\nimport { query } from './../query.js';\nimport QuerySet from './../query-set.js';\nimport { index as _index, indexOf as _indexOf, normalize as _normalize, serialize as _serialize, serializeArray as _serializeArray, sort as _sort, tagName as _tagName } from './../../utility/utility.js';\n\n/**\n * QuerySet Utility\n */\n\n/**\n * Merge with new nodes and sort the results.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The QuerySet object.\n */\nexport function add(selector, context = null) {\n const nodes = _sort(unique(merge([], this.get(), query(selector, context).get())));\n\n return new QuerySet(nodes);\n};\n\n/**\n * Reduce the set of nodes to the one at the specified index.\n * @param {number} index The index of the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function eq(index) {\n const node = this.get(index);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Reduce the set of nodes to the first.\n * @return {QuerySet} The QuerySet object.\n */\nexport function first() {\n return this.eq(0);\n};\n\n/**\n * Get the index of the first node relative to it's parent node.\n * @return {number} The index.\n */\nexport function index() {\n return _index(this);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(nodeFilter) {\n return _indexOf(this, nodeFilter);\n};\n\n/**\n * Reduce the set of nodes to the last.\n * @return {QuerySet} The QuerySet object.\n */\nexport function last() {\n return this.eq(-1);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function normalize() {\n _normalize(this);\n\n return this;\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @return {string} The serialized string.\n */\nexport function serialize() {\n return _serialize(this);\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @return {array} The serialized array.\n */\nexport function serializeArray() {\n return _serializeArray(this);\n};\n\n/**\n * Sort nodes by their position in the document.\n * @return {QuerySet} The QuerySet object.\n */\nexport function sort() {\n return new QuerySet(_sort(this));\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName() {\n return _tagName(this);\n};\n","import QuerySet from './query-set.js';\nimport { animate, stop } from './animation/animate.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus } from './events/events.js';\nimport { attachShadow } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { clearQueue, delay, queue } from './queue/queue.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { afterSelection, beforeSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { add, eq, first, index, indexOf, last, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nconst proto = QuerySet.prototype;\n\nproto.add = add;\nproto.addClass = addClass;\nproto.addEvent = addEvent;\nproto.addEventDelegate = addEventDelegate;\nproto.addEventDelegateOnce = addEventDelegateOnce;\nproto.addEventOnce = addEventOnce;\nproto.after = after;\nproto.afterSelection = afterSelection;\nproto.animate = animate;\nproto.append = append;\nproto.appendTo = appendTo;\nproto.attachShadow = attachShadow;\nproto.before = before;\nproto.beforeSelection = beforeSelection;\nproto.blur = blur;\nproto.center = center;\nproto.child = child;\nproto.children = children;\nproto.clearQueue = clearQueue;\nproto.click = click;\nproto.clone = clone;\nproto.cloneData = cloneData;\nproto.cloneEvents = cloneEvents;\nproto.closest = closest;\nproto.commonAncestor = commonAncestor;\nproto.connected = connected;\nproto.constrain = constrain;\nproto.contents = contents;\nproto.css = css;\nproto.delay = delay;\nproto.detach = detach;\nproto.distTo = distTo;\nproto.distToNode = distToNode;\nproto.dropIn = dropIn;\nproto.dropOut = dropOut;\nproto.empty = empty;\nproto.eq = eq;\nproto.equal = equal;\nproto.fadeIn = fadeIn;\nproto.fadeOut = fadeOut;\nproto.filter = filter;\nproto.filterOne = filterOne;\nproto.find = find;\nproto.findByClass = findByClass;\nproto.findById = findById;\nproto.findByTag = findByTag;\nproto.findOne = findOne;\nproto.findOneByClass = findOneByClass;\nproto.findOneById = findOneById;\nproto.findOneByTag = findOneByTag;\nproto.first = first;\nproto.fixed = fixed;\nproto.focus = focus;\nproto.fragment = fragment;\nproto.getAttribute = getAttribute;\nproto.getData = getData;\nproto.getDataset = getDataset;\nproto.getHTML = getHTML;\nproto.getProperty = getProperty;\nproto.getScrollX = getScrollX;\nproto.getScrollY = getScrollY;\nproto.getStyle = getStyle;\nproto.getText = getText;\nproto.getValue = getValue;\nproto.hasAnimation = hasAnimation;\nproto.hasAttribute = hasAttribute;\nproto.hasChildren = hasChildren;\nproto.hasClass = hasClass;\nproto.hasCSSAnimation = hasCSSAnimation;\nproto.hasCSSTransition = hasCSSTransition;\nproto.hasData = hasData;\nproto.hasDataset = hasDataset;\nproto.hasDescendent = hasDescendent;\nproto.hasFragment = hasFragment;\nproto.hasProperty = hasProperty;\nproto.hasShadow = hasShadow;\nproto.height = height;\nproto.hidden = hidden;\nproto.hide = hide;\nproto.index = index;\nproto.indexOf = indexOf;\nproto.insertAfter = insertAfter;\nproto.insertBefore = insertBefore;\nproto.is = is;\nproto.isConnected = isConnected;\nproto.isEqual = isEqual;\nproto.isFixed = isFixed;\nproto.isHidden = isHidden;\nproto.isSame = isSame;\nproto.isVisible = isVisible;\nproto.last = last;\nproto.nearestTo = nearestTo;\nproto.nearestToNode = nearestToNode;\nproto.next = next;\nproto.nextAll = nextAll;\nproto.normalize = normalize;\nproto.not = not;\nproto.notOne = notOne;\nproto.offsetParent = offsetParent;\nproto.parent = parent;\nproto.parents = parents;\nproto.percentX = percentX;\nproto.percentY = percentY;\nproto.position = position;\nproto.prepend = prepend;\nproto.prependTo = prependTo;\nproto.prev = prev;\nproto.prevAll = prevAll;\nproto.queue = queue;\nproto.rect = rect;\nproto.remove = remove;\nproto.removeAttribute = removeAttribute;\nproto.removeClass = removeClass;\nproto.removeData = removeData;\nproto.removeDataset = removeDataset;\nproto.removeEvent = removeEvent;\nproto.removeEventDelegate = removeEventDelegate;\nproto.removeProperty = removeProperty;\nproto.replaceAll = replaceAll;\nproto.replaceWith = replaceWith;\nproto.rotateIn = rotateIn;\nproto.rotateOut = rotateOut;\nproto.same = same;\nproto.select = select;\nproto.selectAll = selectAll;\nproto.serialize = serialize;\nproto.serializeArray = serializeArray;\nproto.setAttribute = setAttribute;\nproto.setData = setData;\nproto.setDataset = setDataset;\nproto.setHTML = setHTML;\nproto.setProperty = setProperty;\nproto.setScroll = setScroll;\nproto.setScrollX = setScrollX;\nproto.setScrollY = setScrollY;\nproto.setStyle = setStyle;\nproto.setText = setText;\nproto.setValue = setValue;\nproto.shadow = shadow;\nproto.show = show;\nproto.siblings = siblings;\nproto.slideIn = slideIn;\nproto.slideOut = slideOut;\nproto.sort = sort;\nproto.squeezeIn = squeezeIn;\nproto.squeezeOut = squeezeOut;\nproto.stop = stop;\nproto.tagName = tagName;\nproto.toggle = toggle;\nproto.toggleClass = toggleClass;\nproto.triggerEvent = triggerEvent;\nproto.triggerOne = triggerOne;\nproto.unwrap = unwrap;\nproto.visible = visible;\nproto.width = width;\nproto.withAnimation = withAnimation;\nproto.withAttribute = withAttribute;\nproto.withChildren = withChildren;\nproto.withClass = withClass;\nproto.withCSSAnimation = withCSSAnimation;\nproto.withCSSTransition = withCSSTransition;\nproto.withData = withData;\nproto.withDescendent = withDescendent;\nproto.withProperty = withProperty;\nproto.wrap = wrap;\nproto.wrapAll = wrapAll;\nproto.wrapInner = wrapInner;\nproto.wrapSelection = wrapSelection;\n\nexport default QuerySet;\n","import { isFunction } from '@fr0st/core';\nimport QuerySet from './proto.js';\nimport { getContext } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { ready } from './../events/events.js';\n\n/**\n * DOM Query\n */\n\n/**\n * Add a function to the ready queue or return a QuerySet.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet|function} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function query(selector, context = null) {\n if (isFunction(selector)) {\n return ready(selector);\n }\n\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(nodes);\n};\n\n/**\n * Return a QuerySet for the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function queryOne(selector, context = null) {\n const node = parseNode(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(node ? [node] : []);\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Scripts\n */\n\n/**\n * Load and execute a JavaScript file.\n * @param {string} url The URL of the script.\n * @param {object} [attributes] Additional attributes to set on the script tag.\n * @param {object} [options] The options for loading the script.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the script is loaded, or rejects on failure.\n */\nexport function loadScript(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n src: url,\n type: 'text/javascript',\n ...attributes,\n };\n\n if (!('async' in attributes)) {\n attributes.defer = '';\n }\n\n if (!cache) {\n attributes.src = appendQueryString(attributes.src, '_', Date.now());\n }\n\n const script = context.createElement('script');\n\n for (const [key, value] of Object.entries(attributes)) {\n script.setAttribute(key, value);\n }\n\n context.head.appendChild(script);\n\n return new Promise((resolve, reject) => {\n script.onload = (_) => resolve();\n script.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Load and executes multiple JavaScript files (in order).\n * @param {array} urls An array of script URLs or attribute objects.\n * @param {object} [options] The options for loading the scripts.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadScripts(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadScript(url, null, { cache, context }) :\n loadScript(null, url, { cache, context }),\n ),\n );\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Styles\n */\n\n/**\n * Import a CSS Stylesheet file.\n * @param {string} url The URL of the stylesheet.\n * @param {object} [attributes] Additional attributes to set on the style tag.\n * @param {object} [options] The options for loading the stylesheet.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the stylesheet is loaded, or rejects on failure.\n */\nexport function loadStyle(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n href: url,\n rel: 'stylesheet',\n ...attributes,\n };\n\n if (!cache) {\n attributes.href = appendQueryString(attributes.href, '_', Date.now());\n }\n\n const link = context.createElement('link');\n\n for (const [key, value] of Object.entries(attributes)) {\n link.setAttribute(key, value);\n }\n\n context.head.appendChild(link);\n\n return new Promise((resolve, reject) => {\n link.onload = (_) => resolve();\n link.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Import multiple CSS Stylesheet files.\n * @param {array} urls An array of stylesheet URLs or attribute objects.\n * @param {object} [options] The options for loading the stylesheets.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadStyles(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadStyle(url, null, { cache, context }) :\n loadStyle(null, url, { cache, context }),\n ),\n );\n};\n","import { merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { allowedTags as _allowedTags } from './../vars.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Sanitize a HTML string.\n * @param {string} html The input HTML string.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n * @return {string} The sanitized HTML string.\n */\nexport function sanitize(html, allowedTags = _allowedTags) {\n const template = getContext().createElement('template');\n template.innerHTML = html;\n const fragment = template.content;\n const childNodes = merge([], fragment.children);\n\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n\n return template.innerHTML;\n};\n\n/**\n * Sanitize a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n */\nfunction sanitizeNode(node, allowedTags = _allowedTags) {\n // check node\n const name = node.tagName.toLowerCase();\n\n if (!(name in allowedTags)) {\n node.remove();\n return;\n }\n\n // check node attributes\n const allowedAttributes = [];\n\n if ('*' in allowedTags) {\n allowedAttributes.push(...allowedTags['*']);\n }\n\n allowedAttributes.push(...allowedTags[name]);\n\n const attributes = merge([], node.attributes);\n\n for (const attribute of attributes) {\n if (!allowedAttributes.find((test) => attribute.nodeName.match(test))) {\n node.removeAttribute(attribute.nodeName);\n }\n }\n\n // check children\n const childNodes = merge([], node.children);\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n};\n","import * as _ from '@fr0st/core';\nimport { getAjaxDefaults, getAnimationDefaults, getContext, getWindow, setAjaxDefaults, setAnimationDefaults, setContext, setWindow, useTimeout } from './config.js';\nimport { noConflict } from './globals.js';\nimport { debounce } from './helpers.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './vars.js';\nimport { ajax, _delete, get, patch, post, put } from './ajax/ajax.js';\nimport { parseFormData, parseParams } from './ajax/helpers.js';\nimport { animate, stop } from './animation/animate.js';\nimport Animation from './animation/animation.js';\nimport AnimationSet from './animation/animation-set.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { getCookie, removeCookie, setCookie } from './cookie/cookie.js';\nimport { mouseDragFactory } from './events/event-factory.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus, ready } from './events/events.js';\nimport { attachShadow, create, createComment, createFragment, createRange, createText } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { parseDocument, parseHTML } from './parser/parser.js';\nimport { query, queryOne } from './query/query.js';\nimport QuerySet from './query/query-set.js';\nimport { clearQueue, queue } from './queue/queue.js';\nimport { loadScript, loadScripts } from './scripts/scripts.js';\nimport { loadStyle, loadStyles } from './styles/styles.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { sanitize } from './utility/sanitize.js';\nimport { afterSelection, beforeSelection, extractSelection, getSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { exec, index, indexOf, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nObject.assign(query, {\n BORDER_BOX,\n CONTENT_BOX,\n MARGIN_BOX,\n PADDING_BOX,\n SCROLL_BOX,\n Animation,\n AnimationSet,\n QuerySet,\n addClass,\n addEvent,\n addEventDelegate,\n addEventDelegateOnce,\n addEventOnce,\n after,\n afterSelection,\n ajax,\n animate,\n append,\n appendTo,\n attachShadow,\n before,\n beforeSelection,\n blur,\n center,\n child,\n children,\n clearQueue,\n click,\n clone,\n cloneData,\n cloneEvents,\n closest,\n commonAncestor,\n connected,\n constrain,\n contents,\n create,\n createComment,\n createFragment,\n createRange,\n createText,\n css,\n debounce,\n delete: _delete,\n detach,\n distTo,\n distToNode,\n dropIn,\n dropOut,\n empty,\n equal,\n exec,\n extractSelection,\n fadeIn,\n fadeOut,\n filter,\n filterOne,\n find,\n findByClass,\n findById,\n findByTag,\n findOne,\n findOneByClass,\n findOneById,\n findOneByTag,\n fixed,\n focus,\n fragment,\n get,\n getAjaxDefaults,\n getAnimationDefaults,\n getAttribute,\n getContext,\n getCookie,\n getData,\n getDataset,\n getHTML,\n getProperty,\n getScrollX,\n getScrollY,\n getSelection,\n getStyle,\n getText,\n getValue,\n getWindow,\n hasAnimation,\n hasAttribute,\n hasCSSAnimation,\n hasCSSTransition,\n hasChildren,\n hasClass,\n hasData,\n hasDataset,\n hasDescendent,\n hasFragment,\n hasProperty,\n hasShadow,\n height,\n hidden,\n hide,\n index,\n indexOf,\n insertAfter,\n insertBefore,\n is,\n isConnected,\n isEqual,\n isFixed,\n isHidden,\n isSame,\n isVisible,\n loadScript,\n loadScripts,\n loadStyle,\n loadStyles,\n mouseDragFactory,\n nearestTo,\n nearestToNode,\n next,\n nextAll,\n noConflict,\n normalize,\n not,\n notOne,\n offsetParent,\n parent,\n parents,\n parseDocument,\n parseFormData,\n parseHTML,\n parseParams,\n patch,\n percentX,\n percentY,\n position,\n post,\n prepend,\n prependTo,\n prev,\n prevAll,\n put,\n query,\n queryOne,\n queue,\n ready,\n rect,\n remove,\n removeAttribute,\n removeClass,\n removeCookie,\n removeData,\n removeDataset,\n removeEvent,\n removeEventDelegate,\n removeProperty,\n replaceAll,\n replaceWith,\n rotateIn,\n rotateOut,\n same,\n sanitize,\n select,\n selectAll,\n serialize,\n serializeArray,\n setAjaxDefaults,\n setAnimationDefaults,\n setAttribute,\n setContext,\n setCookie,\n setData,\n setDataset,\n setHTML,\n setProperty,\n setScroll,\n setScrollX,\n setScrollY,\n setStyle,\n setText,\n setValue,\n setWindow,\n shadow,\n show,\n siblings,\n slideIn,\n slideOut,\n sort,\n squeezeIn,\n squeezeOut,\n stop,\n tagName,\n toggle,\n toggleClass,\n triggerEvent,\n triggerOne,\n unwrap,\n useTimeout,\n visible,\n width,\n withAnimation,\n withAttribute,\n withCSSAnimation,\n withCSSTransition,\n withChildren,\n withClass,\n withData,\n withDescendent,\n withProperty,\n wrap,\n wrapAll,\n wrapInner,\n wrapSelection,\n});\n\nfor (const [key, value] of Object.entries(_)) {\n query[`_${key}`] = value;\n}\n\nexport default query;\n","import { getWindow, setContext, setWindow } from './config.js';\nimport $ from './fquery.js';\n\nlet _$;\n\n/**\n * Reset the global $ variable.\n */\nexport function noConflict() {\n const window = getWindow();\n\n if (window.$ === $) {\n window.$ = _$;\n }\n};\n\n/**\n * Register the global variables.\n * @param {Window} window The window.\n * @param {Document} [document] The document.\n * @return {object} The fQuery object.\n */\nexport function registerGlobals(window, document) {\n setWindow(window);\n setContext(document || window.document);\n\n _$ = window.$;\n window.$ = $;\n\n return $;\n};\n","import { isWindow } from '@fr0st/core';\nimport { registerGlobals } from './globals.js';\n\nexport default isWindow(globalThis) ? registerGlobals(globalThis) : registerGlobals;\n"],"names":["wrap","debounce","attachShadow","find","findById","findByClass","findByTag","findOne","findOneById","findOneByClass","findOneByTag","animate","stop","dropIn","slideIn","dropOut","slideOut","fadeIn","fadeOut","rotateIn","rotateOut","squeezeIn","squeezeOut","index","indexOf","normalize","serialize","serializeArray","sort","tagName","child","children","closest","parents","commonAncestor","contents","fragment","next","nextAll","offsetParent","parent","prev","prevAll","shadow","siblings","_debounce","removeEvent","addEvent","addEventDelegate","addEventDelegateOnce","addEventOnce","cloneEvents","removeEventDelegate","triggerEvent","triggerOne","clone","events","data","animations","_events","_data","_animations","detach","empty","remove","replaceAll","replaceWith","getAttribute","getDataset","getHTML","getProperty","getText","getValue","removeAttribute","removeDataset","removeProperty","setAttribute","setDataset","setHTML","setProperty","setText","setValue","cloneData","setData","getData","removeData","addClass","css","getStyle","hide","removeClass","setStyle","show","toggle","toggleClass","center","rect","constrain","distTo","distToNode","nearestTo","nearestToNode","percentX","percentY","position","getScrollX","getScrollY","setScroll","setScrollX","setScrollY","height","width","blur","click","focus","after","append","appendTo","before","insertAfter","insertBefore","prepend","prependTo","unwrap","wrapAll","wrapInner","_animate","_stop","_dropIn","_dropOut","_fadeIn","_fadeOut","_rotateIn","_rotateOut","_slideIn","_slideOut","_squeezeIn","_squeezeOut","_getAttribute","_getDataset","_getHTML","_getProperty","_getText","_getValue","_removeAttribute","_removeDataset","_removeProperty","_setAttribute","_setDataset","_setHTML","_setProperty","_setText","_setValue","_cloneData","_getData","_removeData","_setData","_center","_constrain","_distTo","_distToNode","_nearestTo","_nearestToNode","_percentX","_percentY","_position","_rect","_getScrollX","_getScrollY","_setScroll","_setScrollX","_setScrollY","_height","_width","_addClass","_css","_getStyle","_hide","_removeClass","_setStyle","_show","_toggle","_toggleClass","_addEvent","_addEventDelegate","_addEventDelegateOnce","_addEventOnce","_cloneEvents","_removeEvent","_removeEventDelegate","_triggerEvent","_triggerOne","_blur","_click","_focus","_attachShadow","_clone","_detach","_empty","_remove","_replaceAll","_replaceWith","_after","_append","_appendTo","_before","_insertAfter","_insertBefore","_prepend","_prependTo","_unwrap","_wrap","_wrapAll","_wrapInner","clearQueue","queue","_clearQueue","_queue","connected","equal","filter","filterOne","fixed","hidden","not","notOne","same","visible","withAnimation","withAttribute","withChildren","withClass","withCSSAnimation","withCSSTransition","withData","withDescendent","withProperty","_connected","_equal","_filter","_filterOne","_fixed","_hidden","_not","_notOne","_same","_visible","_withAnimation","_withAttribute","_withChildren","_withClass","_withCSSAnimation","_withCSSTransition","_withData","_withDescendent","_withProperty","_find","_findByClass","_findById","_findByTag","_findOne","_findOneByClass","_findOneById","_findOneByTag","_child","_children","_closest","_commonAncestor","_contents","_fragment","_next","_nextAll","_offsetParent","_parent","_parents","_prev","_prevAll","_shadow","_siblings","afterSelection","beforeSelection","select","selectAll","wrapSelection","_afterSelection","_beforeSelection","_select","_selectAll","_wrapSelection","hasAnimation","hasAttribute","hasChildren","hasClass","hasCSSAnimation","hasCSSTransition","hasData","hasDataset","hasDescendent","hasFragment","hasProperty","hasShadow","is","isConnected","isEqual","isFixed","isHidden","isSame","isVisible","_hasAnimation","_hasAttribute","_hasChildren","_hasClass","_hasCSSAnimation","_hasCSSTransition","_hasData","_hasDataset","_hasDescendent","_hasFragment","_hasProperty","_hasShadow","_is","_isConnected","_isEqual","_isFixed","_isHidden","_isSame","_isVisible","_sort","_index","_indexOf","_normalize","_serialize","_serializeArray","_tagName","allowedTags","_allowedTags","$"],"mappings":";;;;;;IAAA;IACA;IACA;AACA;IACA,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACrC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,WAAW,GAAG,CAAC,KAAK;IACjC,IAAI,OAAO,CAAC,KAAK,CAAC;IAClB;IACA,QAAQ,QAAQ,CAAC,KAAK,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;IACzB;IACA,YAAY;IACZ,gBAAgB,MAAM,CAAC,QAAQ,IAAI,KAAK;IACxC,gBAAgB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD;IACA;IACA,gBAAgB,QAAQ,IAAI,KAAK;IACjC,gBAAgB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IACvC;IACA,oBAAoB,CAAC,KAAK,CAAC,MAAM;IACjC,oBAAoB,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK;IAC7C,iBAAiB;IACjB,aAAa;IACb,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,KAAK;IAC/B,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;AACtB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,UAAU,GAAG,CAAC,KAAK;IAChC,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,CAAC;AACrC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,KAAK;IAC/B,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,CAAC;AACpC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,UAAU,GAAG,CAAC,KAAK;IAChC,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,QAAQ,KAAK,sBAAsB;IAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAChB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,UAAU,GAAG,CAAC,KAAK;IAChC,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;AAChC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,KAAK;IAC5B,IAAI,CAAC,CAAC,KAAK;IACX;IACA,QAAQ,KAAK,CAAC,QAAQ,KAAK,YAAY;IACvC,QAAQ,KAAK,CAAC,QAAQ,KAAK,SAAS;IACpC,QAAQ,KAAK,CAAC,QAAQ,KAAK,YAAY;IACvC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,KAAK;IAC5B,IAAI,KAAK,KAAK,IAAI,CAAC;AACnB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,KAAK;IAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,KAAK;IAC9B,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,aAAa,GAAG,CAAC,KAAK;IACnC,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC;AACjC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,KAAK;IAC9B,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,QAAQ,KAAK,sBAAsB;IAC7C,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACjB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,KAAK;IAC9B,IAAI,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,KAAK;IAC5B,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;AACjC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,WAAW,GAAG,CAAC,KAAK;IACjC,IAAI,KAAK,KAAK,SAAS,CAAC;AACxB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,KAAK;IAC9B,IAAI,CAAC,CAAC,KAAK;IACX,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ;IACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,KAAK,KAAK;;ICzLxC;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;IAC7C,IAAI,IAAI,CAAC,GAAG;IACZ,QAAQ,GAAG;IACX,QAAQ,IAAI,CAAC,GAAG;IAChB,YAAY,GAAG;IACf,YAAY,KAAK;IACjB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,YAAY,GAAG,CAAC,KAAK;IAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACnC,IAAI,GAAG;IACP,QAAQ,EAAE,GAAG,EAAE;IACf,QAAQ,EAAE,GAAG,EAAE;IACf,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK;IACzC,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7B;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM;IACnC,IAAI,EAAE;IACN,KAAK,CAAC,GAAG,MAAM,CAAC;IAChB,IAAI,EAAE;IACN,IAAI,MAAM,CAAC;AACX;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IACzD,IAAI,CAAC,KAAK,GAAG,OAAO;IACpB,KAAK,KAAK,GAAG,KAAK,CAAC;IACnB,KAAK,OAAO,GAAG,OAAO,CAAC;IACvB,IAAI,KAAK,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;IACtC,IAAI,MAAM,CAAC,CAAC,CAAC;IACb,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;IACzB,QAAQ,GAAG;IACX,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,CAAC;IACb,YAAY,CAAC;IACb,YAAY,CAAC;IACb,YAAY,CAAC;IACb,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;IACzC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IACzC,IAAI,UAAU;IACd,QAAQ;IACR,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI;IAChB,UAAU,OAAO;IACjB,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM;IAClD,SAAS;IACT,KAAK;;IC/HL;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,KAAK;IAC1C,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,CAAC,MAAM;IACvB,QAAQ,CAAC,KAAK,KAAK,CAAC,MAAM;IAC1B,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,KAAK,CAAC;IACN,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM;IACnC,IAAI,MAAM;IACV,QAAQ,MAAM;IACd,aAAa,MAAM;IACnB,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK;IACvC,oBAAoB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,oBAAoB,OAAO,KAAK;IAChC,wBAAwB,GAAG;IAC3B,wBAAwB,KAAK,CAAC,MAAM;IACpC,4BAA4B,CAAC,KAAK;IAClC,gCAAgC,MAAM,CAAC,KAAK;IAC5C,oCAAoC,CAAC,KAAK,EAAE,UAAU;IACtD,wCAAwC,KAAK,IAAI,UAAU;IAC3D,wCAAwC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7D,iCAAiC;IACjC,yBAAyB;IACzB,qBAAqB,CAAC;IACtB,iBAAiB;IACjB,gBAAgB,EAAE;IAClB,aAAa;IACb,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM;IAC3C,IAAI,MAAM,CAAC,MAAM;IACjB,QAAQ,CAAC,GAAG,EAAE,KAAK,KAAK;IACxB,YAAY,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnD,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;IACT,QAAQ,KAAK;IACb,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,WAAW,GAAG,CAAC,KAAK;IACjC,IAAI,KAAK,CAAC,MAAM;IAChB,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,IAAI,CAAC;AACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK;IAC/C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IACxC,IAAI,OAAO,IAAI,KAAK;IACpB,QAAQ;IACR,YAAY;IACZ,gBAAgB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;IACrC,gBAAgB,IAAI;IACpB;IACA,YAAY,CAAC;IACb,YAAY,CAAC;IACb,KAAK;IACL,SAAS,IAAI,EAAE;IACf,SAAS,GAAG;IACZ,YAAY,CAAC,CAAC,EAAE,CAAC;IACjB,gBAAgB,KAAK,GAAG,MAAM;IAC9B,qBAAqB,CAAC,GAAG,IAAI,GAAG,IAAI;IACpC,oBAAoB,IAAI;IACxB,iBAAiB;IACjB,SAAS,CAAC;IACV,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,KAAK;IAC5B,IAAI,KAAK,CAAC,IAAI;IACd,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC;IACtB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAMA,MAAI,GAAG,CAAC,KAAK;IAC1B,IAAI,WAAW,CAAC,KAAK,CAAC;IACtB,QAAQ,EAAE;IACV;IACA,YAAY,OAAO,CAAC,KAAK,CAAC;IAC1B,gBAAgB,KAAK;IACrB;IACA,oBAAoB,WAAW,CAAC,KAAK,CAAC;IACtC,wBAAwB,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;IACxC,wBAAwB,CAAC,KAAK,CAAC;IAC/B,iBAAiB;IACjB,SAAS;;IC7HT;IACA;IACA;AACA;IACA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,uBAAuB,IAAI,MAAM,CAAC;AACrF;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,sBAAsB,GAAG,SAAS;IACxC,IAAI,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAClD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK;IACjE,IAAI,IAAI,kBAAkB,CAAC;IAC3B,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,OAAO,CAAC;AAChB;IACA,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,KAAK;IACnC,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB;IACA,QAAQ,IAAI,OAAO,EAAE;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,EAAE;IACrB,YAAY,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,IAAI,CAAC;IACvB,QAAQ,kBAAkB,GAAG,sBAAsB,CAAC,CAAC,CAAC,KAAK;IAC3D,YAAY,IAAI,CAAC,OAAO,EAAE;IAC1B,gBAAgB,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC;IACrC,aAAa;AACb;IACA,YAAY,OAAO,GAAG,KAAK,CAAC;IAC5B,YAAY,kBAAkB,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;IAC9B,QAAQ,IAAI,CAAC,kBAAkB,EAAE;IACjC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC5D,SAAS,MAAM;IACf,YAAY,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC7C,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,KAAK,CAAC;IACxB,QAAQ,kBAAkB,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC;AACN;IACA,IAAI,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS;IACpC,IAAI,CAAC,GAAG;IACR,QAAQ,SAAS,CAAC,WAAW;IAC7B,YAAY,CAAC,GAAG,EAAE,QAAQ;IAC1B,gBAAgB,QAAQ,CAAC,GAAG,CAAC;IAC7B,YAAY,GAAG;IACf,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,CAAC,QAAQ,KAAK;IACnC,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI;IAC5B,QAAQ,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;IACtC,YAAY,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,GAAG,OAAO;IACvB,gBAAgB,OAAO;IACvB,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3C,iBAAiB,CAAC;AAClB;IACA,IAAI,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAMC,UAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK;IAC3F,IAAI,IAAI,iBAAiB,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,OAAO,CAAC;AAChB;IACA,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,KAAK;IACnC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,QAAQ,MAAM,KAAK,GAAG,OAAO;IAC7B,YAAY,GAAG,GAAG,OAAO;IACzB,YAAY,IAAI,CAAC;AACjB;IACA,QAAQ,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE;IAC1D,YAAY,OAAO,GAAG,GAAG,CAAC;IAC1B,YAAY,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,IAAI,CAAC;IACvB,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,iBAAiB,EAAE;IAC/B,YAAY,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC5C,SAAS;AACT;IACA,QAAQ,iBAAiB,GAAG,UAAU;IACtC,YAAY,CAAC,CAAC,KAAK;IACnB,gBAAgB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,gBAAgB,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC;AACrC;IACA,gBAAgB,iBAAiB,GAAG,IAAI,CAAC;IACzC,aAAa;IACb,YAAY,IAAI;IAChB,SAAS,CAAC;IACV,KAAK,CAAC;AACN;IACA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;IAC9B,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACxC;IACA,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA,IAAI,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,KAAK;IAC9B,IAAI,UAAU,CAAC,KAAK,CAAC;IACrB,QAAQ,KAAK,EAAE;IACf,QAAQ,KAAK,CAAC;AACd;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK;IAClC,IAAI,IAAI,GAAG,CAAC;IACZ,IAAI,IAAI,MAAM,CAAC;AACf;IACA,IAAI,OAAO,CAAC,GAAG,IAAI,KAAK;IACxB,QAAQ,IAAI,GAAG,EAAE;IACjB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,GAAG,GAAG,IAAI,CAAC;IACnB,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK,CAAC;IACN,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,GAAG,WAAW;IAChD,IAAI,CAAC,GAAG,IAAI;IACZ,QAAQ,QAAQ;IAChB,YAAY,IAAI,WAAW;IAC3B,iBAAiB,KAAK,EAAE;IACxB,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACvB,oBAAoB,WAAW,CAAC,CAAC,CAAC;IAClC,wBAAwB,IAAI,CAAC,KAAK,EAAE;IACpC,wBAAwB,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B;IACA,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS;IACjC,IAAI,CAAC,GAAG;IACR,QAAQ,SAAS,CAAC,MAAM;IACxB,YAAY,CAAC,GAAG,EAAE,QAAQ;IAC1B,gBAAgB,QAAQ,CAAC,GAAG,CAAC;IAC7B,YAAY,GAAG;IACf,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK;IAC1F,IAAI,IAAI,iBAAiB,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,OAAO,CAAC;AAChB;IACA,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,KAAK;IACnC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,QAAQ,MAAM,KAAK,GAAG,OAAO;IAC7B,YAAY,GAAG,GAAG,OAAO;IACzB,YAAY,IAAI,CAAC;AACjB;IACA,QAAQ,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE;IAC1D,YAAY,OAAO,GAAG,GAAG,CAAC;IAC1B,YAAY,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,IAAI,CAAC;IACvB,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE;IAClC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,IAAI,CAAC;IACvB,QAAQ,iBAAiB,GAAG,UAAU;IACtC,YAAY,CAAC,CAAC,KAAK;IACnB,gBAAgB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,gBAAgB,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC;AACrC;IACA,gBAAgB,OAAO,GAAG,KAAK,CAAC;IAChC,gBAAgB,iBAAiB,GAAG,IAAI,CAAC;IACzC,aAAa;IACb,YAAY,KAAK,KAAK,IAAI;IAC1B,gBAAgB,IAAI;IACpB,gBAAgB,IAAI,GAAG,KAAK;IAC5B,SAAS,CAAC;IACV,KAAK,CAAC;AACN;IACA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;IAC9B,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACxC;IACA,QAAQ,OAAO,GAAG,KAAK,CAAC;IACxB,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA,IAAI,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK;IAC3C,IAAI,OAAO,MAAM,EAAE,EAAE;IACrB,QAAQ,IAAI,QAAQ,EAAE,KAAK,KAAK,EAAE;IAClC,YAAY,MAAM;IAClB,SAAS;IACT,KAAK;IACL,CAAC;;IC1SD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO;IACzC,IAAI,OAAO,CAAC,MAAM;IAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,KAAK;IACtB,YAAY,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;IACjC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;IACrC,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM;IACnC,wBAAwB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvC,4BAA4B,GAAG,CAAC,CAAC,CAAC;IAClC,4BAA4B,EAAE;IAC9B,wBAAwB,GAAG,CAAC,CAAC,CAAC;IAC9B,qBAAqB,CAAC;IACtB,iBAAiB,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;IAClD,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM;IACnC,wBAAwB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,4BAA4B,GAAG,CAAC,CAAC,CAAC;IAClC,4BAA4B,EAAE;IAC9B,wBAAwB,GAAG,CAAC,CAAC,CAAC;IAC9B,qBAAqB,CAAC;IACtB,iBAAiB,MAAM;IACvB,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,iBAAiB;IACjB,aAAa;IACb,YAAY,OAAO,GAAG,CAAC;IACvB,SAAS;IACT,QAAQ,MAAM;IACd,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK;IAC1C,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG;IACjC,QAAQ;IACR,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,YAAY,EAAE,GAAG,IAAI,MAAM,CAAC;IAC5B,UAAU;IACV,YAAY,MAAM;IAClB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,SAAS,MAAM;IACf,YAAY,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,SAAS;IACT,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK;IACrD,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG;IACjC,QAAQ;IACR,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,YAAY,EAAE,GAAG,IAAI,MAAM,CAAC;IAC5B,UAAU;IACV,YAAY,OAAO,YAAY,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK;IACvC,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG;IACjC,QAAQ;IACR,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,YAAY,EAAE,GAAG,IAAI,MAAM,CAAC;IAC5B,UAAU;IACV,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY;IACnD,IAAI,OAAO;IACX,SAAS,GAAG,CAAC,CAAC,OAAO;IACrB,YAAY,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK;IACzE,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG;IACjC,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE;IACzB,YAAY,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;IACpC,gBAAgB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;IACxD,oBAAoB,SAAS;IAC7B,iBAAiB;AACjB;IACA,gBAAgB,MAAM;IACtB,oBAAoB,MAAM;IAC1B,oBAAoB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9C,oBAAoB,KAAK;IACzB,oBAAoB,SAAS;IAC7B,iBAAiB,CAAC;IAClB,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY;IACZ,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,gBAAgB,EAAE,GAAG,IAAI,MAAM,CAAC;IAChC,cAAc;IACd,gBAAgB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjC,aAAa;AACb;IACA,YAAY,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,SAAS,MAAM;IACf,YAAY,SAAS;IACrB,YAAY,EAAE,GAAG,IAAI,MAAM,CAAC;IAC5B,UAAU;IACV,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChC,SAAS;IACT,KAAK;IACL,CAAC;;ICjKD;IACA,MAAM,WAAW,GAAG;IACpB,IAAI,GAAG,EAAE,OAAO;IAChB,IAAI,GAAG,EAAE,MAAM;IACf,IAAI,GAAG,EAAE,MAAM;IACf,IAAI,GAAG,EAAE,QAAQ;IACjB,IAAI,IAAI,EAAE,QAAQ;IAClB,CAAC,CAAC;AACF;IACA,MAAM,aAAa,GAAG;IACtB,IAAI,GAAG,EAAE,GAAG;IACZ,IAAI,EAAE,EAAE,GAAG;IACX,IAAI,EAAE,EAAE,GAAG;IACX,IAAI,IAAI,EAAE,GAAG;IACb,IAAI,IAAI,EAAE,IAAI;IACd,CAAC,CAAC;AACF;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,GAAG,CAAC,MAAM;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACf,SAAS,KAAK,CAAC,yBAAyB,CAAC;IACzC,SAAS,MAAM;IACf,YAAY,CAAC,GAAG,EAAE,IAAI,KAAK;IAC3B,gBAAgB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,gBAAgB,IAAI,IAAI,EAAE;IAC1B,oBAAoB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB;IACjB,gBAAgB,OAAO,GAAG,CAAC;IAC3B,aAAa;IACb,YAAY,EAAE;IACd,SAAS,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,MAAM;IAChC,IAAI,YAAY,CAAC,MAAM,CAAC;IACxB,SAAS,GAAG;IACZ,YAAY,CAAC,IAAI,EAAE,KAAK;IACxB,gBAAgB,KAAK;IACrB,oBAAoB,UAAU,CAAC,IAAI,CAAC;IACpC,oBAAoB,IAAI;IACxB,SAAS;IACT,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,UAAU,GAAG,CAAC,MAAM;IACjC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IAClC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACtC;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,MAAM,GAAG,CAAC,MAAM;IAC7B,IAAI,MAAM,CAAC,OAAO;IAClB,QAAQ,UAAU;IAClB,QAAQ,CAAC,KAAK;IACd,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,YAAY,GAAG,CAAC,MAAM;IACnC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;AACpD;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,MAAM;IAC/B,IAAI,UAAU;IACd,QAAQ,YAAY,CAAC,MAAM,CAAC;IAC5B,aAAa,IAAI,CAAC,GAAG,CAAC;IACtB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,MAAM;IAChC,IAAI,YAAY,CAAC,MAAM,CAAC;IACxB,SAAS,IAAI,CAAC,GAAG,CAAC;IAClB,SAAS,WAAW,EAAE,CAAC;AACvB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,UAAU,GAAG,CAAC,MAAM;IACjC,IAAI,YAAY,CAAC,MAAM,CAAC;IACxB,SAAS,GAAG;IACZ,YAAY,CAAC,IAAI;IACjB,gBAAgB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IAC5C,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,SAAS;IACT,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,gEAAgE;IAClH,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;IACrB,SAAS,IAAI,EAAE;IACf,SAAS,GAAG;IACZ,YAAY,CAAC,CAAC;IACd,gBAAgB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/C,SAAS;IACT,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,SAAS,GAAG,CAAC,MAAM;IAChC,IAAI,YAAY,CAAC,MAAM,CAAC;IACxB,SAAS,IAAI,CAAC,GAAG,CAAC;IAClB,SAAS,WAAW,EAAE,CAAC;AACvB;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,QAAQ,GAAG,CAAC,MAAM;IAC/B,IAAI,MAAM,CAAC,OAAO;IAClB,QAAQ,0BAA0B;IAClC,QAAQ,CAAC,CAAC,EAAE,IAAI;IAChB,YAAY,aAAa,CAAC,IAAI,CAAC;IAC/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC1JL;IACA;IACA;AACA;IACA,MAAM,YAAY,GAAG;IACrB,IAAI,SAAS,EAAE,IAAI;IACnB,IAAI,UAAU,EAAE,IAAI;IACpB,IAAI,KAAK,EAAE,IAAI;IACf,IAAI,WAAW,EAAE,mCAAmC;IACpD,IAAI,IAAI,EAAE,IAAI;IACd,IAAI,OAAO,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,IAAI;IACjB,IAAI,MAAM,EAAE,KAAK;IACjB,IAAI,UAAU,EAAE,IAAI;IACpB,IAAI,gBAAgB,EAAE,IAAI;IAC1B,IAAI,WAAW,EAAE,IAAI;IACrB,IAAI,cAAc,EAAE,IAAI;IACxB,IAAI,YAAY,EAAE,IAAI;IACtB,IAAI,GAAG,EAAE,IAAI;IACb,IAAI,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,cAAc;IAClC,CAAC,CAAC;AACF;IACA,MAAM,iBAAiB,GAAG;IAC1B,IAAI,QAAQ,EAAE,IAAI;IAClB,IAAI,IAAI,EAAE,aAAa;IACvB,IAAI,QAAQ,EAAE,KAAK;IACnB,IAAI,KAAK,EAAE,KAAK;IAChB,CAAC,CAAC;AACF;IACO,MAAM,MAAM,GAAG;IACtB,IAAI,YAAY;IAChB,IAAI,iBAAiB;IACrB,IAAI,OAAO,EAAE,IAAI;IACjB,IAAI,UAAU,EAAE,KAAK;IACrB,IAAI,MAAM,EAAE,IAAI;IAChB,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,GAAG;IAClC,IAAI,OAAO,YAAY,CAAC;IACxB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,oBAAoB,GAAG;IACvC,IAAI,OAAO,iBAAiB,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,GAAG;IAC7B,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,OAAO,EAAE;IACzC,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,oBAAoB,CAAC,OAAO,EAAE;IAC9C,IAAI,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACvC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,OAAO,EAAE;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC/D,KAAK;AACL;IACA,IAAI,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,MAAM,EAAE;IAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC3B,QAAQ,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC7D,KAAK;AACL;IACA,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,MAAM,GAAG,IAAI,EAAE;IAC1C,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;IAC/B;;ICnHA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,QAAQ,EAAE;IACnC,IAAI,IAAI,OAAO,CAAC;AAChB;IACA,IAAI,OAAO,CAAC,GAAG,IAAI,KAAK;IACxB,QAAQ,IAAI,OAAO,EAAE;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB;IACA,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;IACtC,YAAY,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,YAAY,OAAO,GAAG,KAAK,CAAC;IAC5B,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,qBAAqB,CAAC,KAAK,EAAE;IAC7C,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,SAAS,EAAE;IACxC,IAAI,OAAO,SAAS;IACpB,SAAS,IAAI,EAAE;IACf,SAAS,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,SAAS,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7D,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;IAChC,QAAQ,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE;IACxB,QAAQ,GAAG,CAAC;AACZ;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC,WAAW;IAC7B,QAAQ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9B,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5G,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,KAAK,EAAE;IACpC,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;IAC5B,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC7C;IACA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACxC,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC1C,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE;IAC1B,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;IAC1B,QAAQ,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;IAC9C,QAAQ,IAAI;IACZ,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG;IACvB,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,KAAK,EAAE;IAClC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC3B,SAAS,KAAK,EAAE,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,MAAM,EAAE;IACpC,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B;;IC/HA;IACA;IACA;AACA;IACO,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B;IACO,MAAM,WAAW,GAAG;IAC3B,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC;IACjE,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;IAC3C,IAAI,MAAM,EAAE,EAAE;IACd,IAAI,GAAG,EAAE,EAAE;IACX,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,KAAK,EAAE,EAAE;IACb,IAAI,MAAM,EAAE,EAAE;IACd,IAAI,KAAK,EAAE,EAAE;IACb,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,GAAG,EAAE,EAAE;IACX,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IACrD,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,IAAI,EAAE,EAAE;IACZ,IAAI,GAAG,EAAE,EAAE;IACX,IAAI,KAAK,EAAE,EAAE;IACb,IAAI,GAAG,EAAE,EAAE;IACX,IAAI,OAAO,EAAE,EAAE;IACf,IAAI,MAAM,EAAE,EAAE;IACd,IAAI,KAAK,EAAE,EAAE;IACb,IAAI,KAAK,EAAE,EAAE;IACb,IAAI,QAAQ,EAAE,EAAE;IAChB,IAAI,GAAG,EAAE,EAAE;IACX,IAAI,IAAI,EAAE,EAAE;IACZ,CAAC,CAAC;AACF;IACO,MAAM,WAAW,GAAG;IAC3B,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;IACzC,CAAC,CAAC;AACF;IACO,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC;IACO,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;AAClC;IACO,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC;IACO,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC;IACO,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;;ICrDnC;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;IACnD,IAAI,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9C;IACA,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,GAAG,EAAE;IACrC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;IACpC,CACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,MAAM,CAAC,GAAG,EAAE;IACrB,IAAI,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC/B,IAAI,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5F;IACA,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,IAAI,EAAE;IACpC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AACrC;IACA,IAAI,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;AAClC;IACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;IACvC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;IACpD,YAAY,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,SAAS,MAAM;IACf,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,QAAQ,CAAC;IACpB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,IAAI,EAAE;IAClC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AACrC;IACA,IAAI,MAAM,WAAW,GAAG,MAAM;IAC9B,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB;IACA,IAAI,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE;IAChC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;IAC9C,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;IACxB,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;IACpD,YAAY,GAAG,IAAI,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC,aAAa,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9E,KAAK;AACL;IACA,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,WAAW,CAAC,IAAI,EAAE;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;IACvB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACxB,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,aAAa,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE;IACnD,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC;IACA,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7C;IACA,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AACtC;IACA,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC;;ICvIA;IACA;IACA;IACA;IACe,MAAM,WAAW,CAAC;IACjC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM;IAC9B,YAAY,EAAE;IACd,YAAY,eAAe,EAAE;IAC7B,YAAY,OAAO;IACnB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;IAChC,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtF,SAAS;AACT;IACA,QAAQ,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IACrF,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC9E,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE;IAC5C,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,2DAA2D,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxH,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;IACtF,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,gBAAgB,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IACzD,YAAY,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAK;IACvC,gBAAgB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACxC,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,aAAa,CAAC;AACd;IACA,YAAY,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK;IACtC,gBAAgB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACxC,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,aAAa,CAAC;IACd,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACvC;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IAChC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC3E,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,kBAAkB,EAAE;IACtE,oBAAoB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5E,iBAAiB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,mCAAmC,EAAE;IAC9F,oBAAoB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzE,iBAAiB,MAAM;IACvB,oBAAoB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3E,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;IAChD,gBAAgB,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E;IACA,gBAAgB,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxE,gBAAgB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;IACjE,oBAAoB,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrF,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC1C,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrH;IACA,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC1E,YAAY,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IACxC,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/D,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IACpC,YAAY,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACnC,YAAY,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrD,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;IACjC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;IACvC,gBAAgB,IAAI,CAAC,OAAO,CAAC;IAC7B,oBAAoB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;IAC3C,oBAAoB,GAAG,EAAE,IAAI,CAAC,GAAG;IACjC,oBAAoB,KAAK,EAAE,CAAC;IAC5B,iBAAiB,CAAC,CAAC;IACnB,aAAa,MAAM;IACnB,gBAAgB,IAAI,CAAC,QAAQ,CAAC;IAC9B,oBAAoB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;IAC/C,oBAAoB,GAAG,EAAE,IAAI,CAAC,GAAG;IACjC,oBAAoB,KAAK,EAAE,CAAC;IAC5B,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACpC,YAAY,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IACjC,gBAAgB,IAAI,CAAC,OAAO,CAAC;IAC7B,oBAAoB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;IAC3C,oBAAoB,GAAG,EAAE,IAAI,CAAC,GAAG;IACjC,oBAAoB,KAAK,EAAE,CAAC;IAC5B,iBAAiB,CAAC,CAAC;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;IACtC,YAAY,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IACpC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1E,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;IAC5C,YAAY,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IAC3C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChF,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;IACtC,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;IACrC,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,SAAS;IACT,KAAK;AACL;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,MAAM,GAAG,uBAAuB,EAAE;IAC7C,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;IACvE,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACzB;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;IAC1C,YAAY,IAAI,CAAC,OAAO,CAAC;IACzB,gBAAgB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;IACvC,gBAAgB,GAAG,EAAE,IAAI,CAAC,GAAG;IAC7B,gBAAgB,MAAM;IACtB,aAAa,CAAC,CAAC;IACf,SAAS;IACT,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,SAAS,EAAE;IACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3D,KAAK;IACL,CAAC;AACD;IACA,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;;ICjN/D;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE;IACtC,IAAI,OAAO,IAAI,WAAW,CAAC;IAC3B,QAAQ,GAAG;IACX,QAAQ,MAAM,EAAE,QAAQ;IACxB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,OAAO,EAAE;IAC9B,IAAI,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IACxC,IAAI,OAAO,IAAI,WAAW,CAAC;IAC3B,QAAQ,GAAG;IACX,QAAQ,IAAI;IACZ,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IAC1C,IAAI,OAAO,IAAI,WAAW,CAAC;IAC3B,QAAQ,GAAG;IACX,QAAQ,IAAI;IACZ,QAAQ,MAAM,EAAE,OAAO;IACvB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IACzC,IAAI,OAAO,IAAI,WAAW,CAAC;IAC3B,QAAQ,GAAG;IACX,QAAQ,IAAI;IACZ,QAAQ,MAAM,EAAE,MAAM;IACtB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IACxC,IAAI,OAAO,IAAI,WAAW,CAAC;IAC3B,QAAQ,GAAG;IACX,QAAQ,IAAI;IACZ,QAAQ,MAAM,EAAE,KAAK;IACrB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC,CAAC;IACP;;ICzLA;IACA;IACA;AACA;IACA,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAO,QAAQ,CAAC,QAAQ;IAC5B,QAAQ,QAAQ,CAAC,QAAQ,CAAC,WAAW;IACrC,QAAQ,WAAW,CAAC,GAAG,EAAE,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAI,IAAI,SAAS,EAAE;IACnB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,MAAM,EAAE,CAAC;IACb,CACA;IACA;IACA;IACA;IACA,SAAS,MAAM,GAAG;IAClB,IAAI,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAC3B;IACA,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,UAAU,EAAE;IACxD,QAAQ,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG;IACA,QAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;IACrC,YAAY,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,MAAM;IACf,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAClD,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IAC1B,QAAQ,SAAS,GAAG,KAAK,CAAC;IAC1B,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;IAClC,QAAQ,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACtC,KAAK,MAAM;IACX,QAAQ,SAAS,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,KAAK;IACL;;ICjDA;IACA;IACA;IACA;IACe,MAAM,SAAS,CAAC;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IACzC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAClC;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;IACxB,YAAY,GAAG,oBAAoB,EAAE;IACrC,YAAY,GAAG,OAAO;IACtB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IACzC,YAAY,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;IAC5C,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACjC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACpE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IACzD,YAAY,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACpC,YAAY,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACnC,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,SAAS;AACT;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,IAAI,EAAE;IAChB,QAAQ,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,SAAS,EAAE;IACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACjC,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;IACjD,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1D,aAAa,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACvD;IACA,QAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;IACrC,YAAY,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,SAAS,MAAM;IACf,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC/B;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,SAAS;IACT,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3D,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE;IACxB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,CAAC;AACrB;IACA,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;IAC3B,YAAY,QAAQ,GAAG,CAAC,CAAC;IACzB,SAAS,MAAM;IACf,YAAY,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC7E;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IACxC,gBAAgB,QAAQ,IAAI,CAAC,CAAC;IAC9B,aAAa,MAAM;IACnB,gBAAgB,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;IAClD,gBAAgB,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;IACzC,aAAa,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;IAC1D,gBAAgB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,aAAa,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;IAC7D,gBAAgB,IAAI,QAAQ,IAAI,GAAG,EAAE;IACrC,oBAAoB,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,iBAAiB,MAAM;IACvB,oBAAoB,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,iBAAiB;IACjB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACjC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IACpD,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D;IACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;IAC1B,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACjC,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACrD,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IACpD,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IAC/B,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACpC;IACA,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL,CAAC;AACD;IACA,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;;ICnL7D;IACA;IACA;IACA;IACe,MAAM,YAAY,CAAC;IAClC;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,UAAU,EAAE;IAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IACtC,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,SAAS,EAAE;IACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACjC,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;IAClD,YAAY,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,SAAS;IACT,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3D,KAAK;IACL,CAAC;AACD;IACA,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;;ICjDhE;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7D,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,QAAQ,IAAI,EAAE,IAAI;IAClB,YAAY,MAAM;IAClB,YAAY,QAAQ;IACpB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;IACtD,IAAI,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrD;IACA,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE;IAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,KAAK,MAAM,IAAI,MAAM,IAAI,OAAO,EAAE;IAClC,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IACxC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,OAAO,EAAE;IAC5B,QAAQ,MAAM,OAAO,GAAG,YAAY,CAACF,MAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,OAAO,EAAE;IAC5B,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IAClE,YAAY,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACrC;IACA;IACA,YAAY,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;IAC1E,gBAAgB,KAAK,IAAI,IAAI,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,OAAO,EAAE;IAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,YAAY,IAAI,OAAO,EAAE;IACjC,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IACvE,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,YAAY,IAAI,OAAO,EAAE;IACjC,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IACvE,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9B,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,SAAS,IAAI,OAAO,EAAE;IAC9B,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE;IACA,QAAQ,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC1D,YAAY,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,OAAO,EAAE;IACvC,IAAI,OAAO,UAAU,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,GAAG;IACjC,IAAI,OAAO,UAAU,EAAE,CAAC,sBAAsB,EAAE,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,GAAG;IAC9B,IAAI,OAAO,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,IAAI,EAAE;IACjC,IAAI,OAAO,UAAU,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7C;;IChIA;IACA;IACA;AACA;IACA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,KAAK,EAAE,EAAE,WAAW,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE;IACzE,IAAI,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,IAAI,EAAE;IAChC,IAAI,MAAM,UAAU,GAAG,WAAW,EAAE;IACpC,SAAS,wBAAwB,CAAC,IAAI,CAAC;IACvC,SAAS,QAAQ,CAAC;AAClB;IACA,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACjC;;IChCA;IACA;IACA;IACA;IACe,MAAM,QAAQ,CAAC;IAC9B;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;IAC5B,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IAC5B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,MAAM,GAAG;IACjB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;IAC3B,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,SAAS,CAAC;AACV;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE;IACtB,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;IAC5B,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,GAAG,CAAC;IACxB,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACnD,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,CAAC,QAAQ,EAAE;IAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD;IACA,QAAQ,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;IACtB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpD;IACA,QAAQ,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;IACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACpC,KAAK;IACL;;IC3EA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,MAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IACvD,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA;IACA,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACzD;IACA,IAAI,IAAI,KAAK,EAAE;IACf,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC9B,YAAY,OAAOC,UAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC9B,YAAY,OAAOC,aAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClD,SAAS;AACT;IACA,QAAQ,OAAOC,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC/F,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACzD;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASD,aAAW,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IAC/D,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAClD,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC3D,YAAY,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAClD,YAAY,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACnD;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASD,UAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IACrD,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC/F,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,WAAS,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IAC3D,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAClD,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC3D,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC1C,YAAY,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC/C;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IAC1D,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACzD;IACA,IAAI,IAAI,KAAK,EAAE;IACf,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC9B,YAAY,OAAOC,aAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClD,SAAS;AACT;IACA,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC9B,YAAY,OAAOC,gBAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrD,SAAS;AACT;IACA,QAAQ,OAAOC,cAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC/F,QAAQ,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASD,gBAAc,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IAClE,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,OAAO,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAClD,QAAQ,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IACzD,YAAY,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,YAAY,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASD,aAAW,CAAC,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IACxD,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;IAC7B,QAAQ,OAAO,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IACxE,QAAQ,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IACvC,YAAY,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;IACnC,YAAY,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,cAAY,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;IAC9D,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,OAAO,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAClD,QAAQ,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE;IACtC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IACzD,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACvC,YAAY,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvD;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC5TA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACvE,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IACpD,YAAY,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5C,SAAS;AACT;IACA,QAAQ,OAAOH,SAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;IAC3B,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,KAAK,YAAY,QAAQ,EAAE;IACnC,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC;IACA,QAAQ,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,KAAK;AACL;IACA,IAAI,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,YAAY,QAAQ,EAAE;IACtE,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC;IACA,QAAQ,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACxE,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IACpD,YAAY,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,OAAOJ,MAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;IAC3B,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,KAAK;AACL;IACA,IAAI,IAAI,KAAK,YAAY,QAAQ,EAAE;IACnC,QAAQ,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,YAAY,QAAQ,EAAE;IACtE,QAAQ,OAAO,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,OAAO,EAAE,CAAC;IACd,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE;IACzD,IAAI,IAAI,CAAC,MAAM,EAAE;IACjB,QAAQ,OAAO,CAAC,CAAC,KAAK,YAAY,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;IAC5B,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC1B,QAAQ,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;IAClE,QAAQ,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjD,KAAK;AACL;IACA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAChC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE;IACjE,IAAI,IAAI,CAAC,MAAM,EAAE;IACjB,QAAQ,OAAO,CAAC,CAAC,KAAK,YAAY,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;IAC5B,QAAQ,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC1B,QAAQ,OAAO,CAAC,IAAI,KAAK,CAAC,CAACI,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;IAClE,QAAQ,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,KAAK;AACL;IACA,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAChC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;IAC/C,IAAI,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC7C;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACzB,QAAQ,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnF,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1F;IACA,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;IAChD,IAAI,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC7C;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACzB,QAAQ,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpF,KAAK;AACL;IACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACjH;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,gBAAgB,CAAC,OAAO,EAAE;IACnC,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK;AACL;IACA,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB;IACA,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IACtB,QAAQ,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,MAAM;IACX,QAAQ,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE;IAC1B,QAAQ,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;IACxB,QAAQ,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE;IAC1B,QAAQ,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;IACxB,QAAQ,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE;;IC9OA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASI,SAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;IACrD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACtF;IACA,IAAI,KAAK,EAAE,CAAC;AACZ;IACA,IAAI,OAAO,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACvD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACnC,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE;IACnD,YAAY,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,SAAS;IACT,KAAK;IACL;;IC3CA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC1C,IAAI,OAAOC,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ;IACR,YAAY,SAAS,EAAE,KAAK;IAC5B,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC3C,IAAI,OAAOC,UAAQ;IACnB,QAAQ,QAAQ;IAChB,QAAQ;IACR,YAAY,SAAS,EAAE,KAAK;IAC5B,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC1C,IAAI,OAAON,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW;IAClC,gBAAgB,SAAS;IACzB,gBAAgB,QAAQ,GAAG,CAAC;IAC5B,oBAAoB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,oBAAoB,EAAE;IACtB,aAAa;IACb,QAAQ,OAAO;IACf,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASO,SAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC3C,IAAI,OAAOP,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW;IAClC,gBAAgB,SAAS;IACzB,gBAAgB,QAAQ,GAAG,CAAC;IAC5B,oBAAoB,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,oBAAoB,EAAE;IACtB,aAAa;IACb,QAAQ,OAAO;IACf,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASQ,UAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC5C,IAAI,OAAOR,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACrC,YAAY,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW;IAClC,gBAAgB,WAAW;IAC3B,gBAAgB,QAAQ,GAAG,CAAC;IAC5B,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IACtF,oBAAoB,EAAE;IACtB,aAAa,CAAC;IACd,SAAS;IACT,QAAQ;IACR,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASS,WAAS,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC7C,IAAI,OAAOT,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACrC,YAAY,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW;IAClC,gBAAgB,WAAW;IAC3B,gBAAgB,QAAQ,GAAG,CAAC;IAC5B,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IACtF,oBAAoB,EAAE;IACtB,aAAa,CAAC;IACd,SAAS;IACT,QAAQ;IACR,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,SAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC3C,IAAI,OAAOH,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACrC,YAAY,IAAI,QAAQ,KAAK,CAAC,EAAE;IAChC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACvD,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE;IACpC,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5D,iBAAiB,MAAM;IACvB,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9D,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7D,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpD;IACA,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC;IACtD,YAAY,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACjD,gBAAgB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IACzC,gBAAgB,cAAc,GAAG,OAAO,CAAC,MAAM;IAC/C,oBAAoB,GAAG;IACvB,oBAAoB,YAAY,CAAC;IACjC,gBAAgB,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC;IACxC,aAAa,MAAM;IACnB,gBAAgB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,gBAAgB,cAAc,GAAG,OAAO,CAAC,MAAM;IAC/C,oBAAoB,GAAG;IACvB,oBAAoB,aAAa,CAAC;IAClC,gBAAgB,OAAO,GAAG,GAAG,KAAK,MAAM,CAAC;IACzC,aAAa;AACb;IACA,YAAY,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE;IAChC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACxG,aAAa,MAAM;IACnB,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,aAAa;IACb,SAAS;IACT,QAAQ;IACR,YAAY,SAAS,EAAE,QAAQ;IAC/B,YAAY,MAAM,EAAE,IAAI;IACxB,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASK,UAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC5C,IAAI,OAAOL,SAAO;IAClB,QAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACrC,YAAY,IAAI,QAAQ,KAAK,CAAC,EAAE;IAChC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACvD,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE;IACpC,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5D,iBAAiB,MAAM;IACvB,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9D,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7D,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpD;IACA,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC;IACtD,YAAY,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACjD,gBAAgB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IACzC,gBAAgB,cAAc,GAAG,OAAO,CAAC,MAAM;IAC/C,oBAAoB,GAAG;IACvB,oBAAoB,YAAY,CAAC;IACjC,gBAAgB,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC;IACxC,aAAa,MAAM;IACnB,gBAAgB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,gBAAgB,cAAc,GAAG,OAAO,CAAC,MAAM;IAC/C,oBAAoB,GAAG;IACvB,oBAAoB,aAAa,CAAC;IAClC,gBAAgB,OAAO,GAAG,GAAG,KAAK,MAAM,CAAC;IACzC,aAAa;AACb;IACA,YAAY,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtF,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE;IAChC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACxG,aAAa,MAAM;IACnB,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,aAAa;IACb,SAAS;IACT,QAAQ;IACR,YAAY,SAAS,EAAE,QAAQ;IAC/B,YAAY,MAAM,EAAE,IAAI;IACxB,YAAY,GAAG,OAAO;IACtB,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASU,WAAS,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC7C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,SAAS,EAAE,QAAQ;IAC3B,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC;AACN;IACA,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;IAC9C,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAChD,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACrD;IACA,QAAQ,OAAO,IAAI,SAAS;IAC5B,YAAY,IAAI;IAChB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACzC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChE,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9D;IACA,gBAAgB,IAAI,QAAQ,KAAK,CAAC,EAAE;IACpC,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3D,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE;IACxC,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAChE,qBAAqB,MAAM;IAC3B,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClE,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjE,qBAAqB;IACrB,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxD;IACA,gBAAgB,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,cAAc,CAAC;IAC5D,gBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACrD,oBAAoB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IAC7C,oBAAoB,SAAS,GAAG,QAAQ,CAAC;IACzC,oBAAoB,IAAI,GAAG,KAAK,KAAK,EAAE;IACvC,wBAAwB,cAAc,GAAG,OAAO,CAAC,MAAM;IACvD,4BAA4B,GAAG;IAC/B,4BAA4B,YAAY,CAAC;IACzC,qBAAqB;IACrB,iBAAiB,MAAM;IACvB,oBAAoB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5C,oBAAoB,SAAS,GAAG,OAAO,CAAC;IACxC,oBAAoB,IAAI,GAAG,KAAK,MAAM,EAAE;IACxC,wBAAwB,cAAc,GAAG,OAAO,CAAC,MAAM;IACvD,4BAA4B,GAAG;IAC/B,4BAA4B,aAAa,CAAC;IAC1C,qBAAqB;IACrB,iBAAiB;AACjB;IACA,gBAAgB,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5D;IACA,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE;IACA,gBAAgB,IAAI,cAAc,EAAE;IACpC,oBAAoB,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE;IACxC,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAChH,qBAAqB,MAAM;IAC3B,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,qBAAqB;IACrB,iBAAiB;IACjB,aAAa;IACb,YAAY,OAAO;IACnB,SAAS,CAAC;IACV,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,EAAE,CAAC;AACZ;IACA,IAAI,OAAO,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC9C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,SAAS,EAAE,QAAQ;IAC3B,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,GAAG,OAAO;IAClB,KAAK,CAAC;AACN;IACA,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;IAC9C,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAChD,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACrD;IACA,QAAQ,OAAO,IAAI,SAAS;IAC5B,YAAY,IAAI;IAChB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK;IACzC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChE,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9D;IACA,gBAAgB,IAAI,QAAQ,KAAK,CAAC,EAAE;IACpC,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3D,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE;IACxC,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAChE,qBAAqB,MAAM;IAC3B,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClE,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjE,qBAAqB;IACrB,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxD;IACA,gBAAgB,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,cAAc,CAAC;IAC5D,gBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACrD,oBAAoB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IAC7C,oBAAoB,SAAS,GAAG,QAAQ,CAAC;IACzC,oBAAoB,IAAI,GAAG,KAAK,KAAK,EAAE;IACvC,wBAAwB,cAAc,GAAG,OAAO,CAAC,MAAM;IACvD,4BAA4B,GAAG;IAC/B,4BAA4B,YAAY,CAAC;IACzC,qBAAqB;IACrB,iBAAiB,MAAM;IACvB,oBAAoB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5C,oBAAoB,SAAS,GAAG,OAAO,CAAC;IACxC,oBAAoB,IAAI,GAAG,KAAK,MAAM,EAAE;IACxC,wBAAwB,cAAc,GAAG,OAAO,CAAC,MAAM;IACvD,4BAA4B,GAAG;IAC/B,4BAA4B,aAAa,CAAC;IAC1C,qBAAqB;IACrB,iBAAiB;AACjB;IACA,gBAAgB,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE;IACA,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE;IACA,gBAAgB,IAAI,cAAc,EAAE;IACpC,oBAAoB,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE;IACxC,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAChH,qBAAqB,MAAM;IAC3B,wBAAwB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,qBAAqB;IACrB,iBAAiB;IACjB,aAAa;IACb,YAAY,OAAO;IACnB,SAAS,CAAC;IACV,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,EAAE,CAAC;AACZ;IACA,IAAI,OAAO,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C;;ICxcA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE;IAC5C,IAAI,OAAO,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3D,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;IACnC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC9C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,OAAO,WAAW;IACtB,QAAQC,gBAAc,CAAC,QAAQ,CAAC;IAChC,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASA,gBAAc,CAAC,QAAQ,EAAE;IACzC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM;IACb,QAAQ,CAAC,MAAM,EAAE,IAAI,KAAK;IAC1B,YAAY;IACZ,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACxD,gBAAgB,UAAU,CAAC,IAAI,CAAC;IAChC,gBAAgB,QAAQ,CAAC,IAAI,CAAC;IAC9B,cAAc;IACd,gBAAgB,OAAO,MAAM,CAAC,MAAM;IACpC,oBAAoBA,gBAAc;IAClC,wBAAwB,IAAI,CAAC,gBAAgB;IAC7C,4BAA4B,yBAAyB;IACrD,yBAAyB;IACzB,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY;IACZ,gBAAgB,SAAS,CAAC,IAAI,CAAC;IAC/B,gBAAgB,IAAI,CAAC,OAAO,CAAC,0IAA0I,CAAC;IACxK,cAAc;IACd,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnD,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY;IACZ,gBAAgB,SAAS,CAAC,IAAI,CAAC;IAC/B,gBAAgB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAChD,cAAc;IACd,gBAAgB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;IAC3D,oBAAoB,MAAM,CAAC,IAAI;IAC/B,wBAAwB;IACxB,4BAA4B,IAAI;IAChC,4BAA4B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;IACrD,yBAAyB;IACzB,qBAAqB,CAAC;IACtB,iBAAiB;IACjB,aAAa,MAAM;IACnB,gBAAgB,MAAM,CAAC,IAAI;IAC3B,oBAAoB;IACpB,wBAAwB,IAAI;IAC5B,wBAAwB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;IAC/C,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,QAAQ,EAAE;IACV,KAAK,CAAC;IACN,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE;IAC/B,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;IAC7B,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,OAAO,CAAC,CAAC;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,YAAY,OAAO,CAAC,CAAC,CAAC;IACtB,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,CAAC,CAAC;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;IAC/B,YAAY,OAAO,CAAC,CAAC,CAAC;IACtB,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;IAC/B,YAAY,OAAO,CAAC,CAAC;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,CAAC,CAAC,CAAC;IACtB,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,YAAY,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;IACpC,YAAY,OAAO,CAAC,CAAC;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACxD;IACA,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,IAAI,GAAG,GAAG,IAAI,CAAC,8BAA8B,EAAE;IACjG,YAAY,OAAO,CAAC,CAAC,CAAC;IACtB,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,IAAI,GAAG,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAC7F,YAAY,OAAO,CAAC,CAAC;IACrB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,CAAC;IACjB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC;;ICvNA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC5C,IAAI,OAAOC,UAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASA,UAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5F,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,UAAU,GAAG,YAAY;IACvC,YAAY,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpC,YAAY,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvC;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACxC,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;IACpC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC;IACA,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE;IAC3D,IAAI,OAAOC,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,gBAAc,CAAC,QAAQ,EAAE;IACzC,IAAI,MAAM,KAAK,GAAGN,MAAI,CAAC,QAAQ,CAAC,CAAC;AACjC;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA;IACA,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IAChD,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;AAChC;IACA,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;IAC5B,QAAQ,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM;IACX,QAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,QAAQ,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,uBAAuB,CAAC;IACzC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASO,UAAQ,CAAC,QAAQ,EAAE;IACnC,IAAI,OAAOJ,UAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASK,UAAQ,CAAC,QAAQ,EAAE;IACnC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC3C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;IACxC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa;AACb;IACA,YAAY,MAAM;IAClB,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACnF,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClD;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;IACxC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,MAAM;IACtB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B;IACA,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE;IACvC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/B;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IAC/B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASP,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACnF,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClD;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC;IAC3B,QAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;IACvC,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,MAAM;IACtB,aAAa;AACb;IACA,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,MAAM;IACtB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC;IACA,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASQ,MAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC3C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;IAC5C,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa;AACb;IACA,YAAY,MAAM;IAClB,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACnF,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClD;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC5B,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;IAC5B,QAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;IAC5C,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,MAAM;IACtB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC;IACA,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE;IACjC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7E,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,YAAY;IACrC,YAAY,MAAM,CAAC,QAAQ;IAC3B,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B;IACA,QAAQ,IAAI,OAAO,CAAC;IACpB,QAAQ,KAAK,OAAO,IAAI,QAAQ,EAAE;IAClC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IAC1C,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IACtC,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB;;IC7bA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,0BAA0B,CAAC,IAAI,EAAE,QAAQ,EAAE;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK;IACvB,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnE;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IAC7B,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACtC,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,OAAOZ,SAAO;IACtB,YAAY,MAAM;IAClB,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChD,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IAC/C,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE;IACjD,IAAI,OAAO,CAAC,MAAM;IAClB,QAAQ,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAClD,YAAY,MAAM;IAClB,YAAYA,SAAO;IACnB,gBAAgB,MAAM;IACtB,gBAAgB,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpD,gBAAgB,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACnD,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1D,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,+DAA+D,CAAC;IACvG,QAAQ,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC;IAClD,QAAQ,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChD;IACA,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD;IACA,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE;IACtD,YAAY,YAAY,EAAE,IAAI;IAC9B,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,KAAK,EAAE,QAAQ;IAC3B,SAAS,CAAC,CAAC;IACX,QAAQ,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE;IACvD,YAAY,YAAY,EAAE,IAAI;IAC9B,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,KAAK,EAAE,IAAI;IACvB,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE;IACrD,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;IACnC,YAAY,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,SAAS;AACT;IACA,QAAQ,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE;IACtD,YAAY,YAAY,EAAE,IAAI;IAC9B,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,KAAK,EAAE,IAAI;IACvB,SAAS,CAAC,CAAC;IACX,QAAQ,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE;IACvD,YAAY,QAAQ,EAAE,IAAI;IAC1B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,OAAO,KAAK,CAAC,cAAc,CAAC;AACpC;IACA,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,CAAC;IACN,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,YAAE/B,UAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;IAC/H,IAAI,IAAI,IAAI,IAAIA,UAAQ,EAAE;IAC1B,QAAQ,IAAI,GAAG4C,QAAS,CAAC,IAAI,CAAC,CAAC;AAC/B;IACA;IACA,QAAQ,IAAI,EAAE,EAAE;IAChB,YAAY,EAAE,GAAGA,QAAS,CAAC,EAAE,CAAC,CAAC;IAC/B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACpD;IACA,QAAQ,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;IACzD,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,cAAc,EAAE;IAC5B,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;IACnC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;IAC1B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW;IAC9D,YAAY,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;IACnC,YAAY,WAAW,CAAC,SAAS,CAAC;AAClC;IACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;IACpC,YAAY,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;IAC7D,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,cAAc,IAAI,CAAC,OAAO,EAAE;IAC5C,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;IACvC,aAAa;AACb;IACA,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,SAAS,CAAC;AACV;IACA,QAAQ,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK;IAClC,YAAY,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,GAAG,CAAC,EAAE;IACjE,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;IAC3C,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,cAAc,EAAE;IAChC,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;IACvC,aAAa;AACb;IACA,YAAYC,aAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,YAAYA,aAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,SAAS,CAAC;AACV;IACA,QAAQC,UAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,QAAQA,UAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE;IACtD,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQ,IAAI,iBAAiB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;IAClF,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,CAAC,QAAQ,EAAE;IACzC,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;IACvC,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACzG,IAAI,OAAO,CAAC,KAAK,KAAK;IACtB,QAAQD,aAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtE,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,CAAC;IACN;;IChPA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC3I,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IACxC,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACpD;IACA,QAAQ,MAAM,SAAS,GAAG;IAC1B,YAAY,QAAQ;IACpB,YAAY,QAAQ;IACpB,YAAY,YAAY;IACxB,YAAY,OAAO;IACnB,YAAY,OAAO;IACnB,SAAS,CAAC;AACV;IACA,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,aAAa;AACb;IACA,YAAY,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChD;IACA,YAAY,IAAI,YAAY,GAAG,QAAQ,CAAC;AACxC;IACA,YAAY,IAAI,YAAY,EAAE;IAC9B,gBAAgB,YAAY,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzG,aAAa;AACb;IACA,YAAY,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;AACxD;IACA,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC7E,aAAa,MAAM;IACnB,gBAAgB,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxE,aAAa;AACb;IACA,YAAY,YAAY,GAAG,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACrE;IACA,YAAY,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;IAClD,YAAY,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5C,YAAY,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;AACpD;IACA,YAAY,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;IAC5C,gBAAgB,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,UAAU,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC7D;IACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACrF,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,kBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAClH,IAAID,UAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,sBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACtH,IAAIF,UAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,cAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACpG,IAAIH,UAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASI,aAAW,CAAC,QAAQ,EAAE,aAAa,EAAE;IACrD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C;IACA,QAAQ,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;IAC5D,YAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IAChD,gBAAgBJ,UAAQ;IACxB,oBAAoB,aAAa;IACjC,oBAAoB,SAAS,CAAC,SAAS;IACvC,oBAAoB,SAAS,CAAC,QAAQ;IACtC,oBAAoB;IACpB,wBAAwB,OAAO,EAAE,SAAS,CAAC,OAAO;IAClD,wBAAwB,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpD,wBAAwB,OAAO,EAAE,SAAS,CAAC,OAAO;IAClD,wBAAwB,YAAY,EAAE,SAAS,CAAC,YAAY;IAC5D,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;IACb,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASD,aAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACtG,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,WAAW,CAAC;IACpB,IAAI,IAAI,UAAU,EAAE;IACpB,QAAQ,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAC7C;IACA,QAAQ,WAAW,GAAG,EAAE,CAAC;AACzB;IACA,QAAQ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IAC5C,YAAY,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACxD;IACA,YAAY,IAAI,EAAE,aAAa,IAAI,WAAW,CAAC,EAAE;IACjD,gBAAgB,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;IAChD,aAAa;AACb;IACA,YAAY,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,SAAS;IACT,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C;IACA,QAAQ,KAAK,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC9E,YAAY,IAAI,WAAW,IAAI,EAAE,aAAa,IAAI,WAAW,CAAC,EAAE;IAChE,gBAAgB,SAAS;IACzB,aAAa;AACb;IACA,YAAY,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK;IACjE,gBAAgB,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK;IACnF,oBAAoB,IAAI,SAAS,KAAK,aAAa,EAAE;IACrD,wBAAwB,OAAO,IAAI,CAAC;IACpC,qBAAqB;AACrB;IACA,oBAAoB,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AACpE;IACA,oBAAoB,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE;IACpB,oBAAoB,OAAO,IAAI,CAAC;IAChC,iBAAiB;AACjB;IACA,gBAAgB,IAAI,QAAQ,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;IACjE,oBAAoB,OAAO,IAAI,CAAC;IAChC,iBAAiB;AACjB;IACA,gBAAgB,IAAI,QAAQ,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;IACjE,oBAAoB,OAAO,IAAI,CAAC;IAChC,iBAAiB;AACjB;IACA,gBAAgB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE;IACvE,oBAAoB,OAAO,IAAI,CAAC;IAChC,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;AACnG;IACA,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;IAC7C,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASM,qBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnG,IAAIN,aAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnE,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASO,cAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACvH,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IAChC,QAAQ,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC5C;IACA,QAAQ,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;IACrD,YAAY,MAAM;IAClB,YAAY,OAAO;IACnB,YAAY,UAAU;IACtB,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,IAAI,EAAE;IAClB,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE;IACjC,YAAY,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxE,YAAY,SAAS,CAAC,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrE,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACpH,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACxC;IACA,IAAI,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;IACjD,QAAQ,MAAM;IACd,QAAQ,OAAO;IACf,QAAQ,UAAU;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,SAAS,KAAK,KAAK,EAAE;IAC7B,QAAQ,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,QAAQ,SAAS,CAAC,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjE,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC;;ICpUA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACxG;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;IAC/B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C;IACA,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,EAAE;IAC1C,YAAY,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACvE,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,IAAI,UAAEC,QAAM,GAAG,KAAK,QAAEC,MAAI,GAAG,KAAK,cAAEC,YAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACxG,IAAI,IAAIF,QAAM,IAAIG,MAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACrC,QAAQ,MAAM,UAAU,GAAGA,MAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7C;IACA,QAAQ,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;IAC5D,YAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IAChD,gBAAgBZ,UAAQ;IACxB,oBAAoB,KAAK;IACzB,oBAAoB,SAAS,CAAC,SAAS;IACvC,oBAAoB,SAAS,CAAC,QAAQ;IACtC,oBAAoB;IACpB,wBAAwB,OAAO,EAAE,SAAS,CAAC,OAAO;IAClD,wBAAwB,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpD,wBAAwB,YAAY,EAAE,SAAS,CAAC,YAAY;IAC5D,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAIU,MAAI,IAAIG,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACjC,QAAQ,MAAM,QAAQ,GAAGA,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,QAAQA,IAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,IAAIF,YAAU,IAAIG,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7C,QAAQ,MAAM,cAAc,GAAGA,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrD;IACA,QAAQ,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;IAChD,YAAY,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;IAC5D,YAAY,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,YAAY,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,UAAEL,QAAM,QAAEC,MAAI,cAAEC,YAAU,EAAE,CAAC,CAAC;IAC7E,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASI,QAAM,CAAC,QAAQ,EAAE;IACjC;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACtD;IACA;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACxC,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACvE,gBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,aAAa;AACb;IACA,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3B,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;IAC1B,YAAY,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE;IACjC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACnE,YAAY,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS;AACT;IACA;IACA,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IAC1B,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,IAAI,EAAE;IACjC,IAAI,IAAIL,MAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC3B,QAAQ,MAAM,UAAU,GAAGA,MAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7C;IACA,QAAQ,IAAI,QAAQ,IAAI,UAAU,EAAE;IACpC,YAAY,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACxD,gBAAgB,OAAO,EAAE,KAAK;IAC9B,gBAAgB,UAAU,EAAE,KAAK;IACjC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC9E,YAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IAChD,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAChH,aAAa;IACb,SAAS;AACT;IACA,QAAQA,MAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAIE,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/B,QAAQ,MAAM,cAAc,GAAGA,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;IAChD,YAAY,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7B,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAID,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACzB,QAAQA,IAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK;AACL;IACA;IACA,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACpC,QAAQ,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,KAAK;AACL;IACA;IACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;IACzB,QAAQ,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,KAAK;AACL;IACA;IACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASK,YAAU,CAAC,QAAQ,EAAE,aAAa,EAAE;IACpD,IAAIC,aAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACzC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASA,aAAW,CAAC,QAAQ,EAAE,aAAa,EAAE;IACrD;IACA,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACrC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC3C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;AACtC;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IAChC,QAAQ,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,KAAK;AACL;IACA,IAAI,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC5C;IACA,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI;IAC9B,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK;IAC1B,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IACnC,YAAY,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;IAC7C,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,YAAY,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,MAAM;IACf,YAAY,MAAM,GAAGX,OAAK,CAAC,MAAM,EAAE;IACnC,gBAAgB,MAAM,EAAE,IAAI;IAC5B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,UAAU,EAAE,IAAI;IAChC,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,SAAS;IACT,KAAK;AACL;IACA,IAAIS,QAAM,CAAC,KAAK,CAAC,CAAC;IAClB;;ICnSA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,cAAY,CAAC,QAAQ,EAAE,SAAS,EAAE;IAClD,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,SAAS,EAAE;IACnB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC,WAAW;IAC7B,QAAQ,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;IAClC,aAAa,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1E,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC1C,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,GAAG,EAAE;IACb,QAAQ,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B;IACA,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC,WAAW;IAC7B,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,OAAOC,aAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASA,aAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAChD,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,OAAOD,aAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,UAAQ,CAAC,QAAQ,EAAE;IACnC,IAAI,OAAOF,aAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,iBAAe,CAAC,QAAQ,EAAE,SAAS,EAAE;IACrD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,eAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC7C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B;IACA,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,gBAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE;IACnD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IACzD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACnD;IACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC3D,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE;IACjD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D;IACA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACtD,QAAQ,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;IACxC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACxC,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;IAC1B,YAAY,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC9B,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAClD;IACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC3D,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9B,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;IACxC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACxC,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,SAAS;AACT;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;IAC1B,YAAY,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAChC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE;IAC1C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B,KAAK;IACL;;ICrQA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE,aAAa,EAAE;IACnD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQC,SAAO,CAAC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACzC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,GAAG,EAAE;IACvC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAClC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,QAAQ,CAAC,GAAG,CAAC;IACrB,QAAQ,QAAQ,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC1C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;IACA,QAAQ,IAAI,GAAG,EAAE;IACjB,YAAY,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;IACnD,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASF,SAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE;IAC9C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1C;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7B,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;IACA,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK;IACL;;IChHA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,UAAQ,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE;IAC/C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACzB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACvC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,KAAG,CAAC,QAAQ,EAAE,KAAK,EAAE;IACrC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC3B,QAAQ,MAAM,CAAC,GAAG;IAClB,YAAY,IAAI;IAChB,YAAY,SAAS,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAC9C,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;IACA,IAAI,IAAI,CAAC,KAAK,EAAE;IAChB,QAAQ,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACjC,KAAK;AACL;IACA,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B;IACA,IAAI,OAAO,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE;IAC1C,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,KAAK,EAAE;IACf,QAAQ,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC;IACA,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;IACpC,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE;IAC/B,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE;IAClD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACzB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;IAC1C,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7E,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3C;IACA,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IACvD,QAAQ,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC;IACA;IACA,QAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;IACtE,YAAY,KAAK,IAAI,IAAI,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW;IAClC,gBAAgB,KAAK;IACrB,gBAAgB,KAAK;IACrB,gBAAgB,SAAS;IACzB,oBAAoB,WAAW;IAC/B,oBAAoB,EAAE;IACtB,aAAa,CAAC;IACd,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE;IAC/B,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9C,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE;IACjC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW;IAC9B,YAAY,SAAS;IACrB,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;IACzC,gBAAgB,EAAE;IAClB,gBAAgB,MAAM;IACtB,SAAS,CAAC;IACV,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE;IAClD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACzB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;IACzC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,SAAS;IACT,KAAK;IACL;;ICnMA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1D,IAAI,MAAM,OAAO,GAAGC,MAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/C;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;IAC3C,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE;IACvD,IAAI,MAAM,YAAY,GAAGD,MAAI,CAAC,iBAAiB,CAAC,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,YAAY,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IACjC,IAAI,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC/B,IAAI,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;IACxF,IAAI,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACtF;IACA,IAAI,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IACpC,IAAI,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;AACpC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,OAAO,GAAGA,MAAI,CAAC,IAAI,CAAC,CAAC;AACnC;IACA,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;IAClD,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE;IAChD,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC;IACvB,QAAQ,IAAI,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;IAClD,YAAY,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IAC1D,SAAS,MAAM,IAAI,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE;IAC3D,YAAY,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,MAAM,OAAO,GAAGT,KAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,YAAY,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrF,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,EAAE;IAChD,YAAY,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;IACvD,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;IAC7D,YAAY,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAC7D,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,MAAM,MAAM,GAAGA,KAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,KAAK,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjF,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,SAAS;AACT;IACA,QAAQ,IAAIA,KAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,QAAQ,EAAE;IAChD,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC3D,SAAS;IACT,KAAK;AACL;IACA,IAAI,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;IACrC,IAAI,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;AACrC;IACA,IAAI,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,WAAW,EAAE;IAClE,QAAQU,WAAS,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC5C,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAChE,IAAI,MAAM,UAAU,GAAGH,QAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD;IACA,IAAI,IAAI,CAAC,UAAU,EAAE;IACrB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASI,YAAU,CAAC,QAAQ,EAAE,aAAa,EAAE;IACpD,IAAI,MAAM,WAAW,GAAGJ,QAAM,CAAC,aAAa,CAAC,CAAC;AAC9C;IACA,IAAI,IAAI,CAAC,WAAW,EAAE;IACtB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAOG,QAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1D,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,WAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3C;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,IAAI,GAAGF,QAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,QAAQ,IAAI,IAAI,IAAI,IAAI,GAAG,eAAe,EAAE;IAC5C,YAAY,eAAe,GAAG,IAAI,CAAC;IACnC,YAAY,OAAO,GAAG,IAAI,CAAC;IAC3B,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,OAAO,CAAC;IACnB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,eAAa,CAAC,QAAQ,EAAE,aAAa,EAAE;IACvD,IAAI,MAAM,WAAW,GAAGN,QAAM,CAAC,aAAa,CAAC,CAAC;AAC9C;IACA,IAAI,IAAI,CAAC,WAAW,EAAE;IACtB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAOK,WAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7D,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,UAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7E,IAAI,MAAM,OAAO,GAAGN,MAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/C;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI;IACrC,QAAQ,OAAO,CAAC,KAAK;IACrB,QAAQ,GAAG,CAAC;AACZ;IACA,IAAI,OAAO,KAAK;IAChB,QAAQ,YAAY,CAAC,OAAO,CAAC;IAC7B,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASO,UAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7E,IAAI,MAAM,OAAO,GAAGP,MAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/C;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG;IACpC,QAAQ,OAAO,CAAC,MAAM;IACtB,QAAQ,GAAG,CAAC;AACZ;IACA,IAAI,OAAO,KAAK;IAChB,QAAQ,YAAY,CAAC,OAAO,CAAC;IAC7B,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASQ,UAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5D,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU;IAC1B,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,EAAE;IAChB,QAAQ,IAAI,YAAY,GAAG,IAAI,CAAC;AAChC;IACA,QAAQ,OAAO,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE;IACzD,YAAY,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC;IAChD,YAAY,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;IAC/C,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASR,MAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACxD,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAChD;IACA,IAAI,IAAI,MAAM,EAAE;IAChB,QAAQ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IACnC,QAAQ,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;IACnC,QAAQ,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;IACnC,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB;;ICvRA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASS,YAAU,CAAC,QAAQ,EAAE;IACrC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACxB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAChD,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE;IACrC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACxB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE;IAC1C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,SAAS,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IACrC,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC;IACjD,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;IAChD,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IAChC,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC/B,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;IACxC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,SAAS,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IACrC,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC;IACjD,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IAChC,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;IACxC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,SAAS,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IACrC,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;IAChD,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC/B,SAAS;IACT,KAAK;IACL;;ICzHA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,GAAG,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAChF,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACnC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACxB,QAAQ,OAAO,KAAK;IACpB,YAAY,IAAI,CAAC,WAAW;IAC5B,YAAY,IAAI,CAAC,WAAW,CAAC;IAC7B,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC;IACjC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;AACnC;IACA,IAAI,IAAI,OAAO,IAAI,WAAW,EAAE;IAChC,QAAQ,MAAM,IAAI,QAAQ,CAACvB,KAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxD,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1D,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC7D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IACpD,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IACvD,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASwB,OAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,GAAG,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC/E,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACnC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IACxB,QAAQ,OAAO,KAAK;IACpB,YAAY,IAAI,CAAC,UAAU;IAC3B,YAAY,IAAI,CAAC,UAAU,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC1B,QAAQ,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC;IAChC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;AAClC;IACA,IAAI,IAAI,OAAO,IAAI,WAAW,EAAE;IAChC,QAAQ,MAAM,IAAI,QAAQ,CAACxB,KAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IACtD,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IACvD,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3D,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC5D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE;IAC/B,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,QAAQ,MAAM,IAAI,QAAQ,CAACA,KAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IACtD,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB;;IC7GA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,IAAI,EAAE;IAChC,IAAI,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,MAAM;IACtC,SAAS,KAAK,CAAC,GAAG,CAAC;IACnB,SAAS,IAAI,CAAC,CAAC,MAAM;IACrB,YAAY,MAAM;IAClB,iBAAiB,SAAS,EAAE;IAC5B,iBAAiB,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI;IACnD,SAAS;IACT,SAAS,SAAS,EAAE,CAAC;AACrB;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;IACjB,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,OAAO,kBAAkB;IAC7B,QAAQ,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACzE,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,uCAAuC,CAAC,CAAC;AAClE;IACA,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,EAAE;IAChB,QAAQ,MAAM,IAAI,SAAS,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7F,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,OAAO,EAAE;IACjB,QAAQ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;IAC9B,QAAQ,IAAI,CAAC,OAAO;IACpB,YAAY,IAAI,CAAC,OAAO,EAAE;IAC1B,YAAY,OAAO,GAAG,IAAI;IAC1B,SAAS,CAAC;IACV,QAAQ,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,EAAE;IAChB,QAAQ,MAAM,IAAI,SAAS,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC;;ICtFA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAASyB,MAAI,CAAC,QAAQ,EAAE;IAC/B,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,IAAI,UAAU,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE;IAChD,QAAQ,QAAQ,EAAE,CAAC;IACnB,KAAK,MAAM;IACX,QAAQ,SAAS,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,KAAK;IACL;;ICxDA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE,aAAa,EAAE;IAC/C;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjB;IACA,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;IAC7C,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,YAAY,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,MAAM;IACf,YAAY,MAAM,GAAG5D,OAAK,CAAC,MAAM,EAAE;IACnC,gBAAgB,MAAM,EAAE,IAAI;IAC5B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,UAAU,EAAE,IAAI;IAChC,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS6D,QAAM,CAAC,QAAQ,EAAE,aAAa,EAAE;IAChD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;IAC7C,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,YAAY,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,MAAM;IACf,YAAY,MAAM,GAAG7D,OAAK,CAAC,MAAM,EAAE;IACnC,gBAAgB,MAAM,EAAE,IAAI;IAC5B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,UAAU,EAAE,IAAI;IAChC,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS8D,UAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE;IAClD,IAAID,QAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,QAAM,CAAC,QAAQ,EAAE,aAAa,EAAE;IAChD;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;IAC7C,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,YAAY,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,MAAM;IACf,YAAY,MAAM,GAAG/D,OAAK,CAAC,MAAM,EAAE;IACnC,gBAAgB,MAAM,EAAE,IAAI;IAC5B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,UAAU,EAAE,IAAI;IAChC,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASgE,aAAW,CAAC,QAAQ,EAAE,aAAa,EAAE;IACrD,IAAIJ,OAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACnC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASK,cAAY,CAAC,QAAQ,EAAE,aAAa,EAAE;IACtD,IAAIF,QAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASG,SAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;IACjD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;IAC7C,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAC3C;IACA,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,YAAY,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,MAAM;IACf,YAAY,MAAM,GAAGlE,OAAK,CAAC,MAAM,EAAE;IACnC,gBAAgB,MAAM,EAAE,IAAI;IAC5B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,UAAU,EAAE,IAAI;IAChC,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASmE,WAAS,CAAC,QAAQ,EAAE,aAAa,EAAE;IACnD,IAAID,SAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACrC;;ICrMA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASE,QAAM,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7C;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACtC,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;IACjC,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK;AACL;IACA,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;IAClC,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9C;IACA,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACtD;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;IACtC,YAAY,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,SAAS;IACT,KAAK;AACL;IACA,IAAI3D,QAAM,CAAC,OAAO,CAAC,CAAC;IACpB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAShE,MAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;IAC9C;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,MAAM,GAAGuD,OAAK,CAAC,MAAM,EAAE;IACrC,YAAY,MAAM,EAAE,IAAI;IACxB,YAAY,IAAI,EAAE,IAAI;IACtB,YAAY,UAAU,EAAE,IAAI;IAC5B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;AAClD;IACA,QAAQ,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;IACrD,YAAY,UAAU,CAAC,UAAU;IACjC,YAAY,UAAU,CAAC;IACvB,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,cAAc,CAAC;AAClI;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASqE,SAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;IACjD;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,MAAM,GAAGrE,OAAK,CAAC,MAAM,EAAE;IACjC,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,UAAU,EAAE,IAAI;IACxB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B;IACA,IAAI,IAAI,CAAC,SAAS,EAAE;IACpB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;AACxC;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;IACjB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC;IACA,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;IACjD,QAAQ,UAAU,CAAC,UAAU;IAC7B,QAAQ,UAAU,CAAC;IACnB,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,cAAc,CAAC;AAC9H;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IAChC,QAAQ,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASsE,WAAS,CAAC,QAAQ,EAAE,aAAa,EAAE;IACnD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA;IACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD;IACA,QAAQ,MAAM,MAAM,GAAGtE,OAAK,CAAC,MAAM,EAAE;IACrC,YAAY,MAAM,EAAE,IAAI;IACxB,YAAY,IAAI,EAAE,IAAI;IACtB,YAAY,UAAU,EAAE,IAAI;IAC5B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;AAClD;IACA,QAAQ,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;IACrD,YAAY,UAAU,CAAC,UAAU;IACjC,YAAY,UAAU,CAAC;IACvB,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,cAAc,CAAC;AAClI;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACpC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;IACtC,YAAY,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,SAAS;IACT,KAAK;IACL;;IClMA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IAC9E,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQuE,SAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACzC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,IAAIC,MAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;ICjCA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,QAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAC9B,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACpE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,SAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAC/B,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,QAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAC9B,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACpE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,SAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAC/B,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACrE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,UAAS,CAAC,IAAI,EAAE,OAAO,CAAC;IAChC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACtE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,WAAU,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACpE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,SAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAC/B,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACrE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,UAAS,CAAC,IAAI,EAAE,OAAO,CAAC;IAChC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACtE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,WAAU,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;IACvE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;IAC3B,QAAQC,YAAW,CAAC,IAAI,EAAE,OAAO,CAAC;IAClC,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN;;IChMA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,SAAS,EAAE;IACxC,IAAI,OAAOC,cAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,GAAG,EAAE;IAChC,IAAI,OAAOC,YAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAOC,SAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,QAAQ,EAAE;IACtC,IAAI,OAAOC,aAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAOC,SAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,OAAOC,UAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,SAAS,EAAE;IAC3C,IAAIC,iBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,GAAG,EAAE;IACnC,IAAIC,eAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,CAAC,QAAQ,EAAE;IACzC,IAAIC,gBAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE;IAC/C,IAAIC,cAAa,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC1C;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE;IACvC,IAAIC,YAAW,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,IAAI,EAAE;IAC9B,IAAIC,SAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE;IAC7C,IAAIC,aAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,IAAI,EAAE;IAC9B,IAAIC,SAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,KAAK,EAAE;IAChC,IAAIC,UAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC3JA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,aAAa,EAAE;IACzC,IAAIC,WAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,GAAG,EAAE;IAC7B,IAAI,OAAOC,SAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,GAAG,EAAE;IAChC,IAAIC,YAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;IACpC,IAAIC,SAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC5CA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAChD,IAAI,OAAOC,QAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,SAAS,EAAE;IACrC,IAAIC,WAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACtD,IAAI,OAAOC,QAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,aAAa,EAAE;IAC1C,IAAI,OAAOC,YAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACzD,IAAI,MAAM,IAAI,GAAGC,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,aAAa,EAAE;IAC7C,IAAI,MAAM,IAAI,GAAGC,eAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACrD;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAOC,UAAS,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAOC,UAAS,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAClD,IAAI,OAAOC,UAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC9C,IAAI,OAAOC,MAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC;;IClHA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,GAAG;IAC7B,IAAI,OAAOC,YAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,GAAG;IAC7B,IAAI,OAAOC,YAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;IAChC,IAAIC,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,CAAC,EAAE;IAC9B,IAAIC,YAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,CAAC,EAAE;IAC9B,IAAIC,YAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IClDA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACtE,IAAI,OAAOC,QAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACrE,IAAI,OAAOC,OAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C;;IC1BA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,GAAG,OAAO,EAAE;IACrC,IAAIC,UAAS,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AAChC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,GAAG,CAAC,KAAK,EAAE;IAC3B,IAAI,OAAOC,KAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,KAAK,EAAE;IAChC,IAAI,OAAOC,UAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,GAAG;IACvB,IAAIC,MAAK,CAAC,IAAI,CAAC,CAAC;AAChB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,GAAG,OAAO,EAAE;IACxC,IAAIC,aAAY,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACnE,IAAIC,UAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACjD;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,GAAG;IACvB,IAAIC,MAAK,CAAC,IAAI,CAAC,CAAC;AAChB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAIC,QAAO,CAAC,IAAI,CAAC,CAAC;AAClB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,GAAG,OAAO,EAAE;IACxC,IAAIC,aAAY,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;ICjGA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACtF,IAAIC,UAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5D;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACxG,IAAIC,kBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9E;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5G,IAAIC,sBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAClF;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1F,IAAIC,cAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAChE;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,aAAa,EAAE;IAC3C,IAAIC,aAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACtC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACvE,IAAIC,aAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtD;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACzF,IAAIC,qBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7G,IAAIC,cAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AACvE;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAC1G,IAAI,OAAOC,YAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E;;ICtIA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,GAAG;IACvB,IAAIC,MAAK,CAAC,IAAI,CAAC,CAAC;AAChB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAIC,OAAM,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAIC,OAAM,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC/BA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnD,IAAI,MAAM,MAAM,GAAGC,cAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD;;ICbA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,OAAO,EAAE;IAC/B,IAAI,MAAM,MAAM,GAAGC,OAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAIC,QAAO,CAAC,IAAI,CAAC,CAAC;AAClB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAIC,OAAM,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAIC,QAAO,CAAC,IAAI,CAAC,CAAC;AAClB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,aAAa,EAAE;IAC1C,IAAIC,YAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACrC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,aAAa,EAAE;IAC3C,IAAIC,aAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACtC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;ICtEA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,aAAa,EAAE;IACrC,IAAIC,OAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAChC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,aAAa,EAAE;IACtC,IAAIC,QAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACjC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,aAAa,EAAE;IACxC,IAAIC,UAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACnC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,aAAa,EAAE;IACtC,IAAIC,QAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACjC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,aAAa,EAAE;IAC3C,IAAIC,aAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACtC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,aAAa,EAAE;IAC5C,IAAIC,cAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,aAAa,EAAE;IACvC,IAAIC,SAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAClC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,aAAa,EAAE;IACzC,IAAIC,WAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC1FA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,UAAU,EAAE;IACnC,IAAIC,QAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,aAAa,EAAE;IACpC,IAAIC,MAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC/B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,aAAa,EAAE;IACvC,IAAIC,SAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAClC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,aAAa,EAAE;IACzC,IAAIC,WAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC7CA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/B,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvC;IACA,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;IACtD,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS;IACT,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;IACvD,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC;IACA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,EAAE;IACzC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;AAC1C;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK;IACrB,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;IACxB,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,CAAC;IACX,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;IAC1E,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,MAAM,YAAY,GAAG,SAAS,IAAI,KAAK,CAAC;AAChD;IACA,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,YAAY,KAAK,CAAC,SAAS,CAAC,GAAG;IAC/B,gBAAgB,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IAChD,oBAAoB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3C,iBAAiB,CAAC;IAClB,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC;IACA,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,SAAS;IACT,KAAK;IACL;;IC3FA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;IAC3D,IAAIC,YAAW,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACrC;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;IAChE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO;IAC5B,YAAY,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzC,SAAS;IACT,IAAI,EAAE,SAAS,EAAE;IACjB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;IAChE,IAAIC,OAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1C;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;ICtCA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE,aAAa,EAAE;IAC/C,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;IACnB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;IAC1B,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE,UAAU,EAAE;IAChD,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAChC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,OAAK,CAAC,QAAQ,EAAE;IAChC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;IACnB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAIvI,KAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,OAAO;IAC7D,QAAQvD,SAAO;IACf,YAAY,IAAI;IAChB,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,IAAIuD,KAAG,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO;IAChF,SAAS,CAAC,MAAM;IAChB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASwI,QAAM,CAAC,QAAQ,EAAE;IACjC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;IACxB,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;IAC/D,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IACtD,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IAClC,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,KAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC1C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/D,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,MAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;IAC9C,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;IACnB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;IAC1B,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;IACxB,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;IAC/D,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IACtD,SAAS;AACT;IACA,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC;IACjC,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,eAAa,CAAC,QAAQ,EAAE;IACxC,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,eAAa,CAAC,QAAQ,EAAE,SAAS,EAAE;IACnD,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IACxC,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE;IACvC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;IACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,iBAAiB;IAChC,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE;IAChD,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS;IACnC,gBAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClD,aAAa;IACb,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,kBAAgB,CAAC,QAAQ,EAAE;IAC3C,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,UAAU,CAACjJ,KAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACvD,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASkJ,mBAAiB,CAAC,QAAQ,EAAE;IAC5C,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,UAAU,CAAClJ,KAAG,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACxD,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASmJ,UAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;IACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7B,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,EAAE;IAClB,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;IACA,QAAQ,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,gBAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;IACrD,IAAI,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACjD;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE;IACjD,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,MAAM,CAAC,CAAC,IAAI;IACrB,YAAY,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;IACzC,SAAS,CAAC;IACV;;IC5UA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAI,OAAO,IAAI,QAAQ,CAACC,WAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,aAAa,EAAE;IACrC,IAAI,OAAO,IAAI,QAAQ,CAACC,OAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,UAAU,EAAE;IACnC,IAAI,OAAO,IAAI,QAAQ,CAACC,QAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,UAAU,EAAE;IACtC,IAAI,MAAM,IAAI,GAAGC,WAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9C;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAI,OAAO,IAAI,QAAQ,CAACC,OAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAI,OAAO,IAAI,QAAQ,CAACC,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,GAAG,CAAC,UAAU,EAAE;IAChC,IAAI,OAAO,IAAI,QAAQ,CAACC,KAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,UAAU,EAAE;IACnC,IAAI,MAAM,IAAI,GAAGC,QAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC3C;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,aAAa,EAAE;IACpC,IAAI,OAAO,IAAI,QAAQ,CAACC,MAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACpD,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAO,IAAI,QAAQ,CAACC,SAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,GAAG;IAChC,IAAI,OAAO,IAAI,QAAQ,CAACC,eAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,SAAS,EAAE;IACzC,IAAI,OAAO,IAAI,QAAQ,CAACC,eAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACzD,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,GAAG;IAC/B,IAAI,OAAO,IAAI,QAAQ,CAACC,cAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,OAAO,EAAE;IACnC,IAAI,OAAO,IAAI,QAAQ,CAACC,WAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,GAAG;IACnC,IAAI,OAAO,IAAI,QAAQ,CAACC,kBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,iBAAiB,GAAG;IACpC,IAAI,OAAO,IAAI,QAAQ,CAACC,mBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,GAAG,EAAE;IAC9B,IAAI,OAAO,IAAI,QAAQ,CAACC,UAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,CAAC,UAAU,EAAE;IAC3C,IAAI,OAAO,IAAI,QAAQ,CAACC,gBAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,QAAQ,EAAE;IACvC,IAAI,OAAO,IAAI,QAAQ,CAACC,cAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD;;ICzKA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,QAAQ,EAAE;IAC/B,IAAI,OAAO,IAAI,QAAQ,CAACC,MAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,SAAS,EAAE;IACvC,IAAI,OAAO,IAAI,QAAQ,CAACC,aAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC7B,IAAI,OAAO,IAAI,QAAQ,CAACC,UAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,OAAO,EAAE;IACnC,IAAI,OAAO,IAAI,QAAQ,CAACC,WAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,MAAM,IAAI,GAAGC,SAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,CAAC,SAAS,EAAE;IAC1C,IAAI,MAAM,IAAI,GAAGC,gBAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAClD;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,EAAE,EAAE;IAChC,IAAI,MAAM,IAAI,GAAGC,aAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,OAAO,EAAE;IACtC,IAAI,MAAM,IAAI,GAAGC,cAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9C;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C;;IClFA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,UAAU,EAAE;IAClC,IAAI,OAAO,IAAI,QAAQ,CAACC,OAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAClD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,UAAU,EAAE,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAO,IAAI,QAAQ,CAACC,UAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACvE,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE;IACjD,IAAI,OAAO,IAAI,QAAQ,CAACC,SAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,GAAG;IACjC,IAAI,MAAM,IAAI,GAAGC,gBAAe,CAAC,IAAI,CAAC,CAAC;AACvC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,OAAO,IAAI,QAAQ,CAACC,UAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,MAAM,IAAI,GAAGC,UAAS,CAAC,IAAI,CAAC,CAAC;AACjC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,UAAU,EAAE;IACjC,IAAI,OAAO,IAAI,QAAQ,CAACC,MAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE;IACjD,IAAI,OAAO,IAAI,QAAQ,CAACC,SAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,GAAG;IAC/B,IAAI,MAAM,IAAI,GAAGC,cAAa,CAAC,IAAI,CAAC,CAAC;AACrC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,UAAU,EAAE;IACnC,IAAI,OAAO,IAAI,QAAQ,CAACC,QAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE;IACjD,IAAI,OAAO,IAAI,QAAQ,CAACC,SAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,UAAU,EAAE;IACjC,IAAI,OAAO,IAAI,QAAQ,CAACC,MAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACjD,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE;IACjD,IAAI,OAAO,IAAI,QAAQ,CAACC,SAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAI,MAAM,IAAI,GAAGC,QAAO,CAAC,IAAI,CAAC,CAAC;AAC/B;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,UAAU,EAAE,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,IAAI,OAAO,IAAI,QAAQ,CAACC,UAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACvE;;IC9IA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAASC,gBAAc,CAAC,QAAQ,EAAE;IACzC;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjB;IACA,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC/B,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1C;IACA,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrB;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,iBAAe,CAAC,QAAQ,EAAE;IAC1C;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjB;IACA,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC/B,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1C;IACA,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;AAChC;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,GAAG;IACnC,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC/B,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1C;IACA,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;AAChC;IACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;AAC7C;IACA,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,GAAG;IAC/B,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC/B,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AACjF;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/C,KAAK;AACL;IACA,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;IAC5B,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAChD,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC5C,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC;IAC3C,QAAQ,cAAc;IACtB,QAAQ,cAAc,CAAC,UAAU,CAAC;IAClC,IAAI,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC;IACvC,QAAQ,YAAY;IACpB,QAAQ,YAAY,CAAC,UAAU,CAAC;AAChC;IACA,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK;IACrC,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,QAAQ,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B,KAAK,CAAC;IACN,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,IAAI,QAAQ,CAAC;IACjB,IAAI,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;IACtC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IACjD,YAAY,SAAS;IACrB,SAAS;AACT;IACA,QAAQ,QAAQ,GAAG,IAAI,CAAC;IACxB,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;IAC7B,QAAQ,MAAM,CAAC,OAAO,CAAC;IACvB,QAAQ,OAAO,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE;IACjC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;IAClC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;IAClC,QAAQ,SAAS,CAAC,eAAe,EAAE,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,MAAM,KAAK,GAAG9P,MAAI,CAAC,QAAQ,CAAC,CAAC;AACjC;IACA,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE;IAC9B,QAAQ,SAAS,CAAC,eAAe,EAAE,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;AAChC;IACA,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;IAC3B,QAAQ,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM;IACX,QAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,QAAQ,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,KAAK;AACL;IACA,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS+P,eAAa,CAAC,QAAQ,EAAE;IACxC;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC/B,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1C;IACA,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;AAChC;IACA,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IACvC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;AAC1G;IACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;AAC7C;IACA,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AACtD;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACpC,QAAQ,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAC9B,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK;IACL;;ICpOA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,GAAG;IACjC,IAAIC,gBAAe,CAAC,IAAI,CAAC,CAAC;AAC1B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,GAAG;IAClC,IAAIC,iBAAgB,CAAC,IAAI,CAAC,CAAC;AAC3B;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,GAAG;IACzB,IAAIC,QAAO,CAAC,IAAI,CAAC,CAAC;AAClB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAIC,WAAU,CAAC,IAAI,CAAC,CAAC;AACrB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,GAAG;IAChC,IAAIC,eAAc,CAAC,IAAI,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB;;IC/CA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE;IACvC,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,cAAY,CAAC,QAAQ,EAAE,SAAS,EAAE;IAClD,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE;IACtC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,UAAQ,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE;IAC/C,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI;IACnB,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3E,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,iBAAe,CAAC,QAAQ,EAAE;IAC1C,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI;IACnB,YAAY,UAAU,CAAC9M,KAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACvD,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS+M,kBAAgB,CAAC,QAAQ,EAAE;IAC3C,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI;IACnB,YAAY,UAAU,CAAC/M,KAAG,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACxD,SAAS,CAAC;IACV,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASgN,SAAO,CAAC,QAAQ,EAAE,GAAG,EAAE;IACvC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;IACtB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7B,YAAY,OAAO,KAAK,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,EAAE;IAClB,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;IACA,QAAQ,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,YAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC1C,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AACzB;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,eAAa,CAAC,QAAQ,EAAE,UAAU,EAAE;IACpD,IAAI,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACjD;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE;IACtC,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAChD,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC/B,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,IAAE,CAAC,QAAQ,EAAE,UAAU,EAAE;IACzC,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,aAAW,CAAC,QAAQ,EAAE;IACtC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;IACjD,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;IACjB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvD,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,SAAO,CAAC,QAAQ,EAAE;IAClC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;IACjB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAIzN,KAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,OAAO;IAC7D,QAAQvD,SAAO;IACf,YAAY,IAAI;IAChB,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,IAAIuD,KAAG,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO;IAChF,SAAS,CAAC,MAAM;IAChB,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS0N,UAAQ,CAAC,QAAQ,EAAE;IACnC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;IACtB,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;IAC/D,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IACtD,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IAClC,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,QAAM,CAAC,QAAQ,EAAE,aAAa,EAAE;IAChD,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE;IAC7C,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;IACjB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,KAAK,CAAC;IACN,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAASC,WAAS,CAAC,QAAQ,EAAE;IACpC,IAAI,OAAO,UAAU,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;IACtB,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;IAC/D,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IACtD,SAAS;AACT;IACA,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC;IACjC,KAAK,CAAC,CAAC;IACP;;IC/SA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,GAAG;IAC/B,IAAI,OAAOC,cAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,YAAY,CAAC,SAAS,EAAE;IACxC,IAAI,OAAOC,cAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,GAAG;IAC9B,IAAI,OAAOC,aAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,GAAG,OAAO,EAAE;IACrC,IAAI,OAAOC,UAAS,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;IACvC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,GAAG;IAClC,IAAI,OAAOC,iBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,gBAAgB,GAAG;IACnC,IAAI,OAAOC,kBAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,GAAG,EAAE;IAC7B,IAAI,OAAOC,SAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,GAAG,EAAE;IAChC,IAAI,OAAOC,YAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,aAAa,CAAC,UAAU,EAAE;IAC1C,IAAI,OAAOC,eAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,GAAG;IAC9B,IAAI,OAAOC,aAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,QAAQ,EAAE;IACtC,IAAI,OAAOC,aAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAI,OAAOC,WAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,EAAE,CAAC,UAAU,EAAE;IAC/B,IAAI,OAAOC,IAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACjC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,GAAG;IAC9B,IAAI,OAAOC,aAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,aAAa,EAAE;IACvC,IAAI,OAAOC,SAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACzC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAOC,SAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,OAAOC,UAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,aAAa,EAAE;IACtC,IAAI,OAAOC,QAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAI,OAAOC,WAAU,CAAC,IAAI,CAAC,CAAC;IAC5B;;IChKA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE;IAC9C,IAAI,MAAM,KAAK,GAAGC,MAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvF;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,EAAE,CAAC,KAAK,EAAE;IAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,GAAG;IACxB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtB,CACA;IACA;IACA;IACA;IACA;IACO,SAAShT,OAAK,GAAG;IACxB,IAAI,OAAOiT,OAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,UAAU,EAAE;IACpC,IAAI,OAAOC,SAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,GAAG;IACvB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAIC,WAAU,CAAC,IAAI,CAAC,CAAC;AACrB;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,GAAG;IAC5B,IAAI,OAAOC,WAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,GAAG;IACjC,IAAI,OAAOC,gBAAe,CAAC,IAAI,CAAC,CAAC;IACjC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,GAAG;IACvB,IAAI,OAAO,IAAI,QAAQ,CAACL,MAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,GAAG;IAC1B,IAAI,OAAOM,SAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B;;IClFA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC;IACA,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC1C,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IAClD,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC1C,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,KAAK,GAAGtT,OAAK,CAAC;IACpB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IAChD,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC1C,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,aAAa,GAAG,aAAa;;IC1LnC;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE;IAChD,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;IAC9B,QAAQ,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK;AACL;IACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;IACvC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE;IACxC,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE;IACnD,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE;IACrC,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,QAAQ,EAAE,IAAI;IACtB,QAAQ,MAAM,EAAE,IAAI;IACpB,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE;IACxC,KAAK,CAAC,CAAC;AACP;IACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C;;IChDA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3F,IAAI,UAAU,GAAG;IACjB,QAAQ,GAAG,EAAE,GAAG;IAChB,QAAQ,IAAI,EAAE,iBAAiB;IAC/B,QAAQ,GAAG,UAAU;IACrB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC,EAAE;IAClC,QAAQ,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;IAC9B,KAAK;AACL;IACA,IAAI,IAAI,CAAC,KAAK,EAAE;IAChB,QAAQ,UAAU,CAAC,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,KAAK;AACL;IACA,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnD;IACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC3D,QAAQ,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,KAAK;AACL;IACA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACrC;IACA,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IAC5C,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;IACzC,QAAQ,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;IACjF,IAAI,OAAO,OAAO,CAAC,GAAG;IACtB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;IACrB,YAAY,QAAQ,CAAC,GAAG,CAAC;IACzB,gBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzD,gBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzD,SAAS;IACT,KAAK,CAAC;IACN;;IC1DA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1F,IAAI,UAAU,GAAG;IACjB,QAAQ,IAAI,EAAE,GAAG;IACjB,QAAQ,GAAG,EAAE,YAAY;IACzB,QAAQ,GAAG,UAAU;IACrB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,KAAK,EAAE;IAChB,QAAQ,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9E,KAAK;AACL;IACA,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/C;IACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IAC3D,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,KAAK;AACL;IACA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACnC;IACA,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IAC5C,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;IACvC,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,CAAC;IACP,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;IAChF,IAAI,OAAO,OAAO,CAAC,GAAG;IACtB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;IACrB,YAAY,QAAQ,CAAC,GAAG,CAAC;IACzB,gBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxD,gBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxD,SAAS;IACT,KAAK,CAAC;IACN;;ICtDA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,IAAI,EAAEuT,aAAW,GAAGC,WAAY,EAAE;IAC3D,IAAI,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC9B,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;IACtC,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpD;IACA,IAAI,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACpC,QAAQ,YAAY,CAAC,KAAK,EAAED,aAAW,CAAC,CAAC;IACzC,KAAK;AACL;IACA,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC;IAC9B,CACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,YAAY,CAAC,IAAI,EAAEA,aAAW,GAAGC,WAAY,EAAE;IACxD;IACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC5C;IACA,IAAI,IAAI,EAAE,IAAI,IAAID,aAAW,CAAC,EAAE;IAChC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,QAAQ,OAAO;IACf,KAAK;AACL;IACA;IACA,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACjC;IACA,IAAI,IAAI,GAAG,IAAIA,aAAW,EAAE;IAC5B,QAAQ,iBAAiB,CAAC,IAAI,CAAC,GAAGA,aAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,KAAK;AACL;IACA,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAGA,aAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD;IACA,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD;IACA,IAAI,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IACxC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;IAC/E,YAAY,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrD,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;IACpC,QAAQ,YAAY,CAAC,KAAK,EAAEA,aAAW,CAAC,CAAC;IACzC,KAAK;IACL;;ICxBA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB,IAAI,UAAU;IACd,IAAI,WAAW;IACf,IAAI,UAAU;IACd,IAAI,WAAW;IACf,IAAI,UAAU;IACd,IAAI,SAAS;IACb,IAAI,YAAY;IAChB,IAAI,QAAQ;IACZ,cAAIxP,UAAQ;IACZ,cAAIvC,UAAQ;IACZ,sBAAIC,kBAAgB;IACpB,0BAAIC,sBAAoB;IACxB,kBAAIC,cAAY;IAChB,WAAIiE,OAAK;IACT,oBAAIoK,gBAAc;IAClB,IAAI,IAAI;IACR,aAAI5Q,SAAO;IACX,YAAIyG,QAAM;IACV,cAAIC,UAAQ;IACZ,kBAAInH,cAAY;IAChB,YAAIoH,QAAM;IACV,qBAAIkK,iBAAe;IACnB,UAAIxK,MAAI;IACR,YAAIjB,QAAM;IACV,WAAIjE,OAAK;IACT,cAAIC,UAAQ;IACZ,gBAAIuL,YAAU;IACd,WAAIrG,OAAK;IACT,WAAI1D,OAAK;IACT,eAAI2B,WAAS;IACb,iBAAI/B,aAAW;IACf,aAAInB,SAAO;IACX,oBAAIE,gBAAc;IAClB,eAAIwL,WAAS;IACb,eAAIzH,WAAS;IACb,cAAI9D,UAAQ;IACZ,IAAI,MAAM;IACV,IAAI,aAAa;IACjB,IAAI,cAAc;IAClB,IAAI,WAAW;IACf,IAAI,UAAU;IACd,SAAIoD,KAAG;IACP,IAAI,QAAQ;IACZ,IAAI,MAAM,EAAE,OAAO;IACnB,YAAIzB,QAAM;IACV,YAAIoC,QAAM;IACV,gBAAIC,YAAU;IACd,YAAItF,QAAM;IACV,aAAIE,SAAO;IACX,WAAIgD,OAAK;IACT,WAAI4J,OAAK;IACT,IAAI,IAAI;IACR,IAAI,gBAAgB;IACpB,YAAI1M,QAAM;IACV,aAAIC,SAAO;IACX,YAAI0M,QAAM;IACV,eAAIC,WAAS;IACb,UAAI1N,MAAI;IACR,iBAAIE,aAAW;IACf,cAAID,UAAQ;IACZ,eAAIE,WAAS;IACb,aAAIC,SAAO;IACX,oBAAIE,gBAAc;IAClB,iBAAID,aAAW;IACf,kBAAIE,cAAY;IAChB,WAAIoN,OAAK;IACT,WAAI5G,OAAK;IACT,cAAI9E,UAAQ;IACZ,IAAI,GAAG;IACP,IAAI,eAAe;IACnB,IAAI,oBAAoB;IACxB,kBAAI+B,cAAY;IAChB,IAAI,UAAU;IACd,IAAI,SAAS;IACb,aAAIiB,SAAO;IACX,gBAAIhB,YAAU;IACd,aAAIC,SAAO;IACX,iBAAIC,aAAW;IACf,gBAAImC,YAAU;IACd,gBAAIC,YAAU;IACd,IAAI,YAAY;IAChB,cAAIlB,UAAQ;IACZ,aAAIjB,SAAO;IACX,cAAIC,UAAQ;IACZ,IAAI,SAAS;IACb,kBAAIyN,cAAY;IAChB,kBAAIC,cAAY;IAChB,qBAAIG,iBAAe;IACnB,sBAAIC,kBAAgB;IACpB,iBAAIH,aAAW;IACf,cAAIC,UAAQ;IACZ,aAAIG,SAAO;IACX,gBAAIC,YAAU;IACd,mBAAIC,eAAa;IACjB,iBAAIC,aAAW;IACf,iBAAIC,aAAW;IACf,eAAIC,WAAS;IACb,YAAI9L,QAAM;IACV,YAAIiH,QAAM;IACV,UAAItI,MAAI;IACR,WAAIlE,OAAK;IACT,aAAIC,SAAO;IACX,iBAAI+F,aAAW;IACf,kBAAIC,cAAY;IAChB,QAAIqL,IAAE;IACN,iBAAIC,aAAW;IACf,aAAIC,SAAO;IACX,aAAIC,SAAO;IACX,cAAIC,UAAQ;IACZ,YAAIC,QAAM;IACV,eAAIC,WAAS;IACb,IAAI,UAAU;IACd,IAAI,WAAW;IACf,IAAI,SAAS;IACb,IAAI,UAAU;IACd,IAAI,gBAAgB;IACpB,eAAI/M,WAAS;IACb,mBAAIC,eAAa;IACjB,UAAIhE,MAAI;IACR,aAAIC,SAAO;IACX,IAAI,UAAU;IACd,eAAIb,WAAS;IACb,SAAIuM,KAAG;IACP,YAAIC,QAAM;IACV,kBAAI1L,cAAY;IAChB,YAAIC,QAAM;IACV,aAAIP,SAAO;IACX,IAAI,aAAa;IACjB,IAAI,aAAa;IACjB,IAAI,SAAS;IACb,IAAI,WAAW;IACf,IAAI,KAAK;IACT,cAAIqE,UAAQ;IACZ,cAAIC,UAAQ;IACZ,cAAIC,UAAQ;IACZ,IAAI,IAAI;IACR,aAAIiB,SAAO;IACX,eAAIC,WAAS;IACb,UAAIjF,MAAI;IACR,aAAIC,SAAO;IACX,IAAI,GAAG;IACP,IAAI,KAAK;IACT,IAAI,QAAQ;IACZ,WAAI6K,OAAK;IACT,IAAI,KAAK;IACT,UAAIvH,MAAI;IACR,YAAIhC,QAAM;IACV,qBAAIS,iBAAe;IACnB,iBAAIiB,aAAW;IACf,IAAI,YAAY;IAChB,gBAAIL,YAAU;IACd,mBAAIX,eAAa;IACjB,iBAAI5B,aAAW;IACf,yBAAIM,qBAAmB;IACvB,oBAAIuB,gBAAc;IAClB,gBAAIV,YAAU;IACd,iBAAIC,aAAW;IACf,cAAI/C,UAAQ;IACZ,eAAIC,WAAS;IACb,UAAI8M,MAAI;IACR,IAAI,QAAQ;IACZ,YAAIuD,QAAM;IACV,eAAIC,WAAS;IACb,eAAIhQ,WAAS;IACb,oBAAIC,gBAAc;IAClB,IAAI,eAAe;IACnB,IAAI,oBAAoB;IACxB,kBAAIiD,cAAY;IAChB,IAAI,UAAU;IACd,IAAI,SAAS;IACb,aAAIO,SAAO;IACX,gBAAIN,YAAU;IACd,aAAIC,SAAO;IACX,iBAAIC,aAAW;IACf,eAAI4B,WAAS;IACb,gBAAIC,YAAU;IACd,gBAAIC,YAAU;IACd,cAAIlB,UAAQ;IACZ,aAAIX,SAAO;IACX,cAAIC,UAAQ;IACZ,IAAI,SAAS;IACb,YAAItC,QAAM;IACV,UAAIiD,MAAI;IACR,cAAIhD,UAAQ;IACZ,aAAI9B,SAAO;IACX,cAAIE,UAAQ;IACZ,UAAIY,MAAI;IACR,eAAIP,WAAS;IACb,gBAAIC,YAAU;IACd,UAAIV,MAAI;IACR,aAAIiB,SAAO;IACX,YAAIgE,QAAM;IACV,iBAAIC,aAAW;IACf,kBAAIzC,cAAY;IAChB,gBAAIC,YAAU;IACd,YAAIqE,QAAM;IACV,IAAI,UAAU;IACd,aAAIwG,SAAO;IACX,WAAIpH,OAAK;IACT,mBAAIqH,eAAa;IACjB,mBAAIC,eAAa;IACjB,sBAAIG,kBAAgB;IACpB,uBAAIC,mBAAiB;IACrB,kBAAIH,cAAY;IAChB,eAAIC,WAAS;IACb,cAAIG,UAAQ;IACZ,oBAAIC,gBAAc;IAClB,kBAAIC,cAAY;IAChB,UAAI5O,MAAI;IACR,aAAI4H,SAAO;IACX,eAAIC,WAAS;IACb,mBAAI8J,eAAa;IACjB,CAAC,CAAC,CAAC;AACH;IACA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;IAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC7B;;IC7PA,IAAI,EAAE,CAAC;AACP;IACA;IACA;IACA;IACO,SAAS,UAAU,GAAG;IAC7B,IAAI,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC/B;IACA,IAAI,IAAI,MAAM,CAAC,CAAC,KAAKqD,KAAC,EAAE;IACxB,QAAQ,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IACtB,KAAK;IACL,CACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;IAClD,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C;IACA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAClB,IAAI,MAAM,CAAC,CAAC,GAAGA,KAAC,CAAC;AACjB;IACA,IAAI,OAAOA,KAAC,CAAC;IACb;;AC3BA,gBAAe,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe;;;;;;;;","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/dist/fquery.min.js b/dist/fquery.min.js index 2344851..53cfb5b 100644 --- a/dist/fquery.min.js +++ b/dist/fquery.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).fQuery=e()}(this,(function(){"use strict";const t=Array.isArray,e=e=>t(e)||f(e)&&!s(e)&&!m(e)&&!o(e)&&(Symbol.iterator in e&&s(e[Symbol.iterator])||"length"in e&&a(e.length)&&(!e.length||e.length-1 in e)),n=t=>!!t&&9===t.nodeType,o=t=>!!t&&1===t.nodeType,r=t=>!!t&&11===t.nodeType&&!t.host,s=t=>"function"==typeof t,i=Number.isNaN,u=t=>!!t&&(1===t.nodeType||3===t.nodeType||8===t.nodeType),c=t=>null===t,a=t=>!i(parseFloat(t))&&isFinite(t),f=t=>!!t&&t===Object(t),l=t=>!!t&&t.constructor===Object,h=t=>!!t&&11===t.nodeType&&!!t.host,d=t=>t===`${t}`,p=t=>void 0===t,m=t=>!!t&&!!t.document&&t.document.defaultView===t,g=(t,e=0,n=1)=>Math.max(e,Math.min(n,t)),w=t=>g(t,0,100),y=(t,e,n,o)=>b(t-n,e-o),b=Math.hypot,v=(t,e,n,o,r)=>(t-e)*(r-o)/(n-e)+o,x=(t=1,e=null)=>c(e)?Math.random()*t:v(Math.random(),0,1,t,e),_=(t=1,e=null)=>0|x(t,e),S=(t,e=.01)=>parseFloat((Math.round(t/e)*e).toFixed(`${e}`.replace(/\d*\.?/,"").length)),N=(t=[],...e)=>e.reduce(((e,n)=>(Array.prototype.push.apply(e,n),t)),t),O=t=>Array.from(new Set(t)),T=n=>p(n)?[]:t(n)?n:e(n)?N([],n):[n],C="undefined"!=typeof window&&"requestAnimationFrame"in window,P=C?(...t)=>window.requestAnimationFrame(...t):t=>setTimeout(t,1e3/60),A=t=>s(t)?t():t,q=(e,...n)=>n.reduce(((e,n)=>{for(const o in n)t(n[o])?e[o]=q(t(e[o])?e[o]:[],n[o]):l(n[o])?e[o]=q(l(e[o])?e[o]:{},n[o]):e[o]=n[o];return e}),e),E=(t,e,n)=>{const o=e.split(".");for(;e=o.shift();){if(!f(t)||!(e in t))return n;t=t[e]}return t},D=(t,e,n,{overwrite:o=!0}={})=>{const r=e.split(".");for(;e=r.shift();){if("*"===e){for(const e in t)({}).hasOwnProperty.call(t,e)&&D(t,[e].concat(r).join("."),n,o);return}r.length?(f(t[e])&&e in t||(t[e]={}),t=t[e]):!o&&e in t||(t[e]=n)}},j={"&":"&","<":"<",">":">",'"':""","'":"'"},$={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"},L=t=>`${t}`.split(/[^a-zA-Z0-9']|(?=[A-Z])/).reduce(((t,e)=>((e=e.replace(/[^\w]/,"").toLowerCase())&&t.push(e),t)),[]),R=t=>L(t).map(((t,e)=>e?B(t):t)).join(""),B=t=>t.charAt(0).toUpperCase()+t.substring(1).toLowerCase(),I=t=>t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),M=t=>L(t).join("-").toLowerCase();var F=Object.freeze({__proto__:null,animation:(t,{leading:e=!1}={})=>{let n,o,r;const s=(...s)=>{o=s,r||(e&&t(...o),r=!0,n=P((s=>{e||t(...o),r=!1,n=null})))};return s.cancel=t=>{n&&(C?global.cancelAnimationFrame(n):clearTimeout(n),r=!1,n=null)},s},camelCase:R,capitalize:B,clamp:g,clampPercent:w,compose:(...t)=>e=>t.reduceRight(((t,e)=>e(t)),e),curry:t=>{const e=(...n)=>n.length>=t.length?t(...n):(...t)=>e(...n.concat(t));return e},debounce:(t,e=0,{leading:n=!1,trailing:o=!0}={})=>{let r,s,i;const u=(...u)=>{const c=Date.now(),a=s?c-s:null;if(n&&(null===a||a>=e))return s=c,void t(...u);i=u,o&&(r&&clearTimeout(r),r=setTimeout((e=>{s=Date.now(),t(...i),r=null}),e))};return u.cancel=t=>{r&&(clearTimeout(r),r=null)},u},diff:(t,...e)=>(e=e.map(O),t.filter((t=>!e.some((e=>e.includes(t)))))),dist:y,escape:t=>t.replace(/[&<>"']/g,(t=>j[t])),escapeRegExp:I,evaluate:A,extend:q,forgetDot:(t,e)=>{const n=e.split(".");for(;(e=n.shift())&&f(t)&&e in t;)n.length?t=t[e]:delete t[e]},getDot:E,hasDot:(t,e)=>{const n=e.split(".");for(;e=n.shift();){if(!f(t)||!(e in t))return!1;t=t[e]}return!0},humanize:t=>B(L(t).join(" ")),intersect:(...t)=>O(t.reduce(((e,n,o)=>(n=O(n),N(e,n.filter((e=>t.every(((t,n)=>o==n||t.includes(e)))))))),[])),inverseLerp:(t,e,n)=>(n-t)/(e-t),isArray:t,isArrayLike:e,isBoolean:t=>t===!!t,isDocument:n,isElement:o,isFragment:r,isFunction:s,isNaN:i,isNode:u,isNull:c,isNumeric:a,isObject:f,isPlainObject:l,isShadow:h,isString:d,isText:t=>!!t&&3===t.nodeType,isUndefined:p,isWindow:m,kebabCase:M,len:b,lerp:(t,e,n)=>t*(1-n)+e*n,map:v,merge:N,once:t=>{let e,n;return(...o)=>(e||(e=!0,n=t(...o)),n)},partial:(t,...e)=>(...n)=>t(...e.slice().map((t=>p(t)?n.shift():t)).concat(n)),pascalCase:t=>L(t).map((t=>t.charAt(0).toUpperCase()+t.substring(1))).join(""),pipe:(...t)=>e=>t.reduce(((t,e)=>e(t)),e),pluckDot:(t,e,n)=>t.map((t=>E(t,e,n))),random:x,randomInt:_,randomString:(t=16,e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789")=>new Array(t).fill().map((t=>e[0|x(e.length)])).join(""),randomValue:t=>t.length?t[_(t.length)]:null,range:(t,e,n=1)=>{const o=Math.sign(e-t);return new Array(Math.abs(e-t)/n+1|0).fill().map(((e,r)=>t+S(r*n*o,n)))},setDot:D,snakeCase:t=>L(t).join("_").toLowerCase(),throttle:(t,e=0,{leading:n=!0,trailing:o=!0}={})=>{let r,s,i,u;const c=(...c)=>{const a=Date.now(),f=s?a-s:null;if(n&&(null===f||f>=e))return s=a,void t(...c);i=c,!u&&o&&(u=!0,r=setTimeout((e=>{s=Date.now(),t(...i),u=!1,r=null}),null===f?e:e-f))};return c.cancel=t=>{r&&(clearTimeout(r),u=!1,r=null)},c},times:(t,e)=>{for(;e--&&!1!==t(););},toStep:S,unescape:t=>t.replace(/&(amp|lt|gt|quot|apos);/g,((t,e)=>$[e])),unique:O,wrap:T});const k={afterSend:null,beforeSend:null,cache:!0,contentType:"application/x-www-form-urlencoded",data:null,headers:{},isLocal:null,method:"GET",onProgress:null,onUploadProgress:null,processData:!0,rejectOnCancel:!0,responseType:null,url:null,xhr:t=>new XMLHttpRequest},H={duration:1e3,type:"ease-in-out",infinite:!1,debug:!1},z={ajaxDefaults:k,animationDefaults:H,context:null,useTimeout:!1,window:null};function G(){return k}function W(){return H}function X(){return z.context}function U(){return z.window}function Y(t){if(!n(t))throw new Error("FrostDOM requires a valid Document.");z.context=t}function V(t){if(!m(t))throw new Error("FrostDOM requires a valid Window.");z.window=t}function Q(t){let e;return(...n)=>{e||(e=!0,Promise.resolve().then((o=>{t(...n),e=!1})))}}function J(t){return new RegExp(`^${I(t)}(?:\\.|$)`,"i")}function Z(t){return t.flat().flatMap((t=>t.split(" "))).filter((t=>!!t))}function K(e,n,{json:o=!1}={}){const r=d(e)?{[e]:n}:e;return o?Object.fromEntries(Object.entries(r).map((([e,n])=>[e,f(n)||t(n)?JSON.stringify(n):n]))):r}function tt(t){if(p(t))return t;const e=t.toLowerCase().trim();if(["true","on"].includes(e))return!0;if(["false","off"].includes(e))return!1;if("null"===e)return null;if(a(e))return parseFloat(e);if(["{","["].includes(e.charAt(0)))try{return JSON.parse(t)}catch(t){}return t}function et(t){return t.split(".").shift()}function nt(t){return t.split(" ")}const ot={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},rt={mousedown:["mousemove","mouseup"],touchstart:["touchmove","touchend"]},st=new Map,it=new WeakMap,ut=new WeakMap,ct=new WeakMap,at=new WeakMap;function ft(t,e,n){const o=lt(t);return o.append(e,n),wt(t,o)}function lt(t){return ht(t).searchParams}function ht(t){const e=U(),n=(e.location.origin+e.location.pathname).replace(/\/$/,"");return new URL(t,n)}function dt(t){const e=gt(t),n=new FormData;for(const[t,o]of e)"[]"===t.substring(t.length-2)?n.append(t,o):n.set(t,o);return n}function pt(t){const e=gt(t).map((([t,e])=>`${t}=${e}`)).join("&");return encodeURI(e)}function mt(e,n){return null===n||p(n)?[]:t(n)?("[]"!==e.substring(e.length-2)&&(e+="[]"),n.flatMap((t=>mt(e,t)))):f(n)?Object.entries(n).flatMap((([t,n])=>mt(`${e}[${t}]`,n))):[[e,n]]}function gt(e){return t(e)?e.flatMap((t=>mt(t.name,t.value))):f(e)?Object.entries(e).flatMap((([t,e])=>mt(t,e))):e}function wt(t,e){const n=ht(t);n.search=e.toString();const o=n.toString(),r=o.indexOf(t);return o.substring(r)}class yt{constructor(t){if(this._options=q({},G(),t),this._options.url||(this._options.url=U().location.href),this._options.cache||(this._options.url=ft(this._options.url,"_",Date.now())),!("Content-Type"in this._options.headers)&&this._options.contentType&&(this._options.headers["Content-Type"]=this._options.contentType),null===this._options.isLocal&&(this._options.isLocal=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol)),this._options.isLocal||"X-Requested-With"in this._options.headers||(this._options.headers["X-Requested-With"]="XMLHttpRequest"),this._promise=new Promise(((t,e)=>{this._resolve=e=>{this._isResolved=!0,t(e)},this._reject=t=>{this._isRejected=!0,e(t)}})),this.xhr=this._options.xhr(),this._options.data&&(this._options.processData&&f(this._options.data)&&("application/json"===this._options.contentType?this._options.data=JSON.stringify(this._options.data):"application/x-www-form-urlencoded"===this._options.contentType?this._options.data=pt(this._options.data):this._options.data=dt(this._options.data)),"GET"===this._options.method)){const t=new URLSearchParams(this._options.data),e=lt(this._options.url);for(const[n,o]of t.entries())e.append(n,o);this._options.url=wt(this._options.url,e),this._options.data=null}this.xhr.open(this._options.method,this._options.url,!0,this._options.username,this._options.password);for(const[t,e]of Object.entries(this._options.headers))this.xhr.setRequestHeader(t,e);this._options.responseType&&(this.xhr.responseType=this._options.responseType),this._options.mimeType&&this.xhr.overrideMimeType(this._options.mimeType),this._options.timeout&&(this.xhr.timeout=this._options.timeout),this.xhr.onload=t=>{this.xhr.status>400?this._reject({status:this.xhr.status,xhr:this.xhr,event:t}):this._resolve({response:this.xhr.response,xhr:this.xhr,event:t})},this._options.isLocal||(this.xhr.onerror=t=>this._reject({status:this.xhr.status,xhr:this.xhr,event:t})),this._options.onProgress&&(this.xhr.onprogress=t=>this._options.onProgress(t.loaded/t.total,this.xhr,t)),this._options.onUploadProgress&&(this.xhr.upload.onprogress=t=>this._options.onUploadProgress(t.loaded/t.total,this.xhr,t)),this._options.beforeSend&&this._options.beforeSend(this.xhr),this.xhr.send(this._options.data),this._options.afterSend&&this._options.afterSend(this.xhr)}cancel(t="Request was cancelled"){this._isResolved||this._isRejected||this._isCancelled||(this.xhr.abort(),this._isCancelled=!0,this._options.rejectOnCancel&&this._reject({status:this.xhr.status,xhr:this.xhr,reason:t}))}catch(t){return this._promise.catch(t)}finally(t){return this._promise.finally(t)}then(t,e){return this._promise.then(t,e)}}Object.setPrototypeOf(yt.prototype,Promise.prototype);let bt=!1;function vt(){return document.timeline?document.timeline.currentTime:performance.now()}function xt(){bt||(bt=!0,_t())}function _t(){const t=vt();for(const[e,n]of st){const o=n.filter((e=>!e.update(t)));o.length?st.set(e,o):st.delete(e)}st.size?z.useTimeout?setTimeout(_t,1e3/60):U().requestAnimationFrame(_t):bt=!1}class St{constructor(t,e,n){this._node=t,this._callback=e,this._options={...W(),...n},"start"in this._options||(this._options.start=vt()),this._options.debug&&(this._node.dataset.animationStart=this._options.start),this._promise=new Promise(((t,e)=>{this._resolve=t,this._reject=e})),st.has(t)||st.set(t,[]),st.get(t).push(this)}catch(t){return this._promise.catch(t)}clone(t){return new St(t,this._callback,this._options)}finally(t){return this._promise.finally(t)}stop({finish:t=!0}={}){if(this._isStopped||this._isFinished)return;const e=st.get(this._node).filter((t=>t!==this));e.length?st.set(this._node,e):st.delete(this._node),t&&this.update(),this._isStopped=!0,t||this._reject(this._node)}then(t,e){return this._promise.then(t,e)}update(t=null){if(this._isStopped)return!0;let e;return null===t?e=1:(e=(t-this._options.start)/this._options.duration,this._options.infinite?e%=1:e=g(e),"ease-in"===this._options.type?e=e**2:"ease-out"===this._options.type?e=Math.sqrt(e):"ease-in-out"===this._options.type&&(e=e<=.5?e**2*2:1-(1-e)**2*2)),this._options.debug&&(this._node.dataset.animationTime=t,this._node.dataset.animationProgress=e),this._callback(this._node,e,this._options),!(e<1||(this._options.debug&&(delete this._node.dataset.animationStart,delete this._node.dataset.animationTime,delete this._node.dataset.animationProgress),this._isFinished||(this._isFinished=!0,this._resolve(this._node)),0))}}Object.setPrototypeOf(St.prototype,Promise.prototype);class Nt{constructor(t){this._animations=t,this._promise=Promise.all(t)}catch(t){return this._promise.catch(t)}finally(t){return this._promise.finally(t)}stop({finish:t=!0}={}){for(const e of this._animations)e.stop({finish:t})}then(t,e){return this._promise.then(t,e)}}function Ot(t,{open:e=!0}={}){const n=zt(t);if(n)return n.attachShadow({mode:e?"open":"closed"})}function Tt(){return X().createDocumentFragment()}function Ct(){return X().createRange()}Object.setPrototypeOf(Nt.prototype,Promise.prototype);const Pt=new DOMParser;function At(t){const e=Ct().createContextualFragment(t).children;return N([],e)}class qt{constructor(t=[]){this._nodes=t}get length(){return this._nodes.length}each(t){return this._nodes.forEach(((e,n)=>t(e,n))),this}get(t=null){return null===t?this._nodes:t<0?this._nodes[t+this._nodes.length]:this._nodes[t]}map(t){const e=this._nodes.map(t);return new qt(e)}slice(t,e){const n=this._nodes.slice(t,e);return new qt(n)}[Symbol.iterator](){return this._nodes.values()}}function Et(t,e=X()){if(!t)return[];const s=t.match(/^([\#\.]?)([\w\-]+)$/);if(s)return"#"===s[1]?jt(s[2],e):"."===s[1]?Dt(s[2],e):$t(s[2],e);if(n(e)||o(e)||r(e)||h(e))return N([],e.querySelectorAll(t));const i=Gt(e,{fragment:!0,shadow:!0,document:!0}),u=[];for(const e of i){const n=e.querySelectorAll(t);u.push(...n)}return i.length>1&&u.length>1?O(u):u}function Dt(t,e=X()){if(n(e)||o(e))return N([],e.getElementsByClassName(t));if(r(e)||h(e))return N([],e.querySelectorAll(`.${t}`));const s=Gt(e,{fragment:!0,shadow:!0,document:!0}),i=[];for(const e of s){const n=r(e)||h(e)?e.querySelectorAll(`.${t}`):e.getElementsByClassName(t);i.push(...n)}return s.length>1&&i.length>1?O(i):i}function jt(t,e=X()){if(n(e)||o(e)||r(e)||h(e))return N([],e.querySelectorAll(`#${t}`));const s=Gt(e,{fragment:!0,shadow:!0,document:!0}),i=[];for(const e of s){const n=e.querySelectorAll(`#${t}`);i.push(...n)}return s.length>1&&i.length>1?O(i):i}function $t(t,e=X()){if(n(e)||o(e))return N([],e.getElementsByTagName(t));if(r(e)||h(e))return N([],e.querySelectorAll(t));const s=Gt(e,{fragment:!0,shadow:!0,document:!0}),i=[];for(const e of s){const n=r(e)||h(e)?e.querySelectorAll(t):e.getElementsByTagName(t);i.push(...n)}return s.length>1&&i.length>1?O(i):i}function Lt(t,e=X()){if(!t)return null;const s=t.match(/^([\#\.]?)([\w\-]+)$/);if(s)return"#"===s[1]?Bt(s[2],e):"."===s[1]?Rt(s[2],e):It(s[2],e);if(n(e)||o(e)||r(e)||h(e))return e.querySelector(t);const i=Gt(e,{fragment:!0,shadow:!0,document:!0});if(i.length){for(const e of i){const n=e.querySelector(t);if(n)return n}return null}}function Rt(t,e=X()){if(n(e)||o(e))return e.getElementsByClassName(t).item(0);if(r(e)||h(e))return e.querySelector(`.${t}`);const s=Gt(e,{fragment:!0,shadow:!0,document:!0});if(s.length){for(const e of s){const n=r(e)||h(e)?e.querySelector(`.${t}`):e.getElementsByClassName(t).item(0);if(n)return n}return null}}function Bt(t,e=X()){if(n(e))return e.getElementById(t);if(o(e)||r(e)||h(e))return e.querySelector(`#${t}`);const s=Gt(e,{fragment:!0,shadow:!0,document:!0});if(s.length){for(const e of s){const o=n(e)?e.getElementById(t):e.querySelector(`#${t}`);if(o)return o}return null}}function It(t,e=X()){if(n(e)||o(e))return e.getElementsByTagName(t).item(0);if(r(e)||h(e))return e.querySelector(t);const s=Gt(e,{fragment:!0,shadow:!0,document:!0});if(s.length){for(const e of s){const n=r(e)||h(e)?e.querySelector(t):e.getElementsByTagName(t).item(0);if(n)return n}return null}}function Mt(t,e,n,{html:o=!1}={}){if(d(t))return o&&"<"===t.trim().charAt(0)?At(t).shift():Lt(t,e);if(n(t))return t;if(t instanceof qt){const e=t.get(0);return n(e)?e:void 0}if(t instanceof HTMLCollection||t instanceof NodeList){const e=t.item(0);return n(e)?e:void 0}}function Ft(t,e,n,{html:o=!1}={}){return d(t)?o&&"<"===t.trim().charAt(0)?At(t):Et(t,e):n(t)?[t]:t instanceof qt?t.get().filter(n):t instanceof HTMLCollection||t instanceof NodeList?N([],t).filter(n):[]}function kt(t,e=!0){return t?s(t)?t:d(t)?e=>o(e)&&e.matches(t):u(t)||r(t)||h(t)?e=>e.isSameNode(t):(t=Gt(t,{node:!0,fragment:!0,shadow:!0})).length?e=>t.includes(e):t=>!e:t=>e}function Ht(t,e=!0){return t?s(t)?e=>N([],e.querySelectorAll("*")).some(t):d(t)?e=>!!Lt(t,e):u(t)||r(t)||h(t)?e=>e.contains(t):(t=Gt(t,{node:!0,fragment:!0,shadow:!0})).length?e=>t.some((t=>e.contains(t))):t=>!e:t=>e}function zt(e,n={}){const o=Wt(n);if(!t(e))return Mt(e,n.context||X(),o,n);for(const t of e){const e=Mt(t,n.context||X(),o,n);if(e)return e}}function Gt(e,n={}){const o=Wt(n);if(!t(e))return Ft(e,n.context||X(),o,n);const r=e.flatMap((t=>Ft(t,n.context||X(),o,n)));return e.length>1&&r.length>1?O(r):r}function Wt(t){if(!t)return o;const e=[];return t.node?e.push(u):e.push(o),t.document&&e.push(n),t.window&&e.push(m),t.fragment&&e.push(r),t.shadow&&e.push(h),t=>e.some((e=>e(t)))}function Xt(t,e,n){const o=Gt(t).map((t=>new St(t,e,n)));return xt(),new Nt(o)}function Ut(t,{finish:e=!0}={}){const n=Gt(t);for(const t of n){if(!st.has(t))continue;const n=st.get(t);for(const t of n)t.stop({finish:e})}}function Yt(t,e){return te(t,{direction:"top",...e})}function Vt(t,e){return ee(t,{direction:"top",...e})}function Qt(t,e){return Xt(t,((t,e)=>t.style.setProperty("opacity",e<1?e.toFixed(2):"")),e)}function Jt(t,e){return Xt(t,((t,e)=>t.style.setProperty("opacity",e<1?(1-e).toFixed(2):"")),e)}function Zt(t,e){return Xt(t,((t,e,n)=>{const o=((90-90*e)*(n.inverse?-1:1)).toFixed(2);t.style.setProperty("transform",e<1?`rotate3d(${n.x}, ${n.y}, ${n.z}, ${o}deg)`:"")}),{x:0,y:1,z:0,...e})}function Kt(t,e){return Xt(t,((t,e,n)=>{const o=(90*e*(n.inverse?-1:1)).toFixed(2);t.style.setProperty("transform",e<1?`rotate3d(${n.x}, ${n.y}, ${n.z}, ${o}deg)`:"")}),{x:0,y:1,z:0,...e})}function te(t,e){return Xt(t,((t,e,n)=>{if(1===e)return t.style.setProperty("overflow",""),void(n.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const o=A(n.direction);let r,s,i;["top","bottom"].includes(o)?(r=t.clientHeight,s=n.useGpu?"Y":"margin-top",i="top"===o):(r=t.clientWidth,s=n.useGpu?"X":"margin-left",i="left"===o);const u=((r-r*e)*(i?-1:1)).toFixed(2);n.useGpu?t.style.setProperty("transform",`translate${s}(${u}px)`):t.style.setProperty(s,`${u}px`)}),{direction:"bottom",useGpu:!0,...e})}function ee(t,e){return Xt(t,((t,e,n)=>{if(1===e)return t.style.setProperty("overflow",""),void(n.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const o=A(n.direction);let r,s,i;["top","bottom"].includes(o)?(r=t.clientHeight,s=n.useGpu?"Y":"margin-top",i="top"===o):(r=t.clientWidth,s=n.useGpu?"X":"margin-left",i="left"===o);const u=(r*e*(i?-1:1)).toFixed(2);n.useGpu?t.style.setProperty("transform",`translate${s}(${u}px)`):t.style.setProperty(s,`${u}px`)}),{direction:"bottom",useGpu:!0,...e})}function ne(t,e){const n=Gt(t);e={direction:"bottom",useGpu:!0,...e};const o=n.map((t=>{const n=t.style.height,o=t.style.width;return t.style.setProperty("overflow","hidden"),new St(t,((t,e,r)=>{if(t.style.setProperty("height",n),t.style.setProperty("width",o),1===e)return t.style.setProperty("overflow",""),void(r.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const s=A(r.direction);let i,u,c;["top","bottom"].includes(s)?(i=t.clientHeight,u="height","top"===s&&(c=r.useGpu?"Y":"margin-top")):(i=t.clientWidth,u="width","left"===s&&(c=r.useGpu?"X":"margin-left"));const a=(i*e).toFixed(2);if(t.style.setProperty(u,`${a}px`),c){const e=(i-a).toFixed(2);r.useGpu?t.style.setProperty("transform",`translate${c}(${e}px)`):t.style.setProperty(c,`${e}px`)}}),e)}));return xt(),new Nt(o)}function oe(t,e){const n=Gt(t);e={direction:"bottom",useGpu:!0,...e};const o=n.map((t=>{const n=t.style.height,o=t.style.width;return t.style.setProperty("overflow","hidden"),new St(t,((t,e,r)=>{if(t.style.setProperty("height",n),t.style.setProperty("width",o),1===e)return t.style.setProperty("overflow",""),void(r.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const s=A(r.direction);let i,u,c;["top","bottom"].includes(s)?(i=t.clientHeight,u="height","top"===s&&(c=r.useGpu?"Y":"margin-top")):(i=t.clientWidth,u="width","left"===s&&(c=r.useGpu?"X":"margin-left"));const a=(i-i*e).toFixed(2);if(t.style.setProperty(u,`${a}px`),c){const e=(i-a).toFixed(2);r.useGpu?t.style.setProperty("transform",`translate${c}(${e}px)`):t.style.setProperty(c,`${e}px`)}}),e)}));return xt(),new Nt(o)}function re(t){const e=zt(t,{node:!0});if(e&&e.parentNode)return N([],e.parentNode.children).indexOf(e)}function se(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).findIndex(e)}function ie(t){const e=Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0});for(const t of e)t.normalize()}function ue(t){return pt(ce(t))}function ce(t){return Gt(t,{fragment:!0,shadow:!0}).reduce(((t,e)=>{if(o(e)&&e.matches("form")||r(e)||h(e))return t.concat(ce(e.querySelectorAll("input, select, textarea")));if(o(e)&&e.matches("[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)"))return t;const n=e.getAttribute("name");if(!n)return t;if(o(e)&&e.matches("select[multiple]"))for(const o of e.selectedOptions)t.push({name:n,value:o.value||""});else t.push({name:n,value:e.value||""});return t}),[])}function ae(t){return Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0}).sort(((t,e)=>{if(m(t))return 1;if(m(e))return-1;if(n(t))return 1;if(n(e))return-1;if(r(e))return 1;if(r(t))return-1;if(h(t)&&(t=t.host),h(e)&&(e=e.host),t.isSameNode(e))return 0;const o=t.compareDocumentPosition(e);return o&Node.DOCUMENT_POSITION_FOLLOWING||o&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:o&Node.DOCUMENT_POSITION_PRECEDING||o&Node.DOCUMENT_POSITION_CONTAINS?1:0}))}function fe(t){const e=zt(t);if(e)return e.tagName.toLowerCase()}function le(t,e){return he(t,e,{first:!0})}function he(t,e,{first:n=!1,elementsOnly:o=!0}={}){e=kt(e);const r=Gt(t,{fragment:!0,shadow:!0,document:!0}),s=[];for(const t of r){const r=N([],o?t.children:t.childNodes);for(const t of r)if(e(t)&&(s.push(t),n))break}return r.length>1&&s.length>1?O(s):s}function de(t,e,n){return xe(t,e,n,{first:!0})}function pe(t){const e=ae(t);if(!e.length)return;if(e.some((t=>!t.parentNode)))return;const n=Ct();return 1===e.length?n.selectNode(e.shift()):(n.setStartBefore(e.shift()),n.setEndAfter(e.pop())),n.commonAncestorContainer}function me(t){return he(t,!1,{elementsOnly:!1})}function ge(t){const e=zt(t);if(e)return e.content}function we(t,e){e=kt(e);const n=Gt(t,{node:!0}),r=[];for(let t of n)for(;t=t.nextSibling;)if(o(t)){e(t)&&r.push(t);break}return n.length>1&&r.length>1?O(r):r}function ye(t,e,n,{first:r=!1}={}){e=kt(e),n=kt(n,!1);const s=Gt(t,{node:!0}),i=[];for(let t of s)for(;t=t.nextSibling;)if(o(t)){if(n(t))break;if(e(t)&&(i.push(t),r))break}return s.length>1&&i.length>1?O(i):i}function be(t){const e=zt(t);if(e)return e.offsetParent}function ve(t,e){e=kt(e);const n=Gt(t,{node:!0}),o=[];for(let t of n)t=t.parentNode,t&&e(t)&&o.push(t);return n.length>1&&o.length>1?O(o):o}function xe(t,e,o,{first:r=!1}={}){e=kt(e),o=kt(o,!1);const s=Gt(t,{node:!0}),i=[];for(let t of s){const s=[];for(;(t=t.parentNode)&&!n(t)&&!o(t)&&(!e(t)||(s.unshift(t),!r)););i.push(...s)}return s.length>1&&i.length>1?O(i):i}function _e(t,e){e=kt(e);const n=Gt(t,{node:!0}),r=[];for(let t of n)for(;t=t.previousSibling;)if(o(t)){e(t)&&r.push(t);break}return n.length>1&&r.length>1?O(r):r}function Se(t,e,n,{first:r=!1}={}){e=kt(e),n=kt(n,!1);const s=Gt(t,{node:!0}),i=[];for(let t of s){const s=[];for(;t=t.previousSibling;)if(o(t)){if(n(t))break;if(e(t)&&(s.unshift(t),r))break}i.push(...s)}return s.length>1&&i.length>1?O(i):i}function Ne(t){const e=zt(t);if(e)return e.shadowRoot}function Oe(t,e,{elementsOnly:n=!0}={}){e=kt(e);const o=Gt(t,{node:!0}),r=[];for(const t of o){const o=t.parentNode;if(!o)continue;const s=n?o.children:o.childNodes;let i;for(i of s)t.isSameNode(i)||e(i)&&r.push(i)}return o.length>1&&r.length>1?O(r):r}function Te(t,e,n){const o=e.match(/(?:^\s*\:scope|\,(?=(?:(?:[^"']*["']){2})*[^"']*$)\s*\:scope)/)?function(t,e){return n=>{const o=N([],t.querySelectorAll(e));return!!o.length&&(o.includes(n)?n:de(n,(t=>o.includes(t)),(e=>e.isSameNode(t))).shift())}}(t,e):function(t,e){return n=>n.matches&&n.matches(e)?n:de(n,(t=>t.matches(e)),(e=>e.isSameNode(t))).shift()}(t,e);return e=>{if(t.isSameNode(e.target))return;const r=o(e.target);return r?(Object.defineProperty(e,"currentTarget",{value:r,configurable:!0}),Object.defineProperty(e,"delegateTarget",{value:t,configurable:!0}),n(e)):void 0}}function Ce(t,e){return n=>{if(!("namespaceRegExp"in n)||n.namespaceRegExp.test(t))return e(n)}}function Pe(t){return e=>{!1===t(e)&&e.preventDefault()}}function Ae(t,e,n,{capture:o=null,delegate:r=null}={}){return s=>(Le(t,e,n,{capture:o,delegate:r}),n(s))}function qe(t,e,n,{capture:o=!1,delegate:r=null,passive:s=!1,selfDestruct:i=!1}={}){const u=Gt(t,{shadow:!0,document:!0,window:!0});e=nt(e);for(const t of e){const e=et(t),c={callback:n,delegate:r,selfDestruct:i,capture:o,passive:s};for(const a of u){ut.has(a)||ut.set(a,{});const u=ut.get(a);let f=n;i&&(f=Ae(a,t,f,{capture:o,delegate:r})),f=Pe(f),r&&(f=Te(a,r,f)),f=Ce(t,f),c.realCallback=f,c.eventName=t,c.realEventName=e,u[e]||(u[e]=[]),u[e].push({...c}),a.addEventListener(e,f,{capture:o,passive:s})}}}function Ee(t,e,n,o,{capture:r=!1,passive:s=!1}={}){qe(t,e,o,{capture:r,delegate:n,passive:s})}function De(t,e,n,o,{capture:r=!1,passive:s=!1}={}){qe(t,e,o,{capture:r,delegate:n,passive:s,selfDestruct:!0})}function je(t,e,n,{capture:o=!1,passive:r=!1}={}){qe(t,e,n,{capture:o,passive:r,selfDestruct:!0})}function $e(t,e){const n=Gt(t,{shadow:!0,document:!0,window:!0});for(const t of n){const n=ut.get(t);for(const t of Object.values(n))for(const n of t)qe(e,n.eventName,n.callback,{capture:n.capture,delegate:n.delegate,passive:n.passive,selfDestruct:n.selfDestruct})}}function Le(t,e,n,{capture:o=null,delegate:r=null}={}){const s=Gt(t,{shadow:!0,document:!0,window:!0});let i;if(e){e=nt(e),i={};for(const t of e){const e=et(t);e in i||(i[e]=[]),i[e].push(t)}}for(const t of s){if(!ut.has(t))continue;const e=ut.get(t);for(const[s,u]of Object.entries(e))i&&!(s in i)||u.filter((e=>!(!i||i[s].some((t=>{if(t===s)return!0;const n=J(t);return e.eventName.match(n)})))||!(!n||n===e.callback)||!(!r||r===e.delegate)||null!==o&&o!==e.capture||(t.removeEventListener(s,e.realCallback,e.capture),!1))).length||delete e[s];Object.keys(e).length||ut.delete(t)}}function Re(t,e,n,o,{capture:r=null}={}){Le(t,e,o,{capture:r,delegate:n})}function Be(t,e,{data:n=null,detail:o=null,bubbles:r=!0,cancelable:s=!0}={}){const i=Gt(t,{shadow:!0,document:!0,window:!0});e=nt(e);for(const t of e){const e=et(t),u=new CustomEvent(e,{detail:o,bubbles:r,cancelable:s});n&&Object.assign(u,n),e!==t&&(u.namespace=t.substring(e.length+1),u.namespaceRegExp=J(t));for(const t of i)t.dispatchEvent(u)}}function Ie(t,e,{data:n=null,detail:o=null,bubbles:r=!0,cancelable:s=!0}={}){const i=zt(t,{shadow:!0,document:!0,window:!0}),u=et(e),c=new CustomEvent(u,{detail:o,bubbles:r,cancelable:s});return n&&Object.assign(c,n),u!==e&&(c.namespace=e.substring(u.length+1),c.namespaceRegExp=J(e)),i.dispatchEvent(c)}function Me(t,{deep:e=!0,events:n=!1,data:o=!1,animations:r=!1}={}){return Gt(t,{node:!0,fragment:!0}).map((t=>{const s=t.cloneNode(e);return(n||o||r)&&Fe(t,s,{deep:e,events:n,data:o,animations:r}),s}))}function Fe(t,e,{deep:n=!0,events:o=!1,data:r=!1,animations:s=!1}={}){if(o&&ut.has(t)){const n=ut.get(t);for(const t of Object.values(n))for(const n of t)qe(e,n.eventName,n.callback,{capture:n.capture,delegate:n.delegate,selfDestruct:n.selfDestruct})}if(r&&it.has(t)){const n=it.get(t);it.set(e,{...n})}if(s&&st.has(t)){const n=st.get(t);for(const t of n)t.clone(e)}if(n)for(const[i,u]of t.childNodes.entries())Fe(u,e.childNodes.item(i),{deep:n,events:o,data:r,animations:s})}function ke(t){const e=Gt(t,{node:!0});for(const t of e)t.remove();return e}function He(t){const e=Gt(t,{fragment:!0,shadow:!0,document:!0});for(const t of e){const e=N([],t.childNodes);for(const n of e)(o(t)||r(t)||h(t))&&Ge(n),n.remove();t.shadowRoot&&Ge(t.shadowRoot),t.content&&Ge(t.content)}}function ze(t){const e=Gt(t,{node:!0,fragment:!0,shadow:!0});for(const t of e)(o(t)||r(t)||h(t))&&Ge(t),u(t)&&t.remove()}function Ge(t){if(ut.has(t)){const e=ut.get(t);if("remove"in e){const e=new CustomEvent("remove",{bubbles:!1,cancelable:!1});t.dispatchEvent(e)}for(const[n,o]of Object.entries(e))for(const e of o)t.removeEventListener(n,e.realCallback,{capture:e.capture});ut.delete(t)}if(ct.has(t)&&ct.delete(t),st.has(t)){const e=st.get(t);for(const t of e)t.stop()}at.has(t)&&at.delete(t),it.has(t)&&it.delete(t);const e=N([],t.children);for(const t of e)Ge(t);t.shadowRoot&&Ge(t.shadowRoot),t.content&&Ge(t.content)}function We(t,e){Xe(e,t)}function Xe(t,e){let n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});const r=Tt();for(const t of o)r.insertBefore(t,null);o=N([],r.childNodes),n=n.filter((t=>!o.includes(t)&&!n.some((e=>!e.isSameNode(t)&&e.contains(t)))));for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let s;s=t===n.length-1?o:Me(o,{events:!0,data:!0,animations:!0});for(const t of s)r.insertBefore(t,e)}ze(n)}function Ue(t,e){const n=zt(t);if(n)return e?n.getAttribute(e):Object.fromEntries(N([],n.attributes).map((t=>[t.nodeName,t.nodeValue])))}function Ye(t,e){const n=zt(t);if(n)return e?(e=R(e),tt(n.dataset[e])):Object.fromEntries(Object.entries(n.dataset).map((([t,e])=>[t,tt(e)])))}function Ve(t){return Qe(t,"innerHTML")}function Qe(t,e){const n=zt(t);if(n)return n[e]}function Je(t){return Qe(t,"textContent")}function Ze(t){return Qe(t,"value")}function Ke(t,e){const n=Gt(t);for(const t of n)t.removeAttribute(e)}function tn(t,e){const n=Gt(t);for(const t of n)e=R(e),delete t.dataset[e]}function en(t,e){const n=Gt(t);for(const t of n)delete t[e]}function nn(t,e,n){const o=Gt(t),r=K(e,n);for(const[t,e]of Object.entries(r))for(const n of o)n.setAttribute(t,e)}function on(t,e,n){const o=Gt(t),r=K(e,n,{json:!0});for(let[t,e]of Object.entries(r)){t=R(t);for(const n of o)n.dataset[t]=e}}function rn(t,e){const n=Gt(t);for(const t of n){const n=N([],t.children);for(const t of n)Ge(t);t.shadowRoot&&Ge(t.shadowRoot),t.content&&Ge(t.content),t.innerHTML=e}}function sn(t,e,n){const o=Gt(t),r=K(e,n);for(const[t,e]of Object.entries(r))for(const n of o)n[t]=e}function un(t,e){const n=Gt(t);for(const t of n){const n=N([],t.children);for(const t of n)Ge(t);t.shadowRoot&&Ge(t.shadowRoot),t.content&&Ge(t.content),t.textContent=e}}function cn(t,e){const n=Gt(t);for(const t of n)t.value=e}function an(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}),o=Gt(e,{fragment:!0,shadow:!0,document:!0,window:!0});for(const t of n)it.has(t)&&hn(o,{...it.get(t)})}function fn(t,e){const n=zt(t,{fragment:!0,shadow:!0,document:!0,window:!0});if(!n||!it.has(n))return;const o=it.get(n);return e?o[e]:o}function ln(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0});for(const t of n){if(!it.has(t))continue;const n=it.get(t);e&&delete n[e],e&&Object.keys(n).length||it.delete(t)}}function hn(t,e,n){const o=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}),r=K(e,n);for(const t of o){it.has(t)||it.set(t,{});const e=it.get(t);Object.assign(e,r)}}function dn(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)t.classList.add(...e)}function pn(t,e){const n=zt(t);if(!n)return;at.has(n)||at.set(n,U().getComputedStyle(n));const o=at.get(n);return e?(e=M(e),o.getPropertyValue(e)):{...o}}function mn(t,e){const n=zt(t);if(!n)return;if(e)return e=M(e),n.style[e];const o={};for(const t of n.style)o[t]=n.style[t];return o}function gn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","none")}function wn(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)t.classList.remove(...e)}function yn(t,e,n,{important:o=!1}={}){const r=Gt(t),s=K(e,n);for(let[t,e]of Object.entries(s)){t=M(t),e&&a(e)&&!CSS.supports(t,e)&&(e+="px");for(const n of r)n.style.setProperty(t,e,o?"important":"")}}function bn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","")}function vn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","none"===t.style.display?"":"none")}function xn(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)for(const n of e)t.classList.toggle(n)}function _n(t,{offset:e=!1}={}){const n=En(t,{offset:e});if(n)return{x:n.left+n.width/2,y:n.top+n.height/2}}function Sn(t,e){const n=En(e);if(!n)return;const o=Gt(t),r=X(),s=U(),i=t=>r.documentElement.scrollHeight>s.outerHeight,u=t=>r.documentElement.scrollWidth>s.outerWidth,c=i(),a=u();for(const t of o){const e=En(t);let o,r;if(e.height>n.height&&t.style.setProperty("height",`${n.height}px`),e.width>n.width&&t.style.setProperty("width",`${n.width}px`),e.left-n.left<0?o=e.left-n.left:e.right-n.right>0&&(o=e.right-n.right),o){const e=pn(t,"left"),n=e&&"auto"!==e?parseFloat(e):0;t.style.setProperty("left",n-o+"px")}if(e.top-n.top<0?r=e.top-n.top:e.bottom-n.bottom>0&&(r=e.bottom-n.bottom),r){const e=pn(t,"top"),n=e&&"auto"!==e?parseFloat(e):0;t.style.setProperty("top",n-r+"px")}"static"===pn(t,"position")&&t.style.setProperty("position","relative")}const f=i(),l=u();c===f&&a===l||Sn(o,e)}function Nn(t,e,n,{offset:o=!1}={}){const r=_n(t,{offset:o});if(r)return y(r.x,r.y,e,n)}function On(t,e){const n=_n(e);if(n)return Nn(t,n.x,n.y)}function Tn(t,e,n,{offset:o=!1}={}){let r,s=Number.MAX_VALUE;const i=Gt(t);for(const t of i){const i=Nn(t,e,n,{offset:o});i&&i=4)return r.scrollHeight;let s=r.clientHeight;return e<=0&&(s-=parseInt(pn(r,"padding-top")),s-=parseInt(pn(r,"padding-bottom"))),e>=2&&(s+=parseInt(pn(r,"border-top-width")),s+=parseInt(pn(r,"border-bottom-width"))),e>=3&&(s+=parseInt(pn(r,"margin-top")),s+=parseInt(pn(r,"margin-bottom"))),s}function In(t,{boxSize:e=1,outer:o=!1}={}){let r=zt(t,{document:!0,window:!0});if(!r)return;if(m(r))return o?r.outerWidth:r.innerWidth;if(n(r)&&(r=r.documentElement),e>=4)return r.scrollWidth;let s=r.clientWidth;return e<=0&&(s-=parseInt(pn(r,"padding-left")),s-=parseInt(pn(r,"padding-right"))),e>=2&&(s+=parseInt(pn(r,"border-left-width")),s+=parseInt(pn(r,"border-right-width"))),e>=3&&(s+=parseInt(pn(r,"margin-left")),s+=parseInt(pn(r,"margin-right"))),s}function Mn(t){const e=zt(t);e&&e.blur()}function Fn(t){const e=zt(t);e&&e.click()}function kn(t){const e=zt(t);e&&e.focus()}function Hn(t){"complete"===X().readyState?t():U().addEventListener("DOMContentLoaded",t,{once:!0})}function zn(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0}).reverse();for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let s;s=t===n.length-1?o:Me(o,{events:!0,data:!0,animations:!0});for(const t of s)r.insertBefore(t,e.nextSibling)}}function Gn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){let r;r=t===n.length-1?o:Me(o,{events:!0,data:!0,animations:!0});for(const t of r)e.insertBefore(t,null)}}function Wn(t,e){Gn(e,t)}function Xn(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let s;s=t===n.length-1?o:Me(o,{events:!0,data:!0,animations:!0});for(const t of s)r.insertBefore(t,e)}}function Un(t,e){zn(e,t)}function Yn(t,e){Xn(e,t)}function Vn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){const r=e.firstChild;let s;s=t===n.length-1?o:Me(o,{events:!0,data:!0,animations:!0});for(const t of s)e.insertBefore(t,r)}}function Qn(t,e){Vn(e,t)}function Jn(t,e){const n=Gt(t,{node:!0});e=kt(e);const o=[];for(const t of n){const n=t.parentNode;n&&(o.includes(n)||e(n)&&o.push(n))}for(const t of o){const e=t.parentNode;if(!e)continue;const n=N([],t.childNodes);for(const o of n)e.insertBefore(o,t)}ze(o)}function Zn(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{fragment:!0,html:!0});for(const t of n){const e=t.parentNode;if(!e)continue;const n=Me(o,{events:!0,data:!0,animations:!0}),s=n.slice().shift(),i=r(s)?s.firstChild:s,u=N([],i.querySelectorAll("*")).find((t=>!t.childElementCount))||i;for(const o of n)e.insertBefore(o,t);u.insertBefore(t,null)}}function Kn(t,e){const n=Gt(t,{node:!0}),o=Me(Gt(e,{fragment:!0,html:!0}),{events:!0,data:!0,animations:!0}),s=n[0];if(!s)return;const i=s.parentNode;if(!i)return;const u=o[0],c=r(u)?u.firstChild:u,a=N([],c.querySelectorAll("*")).find((t=>!t.childElementCount))||c;for(const t of o)i.insertBefore(t,s);for(const t of n)a.insertBefore(t,null)}function to(t,e){const n=Gt(t,{node:!0,fragment:!0,shadow:!0}),o=Gt(e,{fragment:!0,html:!0});for(const t of n){const e=N([],t.childNodes),n=Me(o,{events:!0,data:!0,animations:!0}),s=n.slice().shift(),i=r(s)?s.firstChild:s,u=N([],i.querySelectorAll("*")).find((t=>!t.childElementCount))||i;for(const e of n)t.insertBefore(e,null);for(const t of e)u.insertBefore(t,null)}}function eo(t,{queueName:e=null}={}){const n=Gt(t);for(const t of n){if(!ct.has(t))continue;const n=ct.get(t);e&&delete n[e],e&&Object.keys(n).length||ct.delete(t)}}function no(t,{queueName:e="default"}={}){const n=ct.get(t);if(!n||!(e in n))return;const o=n[e].shift();o?Promise.resolve(o(t)).then((n=>{no(t,{queueName:e})})).catch((e=>{ct.delete(t)})):ct.delete(t)}function oo(t,e,{queueName:n="default"}={}){const o=Gt(t);for(const t of o){ct.has(t)||ct.set(t,{});const o=ct.get(t),r=n in o;r||(o[n]=[t=>new Promise((t=>{setTimeout(t,1)}))]),o[n].push(e),r||no(t,{queueName:n})}}function ro(t){return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>t.isConnected))}function so(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>n.some((e=>t.isEqualNode(e)))))}function io(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).filter(e)}function uo(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).find(e)||null}function co(t){return Gt(t,{node:!0}).filter((t=>o(t)&&"fixed"===pn(t,"position")||de(t,(t=>o(t)&&"fixed"===pn(t,"position"))).length))}function ao(t){return Gt(t,{node:!0,document:!0,window:!0}).filter((t=>m(t)?"visible"!==t.document.visibilityState:n(t)?"visible"!==t.visibilityState:!t.offsetParent))}function fo(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).filter(((t,n)=>!e(t,n)))}function lo(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).find(((t,n)=>!e(t,n)))||null}function ho(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>n.some((e=>t.isSameNode(e)))))}function po(t){return Gt(t,{node:!0,document:!0,window:!0}).filter((t=>m(t)?"visible"===t.document.visibilityState:n(t)?"visible"===t.visibilityState:t.offsetParent))}function mo(t){return Gt(t).filter((t=>st.has(t)))}function go(t,e){return Gt(t).filter((t=>t.hasAttribute(e)))}function wo(t){return Gt(t,{fragment:!0,shadow:!0,document:!0}).filter((t=>!!t.childElementCount))}function yo(t,...e){return e=Z(e),Gt(t).filter((t=>e.some((e=>t.classList.contains(e)))))}function bo(t){return Gt(t).filter((t=>parseFloat(pn(t,"animation-duration"))))}function vo(t){return Gt(t).filter((t=>parseFloat(pn(t,"transition-duration"))))}function xo(t,e){return Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0}).filter((t=>!!it.has(t)&&(!e||it.get(t).hasOwnProperty(e))))}function _o(t,e){return e=Ht(e),Gt(t,{fragment:!0,shadow:!0,document:!0}).filter(e)}function So(t,e){return Gt(t).filter((t=>t.hasOwnProperty(e)))}function No(t){const e=Gt(t,{node:!0,fragment:!0,html:!0}).reverse(),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges(),o.collapse();for(const t of e)o.insertNode(t)}function Oo(t){const e=Gt(t,{node:!0,fragment:!0,html:!0}).reverse(),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges();for(const t of e)o.insertNode(t)}function To(t){const e=zt(t,{node:!0});if(e&&"select"in e)return void e.select();const n=U().getSelection();if(n.rangeCount>0&&n.removeAllRanges(),!e)return;const o=Ct();o.selectNode(e),n.addRange(o)}function Co(t){const e=ae(t),n=U().getSelection();if(n.rangeCount&&n.removeAllRanges(),!e.length)return;const o=Ct();1==e.length?o.selectNode(e.shift()):(o.setStartBefore(e.shift()),o.setEndAfter(e.pop())),n.addRange(o)}function Po(t){const e=Gt(t,{fragment:!0,html:!0}),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges();const r=e.slice().shift(),s=N([],r.querySelectorAll("*")).find((t=>!t.childElementCount))||r,i=o.extractContents(),u=N([],i.childNodes);for(const t of u)s.insertBefore(t,null);for(const t of e)o.insertNode(t)}function Ao(t){return Gt(t).some((t=>st.has(t)))}function qo(t,e){return Gt(t).some((t=>t.hasAttribute(e)))}function Eo(t){return Gt(t,{fragment:!0,shadow:!0,document:!0}).some((t=>t.childElementCount))}function Do(t,...e){return e=Z(e),Gt(t).some((t=>e.some((e=>t.classList.contains(e)))))}function jo(t){return Gt(t).some((t=>parseFloat(pn(t,"animation-duration"))))}function $o(t){return Gt(t).some((t=>parseFloat(pn(t,"transition-duration"))))}function Lo(t,e){return Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}).some((t=>!!it.has(t)&&(!e||it.get(t).hasOwnProperty(e))))}function Ro(t,e){return e=R(e),Gt(t).some((t=>!!t.dataset[e]))}function Bo(t,e){return e=Ht(e),Gt(t,{fragment:!0,shadow:!0,document:!0}).some(e)}function Io(t){return Gt(t).some((t=>t.content))}function Mo(t,e){return Gt(t).some((t=>t.hasOwnProperty(e)))}function Fo(t){return Gt(t).some((t=>t.shadowRoot))}function ko(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).some(e)}function Ho(t){return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>t.isConnected))}function zo(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>n.some((e=>t.isEqualNode(e)))))}function Go(t){return Gt(t,{node:!0}).some((t=>o(t)&&"fixed"===pn(t,"position")||de(t,(t=>o(t)&&"fixed"===pn(t,"position"))).length))}function Wo(t){return Gt(t,{node:!0,document:!0,window:!0}).some((t=>m(t)?"visible"!==t.document.visibilityState:n(t)?"visible"!==t.visibilityState:!t.offsetParent))}function Xo(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>n.some((e=>t.isSameNode(e)))))}function Uo(t){return Gt(t,{node:!0,document:!0,window:!0}).some((t=>m(t)?"visible"===t.document.visibilityState:n(t)?"visible"===t.visibilityState:t.offsetParent))}const Yo=qt.prototype;function Vo(t,e=null){if(s(t))return Hn(t);const n=Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0,html:!0,context:e||X()});return new qt(n)}function Qo(t,e,{cache:n=!0,context:o=X()}={}){"async"in(e={src:t,type:"text/javascript",...e})||(e.defer=""),n||(e.src=ft(e.src,"_",Date.now()));const r=o.createElement("script");for(const[t,n]of Object.entries(e))r.setAttribute(t,n);return o.head.appendChild(r),new Promise(((t,e)=>{r.onload=e=>t(),r.onerror=t=>e(t)}))}function Jo(t,e,{cache:n=!0,context:o=X()}={}){e={href:t,rel:"stylesheet",...e},n||(e.href=ft(e.href,"_",Date.now()));const r=o.createElement("link");for(const[t,n]of Object.entries(e))r.setAttribute(t,n);return o.head.appendChild(r),new Promise(((t,e)=>{r.onload=e=>t(),r.onerror=t=>e(t)}))}function Zo(t,e=ot){const n=t.tagName.toLowerCase();if(!(n in e))return void t.remove();const o=[];"*"in e&&o.push(...e["*"]),o.push(...e[n]);const r=N([],t.attributes);for(const e of r)o.find((t=>e.nodeName.match(t)))||t.removeAttribute(e.nodeName);const s=N([],t.children);for(const t of s)Zo(t,e)}Yo.add=function(t,e=null){const n=ae(O(N([],this.get(),Vo(t,e).get())));return new qt(n)},Yo.addClass=function(...t){return dn(this,...t),this},Yo.addEvent=function(t,e,{capture:n=!1,passive:o=!1}={}){return qe(this,t,e,{capture:n,passive:o}),this},Yo.addEventDelegate=function(t,e,n,{capture:o=!1,passive:r=!1}={}){return Ee(this,t,e,n,{capture:o,passive:r}),this},Yo.addEventDelegateOnce=function(t,e,n,{capture:o=!1,passive:r=!1}={}){return De(this,t,e,n,{capture:o,passive:r}),this},Yo.addEventOnce=function(t,e,{capture:n=!1,passive:o=!1}={}){return je(this,t,e,{capture:n,passive:o}),this},Yo.after=function(t){return zn(this,t),this},Yo.afterSelection=function(){return No(this),this},Yo.animate=function(t,{queueName:e="default",...n}={}){return this.queue((e=>Xt(e,t,n)),{queueName:e})},Yo.append=function(t){return Gn(this,t),this},Yo.appendTo=function(t){return Wn(this,t),this},Yo.attachShadow=function({open:t=!0}={}){const e=Ot(this,{open:t});return new qt(e?[e]:[])},Yo.before=function(t){return Xn(this,t),this},Yo.beforeSelection=function(){return Oo(this),this},Yo.blur=function(){return Mn(this),this},Yo.center=function({offset:t=!1}={}){return _n(this,{offset:t})},Yo.child=function(t){return new qt(le(this,t))},Yo.children=function(t,{elementsOnly:e=!0}={}){return new qt(he(this,t,{elementsOnly:e}))},Yo.clearQueue=function({queueName:t="default"}={}){return eo(this,{queueName:t}),this},Yo.click=function(){return Fn(this),this},Yo.clone=function(t){const e=Me(this,t);return new qt(e)},Yo.cloneData=function(t){return an(this,t),this},Yo.cloneEvents=function(t){return $e(this,t),this},Yo.closest=function(t,e){return new qt(de(this,t,e))},Yo.commonAncestor=function(){const t=pe(this);return new qt(t?[t]:[])},Yo.connected=function(){return new qt(ro(this))},Yo.constrain=function(t){return Sn(this,t),this},Yo.contents=function(){return new qt(me(this))},Yo.css=function(t){return pn(this,t)},Yo.delay=function(t,{queueName:e="default"}={}){return this.queue((e=>new Promise((e=>setTimeout(e,t)))),{queueName:e})},Yo.detach=function(){return ke(this),this},Yo.distTo=function(t,e,{offset:n=!1}={}){return Nn(this,t,e,{offset:n})},Yo.distToNode=function(t){return On(this,t)},Yo.dropIn=function({queueName:t="default",...e}={}){return this.queue((t=>Yt(t,e)),{queueName:t})},Yo.dropOut=function({queueName:t="default",...e}={}){return this.queue((t=>Vt(t,e)),{queueName:t})},Yo.empty=function(){return He(this),this},Yo.eq=function(t){const e=this.get(t);return new qt(e?[e]:[])},Yo.equal=function(t){return new qt(so(this,t))},Yo.fadeIn=function({queueName:t="default",...e}={}){return this.queue((t=>Qt(t,e)),{queueName:t})},Yo.fadeOut=function({queueName:t="default",...e}={}){return this.queue((t=>Jt(t,e)),{queueName:t})},Yo.filter=function(t){return new qt(io(this,t))},Yo.filterOne=function(t){const e=uo(this,t);return new qt(e?[e]:[])},Yo.find=function(t){return new qt(Et(t,this))},Yo.findByClass=function(t){return new qt(Dt(t,this))},Yo.findById=function(t){return new qt(jt(t,this))},Yo.findByTag=function(t){return new qt($t(t,this))},Yo.findOne=function(t){const e=Lt(t,this);return new qt(e?[e]:[])},Yo.findOneByClass=function(t){const e=Rt(t,this);return new qt(e?[e]:[])},Yo.findOneById=function(t){const e=Bt(t,this);return new qt(e?[e]:[])},Yo.findOneByTag=function(t){const e=It(t,this);return new qt(e?[e]:[])},Yo.first=function(){return this.eq(0)},Yo.fixed=function(){return new qt(co(this))},Yo.focus=function(){return kn(this),this},Yo.fragment=function(){const t=ge(this);return new qt(t?[t]:[])},Yo.getAttribute=function(t){return Ue(this,t)},Yo.getData=function(t){return fn(this,t)},Yo.getDataset=function(t){return Ye(this,t)},Yo.getHTML=function(){return Ve(this)},Yo.getProperty=function(t){return Qe(this,t)},Yo.getScrollX=function(){return Dn(this)},Yo.getScrollY=function(){return jn(this)},Yo.getStyle=function(t){return mn(this,t)},Yo.getText=function(){return Je(this)},Yo.getValue=function(){return Ze(this)},Yo.hasAnimation=function(){return Ao(this)},Yo.hasAttribute=function(t){return qo(this,t)},Yo.hasChildren=function(){return Eo(this)},Yo.hasClass=function(...t){return Do(this,...t)},Yo.hasCSSAnimation=function(){return jo(this)},Yo.hasCSSTransition=function(){return $o(this)},Yo.hasData=function(t){return Lo(this,t)},Yo.hasDataset=function(t){return Ro(this,t)},Yo.hasDescendent=function(t){return Bo(this,t)},Yo.hasFragment=function(){return Io(this)},Yo.hasProperty=function(t){return Mo(this,t)},Yo.hasShadow=function(){return Fo(this)},Yo.height=function({boxSize:t=1,outer:e=!1}={}){return Bn(this,{boxSize:t,outer:e})},Yo.hidden=function(){return new qt(ao(this))},Yo.hide=function(){return gn(this),this},Yo.index=function(){return re(this)},Yo.indexOf=function(t){return se(this,t)},Yo.insertAfter=function(t){return Un(this,t),this},Yo.insertBefore=function(t){return Yn(this,t),this},Yo.is=function(t){return ko(this,t)},Yo.isConnected=function(){return Ho(this)},Yo.isEqual=function(t){return zo(this,t)},Yo.isFixed=function(){return Go(this)},Yo.isHidden=function(){return Wo(this)},Yo.isSame=function(t){return Xo(this,t)},Yo.isVisible=function(){return Uo(this)},Yo.last=function(){return this.eq(-1)},Yo.nearestTo=function(t,e,{offset:n=!1}={}){const o=Tn(this,t,e,{offset:n});return new qt(o?[o]:[])},Yo.nearestToNode=function(t){const e=Cn(this,t);return new qt(e?[e]:[])},Yo.next=function(t){return new qt(we(this,t))},Yo.nextAll=function(t,e){return new qt(ye(this,t,e))},Yo.normalize=function(){return ie(this),this},Yo.not=function(t){return new qt(fo(this,t))},Yo.notOne=function(t){const e=lo(this,t);return new qt(e?[e]:[])},Yo.offsetParent=function(){const t=be(this);return new qt(t?[t]:[])},Yo.parent=function(t){return new qt(ve(this,t))},Yo.parents=function(t,e){return new qt(xe(this,t,e))},Yo.percentX=function(t,{offset:e=!1,clamp:n=!0}={}){return Pn(this,t,{offset:e,clamp:n})},Yo.percentY=function(t,{offset:e=!1,clamp:n=!0}={}){return An(this,t,{offset:e,clamp:n})},Yo.position=function({offset:t=!1}={}){return qn(this,{offset:t})},Yo.prepend=function(t){return Vn(this,t),this},Yo.prependTo=function(t){return Qn(this,t),this},Yo.prev=function(t){return new qt(_e(this,t))},Yo.prevAll=function(t,e){return new qt(Se(this,t,e))},Yo.queue=function(t,{queueName:e="default"}={}){return oo(this,t,{queueName:e}),this},Yo.rect=function({offset:t=!1}={}){return En(this,{offset:t})},Yo.remove=function(){return ze(this),this},Yo.removeAttribute=function(t){return Ke(this,t),this},Yo.removeClass=function(...t){return wn(this,...t),this},Yo.removeData=function(t){return ln(this,t),this},Yo.removeDataset=function(t){return tn(this,t),this},Yo.removeEvent=function(t,e,{capture:n=null}={}){return Le(this,t,e,{capture:n}),this},Yo.removeEventDelegate=function(t,e,n,{capture:o=null}={}){return Re(this,t,e,n,{capture:o}),this},Yo.removeProperty=function(t){return en(this,t),this},Yo.replaceAll=function(t){return We(this,t),this},Yo.replaceWith=function(t){return Xe(this,t),this},Yo.rotateIn=function({queueName:t="default",...e}={}){return this.queue((t=>Zt(t,e)),{queueName:t})},Yo.rotateOut=function({queueName:t="default",...e}={}){return this.queue((t=>Kt(t,e)),{queueName:t})},Yo.same=function(t){return new qt(ho(this,t))},Yo.select=function(){return To(this),this},Yo.selectAll=function(){return Co(this),this},Yo.serialize=function(){return ue(this)},Yo.serializeArray=function(){return ce(this)},Yo.setAttribute=function(t,e){return nn(this,t,e),this},Yo.setData=function(t,e){return hn(this,t,e),this},Yo.setDataset=function(t,e){return on(this,t,e),this},Yo.setHTML=function(t){return rn(this,t),this},Yo.setProperty=function(t,e){return sn(this,t,e),this},Yo.setScroll=function(t,e){return $n(this,t,e),this},Yo.setScrollX=function(t){return Ln(this,t),this},Yo.setScrollY=function(t){return Rn(this,t),this},Yo.setStyle=function(t,e,{important:n=!1}={}){return yn(this,t,e,{important:n}),this},Yo.setText=function(t){return un(this,t),this},Yo.setValue=function(t){return cn(this,t),this},Yo.shadow=function(){const t=Ne(this);return new qt(t?[t]:[])},Yo.show=function(){return bn(this),this},Yo.siblings=function(t,{elementsOnly:e=!0}={}){return new qt(Oe(this,t,{elementsOnly:e}))},Yo.slideIn=function({queueName:t="default",...e}={}){return this.queue((t=>te(t,e)),{queueName:t})},Yo.slideOut=function({queueName:t="default",...e}={}){return this.queue((t=>ee(t,e)),{queueName:t})},Yo.sort=function(){return new qt(ae(this))},Yo.squeezeIn=function({queueName:t="default",...e}={}){return this.queue((t=>ne(t,e)),{queueName:t})},Yo.squeezeOut=function({queueName:t="default",...e}={}){return this.queue((t=>oe(t,e)),{queueName:t})},Yo.stop=function({finish:t=!0}={}){return this.clearQueue(),Ut(this,{finish:t}),this},Yo.tagName=function(){return fe(this)},Yo.toggle=function(){return vn(this),this},Yo.toggleClass=function(...t){return xn(this,...t),this},Yo.triggerEvent=function(t,{data:e=null,detail:n=null,bubbles:o=!0,cancelable:r=!0}={}){return Be(this,t,{data:e,detail:n,bubbles:o,cancelable:r}),this},Yo.triggerOne=function(t,{data:e=null,detail:n=null,bubbles:o=!0,cancelable:r=!0}={}){return Ie(this,t,{data:e,detail:n,bubbles:o,cancelable:r})},Yo.unwrap=function(t){return Jn(this,t),this},Yo.visible=function(){return new qt(po(this))},Yo.width=function({boxSize:t=1,outer:e=!1}={}){return In(this,{boxSize:t,outer:e})},Yo.withAnimation=function(){return new qt(mo(this))},Yo.withAttribute=function(t){return new qt(go(this,t))},Yo.withChildren=function(){return new qt(wo(this))},Yo.withClass=function(t){return new qt(yo(this,t))},Yo.withCSSAnimation=function(){return new qt(bo(this))},Yo.withCSSTransition=function(){return new qt(vo(this))},Yo.withData=function(t){return new qt(xo(this,t))},Yo.withDescendent=function(t){return new qt(_o(this,t))},Yo.withProperty=function(t){return new qt(So(this,t))},Yo.wrap=function(t){return Zn(this,t),this},Yo.wrapAll=function(t){return Kn(this,t),this},Yo.wrapInner=function(t){return to(this,t),this},Yo.wrapSelection=function(){return Po(this),this},Object.assign(Vo,{BORDER_BOX:2,CONTENT_BOX:0,MARGIN_BOX:3,PADDING_BOX:1,SCROLL_BOX:4,Animation:St,AnimationSet:Nt,QuerySet:qt,addClass:dn,addEvent:qe,addEventDelegate:Ee,addEventDelegateOnce:De,addEventOnce:je,after:zn,afterSelection:No,ajax:function(t){return new yt(t)},animate:Xt,append:Gn,appendTo:Wn,attachShadow:Ot,before:Xn,beforeSelection:Oo,blur:Mn,center:_n,child:le,children:he,clearQueue:eo,click:Fn,clone:Me,cloneData:an,cloneEvents:$e,closest:de,commonAncestor:pe,connected:ro,constrain:Sn,contents:me,create:function(t="div",e={}){const n=X().createElement(t);if("html"in e?n.innerHTML=e.html:"text"in e&&(n.textContent=e.text),"class"in e){const t=Z(T(e.class));n.classList.add(...t)}if("style"in e)for(let[t,o]of Object.entries(e.style))t=M(t),o&&a(o)&&!CSS.supports(t,o)&&(o+="px"),n.style.setProperty(t,o);if("value"in e&&(n.value=e.value),"attributes"in e)for(const[t,o]of Object.entries(e.attributes))n.setAttribute(t,o);if("properties"in e)for(const[t,o]of Object.entries(e.properties))n[t]=o;if("dataset"in e){const t=K(e.dataset,null,{json:!0});for(let[e,o]of Object.entries(t))e=R(e),n.dataset[e]=o}return n},createComment:function(t){return X().createComment(t)},createFragment:Tt,createRange:Ct,createText:function(t){return X().createTextNode(t)},css:pn,debounce:Q,delete:function(t,e){return new yt({url:t,method:"DELETE",...e})},detach:ke,distTo:Nn,distToNode:On,dropIn:Yt,dropOut:Vt,empty:He,equal:so,exec:function(t,e=null){return X().execCommand(t,!1,e)},extractSelection:function(){const t=U().getSelection();if(!t.rangeCount)return[];const e=t.getRangeAt(0);t.removeAllRanges();const n=e.extractContents();return N([],n.childNodes)},fadeIn:Qt,fadeOut:Jt,filter:io,filterOne:uo,find:Et,findByClass:Dt,findById:jt,findByTag:$t,findOne:Lt,findOneByClass:Rt,findOneById:Bt,findOneByTag:It,fixed:co,focus:kn,fragment:ge,get:function(t,e,n){return new yt({url:t,data:e,...n})},getAjaxDefaults:G,getAnimationDefaults:W,getAttribute:Ue,getContext:X,getCookie:function(t){const e=X().cookie.split(";").find((e=>e.trimStart().substring(0,t.length)===t)).trimStart();return e?decodeURIComponent(e.substring(t.length+1)):null},getData:fn,getDataset:Ye,getHTML:Ve,getProperty:Qe,getScrollX:Dn,getScrollY:jn,getSelection:function(){const t=U().getSelection();if(!t.rangeCount)return[];const e=t.getRangeAt(0),n=N([],e.commonAncestorContainer.querySelectorAll("*"));if(!n.length)return[e.commonAncestorContainer];if(1===n.length)return n;const r=e.startContainer,s=e.endContainer,i=o(r)?r:r.parentNode,u=o(s)?s:s.parentNode,c=n.slice(n.indexOf(i),n.indexOf(u)+1),a=[];let f;for(const t of c)f&&f.contains(t)||(f=t,a.push(t));return a.length>1?O(a):a},getStyle:mn,getText:Je,getValue:Ze,getWindow:U,hasAnimation:Ao,hasAttribute:qo,hasCSSAnimation:jo,hasCSSTransition:$o,hasChildren:Eo,hasClass:Do,hasData:Lo,hasDataset:Ro,hasDescendent:Bo,hasFragment:Io,hasProperty:Mo,hasShadow:Fo,height:Bn,hidden:ao,hide:gn,index:re,indexOf:se,insertAfter:Un,insertBefore:Yn,is:ko,isConnected:Ho,isEqual:zo,isFixed:Go,isHidden:Wo,isSame:Xo,isVisible:Uo,loadScript:Qo,loadScripts:function(t,{cache:e=!0,context:n=X()}={}){return Promise.all(t.map((t=>d(t)?Qo(t,null,{cache:e,context:n}):Qo(null,t,{cache:e,context:n}))))},loadStyle:Jo,loadStyles:function(t,{cache:e=!0,context:n=X()}={}){return Promise.all(t.map((t=>d(t)?Jo(t,null,{cache:e,context:n}):Jo(null,t,{cache:e,context:n}))))},mouseDragFactory:function(t,e,n,{debounce:o=!0,passive:r=!0,preventDefault:s=!0,touches:i=1}={}){return e&&o&&(e=Q(e),n&&(n=Q(n))),o=>{const u="touchstart"===o.type;if(u&&o.touches.length!==i)return;if(t&&!1===t(o))return;if(s&&o.preventDefault(),!e&&!n)return;const[c,a]=o.type in rt?rt[o.type]:rt.mousedown,f=t=>{u&&t.touches.length!==i||(s&&!r&&t.preventDefault(),e&&e(t))},l=t=>{u&&t.touches.length!==i-1||n&&!1===n(t)||(s&&t.preventDefault(),Le(window,c,f),Le(window,a,l))};qe(window,c,f,{passive:r}),qe(window,a,l)}},nearestTo:Tn,nearestToNode:Cn,next:we,nextAll:ye,noConflict:function(){const t=U();t.$===Vo&&(t.$=Ko)},normalize:ie,not:fo,notOne:lo,offsetParent:be,parent:ve,parents:xe,parseDocument:function(t,{contentType:e="text/html"}={}){return Pt.parseFromString(t,e)},parseFormData:dt,parseHTML:At,parseParams:pt,patch:function(t,e,n){return new yt({url:t,data:e,method:"PATCH",...n})},percentX:Pn,percentY:An,position:qn,post:function(t,e,n){return new yt({url:t,data:e,method:"POST",...n})},prepend:Vn,prependTo:Qn,prev:_e,prevAll:Se,put:function(t,e,n){return new yt({url:t,data:e,method:"PUT",...n})},query:Vo,queryOne:function(t,e=null){const n=zt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0,html:!0,context:e||X()});return new qt(n?[n]:[])},queue:oo,ready:Hn,rect:En,remove:ze,removeAttribute:Ke,removeClass:wn,removeCookie:function(t,{path:e=null,secure:n=!1}={}){if(!t)return;let o=`${t}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;e&&(o+=`;path=${e}`),n&&(o+=";secure"),X().cookie=o},removeData:ln,removeDataset:tn,removeEvent:Le,removeEventDelegate:Re,removeProperty:en,replaceAll:We,replaceWith:Xe,rotateIn:Zt,rotateOut:Kt,same:ho,sanitize:function(t,e=ot){const n=X().createElement("template");n.innerHTML=t;const o=n.content,r=N([],o.children);for(const t of r)Zo(t,e);return n.innerHTML},select:To,selectAll:Co,serialize:ue,serializeArray:ce,setAjaxDefaults:function(t){q(k,t)},setAnimationDefaults:function(t){q(H,t)},setAttribute:nn,setContext:Y,setCookie:function(t,e,{expires:n=null,path:o=null,secure:r=!1}={}){if(!t)return;let s=`${t}=${e}`;if(n){const t=new Date;t.setTime(t.getTime()+1e3*n),s+=`;expires=${t.toUTCString()}`}o&&(s+=`;path=${o}`),r&&(s+=";secure"),X().cookie=s},setData:hn,setDataset:on,setHTML:rn,setProperty:sn,setScroll:$n,setScrollX:Ln,setScrollY:Rn,setStyle:yn,setText:un,setValue:cn,setWindow:V,shadow:Ne,show:bn,siblings:Oe,slideIn:te,slideOut:ee,sort:ae,squeezeIn:ne,squeezeOut:oe,stop:Ut,tagName:fe,toggle:vn,toggleClass:xn,triggerEvent:Be,triggerOne:Ie,unwrap:Jn,useTimeout:function(t=!0){z.useTimeout=t},visible:po,width:In,withAnimation:mo,withAttribute:go,withCSSAnimation:bo,withCSSTransition:vo,withChildren:wo,withClass:yo,withData:xo,withDescendent:_o,withProperty:So,wrap:Zn,wrapAll:Kn,wrapInner:to,wrapSelection:Po});for(const[t,e]of Object.entries(F))Vo[`_${t}`]=e;let Ko;function tr(t,e){return V(t),Y(e||t.document),Ko=t.$,t.$=Vo,Vo}return m(globalThis)?tr(globalThis):tr})); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).fQuery=e()}(this,(function(){"use strict";const t=Array.isArray,e=e=>t(e)||f(e)&&!i(e)&&!m(e)&&!o(e)&&(Symbol.iterator in e&&i(e[Symbol.iterator])||"length"in e&&a(e.length)&&(!e.length||e.length-1 in e)),n=t=>!!t&&9===t.nodeType,o=t=>!!t&&1===t.nodeType,r=t=>!!t&&11===t.nodeType&&!t.host,i=t=>"function"==typeof t,s=Number.isNaN,u=t=>!!t&&(1===t.nodeType||3===t.nodeType||8===t.nodeType),c=t=>null===t,a=t=>!s(parseFloat(t))&&isFinite(t),f=t=>!!t&&t===Object(t),l=t=>!!t&&t.constructor===Object,h=t=>!!t&&11===t.nodeType&&!!t.host,d=t=>t===`${t}`,p=t=>void 0===t,m=t=>!!t&&!!t.document&&t.document.defaultView===t,g=(t,e=0,n=1)=>Math.max(e,Math.min(n,t)),w=t=>g(t,0,100),y=(t,e,n,o)=>b(t-n,e-o),b=Math.hypot,v=(t,e,n,o,r)=>(t-e)*(r-o)/(n-e)+o,x=(t=1,e=null)=>c(e)?Math.random()*t:v(Math.random(),0,1,t,e),_=(t=1,e=null)=>0|x(t,e),S=(t,e=.01)=>parseFloat((Math.round(t/e)*e).toFixed(`${e}`.replace(/\d*\.?/,"").length)),N=(t=[],...e)=>e.reduce(((e,n)=>(Array.prototype.push.apply(e,n),t)),t),O=t=>Array.from(new Set(t)),T=n=>p(n)?[]:t(n)?n:e(n)?N([],n):[n],C="undefined"!=typeof window&&"requestAnimationFrame"in window,P=C?(...t)=>window.requestAnimationFrame(...t):t=>setTimeout(t,1e3/60),A=t=>i(t)?t():t,q=(e,...n)=>n.reduce(((e,n)=>{for(const o in n)t(n[o])?e[o]=q(t(e[o])?e[o]:[],n[o]):l(n[o])?e[o]=q(l(e[o])?e[o]:{},n[o]):e[o]=n[o];return e}),e),E=(t,e,n)=>{const o=e.split(".");for(;e=o.shift();){if(!f(t)||!(e in t))return n;t=t[e]}return t},D=(t,e,n,{overwrite:o=!0}={})=>{const r=e.split(".");for(;e=r.shift();){if("*"===e){for(const e in t)({}).hasOwnProperty.call(t,e)&&D(t,[e].concat(r).join("."),n,o);return}r.length?(f(t[e])&&e in t||(t[e]={}),t=t[e]):!o&&e in t||(t[e]=n)}},j={"&":"&","<":"<",">":">",'"':""","'":"'"},$={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"},L=t=>`${t}`.split(/[^a-zA-Z0-9']|(?=[A-Z])/).reduce(((t,e)=>((e=e.replace(/[^\w]/,"").toLowerCase())&&t.push(e),t)),[]),R=t=>L(t).map(((t,e)=>e?B(t):t)).join(""),B=t=>t.charAt(0).toUpperCase()+t.substring(1).toLowerCase(),I=t=>t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),M=t=>L(t).join("-").toLowerCase();var F=Object.freeze({__proto__:null,animation:(t,{leading:e=!1}={})=>{let n,o,r;const i=(...i)=>{o=i,r||(e&&t(...o),r=!0,n=P((i=>{e||t(...o),r=!1,n=null})))};return i.cancel=t=>{n&&(C?global.cancelAnimationFrame(n):clearTimeout(n),r=!1,n=null)},i},camelCase:R,capitalize:B,clamp:g,clampPercent:w,compose:(...t)=>e=>t.reduceRight(((t,e)=>e(t)),e),curry:t=>{const e=(...n)=>n.length>=t.length?t(...n):(...t)=>e(...n.concat(t));return e},debounce:(t,e=0,{leading:n=!1,trailing:o=!0}={})=>{let r,i,s;const u=(...u)=>{const c=Date.now(),a=i?c-i:null;if(n&&(null===a||a>=e))return i=c,void t(...u);s=u,o&&(r&&clearTimeout(r),r=setTimeout((e=>{i=Date.now(),t(...s),r=null}),e))};return u.cancel=t=>{r&&(clearTimeout(r),r=null)},u},diff:(t,...e)=>(e=e.map(O),t.filter((t=>!e.some((e=>e.includes(t)))))),dist:y,escape:t=>t.replace(/[&<>"']/g,(t=>j[t])),escapeRegExp:I,evaluate:A,extend:q,forgetDot:(t,e)=>{const n=e.split(".");for(;(e=n.shift())&&f(t)&&e in t;)n.length?t=t[e]:delete t[e]},getDot:E,hasDot:(t,e)=>{const n=e.split(".");for(;e=n.shift();){if(!f(t)||!(e in t))return!1;t=t[e]}return!0},humanize:t=>B(L(t).join(" ")),intersect:(...t)=>O(t.reduce(((e,n,o)=>(n=O(n),N(e,n.filter((e=>t.every(((t,n)=>o==n||t.includes(e)))))))),[])),inverseLerp:(t,e,n)=>(n-t)/(e-t),isArray:t,isArrayLike:e,isBoolean:t=>t===!!t,isDocument:n,isElement:o,isFragment:r,isFunction:i,isNaN:s,isNode:u,isNull:c,isNumeric:a,isObject:f,isPlainObject:l,isShadow:h,isString:d,isText:t=>!!t&&3===t.nodeType,isUndefined:p,isWindow:m,kebabCase:M,len:b,lerp:(t,e,n)=>t*(1-n)+e*n,map:v,merge:N,once:t=>{let e,n;return(...o)=>(e||(e=!0,n=t(...o)),n)},partial:(t,...e)=>(...n)=>t(...e.slice().map((t=>p(t)?n.shift():t)).concat(n)),pascalCase:t=>L(t).map((t=>t.charAt(0).toUpperCase()+t.substring(1))).join(""),pipe:(...t)=>e=>t.reduce(((t,e)=>e(t)),e),pluckDot:(t,e,n)=>t.map((t=>E(t,e,n))),random:x,randomInt:_,randomString:(t=16,e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789")=>new Array(t).fill().map((t=>e[0|x(e.length)])).join(""),randomValue:t=>t.length?t[_(t.length)]:null,range:(t,e,n=1)=>{const o=Math.sign(e-t);return new Array(Math.abs(e-t)/n+1|0).fill().map(((e,r)=>t+S(r*n*o,n)))},setDot:D,snakeCase:t=>L(t).join("_").toLowerCase(),throttle:(t,e=0,{leading:n=!0,trailing:o=!0}={})=>{let r,i,s,u;const c=(...c)=>{const a=Date.now(),f=i?a-i:null;if(n&&(null===f||f>=e))return i=a,void t(...c);s=c,!u&&o&&(u=!0,r=setTimeout((e=>{i=Date.now(),t(...s),u=!1,r=null}),null===f?e:e-f))};return c.cancel=t=>{r&&(clearTimeout(r),u=!1,r=null)},c},times:(t,e)=>{for(;e--&&!1!==t(););},toStep:S,unescape:t=>t.replace(/&(amp|lt|gt|quot|apos);/g,((t,e)=>$[e])),unique:O,wrap:T});const k={afterSend:null,beforeSend:null,cache:!0,contentType:"application/x-www-form-urlencoded",data:null,headers:{},isLocal:null,method:"GET",onProgress:null,onUploadProgress:null,processData:!0,rejectOnCancel:!0,responseType:null,url:null,xhr:t=>new XMLHttpRequest},H={duration:1e3,type:"ease-in-out",infinite:!1,debug:!1},z={ajaxDefaults:k,animationDefaults:H,context:null,useTimeout:!1,window:null};function G(){return k}function W(){return H}function X(){return z.context}function U(){return z.window}function Y(t){if(!n(t))throw new Error("FrostDOM requires a valid Document.");z.context=t}function V(t){if(!m(t))throw new Error("FrostDOM requires a valid Window.");z.window=t}function Q(t){let e;return(...n)=>{e||(e=!0,Promise.resolve().then((o=>{t(...n),e=!1})))}}function J(t){return new RegExp(`^${I(t)}(?:\\.|$)`,"i")}function Z(t){return t.flat().flatMap((t=>t.split(" "))).filter((t=>!!t))}function K(e,n,{json:o=!1}={}){const r=d(e)?{[e]:n}:e;return o?Object.fromEntries(Object.entries(r).map((([e,n])=>[e,f(n)||t(n)?JSON.stringify(n):n]))):r}function tt(t){if(p(t))return t;const e=t.toLowerCase().trim();if(["true","on"].includes(e))return!0;if(["false","off"].includes(e))return!1;if("null"===e)return null;if(a(e))return parseFloat(e);if(["{","["].includes(e.charAt(0)))try{return JSON.parse(t)}catch(t){}return t}function et(t){return t.split(".").shift()}function nt(t){return t.split(" ")}const ot={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},rt={mousedown:["mousemove","mouseup"],touchstart:["touchmove","touchend"]},it=new Map,st=new WeakMap,ut=new WeakMap,ct=new WeakMap,at=new WeakMap;function ft(t,e,n){const o=lt(t);return o.append(e,n),wt(t,o)}function lt(t){return ht(t).searchParams}function ht(t){const e=U(),n=(e.location.origin+e.location.pathname).replace(/\/$/,"");return new URL(t,n)}function dt(t){const e=gt(t),n=new FormData;for(const[t,o]of e)"[]"===t.substring(t.length-2)?n.append(t,o):n.set(t,o);return n}function pt(t){const e=gt(t).map((([t,e])=>`${t}=${e}`)).join("&");return encodeURI(e)}function mt(e,n){return null===n||p(n)?[]:t(n)?("[]"!==e.substring(e.length-2)&&(e+="[]"),n.flatMap((t=>mt(e,t)))):f(n)?Object.entries(n).flatMap((([t,n])=>mt(`${e}[${t}]`,n))):[[e,n]]}function gt(e){return t(e)?e.flatMap((t=>mt(t.name,t.value))):f(e)?Object.entries(e).flatMap((([t,e])=>mt(t,e))):e}function wt(t,e){const n=ht(t);n.search=e.toString();const o=n.toString(),r=o.indexOf(t);return o.substring(r)}class yt{constructor(t){if(this._options=q({},G(),t),this._options.url||(this._options.url=U().location.href),this._options.cache||(this._options.url=ft(this._options.url,"_",Date.now())),!("Content-Type"in this._options.headers)&&this._options.contentType&&(this._options.headers["Content-Type"]=this._options.contentType),null===this._options.isLocal&&(this._options.isLocal=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol)),this._options.isLocal||"X-Requested-With"in this._options.headers||(this._options.headers["X-Requested-With"]="XMLHttpRequest"),this._promise=new Promise(((t,e)=>{this._resolve=e=>{this._isResolved=!0,t(e)},this._reject=t=>{this._isRejected=!0,e(t)}})),this.xhr=this._options.xhr(),this._options.data&&(this._options.processData&&f(this._options.data)&&("application/json"===this._options.contentType?this._options.data=JSON.stringify(this._options.data):"application/x-www-form-urlencoded"===this._options.contentType?this._options.data=pt(this._options.data):this._options.data=dt(this._options.data)),"GET"===this._options.method)){const t=new URLSearchParams(this._options.data),e=lt(this._options.url);for(const[n,o]of t.entries())e.append(n,o);this._options.url=wt(this._options.url,e),this._options.data=null}this.xhr.open(this._options.method,this._options.url,!0,this._options.username,this._options.password);for(const[t,e]of Object.entries(this._options.headers))this.xhr.setRequestHeader(t,e);this._options.responseType&&(this.xhr.responseType=this._options.responseType),this._options.mimeType&&this.xhr.overrideMimeType(this._options.mimeType),this._options.timeout&&(this.xhr.timeout=this._options.timeout),this.xhr.onload=t=>{this.xhr.status>400?this._reject({status:this.xhr.status,xhr:this.xhr,event:t}):this._resolve({response:this.xhr.response,xhr:this.xhr,event:t})},this._options.isLocal||(this.xhr.onerror=t=>this._reject({status:this.xhr.status,xhr:this.xhr,event:t})),this._options.onProgress&&(this.xhr.onprogress=t=>this._options.onProgress(t.loaded/t.total,this.xhr,t)),this._options.onUploadProgress&&(this.xhr.upload.onprogress=t=>this._options.onUploadProgress(t.loaded/t.total,this.xhr,t)),this._options.beforeSend&&this._options.beforeSend(this.xhr),this.xhr.send(this._options.data),this._options.afterSend&&this._options.afterSend(this.xhr)}cancel(t="Request was cancelled"){this._isResolved||this._isRejected||this._isCancelled||(this.xhr.abort(),this._isCancelled=!0,this._options.rejectOnCancel&&this._reject({status:this.xhr.status,xhr:this.xhr,reason:t}))}catch(t){return this._promise.catch(t)}finally(t){return this._promise.finally(t)}then(t,e){return this._promise.then(t,e)}}Object.setPrototypeOf(yt.prototype,Promise.prototype);let bt=!1;function vt(){return document.timeline?document.timeline.currentTime:performance.now()}function xt(){bt||(bt=!0,_t())}function _t(){const t=vt();for(const[e,n]of it){const o=n.filter((e=>!e.update(t)));o.length?it.set(e,o):it.delete(e)}it.size?z.useTimeout?setTimeout(_t,1e3/60):U().requestAnimationFrame(_t):bt=!1}class St{constructor(t,e,n){this._node=t,this._callback=e,this._options={...W(),...n},"start"in this._options||(this._options.start=vt()),this._options.debug&&(this._node.dataset.animationStart=this._options.start),this._promise=new Promise(((t,e)=>{this._resolve=t,this._reject=e})),it.has(t)||it.set(t,[]),it.get(t).push(this)}catch(t){return this._promise.catch(t)}clone(t){return new St(t,this._callback,this._options)}finally(t){return this._promise.finally(t)}stop({finish:t=!0}={}){if(this._isStopped||this._isFinished)return;const e=it.get(this._node).filter((t=>t!==this));e.length?it.set(this._node,e):it.delete(this._node),t&&this.update(),this._isStopped=!0,t||this._reject(this._node)}then(t,e){return this._promise.then(t,e)}update(t=null){if(this._isStopped)return!0;let e;return null===t?e=1:(e=(t-this._options.start)/this._options.duration,this._options.infinite?e%=1:e=g(e),"ease-in"===this._options.type?e=e**2:"ease-out"===this._options.type?e=Math.sqrt(e):"ease-in-out"===this._options.type&&(e=e<=.5?e**2*2:1-(1-e)**2*2)),this._options.debug&&(this._node.dataset.animationTime=t,this._node.dataset.animationProgress=e),this._callback(this._node,e,this._options),!(e<1||(this._options.debug&&(delete this._node.dataset.animationStart,delete this._node.dataset.animationTime,delete this._node.dataset.animationProgress),this._isFinished||(this._isFinished=!0,this._resolve(this._node)),0))}}Object.setPrototypeOf(St.prototype,Promise.prototype);class Nt{constructor(t){this._animations=t,this._promise=Promise.all(t)}catch(t){return this._promise.catch(t)}finally(t){return this._promise.finally(t)}stop({finish:t=!0}={}){for(const e of this._animations)e.stop({finish:t})}then(t,e){return this._promise.then(t,e)}}function Ot(t,{open:e=!0}={}){const n=zt(t);if(n)return n.attachShadow({mode:e?"open":"closed"})}function Tt(){return X().createDocumentFragment()}function Ct(){return X().createRange()}Object.setPrototypeOf(Nt.prototype,Promise.prototype);const Pt=new DOMParser;function At(t){const e=Ct().createContextualFragment(t).children;return N([],e)}class qt{constructor(t=[]){this._nodes=t}get length(){return this._nodes.length}each(t){return this._nodes.forEach(((e,n)=>t(e,n))),this}get(t=null){return null===t?this._nodes:t<0?this._nodes[t+this._nodes.length]:this._nodes[t]}map(t){const e=this._nodes.map(t);return new qt(e)}slice(t,e){const n=this._nodes.slice(t,e);return new qt(n)}[Symbol.iterator](){return this._nodes.values()}}function Et(t,e=X()){if(!t)return[];const i=t.match(/^([\#\.]?)([\w\-]+)$/);if(i)return"#"===i[1]?jt(i[2],e):"."===i[1]?Dt(i[2],e):$t(i[2],e);if(n(e)||o(e)||r(e)||h(e))return N([],e.querySelectorAll(t));const s=Gt(e,{fragment:!0,shadow:!0,document:!0}),u=[];for(const e of s){const n=e.querySelectorAll(t);u.push(...n)}return s.length>1&&u.length>1?O(u):u}function Dt(t,e=X()){if(n(e)||o(e))return N([],e.getElementsByClassName(t));if(r(e)||h(e))return N([],e.querySelectorAll(`.${t}`));const i=Gt(e,{fragment:!0,shadow:!0,document:!0}),s=[];for(const e of i){const n=r(e)||h(e)?e.querySelectorAll(`.${t}`):e.getElementsByClassName(t);s.push(...n)}return i.length>1&&s.length>1?O(s):s}function jt(t,e=X()){if(n(e)||o(e)||r(e)||h(e))return N([],e.querySelectorAll(`#${t}`));const i=Gt(e,{fragment:!0,shadow:!0,document:!0}),s=[];for(const e of i){const n=e.querySelectorAll(`#${t}`);s.push(...n)}return i.length>1&&s.length>1?O(s):s}function $t(t,e=X()){if(n(e)||o(e))return N([],e.getElementsByTagName(t));if(r(e)||h(e))return N([],e.querySelectorAll(t));const i=Gt(e,{fragment:!0,shadow:!0,document:!0}),s=[];for(const e of i){const n=r(e)||h(e)?e.querySelectorAll(t):e.getElementsByTagName(t);s.push(...n)}return i.length>1&&s.length>1?O(s):s}function Lt(t,e=X()){if(!t)return null;const i=t.match(/^([\#\.]?)([\w\-]+)$/);if(i)return"#"===i[1]?Bt(i[2],e):"."===i[1]?Rt(i[2],e):It(i[2],e);if(n(e)||o(e)||r(e)||h(e))return e.querySelector(t);const s=Gt(e,{fragment:!0,shadow:!0,document:!0});if(s.length){for(const e of s){const n=e.querySelector(t);if(n)return n}return null}}function Rt(t,e=X()){if(n(e)||o(e))return e.getElementsByClassName(t).item(0);if(r(e)||h(e))return e.querySelector(`.${t}`);const i=Gt(e,{fragment:!0,shadow:!0,document:!0});if(i.length){for(const e of i){const n=r(e)||h(e)?e.querySelector(`.${t}`):e.getElementsByClassName(t).item(0);if(n)return n}return null}}function Bt(t,e=X()){if(n(e))return e.getElementById(t);if(o(e)||r(e)||h(e))return e.querySelector(`#${t}`);const i=Gt(e,{fragment:!0,shadow:!0,document:!0});if(i.length){for(const e of i){const o=n(e)?e.getElementById(t):e.querySelector(`#${t}`);if(o)return o}return null}}function It(t,e=X()){if(n(e)||o(e))return e.getElementsByTagName(t).item(0);if(r(e)||h(e))return e.querySelector(t);const i=Gt(e,{fragment:!0,shadow:!0,document:!0});if(i.length){for(const e of i){const n=r(e)||h(e)?e.querySelector(t):e.getElementsByTagName(t).item(0);if(n)return n}return null}}function Mt(t,e,n,{html:o=!1}={}){if(d(t))return o&&"<"===t.trim().charAt(0)?At(t).shift():Lt(t,e);if(n(t))return t;if(t instanceof qt){const e=t.get(0);return n(e)?e:void 0}if(t instanceof HTMLCollection||t instanceof NodeList){const e=t.item(0);return n(e)?e:void 0}}function Ft(t,e,n,{html:o=!1}={}){return d(t)?o&&"<"===t.trim().charAt(0)?At(t):Et(t,e):n(t)?[t]:t instanceof qt?t.get().filter(n):t instanceof HTMLCollection||t instanceof NodeList?N([],t).filter(n):[]}function kt(t,e=!0){return t?i(t)?t:d(t)?e=>o(e)&&e.matches(t):u(t)||r(t)||h(t)?e=>e.isSameNode(t):(t=Gt(t,{node:!0,fragment:!0,shadow:!0})).length?e=>t.includes(e):t=>!e:t=>e}function Ht(t,e=!0){return t?i(t)?e=>N([],e.querySelectorAll("*")).some(t):d(t)?e=>!!Lt(t,e):u(t)||r(t)||h(t)?e=>e.contains(t):(t=Gt(t,{node:!0,fragment:!0,shadow:!0})).length?e=>t.some((t=>e.contains(t))):t=>!e:t=>e}function zt(e,n={}){const o=Wt(n);if(!t(e))return Mt(e,n.context||X(),o,n);for(const t of e){const e=Mt(t,n.context||X(),o,n);if(e)return e}}function Gt(e,n={}){const o=Wt(n);if(!t(e))return Ft(e,n.context||X(),o,n);const r=e.flatMap((t=>Ft(t,n.context||X(),o,n)));return e.length>1&&r.length>1?O(r):r}function Wt(t){if(!t)return o;const e=[];return t.node?e.push(u):e.push(o),t.document&&e.push(n),t.window&&e.push(m),t.fragment&&e.push(r),t.shadow&&e.push(h),t=>e.some((e=>e(t)))}function Xt(t,e,n){const o=Gt(t).map((t=>new St(t,e,n)));return xt(),new Nt(o)}function Ut(t,{finish:e=!0}={}){const n=Gt(t);for(const t of n){if(!it.has(t))continue;const n=it.get(t);for(const t of n)t.stop({finish:e})}}function Yt(t,e){return te(t,{direction:"top",...e})}function Vt(t,e){return ee(t,{direction:"top",...e})}function Qt(t,e){return Xt(t,((t,e)=>t.style.setProperty("opacity",e<1?e.toFixed(2):"")),e)}function Jt(t,e){return Xt(t,((t,e)=>t.style.setProperty("opacity",e<1?(1-e).toFixed(2):"")),e)}function Zt(t,e){return Xt(t,((t,e,n)=>{const o=((90-90*e)*(n.inverse?-1:1)).toFixed(2);t.style.setProperty("transform",e<1?`rotate3d(${n.x}, ${n.y}, ${n.z}, ${o}deg)`:"")}),{x:0,y:1,z:0,...e})}function Kt(t,e){return Xt(t,((t,e,n)=>{const o=(90*e*(n.inverse?-1:1)).toFixed(2);t.style.setProperty("transform",e<1?`rotate3d(${n.x}, ${n.y}, ${n.z}, ${o}deg)`:"")}),{x:0,y:1,z:0,...e})}function te(t,e){return Xt(t,((t,e,n)=>{if(1===e)return t.style.setProperty("overflow",""),void(n.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const o=A(n.direction);let r,i,s;["top","bottom"].includes(o)?(r=t.clientHeight,i=n.useGpu?"Y":"margin-top",s="top"===o):(r=t.clientWidth,i=n.useGpu?"X":"margin-left",s="left"===o);const u=((r-r*e)*(s?-1:1)).toFixed(2);n.useGpu?t.style.setProperty("transform",`translate${i}(${u}px)`):t.style.setProperty(i,`${u}px`)}),{direction:"bottom",useGpu:!0,...e})}function ee(t,e){return Xt(t,((t,e,n)=>{if(1===e)return t.style.setProperty("overflow",""),void(n.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const o=A(n.direction);let r,i,s;["top","bottom"].includes(o)?(r=t.clientHeight,i=n.useGpu?"Y":"margin-top",s="top"===o):(r=t.clientWidth,i=n.useGpu?"X":"margin-left",s="left"===o);const u=(r*e*(s?-1:1)).toFixed(2);n.useGpu?t.style.setProperty("transform",`translate${i}(${u}px)`):t.style.setProperty(i,`${u}px`)}),{direction:"bottom",useGpu:!0,...e})}function ne(t,e){const n=Gt(t);e={direction:"bottom",useGpu:!0,...e};const o=n.map((t=>{const n=t.style.height,o=t.style.width;return t.style.setProperty("overflow","hidden"),new St(t,((t,e,r)=>{if(t.style.setProperty("height",n),t.style.setProperty("width",o),1===e)return t.style.setProperty("overflow",""),void(r.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const i=A(r.direction);let s,u,c;["top","bottom"].includes(i)?(s=t.clientHeight,u="height","top"===i&&(c=r.useGpu?"Y":"margin-top")):(s=t.clientWidth,u="width","left"===i&&(c=r.useGpu?"X":"margin-left"));const a=(s*e).toFixed(2);if(t.style.setProperty(u,`${a}px`),c){const e=(s-a).toFixed(2);r.useGpu?t.style.setProperty("transform",`translate${c}(${e}px)`):t.style.setProperty(c,`${e}px`)}}),e)}));return xt(),new Nt(o)}function oe(t,e){const n=Gt(t);e={direction:"bottom",useGpu:!0,...e};const o=n.map((t=>{const n=t.style.height,o=t.style.width;return t.style.setProperty("overflow","hidden"),new St(t,((t,e,r)=>{if(t.style.setProperty("height",n),t.style.setProperty("width",o),1===e)return t.style.setProperty("overflow",""),void(r.useGpu?t.style.setProperty("transform",""):(t.style.setProperty("margin-left",""),t.style.setProperty("margin-top","")));const i=A(r.direction);let s,u,c;["top","bottom"].includes(i)?(s=t.clientHeight,u="height","top"===i&&(c=r.useGpu?"Y":"margin-top")):(s=t.clientWidth,u="width","left"===i&&(c=r.useGpu?"X":"margin-left"));const a=(s-s*e).toFixed(2);if(t.style.setProperty(u,`${a}px`),c){const e=(s-a).toFixed(2);r.useGpu?t.style.setProperty("transform",`translate${c}(${e}px)`):t.style.setProperty(c,`${e}px`)}}),e)}));return xt(),new Nt(o)}function re(t){const e=zt(t,{node:!0});if(e&&e.parentNode)return N([],e.parentNode.children).indexOf(e)}function ie(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).findIndex(e)}function se(t){const e=Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0});for(const t of e)t.normalize()}function ue(t){return pt(ce(t))}function ce(t){return Gt(t,{fragment:!0,shadow:!0}).reduce(((t,e)=>{if(o(e)&&e.matches("form")||r(e)||h(e))return t.concat(ce(e.querySelectorAll("input, select, textarea")));if(o(e)&&e.matches("[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)"))return t;const n=e.getAttribute("name");if(!n)return t;if(o(e)&&e.matches("select[multiple]"))for(const o of e.selectedOptions)t.push({name:n,value:o.value||""});else t.push({name:n,value:e.value||""});return t}),[])}function ae(t){return Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0}).sort(((t,e)=>{if(m(t))return 1;if(m(e))return-1;if(n(t))return 1;if(n(e))return-1;if(r(e))return 1;if(r(t))return-1;if(h(t)&&(t=t.host),h(e)&&(e=e.host),t.isSameNode(e))return 0;const o=t.compareDocumentPosition(e);return o&Node.DOCUMENT_POSITION_FOLLOWING||o&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:o&Node.DOCUMENT_POSITION_PRECEDING||o&Node.DOCUMENT_POSITION_CONTAINS?1:0}))}function fe(t){const e=zt(t);if(e)return e.tagName.toLowerCase()}function le(t,e){return he(t,e,{first:!0})}function he(t,e,{first:n=!1,elementsOnly:o=!0}={}){e=kt(e);const r=Gt(t,{fragment:!0,shadow:!0,document:!0}),i=[];for(const t of r){const r=N([],o?t.children:t.childNodes);for(const t of r)if(e(t)&&(i.push(t),n))break}return r.length>1&&i.length>1?O(i):i}function de(t,e,n){return xe(t,e,n,{first:!0})}function pe(t){const e=ae(t);if(!e.length)return;if(e.some((t=>!t.parentNode)))return;const n=Ct();return 1===e.length?n.selectNode(e.shift()):(n.setStartBefore(e.shift()),n.setEndAfter(e.pop())),n.commonAncestorContainer}function me(t){return he(t,!1,{elementsOnly:!1})}function ge(t){const e=zt(t);if(e)return e.content}function we(t,e){e=kt(e);const n=Gt(t,{node:!0}),r=[];for(let t of n)for(;t=t.nextSibling;)if(o(t)){e(t)&&r.push(t);break}return n.length>1&&r.length>1?O(r):r}function ye(t,e,n,{first:r=!1}={}){e=kt(e),n=kt(n,!1);const i=Gt(t,{node:!0}),s=[];for(let t of i)for(;t=t.nextSibling;)if(o(t)){if(n(t))break;if(e(t)&&(s.push(t),r))break}return i.length>1&&s.length>1?O(s):s}function be(t){const e=zt(t);if(e)return e.offsetParent}function ve(t,e){e=kt(e);const n=Gt(t,{node:!0}),o=[];for(let t of n)t=t.parentNode,t&&e(t)&&o.push(t);return n.length>1&&o.length>1?O(o):o}function xe(t,e,o,{first:r=!1}={}){e=kt(e),o=kt(o,!1);const i=Gt(t,{node:!0}),s=[];for(let t of i){const i=[];for(;(t=t.parentNode)&&!n(t)&&!o(t)&&(!e(t)||(i.unshift(t),!r)););s.push(...i)}return i.length>1&&s.length>1?O(s):s}function _e(t,e){e=kt(e);const n=Gt(t,{node:!0}),r=[];for(let t of n)for(;t=t.previousSibling;)if(o(t)){e(t)&&r.push(t);break}return n.length>1&&r.length>1?O(r):r}function Se(t,e,n,{first:r=!1}={}){e=kt(e),n=kt(n,!1);const i=Gt(t,{node:!0}),s=[];for(let t of i){const i=[];for(;t=t.previousSibling;)if(o(t)){if(n(t))break;if(e(t)&&(i.unshift(t),r))break}s.push(...i)}return i.length>1&&s.length>1?O(s):s}function Ne(t){const e=zt(t);if(e)return e.shadowRoot}function Oe(t,e,{elementsOnly:n=!0}={}){e=kt(e);const o=Gt(t,{node:!0}),r=[];for(const t of o){const o=t.parentNode;if(!o)continue;const i=n?o.children:o.childNodes;let s;for(s of i)t.isSameNode(s)||e(s)&&r.push(s)}return o.length>1&&r.length>1?O(r):r}function Te(t,e,n){const o=e.match(/(?:^\s*\:scope|\,(?=(?:(?:[^"']*["']){2})*[^"']*$)\s*\:scope)/)?function(t,e){return n=>{const o=N([],t.querySelectorAll(e));return!!o.length&&(o.includes(n)?n:de(n,(t=>o.includes(t)),(e=>e.isSameNode(t))).shift())}}(t,e):function(t,e){return n=>n.matches&&n.matches(e)?n:de(n,(t=>t.matches(e)),(e=>e.isSameNode(t))).shift()}(t,e);return e=>{if(t.isSameNode(e.target))return;const r=o(e.target);return r?(Object.defineProperty(e,"currentTarget",{configurable:!0,enumerable:!0,value:r}),Object.defineProperty(e,"delegateTarget",{configurable:!0,enumerable:!0,value:t}),n(e)):void 0}}function Ce(t,e){return n=>n.delegateTarget?(Object.defineProperty(n,"currentTarget",{configurable:!0,enumerable:!0,value:t}),Object.defineProperty(n,"delegateTarget",{writable:!0}),delete n.delegateTarget,e(n)):e(n)}function Pe(t,e){return n=>{if(!("namespaceRegExp"in n)||n.namespaceRegExp.test(t))return e(n)}}function Ae(t){return e=>{!1===t(e)&&e.preventDefault()}}function qe(t,e,n,{capture:o=null,delegate:r=null}={}){return i=>(Re(t,e,n,{capture:o,delegate:r}),n(i))}function Ee(t,e,n,{capture:o=!1,delegate:r=null,passive:i=!1,selfDestruct:s=!1}={}){const u=Gt(t,{shadow:!0,document:!0,window:!0});e=nt(e);for(const t of e){const e=et(t),c={callback:n,delegate:r,selfDestruct:s,capture:o,passive:i};for(const a of u){ut.has(a)||ut.set(a,{});const u=ut.get(a);let f=n;s&&(f=qe(a,t,f,{capture:o,delegate:r})),f=Ae(f),f=r?Te(a,r,f):Ce(a,f),f=Pe(t,f),c.realCallback=f,c.eventName=t,c.realEventName=e,u[e]||(u[e]=[]),u[e].push({...c}),a.addEventListener(e,f,{capture:o,passive:i})}}}function De(t,e,n,o,{capture:r=!1,passive:i=!1}={}){Ee(t,e,o,{capture:r,delegate:n,passive:i})}function je(t,e,n,o,{capture:r=!1,passive:i=!1}={}){Ee(t,e,o,{capture:r,delegate:n,passive:i,selfDestruct:!0})}function $e(t,e,n,{capture:o=!1,passive:r=!1}={}){Ee(t,e,n,{capture:o,passive:r,selfDestruct:!0})}function Le(t,e){const n=Gt(t,{shadow:!0,document:!0,window:!0});for(const t of n){const n=ut.get(t);for(const t of Object.values(n))for(const n of t)Ee(e,n.eventName,n.callback,{capture:n.capture,delegate:n.delegate,passive:n.passive,selfDestruct:n.selfDestruct})}}function Re(t,e,n,{capture:o=null,delegate:r=null}={}){const i=Gt(t,{shadow:!0,document:!0,window:!0});let s;if(e){e=nt(e),s={};for(const t of e){const e=et(t);e in s||(s[e]=[]),s[e].push(t)}}for(const t of i){if(!ut.has(t))continue;const e=ut.get(t);for(const[i,u]of Object.entries(e))s&&!(i in s)||u.filter((e=>!(!s||s[i].some((t=>{if(t===i)return!0;const n=J(t);return e.eventName.match(n)})))||!(!n||n===e.callback)||!(!r||r===e.delegate)||null!==o&&o!==e.capture||(t.removeEventListener(i,e.realCallback,e.capture),!1))).length||delete e[i];Object.keys(e).length||ut.delete(t)}}function Be(t,e,n,o,{capture:r=null}={}){Re(t,e,o,{capture:r,delegate:n})}function Ie(t,e,{data:n=null,detail:o=null,bubbles:r=!0,cancelable:i=!0}={}){const s=Gt(t,{shadow:!0,document:!0,window:!0});e=nt(e);for(const t of e){const e=et(t),u=new CustomEvent(e,{detail:o,bubbles:r,cancelable:i});n&&Object.assign(u,n),e!==t&&(u.namespace=t.substring(e.length+1),u.namespaceRegExp=J(t));for(const t of s)t.dispatchEvent(u)}}function Me(t,e,{data:n=null,detail:o=null,bubbles:r=!0,cancelable:i=!0}={}){const s=zt(t,{shadow:!0,document:!0,window:!0}),u=et(e),c=new CustomEvent(u,{detail:o,bubbles:r,cancelable:i});return n&&Object.assign(c,n),u!==e&&(c.namespace=e.substring(u.length+1),c.namespaceRegExp=J(e)),s.dispatchEvent(c)}function Fe(t,{deep:e=!0,events:n=!1,data:o=!1,animations:r=!1}={}){return Gt(t,{node:!0,fragment:!0}).map((t=>{const i=t.cloneNode(e);return(n||o||r)&&ke(t,i,{deep:e,events:n,data:o,animations:r}),i}))}function ke(t,e,{deep:n=!0,events:o=!1,data:r=!1,animations:i=!1}={}){if(o&&ut.has(t)){const n=ut.get(t);for(const t of Object.values(n))for(const n of t)Ee(e,n.eventName,n.callback,{capture:n.capture,delegate:n.delegate,selfDestruct:n.selfDestruct})}if(r&&st.has(t)){const n=st.get(t);st.set(e,{...n})}if(i&&it.has(t)){const n=it.get(t);for(const t of n)t.clone(e)}if(n)for(const[s,u]of t.childNodes.entries())ke(u,e.childNodes.item(s),{deep:n,events:o,data:r,animations:i})}function He(t){const e=Gt(t,{node:!0});for(const t of e)t.remove();return e}function ze(t){const e=Gt(t,{fragment:!0,shadow:!0,document:!0});for(const t of e){const e=N([],t.childNodes);for(const n of e)(o(t)||r(t)||h(t))&&We(n),n.remove();t.shadowRoot&&We(t.shadowRoot),t.content&&We(t.content)}}function Ge(t){const e=Gt(t,{node:!0,fragment:!0,shadow:!0});for(const t of e)(o(t)||r(t)||h(t))&&We(t),u(t)&&t.remove()}function We(t){if(ut.has(t)){const e=ut.get(t);if("remove"in e){const e=new CustomEvent("remove",{bubbles:!1,cancelable:!1});t.dispatchEvent(e)}for(const[n,o]of Object.entries(e))for(const e of o)t.removeEventListener(n,e.realCallback,{capture:e.capture});ut.delete(t)}if(ct.has(t)&&ct.delete(t),it.has(t)){const e=it.get(t);for(const t of e)t.stop()}at.has(t)&&at.delete(t),st.has(t)&&st.delete(t);const e=N([],t.children);for(const t of e)We(t);t.shadowRoot&&We(t.shadowRoot),t.content&&We(t.content)}function Xe(t,e){Ue(e,t)}function Ue(t,e){let n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});const r=Tt();for(const t of o)r.insertBefore(t,null);o=N([],r.childNodes),n=n.filter((t=>!o.includes(t)&&!n.some((e=>!e.isSameNode(t)&&e.contains(t)))));for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let i;i=t===n.length-1?o:Fe(o,{events:!0,data:!0,animations:!0});for(const t of i)r.insertBefore(t,e)}Ge(n)}function Ye(t,e){const n=zt(t);if(n)return e?n.getAttribute(e):Object.fromEntries(N([],n.attributes).map((t=>[t.nodeName,t.nodeValue])))}function Ve(t,e){const n=zt(t);if(n)return e?(e=R(e),tt(n.dataset[e])):Object.fromEntries(Object.entries(n.dataset).map((([t,e])=>[t,tt(e)])))}function Qe(t){return Je(t,"innerHTML")}function Je(t,e){const n=zt(t);if(n)return n[e]}function Ze(t){return Je(t,"textContent")}function Ke(t){return Je(t,"value")}function tn(t,e){const n=Gt(t);for(const t of n)t.removeAttribute(e)}function en(t,e){const n=Gt(t);for(const t of n)e=R(e),delete t.dataset[e]}function nn(t,e){const n=Gt(t);for(const t of n)delete t[e]}function on(t,e,n){const o=Gt(t),r=K(e,n);for(const[t,e]of Object.entries(r))for(const n of o)n.setAttribute(t,e)}function rn(t,e,n){const o=Gt(t),r=K(e,n,{json:!0});for(let[t,e]of Object.entries(r)){t=R(t);for(const n of o)n.dataset[t]=e}}function sn(t,e){const n=Gt(t);for(const t of n){const n=N([],t.children);for(const t of n)We(t);t.shadowRoot&&We(t.shadowRoot),t.content&&We(t.content),t.innerHTML=e}}function un(t,e,n){const o=Gt(t),r=K(e,n);for(const[t,e]of Object.entries(r))for(const n of o)n[t]=e}function cn(t,e){const n=Gt(t);for(const t of n){const n=N([],t.children);for(const t of n)We(t);t.shadowRoot&&We(t.shadowRoot),t.content&&We(t.content),t.textContent=e}}function an(t,e){const n=Gt(t);for(const t of n)t.value=e}function fn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}),o=Gt(e,{fragment:!0,shadow:!0,document:!0,window:!0});for(const t of n)st.has(t)&&dn(o,{...st.get(t)})}function ln(t,e){const n=zt(t,{fragment:!0,shadow:!0,document:!0,window:!0});if(!n||!st.has(n))return;const o=st.get(n);return e?o[e]:o}function hn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0});for(const t of n){if(!st.has(t))continue;const n=st.get(t);e&&delete n[e],e&&Object.keys(n).length||st.delete(t)}}function dn(t,e,n){const o=Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}),r=K(e,n);for(const t of o){st.has(t)||st.set(t,{});const e=st.get(t);Object.assign(e,r)}}function pn(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)t.classList.add(...e)}function mn(t,e){const n=zt(t);if(!n)return;at.has(n)||at.set(n,U().getComputedStyle(n));const o=at.get(n);return e?(e=M(e),o.getPropertyValue(e)):{...o}}function gn(t,e){const n=zt(t);if(!n)return;if(e)return e=M(e),n.style[e];const o={};for(const t of n.style)o[t]=n.style[t];return o}function wn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","none")}function yn(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)t.classList.remove(...e)}function bn(t,e,n,{important:o=!1}={}){const r=Gt(t),i=K(e,n);for(let[t,e]of Object.entries(i)){t=M(t),e&&a(e)&&!CSS.supports(t,e)&&(e+="px");for(const n of r)n.style.setProperty(t,e,o?"important":"")}}function vn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","")}function xn(t){const e=Gt(t);for(const t of e)t.style.setProperty("display","none"===t.style.display?"":"none")}function _n(t,...e){const n=Gt(t);if((e=Z(e)).length)for(const t of n)for(const n of e)t.classList.toggle(n)}function Sn(t,{offset:e=!1}={}){const n=Dn(t,{offset:e});if(n)return{x:n.left+n.width/2,y:n.top+n.height/2}}function Nn(t,e){const n=Dn(e);if(!n)return;const o=Gt(t),r=X(),i=U(),s=t=>r.documentElement.scrollHeight>i.outerHeight,u=t=>r.documentElement.scrollWidth>i.outerWidth,c=s(),a=u();for(const t of o){const e=Dn(t);let o,r;if(e.height>n.height&&t.style.setProperty("height",`${n.height}px`),e.width>n.width&&t.style.setProperty("width",`${n.width}px`),e.left-n.left<0?o=e.left-n.left:e.right-n.right>0&&(o=e.right-n.right),o){const e=mn(t,"left"),n=e&&"auto"!==e?parseFloat(e):0;t.style.setProperty("left",n-o+"px")}if(e.top-n.top<0?r=e.top-n.top:e.bottom-n.bottom>0&&(r=e.bottom-n.bottom),r){const e=mn(t,"top"),n=e&&"auto"!==e?parseFloat(e):0;t.style.setProperty("top",n-r+"px")}"static"===mn(t,"position")&&t.style.setProperty("position","relative")}const f=s(),l=u();c===f&&a===l||Nn(o,e)}function On(t,e,n,{offset:o=!1}={}){const r=Sn(t,{offset:o});if(r)return y(r.x,r.y,e,n)}function Tn(t,e){const n=Sn(e);if(n)return On(t,n.x,n.y)}function Cn(t,e,n,{offset:o=!1}={}){let r,i=Number.MAX_VALUE;const s=Gt(t);for(const t of s){const s=On(t,e,n,{offset:o});s&&s=4)return r.scrollHeight;let i=r.clientHeight;return e<=0&&(i-=parseInt(mn(r,"padding-top")),i-=parseInt(mn(r,"padding-bottom"))),e>=2&&(i+=parseInt(mn(r,"border-top-width")),i+=parseInt(mn(r,"border-bottom-width"))),e>=3&&(i+=parseInt(mn(r,"margin-top")),i+=parseInt(mn(r,"margin-bottom"))),i}function Mn(t,{boxSize:e=1,outer:o=!1}={}){let r=zt(t,{document:!0,window:!0});if(!r)return;if(m(r))return o?r.outerWidth:r.innerWidth;if(n(r)&&(r=r.documentElement),e>=4)return r.scrollWidth;let i=r.clientWidth;return e<=0&&(i-=parseInt(mn(r,"padding-left")),i-=parseInt(mn(r,"padding-right"))),e>=2&&(i+=parseInt(mn(r,"border-left-width")),i+=parseInt(mn(r,"border-right-width"))),e>=3&&(i+=parseInt(mn(r,"margin-left")),i+=parseInt(mn(r,"margin-right"))),i}function Fn(t){const e=zt(t);e&&e.blur()}function kn(t){const e=zt(t);e&&e.click()}function Hn(t){const e=zt(t);e&&e.focus()}function zn(t){"complete"===X().readyState?t():U().addEventListener("DOMContentLoaded",t,{once:!0})}function Gn(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0}).reverse();for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let i;i=t===n.length-1?o:Fe(o,{events:!0,data:!0,animations:!0});for(const t of i)r.insertBefore(t,e.nextSibling)}}function Wn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){let r;r=t===n.length-1?o:Fe(o,{events:!0,data:!0,animations:!0});for(const t of r)e.insertBefore(t,null)}}function Xn(t,e){Wn(e,t)}function Un(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){const r=e.parentNode;if(!r)continue;let i;i=t===n.length-1?o:Fe(o,{events:!0,data:!0,animations:!0});for(const t of i)r.insertBefore(t,e)}}function Yn(t,e){Gn(e,t)}function Vn(t,e){Un(e,t)}function Qn(t,e){const n=Gt(t,{fragment:!0,shadow:!0,document:!0}),o=Gt(e,{node:!0,fragment:!0,html:!0});for(const[t,e]of n.entries()){const r=e.firstChild;let i;i=t===n.length-1?o:Fe(o,{events:!0,data:!0,animations:!0});for(const t of i)e.insertBefore(t,r)}}function Jn(t,e){Qn(e,t)}function Zn(t,e){const n=Gt(t,{node:!0});e=kt(e);const o=[];for(const t of n){const n=t.parentNode;n&&(o.includes(n)||e(n)&&o.push(n))}for(const t of o){const e=t.parentNode;if(!e)continue;const n=N([],t.childNodes);for(const o of n)e.insertBefore(o,t)}Ge(o)}function Kn(t,e){const n=Gt(t,{node:!0}),o=Gt(e,{fragment:!0,html:!0});for(const t of n){const e=t.parentNode;if(!e)continue;const n=Fe(o,{events:!0,data:!0,animations:!0}),i=n.slice().shift(),s=r(i)?i.firstChild:i,u=N([],s.querySelectorAll("*")).find((t=>!t.childElementCount))||s;for(const o of n)e.insertBefore(o,t);u.insertBefore(t,null)}}function to(t,e){const n=Gt(t,{node:!0}),o=Fe(Gt(e,{fragment:!0,html:!0}),{events:!0,data:!0,animations:!0}),i=n[0];if(!i)return;const s=i.parentNode;if(!s)return;const u=o[0],c=r(u)?u.firstChild:u,a=N([],c.querySelectorAll("*")).find((t=>!t.childElementCount))||c;for(const t of o)s.insertBefore(t,i);for(const t of n)a.insertBefore(t,null)}function eo(t,e){const n=Gt(t,{node:!0,fragment:!0,shadow:!0}),o=Gt(e,{fragment:!0,html:!0});for(const t of n){const e=N([],t.childNodes),n=Fe(o,{events:!0,data:!0,animations:!0}),i=n.slice().shift(),s=r(i)?i.firstChild:i,u=N([],s.querySelectorAll("*")).find((t=>!t.childElementCount))||s;for(const e of n)t.insertBefore(e,null);for(const t of e)u.insertBefore(t,null)}}function no(t,{queueName:e=null}={}){const n=Gt(t);for(const t of n){if(!ct.has(t))continue;const n=ct.get(t);e&&delete n[e],e&&Object.keys(n).length||ct.delete(t)}}function oo(t,{queueName:e="default"}={}){const n=ct.get(t);if(!n||!(e in n))return;const o=n[e].shift();o?Promise.resolve(o(t)).then((n=>{oo(t,{queueName:e})})).catch((e=>{ct.delete(t)})):ct.delete(t)}function ro(t,e,{queueName:n="default"}={}){const o=Gt(t);for(const t of o){ct.has(t)||ct.set(t,{});const o=ct.get(t),r=n in o;r||(o[n]=[t=>new Promise((t=>{setTimeout(t,1)}))]),o[n].push(e),r||oo(t,{queueName:n})}}function io(t){return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>t.isConnected))}function so(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>n.some((e=>t.isEqualNode(e)))))}function uo(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).filter(e)}function co(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).find(e)||null}function ao(t){return Gt(t,{node:!0}).filter((t=>o(t)&&"fixed"===mn(t,"position")||de(t,(t=>o(t)&&"fixed"===mn(t,"position"))).length))}function fo(t){return Gt(t,{node:!0,document:!0,window:!0}).filter((t=>m(t)?"visible"!==t.document.visibilityState:n(t)?"visible"!==t.visibilityState:!t.offsetParent))}function lo(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).filter(((t,n)=>!e(t,n)))}function ho(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).find(((t,n)=>!e(t,n)))||null}function po(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).filter((t=>n.some((e=>t.isSameNode(e)))))}function mo(t){return Gt(t,{node:!0,document:!0,window:!0}).filter((t=>m(t)?"visible"===t.document.visibilityState:n(t)?"visible"===t.visibilityState:t.offsetParent))}function go(t){return Gt(t).filter((t=>it.has(t)))}function wo(t,e){return Gt(t).filter((t=>t.hasAttribute(e)))}function yo(t){return Gt(t,{fragment:!0,shadow:!0,document:!0}).filter((t=>!!t.childElementCount))}function bo(t,...e){return e=Z(e),Gt(t).filter((t=>e.some((e=>t.classList.contains(e)))))}function vo(t){return Gt(t).filter((t=>parseFloat(mn(t,"animation-duration"))))}function xo(t){return Gt(t).filter((t=>parseFloat(mn(t,"transition-duration"))))}function _o(t,e){return Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0}).filter((t=>!!st.has(t)&&(!e||st.get(t).hasOwnProperty(e))))}function So(t,e){return e=Ht(e),Gt(t,{fragment:!0,shadow:!0,document:!0}).filter(e)}function No(t,e){return Gt(t).filter((t=>t.hasOwnProperty(e)))}function Oo(t){const e=Gt(t,{node:!0,fragment:!0,html:!0}).reverse(),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges(),o.collapse();for(const t of e)o.insertNode(t)}function To(t){const e=Gt(t,{node:!0,fragment:!0,html:!0}).reverse(),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges();for(const t of e)o.insertNode(t)}function Co(t){const e=zt(t,{node:!0});if(e&&"select"in e)return void e.select();const n=U().getSelection();if(n.rangeCount>0&&n.removeAllRanges(),!e)return;const o=Ct();o.selectNode(e),n.addRange(o)}function Po(t){const e=ae(t),n=U().getSelection();if(n.rangeCount&&n.removeAllRanges(),!e.length)return;const o=Ct();1==e.length?o.selectNode(e.shift()):(o.setStartBefore(e.shift()),o.setEndAfter(e.pop())),n.addRange(o)}function Ao(t){const e=Gt(t,{fragment:!0,html:!0}),n=U().getSelection();if(!n.rangeCount)return;const o=n.getRangeAt(0);n.removeAllRanges();const r=e.slice().shift(),i=N([],r.querySelectorAll("*")).find((t=>!t.childElementCount))||r,s=o.extractContents(),u=N([],s.childNodes);for(const t of u)i.insertBefore(t,null);for(const t of e)o.insertNode(t)}function qo(t){return Gt(t).some((t=>it.has(t)))}function Eo(t,e){return Gt(t).some((t=>t.hasAttribute(e)))}function Do(t){return Gt(t,{fragment:!0,shadow:!0,document:!0}).some((t=>t.childElementCount))}function jo(t,...e){return e=Z(e),Gt(t).some((t=>e.some((e=>t.classList.contains(e)))))}function $o(t){return Gt(t).some((t=>parseFloat(mn(t,"animation-duration"))))}function Lo(t){return Gt(t).some((t=>parseFloat(mn(t,"transition-duration"))))}function Ro(t,e){return Gt(t,{fragment:!0,shadow:!0,document:!0,window:!0}).some((t=>!!st.has(t)&&(!e||st.get(t).hasOwnProperty(e))))}function Bo(t,e){return e=R(e),Gt(t).some((t=>!!t.dataset[e]))}function Io(t,e){return e=Ht(e),Gt(t,{fragment:!0,shadow:!0,document:!0}).some(e)}function Mo(t){return Gt(t).some((t=>t.content))}function Fo(t,e){return Gt(t).some((t=>t.hasOwnProperty(e)))}function ko(t){return Gt(t).some((t=>t.shadowRoot))}function Ho(t,e){return e=kt(e),Gt(t,{node:!0,fragment:!0,shadow:!0}).some(e)}function zo(t){return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>t.isConnected))}function Go(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>n.some((e=>t.isEqualNode(e)))))}function Wo(t){return Gt(t,{node:!0}).some((t=>o(t)&&"fixed"===mn(t,"position")||de(t,(t=>o(t)&&"fixed"===mn(t,"position"))).length))}function Xo(t){return Gt(t,{node:!0,document:!0,window:!0}).some((t=>m(t)?"visible"!==t.document.visibilityState:n(t)?"visible"!==t.visibilityState:!t.offsetParent))}function Uo(t,e){const n=Gt(e,{node:!0,fragment:!0,shadow:!0});return Gt(t,{node:!0,fragment:!0,shadow:!0}).some((t=>n.some((e=>t.isSameNode(e)))))}function Yo(t){return Gt(t,{node:!0,document:!0,window:!0}).some((t=>m(t)?"visible"===t.document.visibilityState:n(t)?"visible"===t.visibilityState:t.offsetParent))}const Vo=qt.prototype;function Qo(t,e=null){if(i(t))return zn(t);const n=Gt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0,html:!0,context:e||X()});return new qt(n)}function Jo(t,e,{cache:n=!0,context:o=X()}={}){"async"in(e={src:t,type:"text/javascript",...e})||(e.defer=""),n||(e.src=ft(e.src,"_",Date.now()));const r=o.createElement("script");for(const[t,n]of Object.entries(e))r.setAttribute(t,n);return o.head.appendChild(r),new Promise(((t,e)=>{r.onload=e=>t(),r.onerror=t=>e(t)}))}function Zo(t,e,{cache:n=!0,context:o=X()}={}){e={href:t,rel:"stylesheet",...e},n||(e.href=ft(e.href,"_",Date.now()));const r=o.createElement("link");for(const[t,n]of Object.entries(e))r.setAttribute(t,n);return o.head.appendChild(r),new Promise(((t,e)=>{r.onload=e=>t(),r.onerror=t=>e(t)}))}function Ko(t,e=ot){const n=t.tagName.toLowerCase();if(!(n in e))return void t.remove();const o=[];"*"in e&&o.push(...e["*"]),o.push(...e[n]);const r=N([],t.attributes);for(const e of r)o.find((t=>e.nodeName.match(t)))||t.removeAttribute(e.nodeName);const i=N([],t.children);for(const t of i)Ko(t,e)}Vo.add=function(t,e=null){const n=ae(O(N([],this.get(),Qo(t,e).get())));return new qt(n)},Vo.addClass=function(...t){return pn(this,...t),this},Vo.addEvent=function(t,e,{capture:n=!1,passive:o=!1}={}){return Ee(this,t,e,{capture:n,passive:o}),this},Vo.addEventDelegate=function(t,e,n,{capture:o=!1,passive:r=!1}={}){return De(this,t,e,n,{capture:o,passive:r}),this},Vo.addEventDelegateOnce=function(t,e,n,{capture:o=!1,passive:r=!1}={}){return je(this,t,e,n,{capture:o,passive:r}),this},Vo.addEventOnce=function(t,e,{capture:n=!1,passive:o=!1}={}){return $e(this,t,e,{capture:n,passive:o}),this},Vo.after=function(t){return Gn(this,t),this},Vo.afterSelection=function(){return Oo(this),this},Vo.animate=function(t,{queueName:e="default",...n}={}){return this.queue((e=>Xt(e,t,n)),{queueName:e})},Vo.append=function(t){return Wn(this,t),this},Vo.appendTo=function(t){return Xn(this,t),this},Vo.attachShadow=function({open:t=!0}={}){const e=Ot(this,{open:t});return new qt(e?[e]:[])},Vo.before=function(t){return Un(this,t),this},Vo.beforeSelection=function(){return To(this),this},Vo.blur=function(){return Fn(this),this},Vo.center=function({offset:t=!1}={}){return Sn(this,{offset:t})},Vo.child=function(t){return new qt(le(this,t))},Vo.children=function(t,{elementsOnly:e=!0}={}){return new qt(he(this,t,{elementsOnly:e}))},Vo.clearQueue=function({queueName:t="default"}={}){return no(this,{queueName:t}),this},Vo.click=function(){return kn(this),this},Vo.clone=function(t){const e=Fe(this,t);return new qt(e)},Vo.cloneData=function(t){return fn(this,t),this},Vo.cloneEvents=function(t){return Le(this,t),this},Vo.closest=function(t,e){return new qt(de(this,t,e))},Vo.commonAncestor=function(){const t=pe(this);return new qt(t?[t]:[])},Vo.connected=function(){return new qt(io(this))},Vo.constrain=function(t){return Nn(this,t),this},Vo.contents=function(){return new qt(me(this))},Vo.css=function(t){return mn(this,t)},Vo.delay=function(t,{queueName:e="default"}={}){return this.queue((e=>new Promise((e=>setTimeout(e,t)))),{queueName:e})},Vo.detach=function(){return He(this),this},Vo.distTo=function(t,e,{offset:n=!1}={}){return On(this,t,e,{offset:n})},Vo.distToNode=function(t){return Tn(this,t)},Vo.dropIn=function({queueName:t="default",...e}={}){return this.queue((t=>Yt(t,e)),{queueName:t})},Vo.dropOut=function({queueName:t="default",...e}={}){return this.queue((t=>Vt(t,e)),{queueName:t})},Vo.empty=function(){return ze(this),this},Vo.eq=function(t){const e=this.get(t);return new qt(e?[e]:[])},Vo.equal=function(t){return new qt(so(this,t))},Vo.fadeIn=function({queueName:t="default",...e}={}){return this.queue((t=>Qt(t,e)),{queueName:t})},Vo.fadeOut=function({queueName:t="default",...e}={}){return this.queue((t=>Jt(t,e)),{queueName:t})},Vo.filter=function(t){return new qt(uo(this,t))},Vo.filterOne=function(t){const e=co(this,t);return new qt(e?[e]:[])},Vo.find=function(t){return new qt(Et(t,this))},Vo.findByClass=function(t){return new qt(Dt(t,this))},Vo.findById=function(t){return new qt(jt(t,this))},Vo.findByTag=function(t){return new qt($t(t,this))},Vo.findOne=function(t){const e=Lt(t,this);return new qt(e?[e]:[])},Vo.findOneByClass=function(t){const e=Rt(t,this);return new qt(e?[e]:[])},Vo.findOneById=function(t){const e=Bt(t,this);return new qt(e?[e]:[])},Vo.findOneByTag=function(t){const e=It(t,this);return new qt(e?[e]:[])},Vo.first=function(){return this.eq(0)},Vo.fixed=function(){return new qt(ao(this))},Vo.focus=function(){return Hn(this),this},Vo.fragment=function(){const t=ge(this);return new qt(t?[t]:[])},Vo.getAttribute=function(t){return Ye(this,t)},Vo.getData=function(t){return ln(this,t)},Vo.getDataset=function(t){return Ve(this,t)},Vo.getHTML=function(){return Qe(this)},Vo.getProperty=function(t){return Je(this,t)},Vo.getScrollX=function(){return jn(this)},Vo.getScrollY=function(){return $n(this)},Vo.getStyle=function(t){return gn(this,t)},Vo.getText=function(){return Ze(this)},Vo.getValue=function(){return Ke(this)},Vo.hasAnimation=function(){return qo(this)},Vo.hasAttribute=function(t){return Eo(this,t)},Vo.hasChildren=function(){return Do(this)},Vo.hasClass=function(...t){return jo(this,...t)},Vo.hasCSSAnimation=function(){return $o(this)},Vo.hasCSSTransition=function(){return Lo(this)},Vo.hasData=function(t){return Ro(this,t)},Vo.hasDataset=function(t){return Bo(this,t)},Vo.hasDescendent=function(t){return Io(this,t)},Vo.hasFragment=function(){return Mo(this)},Vo.hasProperty=function(t){return Fo(this,t)},Vo.hasShadow=function(){return ko(this)},Vo.height=function({boxSize:t=1,outer:e=!1}={}){return In(this,{boxSize:t,outer:e})},Vo.hidden=function(){return new qt(fo(this))},Vo.hide=function(){return wn(this),this},Vo.index=function(){return re(this)},Vo.indexOf=function(t){return ie(this,t)},Vo.insertAfter=function(t){return Yn(this,t),this},Vo.insertBefore=function(t){return Vn(this,t),this},Vo.is=function(t){return Ho(this,t)},Vo.isConnected=function(){return zo(this)},Vo.isEqual=function(t){return Go(this,t)},Vo.isFixed=function(){return Wo(this)},Vo.isHidden=function(){return Xo(this)},Vo.isSame=function(t){return Uo(this,t)},Vo.isVisible=function(){return Yo(this)},Vo.last=function(){return this.eq(-1)},Vo.nearestTo=function(t,e,{offset:n=!1}={}){const o=Cn(this,t,e,{offset:n});return new qt(o?[o]:[])},Vo.nearestToNode=function(t){const e=Pn(this,t);return new qt(e?[e]:[])},Vo.next=function(t){return new qt(we(this,t))},Vo.nextAll=function(t,e){return new qt(ye(this,t,e))},Vo.normalize=function(){return se(this),this},Vo.not=function(t){return new qt(lo(this,t))},Vo.notOne=function(t){const e=ho(this,t);return new qt(e?[e]:[])},Vo.offsetParent=function(){const t=be(this);return new qt(t?[t]:[])},Vo.parent=function(t){return new qt(ve(this,t))},Vo.parents=function(t,e){return new qt(xe(this,t,e))},Vo.percentX=function(t,{offset:e=!1,clamp:n=!0}={}){return An(this,t,{offset:e,clamp:n})},Vo.percentY=function(t,{offset:e=!1,clamp:n=!0}={}){return qn(this,t,{offset:e,clamp:n})},Vo.position=function({offset:t=!1}={}){return En(this,{offset:t})},Vo.prepend=function(t){return Qn(this,t),this},Vo.prependTo=function(t){return Jn(this,t),this},Vo.prev=function(t){return new qt(_e(this,t))},Vo.prevAll=function(t,e){return new qt(Se(this,t,e))},Vo.queue=function(t,{queueName:e="default"}={}){return ro(this,t,{queueName:e}),this},Vo.rect=function({offset:t=!1}={}){return Dn(this,{offset:t})},Vo.remove=function(){return Ge(this),this},Vo.removeAttribute=function(t){return tn(this,t),this},Vo.removeClass=function(...t){return yn(this,...t),this},Vo.removeData=function(t){return hn(this,t),this},Vo.removeDataset=function(t){return en(this,t),this},Vo.removeEvent=function(t,e,{capture:n=null}={}){return Re(this,t,e,{capture:n}),this},Vo.removeEventDelegate=function(t,e,n,{capture:o=null}={}){return Be(this,t,e,n,{capture:o}),this},Vo.removeProperty=function(t){return nn(this,t),this},Vo.replaceAll=function(t){return Xe(this,t),this},Vo.replaceWith=function(t){return Ue(this,t),this},Vo.rotateIn=function({queueName:t="default",...e}={}){return this.queue((t=>Zt(t,e)),{queueName:t})},Vo.rotateOut=function({queueName:t="default",...e}={}){return this.queue((t=>Kt(t,e)),{queueName:t})},Vo.same=function(t){return new qt(po(this,t))},Vo.select=function(){return Co(this),this},Vo.selectAll=function(){return Po(this),this},Vo.serialize=function(){return ue(this)},Vo.serializeArray=function(){return ce(this)},Vo.setAttribute=function(t,e){return on(this,t,e),this},Vo.setData=function(t,e){return dn(this,t,e),this},Vo.setDataset=function(t,e){return rn(this,t,e),this},Vo.setHTML=function(t){return sn(this,t),this},Vo.setProperty=function(t,e){return un(this,t,e),this},Vo.setScroll=function(t,e){return Ln(this,t,e),this},Vo.setScrollX=function(t){return Rn(this,t),this},Vo.setScrollY=function(t){return Bn(this,t),this},Vo.setStyle=function(t,e,{important:n=!1}={}){return bn(this,t,e,{important:n}),this},Vo.setText=function(t){return cn(this,t),this},Vo.setValue=function(t){return an(this,t),this},Vo.shadow=function(){const t=Ne(this);return new qt(t?[t]:[])},Vo.show=function(){return vn(this),this},Vo.siblings=function(t,{elementsOnly:e=!0}={}){return new qt(Oe(this,t,{elementsOnly:e}))},Vo.slideIn=function({queueName:t="default",...e}={}){return this.queue((t=>te(t,e)),{queueName:t})},Vo.slideOut=function({queueName:t="default",...e}={}){return this.queue((t=>ee(t,e)),{queueName:t})},Vo.sort=function(){return new qt(ae(this))},Vo.squeezeIn=function({queueName:t="default",...e}={}){return this.queue((t=>ne(t,e)),{queueName:t})},Vo.squeezeOut=function({queueName:t="default",...e}={}){return this.queue((t=>oe(t,e)),{queueName:t})},Vo.stop=function({finish:t=!0}={}){return this.clearQueue(),Ut(this,{finish:t}),this},Vo.tagName=function(){return fe(this)},Vo.toggle=function(){return xn(this),this},Vo.toggleClass=function(...t){return _n(this,...t),this},Vo.triggerEvent=function(t,{data:e=null,detail:n=null,bubbles:o=!0,cancelable:r=!0}={}){return Ie(this,t,{data:e,detail:n,bubbles:o,cancelable:r}),this},Vo.triggerOne=function(t,{data:e=null,detail:n=null,bubbles:o=!0,cancelable:r=!0}={}){return Me(this,t,{data:e,detail:n,bubbles:o,cancelable:r})},Vo.unwrap=function(t){return Zn(this,t),this},Vo.visible=function(){return new qt(mo(this))},Vo.width=function({boxSize:t=1,outer:e=!1}={}){return Mn(this,{boxSize:t,outer:e})},Vo.withAnimation=function(){return new qt(go(this))},Vo.withAttribute=function(t){return new qt(wo(this,t))},Vo.withChildren=function(){return new qt(yo(this))},Vo.withClass=function(t){return new qt(bo(this,t))},Vo.withCSSAnimation=function(){return new qt(vo(this))},Vo.withCSSTransition=function(){return new qt(xo(this))},Vo.withData=function(t){return new qt(_o(this,t))},Vo.withDescendent=function(t){return new qt(So(this,t))},Vo.withProperty=function(t){return new qt(No(this,t))},Vo.wrap=function(t){return Kn(this,t),this},Vo.wrapAll=function(t){return to(this,t),this},Vo.wrapInner=function(t){return eo(this,t),this},Vo.wrapSelection=function(){return Ao(this),this},Object.assign(Qo,{BORDER_BOX:2,CONTENT_BOX:0,MARGIN_BOX:3,PADDING_BOX:1,SCROLL_BOX:4,Animation:St,AnimationSet:Nt,QuerySet:qt,addClass:pn,addEvent:Ee,addEventDelegate:De,addEventDelegateOnce:je,addEventOnce:$e,after:Gn,afterSelection:Oo,ajax:function(t){return new yt(t)},animate:Xt,append:Wn,appendTo:Xn,attachShadow:Ot,before:Un,beforeSelection:To,blur:Fn,center:Sn,child:le,children:he,clearQueue:no,click:kn,clone:Fe,cloneData:fn,cloneEvents:Le,closest:de,commonAncestor:pe,connected:io,constrain:Nn,contents:me,create:function(t="div",e={}){const n=X().createElement(t);if("html"in e?n.innerHTML=e.html:"text"in e&&(n.textContent=e.text),"class"in e){const t=Z(T(e.class));n.classList.add(...t)}if("style"in e)for(let[t,o]of Object.entries(e.style))t=M(t),o&&a(o)&&!CSS.supports(t,o)&&(o+="px"),n.style.setProperty(t,o);if("value"in e&&(n.value=e.value),"attributes"in e)for(const[t,o]of Object.entries(e.attributes))n.setAttribute(t,o);if("properties"in e)for(const[t,o]of Object.entries(e.properties))n[t]=o;if("dataset"in e){const t=K(e.dataset,null,{json:!0});for(let[e,o]of Object.entries(t))e=R(e),n.dataset[e]=o}return n},createComment:function(t){return X().createComment(t)},createFragment:Tt,createRange:Ct,createText:function(t){return X().createTextNode(t)},css:mn,debounce:Q,delete:function(t,e){return new yt({url:t,method:"DELETE",...e})},detach:He,distTo:On,distToNode:Tn,dropIn:Yt,dropOut:Vt,empty:ze,equal:so,exec:function(t,e=null){return X().execCommand(t,!1,e)},extractSelection:function(){const t=U().getSelection();if(!t.rangeCount)return[];const e=t.getRangeAt(0);t.removeAllRanges();const n=e.extractContents();return N([],n.childNodes)},fadeIn:Qt,fadeOut:Jt,filter:uo,filterOne:co,find:Et,findByClass:Dt,findById:jt,findByTag:$t,findOne:Lt,findOneByClass:Rt,findOneById:Bt,findOneByTag:It,fixed:ao,focus:Hn,fragment:ge,get:function(t,e,n){return new yt({url:t,data:e,...n})},getAjaxDefaults:G,getAnimationDefaults:W,getAttribute:Ye,getContext:X,getCookie:function(t){const e=X().cookie.split(";").find((e=>e.trimStart().substring(0,t.length)===t)).trimStart();return e?decodeURIComponent(e.substring(t.length+1)):null},getData:ln,getDataset:Ve,getHTML:Qe,getProperty:Je,getScrollX:jn,getScrollY:$n,getSelection:function(){const t=U().getSelection();if(!t.rangeCount)return[];const e=t.getRangeAt(0),n=N([],e.commonAncestorContainer.querySelectorAll("*"));if(!n.length)return[e.commonAncestorContainer];if(1===n.length)return n;const r=e.startContainer,i=e.endContainer,s=o(r)?r:r.parentNode,u=o(i)?i:i.parentNode,c=n.slice(n.indexOf(s),n.indexOf(u)+1),a=[];let f;for(const t of c)f&&f.contains(t)||(f=t,a.push(t));return a.length>1?O(a):a},getStyle:gn,getText:Ze,getValue:Ke,getWindow:U,hasAnimation:qo,hasAttribute:Eo,hasCSSAnimation:$o,hasCSSTransition:Lo,hasChildren:Do,hasClass:jo,hasData:Ro,hasDataset:Bo,hasDescendent:Io,hasFragment:Mo,hasProperty:Fo,hasShadow:ko,height:In,hidden:fo,hide:wn,index:re,indexOf:ie,insertAfter:Yn,insertBefore:Vn,is:Ho,isConnected:zo,isEqual:Go,isFixed:Wo,isHidden:Xo,isSame:Uo,isVisible:Yo,loadScript:Jo,loadScripts:function(t,{cache:e=!0,context:n=X()}={}){return Promise.all(t.map((t=>d(t)?Jo(t,null,{cache:e,context:n}):Jo(null,t,{cache:e,context:n}))))},loadStyle:Zo,loadStyles:function(t,{cache:e=!0,context:n=X()}={}){return Promise.all(t.map((t=>d(t)?Zo(t,null,{cache:e,context:n}):Zo(null,t,{cache:e,context:n}))))},mouseDragFactory:function(t,e,n,{debounce:o=!0,passive:r=!0,preventDefault:i=!0,touches:s=1}={}){return e&&o&&(e=Q(e),n&&(n=Q(n))),o=>{const u="touchstart"===o.type;if(u&&o.touches.length!==s)return;if(t&&!1===t(o))return;if(i&&o.preventDefault(),!e&&!n)return;const[c,a]=o.type in rt?rt[o.type]:rt.mousedown,f=t=>{u&&t.touches.length!==s||(i&&!r&&t.preventDefault(),e&&e(t))},l=t=>{u&&t.touches.length!==s-1||n&&!1===n(t)||(i&&t.preventDefault(),Re(window,c,f),Re(window,a,l))};Ee(window,c,f,{passive:r}),Ee(window,a,l)}},nearestTo:Cn,nearestToNode:Pn,next:we,nextAll:ye,noConflict:function(){const t=U();t.$===Qo&&(t.$=tr)},normalize:se,not:lo,notOne:ho,offsetParent:be,parent:ve,parents:xe,parseDocument:function(t,{contentType:e="text/html"}={}){return Pt.parseFromString(t,e)},parseFormData:dt,parseHTML:At,parseParams:pt,patch:function(t,e,n){return new yt({url:t,data:e,method:"PATCH",...n})},percentX:An,percentY:qn,position:En,post:function(t,e,n){return new yt({url:t,data:e,method:"POST",...n})},prepend:Qn,prependTo:Jn,prev:_e,prevAll:Se,put:function(t,e,n){return new yt({url:t,data:e,method:"PUT",...n})},query:Qo,queryOne:function(t,e=null){const n=zt(t,{node:!0,fragment:!0,shadow:!0,document:!0,window:!0,html:!0,context:e||X()});return new qt(n?[n]:[])},queue:ro,ready:zn,rect:Dn,remove:Ge,removeAttribute:tn,removeClass:yn,removeCookie:function(t,{path:e=null,secure:n=!1}={}){if(!t)return;let o=`${t}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;e&&(o+=`;path=${e}`),n&&(o+=";secure"),X().cookie=o},removeData:hn,removeDataset:en,removeEvent:Re,removeEventDelegate:Be,removeProperty:nn,replaceAll:Xe,replaceWith:Ue,rotateIn:Zt,rotateOut:Kt,same:po,sanitize:function(t,e=ot){const n=X().createElement("template");n.innerHTML=t;const o=n.content,r=N([],o.children);for(const t of r)Ko(t,e);return n.innerHTML},select:Co,selectAll:Po,serialize:ue,serializeArray:ce,setAjaxDefaults:function(t){q(k,t)},setAnimationDefaults:function(t){q(H,t)},setAttribute:on,setContext:Y,setCookie:function(t,e,{expires:n=null,path:o=null,secure:r=!1}={}){if(!t)return;let i=`${t}=${e}`;if(n){const t=new Date;t.setTime(t.getTime()+1e3*n),i+=`;expires=${t.toUTCString()}`}o&&(i+=`;path=${o}`),r&&(i+=";secure"),X().cookie=i},setData:dn,setDataset:rn,setHTML:sn,setProperty:un,setScroll:Ln,setScrollX:Rn,setScrollY:Bn,setStyle:bn,setText:cn,setValue:an,setWindow:V,shadow:Ne,show:vn,siblings:Oe,slideIn:te,slideOut:ee,sort:ae,squeezeIn:ne,squeezeOut:oe,stop:Ut,tagName:fe,toggle:xn,toggleClass:_n,triggerEvent:Ie,triggerOne:Me,unwrap:Zn,useTimeout:function(t=!0){z.useTimeout=t},visible:mo,width:Mn,withAnimation:go,withAttribute:wo,withCSSAnimation:vo,withCSSTransition:xo,withChildren:yo,withClass:bo,withData:_o,withDescendent:So,withProperty:No,wrap:Kn,wrapAll:to,wrapInner:eo,wrapSelection:Ao});for(const[t,e]of Object.entries(F))Qo[`_${t}`]=e;let tr;function er(t,e){return V(t),Y(e||t.document),tr=t.$,t.$=Qo,Qo}return m(globalThis)?er(globalThis):er})); \ No newline at end of file diff --git a/dist/fquery.min.js.map b/dist/fquery.min.js.map index 9be084a..a4027c4 100644 --- a/dist/fquery.min.js.map +++ b/dist/fquery.min.js.map @@ -1 +1 @@ -{"version":3,"names":["isArray","Array","isArrayLike","value","isObject","isFunction","isWindow","isElement","Symbol","iterator","isNumeric","length","isDocument","nodeType","isFragment","host","isNaN","Number","isNode","isNull","parseFloat","isFinite","Object","isPlainObject","constructor","isShadow","isString","isUndefined","undefined","document","defaultView","clamp","min","max","Math","clampPercent","dist","x1","y1","x2","y2","len","hypot","map","fromMin","fromMax","toMin","toMax","random","a","b","randomInt","toStep","step","round","toFixed","replace","merge","array","arrays","reduce","acc","other","prototype","push","apply","unique","from","Set","wrap","isBrowser","window","_requestAnimationFrame","args","requestAnimationFrame","callback","setTimeout","evaluate","extend","object","objects","val","k","getDot","key","defaultValue","keys","split","shift","setDot","overwrite","hasOwnProperty","call","concat","join","escapeChars","unescapeChars","amp","lt","gt","quot","apos","_splitString","string","word","toLowerCase","camelCase","index","capitalize","charAt","toUpperCase","substring","escapeRegExp","kebabCase","leading","animationReference","newArgs","running","animation","_","cancel","global","cancelAnimationFrame","clearTimeout","callbacks","arg","reduceRight","curried","wait","trailing","debounceReference","lastRan","debounced","now","Date","delta","filter","some","includes","match","every","otherIndex","v1","v2","amount","ran","result","defaultArgs","slice","v","pointer","chars","fill","start","end","sign","abs","i","throttleReference","throttled","code","ajaxDefaults","afterSend","beforeSend","cache","contentType","data","headers","isLocal","method","onProgress","onUploadProgress","processData","rejectOnCancel","responseType","url","xhr","XMLHttpRequest","animationDefaults","duration","type","infinite","debug","config","context","useTimeout","getAjaxDefaults","getAnimationDefaults","getContext","getWindow","setContext","Error","setWindow","debounce","Promise","resolve","then","eventNamespacedRegExp","event","RegExp","parseClasses","classList","flat","flatMap","parseData","json","fromEntries","entries","JSON","stringify","parseDataset","lower","trim","parse","e","parseEvent","parseEvents","events","allowedTags","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","eventLookup","mousedown","touchstart","animations","Map","WeakMap","queues","styles","appendQueryString","searchParams","getSearchParams","append","setSearchParams","getURL","baseHref","location","origin","pathname","URL","parseFormData","values","parseValues","formData","FormData","set","parseParams","paramString","encodeURI","parseValue","subKey","name","urlData","search","toString","newUrl","pos","indexOf","AjaxRequest","options","this","_options","href","test","protocol","_promise","reject","_resolve","_isResolved","_reject","error","_isRejected","dataParams","URLSearchParams","open","username","password","setRequestHeader","mimeType","overrideMimeType","timeout","onload","status","response","onerror","onprogress","loaded","total","upload","send","reason","_isCancelled","abort","onRejected","catch","onFinally","finally","onFulfilled","setPrototypeOf","animating","getTime","timeline","currentTime","performance","update","time","node","currentAnimations","otherAnimations","delete","size","Animation","_node","_callback","dataset","animationStart","has","get","clone","stop","finish","_isStopped","_isFinished","progress","sqrt","animationTime","animationProgress","AnimationSet","_animations","all","attachShadow","selector","parseNode","mode","createFragment","createDocumentFragment","createRange","parser","DOMParser","parseHTML","html","childNodes","createContextualFragment","children","QuerySet","nodes","_nodes","each","forEach","begin","find","findById","findByClass","findByTag","querySelectorAll","parseNodes","fragment","shadow","results","newNodes","className","getElementsByClassName","id","tagName","getElementsByTagName","findOne","findOneById","findOneByClass","findOneByTag","querySelector","item","getElementById","_parseNode","nodeFilter","HTMLCollection","NodeList","_parseNodes","parseFilter","matches","isSameNode","parseFilterContains","contains","parseNodesFilter","animate","newAnimations","dropIn","slideIn","direction","dropOut","slideOut","fadeIn","style","setProperty","fadeOut","rotateIn","inverse","x","y","z","rotateOut","useGpu","dir","translateStyle","clientHeight","clientWidth","translateAmount","squeezeIn","initialHeight","height","initialWidth","width","sizeStyle","squeezeOut","parentNode","findIndex","normalize","serialize","serializeArray","getAttribute","option","selectedOptions","sort","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINS","child","first","elementsOnly","closest","limitFilter","parents","commonAncestor","range","selectNode","setStartBefore","setEndAfter","pop","commonAncestorContainer","contents","content","next","nextSibling","nextAll","offsetParent","parent","unshift","prev","previousSibling","prevAll","siblings","shadowRoot","sibling","delegateFactory","getDelegate","target","getDelegateContainsFactory","getDelegateMatchFactory","delegate","defineProperty","configurable","namespaceFactory","eventName","namespaceRegExp","preventFactory","preventDefault","selfDestructFactory","capture","removeEvent","addEvent","eventNames","passive","selfDestruct","realEventName","eventData","nodeEvents","realCallback","addEventListener","addEventDelegate","addEventDelegateOnce","addEventOnce","cloneEvents","otherSelector","realEvents","regExp","removeEventListener","removeEventDelegate","triggerEvent","detail","bubbles","cancelable","realEvent","CustomEvent","assign","namespace","dispatchEvent","triggerOne","deep","cloneNode","deepClone","_events","_data","nodeData","nodeAnimations","detach","remove","empty","removeNode","replaceAll","replaceWith","others","insertBefore","clones","attribute","attributes","nodeName","nodeValue","getDataset","getHTML","getProperty","property","getText","getValue","removeAttribute","removeDataset","removeProperty","setAttribute","setDataset","setHTML","innerHTML","properties","setText","text","textContent","setValue","cloneData","setData","getData","removeData","newData","addClass","classes","add","css","getComputedStyle","nodeStyles","getPropertyValue","getStyle","hide","removeClass","setStyle","important","CSS","supports","show","toggle","display","toggleClass","center","offset","nodeBox","rect","left","top","constrain","containerSelector","containerBox","getScrollX","documentElement","scrollHeight","outerHeight","getScrollY","scrollWidth","outerWidth","preScrollX","preScrollY","leftOffset","topOffset","right","oldLeft","trueLeft","bottom","oldTop","trueTop","postScrollX","postScrollY","distTo","nodeCenter","distToNode","otherCenter","nearestTo","closestDistance","MAX_VALUE","nearestToNode","percentX","percent","percentY","position","offsetLeft","offsetTop","getBoundingClientRect","scrollX","scrollY","scrollingElement","scrollLeft","scrollTop","setScroll","scroll","setScrollX","setScrollY","boxSize","outer","innerHeight","parseInt","innerWidth","blur","click","focus","ready","readyState","once","after","reverse","appendTo","before","insertAfter","prepend","firstChild","prependTo","unwrap","outerParent","firstClone","firstCloneNode","deepest","childElementCount","wrapAll","firstNode","wrapInner","clearQueue","queueName","queue","dequeue","runningQueue","connected","isConnected","equal","isEqualNode","filterOne","fixed","hidden","visibilityState","not","notOne","same","visible","withAnimation","withAttribute","hasAttribute","withChildren","withClass","withCSSAnimation","withCSSTransition","withData","withDescendent","withProperty","afterSelection","selection","getSelection","rangeCount","getRangeAt","removeAllRanges","collapse","insertNode","beforeSelection","select","addRange","selectAll","wrapSelection","extractContents","hasAnimation","hasChildren","hasClass","hasCSSAnimation","hasCSSTransition","hasData","hasDataset","hasDescendent","hasFragment","hasProperty","hasShadow","is","isEqual","isFixed","isHidden","isSame","isVisible","proto","query","loadScript","src","defer","script","createElement","head","appendChild","loadStyle","rel","link","sanitizeNode","_allowedTags","allowedAttributes","_sort","_addClass","_addEvent","_addEventDelegate","_addEventDelegateOnce","_addEventOnce","_after","_afterSelection","_animate","_append","_appendTo","_attachShadow","_before","_beforeSelection","_blur","_center","_child","_children","_clearQueue","_click","_clone","_cloneData","_cloneEvents","_closest","_commonAncestor","_connected","container","_constrain","_contents","_css","delay","_detach","_distTo","_distToNode","_dropIn","_dropOut","_empty","eq","_equal","_fadeIn","_fadeOut","_filter","_filterOne","_find","_findByClass","_findById","_findByTag","_findOne","_findOneByClass","_findOneById","_findOneByTag","_fixed","_focus","_fragment","_getAttribute","_getData","_getDataset","_getHTML","_getProperty","_getScrollX","_getScrollY","_getStyle","_getText","_getValue","_hasAnimation","_hasAttribute","_hasChildren","_hasClass","_hasCSSAnimation","_hasCSSTransition","_hasData","_hasDataset","_hasDescendent","_hasFragment","_hasProperty","_hasShadow","_height","_hidden","_hide","_index","_indexOf","_insertAfter","_insertBefore","_is","_isConnected","_isEqual","_isFixed","_isHidden","_isSame","_isVisible","last","_nearestTo","_nearestToNode","_next","_nextAll","_normalize","_not","_notOne","_offsetParent","_parent","_parents","_percentX","_percentY","_position","_prepend","_prependTo","_prev","_prevAll","_queue","_rect","_remove","_removeAttribute","_removeClass","_removeData","_removeDataset","_removeEvent","_removeEventDelegate","_removeProperty","_replaceAll","_replaceWith","_rotateIn","_rotateOut","_same","_select","_selectAll","_serialize","_serializeArray","_setAttribute","_setData","_setDataset","_setHTML","_setProperty","_setScroll","_setScrollX","_setScrollY","_setStyle","_setText","_setValue","_shadow","_show","_siblings","_slideIn","_slideOut","_squeezeIn","_squeezeOut","_stop","_tagName","_toggle","_toggleClass","_triggerEvent","_triggerOne","_unwrap","_visible","_width","_withAnimation","_withAttribute","_withChildren","_withClass","_withCSSAnimation","_withCSSTransition","_withData","_withDescendent","_withProperty","_wrap","_wrapAll","_wrapInner","_wrapSelection","BORDER_BOX","CONTENT_BOX","MARGIN_BOX","PADDING_BOX","SCROLL_BOX","ajax","create","class","createComment","comment","createText","createTextNode","exec","command","execCommand","extractSelection","getCookie","cookie","trimStart","decodeURIComponent","startContainer","endContainer","selectedNodes","lastNode","loadScripts","urls","loadStyles","mouseDragFactory","down","move","up","touches","_debounce","isTouch","moveEvent","upEvent","realMove","realUp","noConflict","$","_$","parseDocument","input","parseFromString","patch","post","put","queryOne","removeCookie","path","secure","sanitize","template","setAjaxDefaults","setAnimationDefaults","setCookie","expires","date","setTime","toUTCString","enable","registerGlobals","globalThis"],"sources":["../node_modules/@fr0st/core/src/testing.js","../node_modules/@fr0st/core/src/math.js","../node_modules/@fr0st/core/src/array.js","../node_modules/@fr0st/core/src/function.js","../node_modules/@fr0st/core/src/object.js","../node_modules/@fr0st/core/src/string.js","../src/config.js","../src/helpers.js","../src/vars.js","../src/ajax/helpers.js","../src/ajax/ajax-request.js","../src/animation/helpers.js","../src/animation/animation.js","../src/animation/animation-set.js","../src/manipulation/create.js","../src/parser/parser.js","../src/query/query-set.js","../src/traversal/find.js","../src/filters.js","../src/animation/animate.js","../src/animation/animations.js","../src/utility/utility.js","../src/traversal/traversal.js","../src/events/event-factory.js","../src/events/event-handlers.js","../src/manipulation/manipulation.js","../src/attributes/attributes.js","../src/attributes/data.js","../src/attributes/styles.js","../src/attributes/position.js","../src/attributes/scroll.js","../src/attributes/size.js","../src/events/events.js","../src/manipulation/move.js","../src/manipulation/wrap.js","../src/queue/queue.js","../src/traversal/filter.js","../src/utility/selection.js","../src/utility/tests.js","../src/query/proto.js","../src/query/query.js","../src/scripts/scripts.js","../src/styles/styles.js","../src/utility/sanitize.js","../src/query/utility/utility.js","../src/query/attributes/styles.js","../src/query/events/event-handlers.js","../src/query/manipulation/move.js","../src/query/utility/selection.js","../src/query/animation/animate.js","../src/query/manipulation/create.js","../src/query/events/events.js","../src/query/attributes/position.js","../src/query/traversal/traversal.js","../src/query/queue/queue.js","../src/query/manipulation/manipulation.js","../src/query/attributes/data.js","../src/query/traversal/filter.js","../src/query/animation/animations.js","../src/query/traversal/find.js","../src/query/attributes/attributes.js","../src/query/attributes/scroll.js","../src/query/utility/tests.js","../src/query/attributes/size.js","../src/query/manipulation/wrap.js","../src/fquery.js","../src/ajax/ajax.js","../src/cookie/cookie.js","../src/globals.js","../src/index.js"],"sourcesContent":["/**\n * Testing methods\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst DOCUMENT_NODE = 9;\nconst DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Returns true if the value is an array.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is an array, otherwise FALSE.\n */\nexport const isArray = Array.isArray;\n\n/**\n * Returns true if the value is array-like.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is array-like, otherwise FALSE.\n */\nexport const isArrayLike = (value) =>\n isArray(value) ||\n (\n isObject(value) &&\n !isFunction(value) &&\n !isWindow(value) &&\n !isElement(value) &&\n (\n (\n Symbol.iterator in value &&\n isFunction(value[Symbol.iterator])\n ) ||\n (\n 'length' in value &&\n isNumeric(value.length) &&\n (\n !value.length ||\n value.length - 1 in value\n )\n )\n )\n );\n\n/**\n * Returns true if the value is a Boolean.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is boolean, otherwise FALSE.\n */\nexport const isBoolean = (value) =>\n value === !!value;\n\n/**\n * Returns true if the value is a Document.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Document, otherwise FALSE.\n */\nexport const isDocument = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_NODE;\n\n/**\n * Returns true if the value is a HTMLElement.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a HTMLElement, otherwise FALSE.\n */\nexport const isElement = (value) =>\n !!value &&\n value.nodeType === ELEMENT_NODE;\n\n/**\n * Returns true if the value is a DocumentFragment.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a DocumentFragment, otherwise FALSE.\n */\nexport const isFragment = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !value.host;\n\n/**\n * Returns true if the value is a function.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a function, otherwise FALSE.\n */\nexport const isFunction = (value) =>\n typeof value === 'function';\n\n/**\n * Returns true if the value is NaN.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is NaN, otherwise FALSE.\n */\nexport const isNaN = Number.isNaN;\n\n/**\n * Returns true if the value is a Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Node, otherwise FALSE.\n */\nexport const isNode = (value) =>\n !!value &&\n (\n value.nodeType === ELEMENT_NODE ||\n value.nodeType === TEXT_NODE ||\n value.nodeType === COMMENT_NODE\n );\n\n/**\n * Returns true if the value is null.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is null, otherwise FALSE.\n */\nexport const isNull = (value) =>\n value === null;\n\n/**\n * Returns true if the value is numeric.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is numeric, otherwise FALSE.\n */\nexport const isNumeric = (value) =>\n !isNaN(parseFloat(value)) &&\n isFinite(value);\n\n/**\n * Returns true if the value is an object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is an object, otherwise FALSE.\n */\nexport const isObject = (value) =>\n !!value &&\n value === Object(value);\n\n/**\n * Returns true if the value is a plain object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a plain object, otherwise FALSE.\n */\nexport const isPlainObject = (value) =>\n !!value &&\n value.constructor === Object;\n\n/**\n * Returns true if the value is a ShadowRoot.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a ShadowRoot, otherwise FALSE.\n */\nexport const isShadow = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !!value.host;\n\n/**\n * Returns true if the value is a string.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a string, otherwise FALSE.\n */\nexport const isString = (value) =>\n value === `${value}`;\n\n/**\n * Returns true if the value is a text Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a text Node, otherwise FALSE.\n */\nexport const isText = (value) =>\n !!value &&\n value.nodeType === TEXT_NODE;\n\n/**\n * Returns true if the value is undefined.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is undefined, otherwise FALSE.\n */\nexport const isUndefined = (value) =>\n value === undefined;\n\n/**\n * Returns true if the value is a Window.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a Window, otherwise FALSE.\n */\nexport const isWindow = (value) =>\n !!value &&\n !!value.document &&\n value.document.defaultView === value;\n","import { isNull } from './testing.js';\n\n/**\n * Math methods\n */\n\n/**\n * Clamp a value between a min and max.\n * @param {number} value The value to clamp.\n * @param {number} [min=0] The minimum value of the clamped range.\n * @param {number} [max=1] The maximum value of the clamped range.\n * @return {number} The clamped value.\n */\nexport const clamp = (value, min = 0, max = 1) =>\n Math.max(\n min,\n Math.min(\n max,\n value,\n ),\n );\n\n/**\n * Clamp a value between 0 and 100.\n * @param {number} value The value to clamp.\n * @return {number} The clamped value.\n */\nexport const clampPercent = (value) =>\n clamp(value, 0, 100);\n\n/**\n * Get the distance between two vectors.\n * @param {number} x1 The first vector X co-ordinate.\n * @param {number} y1 The first vector Y co-ordinate.\n * @param {number} x2 The second vector X co-ordinate.\n * @param {number} y2 The second vector Y co-ordinate.\n * @return {number} The distance between the vectors.\n */\nexport const dist = (x1, y1, x2, y2) =>\n len(\n x1 - x2,\n y1 - y2,\n );\n\n/**\n * Inverse linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} value The value to inverse interpolate.\n * @return {number} The interpolated amount.\n */\nexport const inverseLerp = (v1, v2, value) =>\n (value - v1) / (v2 - v1);\n\n/**\n * Get the length of an X,Y vector.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @returns {number} The length of the vector.\n */\nexport const len = Math.hypot;\n\n/**\n * Linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} amount The amount to interpolate.\n * @return {number} The interpolated value.\n */\nexport const lerp = (v1, v2, amount) =>\n v1 *\n (1 - amount) +\n v2 *\n amount;\n\n/**\n * Map a value from one range to another.\n * @param {number} value The value to map.\n * @param {number} fromMin The minimum value of the current range.\n * @param {number} fromMax The maximum value of the current range.\n * @param {number} toMin The minimum value of the target range.\n * @param {number} toMax The maximum value of the target range.\n * @return {number} The mapped value.\n */\nexport const map = (value, fromMin, fromMax, toMin, toMax) =>\n (value - fromMin) *\n (toMax - toMin) /\n (fromMax - fromMin) +\n toMin;\n\n/**\n * Return a random floating-point number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const random = (a = 1, b = null) =>\n isNull(b) ?\n Math.random() * a :\n map(\n Math.random(),\n 0,\n 1,\n a,\n b,\n );\n\n/**\n * Return a random number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const randomInt = (a = 1, b = null) =>\n random(a, b) | 0;\n\n/**\n * Constrain a number to a specified step-size.\n * @param {number} value The value to constrain.\n * @param {number} step The minimum step-size.\n * @return {number} The constrained value.\n */\nexport const toStep = (value, step = 0.01) =>\n parseFloat(\n (\n Math.round(value / step) *\n step\n ).toFixed(\n `${step}`.replace(/\\d*\\.?/, '').length,\n ),\n );\n","import { randomInt, toStep } from './math.js';\nimport { isArray, isArrayLike, isUndefined } from './testing.js';\n\n/**\n * Array methods\n */\n\n/**\n * Create a new array containing the values of the first array, that do not exist in any of the additional passed arrays.\n * @param {array} array The input array.\n * @param {...array} arrays The arrays to compare against.\n * @return {array} The output array.\n */\nexport const diff = (array, ...arrays) => {\n arrays = arrays.map(unique);\n return array.filter(\n (value) => !arrays\n .some((other) => other.includes(value)),\n );\n};\n\n/**\n * Create a new array containing the unique values that exist in all of the passed arrays.\n * @param {...array} arrays The input arrays.\n * @return {array} The output array.\n */\nexport const intersect = (...arrays) =>\n unique(\n arrays\n .reduce(\n (acc, array, index) => {\n array = unique(array);\n return merge(\n acc,\n array.filter(\n (value) =>\n arrays.every(\n (other, otherIndex) =>\n index == otherIndex ||\n other.includes(value),\n ),\n ),\n );\n },\n [],\n ),\n );\n\n/**\n * Merge the values from one or more arrays or array-like objects onto an array.\n * @param {array} array The input array.\n * @param {...array|object} arrays The arrays or array-like objects to merge.\n * @return {array} The output array.\n */\nexport const merge = (array = [], ...arrays) =>\n arrays.reduce(\n (acc, other) => {\n Array.prototype.push.apply(acc, other);\n return array;\n },\n array,\n );\n\n/**\n * Return a random value from an array.\n * @param {array} array The input array.\n * @return {*} A random value from the array, or null if it is empty.\n */\nexport const randomValue = (array) =>\n array.length ?\n array[randomInt(array.length)] :\n null;\n\n/**\n * Return an array containing a range of values.\n * @param {number} start The first value of the sequence.\n * @param {number} end The value to end the sequence on.\n * @param {number} [step=1] The increment between values in the sequence.\n * @return {number[]} The array of values from start to end.\n */\nexport const range = (start, end, step = 1) => {\n const sign = Math.sign(end - start);\n return new Array(\n (\n (\n Math.abs(end - start) /\n step\n ) +\n 1\n ) | 0,\n )\n .fill()\n .map(\n (_, i) =>\n start + toStep(\n (i * step * sign),\n step,\n ),\n );\n};\n\n/**\n * Remove duplicate elements in an array.\n * @param {array} array The input array.\n * @return {array} The filtered array.\n */\nexport const unique = (array) =>\n Array.from(\n new Set(array),\n );\n\n/**\n * Create an array from any value.\n * @param {*} value The input value.\n * @return {array} The wrapped array.\n */\nexport const wrap = (value) =>\n isUndefined(value) ?\n [] :\n (\n isArray(value) ?\n value :\n (\n isArrayLike(value) ?\n merge([], value) :\n [value]\n )\n );\n","import { isFunction, isUndefined } from './testing.js';\n\n/**\n * Function methods\n */\n\nconst isBrowser = typeof window !== 'undefined' && 'requestAnimationFrame' in window;\n\n/**\n * Execute a callback on the next animation frame\n * @param {function} callback Callback function to execute.\n * @return {number} The request ID.\n */\nconst _requestAnimationFrame = isBrowser ?\n (...args) => window.requestAnimationFrame(...args) :\n (callback) => setTimeout(callback, 1000 / 60);\n\n/**\n * Create a wrapped version of a function that executes at most once per animation frame\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the animation frame.\n * @return {function} The wrapped function.\n */\nexport const animation = (callback, { leading = false } = {}) => {\n let animationReference;\n let newArgs;\n let running;\n\n const animation = (...args) => {\n newArgs = args;\n\n if (running) {\n return;\n }\n\n if (leading) {\n callback(...newArgs);\n }\n\n running = true;\n animationReference = _requestAnimationFrame((_) => {\n if (!leading) {\n callback(...newArgs);\n }\n\n running = false;\n animationReference = null;\n });\n };\n\n animation.cancel = (_) => {\n if (!animationReference) {\n return;\n }\n\n if (isBrowser) {\n global.cancelAnimationFrame(animationReference);\n } else {\n clearTimeout(animationReference);\n }\n\n running = false;\n animationReference = null;\n };\n\n return animation;\n};\n\n/**\n * Create a wrapped function that will execute each callback in reverse order,\n * passing the result from each function to the previous.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const compose = (...callbacks) =>\n (arg) =>\n callbacks.reduceRight(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function, that will return new functions\n * until the number of total arguments passed reaches the arguments length\n * of the original function (at which point the function will execute).\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const curry = (callback) => {\n const curried = (...args) =>\n args.length >= callback.length ?\n callback(...args) :\n (...newArgs) =>\n curried(\n ...args.concat(newArgs),\n );\n\n return curried;\n};\n\n/**\n * Create a wrapped version of a function that executes once per wait period\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const debounce = (callback, wait = 0, { leading = false, trailing = true } = {}) => {\n let debounceReference;\n let lastRan;\n let newArgs;\n\n const debounced = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (!trailing) {\n return;\n }\n\n if (debounceReference) {\n clearTimeout(debounceReference);\n }\n\n debounceReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n debounceReference = null;\n },\n wait,\n );\n };\n\n debounced.cancel = (_) => {\n if (!debounceReference) {\n return;\n }\n\n clearTimeout(debounceReference);\n\n debounceReference = null;\n };\n\n return debounced;\n};\n\n/**\n * Evaluate a value from a function or value.\n * @param {*} value The value to evaluate.\n * @return {*} The evaluated value.\n */\nexport const evaluate = (value) =>\n isFunction(value) ?\n value() :\n value;\n\n/**\n * Create a wrapped version of a function that will only ever execute once.\n * Subsequent calls to the wrapped function will return the result of the initial call.\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const once = (callback) => {\n let ran;\n let result;\n\n return (...args) => {\n if (ran) {\n return result;\n }\n\n ran = true;\n result = callback(...args);\n return result;\n };\n};\n\n/**\n * Create a wrapped version of a function with predefined arguments.\n * @param {function} callback Callback function to execute.\n * @param {...*} [defaultArgs] Default arguments to pass to the function.\n * @return {function} The wrapped function.\n */\nexport const partial = (callback, ...defaultArgs) =>\n (...args) =>\n callback(\n ...(defaultArgs\n .slice()\n .map((v) =>\n isUndefined(v) ?\n args.shift() :\n v,\n ).concat(args)\n ),\n );\n\n/**\n * Create a wrapped function that will execute each callback in order,\n * passing the result from each function to the next.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const pipe = (...callbacks) =>\n (arg) =>\n callbacks.reduce(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function that executes at most once per wait period.\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=true] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const throttle = (callback, wait = 0, { leading = true, trailing = true } = {}) => {\n let throttleReference;\n let lastRan;\n let newArgs;\n let running;\n\n const throttled = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (running || !trailing) {\n return;\n }\n\n running = true;\n throttleReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n running = false;\n throttleReference = null;\n },\n delta === null ?\n wait :\n wait - delta,\n );\n };\n\n throttled.cancel = (_) => {\n if (!throttleReference) {\n return;\n }\n\n clearTimeout(throttleReference);\n\n running = false;\n throttleReference = null;\n };\n\n return throttled;\n};\n\n/**\n * Execute a function a specified number of times.\n * @param {function} callback Callback function to execute.\n * @param {number} amount The amount of times to execute the callback.\n */\nexport const times = (callback, amount) => {\n while (amount--) {\n if (callback() === false) {\n break;\n }\n }\n};\n","import { isArray, isObject, isPlainObject } from './testing.js';\n\n/**\n * Object methods\n */\n\n/**\n * Merge the values from one or more objects onto an object (recursively).\n * @param {object} object The input object.\n * @param {...object} objects The objects to merge.\n * @return {object} The output objects.\n */\nexport const extend = (object, ...objects) =>\n objects.reduce(\n (acc, val) => {\n for (const k in val) {\n if (isArray(val[k])) {\n acc[k] = extend(\n isArray(acc[k]) ?\n acc[k] :\n [],\n val[k],\n );\n } else if (isPlainObject(val[k])) {\n acc[k] = extend(\n isPlainObject(acc[k]) ?\n acc[k] :\n {},\n val[k],\n );\n } else {\n acc[k] = val[k];\n }\n }\n return acc;\n },\n object,\n );\n\n/**\n * Remove a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to remove from the object.\n */\nexport const forgetDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n break;\n }\n\n if (keys.length) {\n object = object[key];\n } else {\n delete object[key];\n }\n }\n};\n\n/**\n * Retrieve the value of a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to retrieve from the object.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {*} The value retrieved from the object.\n */\nexport const getDot = (object, key, defaultValue) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return defaultValue;\n }\n\n object = object[key];\n }\n\n return object;\n};\n\n/**\n * Returns true if a specified key exists in an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to test for in the object.\n * @return {Boolean} TRUE if the key exists, otherwise FALSE.\n */\nexport const hasDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return false;\n }\n\n object = object[key];\n }\n\n return true;\n};\n\n/**\n * Retrieve values of a specified key from an array of objects using dot notation.\n * @param {object[]} objects The input objects.\n * @param {string} key The key to retrieve from the objects.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {array} An array of values retrieved from the objects.\n */\nexport const pluckDot = (objects, key, defaultValue) =>\n objects\n .map((pointer) =>\n getDot(pointer, key, defaultValue),\n );\n\n/**\n * Set a specified value of a key for an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to set in the object.\n * @param {*} value The value to set.\n * @param {object} [options] The options for setting the value.\n * @param {Boolean} [options.overwrite=true] Whether to overwrite, if the key already exists.\n */\nexport const setDot = (object, key, value, { overwrite = true } = {}) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (key === '*') {\n for (const k in object) {\n if (!{}.hasOwnProperty.call(object, k)) {\n continue;\n }\n\n setDot(\n object,\n [k].concat(keys).join('.'),\n value,\n overwrite,\n );\n }\n return;\n }\n\n if (keys.length) {\n if (\n !isObject(object[key]) ||\n !(key in object)\n ) {\n object[key] = {};\n }\n\n object = object[key];\n } else if (\n overwrite ||\n !(key in object)\n ) {\n object[key] = value;\n }\n }\n};\n","import { random } from './math.js';\n\n// HTML escape characters\nconst escapeChars = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n};\n\nconst unescapeChars = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: '\\'',\n};\n\n/**\n * String methods\n */\n\n/**\n * Split a string into individual words.\n * @param {string} string The input string.\n * @return {string[]} The split parts of the string.\n */\nconst _splitString = (string) =>\n `${string}`\n .split(/[^a-zA-Z0-9']|(?=[A-Z])/)\n .reduce(\n (acc, word) => {\n word = word.replace(/[^\\w]/, '').toLowerCase();\n if (word) {\n acc.push(word);\n }\n return acc;\n },\n [],\n );\n\n/**\n * Convert a string to camelCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const camelCase = (string) =>\n _splitString(string)\n .map(\n (word, index) =>\n index ?\n capitalize(word) :\n word,\n )\n .join('');\n\n/**\n * Convert the first character of string to upper case and the remaining to lower case.\n * @param {string} string The input string.\n * @return {string} The capitalized string.\n */\nexport const capitalize = (string) =>\n string.charAt(0).toUpperCase() +\n string.substring(1).toLowerCase();\n\n/**\n * Convert HTML special characters in a string to their corresponding HTML entities.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escape = (string) =>\n string.replace(\n /[&<>\"']/g,\n (match) =>\n escapeChars[match],\n );\n\n/**\n * Escape RegExp special characters in a string.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escapeRegExp = (string) =>\n string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n/**\n * Convert a string to a humanized form.\n * @param {string} string The input string.\n * @return {string} The humanized string.\n */\nexport const humanize = (string) =>\n capitalize(\n _splitString(string)\n .join(' '),\n );\n\n/**\n * Convert a string to kebab-case.\n * @param {string} string The input string.\n * @return {string} The kebab-cased string.\n */\nexport const kebabCase = (string) =>\n _splitString(string)\n .join('-')\n .toLowerCase();\n\n/**\n * Convert a string to PascalCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const pascalCase = (string) =>\n _splitString(string)\n .map(\n (word) =>\n word.charAt(0).toUpperCase() +\n word.substring(1),\n )\n .join('');\n\n/**\n * Return a random string.\n * @param {number} [length=16] The length of the output string.\n * @param {string} [chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789] The characters to generate the string from.\n * @return {string} The random string.\n */\nexport const randomString = (length = 16, chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789') =>\n new Array(length)\n .fill()\n .map(\n (_) =>\n chars[random(chars.length) | 0],\n )\n .join('');\n\n/**\n * Convert a string to snake_case.\n * @param {string} string The input string.\n * @return {string} The snake_cased string.\n */\nexport const snakeCase = (string) =>\n _splitString(string)\n .join('_')\n .toLowerCase();\n\n/**\n * Convert HTML entities in a string to their corresponding characters.\n * @param {string} string The input string.\n * @return {string} The unescaped string.\n */\nexport const unescape = (string) =>\n string.replace(\n /&(amp|lt|gt|quot|apos);/g,\n (_, code) =>\n unescapeChars[code],\n );\n","import { extend, isDocument, isWindow } from '@fr0st/core';\n\n/**\n * DOM Config\n */\n\nconst ajaxDefaults = {\n afterSend: null,\n beforeSend: null,\n cache: true,\n contentType: 'application/x-www-form-urlencoded',\n data: null,\n headers: {},\n isLocal: null,\n method: 'GET',\n onProgress: null,\n onUploadProgress: null,\n processData: true,\n rejectOnCancel: true,\n responseType: null,\n url: null,\n xhr: (_) => new XMLHttpRequest,\n};\n\nconst animationDefaults = {\n duration: 1000,\n type: 'ease-in-out',\n infinite: false,\n debug: false,\n};\n\nexport const config = {\n ajaxDefaults,\n animationDefaults,\n context: null,\n useTimeout: false,\n window: null,\n};\n\n/**\n * Get the AJAX defaults.\n * @return {object} The AJAX defaults.\n */\nexport function getAjaxDefaults() {\n return ajaxDefaults;\n};\n\n/**\n * Get the animation defaults.\n * @return {object} The animation defaults.\n */\nexport function getAnimationDefaults() {\n return animationDefaults;\n};\n\n/**\n * Get the document context.\n * @return {Document} The document context.\n */\nexport function getContext() {\n return config.context;\n};\n\n/**\n * Get the window.\n * @return {Window} The window.\n */\nexport function getWindow() {\n return config.window;\n};\n\n/**\n * Set the AJAX defaults.\n * @param {object} options The ajax default options.\n */\nexport function setAjaxDefaults(options) {\n extend(ajaxDefaults, options);\n};\n\n/**\n * Set the animation defaults.\n * @param {object} options The animation default options.\n */\nexport function setAnimationDefaults(options) {\n extend(animationDefaults, options);\n};\n\n/**\n * Set the document context.\n * @param {Document} context The document context.\n */\nexport function setContext(context) {\n if (!isDocument(context)) {\n throw new Error('FrostDOM requires a valid Document.');\n }\n\n config.context = context;\n};\n\n/**\n * Set the window.\n * @param {Window} window The window.\n */\nexport function setWindow(window) {\n if (!isWindow(window)) {\n throw new Error('FrostDOM requires a valid Window.');\n }\n\n config.window = window;\n};\n\n/**\n * Set whether animations should use setTimeout.\n * @param {Boolean} [enable=true] Whether animations should use setTimeout.\n */\nexport function useTimeout(enable = true) {\n config.useTimeout = enable;\n};\n","import { escapeRegExp, isArray, isNumeric, isObject, isString, isUndefined } from '@fr0st/core';\n\n/**\n * DOM Helpers\n */\n\n/**\n * Create a wrapped version of a function that executes once per tick.\n * @param {function} callback Callback function to debounce.\n * @return {function} The wrapped function.\n */\nexport function debounce(callback) {\n let running;\n\n return (...args) => {\n if (running) {\n return;\n }\n\n running = true;\n\n Promise.resolve().then((_) => {\n callback(...args);\n running = false;\n });\n };\n};\n\n/**\n * Return a RegExp for testing a namespaced event.\n * @param {string} event The namespaced event.\n * @return {RegExp} The namespaced event RegExp.\n */\nexport function eventNamespacedRegExp(event) {\n return new RegExp(`^${escapeRegExp(event)}(?:\\\\.|$)`, 'i');\n};\n\n/**\n * Return a single dimensional array of classes (from a multi-dimensional array or space-separated strings).\n * @param {array} classList The classes to parse.\n * @return {string[]} The parsed classes.\n */\nexport function parseClasses(classList) {\n return classList\n .flat()\n .flatMap((val) => val.split(' '))\n .filter((val) => !!val);\n};\n\n/**\n * Return a data object from a key and value, or a data object.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @param {object} [options] The options for parsing data.\n * @param {Boolean} [options.json=false] Whether to JSON encode the values.\n * @return {object} The data object.\n */\nexport function parseData(key, value, { json = false } = {}) {\n const result = isString(key) ?\n { [key]: value } :\n key;\n\n if (!json) {\n return result;\n }\n\n return Object.fromEntries(\n Object.entries(result)\n .map(([key, value]) => [key, isObject(value) || isArray(value) ? JSON.stringify(value) : value]),\n );\n};\n\n/**\n * Return a JS primitive from a dataset string.\n * @param {string} value The input value.\n * @return {*} The parsed value.\n */\nexport function parseDataset(value) {\n if (isUndefined(value)) {\n return value;\n }\n\n const lower = value.toLowerCase().trim();\n\n if (['true', 'on'].includes(lower)) {\n return true;\n }\n\n if (['false', 'off'].includes(lower)) {\n return false;\n }\n\n if (lower === 'null') {\n return null;\n }\n\n if (isNumeric(lower)) {\n return parseFloat(lower);\n }\n\n if (['{', '['].includes(lower.charAt(0))) {\n try {\n const result = JSON.parse(value);\n return result;\n } catch (e) { }\n }\n\n return value;\n};\n\n/**\n * Return a \"real\" event from a namespaced event.\n * @param {string} event The namespaced event.\n * @return {string} The real event.\n */\nexport function parseEvent(event) {\n return event.split('.')\n .shift();\n};\n\n/**\n * Return an array of events from a space-separated string.\n * @param {string} events The events.\n * @return {array} The parsed events.\n */\nexport function parseEvents(events) {\n return events.split(' ');\n};\n","/**\n * DOM Variables\n */\n\nexport const CONTENT_BOX = 0;\nexport const PADDING_BOX = 1;\nexport const BORDER_BOX = 2;\nexport const MARGIN_BOX = 3;\nexport const SCROLL_BOX = 4;\n\nexport const allowedTags = {\n '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\\w-]*$/i],\n 'a': ['target', 'href', 'title', 'rel'],\n 'area': [],\n 'b': [],\n 'br': [],\n 'col': [],\n 'code': [],\n 'div': [],\n 'em': [],\n 'hr': [],\n 'h1': [],\n 'h2': [],\n 'h3': [],\n 'h4': [],\n 'h5': [],\n 'h6': [],\n 'i': [],\n 'img': ['src', 'alt', 'title', 'width', 'height'],\n 'li': [],\n 'ol': [],\n 'p': [],\n 'pre': [],\n 's': [],\n 'small': [],\n 'span': [],\n 'sub': [],\n 'sup': [],\n 'strong': [],\n 'u': [],\n 'ul': [],\n};\n\nexport const eventLookup = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend'],\n};\n\nexport const animations = new Map();\n\nexport const data = new WeakMap();\n\nexport const events = new WeakMap();\n\nexport const queues = new WeakMap();\n\nexport const styles = new WeakMap();\n","import { isArray, isObject, isUndefined } from '@fr0st/core';\nimport { getWindow } from './../config.js';\n\n/**\n * Ajax Helpers\n */\n\n/**\n * Append a query string to a URL.\n * @param {string} url The input URL.\n * @param {string} key The query string key.\n * @param {string} value The query string value.\n * @return {string} The new URL.\n */\nexport function appendQueryString(url, key, value) {\n const searchParams = getSearchParams(url);\n\n searchParams.append(key, value);\n\n return setSearchParams(url, searchParams);\n};\n\n/**\n * Get the URLSearchParams from a URL string.\n * @param {string} url The URL.\n * @return {URLSearchParams} The URLSearchParams.\n */\nexport function getSearchParams(url) {\n return getURL(url).searchParams;\n};\n\n/**\n * Get the URL from a URL string.\n * @param {string} url The URL.\n * @return {URL} The URL.\n */\nfunction getURL(url) {\n const window = getWindow();\n const baseHref = (window.location.origin + window.location.pathname).replace(/\\/$/, '');\n\n return new URL(url, baseHref);\n};\n\n/**\n * Return a FormData object from an array or object.\n * @param {array|object} data The input data.\n * @return {FormData} The FormData object.\n */\nexport function parseFormData(data) {\n const values = parseValues(data);\n\n const formData = new FormData;\n\n for (const [key, value] of values) {\n if (key.substring(key.length - 2) === '[]') {\n formData.append(key, value);\n } else {\n formData.set(key, value);\n }\n }\n\n return formData;\n};\n\n/**\n * Return a URI-encoded attribute string from an array or object.\n * @param {array|object} data The input data.\n * @return {string} The URI-encoded attribute string.\n */\nexport function parseParams(data) {\n const values = parseValues(data);\n\n const paramString = values\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n return encodeURI(paramString);\n};\n\n/**\n * Return an attributes array, or a flat array of attributes from a key and value.\n * @param {string} key The input key.\n * @param {array|object|string} [value] The input value.\n * @return {array} The parsed attributes.\n */\nfunction parseValue(key, value) {\n if (value === null || isUndefined(value)) {\n return [];\n }\n\n if (isArray(value)) {\n if (key.substring(key.length - 2) !== '[]') {\n key += '[]';\n }\n\n return value.flatMap((val) => parseValue(key, val));\n }\n\n if (isObject(value)) {\n return Object.entries(value)\n .flatMap(([subKey, val]) => parseValue(`${key}[${subKey}]`, val));\n }\n\n return [[key, value]];\n};\n\n/**\n * Return an attributes array from a data array or data object.\n * @param {array|object} data The input data.\n * @return {array} The parsed attributes.\n */\nfunction parseValues(data) {\n if (isArray(data)) {\n return data.flatMap((value) => parseValue(value.name, value.value));\n }\n\n if (isObject(data)) {\n return Object.entries(data)\n .flatMap(([key, value]) => parseValue(key, value));\n }\n\n return data;\n};\n\n/**\n * Set the URLSearchParams for a URL string.\n * @param {string} url The URL.\n * @param {URLSearchParams} searchParams The URLSearchParams.\n * @return {string} The new URL string.\n */\nexport function setSearchParams(url, searchParams) {\n const urlData = getURL(url);\n\n urlData.search = searchParams.toString();\n\n const newUrl = urlData.toString();\n\n const pos = newUrl.indexOf(url);\n return newUrl.substring(pos);\n};\n","import { extend, isObject } from '@fr0st/core';\nimport { appendQueryString, getSearchParams, parseFormData, parseParams, setSearchParams } from './helpers.js';\nimport { getAjaxDefaults, getWindow } from './../config.js';\n\n/**\n * AjaxRequest Class\n * @class\n */\nexport default class AjaxRequest {\n /**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n */\n constructor(options) {\n this._options = extend(\n {},\n getAjaxDefaults(),\n options,\n );\n\n if (!this._options.url) {\n this._options.url = getWindow().location.href;\n }\n\n if (!this._options.cache) {\n this._options.url = appendQueryString(this._options.url, '_', Date.now());\n }\n\n if (!('Content-Type' in this._options.headers) && this._options.contentType) {\n this._options.headers['Content-Type'] = this._options.contentType;\n }\n\n if (this._options.isLocal === null) {\n this._options.isLocal = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol);\n }\n\n if (!this._options.isLocal && !('X-Requested-With' in this._options.headers)) {\n this._options.headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = (value) => {\n this._isResolved = true;\n resolve(value);\n };\n\n this._reject = (error) => {\n this._isRejected = true;\n reject(error);\n };\n });\n\n this.xhr = this._options.xhr();\n\n if (this._options.data) {\n if (this._options.processData && isObject(this._options.data)) {\n if (this._options.contentType === 'application/json') {\n this._options.data = JSON.stringify(this._options.data);\n } else if (this._options.contentType === 'application/x-www-form-urlencoded') {\n this._options.data = parseParams(this._options.data);\n } else {\n this._options.data = parseFormData(this._options.data);\n }\n }\n\n if (this._options.method === 'GET') {\n const dataParams = new URLSearchParams(this._options.data);\n\n const searchParams = getSearchParams(this._options.url);\n for (const [key, value] of dataParams.entries()) {\n searchParams.append(key, value);\n }\n\n this._options.url = setSearchParams(this._options.url, searchParams);\n this._options.data = null;\n }\n }\n\n this.xhr.open(this._options.method, this._options.url, true, this._options.username, this._options.password);\n\n for (const [key, value] of Object.entries(this._options.headers)) {\n this.xhr.setRequestHeader(key, value);\n }\n\n if (this._options.responseType) {\n this.xhr.responseType = this._options.responseType;\n }\n\n if (this._options.mimeType) {\n this.xhr.overrideMimeType(this._options.mimeType);\n }\n\n if (this._options.timeout) {\n this.xhr.timeout = this._options.timeout;\n }\n\n this.xhr.onload = (e) => {\n if (this.xhr.status > 400) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n } else {\n this._resolve({\n response: this.xhr.response,\n xhr: this.xhr,\n event: e,\n });\n }\n };\n\n if (!this._options.isLocal) {\n this.xhr.onerror = (e) =>\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n }\n\n if (this._options.onProgress) {\n this.xhr.onprogress = (e) =>\n this._options.onProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.onUploadProgress) {\n this.xhr.upload.onprogress = (e) =>\n this._options.onUploadProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.beforeSend) {\n this._options.beforeSend(this.xhr);\n }\n\n this.xhr.send(this._options.data);\n\n if (this._options.afterSend) {\n this._options.afterSend(this.xhr);\n }\n }\n\n /**\n * Cancel a pending request.\n * @param {string} [reason=Request was cancelled] The reason for cancelling the request.\n */\n cancel(reason = 'Request was cancelled') {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n\n this.xhr.abort();\n\n this._isCancelled = true;\n\n if (this._options.rejectOnCancel) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n reason,\n });\n }\n }\n\n /**\n * Execute a callback if the request is rejected.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the request is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the request is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Execute a callback once the request is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the request is resolved.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AjaxRequest.prototype, Promise.prototype);\n","import { config, getWindow } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Helpers\n */\n\nlet animating = false;\n\n/**\n * Get the current time.\n * @return {number} The current time.\n */\nexport function getTime() {\n return document.timeline ?\n document.timeline.currentTime :\n performance.now();\n};\n\n/**\n * Start the animation loop (if not already started).\n */\nexport function start() {\n if (animating) {\n return;\n }\n\n animating = true;\n update();\n};\n\n/**\n * Run a single frame of all animations, and then queue up the next frame.\n */\nfunction update() {\n const time = getTime();\n\n for (const [node, currentAnimations] of animations) {\n const otherAnimations = currentAnimations.filter((animation) => !animation.update(time));\n\n if (!otherAnimations.length) {\n animations.delete(node);\n } else {\n animations.set(node, otherAnimations);\n }\n }\n\n if (!animations.size) {\n animating = false;\n } else if (config.useTimeout) {\n setTimeout(update, 1000 / 60);\n } else {\n getWindow().requestAnimationFrame(update);\n }\n};\n","import { clamp } from '@fr0st/core';\nimport { getTime } from './helpers.js';\nimport { getAnimationDefaults } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Class\n * @class\n */\nexport default class Animation {\n /**\n * New Animation constructor.\n * @param {HTMLElement} node The input node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for the animation.\n * @param {string} [options.type=ease-in-out] The type of animation\n * @param {number} [options.duration=1000] The duration the animation should last.\n * @param {Boolean} [options.infinite] Whether to repeat the animation.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n */\n constructor(node, callback, options) {\n this._node = node;\n this._callback = callback;\n\n this._options = {\n ...getAnimationDefaults(),\n ...options,\n };\n\n if (!('start' in this._options)) {\n this._options.start = getTime();\n }\n\n if (this._options.debug) {\n this._node.dataset.animationStart = this._options.start;\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n if (!animations.has(node)) {\n animations.set(node, []);\n }\n\n animations.get(node).push(this);\n }\n\n /**\n * Execute a callback if the animation is rejected.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Clone the animation to a new node.\n * @param {HTMLElement} node The input node.\n * @return {Animation} The cloned Animation.\n */\n clone(node) {\n return new Animation(node, this._callback, this._options);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animation.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animation.\n */\n stop({ finish = true } = {}) {\n if (this._isStopped || this._isFinished) {\n return;\n }\n\n const otherAnimations = animations.get(this._node)\n .filter((animation) => animation !== this);\n\n if (!otherAnimations.length) {\n animations.delete(this._node);\n } else {\n animations.set(this._node, otherAnimations);\n }\n\n if (finish) {\n this.update();\n }\n\n this._isStopped = true;\n\n if (!finish) {\n this._reject(this._node);\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n\n /**\n * Run a single frame of the animation.\n * @param {number} [time] The current time.\n * @return {Boolean} TRUE if the animation is finished, otherwise FALSE.\n */\n update(time = null) {\n if (this._isStopped) {\n return true;\n }\n\n let progress;\n\n if (time === null) {\n progress = 1;\n } else {\n progress = (time - this._options.start) / this._options.duration;\n\n if (this._options.infinite) {\n progress %= 1;\n } else {\n progress = clamp(progress);\n }\n\n if (this._options.type === 'ease-in') {\n progress = progress ** 2;\n } else if (this._options.type === 'ease-out') {\n progress = Math.sqrt(progress);\n } else if (this._options.type === 'ease-in-out') {\n if (progress <= 0.5) {\n progress = progress ** 2 * 2;\n } else {\n progress = 1 - ((1 - progress) ** 2 * 2);\n }\n }\n }\n\n if (this._options.debug) {\n this._node.dataset.animationTime = time;\n this._node.dataset.animationProgress = progress;\n }\n\n this._callback(this._node, progress, this._options);\n\n if (progress < 1) {\n return false;\n }\n\n if (this._options.debug) {\n delete this._node.dataset.animationStart;\n delete this._node.dataset.animationTime;\n delete this._node.dataset.animationProgress;\n }\n\n if (!this._isFinished) {\n this._isFinished = true;\n\n this._resolve(this._node);\n }\n\n return true;\n }\n}\n\nObject.setPrototypeOf(Animation.prototype, Promise.prototype);\n","/**\n* AnimationSet Class\n* @class\n*/\nexport default class AnimationSet {\n /**\n * New AnimationSet constructor.\n * @param {array} animations The animations.\n */\n constructor(animations) {\n this._animations = animations;\n this._promise = Promise.all(animations);\n }\n\n /**\n * Execute a callback if any of the animations is rejected.\n * @param {function} [onRejected] The callback to execute if an animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animations.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animations.\n */\n stop({ finish = true } = {}) {\n for (const animation of this._animations) {\n animation.stop({ finish });\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AnimationSet.prototype, Promise.prototype);\n","import { camelCase, isNumeric, kebabCase, wrap } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNode } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\n\n/**\n * DOM Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {string|array|HTMLElement|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for attaching the shadow DOM.\n * @param {Boolean} [options.open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {ShadowRoot} The new ShadowRoot.\n */\nexport function attachShadow(selector, { open = true } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.attachShadow({\n mode: open ?\n 'open' :\n 'closed',\n });\n};\n\n/**\n * Create a new DOM element.\n * @param {string} [tagName=div] The type of HTML element to create.\n * @param {object} [options] The options to use for creating the element.\n * @param {string} [options.html] The HTML contents.\n * @param {string} [options.text] The text contents.\n * @param {string|array} [options.class] The classes.\n * @param {object} [options.style] An object containing style properties.\n * @param {string} [options.value] The value.\n * @param {object} [options.attributes] An object containing attributes.\n * @param {object} [options.properties] An object containing properties.\n * @param {object} [options.dataset] An object containing dataset values.\n * @return {HTMLElement} The new HTMLElement.\n */\nexport function create(tagName = 'div', options = {}) {\n const node = getContext().createElement(tagName);\n\n if ('html' in options) {\n node.innerHTML = options.html;\n } else if ('text' in options) {\n node.textContent = options.text;\n }\n\n if ('class' in options) {\n const classes = parseClasses(wrap(options.class));\n\n node.classList.add(...classes);\n }\n\n if ('style' in options) {\n for (let [style, value] of Object.entries(options.style)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n node.style.setProperty(style, value);\n }\n }\n\n if ('value' in options) {\n node.value = options.value;\n }\n\n if ('attributes' in options) {\n for (const [key, value] of Object.entries(options.attributes)) {\n node.setAttribute(key, value);\n }\n }\n\n if ('properties' in options) {\n for (const [key, value] of Object.entries(options.properties)) {\n node[key] = value;\n }\n }\n\n if ('dataset' in options) {\n const dataset = parseData(options.dataset, null, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n node.dataset[key] = value;\n }\n }\n\n return node;\n};\n\n/**\n * Create a new comment node.\n * @param {string} comment The comment contents.\n * @return {Node} The new comment node.\n */\nexport function createComment(comment) {\n return getContext().createComment(comment);\n};\n\n/**\n * Create a new document fragment.\n * @return {DocumentFragment} The new DocumentFragment.\n */\nexport function createFragment() {\n return getContext().createDocumentFragment();\n};\n\n/**\n * Create a new range object.\n * @return {Range} The new Range.\n */\nexport function createRange() {\n return getContext().createRange();\n};\n\n/**\n * Create a new text node.\n * @param {string} text The text contents.\n * @return {Node} The new text node.\n */\nexport function createText(text) {\n return getContext().createTextNode(text);\n};\n","\nimport { merge } from '@fr0st/core';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Parser\n */\n\nconst parser = new DOMParser();\n\n/**\n * Create a Document object from a string.\n * @param {string} input The input string.\n * @param {object} [options] The options for parsing the string.\n * @param {string} [options.contentType=text/html] The content type.\n * @return {Document} A new Document object.\n */\nexport function parseDocument(input, { contentType = 'text/html' } = {}) {\n return parser.parseFromString(input, contentType);\n};\n\n/**\n * Create an Array containing nodes parsed from a HTML string.\n * @param {string} html The HTML input string.\n * @return {array} An array of nodes.\n */\nexport function parseHTML(html) {\n const childNodes = createRange()\n .createContextualFragment(html)\n .children;\n\n return merge([], childNodes);\n};\n","/**\n * QuerySet Class\n * @class\n */\nexport default class QuerySet {\n /**\n * New DOM constructor.\n * @param {array} nodes The input nodes.\n */\n constructor(nodes = []) {\n this._nodes = nodes;\n }\n\n /**\n * Get the number of nodes.\n * @return {number} The number of nodes.\n */\n get length() {\n return this._nodes.length;\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} The QuerySet object.\n */\n each(callback) {\n this._nodes.forEach(\n (v, i) => callback(v, i),\n );\n\n return this;\n }\n\n /**\n * Retrieve the DOM node(s) contained in the QuerySet.\n * @param {number} [index=null] The index of the node.\n * @return {array|Node|Document|Window} The node(s).\n */\n get(index = null) {\n if (index === null) {\n return this._nodes;\n }\n\n return index < 0 ?\n this._nodes[index + this._nodes.length] :\n this._nodes[index];\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} A new QuerySet object.\n */\n map(callback) {\n const nodes = this._nodes.map(callback);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Reduce the set of matched nodes to a subset specified by a range of indices.\n * @param {number} [begin] The index to slice from.\n * @param {number} [end] The index to slice to.\n * @return {QuerySet} A new QuerySet object.\n */\n slice(begin, end) {\n const nodes = this._nodes.slice(begin, end);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Return an iterable from the nodes.\n * @return {ArrayIterator} The iterator object.\n */\n [Symbol.iterator]() {\n return this._nodes.values();\n }\n}\n","import { isDocument, isElement, isFragment, isShadow, merge, unique } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Find\n */\n\n/**\n * Return all nodes matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function find(selector, context = getContext()) {\n if (!selector) {\n return [];\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findByClass(match[2], context);\n }\n\n return findByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(selector));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(selector);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByClassName(className));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`.${className}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(`.${className}`) :\n node.getElementsByClassName(className);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findById(id, context = getContext()) {\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`#${id}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(`#${id}`);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByTagName(tagName));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(tagName));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(tagName) :\n node.getElementsByTagName(tagName);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a single node matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOne(selector, context = getContext()) {\n if (!selector) {\n return null;\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findOneById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findOneByClass(match[2], context);\n }\n\n return findOneByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(selector);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = node.querySelector(selector);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByClassName(className).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(`.${className}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(`.${className}`) :\n node.getElementsByClassName(className).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching element.\n */\nexport function findOneById(id, context = getContext()) {\n if (isDocument(context)) {\n return context.getElementById(id);\n }\n\n if (isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(`#${id}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isDocument(node) ?\n node.getElementById(id) :\n node.querySelector(`#${id}`);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByTagName(tagName).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(tagName);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(tagName) :\n node.getElementsByTagName(tagName).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n","import { isArray, isDocument, isElement, isFragment, isFunction, isNode, isShadow, isString, isWindow, merge, unique } from '@fr0st/core';\nimport { getContext } from './config.js';\nimport { parseHTML } from './parser/parser.js';\nimport QuerySet from './query/query-set.js';\nimport { find, findOne } from './traversal/find.js';\n\n/**\n * DOM Filters\n */\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNode(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes).shift();\n }\n\n return findOne(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return nodes;\n }\n\n if (nodes instanceof QuerySet) {\n const node = nodes.get(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n const node = nodes.item(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n};\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNodes(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes);\n }\n\n return find(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return [nodes];\n }\n\n if (nodes instanceof QuerySet) {\n return nodes.get().filter(nodeFilter);\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n return merge([], nodes).filter(nodeFilter);\n }\n\n return [];\n};\n\n/**\n * Return a node filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node filter callback.\n */\nexport function parseFilter(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return filter;\n }\n\n if (isString(filter)) {\n return (node) => isElement(node) && node.matches(filter);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.isSameNode(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.includes(node);\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return a node contains filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node contains filter callback.\n */\nexport function parseFilterContains(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return (node) => merge([], node.querySelectorAll('*')).some(filter);\n }\n\n if (isString(filter)) {\n return (node) => !!findOne(filter, node);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.contains(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.some((other) => node.contains(other));\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|Document} [options.context=getContext()] The Document context.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window} The matching node.\n */\nexport function parseNode(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNode(nodes, options.context || getContext(), filter, options);\n }\n\n for (const node of nodes) {\n const result = _parseNode(node, options.context || getContext(), filter, options);\n\n if (result) {\n return result;\n }\n }\n};\n\n/**\n * Return a filtered array of nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|DocumentFragment|ShadowRoot|Document} [options.context=getContext()] The Document context.\n * @return {array} The filtered array of nodes.\n */\nexport function parseNodes(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNodes(nodes, options.context || getContext(), filter, options);\n }\n\n const results = nodes.flatMap((node) => _parseNodes(node, options.context || getContext(), filter, options));\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a function for filtering nodes.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @return {DOM~nodeCallback} The node filter function.\n */\nfunction parseNodesFilter(options) {\n if (!options) {\n return isElement;\n }\n\n const callbacks = [];\n\n if (options.node) {\n callbacks.push(isNode);\n } else {\n callbacks.push(isElement);\n }\n\n if (options.document) {\n callbacks.push(isDocument);\n }\n\n if (options.window) {\n callbacks.push(isWindow);\n }\n\n if (options.fragment) {\n callbacks.push(isFragment);\n }\n\n if (options.shadow) {\n callbacks.push(isShadow);\n }\n\n return (node) => callbacks.some((callback) => callback(node));\n};\n","import Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\nimport { animations } from './../vars.js';\n\n/**\n * DOM Animate\n */\n\n/**\n * Add an animation to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function animate(selector, callback, options) {\n const nodes = parseNodes(selector);\n\n const newAnimations = nodes.map((node) => new Animation(node, callback, options));\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Stop all animations for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n */\nexport function stop(selector, { finish = true } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!animations.has(node)) {\n continue;\n }\n\n const currentAnimations = animations.get(node);\n for (const animation of currentAnimations) {\n animation.stop({ finish });\n }\n }\n};\n","import { evaluate } from '@fr0st/core';\nimport { animate } from './animate.js';\nimport Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Animations\n */\n\n/**\n * Drop each node into place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropIn(selector, options) {\n return slideIn(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Drop each node out of place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropOut(selector, options) {\n return slideOut(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Fade the opacity of each node in.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeIn(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n progress.toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Fade the opacity of each node out.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeOut(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n (1 - progress).toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Rotate each node in on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((90 - (progress * 90)) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Rotate each node out on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((progress * 90) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = ((size - (size * progress)) * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = (size * progress * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Squeeze each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeIn(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size * progress).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Squeeze each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeOut(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size - (size * progress)).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n","import { isDocument, isElement, isFragment, isShadow, isWindow, merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { parseParams } from './../ajax/helpers.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Execute a command in the document context.\n * @param {string} command The command to execute.\n * @param {string} [value] The value to give the command.\n * @return {Boolean} TRUE if the command was executed, otherwise FALSE.\n */\nexport function exec(command, value = null) {\n return getContext().execCommand(command, false, value);\n};\n\n/**\n * Get the index of the first node relative to it's parent.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The index.\n */\nexport function index(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (!node || !node.parentNode) {\n return;\n }\n\n return merge([], node.parentNode.children).indexOf(node);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).findIndex(nodeFilter);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function normalize(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n node.normalize();\n }\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The serialized string.\n */\nexport function serialize(selector) {\n return parseParams(\n serializeArray(selector),\n );\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The serialized array.\n */\nexport function serializeArray(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n }).reduce(\n (values, node) => {\n if (\n (isElement(node) && node.matches('form')) ||\n isFragment(node) ||\n isShadow(node)\n ) {\n return values.concat(\n serializeArray(\n node.querySelectorAll(\n 'input, select, textarea',\n ),\n ),\n );\n }\n\n if (\n isElement(node) &&\n node.matches('[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)')\n ) {\n return values;\n }\n\n const name = node.getAttribute('name');\n if (!name) {\n return values;\n }\n\n if (\n isElement(node) &&\n node.matches('select[multiple]')\n ) {\n for (const option of node.selectedOptions) {\n values.push(\n {\n name,\n value: option.value || '',\n },\n );\n }\n } else {\n values.push(\n {\n name,\n value: node.value || '',\n },\n );\n }\n\n return values;\n },\n [],\n );\n}\n\n/**\n * Sort nodes by their position in the document.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The sorted array of nodes.\n */\nexport function sort(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).sort((node, other) => {\n if (isWindow(node)) {\n return 1;\n }\n\n if (isWindow(other)) {\n return -1;\n }\n\n if (isDocument(node)) {\n return 1;\n }\n\n if (isDocument(other)) {\n return -1;\n }\n\n if (isFragment(other)) {\n return 1;\n }\n\n if (isFragment(node)) {\n return -1;\n }\n\n if (isShadow(node)) {\n node = node.host;\n }\n\n if (isShadow(other)) {\n other = other.host;\n }\n\n if (node.isSameNode(other)) {\n return 0;\n }\n\n const pos = node.compareDocumentPosition(other);\n\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING || pos & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n\n if (pos & Node.DOCUMENT_POSITION_PRECEDING || pos & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n\n return 0;\n });\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.tagName.toLowerCase();\n};\n","import { isDocument, isElement, merge, unique } from '@fr0st/core';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\nimport { sort } from './../utility/utility.js';\n\n/**\n * DOM Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function child(selector, nodeFilter) {\n return children(selector, nodeFilter, { first: true });\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.first=false] Whether to only return the first matching node for each node.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function children(selector, nodeFilter, { first = false, elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const childNodes = elementsOnly ?\n merge([], node.children) :\n merge([], node.childNodes);\n\n for (const child of childNodes) {\n if (!nodeFilter(child)) {\n continue;\n }\n\n results.push(child);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function closest(selector, nodeFilter, limitFilter) {\n return parents(selector, nodeFilter, limitFilter, { first: true });\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The common ancestor.\n */\nexport function commonAncestor(selector) {\n const nodes = sort(selector);\n\n if (!nodes.length) {\n return;\n }\n\n // Make sure all nodes have a parent\n if (nodes.some((node) => !node.parentNode)) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length === 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n return range.commonAncestorContainer;\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function contents(selector) {\n return children(selector, false, { elementsOnly: false });\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {DocumentFragment} The DocumentFragment.\n */\nexport function fragment(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.content;\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function next(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function nextAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The offset parent.\n */\nexport function offsetParent(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.offsetParent;\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function parent(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n node = node.parentNode;\n\n if (!node) {\n continue;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function parents(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const parents = [];\n while (node = node.parentNode) {\n if (isDocument(node)) {\n break;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n parents.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...parents);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function prev(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function prevAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const siblings = [];\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n siblings.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...siblings);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {ShadowRoot} The ShadowRoot.\n */\nexport function shadow(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.shadowRoot;\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function siblings(selector, nodeFilter, { elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const siblings = elementsOnly ?\n parent.children :\n parent.childNodes;\n\n let sibling;\n for (sibling of siblings) {\n if (node.isSameNode(sibling)) {\n continue;\n }\n\n if (!nodeFilter(sibling)) {\n continue;\n }\n\n results.push(sibling);\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n","import { merge } from '@fr0st/core';\nimport { addEvent, removeEvent } from './event-handlers.js';\nimport { debounce as _debounce } from './../helpers.js';\nimport { closest } from './../traversal/traversal.js';\nimport { eventLookup } from './../vars.js';\n\n/**\n * DOM Event Factory\n */\n\n/**\n * Return a function for matching a delegate target to a custom selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateContainsFactory(node, selector) {\n return (target) => {\n const matches = merge([], node.querySelectorAll(selector));\n\n if (!matches.length) {\n return false;\n }\n\n if (matches.includes(target)) {\n return target;\n }\n\n return closest(\n target,\n (parent) => matches.includes(parent),\n (parent) => parent.isSameNode(node),\n ).shift();\n };\n};\n\n/**\n * Return a function for matching a delegate target to a standard selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateMatchFactory(node, selector) {\n return (target) =>\n target.matches && target.matches(selector) ?\n target :\n closest(\n target,\n (parent) => parent.matches(selector),\n (parent) => parent.isSameNode(node),\n ).shift();\n};\n\n/**\n * Return a wrapped event callback that executes on a delegate selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The delegated event callback.\n */\nexport function delegateFactory(node, selector, callback) {\n const getDelegate = selector.match(/(?:^\\s*\\:scope|\\,(?=(?:(?:[^\"']*[\"']){2})*[^\"']*$)\\s*\\:scope)/) ?\n getDelegateContainsFactory(node, selector) :\n getDelegateMatchFactory(node, selector);\n\n return (event) => {\n if (node.isSameNode(event.target)) {\n return;\n }\n\n const delegate = getDelegate(event.target);\n\n if (!delegate) {\n return;\n }\n\n Object.defineProperty(event, 'currentTarget', {\n value: delegate,\n configurable: true,\n });\n Object.defineProperty(event, 'delegateTarget', {\n value: node,\n configurable: true,\n });\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped mouse drag event (optionally debounced).\n * @param {DOM~eventCallback} down The callback to execute on mousedown.\n * @param {DOM~eventCallback} move The callback to execute on mousemove.\n * @param {DOM~eventCallback} up The callback to execute on mouseup.\n * @param {object} [options] The options for the mouse drag event.\n * @param {Boolean} [options.debounce=true] Whether to debounce the move event.\n * @param {Boolean} [options.passive=true] Whether to use passive event listeners.\n * @param {Boolean} [options.preventDefault=true] Whether to prevent the default event.\n * @param {number} [options.touches=1] The number of touches to trigger the event for.\n * @return {DOM~eventCallback} The mouse drag event callback.\n */\nexport function mouseDragFactory(down, move, up, { debounce = true, passive = true, preventDefault = true, touches = 1 } = {}) {\n if (move && debounce) {\n move = _debounce(move);\n\n // needed to make sure up callback executes after final move callback\n if (up) {\n up = _debounce(up);\n }\n }\n\n return (event) => {\n const isTouch = event.type === 'touchstart';\n\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (down && down(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (!move && !up) {\n return;\n }\n\n const [moveEvent, upEvent] = event.type in eventLookup ?\n eventLookup[event.type] :\n eventLookup.mousedown;\n\n const realMove = (event) => {\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (preventDefault && !passive) {\n event.preventDefault();\n }\n\n if (!move) {\n return;\n }\n\n move(event);\n };\n\n const realUp = (event) => {\n if (isTouch && event.touches.length !== touches - 1) {\n return;\n }\n\n if (up && up(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n removeEvent(window, moveEvent, realMove);\n removeEvent(window, upEvent, realUp);\n };\n\n addEvent(window, moveEvent, realMove, { passive });\n addEvent(window, upEvent, realUp);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a namespace match.\n * @param {string} eventName The namespaced event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function namespaceFactory(eventName, callback) {\n return (event) => {\n if ('namespaceRegExp' in event && !event.namespaceRegExp.test(eventName)) {\n return;\n }\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a return false for preventing default.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function preventFactory(callback) {\n return (event) => {\n if (callback(event) === false) {\n event.preventDefault();\n }\n };\n};\n\n/**\n * Return a wrapped event callback that removes itself after execution.\n * @param {HTMLElement|ShadowRoot|Document|Window} node The input node.\n * @param {string} eventName The event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [optoins.delegate] The delegate selector.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function selfDestructFactory(node, eventName, callback, { capture = null, delegate = null } = {}) {\n return (event) => {\n removeEvent(node, eventName, callback, { capture, delegate });\n return callback(event);\n };\n};\n","import { delegateFactory, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js';\nimport { events } from './../vars.js';\n\n/**\n * DOM Event Handlers\n */\n\n/**\n * Add events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} eventNames The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @param {Boolean} [options.selfDestruct] Whether to use a self-destructing event.\n */\nexport function addEvent(selector, eventNames, callback, { capture = false, delegate = null, passive = false, selfDestruct = false } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n eventNames = parseEvents(eventNames);\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n const eventData = {\n callback,\n delegate,\n selfDestruct,\n capture,\n passive,\n };\n\n for (const node of nodes) {\n if (!events.has(node)) {\n events.set(node, {});\n }\n\n const nodeEvents = events.get(node);\n\n let realCallback = callback;\n\n if (selfDestruct) {\n realCallback = selfDestructFactory(node, eventName, realCallback, { capture, delegate });\n }\n\n realCallback = preventFactory(realCallback);\n\n if (delegate) {\n realCallback = delegateFactory(node, delegate, realCallback);\n }\n\n realCallback = namespaceFactory(eventName, realCallback);\n\n eventData.realCallback = realCallback;\n eventData.eventName = eventName;\n eventData.realEventName = realEventName;\n\n if (!nodeEvents[realEventName]) {\n nodeEvents[realEventName] = [];\n }\n\n nodeEvents[realEventName].push({ ...eventData });\n\n node.addEventListener(realEventName, realCallback, { capture, passive });\n }\n }\n};\n\n/**\n * Add delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegate(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive });\n};\n\n/**\n * Add self-destructing delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegateOnce(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive, selfDestruct: true });\n};\n\n/**\n * Add self-destructing events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventOnce(selector, events, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, passive, selfDestruct: true });\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneEvents(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n const nodeEvents = events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n otherSelector,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n passive: eventData.passive,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n};\n\n/**\n * Remove events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [eventNames] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n */\nexport function removeEvent(selector, eventNames, callback, { capture = null, delegate = null } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n let eventLookup;\n if (eventNames) {\n eventNames = parseEvents(eventNames);\n\n eventLookup = {};\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n if (!(realEventName in eventLookup)) {\n eventLookup[realEventName] = [];\n }\n\n eventLookup[realEventName].push(eventName);\n }\n }\n\n for (const node of nodes) {\n if (!events.has(node)) {\n continue;\n }\n\n const nodeEvents = events.get(node);\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n if (eventLookup && !(realEventName in eventLookup)) {\n continue;\n }\n\n const otherEvents = realEvents.filter((eventData) => {\n if (eventLookup && !eventLookup[realEventName].some((eventName) => {\n if (eventName === realEventName) {\n return true;\n }\n\n const regExp = eventNamespacedRegExp(eventName);\n\n return eventData.eventName.match(regExp);\n })) {\n return true;\n }\n\n if (callback && callback !== eventData.callback) {\n return true;\n }\n\n if (delegate && delegate !== eventData.delegate) {\n return true;\n }\n\n if (capture !== null && capture !== eventData.capture) {\n return true;\n }\n\n node.removeEventListener(realEventName, eventData.realCallback, eventData.capture);\n\n return false;\n });\n\n if (!otherEvents.length) {\n delete nodeEvents[realEventName];\n }\n }\n\n if (!Object.keys(nodeEvents).length) {\n events.delete(node);\n }\n }\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n */\nexport function removeEventDelegate(selector, events, delegate, callback, { capture = null } = {}) {\n removeEvent(selector, events, callback, { capture, delegate });\n};\n\n/**\n * Trigger events on each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n */\nexport function triggerEvent(selector, events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n events = parseEvents(events);\n\n for (const event of events) {\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n for (const node of nodes) {\n node.dispatchEvent(eventData);\n }\n }\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(selector, event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const node = parseNode(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n return node.dispatchEvent(eventData);\n};\n","import { isElement, isFragment, isNode, isShadow, merge } from '@fr0st/core';\nimport { createFragment } from './create.js';\nimport { parseNodes } from './../filters.js';\nimport { animations as _animations, data as _data, events as _events, queues, styles } from './../vars.js';\nimport { addEvent } from './../events/event-handlers.js';\n\n/**\n * DOM Manipulation\n */\n\n/**\n * Clone each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {array} The cloned nodes.\n */\nexport function clone(selector, { deep = true, events = false, data = false, animations = false } = {}) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n });\n\n return nodes.map((node) => {\n const clone = node.cloneNode(deep);\n\n if (events || data || animations) {\n deepClone(node, clone, { deep, events, data, animations });\n }\n\n return clone;\n });\n};\n\n/**\n * Deep clone a single node.\n * @param {Node|HTMLElement|DocumentFragment} node The node.\n * @param {Node|HTMLElement|DocumentFragment} clone The clone.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n */\nfunction deepClone(node, clone, { deep = true, events = false, data = false, animations = false } = {}) {\n if (events && _events.has(node)) {\n const nodeEvents = _events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n clone,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n\n if (data && _data.has(node)) {\n const nodeData = _data.get(node);\n _data.set(clone, { ...nodeData });\n }\n\n if (animations && _animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n\n for (const animation of nodeAnimations) {\n animation.clone(clone);\n }\n }\n\n if (deep) {\n for (const [i, child] of node.childNodes.entries()) {\n const childClone = clone.childNodes.item(i);\n deepClone(child, childClone, { deep, events, data, animations });\n }\n }\n};\n\n/**\n * Detach each node from the DOM.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The detached nodes.\n */\nexport function detach(selector) {\n // DocumentFragment and ShadowRoot nodes can not be detached\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n for (const node of nodes) {\n node.remove();\n }\n\n return nodes;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function empty(selector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n const childNodes = merge([], node.childNodes);\n\n // Remove descendent elements\n for (const child of childNodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(child);\n }\n\n child.remove();\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n }\n};\n\n/**\n * Remove each node from the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function remove(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n for (const node of nodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(node);\n }\n\n // DocumentFragment and ShadowRoot nodes can not be removed\n if (isNode(node)) {\n node.remove();\n }\n }\n};\n\n/**\n * Remove all data for a single node.\n * @param {Node|HTMLElement|DocumentFragment|ShadowRoot} node The node.\n */\nexport function removeNode(node) {\n if (_events.has(node)) {\n const nodeEvents = _events.get(node);\n\n if ('remove' in nodeEvents) {\n const eventData = new CustomEvent('remove', {\n bubbles: false,\n cancelable: false,\n });\n\n node.dispatchEvent(eventData);\n }\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n for (const eventData of realEvents) {\n node.removeEventListener(realEventName, eventData.realCallback, { capture: eventData.capture });\n }\n }\n\n _events.delete(node);\n }\n\n if (queues.has(node)) {\n queues.delete(node);\n }\n\n if (_animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n for (const animation of nodeAnimations) {\n animation.stop();\n }\n }\n\n if (styles.has(node)) {\n styles.delete(node);\n }\n\n if (_data.has(node)) {\n _data.delete(node);\n }\n\n // Remove descendent elements\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n */\nexport function replaceAll(selector, otherSelector) {\n replaceWith(otherSelector, selector);\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n */\nexport function replaceWith(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be removed\n let nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n let others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n // Move nodes to a fragment so they don't get removed\n const fragment = createFragment();\n\n for (const other of others) {\n fragment.insertBefore(other, null);\n }\n\n others = merge([], fragment.childNodes);\n\n nodes = nodes.filter((node) =>\n !others.includes(node) &&\n !nodes.some((other) =>\n !other.isSameNode(node) &&\n other.contains(node),\n ),\n );\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n\n remove(nodes);\n};\n","import { camelCase, merge } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseData, parseDataset } from './../helpers.js';\nimport { removeNode } from './../manipulation/manipulation.js';\n\n/**\n * DOM Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [attribute] The attribute name.\n * @return {string|object} The attribute value, or an object containing attributes.\n */\nexport function getAttribute(selector, attribute) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (attribute) {\n return node.getAttribute(attribute);\n }\n\n return Object.fromEntries(\n merge([], node.attributes)\n .map((attribute) => [attribute.nodeName, attribute.nodeValue]),\n );\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(selector, key) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (key) {\n key = camelCase(key);\n\n return parseDataset(node.dataset[key]);\n }\n\n return Object.fromEntries(\n Object.entries(node.dataset)\n .map(([key, value]) => [key, parseDataset(value)]),\n );\n};\n\n/**\n * Get the HTML contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The HTML contents.\n */\nexport function getHTML(selector) {\n return getProperty(selector, 'innerHTML');\n};\n\n/**\n * Get a property value for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(selector, property) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node[property];\n};\n\n/**\n * Get the text contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The text contents.\n */\nexport function getText(selector) {\n return getProperty(selector, 'textContent');\n};\n\n/**\n * Get the value property of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The value.\n */\nexport function getValue(selector) {\n return getProperty(selector, 'value');\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n */\nexport function removeAttribute(selector, attribute) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.removeAttribute(attribute);\n }\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} key The dataset key.\n */\nexport function removeDataset(selector, key) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n key = camelCase(key);\n\n delete node.dataset[key];\n }\n};\n\n/**\n * Remove a property from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n */\nexport function removeProperty(selector, property) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n delete node[property];\n }\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n */\nexport function setAttribute(selector, attribute, value) {\n const nodes = parseNodes(selector);\n\n const attributes = parseData(attribute, value);\n\n for (const [key, value] of Object.entries(attributes)) {\n for (const node of nodes) {\n node.setAttribute(key, value);\n }\n }\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n */\nexport function setDataset(selector, key, value) {\n const nodes = parseNodes(selector);\n\n const dataset = parseData(key, value, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n for (const node of nodes) {\n node.dataset[key] = value;\n }\n }\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} html The HTML contents.\n */\nexport function setHTML(selector, html) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.innerHTML = html;\n }\n};\n\n/**\n * Set a property value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n */\nexport function setProperty(selector, property, value) {\n const nodes = parseNodes(selector);\n\n const properties = parseData(property, value);\n\n for (const [key, value] of Object.entries(properties)) {\n for (const node of nodes) {\n node[key] = value;\n }\n }\n};\n\n/**\n * Set the text contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} text The text contents.\n */\nexport function setText(selector, text) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.textContent = text;\n }\n};\n\n/**\n * Set the value property of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} value The value.\n */\nexport function setValue(selector, value) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.value = value;\n }\n};\n","import { parseNode, parseNodes } from './../filters.js';\nimport { parseData } from './../helpers.js';\nimport { data } from './../vars.js';\n\n/**\n * DOM Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneData(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const others = parseNodes(otherSelector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n setData(others, { ...nodeData });\n }\n};\n\n/**\n * Get custom data for the first node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(selector, key) {\n const node = parseNode(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n if (!node || !data.has(node)) {\n return;\n }\n\n const nodeData = data.get(node);\n\n return key ?\n nodeData[key] :\n nodeData;\n};\n\n/**\n * Remove custom data from each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n */\nexport function removeData(selector, key) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n\n if (key) {\n delete nodeData[key];\n }\n\n if (!key || !Object.keys(nodeData).length) {\n data.delete(node);\n }\n }\n};\n\n/**\n * Set custom data for each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n */\nexport function setData(selector, key, value) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const newData = parseData(key, value);\n\n for (const node of nodes) {\n if (!data.has(node)) {\n data.set(node, {});\n }\n\n const nodeData = data.get(node);\n\n Object.assign(nodeData, newData);\n }\n};\n","import { isNumeric, kebabCase } from '@fr0st/core';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\nimport { styles } from './../vars.js';\n\n/**\n * DOM Styles\n */\n\n/**\n * Add classes to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function addClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.add(...classes);\n }\n};\n\n/**\n * Get computed CSS style value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (!styles.has(node)) {\n styles.set(\n node,\n getWindow().getComputedStyle(node),\n );\n }\n\n const nodeStyles = styles.get(node);\n\n if (!style) {\n return { ...nodeStyles };\n }\n\n style = kebabCase(style);\n\n return nodeStyles.getPropertyValue(style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (style) {\n style = kebabCase(style);\n\n return node.style[style];\n }\n\n const styles = {};\n\n for (const style of node.style) {\n styles[style] = node.style[style];\n }\n\n return styles;\n};\n\n/**\n * Hide each node from display.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function hide(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', 'none');\n }\n};\n\n/**\n * Remove classes from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function removeClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.remove(...classes);\n }\n};\n\n/**\n * Set style properties for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n */\nexport function setStyle(selector, style, value, { important = false } = {}) {\n const nodes = parseNodes(selector);\n\n const styles = parseData(style, value);\n\n for (let [style, value] of Object.entries(styles)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n for (const node of nodes) {\n node.style.setProperty(\n style,\n value,\n important ?\n 'important' :\n '',\n );\n }\n }\n};\n\n/**\n * Display each hidden node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function show(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', '');\n }\n};\n\n/**\n * Toggle the visibility of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function toggle(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty(\n 'display',\n node.style.display === 'none' ?\n '' :\n 'none',\n );\n }\n};\n\n/**\n * Toggle classes for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function toggleClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n for (const className of classes) {\n node.classList.toggle(className);\n }\n }\n};\n","import { clampPercent, dist } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { getContext, getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center(selector, { offset = false } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n return {\n x: nodeBox.left + nodeBox.width / 2,\n y: nodeBox.top + nodeBox.height / 2,\n };\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} containerSelector The container node, or a query selector string.\n */\nexport function constrain(selector, containerSelector) {\n const containerBox = rect(containerSelector);\n\n if (!containerBox) {\n return;\n }\n\n const nodes = parseNodes(selector);\n\n const context = getContext();\n const window = getWindow();\n const getScrollX = (_) => context.documentElement.scrollHeight > window.outerHeight;\n const getScrollY = (_) => context.documentElement.scrollWidth > window.outerWidth;\n\n const preScrollX = getScrollX();\n const preScrollY = getScrollY();\n\n for (const node of nodes) {\n const nodeBox = rect(node);\n\n if (nodeBox.height > containerBox.height) {\n node.style.setProperty('height', `${containerBox.height}px`);\n }\n\n if (nodeBox.width > containerBox.width) {\n node.style.setProperty('width', `${containerBox.width}px`);\n }\n\n let leftOffset;\n if (nodeBox.left - containerBox.left < 0) {\n leftOffset = nodeBox.left - containerBox.left;\n } else if (nodeBox.right - containerBox.right > 0) {\n leftOffset = nodeBox.right - containerBox.right;\n }\n\n if (leftOffset) {\n const oldLeft = css(node, 'left');\n const trueLeft = oldLeft && oldLeft !== 'auto' ? parseFloat(oldLeft) : 0;\n node.style.setProperty('left', `${trueLeft - leftOffset}px`);\n }\n\n let topOffset;\n if (nodeBox.top - containerBox.top < 0) {\n topOffset = nodeBox.top - containerBox.top;\n } else if (nodeBox.bottom - containerBox.bottom > 0) {\n topOffset = nodeBox.bottom - containerBox.bottom;\n }\n\n if (topOffset) {\n const oldTop = css(node, 'top');\n const trueTop = oldTop && oldTop !== 'auto' ? parseFloat(oldTop) : 0;\n node.style.setProperty('top', `${trueTop - topOffset}px`);\n }\n\n if (css(node, 'position') === 'static') {\n node.style.setProperty('position', 'relative');\n }\n }\n\n const postScrollX = getScrollX();\n const postScrollY = getScrollY();\n\n if (preScrollX !== postScrollX || preScrollY !== postScrollY) {\n constrain(nodes, containerSelector);\n }\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the element.\n */\nexport function distTo(selector, x, y, { offset = false } = {}) {\n const nodeCenter = center(selector, { offset });\n\n if (!nodeCenter) {\n return;\n }\n\n return dist(nodeCenter.x, nodeCenter.y, x, y);\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return distTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestTo(selector, x, y, { offset = false } = {}) {\n let closest;\n let closestDistance = Number.MAX_VALUE;\n\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const dist = distTo(node, x, y, { offset });\n if (dist && dist < closestDistance) {\n closestDistance = dist;\n closest = node;\n }\n }\n\n return closest;\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return nearestTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(selector, x, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (x - nodeBox.left) /\n nodeBox.width *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(selector, y, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (y - nodeBox.top) /\n nodeBox.height *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the X and Y co-ordinates.\n */\nexport function position(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = {\n x: node.offsetLeft,\n y: node.offsetTop,\n };\n\n if (offset) {\n let offsetParent = node;\n\n while (offsetParent = offsetParent.offsetParent) {\n result.x += offsetParent.offsetLeft;\n result.y += offsetParent.offsetTop;\n }\n }\n\n return result;\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = node.getBoundingClientRect();\n\n if (offset) {\n const window = getWindow();\n result.x += window.scrollX;\n result.y += window.scrollY;\n }\n\n return result;\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll X position.\n */\nexport function getScrollX(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollX;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollLeft;\n }\n\n return node.scrollLeft;\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollY;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollTop;\n }\n\n return node.scrollTop;\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n */\nexport function setScroll(selector, x, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n }\n};\n\n/**\n * Scroll each node to an X position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n */\nexport function setScrollX(selector, x) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, node.scrollY);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n } else {\n node.scrollLeft = x;\n }\n }\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The scroll Y position.\n */\nexport function setScrollY(selector, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(node.scrollX, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollTop = y;\n }\n }\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { parseNode } from './../filters.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './../vars.js';\n\n/**\n * DOM Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerHeight :\n node.innerHeight;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollHeight;\n }\n\n let result = node.clientHeight;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-top'));\n result -= parseInt(css(node, 'padding-bottom'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-top-width'));\n result += parseInt(css(node, 'border-bottom-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-top'));\n result += parseInt(css(node, 'margin-bottom'));\n }\n\n return result;\n};\n\n/**\n * Get the computed width of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerWidth :\n node.innerWidth;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollWidth;\n }\n\n let result = node.clientWidth;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-left'));\n result -= parseInt(css(node, 'padding-right'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-left-width'));\n result += parseInt(css(node, 'border-right-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-left'));\n result += parseInt(css(node, 'margin-right'));\n }\n\n return result;\n};\n","import { getContext, getWindow } from './../config.js';\nimport { parseNode } from './../filters.js';\n\n/**\n * DOM Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function blur(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.blur();\n};\n\n/**\n * Trigger a click event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function click(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.click();\n};\n\n/**\n * Trigger a focus event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function focus(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.focus();\n};\n\n/**\n * Add a function to the ready queue.\n * @param {DOM~eventCallback} callback The callback to execute.\n */\nexport function ready(callback) {\n if (getContext().readyState === 'complete') {\n callback();\n } else {\n getWindow().addEventListener('DOMContentLoaded', callback, { once: true });\n }\n};\n","import { clone } from './manipulation.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Move\n */\n\n/**\n * Insert each other node after each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function after(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node.nextSibling);\n }\n }\n};\n\n/**\n * Append each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function append(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n }\n};\n\n/**\n * Append each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function appendTo(selector, otherSelector) {\n append(otherSelector, selector);\n};\n\n/**\n * Insert each other node before each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function before(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n};\n\n/**\n * Insert each node after each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertAfter(selector, otherSelector) {\n after(otherSelector, selector);\n};\n\n/**\n * Insert each node before each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertBefore(selector, otherSelector) {\n before(otherSelector, selector);\n};\n\n/**\n * Prepend each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function prepend(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const firstChild = node.firstChild;\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, firstChild);\n }\n }\n};\n\n/**\n * Prepend each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function prependTo(selector, otherSelector) {\n prepend(otherSelector, selector);\n};\n","import { isFragment, merge } from '@fr0st/core';\nimport { clone, remove } from './manipulation.js';\nimport { parseFilter, parseNodes } from './../filters.js';\n\n/**\n * DOM Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n */\nexport function unwrap(selector, nodeFilter) {\n // DocumentFragment and ShadowRoot nodes can not be unwrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n nodeFilter = parseFilter(nodeFilter);\n\n const parents = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n if (parents.includes(parent)) {\n continue;\n }\n\n if (!nodeFilter(parent)) {\n continue;\n }\n\n parents.push(parent);\n }\n\n for (const parent of parents) {\n const outerParent = parent.parentNode;\n\n if (!outerParent) {\n continue;\n }\n\n const children = merge([], parent.childNodes);\n\n for (const child of children) {\n outerParent.insertBefore(child, parent);\n }\n }\n\n remove(parents);\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrap(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapAll(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstNode = nodes[0];\n\n if (!firstNode) {\n return;\n }\n\n const parent = firstNode.parentNode;\n\n if (!parent) {\n return;\n }\n\n const firstClone = clones[0];\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, firstNode);\n }\n\n for (const node of nodes) {\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapInner(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const children = merge([], node.childNodes);\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n\n for (const child of children) {\n deepest.insertBefore(child, null);\n }\n }\n};\n","import { parseNodes } from './../filters.js';\nimport { queues } from './../vars.js';\n\n/**\n * DOM Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName] The name of the queue to use.\n */\nexport function clearQueue(selector, { queueName = null } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n continue;\n }\n\n const queue = queues.get(node);\n\n if (queueName) {\n delete queue[queueName];\n }\n\n if (!queueName || !Object.keys(queue).length) {\n queues.delete(node);\n }\n }\n};\n\n/**\n * Run the next callback for a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nfunction dequeue(node, { queueName = 'default' } = {}) {\n const queue = queues.get(node);\n\n if (!queue || !(queueName in queue)) {\n return;\n }\n\n const next = queue[queueName].shift();\n\n if (!next) {\n queues.delete(node);\n return;\n }\n\n Promise.resolve(next(node))\n .then((_) => {\n dequeue(node, { queueName });\n }).catch((_) => {\n queues.delete(node);\n });\n};\n\n/**\n * Queue a callback on each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nexport function queue(selector, callback, { queueName = 'default' } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n queues.set(node, {});\n }\n\n const queue = queues.get(node);\n const runningQueue = queueName in queue;\n\n if (!runningQueue) {\n queue[queueName] = [\n (_) => new Promise((resolve) => {\n setTimeout(resolve, 1);\n }),\n ];\n }\n\n queue[queueName].push(callback);\n\n if (!runningQueue) {\n dequeue(node, { queueName });\n }\n }\n};\n","import { isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function connected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) => node.isConnected);\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function equal(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isEqualNode(other),\n ),\n );\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function filter(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function filterOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find(nodeFilter) || null;\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function fixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).filter((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Return all hidden nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function hidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function not(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node, index) => !nodeFilter(node, index));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function notOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find((node, index) => !nodeFilter(node, index)) || null;\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function same(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isSameNode(other),\n ),\n );\n};\n\n/**\n * Return all visible nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function visible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n\n/**\n * Return all nodes with an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n animations.has(node),\n );\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {array} The filtered nodes.\n */\nexport function withAttribute(selector, attribute) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasAttribute(attribute),\n );\n};\n\n/**\n * Return all nodes with child elements.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter((node) =>\n !!node.childElementCount,\n );\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {array} The filtered nodes.\n */\nexport function withClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .filter((node) =>\n classes.some((className) =>\n node.classList.contains(className),\n ),\n );\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSTransition(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {array} The filtered nodes.\n */\nexport function withData(selector, key) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Return all nodes with a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function withDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {array} The filtered nodes.\n */\nexport function withProperty(selector, property) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasOwnProperty(property),\n );\n};\n","import { isElement, merge, unique } from '@fr0st/core';\nimport { sort } from './utility.js';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Selection\n */\n\n/**\n * Insert each node after the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function afterSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n range.collapse();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Insert each node before the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function beforeSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Extract selected nodes from the DOM.\n * @return {array} The selected nodes.\n */\nexport function extractSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const fragment = range.extractContents();\n\n return merge([], fragment.childNodes);\n};\n\n/**\n * Return all selected nodes.\n * @return {array} The selected nodes.\n */\nexport function getSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n const nodes = merge([], range.commonAncestorContainer.querySelectorAll('*'));\n\n if (!nodes.length) {\n return [range.commonAncestorContainer];\n }\n\n if (nodes.length === 1) {\n return nodes;\n }\n\n const startContainer = range.startContainer;\n const endContainer = range.endContainer;\n const start = isElement(startContainer) ?\n startContainer :\n startContainer.parentNode;\n const end = isElement(endContainer) ?\n endContainer :\n endContainer.parentNode;\n\n const selectedNodes = nodes.slice(\n nodes.indexOf(start),\n nodes.indexOf(end) + 1,\n );\n const results = [];\n\n let lastNode;\n for (const node of selectedNodes) {\n if (lastNode && lastNode.contains(node)) {\n continue;\n }\n\n lastNode = node;\n results.push(node);\n }\n\n return results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Create a selection on the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function select(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (node && 'select' in node) {\n node.select();\n return;\n }\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n\n if (!node) {\n return;\n }\n\n const range = createRange();\n range.selectNode(node);\n selection.addRange(range);\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function selectAll(selector) {\n const nodes = sort(selector);\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount) {\n selection.removeAllRanges();\n }\n\n if (!nodes.length) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length == 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n selection.addRange(range);\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function wrapSelection(selector) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n fragment: true,\n html: true,\n });\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const node = nodes.slice().shift();\n const deepest = merge([], node.querySelectorAll('*')).find((node) => !node.childElementCount) || node;\n\n const fragment = range.extractContents();\n\n const childNodes = merge([], fragment.childNodes);\n\n for (const child of childNodes) {\n deepest.insertBefore(child, null);\n }\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n","import { camelCase, isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation(selector) {\n return parseNodes(selector)\n .some((node) => animations.has(node));\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(selector, attribute) {\n return parseNodes(selector)\n .some((node) => node.hasAttribute(attribute));\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some((node) => node.childElementCount);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .some((node) =>\n classes.some((className) => node.classList.contains(className)),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(selector, key) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).some((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(selector, key) {\n key = camelCase(key);\n\n return parseNodes(selector)\n .some((node) => !!node.dataset[key]);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment(selector) {\n return parseNodes(selector)\n .some((node) => node.content);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(selector, property) {\n return parseNodes(selector)\n .some((node) => node.hasOwnProperty(property));\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow(selector) {\n return parseNodes(selector)\n .some((node) => node.shadowRoot);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) => node.isConnected);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isEqualNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes or a parent of any of the nodes is \"fixed\".\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).some((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isSameNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n","import QuerySet from './query-set.js';\nimport { animate, stop } from './animation/animate.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus } from './events/events.js';\nimport { attachShadow } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { clearQueue, delay, queue } from './queue/queue.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { afterSelection, beforeSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { add, eq, first, index, indexOf, last, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nconst proto = QuerySet.prototype;\n\nproto.add = add;\nproto.addClass = addClass;\nproto.addEvent = addEvent;\nproto.addEventDelegate = addEventDelegate;\nproto.addEventDelegateOnce = addEventDelegateOnce;\nproto.addEventOnce = addEventOnce;\nproto.after = after;\nproto.afterSelection = afterSelection;\nproto.animate = animate;\nproto.append = append;\nproto.appendTo = appendTo;\nproto.attachShadow = attachShadow;\nproto.before = before;\nproto.beforeSelection = beforeSelection;\nproto.blur = blur;\nproto.center = center;\nproto.child = child;\nproto.children = children;\nproto.clearQueue = clearQueue;\nproto.click = click;\nproto.clone = clone;\nproto.cloneData = cloneData;\nproto.cloneEvents = cloneEvents;\nproto.closest = closest;\nproto.commonAncestor = commonAncestor;\nproto.connected = connected;\nproto.constrain = constrain;\nproto.contents = contents;\nproto.css = css;\nproto.delay = delay;\nproto.detach = detach;\nproto.distTo = distTo;\nproto.distToNode = distToNode;\nproto.dropIn = dropIn;\nproto.dropOut = dropOut;\nproto.empty = empty;\nproto.eq = eq;\nproto.equal = equal;\nproto.fadeIn = fadeIn;\nproto.fadeOut = fadeOut;\nproto.filter = filter;\nproto.filterOne = filterOne;\nproto.find = find;\nproto.findByClass = findByClass;\nproto.findById = findById;\nproto.findByTag = findByTag;\nproto.findOne = findOne;\nproto.findOneByClass = findOneByClass;\nproto.findOneById = findOneById;\nproto.findOneByTag = findOneByTag;\nproto.first = first;\nproto.fixed = fixed;\nproto.focus = focus;\nproto.fragment = fragment;\nproto.getAttribute = getAttribute;\nproto.getData = getData;\nproto.getDataset = getDataset;\nproto.getHTML = getHTML;\nproto.getProperty = getProperty;\nproto.getScrollX = getScrollX;\nproto.getScrollY = getScrollY;\nproto.getStyle = getStyle;\nproto.getText = getText;\nproto.getValue = getValue;\nproto.hasAnimation = hasAnimation;\nproto.hasAttribute = hasAttribute;\nproto.hasChildren = hasChildren;\nproto.hasClass = hasClass;\nproto.hasCSSAnimation = hasCSSAnimation;\nproto.hasCSSTransition = hasCSSTransition;\nproto.hasData = hasData;\nproto.hasDataset = hasDataset;\nproto.hasDescendent = hasDescendent;\nproto.hasFragment = hasFragment;\nproto.hasProperty = hasProperty;\nproto.hasShadow = hasShadow;\nproto.height = height;\nproto.hidden = hidden;\nproto.hide = hide;\nproto.index = index;\nproto.indexOf = indexOf;\nproto.insertAfter = insertAfter;\nproto.insertBefore = insertBefore;\nproto.is = is;\nproto.isConnected = isConnected;\nproto.isEqual = isEqual;\nproto.isFixed = isFixed;\nproto.isHidden = isHidden;\nproto.isSame = isSame;\nproto.isVisible = isVisible;\nproto.last = last;\nproto.nearestTo = nearestTo;\nproto.nearestToNode = nearestToNode;\nproto.next = next;\nproto.nextAll = nextAll;\nproto.normalize = normalize;\nproto.not = not;\nproto.notOne = notOne;\nproto.offsetParent = offsetParent;\nproto.parent = parent;\nproto.parents = parents;\nproto.percentX = percentX;\nproto.percentY = percentY;\nproto.position = position;\nproto.prepend = prepend;\nproto.prependTo = prependTo;\nproto.prev = prev;\nproto.prevAll = prevAll;\nproto.queue = queue;\nproto.rect = rect;\nproto.remove = remove;\nproto.removeAttribute = removeAttribute;\nproto.removeClass = removeClass;\nproto.removeData = removeData;\nproto.removeDataset = removeDataset;\nproto.removeEvent = removeEvent;\nproto.removeEventDelegate = removeEventDelegate;\nproto.removeProperty = removeProperty;\nproto.replaceAll = replaceAll;\nproto.replaceWith = replaceWith;\nproto.rotateIn = rotateIn;\nproto.rotateOut = rotateOut;\nproto.same = same;\nproto.select = select;\nproto.selectAll = selectAll;\nproto.serialize = serialize;\nproto.serializeArray = serializeArray;\nproto.setAttribute = setAttribute;\nproto.setData = setData;\nproto.setDataset = setDataset;\nproto.setHTML = setHTML;\nproto.setProperty = setProperty;\nproto.setScroll = setScroll;\nproto.setScrollX = setScrollX;\nproto.setScrollY = setScrollY;\nproto.setStyle = setStyle;\nproto.setText = setText;\nproto.setValue = setValue;\nproto.shadow = shadow;\nproto.show = show;\nproto.siblings = siblings;\nproto.slideIn = slideIn;\nproto.slideOut = slideOut;\nproto.sort = sort;\nproto.squeezeIn = squeezeIn;\nproto.squeezeOut = squeezeOut;\nproto.stop = stop;\nproto.tagName = tagName;\nproto.toggle = toggle;\nproto.toggleClass = toggleClass;\nproto.triggerEvent = triggerEvent;\nproto.triggerOne = triggerOne;\nproto.unwrap = unwrap;\nproto.visible = visible;\nproto.width = width;\nproto.withAnimation = withAnimation;\nproto.withAttribute = withAttribute;\nproto.withChildren = withChildren;\nproto.withClass = withClass;\nproto.withCSSAnimation = withCSSAnimation;\nproto.withCSSTransition = withCSSTransition;\nproto.withData = withData;\nproto.withDescendent = withDescendent;\nproto.withProperty = withProperty;\nproto.wrap = wrap;\nproto.wrapAll = wrapAll;\nproto.wrapInner = wrapInner;\nproto.wrapSelection = wrapSelection;\n\nexport default QuerySet;\n","import { isFunction } from '@fr0st/core';\nimport QuerySet from './proto.js';\nimport { getContext } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { ready } from './../events/events.js';\n\n/**\n * DOM Query\n */\n\n/**\n * Add a function to the ready queue or return a QuerySet.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet|function} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function query(selector, context = null) {\n if (isFunction(selector)) {\n return ready(selector);\n }\n\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(nodes);\n};\n\n/**\n * Return a QuerySet for the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function queryOne(selector, context = null) {\n const node = parseNode(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(node ? [node] : []);\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Scripts\n */\n\n/**\n * Load and execute a JavaScript file.\n * @param {string} url The URL of the script.\n * @param {object} [attributes] Additional attributes to set on the script tag.\n * @param {object} [options] The options for loading the script.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the script is loaded, or rejects on failure.\n */\nexport function loadScript(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n src: url,\n type: 'text/javascript',\n ...attributes,\n };\n\n if (!('async' in attributes)) {\n attributes.defer = '';\n }\n\n if (!cache) {\n attributes.src = appendQueryString(attributes.src, '_', Date.now());\n }\n\n const script = context.createElement('script');\n\n for (const [key, value] of Object.entries(attributes)) {\n script.setAttribute(key, value);\n }\n\n context.head.appendChild(script);\n\n return new Promise((resolve, reject) => {\n script.onload = (_) => resolve();\n script.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Load and executes multiple JavaScript files (in order).\n * @param {array} urls An array of script URLs or attribute objects.\n * @param {object} [options] The options for loading the scripts.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadScripts(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadScript(url, null, { cache, context }) :\n loadScript(null, url, { cache, context }),\n ),\n );\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Styles\n */\n\n/**\n * Import a CSS Stylesheet file.\n * @param {string} url The URL of the stylesheet.\n * @param {object} [attributes] Additional attributes to set on the style tag.\n * @param {object} [options] The options for loading the stylesheet.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the stylesheet is loaded, or rejects on failure.\n */\nexport function loadStyle(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n href: url,\n rel: 'stylesheet',\n ...attributes,\n };\n\n if (!cache) {\n attributes.href = appendQueryString(attributes.href, '_', Date.now());\n }\n\n const link = context.createElement('link');\n\n for (const [key, value] of Object.entries(attributes)) {\n link.setAttribute(key, value);\n }\n\n context.head.appendChild(link);\n\n return new Promise((resolve, reject) => {\n link.onload = (_) => resolve();\n link.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Import multiple CSS Stylesheet files.\n * @param {array} urls An array of stylesheet URLs or attribute objects.\n * @param {object} [options] The options for loading the stylesheets.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadStyles(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadStyle(url, null, { cache, context }) :\n loadStyle(null, url, { cache, context }),\n ),\n );\n};\n","import { merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { allowedTags as _allowedTags } from './../vars.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Sanitize a HTML string.\n * @param {string} html The input HTML string.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n * @return {string} The sanitized HTML string.\n */\nexport function sanitize(html, allowedTags = _allowedTags) {\n const template = getContext().createElement('template');\n template.innerHTML = html;\n const fragment = template.content;\n const childNodes = merge([], fragment.children);\n\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n\n return template.innerHTML;\n};\n\n/**\n * Sanitize a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n */\nfunction sanitizeNode(node, allowedTags = _allowedTags) {\n // check node\n const name = node.tagName.toLowerCase();\n\n if (!(name in allowedTags)) {\n node.remove();\n return;\n }\n\n // check node attributes\n const allowedAttributes = [];\n\n if ('*' in allowedTags) {\n allowedAttributes.push(...allowedTags['*']);\n }\n\n allowedAttributes.push(...allowedTags[name]);\n\n const attributes = merge([], node.attributes);\n\n for (const attribute of attributes) {\n if (!allowedAttributes.find((test) => attribute.nodeName.match(test))) {\n node.removeAttribute(attribute.nodeName);\n }\n }\n\n // check children\n const childNodes = merge([], node.children);\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n};\n","import { merge, unique } from '@fr0st/core';\nimport { query } from './../query.js';\nimport QuerySet from './../query-set.js';\nimport { index as _index, indexOf as _indexOf, normalize as _normalize, serialize as _serialize, serializeArray as _serializeArray, sort as _sort, tagName as _tagName } from './../../utility/utility.js';\n\n/**\n * QuerySet Utility\n */\n\n/**\n * Merge with new nodes and sort the results.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The QuerySet object.\n */\nexport function add(selector, context = null) {\n const nodes = _sort(unique(merge([], this.get(), query(selector, context).get())));\n\n return new QuerySet(nodes);\n};\n\n/**\n * Reduce the set of nodes to the one at the specified index.\n * @param {number} index The index of the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function eq(index) {\n const node = this.get(index);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Reduce the set of nodes to the first.\n * @return {QuerySet} The QuerySet object.\n */\nexport function first() {\n return this.eq(0);\n};\n\n/**\n * Get the index of the first node relative to it's parent node.\n * @return {number} The index.\n */\nexport function index() {\n return _index(this);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(nodeFilter) {\n return _indexOf(this, nodeFilter);\n};\n\n/**\n * Reduce the set of nodes to the last.\n * @return {QuerySet} The QuerySet object.\n */\nexport function last() {\n return this.eq(-1);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function normalize() {\n _normalize(this);\n\n return this;\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @return {string} The serialized string.\n */\nexport function serialize() {\n return _serialize(this);\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @return {array} The serialized array.\n */\nexport function serializeArray() {\n return _serializeArray(this);\n};\n\n/**\n * Sort nodes by their position in the document.\n * @return {QuerySet} The QuerySet object.\n */\nexport function sort() {\n return new QuerySet(_sort(this));\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName() {\n return _tagName(this);\n};\n","import { addClass as _addClass, css as _css, getStyle as _getStyle, hide as _hide, removeClass as _removeClass, setStyle as _setStyle, show as _show, toggle as _toggle, toggleClass as _toggleClass } from './../../attributes/styles.js';\n\n/**\n * QuerySet Styles\n */\n\n/**\n * Add classes to each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addClass(...classes) {\n _addClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Get computed CSS style values for the first node.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(style) {\n return _css(this, style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(style) {\n return _getStyle(this, style);\n};\n\n/**\n * Hide each node from display.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hide() {\n _hide(this);\n\n return this;\n};\n\n/**\n * Remove classes from each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeClass(...classes) {\n _removeClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Set style properties for each node.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setStyle(style, value, { important = false } = {}) {\n _setStyle(this, style, value, { important });\n\n return this;\n};\n\n/**\n * Display each hidden node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function show() {\n _show(this);\n\n return this;\n};\n\n/**\n * Toggle the visibility of each node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggle() {\n _toggle(this);\n\n return this;\n};\n\n/**\n * Toggle classes for each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggleClass(...classes) {\n _toggleClass(this, ...classes);\n\n return this;\n};\n","import { addEvent as _addEvent, addEventDelegate as _addEventDelegate, addEventDelegateOnce as _addEventDelegateOnce, addEventOnce as _addEventOnce, cloneEvents as _cloneEvents, removeEvent as _removeEvent, removeEventDelegate as _removeEventDelegate, triggerEvent as _triggerEvent, triggerOne as _triggerOne } from './../../events/event-handlers.js';\n\n/**\n * QuerySet Event Handlers\n */\n\n/**\n * Add an event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEvent(events, callback, { capture = false, passive = false } = {}) {\n _addEvent(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegate(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegate(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegateOnce(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegateOnce(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventOnce(events, callback, { capture = false, passive = false } = {}) {\n _addEventOnce(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneEvents(otherSelector) {\n _cloneEvents(this, otherSelector);\n\n return this;\n};\n\n/**\n * Remove events from each node.\n * @param {string} [events] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEvent(events, callback, { capture = null } = {}) {\n _removeEvent(this, events, callback, { capture });\n\n return this;\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEventDelegate(events, delegate, callback, { capture = null } = {}) {\n _removeEventDelegate(this, events, delegate, callback, { capture });\n\n return this;\n};\n\n/**\n * Trigger events on each node.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {QuerySet} The QuerySet object.\n */\nexport function triggerEvent(events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n _triggerEvent(this, events, { data, detail, bubbles, cancelable });\n\n return this;\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n return _triggerOne(this, event, { data, detail, bubbles, cancelable });\n};\n","import { after as _after, append as _append, appendTo as _appendTo, before as _before, insertAfter as _insertAfter, insertBefore as _insertBefore, prepend as _prepend, prependTo as _prependTo } from './../../manipulation/move.js';\n\n/**\n * QuerySet Move\n */\n\n/**\n * Insert each other node after the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function after(otherSelector) {\n _after(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function append(otherSelector) {\n _append(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function appendTo(otherSelector) {\n _appendTo(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each other node before the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function before(otherSelector) {\n _before(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node after the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertAfter(otherSelector) {\n _insertAfter(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node before the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertBefore(otherSelector) {\n _insertBefore(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prepend(otherSelector) {\n _prepend(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prependTo(otherSelector) {\n _prependTo(this, otherSelector);\n\n return this;\n};\n","import { afterSelection as _afterSelection, beforeSelection as _beforeSelection, select as _select, selectAll as _selectAll, wrapSelection as _wrapSelection } from './../../utility/selection.js';\n\n/**\n * QuerySet Selection\n */\n\n/**\n * Insert each node after the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function afterSelection() {\n _afterSelection(this);\n\n return this;\n};\n\n/**\n * Insert each node before the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function beforeSelection() {\n _beforeSelection(this);\n\n return this;\n};\n\n/**\n * Create a selection on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function select() {\n _select(this);\n\n return this;\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function selectAll() {\n _selectAll(this);\n\n return this;\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapSelection() {\n _wrapSelection(this);\n\n return this;\n};\n","import { animate as _animate, stop as _stop } from './../../animation/animate.js';\n\n/**\n * QuerySet Animate\n */\n\n/**\n * Add an animation to the queue for each node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function animate(callback, { queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _animate(node, callback, options),\n { queueName },\n );\n};\n\n/**\n * Stop all animations and clear the queue of each node.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n * @return {QuerySet} The QuerySet object.\n */\nexport function stop({ finish = true } = {}) {\n this.clearQueue();\n _stop(this, { finish });\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { attachShadow as _attachShadow } from './../../manipulation/create.js';\n\n/**\n * QuerySet Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {Boolean} [open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function attachShadow({ open = true } = {}) {\n const shadow = _attachShadow(this, { open });\n\n return new QuerySet(shadow ? [shadow] : []);\n}\n","import { blur as _blur, click as _click, focus as _focus } from './../../events/events.js';\n\n/**\n * QuerySet Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function blur() {\n _blur(this);\n\n return this;\n};\n\n/**\n * Trigger a click event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function click() {\n _click(this);\n\n return this;\n};\n\n/**\n * Trigger a focus event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function focus() {\n _focus(this);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { center as _center, constrain as _constrain, distTo as _distTo, distToNode as _distToNode, nearestTo as _nearestTo, nearestToNode as _nearestToNode, percentX as _percentX, percentY as _percentY, position as _position, rect as _rect } from './../../attributes/position.js';\n\n/**\n * QuerySet Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center({ offset = false } = {}) {\n return _center(this, { offset });\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} container The container node, or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function constrain(container) {\n _constrain(this, container);\n\n return this;\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the node.\n */\nexport function distTo(x, y, { offset = false } = {}) {\n return _distTo(this, x, y, { offset });\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(otherSelector) {\n return _distToNode(this, otherSelector);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestTo(x, y, { offset = false } = {}) {\n const node = _nearestTo(this, x, y, { offset });\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestToNode(otherSelector) {\n const node = _nearestToNode(this, otherSelector);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(x, { offset = false, clamp = true } = {}) {\n return _percentX(this, x, { offset, clamp });\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(y, { offset = false, clamp = true } = {}) {\n return _percentY(this, y, { offset, clamp });\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function position({ offset = false } = {}) {\n return _position(this, { offset });\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect({ offset = false } = {}) {\n return _rect(this, { offset });\n};\n","import QuerySet from './../query-set.js';\nimport { child as _child, children as _children, closest as _closest, commonAncestor as _commonAncestor, contents as _contents, fragment as _fragment, next as _next, nextAll as _nextAll, offsetParent as _offsetParent, parent as _parent, parents as _parents, prev as _prev, prevAll as _prevAll, shadow as _shadow, siblings as _siblings } from './../../traversal/traversal.js';\n\n/**\n * QuerySet Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function child(nodeFilter) {\n return new QuerySet(_child(this, nodeFilter));\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function children(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_children(this, nodeFilter, { elementsOnly }));\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function closest(nodeFilter, limitFilter) {\n return new QuerySet(_closest(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function commonAncestor() {\n const node = _commonAncestor(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function contents() {\n return new QuerySet(_contents(this));\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fragment() {\n const node = _fragment(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function next(nodeFilter) {\n return new QuerySet(_next(this, nodeFilter));\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function nextAll(nodeFilter, limitFilter) {\n return new QuerySet(_nextAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function offsetParent() {\n const node = _offsetParent(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parent(nodeFilter) {\n return new QuerySet(_parent(this, nodeFilter));\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parents(nodeFilter, limitFilter) {\n return new QuerySet(_parents(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prev(nodeFilter) {\n return new QuerySet(_prev(this, nodeFilter));\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prevAll(nodeFilter, limitFilter) {\n return new QuerySet(_prevAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function shadow() {\n const node = _shadow(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [elementsOnly=true] Whether to only return element nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function siblings(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_siblings(this, nodeFilter, { elementsOnly }));\n};\n","import { clearQueue as _clearQueue, queue as _queue } from './../../queue/queue.js';\n\n/**\n * QuerySet Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to clear.\n * @return {QuerySet} The QuerySet object.\n */\nexport function clearQueue({ queueName = 'default' } = {}) {\n _clearQueue(this, { queueName });\n\n return this;\n};\n\n/**\n * Delay execution of subsequent items in the queue for each node.\n * @param {number} duration The number of milliseconds to delay execution by.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function delay(duration, { queueName = 'default' } = {}) {\n return this.queue((_) =>\n new Promise((resolve) =>\n setTimeout(resolve, duration),\n ),\n { queueName },\n );\n};\n\n/**\n * Queue a callback on each node.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function queue(callback, { queueName = 'default' } = {}) {\n _queue(this, callback, { queueName });\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { clone as _clone, detach as _detach, empty as _empty, remove as _remove, replaceAll as _replaceAll, replaceWith as _replaceWith } from './../../manipulation/manipulation.js';\n\n/**\n * QuerySet Manipulation\n */\n\n/**\n * Clone each node.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function clone(options) {\n const clones = _clone(this, options);\n\n return new QuerySet(clones);\n};\n\n/**\n * Detach each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function detach() {\n _detach(this);\n\n return this;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function empty() {\n _empty(this);\n\n return this;\n};\n\n/**\n * Remove each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function remove() {\n _remove(this);\n\n return this;\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceAll(otherSelector) {\n _replaceAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceWith(otherSelector) {\n _replaceWith(this, otherSelector);\n\n return this;\n};\n","import { cloneData as _cloneData, getData as _getData, removeData as _removeData, setData as _setData } from './../../attributes/data.js';\n\n/**\n * QuerySet Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneData(otherSelector) {\n _cloneData(this, otherSelector);\n\n return this;\n};\n\n/**\n * Get custom data for the first node.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(key) {\n return _getData(this, key);\n};\n\n/**\n * Remove custom data from each node.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeData(key) {\n _removeData(this, key);\n\n return this;\n};\n\n/**\n * Set custom data for each node.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setData(key, value) {\n _setData(this, key, value);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { connected as _connected, equal as _equal, filter as _filter, filterOne as _filterOne, fixed as _fixed, hidden as _hidden, not as _not, notOne as _notOne, same as _same, visible as _visible, withAnimation as _withAnimation, withAttribute as _withAttribute, withChildren as _withChildren, withClass as _withClass, withCSSAnimation as _withCSSAnimation, withCSSTransition as _withCSSTransition, withData as _withData, withDescendent as _withDescendent, withProperty as _withProperty } from './../../traversal/filter.js';\n\n/**\n * QuerySet Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function connected() {\n return new QuerySet(_connected(this));\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function equal(otherSelector) {\n return new QuerySet(_equal(this, otherSelector));\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filter(nodeFilter) {\n return new QuerySet(_filter(this, nodeFilter));\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filterOne(nodeFilter) {\n const node = _filterOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fixed() {\n return new QuerySet(_fixed(this));\n};\n\n/**\n * Return all hidden nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hidden() {\n return new QuerySet(_hidden(this));\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function not(nodeFilter) {\n return new QuerySet(_not(this, nodeFilter));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function notOne(nodeFilter) {\n const node = _notOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function same(otherSelector) {\n return new QuerySet(_same(this, otherSelector));\n};\n\n/**\n * Return all visible nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function visible() {\n return new QuerySet(_visible(this));\n};\n\n/**\n * Return all nodes with an animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withAnimation() {\n return new QuerySet(_withAnimation(this));\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withAttribute(attribute) {\n return new QuerySet(_withAttribute(this, attribute));\n};\n\n/**\n * Return all nodes with child elements.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withChildren() {\n return new QuerySet(_withChildren(this));\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withClass(classes) {\n return new QuerySet(_withClass(this, classes));\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withCSSAnimation() {\n return new QuerySet(_withCSSAnimation(this));\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withCSSTransition() {\n return new QuerySet(_withCSSTransition(this));\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withData(key) {\n return new QuerySet(_withData(this, key));\n};\n\n/**\n * Return all elements with a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withDescendent(nodeFilter) {\n return new QuerySet(_withDescendent(this, nodeFilter));\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withProperty(property) {\n return new QuerySet(_withProperty(this, property));\n};\n","import { dropIn as _dropIn, dropOut as _dropOut, fadeIn as _fadeIn, fadeOut as _fadeOut, rotateIn as _rotateIn, rotateOut as _rotateOut, slideIn as _slideIn, slideOut as _slideOut, squeezeIn as _squeezeIn, squeezeOut as _squeezeOut } from './../../animation/animations.js';\n\n/**\n * QuerySet Animations\n */\n\n/**\n * Add a drop in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a drop out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeOut(node, options),\n { queueName },\n );\n};\n","import QuerySet from './../query-set.js';\nimport { find as _find, findByClass as _findByClass, findById as _findById, findByTag as _findByTag, findOne as _findOne, findOneByClass as _findOneByClass, findOneById as _findOneById, findOneByTag as _findOneByTag } from './../../traversal/find.js';\n\n/**\n * QuerySet Find\n */\n\n/**\n * Return all descendent nodes matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function find(selector) {\n return new QuerySet(_find(selector, this));\n};\n\n/**\n * Return all descendent nodes with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByClass(className) {\n return new QuerySet(_findByClass(className, this));\n};\n\n/**\n * Return all descendent nodes with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findById(id) {\n return new QuerySet(_findById(id, this));\n};\n\n/**\n * Return all descendent nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByTag(tagName) {\n return new QuerySet(_findByTag(tagName, this));\n};\n\n/**\n * Return a single descendent node matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOne(selector) {\n const node = _findOne(selector, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByClass(className) {\n const node = _findOneByClass(className, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneById(id) {\n const node = _findOneById(id, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByTag(tagName) {\n const node = _findOneByTag(tagName, this);\n\n return new QuerySet(node ? [node] : []);\n};\n","import { getAttribute as _getAttribute, getDataset as _getDataset, getHTML as _getHTML, getProperty as _getProperty, getText as _getText, getValue as _getValue, removeAttribute as _removeAttribute, removeDataset as _removeDataset, removeProperty as _removeProperty, setAttribute as _setAttribute, setDataset as _setDataset, setHTML as _setHTML, setProperty as _setProperty, setText as _setText, setValue as _setValue } from './../../attributes/attributes.js';\n\n/**\n * QuerySet Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string} [attribute] The attribute name.\n * @return {string} The attribute value.\n */\nexport function getAttribute(attribute) {\n return _getAttribute(this, attribute);\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(key) {\n return _getDataset(this, key);\n};\n\n/**\n * Get the HTML contents of the first node.\n * @return {string} The HTML contents.\n */\nexport function getHTML() {\n return _getHTML(this);\n};\n\n/**\n * Get a property value for the first node.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(property) {\n return _getProperty(this, property);\n};\n\n/**\n * Get the text contents of the first node.\n * @return {string} The text contents.\n */\nexport function getText() {\n return _getText(this);\n};\n\n/**\n * Get the value property of the first node.\n * @return {string} The value.\n */\nexport function getValue() {\n return _getValue(this);\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeAttribute(attribute) {\n _removeAttribute(this, attribute);\n\n return this;\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string} key The dataset key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeDataset(key) {\n _removeDataset(this, key);\n\n return this;\n};\n\n/**\n * Remove a property from each node.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeProperty(property) {\n _removeProperty(this, property);\n\n return this;\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setAttribute(attribute, value) {\n _setAttribute(this, attribute, value);\n\n return this;\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setDataset(key, value) {\n _setDataset(this, key, value);\n\n return this;\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string} html The HTML contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setHTML(html) {\n _setHTML(this, html);\n\n return this;\n};\n\n/**\n * Set a property value for each node.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setProperty(property, value) {\n _setProperty(this, property, value);\n\n return this;\n};\n\n/**\n * Set the text contents of each node.\n * @param {string} text The text contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setText(text) {\n _setText(this, text);\n\n return this;\n};\n\n/**\n * Set the value property of each node.\n * @param {string} value The value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setValue(value) {\n _setValue(this, value);\n\n return this;\n};\n","import { getScrollX as _getScrollX, getScrollY as _getScrollY, setScroll as _setScroll, setScrollX as _setScrollX, setScrollY as _setScrollY } from './../../attributes/scroll.js';\n\n/**\n * QuerySet Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @return {number} The scroll X position.\n */\nexport function getScrollX() {\n return _getScrollX(this);\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY() {\n return _getScrollY(this);\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScroll(x, y) {\n _setScroll(this, x, y);\n\n return this;\n};\n\n/**\n * Scroll each node to an X position.\n * @param {number} x The scroll X position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollX(x) {\n _setScrollX(this, x);\n\n return this;\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollY(y) {\n _setScrollY(this, y);\n\n return this;\n};\n","import { hasAnimation as _hasAnimation, hasAttribute as _hasAttribute, hasChildren as _hasChildren, hasClass as _hasClass, hasCSSAnimation as _hasCSSAnimation, hasCSSTransition as _hasCSSTransition, hasData as _hasData, hasDataset as _hasDataset, hasDescendent as _hasDescendent, hasFragment as _hasFragment, hasProperty as _hasProperty, hasShadow as _hasShadow, is as _is, isConnected as _isConnected, isEqual as _isEqual, isFixed as _isFixed, isHidden as _isHidden, isSame as _isSame, isVisible as _isVisible } from './../../utility/tests.js';\n\n/**\n * QuerySet Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation() {\n return _hasAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(attribute) {\n return _hasAttribute(this, attribute);\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren() {\n return _hasChildren(this);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(...classes) {\n return _hasClass(this, ...classes);\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation() {\n return _hasCSSAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition() {\n return _hasCSSTransition(this);\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(key) {\n return _hasData(this, key);\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(key) {\n return _hasDataset(this, key);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(nodeFilter) {\n return _hasDescendent(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment() {\n return _hasFragment(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(property) {\n return _hasProperty(this, property);\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow() {\n return _hasShadow(this);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(nodeFilter) {\n return _is(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected() {\n return _isConnected(this);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(otherSelector) {\n return _isEqual(this, otherSelector);\n};\n\n/**\n * Returns true if any of the elements or a parent of any of the elements is \"fixed\".\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed() {\n return _isFixed(this);\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden() {\n return _isHidden(this);\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(otherSelector) {\n return _isSame(this, otherSelector);\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible() {\n return _isVisible(this);\n};\n","\nimport { PADDING_BOX } from './../../vars.js';\nimport { height as _height, width as _width } from './../../attributes/size.js';\n\n/**\n * QuerySet Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _height(this, { boxSize, outer });\n};\n\n/**\n * Get the computed width of the first node.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _width(this, { boxSize, outer });\n};\n","import { unwrap as _unwrap, wrap as _wrap, wrapAll as _wrapAll, wrapInner as _wrapInner } from './../../manipulation/wrap.js';\n\n/**\n * QuerySet Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function unwrap(nodeFilter) {\n _unwrap(this, nodeFilter);\n\n return this;\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrap(otherSelector) {\n _wrap(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapAll(otherSelector) {\n _wrapAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapInner(otherSelector) {\n _wrapInner(this, otherSelector);\n\n return this;\n};\n","import * as _ from '@fr0st/core';\nimport { getAjaxDefaults, getAnimationDefaults, getContext, getWindow, setAjaxDefaults, setAnimationDefaults, setContext, setWindow, useTimeout } from './config.js';\nimport { noConflict } from './globals.js';\nimport { debounce } from './helpers.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './vars.js';\nimport { ajax, _delete, get, patch, post, put } from './ajax/ajax.js';\nimport { parseFormData, parseParams } from './ajax/helpers.js';\nimport { animate, stop } from './animation/animate.js';\nimport Animation from './animation/animation.js';\nimport AnimationSet from './animation/animation-set.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { getCookie, removeCookie, setCookie } from './cookie/cookie.js';\nimport { mouseDragFactory } from './events/event-factory.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus, ready } from './events/events.js';\nimport { attachShadow, create, createComment, createFragment, createRange, createText } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { parseDocument, parseHTML } from './parser/parser.js';\nimport { query, queryOne } from './query/query.js';\nimport QuerySet from './query/query-set.js';\nimport { clearQueue, queue } from './queue/queue.js';\nimport { loadScript, loadScripts } from './scripts/scripts.js';\nimport { loadStyle, loadStyles } from './styles/styles.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { sanitize } from './utility/sanitize.js';\nimport { afterSelection, beforeSelection, extractSelection, getSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { exec, index, indexOf, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nObject.assign(query, {\n BORDER_BOX,\n CONTENT_BOX,\n MARGIN_BOX,\n PADDING_BOX,\n SCROLL_BOX,\n Animation,\n AnimationSet,\n QuerySet,\n addClass,\n addEvent,\n addEventDelegate,\n addEventDelegateOnce,\n addEventOnce,\n after,\n afterSelection,\n ajax,\n animate,\n append,\n appendTo,\n attachShadow,\n before,\n beforeSelection,\n blur,\n center,\n child,\n children,\n clearQueue,\n click,\n clone,\n cloneData,\n cloneEvents,\n closest,\n commonAncestor,\n connected,\n constrain,\n contents,\n create,\n createComment,\n createFragment,\n createRange,\n createText,\n css,\n debounce,\n delete: _delete,\n detach,\n distTo,\n distToNode,\n dropIn,\n dropOut,\n empty,\n equal,\n exec,\n extractSelection,\n fadeIn,\n fadeOut,\n filter,\n filterOne,\n find,\n findByClass,\n findById,\n findByTag,\n findOne,\n findOneByClass,\n findOneById,\n findOneByTag,\n fixed,\n focus,\n fragment,\n get,\n getAjaxDefaults,\n getAnimationDefaults,\n getAttribute,\n getContext,\n getCookie,\n getData,\n getDataset,\n getHTML,\n getProperty,\n getScrollX,\n getScrollY,\n getSelection,\n getStyle,\n getText,\n getValue,\n getWindow,\n hasAnimation,\n hasAttribute,\n hasCSSAnimation,\n hasCSSTransition,\n hasChildren,\n hasClass,\n hasData,\n hasDataset,\n hasDescendent,\n hasFragment,\n hasProperty,\n hasShadow,\n height,\n hidden,\n hide,\n index,\n indexOf,\n insertAfter,\n insertBefore,\n is,\n isConnected,\n isEqual,\n isFixed,\n isHidden,\n isSame,\n isVisible,\n loadScript,\n loadScripts,\n loadStyle,\n loadStyles,\n mouseDragFactory,\n nearestTo,\n nearestToNode,\n next,\n nextAll,\n noConflict,\n normalize,\n not,\n notOne,\n offsetParent,\n parent,\n parents,\n parseDocument,\n parseFormData,\n parseHTML,\n parseParams,\n patch,\n percentX,\n percentY,\n position,\n post,\n prepend,\n prependTo,\n prev,\n prevAll,\n put,\n query,\n queryOne,\n queue,\n ready,\n rect,\n remove,\n removeAttribute,\n removeClass,\n removeCookie,\n removeData,\n removeDataset,\n removeEvent,\n removeEventDelegate,\n removeProperty,\n replaceAll,\n replaceWith,\n rotateIn,\n rotateOut,\n same,\n sanitize,\n select,\n selectAll,\n serialize,\n serializeArray,\n setAjaxDefaults,\n setAnimationDefaults,\n setAttribute,\n setContext,\n setCookie,\n setData,\n setDataset,\n setHTML,\n setProperty,\n setScroll,\n setScrollX,\n setScrollY,\n setStyle,\n setText,\n setValue,\n setWindow,\n shadow,\n show,\n siblings,\n slideIn,\n slideOut,\n sort,\n squeezeIn,\n squeezeOut,\n stop,\n tagName,\n toggle,\n toggleClass,\n triggerEvent,\n triggerOne,\n unwrap,\n useTimeout,\n visible,\n width,\n withAnimation,\n withAttribute,\n withCSSAnimation,\n withCSSTransition,\n withChildren,\n withClass,\n withData,\n withDescendent,\n withProperty,\n wrap,\n wrapAll,\n wrapInner,\n wrapSelection,\n});\n\nfor (const [key, value] of Object.entries(_)) {\n query[`_${key}`] = value;\n}\n\nexport default query;\n","import AjaxRequest from './ajax-request.js';\n\n/**\n * DOM Ajax\n */\n\n/**\n * Perform an XHR DELETE request.\n * @param {string} url The URL of the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=DELETE] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function _delete(url, options) {\n return new AjaxRequest({\n url,\n method: 'DELETE',\n ...options,\n });\n};\n\n/**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function ajax(options) {\n return new AjaxRequest(options);\n};\n\n/**\n * Perform an XHR GET request.\n * @param {string} url The URL of the request.\n * @param {string|array|object} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function get(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n ...options,\n });\n};\n\n/**\n * Perform an XHR PATCH request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PATCH] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function patch(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PATCH',\n ...options,\n });\n};\n\n/**\n * Perform an XHR POST request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=POST] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function post(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'POST',\n ...options,\n });\n};\n\n/**\n * Perform an XHR PUT request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PUT] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function put(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PUT',\n ...options,\n });\n};\n","import { getContext } from './../config.js';\n\n/**\n * DOM Cookie\n */\n\n/**\n * Get a cookie value.\n * @param {string} name The cookie name.\n * @return {*} The cookie value.\n */\nexport function getCookie(name) {\n const cookie = getContext().cookie\n .split(';')\n .find((cookie) =>\n cookie\n .trimStart()\n .substring(0, name.length) === name,\n )\n .trimStart();\n\n if (!cookie) {\n return null;\n }\n\n return decodeURIComponent(\n cookie.substring(name.length + 1),\n );\n};\n\n/**\n * Remove a cookie.\n * @param {string} name The cookie name.\n * @param {object} [options] The options to use for the cookie.\n * @param {string} [options.path] The cookie path.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function removeCookie(name, { path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n\n/**\n * Set a cookie value.\n * @param {string} name The cookie name.\n * @param {*} value The cookie value.\n * @param {object} [options] The options to use for the cookie.\n * @param {number} [options.expires] The number of seconds until the cookie will expire.\n * @param {string} [options.path] The path to use for the cookie.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function setCookie(name, value, { expires = null, path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=${value}`;\n\n if (expires) {\n const date = new Date;\n date.setTime(\n date.getTime() +\n expires * 1000,\n );\n cookie += `;expires=${date.toUTCString()}`;\n }\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n","import { getWindow, setContext, setWindow } from './config.js';\nimport $ from './fquery.js';\n\nlet _$;\n\n/**\n * Reset the global $ variable.\n */\nexport function noConflict() {\n const window = getWindow();\n\n if (window.$ === $) {\n window.$ = _$;\n }\n};\n\n/**\n * Register the global variables.\n * @param {Window} window The window.\n * @param {Document} [document] The document.\n * @return {object} The fQuery object.\n */\nexport function registerGlobals(window, document) {\n setWindow(window);\n setContext(document || window.document);\n\n _$ = window.$;\n window.$ = $;\n\n return $;\n};\n","import { isWindow } from '@fr0st/core';\nimport { registerGlobals } from './globals.js';\n\nexport default isWindow(globalThis) ? registerGlobals(globalThis) : registerGlobals;\n"],"mappings":"uOAIA,MAWaA,EAAUC,MAAMD,QAOhBE,EAAeC,GACxBH,EAAQG,IAEJC,EAASD,KACRE,EAAWF,KACXG,EAASH,KACTI,EAAUJ,KAGHK,OAAOC,YAAYN,GACnBE,EAAWF,EAAMK,OAAOC,YAGxB,WAAYN,GACZO,EAAUP,EAAMQ,WAEXR,EAAMQ,QACPR,EAAMQ,OAAS,KAAKR,IAmB3BS,EAAcT,KACrBA,GApDgB,IAqDlBA,EAAMU,SAOGN,EAAaJ,KACpBA,GAhEe,IAiEjBA,EAAMU,SAOGC,EAAcX,KACrBA,GArEyB,KAsE3BA,EAAMU,WACLV,EAAMY,KAOEV,EAAcF,GACN,mBAAVA,EAOEa,EAAQC,OAAOD,MAOfE,EAAUf,KACjBA,IAlGe,IAoGbA,EAAMU,UAnGI,IAoGVV,EAAMU,UAnGO,IAoGbV,EAAMU,UAQDM,EAAUhB,GACT,OAAVA,EAOSO,EAAaP,IACrBa,EAAMI,WAAWjB,KAClBkB,SAASlB,GAOAC,EAAYD,KACnBA,GACFA,IAAUmB,OAAOnB,GAORoB,EAAiBpB,KACxBA,GACFA,EAAMqB,cAAgBF,OAObG,EAAYtB,KACnBA,GA9IyB,KA+I3BA,EAAMU,YACJV,EAAMY,KAOCW,EAAYvB,GACrBA,IAAU,GAAGA,IAgBJwB,EAAexB,QACdyB,IAAVzB,EAOSG,EAAYH,KACnBA,KACAA,EAAM0B,UACR1B,EAAM0B,SAASC,cAAgB3B,EC9KtB4B,EAAQ,CAAC5B,EAAO6B,EAAM,EAAGC,EAAM,IACxCC,KAAKD,IACDD,EACAE,KAAKF,IACDC,EACA9B,IASCgC,EAAgBhC,GACzB4B,EAAM5B,EAAO,EAAG,KAUPiC,EAAO,CAACC,EAAIC,EAAIC,EAAIC,IAC7BC,EACIJ,EAAKE,EACLD,EAAKE,GAmBAC,EAAMP,KAAKQ,MAwBXC,EAAM,CAACxC,EAAOyC,EAASC,EAASC,EAAOC,KAC/C5C,EAAQyC,IACRG,EAAQD,IACRD,EAAUD,GACXE,EAQSE,EAAS,CAACC,EAAI,EAAGC,EAAI,OAC9B/B,EAAO+B,GACHhB,KAAKc,SAAWC,EAChBN,EACIT,KAAKc,SACL,EACA,EACAC,EACAC,GASCC,EAAY,CAACF,EAAI,EAAGC,EAAI,OAClB,EAAfF,EAAOC,EAAGC,GAQDE,EAAS,CAACjD,EAAOkD,EAAO,MACjCjC,YAEQc,KAAKoB,MAAMnD,EAAQkD,GACnBA,GACFE,QACE,GAAGF,IAAOG,QAAQ,SAAU,IAAI7C,SC1E/B8C,EAAQ,CAACC,EAAQ,MAAOC,IACjCA,EAAOC,QACH,CAACC,EAAKC,KACF7D,MAAM8D,UAAUC,KAAKC,MAAMJ,EAAKC,GACzBJ,IAEXA,GA8CKQ,EAAUR,GACnBzD,MAAMkE,KACF,IAAIC,IAAIV,IAQHW,EAAQlE,GACjBwB,EAAYxB,GACR,GAEIH,EAAQG,GACJA,EAEID,EAAYC,GACRsD,EAAM,GAAItD,GACV,CAACA,GCvHnBmE,EAA8B,oBAAXC,QAA0B,0BAA2BA,OAOxEC,EAAyBF,EAC3B,IAAIG,IAASF,OAAOG,yBAAyBD,GAC5CE,GAAaC,WAAWD,EAAU,IAAO,IAyJjCE,EAAY1E,GACrBE,EAAWF,GACPA,IACAA,EC/JK2E,EAAS,CAACC,KAAWC,IAC9BA,EAAQpB,QACJ,CAACC,EAAKoB,KACF,IAAK,MAAMC,KAAKD,EACRjF,EAAQiF,EAAIC,IACZrB,EAAIqB,GAAKJ,EACL9E,EAAQ6D,EAAIqB,IACRrB,EAAIqB,GACJ,GACJD,EAAIC,IAED3D,EAAc0D,EAAIC,IACzBrB,EAAIqB,GAAKJ,EACLvD,EAAcsC,EAAIqB,IACdrB,EAAIqB,GACJ,GACJD,EAAIC,IAGRrB,EAAIqB,GAAKD,EAAIC,GAGrB,OAAOrB,CAAG,GAEdkB,GAiCKI,EAAS,CAACJ,EAAQK,EAAKC,KAChC,MAAMC,EAAOF,EAAIG,MAAM,KACvB,KAAQH,EAAME,EAAKE,SAAU,CACzB,IACKpF,EAAS2E,MACRK,KAAOL,GAET,OAAOM,EAGXN,EAASA,EAAOK,EACxB,CAEI,OAAOL,CAAM,EA8CJU,EAAS,CAACV,EAAQK,EAAKjF,GAASuF,aAAY,GAAS,MAC9D,MAAMJ,EAAOF,EAAIG,MAAM,KACvB,KAAQH,EAAME,EAAKE,SAAU,CACzB,GAAY,MAARJ,EAAa,CACb,IAAK,MAAMF,KAAKH,GACP,IAAGY,eAAeC,KAAKb,EAAQG,IAIpCO,EACIV,EACA,CAACG,GAAGW,OAAOP,GAAMQ,KAAK,KACtB3F,EACAuF,GAGR,MACZ,CAEYJ,EAAK3E,QAEAP,EAAS2E,EAAOK,KACfA,KAAOL,IAETA,EAAOK,GAAO,IAGlBL,EAASA,EAAOK,KAEhBM,GACEN,KAAOL,IAETA,EAAOK,GAAOjF,EAE1B,GC/JM4F,EAAc,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAM,UAGJC,EAAgB,CAClBC,IAAK,IACLC,GAAI,IACJC,GAAI,IACJC,KAAM,IACNC,KAAM,KAYJC,EAAgBC,GAClB,GAAGA,IACEhB,MAAM,2BACN3B,QACG,CAACC,EAAK2C,MACFA,EAAOA,EAAKhD,QAAQ,QAAS,IAAIiD,gBAE7B5C,EAAIG,KAAKwC,GAEN3C,IAEX,IAQC6C,EAAaH,GACtBD,EAAaC,GACR5D,KACG,CAAC6D,EAAMG,IACHA,EACIC,EAAWJ,GACXA,IAEXV,KAAK,IAODc,EAAcL,GACvBA,EAAOM,OAAO,GAAGC,cACjBP,EAAOQ,UAAU,GAAGN,cAmBXO,EAAgBT,GACzBA,EAAO/C,QAAQ,wBAAyB,QAkB/ByD,EAAaV,GACtBD,EAAaC,GACRT,KAAK,KACLW,c,8CFhFgB,CAAC9B,GAAYuC,WAAU,GAAU,MACtD,IAAIC,EACAC,EACAC,EAEJ,MAAMC,EAAY,IAAI7C,KAClB2C,EAAU3C,EAEN4C,IAIAH,GACAvC,KAAYyC,GAGhBC,GAAU,EACVF,EAAqB3C,GAAwB+C,IACpCL,GACDvC,KAAYyC,GAGhBC,GAAU,EACVF,EAAqB,IAAI,IAC3B,EAkBN,OAfAG,EAAUE,OAAUD,IACXJ,IAID7C,EACAmD,OAAOC,qBAAqBP,GAE5BQ,aAAaR,GAGjBE,GAAU,EACVF,EAAqB,KAAI,EAGtBG,CAAS,E,wDASG,IAAIM,IACtBC,GACGD,EAAUE,aACN,CAACjE,EAAKc,IACFA,EAASd,IACbgE,G,MAUUlD,IAClB,MAAMoD,EAAU,IAAItD,IAChBA,EAAK9D,QAAUgE,EAAShE,OACpBgE,KAAYF,GACZ,IAAI2C,IACAW,KACOtD,EAAKoB,OAAOuB,IAG/B,OAAOW,CAAO,E,SAaM,CAACpD,EAAUqD,EAAO,GAAKd,WAAU,EAAOe,YAAW,GAAS,MAChF,IAAIC,EACAC,EACAf,EAEJ,MAAMgB,EAAY,IAAI3D,KAClB,MAAM4D,EAAMC,KAAKD,MACXE,EAAQJ,EACVE,EAAMF,EACN,KAEJ,GAAIjB,IAAsB,OAAVqB,GAAkBA,GAASP,GAGvC,OAFAG,EAAUE,OACV1D,KAAYF,GAIhB2C,EAAU3C,EACLwD,IAIDC,GACAP,aAAaO,GAGjBA,EAAoBtD,YACf2C,IACGY,EAAUG,KAAKD,MACf1D,KAAYyC,GAEZc,EAAoB,IAAI,GAE5BF,GACH,EAaL,OAVAI,EAAUZ,OAAUD,IACXW,IAILP,aAAaO,GAEbA,EAAoB,KAAI,EAGrBE,CAAS,E,KDnJA,CAAC1E,KAAUC,KAC3BA,EAASA,EAAOhB,IAAIuB,GACbR,EAAM8E,QACRrI,IAAWwD,EACP8E,MAAM3E,GAAUA,EAAM4E,SAASvI,Q,cGsDrBoG,GACnBA,EAAO/C,QACH,YACCmF,GACG5C,EAAY4C,K,6CD/BC,CAAC5D,EAAQK,KAC9B,MAAME,EAAOF,EAAIG,MAAM,KACvB,MAAQH,EAAME,EAAKE,UAEVpF,EAAS2E,IACRK,KAAOL,GAKTO,EAAK3E,OACLoE,EAASA,EAAOK,UAETL,EAAOK,EAE1B,E,gBAgCsB,CAACL,EAAQK,KAC3B,MAAME,EAAOF,EAAIG,MAAM,KACvB,KAAQH,EAAME,EAAKE,SAAU,CACzB,IACKpF,EAAS2E,MACRK,KAAOL,GAET,OAAO,EAGXA,EAASA,EAAOK,EACxB,CAEI,OAAO,CAAI,E,SCbUmB,GACrBK,EACIN,EAAaC,GACRT,KAAK,M,UHpEO,IAAInC,IACzBO,EACIP,EACKC,QACG,CAACC,EAAKH,EAAOiD,KACTjD,EAAQQ,EAAOR,GACRD,EACHI,EACAH,EAAM8E,QACDrI,GACGwD,EAAOiF,OACH,CAAC9E,EAAO+E,IACJlC,GAASkC,GACT/E,EAAM4E,SAASvI,UAKvC,K,YDOW,CAAC2I,EAAIC,EAAI5I,KAC/BA,EAAQ2I,IAAOC,EAAKD,G,kCDFC3I,GACtBA,MAAYA,E,iJAoHOA,KACjBA,GAnKY,IAoKdA,EAAMU,S,gDCpGU,CAACiI,EAAIC,EAAIC,IACzBF,GACC,EAAIE,GACLD,EACAC,E,mBE0GiBrE,IACjB,IAAIsE,EACAC,EAEJ,MAAO,IAAIzE,KACHwE,IAIJA,GAAM,EACNC,EAASvE,KAAYF,IAJVyE,EAMd,E,QASkB,CAACvE,KAAawE,IACjC,IAAI1E,IACAE,KACQwE,EACCC,QACAzG,KAAK0G,GACF1H,EAAY0H,GACR5E,EAAKe,QACL6D,IACNxD,OAAOpB,I,WEjGE8B,GACvBD,EAAaC,GACR5D,KACI6D,GACGA,EAAKK,OAAO,GAAGC,cACfN,EAAKO,UAAU,KAEtBjB,KAAK,I,KFoGM,IAAI8B,IACnBC,GACGD,EAAUhE,QACN,CAACC,EAAKc,IACFA,EAASd,IACbgE,G,SC9GY,CAAC7C,EAASI,EAAKC,IACnCL,EACKrC,KAAK2G,GACFnE,EAAOmE,EAASlE,EAAKC,K,kCCUL,CAAC1E,EAAS,GAAI4I,EAAQ,mEAC9C,IAAItJ,MAAMU,GACL6I,OACA7G,KACI4E,GACGgC,EAA6B,EAAvBvG,EAAOuG,EAAM5I,WAE1BmF,KAAK,I,YHlEcpC,GACxBA,EAAM/C,OACF+C,EAAMP,EAAUO,EAAM/C,SACtB,K,MASa,CAAC8I,EAAOC,EAAKrG,EAAO,KACrC,MAAMsG,EAAOzH,KAAKyH,KAAKD,EAAMD,GAC7B,OAAO,IAAIxJ,MAGCiC,KAAK0H,IAAIF,EAAMD,GACfpG,EAEJ,EACA,GAEHmG,OACA7G,KACG,CAAC4E,EAAGsC,IACAJ,EAAQrG,EACHyG,EAAIxG,EAAOsG,EACZtG,IAEX,E,mBG2CiBkD,GACtBD,EAAaC,GACRT,KAAK,KACLW,c,SF6Fe,CAAC9B,EAAUqD,EAAO,GAAKd,WAAU,EAAMe,YAAW,GAAS,MAC/E,IAAI6B,EACA3B,EACAf,EACAC,EAEJ,MAAM0C,EAAY,IAAItF,KAClB,MAAM4D,EAAMC,KAAKD,MACXE,EAAQJ,EACVE,EAAMF,EACN,KAEJ,GAAIjB,IAAsB,OAAVqB,GAAkBA,GAASP,GAGvC,OAFAG,EAAUE,OACV1D,KAAYF,GAIhB2C,EAAU3C,GACN4C,GAAYY,IAIhBZ,GAAU,EACVyC,EAAoBlF,YACf2C,IACGY,EAAUG,KAAKD,MACf1D,KAAYyC,GAEZC,GAAU,EACVyC,EAAoB,IAAI,GAElB,OAAVvB,EACIP,EACAA,EAAOO,GACd,EAcL,OAXAwB,EAAUvC,OAAUD,IACXuC,IAILnC,aAAamC,GAEbzC,GAAU,EACVyC,EAAoB,KAAI,EAGrBC,CAAS,E,MAQC,CAACpF,EAAUqE,KAC5B,KAAOA,MACgB,IAAfrE,MAGZ,E,kBEpJyB4B,GACrBA,EAAO/C,QACH,4BACA,CAAC+D,EAAGyC,IACAhE,EAAcgE,K,kBCrJ1B,MAAMC,EAAe,CACjBC,UAAW,KACXC,WAAY,KACZC,OAAO,EACPC,YAAa,oCACbC,KAAM,KACNC,QAAS,GACTC,QAAS,KACTC,OAAQ,MACRC,WAAY,KACZC,iBAAkB,KAClBC,aAAa,EACbC,gBAAgB,EAChBC,aAAc,KACdC,IAAK,KACLC,IAAMzD,GAAM,IAAI0D,gBAGdC,EAAoB,CACtBC,SAAU,IACVC,KAAM,cACNC,UAAU,EACVC,OAAO,GAGEC,EAAS,CAClBtB,eACAiB,oBACAM,QAAS,KACTC,YAAY,EACZlH,OAAQ,MAOL,SAASmH,IACZ,OAAOzB,CACX,CAMO,SAAS0B,IACZ,OAAOT,CACX,CAMO,SAASU,IACZ,OAAOL,EAAOC,OAClB,CAMO,SAASK,IACZ,OAAON,EAAOhH,MAClB,CAsBO,SAASuH,EAAWN,GACvB,IAAK5K,EAAW4K,GACZ,MAAM,IAAIO,MAAM,uCAGpBR,EAAOC,QAAUA,CACrB,CAMO,SAASQ,EAAUzH,GACtB,IAAKjE,EAASiE,GACV,MAAM,IAAIwH,MAAM,qCAGpBR,EAAOhH,OAASA,CACpB,CClGO,SAAS0H,EAAStH,GACrB,IAAI0C,EAEJ,MAAO,IAAI5C,KACH4C,IAIJA,GAAU,EAEV6E,QAAQC,UAAUC,MAAM7E,IACpB5C,KAAYF,GACZ4C,GAAU,CAAK,IACjB,CAEV,CAOO,SAASgF,EAAsBC,GAClC,OAAO,IAAIC,OAAO,IAAIvF,EAAasF,cAAmB,IAC1D,CAOO,SAASE,EAAaC,GACzB,OAAOA,EACFC,OACAC,SAAS1H,GAAQA,EAAIM,MAAM,OAC3BiD,QAAQvD,KAAUA,GAC3B,CAUO,SAAS2H,EAAUxH,EAAKjF,GAAO0M,KAAEA,GAAO,GAAU,IACrD,MAAM3D,EAASxH,EAAS0D,GACpB,CAAEA,CAACA,GAAMjF,GACTiF,EAEJ,OAAKyH,EAIEvL,OAAOwL,YACVxL,OAAOyL,QAAQ7D,GACVvG,KAAI,EAAEyC,EAAKjF,KAAW,CAACiF,EAAKhF,EAASD,IAAUH,EAAQG,GAAS6M,KAAKC,UAAU9M,GAASA,MALtF+I,CAOf,CAOO,SAASgE,GAAa/M,GACzB,GAAIwB,EAAYxB,GACZ,OAAOA,EAGX,MAAMgN,EAAQhN,EAAMsG,cAAc2G,OAElC,GAAI,CAAC,OAAQ,MAAM1E,SAASyE,GACxB,OAAO,EAGX,GAAI,CAAC,QAAS,OAAOzE,SAASyE,GAC1B,OAAO,EAGX,GAAc,SAAVA,EACA,OAAO,KAGX,GAAIzM,EAAUyM,GACV,OAAO/L,WAAW+L,GAGtB,GAAI,CAAC,IAAK,KAAKzE,SAASyE,EAAMtG,OAAO,IACjC,IAEI,OADemG,KAAKK,MAAMlN,EAEtC,CAAU,MAAOmN,GAAG,CAGhB,OAAOnN,CACX,CAOO,SAASoN,GAAWjB,GACvB,OAAOA,EAAM/G,MAAM,KACdC,OACT,CAOO,SAASgI,GAAYC,GACxB,OAAOA,EAAOlI,MAAM,IACxB,CC3HO,MAMMmI,GAAc,CACvB,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQ,kBAC5CzK,EAAK,CAAC,SAAU,OAAQ,QAAS,OACjC0K,KAAQ,GACRzK,EAAK,GACL0K,GAAM,GACNC,IAAO,GACP7D,KAAQ,GACR8D,IAAO,GACPC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNC,GAAM,GACNzE,EAAK,GACL0E,IAAO,CAAC,MAAO,MAAO,QAAS,QAAS,UACxCC,GAAM,GACNC,GAAM,GACNC,EAAK,GACLC,IAAO,GACPC,EAAK,GACLC,MAAS,GACTC,KAAQ,GACRC,IAAO,GACPC,IAAO,GACPC,OAAU,GACVC,EAAK,GACLC,GAAM,IAGGC,GAAc,CACvBC,UAAW,CAAC,YAAa,WACzBC,WAAY,CAAC,YAAa,aAGjBC,GAAa,IAAIC,IAEjBlF,GAAO,IAAImF,QAEXhC,GAAS,IAAIgC,QAEbC,GAAS,IAAID,QAEbE,GAAS,IAAIF,QC1CnB,SAASG,GAAkB7E,EAAK3F,EAAKjF,GACxC,MAAM0P,EAAeC,GAAgB/E,GAIrC,OAFA8E,EAAaE,OAAO3K,EAAKjF,GAElB6P,GAAgBjF,EAAK8E,EAChC,CAOO,SAASC,GAAgB/E,GAC5B,OAAOkF,GAAOlF,GAAK8E,YACvB,CAOA,SAASI,GAAOlF,GACZ,MAAMxG,EAASsH,IACTqE,GAAY3L,EAAO4L,SAASC,OAAS7L,EAAO4L,SAASE,UAAU7M,QAAQ,MAAO,IAEpF,OAAO,IAAI8M,IAAIvF,EAAKmF,EACxB,CAOO,SAASK,GAAcjG,GAC1B,MAAMkG,EAASC,GAAYnG,GAErBoG,EAAW,IAAIC,SAErB,IAAK,MAAOvL,EAAKjF,KAAUqQ,EACe,OAAlCpL,EAAI2B,UAAU3B,EAAIzE,OAAS,GAC3B+P,EAASX,OAAO3K,EAAKjF,GAErBuQ,EAASE,IAAIxL,EAAKjF,GAI1B,OAAOuQ,CACX,CAOO,SAASG,GAAYvG,GACxB,MAEMwG,EAFSL,GAAYnG,GAGtB3H,KAAI,EAAEyC,EAAKjF,KAAW,GAAGiF,KAAOjF,MAChC2F,KAAK,KAEV,OAAOiL,UAAUD,EACrB,CAQA,SAASE,GAAW5L,EAAKjF,GACrB,OAAc,OAAVA,GAAkBwB,EAAYxB,GACvB,GAGPH,EAAQG,IAC8B,OAAlCiF,EAAI2B,UAAU3B,EAAIzE,OAAS,KAC3ByE,GAAO,MAGJjF,EAAMwM,SAAS1H,GAAQ+L,GAAW5L,EAAKH,MAG9C7E,EAASD,GACFmB,OAAOyL,QAAQ5M,GACjBwM,SAAQ,EAAEsE,EAAQhM,KAAS+L,GAAW,GAAG5L,KAAO6L,KAAWhM,KAG7D,CAAC,CAACG,EAAKjF,GAClB,CAOA,SAASsQ,GAAYnG,GACjB,OAAItK,EAAQsK,GACDA,EAAKqC,SAASxM,GAAU6Q,GAAW7Q,EAAM+Q,KAAM/Q,EAAMA,SAG5DC,EAASkK,GACFhJ,OAAOyL,QAAQzC,GACjBqC,SAAQ,EAAEvH,EAAKjF,KAAW6Q,GAAW5L,EAAKjF,KAG5CmK,CACX,CAQO,SAAS0F,GAAgBjF,EAAK8E,GACjC,MAAMsB,EAAUlB,GAAOlF,GAEvBoG,EAAQC,OAASvB,EAAawB,WAE9B,MAAMC,EAASH,EAAQE,WAEjBE,EAAMD,EAAOE,QAAQzG,GAC3B,OAAOuG,EAAOvK,UAAUwK,EAC5B,CCnIe,MAAME,GAuBjB,WAAAjQ,CAAYkQ,GAyCR,GAxCAC,KAAKC,SAAW9M,EACZ,GACA4G,IACAgG,GAGCC,KAAKC,SAAS7G,MACf4G,KAAKC,SAAS7G,IAAMc,IAAYsE,SAAS0B,MAGxCF,KAAKC,SAASxH,QACfuH,KAAKC,SAAS7G,IAAM6E,GAAkB+B,KAAKC,SAAS7G,IAAK,IAAKzC,KAAKD,UAGjE,iBAAkBsJ,KAAKC,SAASrH,UAAYoH,KAAKC,SAASvH,cAC5DsH,KAAKC,SAASrH,QAAQ,gBAAkBoH,KAAKC,SAASvH,aAG5B,OAA1BsH,KAAKC,SAASpH,UACdmH,KAAKC,SAASpH,QAAU,4DAA4DsH,KAAK3B,SAAS4B,WAGjGJ,KAAKC,SAASpH,SAAa,qBAAsBmH,KAAKC,SAASrH,UAChEoH,KAAKC,SAASrH,QAAQ,oBAAsB,kBAGhDoH,KAAKK,SAAW,IAAI9F,SAAQ,CAACC,EAAS8F,KAClCN,KAAKO,SAAY/R,IACbwR,KAAKQ,aAAc,EACnBhG,EAAQhM,EAAM,EAGlBwR,KAAKS,QAAWC,IACZV,KAAKW,aAAc,EACnBL,EAAOI,EAAM,CAChB,IAGLV,KAAK3G,IAAM2G,KAAKC,SAAS5G,MAErB2G,KAAKC,SAAStH,OACVqH,KAAKC,SAAShH,aAAexK,EAASuR,KAAKC,SAAStH,QAClB,qBAA9BqH,KAAKC,SAASvH,YACdsH,KAAKC,SAAStH,KAAO0C,KAAKC,UAAU0E,KAAKC,SAAStH,MACb,sCAA9BqH,KAAKC,SAASvH,YACrBsH,KAAKC,SAAStH,KAAOuG,GAAYc,KAAKC,SAAStH,MAE/CqH,KAAKC,SAAStH,KAAOiG,GAAcoB,KAAKC,SAAStH,OAI5B,QAAzBqH,KAAKC,SAASnH,QAAkB,CAChC,MAAM8H,EAAa,IAAIC,gBAAgBb,KAAKC,SAAStH,MAE/CuF,EAAeC,GAAgB6B,KAAKC,SAAS7G,KACnD,IAAK,MAAO3F,EAAKjF,KAAUoS,EAAWxF,UAClC8C,EAAaE,OAAO3K,EAAKjF,GAG7BwR,KAAKC,SAAS7G,IAAMiF,GAAgB2B,KAAKC,SAAS7G,IAAK8E,GACvD8B,KAAKC,SAAStH,KAAO,IACrC,CAGQqH,KAAK3G,IAAIyH,KAAKd,KAAKC,SAASnH,OAAQkH,KAAKC,SAAS7G,KAAK,EAAM4G,KAAKC,SAASc,SAAUf,KAAKC,SAASe,UAEnG,IAAK,MAAOvN,EAAKjF,KAAUmB,OAAOyL,QAAQ4E,KAAKC,SAASrH,SACpDoH,KAAK3G,IAAI4H,iBAAiBxN,EAAKjF,GAG/BwR,KAAKC,SAAS9G,eACd6G,KAAK3G,IAAIF,aAAe6G,KAAKC,SAAS9G,cAGtC6G,KAAKC,SAASiB,UACdlB,KAAK3G,IAAI8H,iBAAiBnB,KAAKC,SAASiB,UAGxClB,KAAKC,SAASmB,UACdpB,KAAK3G,IAAI+H,QAAUpB,KAAKC,SAASmB,SAGrCpB,KAAK3G,IAAIgI,OAAU1F,IACXqE,KAAK3G,IAAIiI,OAAS,IAClBtB,KAAKS,QAAQ,CACTa,OAAQtB,KAAK3G,IAAIiI,OACjBjI,IAAK2G,KAAK3G,IACVsB,MAAOgB,IAGXqE,KAAKO,SAAS,CACVgB,SAAUvB,KAAK3G,IAAIkI,SACnBlI,IAAK2G,KAAK3G,IACVsB,MAAOgB,GAE3B,EAGaqE,KAAKC,SAASpH,UACfmH,KAAK3G,IAAImI,QAAW7F,GAChBqE,KAAKS,QAAQ,CACTa,OAAQtB,KAAK3G,IAAIiI,OACjBjI,IAAK2G,KAAK3G,IACVsB,MAAOgB,KAIfqE,KAAKC,SAASlH,aACdiH,KAAK3G,IAAIoI,WAAc9F,GACnBqE,KAAKC,SAASlH,WAAW4C,EAAE+F,OAAS/F,EAAEgG,MAAO3B,KAAK3G,IAAKsC,IAG3DqE,KAAKC,SAASjH,mBACdgH,KAAK3G,IAAIuI,OAAOH,WAAc9F,GAC1BqE,KAAKC,SAASjH,iBAAiB2C,EAAE+F,OAAS/F,EAAEgG,MAAO3B,KAAK3G,IAAKsC,IAGjEqE,KAAKC,SAASzH,YACdwH,KAAKC,SAASzH,WAAWwH,KAAK3G,KAGlC2G,KAAK3G,IAAIwI,KAAK7B,KAAKC,SAAStH,MAExBqH,KAAKC,SAAS1H,WACdyH,KAAKC,SAAS1H,UAAUyH,KAAK3G,IAEzC,CAMI,MAAAxD,CAAOiM,EAAS,yBACR9B,KAAKQ,aAAeR,KAAKW,aAAeX,KAAK+B,eAIjD/B,KAAK3G,IAAI2I,QAEThC,KAAK+B,cAAe,EAEhB/B,KAAKC,SAAS/G,gBACd8G,KAAKS,QAAQ,CACTa,OAAQtB,KAAK3G,IAAIiI,OACjBjI,IAAK2G,KAAK3G,IACVyI,WAGhB,CAOI,MAAMG,GACF,OAAOjC,KAAKK,SAAS6B,MAAMD,EACnC,CAOI,QAAQE,GACJ,OAAOnC,KAAKK,SAAS+B,QAAQD,EACrC,CAQI,IAAA1H,CAAK4H,EAAaJ,GACd,OAAOjC,KAAKK,SAAS5F,KAAK4H,EAAaJ,EAC/C,EAGAtS,OAAO2S,eAAexC,GAAY1N,UAAWmI,QAAQnI,WC5MrD,IAAImQ,IAAY,EAMT,SAASC,KACZ,OAAOtS,SAASuS,SACZvS,SAASuS,SAASC,YAClBC,YAAYjM,KACpB,CAKO,SAASoB,KACRyK,KAIJA,IAAY,EACZK,KACJ,CAKA,SAASA,KACL,MAAMC,EAAOL,KAEb,IAAK,MAAOM,EAAMC,KAAsBnF,GAAY,CAChD,MAAMoF,EAAkBD,EAAkBlM,QAAQlB,IAAeA,EAAUiN,OAAOC,KAE7EG,EAAgBhU,OAGjB4O,GAAWqB,IAAI6D,EAAME,GAFrBpF,GAAWqF,OAAOH,EAI9B,CAESlF,GAAWsF,KAELtJ,EAAOE,WACd7G,WAAW2P,GAAQ,IAAO,IAE1B1I,IAAYnH,sBAAsB6P,IAJlCL,IAAY,CAMpB,CC7Ce,MAAMY,GAWjB,WAAAtT,CAAYiT,EAAM9P,EAAU+M,GACxBC,KAAKoD,MAAQN,EACb9C,KAAKqD,UAAYrQ,EAEjBgN,KAAKC,SAAW,IACTjG,OACA+F,GAGD,UAAWC,KAAKC,WAClBD,KAAKC,SAASnI,MAAQ0K,MAGtBxC,KAAKC,SAAStG,QACdqG,KAAKoD,MAAME,QAAQC,eAAiBvD,KAAKC,SAASnI,OAGtDkI,KAAKK,SAAW,IAAI9F,SAAQ,CAACC,EAAS8F,KAClCN,KAAKO,SAAW/F,EAChBwF,KAAKS,QAAUH,CAAM,IAGpB1C,GAAW4F,IAAIV,IAChBlF,GAAWqB,IAAI6D,EAAM,IAGzBlF,GAAW6F,IAAIX,GAAMzQ,KAAK2N,KAClC,CAOI,MAAMiC,GACF,OAAOjC,KAAKK,SAAS6B,MAAMD,EACnC,CAOI,KAAAyB,CAAMZ,GACF,OAAO,IAAIK,GAAUL,EAAM9C,KAAKqD,UAAWrD,KAAKC,SACxD,CAOI,QAAQkC,GACJ,OAAOnC,KAAKK,SAAS+B,QAAQD,EACrC,CAOI,IAAAwB,EAAKC,OAAEA,GAAS,GAAS,IACrB,GAAI5D,KAAK6D,YAAc7D,KAAK8D,YACxB,OAGJ,MAAMd,EAAkBpF,GAAW6F,IAAIzD,KAAKoD,OACvCvM,QAAQlB,GAAcA,IAAcqK,OAEpCgD,EAAgBhU,OAGjB4O,GAAWqB,IAAIe,KAAKoD,MAAOJ,GAF3BpF,GAAWqF,OAAOjD,KAAKoD,OAKvBQ,GACA5D,KAAK4C,SAGT5C,KAAK6D,YAAa,EAEbD,GACD5D,KAAKS,QAAQT,KAAKoD,MAE9B,CAQI,IAAA3I,CAAK4H,EAAaJ,GACd,OAAOjC,KAAKK,SAAS5F,KAAK4H,EAAaJ,EAC/C,CAOI,MAAAW,CAAOC,EAAO,MACV,GAAI7C,KAAK6D,WACL,OAAO,EAGX,IAAIE,EAiCJ,OA/Ba,OAATlB,EACAkB,EAAW,GAEXA,GAAYlB,EAAO7C,KAAKC,SAASnI,OAASkI,KAAKC,SAASzG,SAEpDwG,KAAKC,SAASvG,SACdqK,GAAY,EAEZA,EAAW3T,EAAM2T,GAGM,YAAvB/D,KAAKC,SAASxG,KACdsK,EAAWA,GAAY,EACO,aAAvB/D,KAAKC,SAASxG,KACrBsK,EAAWxT,KAAKyT,KAAKD,GACS,gBAAvB/D,KAAKC,SAASxG,OAEjBsK,EADAA,GAAY,GACDA,GAAY,EAAI,EAEhB,GAAM,EAAIA,IAAa,EAAI,IAK9C/D,KAAKC,SAAStG,QACdqG,KAAKoD,MAAME,QAAQW,cAAgBpB,EACnC7C,KAAKoD,MAAME,QAAQY,kBAAoBH,GAG3C/D,KAAKqD,UAAUrD,KAAKoD,MAAOW,EAAU/D,KAAKC,YAEtC8D,EAAW,IAIX/D,KAAKC,SAAStG,eACPqG,KAAKoD,MAAME,QAAQC,sBACnBvD,KAAKoD,MAAME,QAAQW,qBACnBjE,KAAKoD,MAAME,QAAQY,mBAGzBlE,KAAK8D,cACN9D,KAAK8D,aAAc,EAEnB9D,KAAKO,SAASP,KAAKoD,QAGhB,GACf,EAGAzT,OAAO2S,eAAea,GAAU/Q,UAAWmI,QAAQnI,WC/KpC,MAAM+R,GAKjB,WAAAtU,CAAY+N,GACRoC,KAAKoE,YAAcxG,EACnBoC,KAAKK,SAAW9F,QAAQ8J,IAAIzG,EACpC,CAOI,MAAMqE,GACF,OAAOjC,KAAKK,SAAS6B,MAAMD,EACnC,CAOI,QAAQE,GACJ,OAAOnC,KAAKK,SAAS+B,QAAQD,EACrC,CAOI,IAAAwB,EAAKC,OAAEA,GAAS,GAAS,IACrB,IAAK,MAAMjO,KAAaqK,KAAKoE,YACzBzO,EAAUgO,KAAK,CAAEC,UAE7B,CAQI,IAAAnJ,CAAK4H,EAAaJ,GACd,OAAOjC,KAAKK,SAAS5F,KAAK4H,EAAaJ,EAC/C,ECnCO,SAASqC,GAAaC,GAAUzD,KAAEA,GAAO,GAAS,IACrD,MAAMgC,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAKwB,aAAa,CACrBG,KAAM3D,EACF,OACA,UAEZ,CAqFO,SAAS4D,KACZ,OAAOzK,IAAa0K,wBACxB,CAMO,SAASC,KACZ,OAAO3K,IAAa2K,aACxB,CDrEAjV,OAAO2S,eAAe6B,GAAa/R,UAAWmI,QAAQnI,WE9CtD,MAAMyS,GAAS,IAAIC,UAkBZ,SAASC,GAAUC,GACtB,MAAMC,EAAaL,KACdM,yBAAyBF,GACzBG,SAEL,OAAOrT,EAAM,GAAImT,EACrB,CC5Be,MAAMG,GAKjB,WAAAvV,CAAYwV,EAAQ,IAChBrF,KAAKsF,OAASD,CACtB,CAMI,UAAIrW,GACA,OAAOgR,KAAKsF,OAAOtW,MAC3B,CAOI,IAAAuW,CAAKvS,GAKD,OAJAgN,KAAKsF,OAAOE,SACR,CAAC9N,EAAGQ,IAAMlF,EAAS0E,EAAGQ,KAGnB8H,IACf,CAOI,GAAAyD,CAAIzO,EAAQ,MACR,OAAc,OAAVA,EACOgL,KAAKsF,OAGTtQ,EAAQ,EACXgL,KAAKsF,OAAOtQ,EAAQgL,KAAKsF,OAAOtW,QAChCgR,KAAKsF,OAAOtQ,EACxB,CAOI,GAAAhE,CAAIgC,GACA,MAAMqS,EAAQrF,KAAKsF,OAAOtU,IAAIgC,GAE9B,OAAO,IAAIoS,GAASC,EAC5B,CAQI,KAAA5N,CAAMgO,EAAO1N,GACT,MAAMsN,EAAQrF,KAAKsF,OAAO7N,MAAMgO,EAAO1N,GAEvC,OAAO,IAAIqN,GAASC,EAC5B,CAMI,CAACxW,OAAOC,YACJ,OAAOkR,KAAKsF,OAAOzG,QAC3B,EChEO,SAAS6G,GAAKnB,EAAU1K,EAAUI,KACrC,IAAKsK,EACD,MAAO,GAIX,MAAMvN,EAAQuN,EAASvN,MAAM,wBAE7B,GAAIA,EACA,MAAiB,MAAbA,EAAM,GACC2O,GAAS3O,EAAM,GAAI6C,GAGb,MAAb7C,EAAM,GACC4O,GAAY5O,EAAM,GAAI6C,GAG1BgM,GAAU7O,EAAM,GAAI6C,GAG/B,GAAI5K,EAAW4K,IAAYjL,EAAUiL,IAAY1K,EAAW0K,IAAY/J,EAAS+J,GAC7E,OAAO/H,EAAM,GAAI+H,EAAQiM,iBAAiBvB,IAG9C,MAAMc,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGRgW,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMc,EAAWrD,EAAKgD,iBAAiBvB,GAEvC2B,EAAQ7T,QAAQ8T,EACxB,CAEI,OAAOd,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAQO,SAASN,GAAYQ,EAAWvM,EAAUI,KAC7C,GAAIhL,EAAW4K,IAAYjL,EAAUiL,GACjC,OAAO/H,EAAM,GAAI+H,EAAQwM,uBAAuBD,IAGpD,GAAIjX,EAAW0K,IAAY/J,EAAS+J,GAChC,OAAO/H,EAAM,GAAI+H,EAAQiM,iBAAiB,IAAIM,MAGlD,MAAMf,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGRgW,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMc,EAAWhX,EAAW2T,IAAShT,EAASgT,GAC1CA,EAAKgD,iBAAiB,IAAIM,KAC1BtD,EAAKuD,uBAAuBD,GAEhCF,EAAQ7T,QAAQ8T,EACxB,CAEI,OAAOd,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAQO,SAASP,GAASW,EAAIzM,EAAUI,KACnC,GAAIhL,EAAW4K,IAAYjL,EAAUiL,IAAY1K,EAAW0K,IAAY/J,EAAS+J,GAC7E,OAAO/H,EAAM,GAAI+H,EAAQiM,iBAAiB,IAAIQ,MAGlD,MAAMjB,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGRgW,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMc,EAAWrD,EAAKgD,iBAAiB,IAAIQ,KAE3CJ,EAAQ7T,QAAQ8T,EACxB,CAEI,OAAOd,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAQO,SAASL,GAAUU,EAAS1M,EAAUI,KACzC,GAAIhL,EAAW4K,IAAYjL,EAAUiL,GACjC,OAAO/H,EAAM,GAAI+H,EAAQ2M,qBAAqBD,IAGlD,GAAIpX,EAAW0K,IAAY/J,EAAS+J,GAChC,OAAO/H,EAAM,GAAI+H,EAAQiM,iBAAiBS,IAG9C,MAAMlB,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGRgW,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMc,EAAWhX,EAAW2T,IAAShT,EAASgT,GAC1CA,EAAKgD,iBAAiBS,GACtBzD,EAAK0D,qBAAqBD,GAE9BL,EAAQ7T,QAAQ8T,EACxB,CAEI,OAAOd,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAQO,SAASO,GAAQlC,EAAU1K,EAAUI,KACxC,IAAKsK,EACD,OAAO,KAIX,MAAMvN,EAAQuN,EAASvN,MAAM,wBAE7B,GAAIA,EACA,MAAiB,MAAbA,EAAM,GACC0P,GAAY1P,EAAM,GAAI6C,GAGhB,MAAb7C,EAAM,GACC2P,GAAe3P,EAAM,GAAI6C,GAG7B+M,GAAa5P,EAAM,GAAI6C,GAGlC,GAAI5K,EAAW4K,IAAYjL,EAAUiL,IAAY1K,EAAW0K,IAAY/J,EAAS+J,GAC7E,OAAOA,EAAQgN,cAActC,GAGjC,MAAMc,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,GAAKmV,EAAMrW,OAAX,CAIA,IAAK,MAAM8T,KAAQuC,EAAO,CACtB,MAAM9N,EAASuL,EAAK+D,cAActC,GAElC,GAAIhN,EACA,OAAOA,CAEnB,CAEI,OAAO,IAVX,CAWA,CAQO,SAASoP,GAAeP,EAAWvM,EAAUI,KAChD,GAAIhL,EAAW4K,IAAYjL,EAAUiL,GACjC,OAAOA,EAAQwM,uBAAuBD,GAAWU,KAAK,GAG1D,GAAI3X,EAAW0K,IAAY/J,EAAS+J,GAChC,OAAOA,EAAQgN,cAAc,IAAIT,KAGrC,MAAMf,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,GAAKmV,EAAMrW,OAAX,CAIA,IAAK,MAAM8T,KAAQuC,EAAO,CACtB,MAAM9N,EAASpI,EAAW2T,IAAShT,EAASgT,GACxCA,EAAK+D,cAAc,IAAIT,KACvBtD,EAAKuD,uBAAuBD,GAAWU,KAAK,GAEhD,GAAIvP,EACA,OAAOA,CAEnB,CAEI,OAAO,IAZX,CAaA,CAQO,SAASmP,GAAYJ,EAAIzM,EAAUI,KACtC,GAAIhL,EAAW4K,GACX,OAAOA,EAAQkN,eAAeT,GAGlC,GAAI1X,EAAUiL,IAAY1K,EAAW0K,IAAY/J,EAAS+J,GACtD,OAAOA,EAAQgN,cAAc,IAAIP,KAGrC,MAAMjB,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,GAAKmV,EAAMrW,OAAX,CAIA,IAAK,MAAM8T,KAAQuC,EAAO,CACtB,MAAM9N,EAAStI,EAAW6T,GACtBA,EAAKiE,eAAeT,GACpBxD,EAAK+D,cAAc,IAAIP,KAE3B,GAAI/O,EACA,OAAOA,CAEnB,CAEI,OAAO,IAZX,CAaA,CAQO,SAASqP,GAAaL,EAAS1M,EAAUI,KAC5C,GAAIhL,EAAW4K,IAAYjL,EAAUiL,GACjC,OAAOA,EAAQ2M,qBAAqBD,GAASO,KAAK,GAGtD,GAAI3X,EAAW0K,IAAY/J,EAAS+J,GAChC,OAAOA,EAAQgN,cAAcN,GAGjC,MAAMlB,EAAQU,GAAWlM,EAAS,CAC9BmM,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,GAAKmV,EAAMrW,OAAX,CAIA,IAAK,MAAM8T,KAAQuC,EAAO,CACtB,MAAM9N,EAASpI,EAAW2T,IAAShT,EAASgT,GACxCA,EAAK+D,cAAcN,GACnBzD,EAAK0D,qBAAqBD,GAASO,KAAK,GAE5C,GAAIvP,EACA,OAAOA,CAEnB,CAEI,OAAO,IAZX,CAaA,CChTA,SAASyP,GAAW3B,EAAOxL,EAASoN,GAAYjC,KAAEA,GAAO,GAAU,IAC/D,GAAIjV,EAASsV,GACT,OAAIL,GAAmC,MAA3BK,EAAM5J,OAAOvG,OAAO,GACrB6P,GAAUM,GAAOxR,QAGrB4S,GAAQpB,EAAOxL,GAG1B,GAAIoN,EAAW5B,GACX,OAAOA,EAGX,GAAIA,aAAiBD,GAAU,CAC3B,MAAMtC,EAAOuC,EAAM5B,IAAI,GAEvB,OAAOwD,EAAWnE,GAAQA,OAAO7S,CACzC,CAEI,GAAIoV,aAAiB6B,gBAAkB7B,aAAiB8B,SAAU,CAC9D,MAAMrE,EAAOuC,EAAMyB,KAAK,GAExB,OAAOG,EAAWnE,GAAQA,OAAO7S,CACzC,CACA,CAUA,SAASmX,GAAY/B,EAAOxL,EAASoN,GAAYjC,KAAEA,GAAO,GAAU,IAChE,OAAIjV,EAASsV,GACLL,GAAmC,MAA3BK,EAAM5J,OAAOvG,OAAO,GACrB6P,GAAUM,GAGdK,GAAKL,EAAOxL,GAGnBoN,EAAW5B,GACJ,CAACA,GAGRA,aAAiBD,GACVC,EAAM5B,MAAM5M,OAAOoQ,GAG1B5B,aAAiB6B,gBAAkB7B,aAAiB8B,SAC7CrV,EAAM,GAAIuT,GAAOxO,OAAOoQ,GAG5B,EACX,CAQO,SAASI,GAAYxQ,EAAQnD,GAAe,GAC/C,OAAKmD,EAIDnI,EAAWmI,GACJA,EAGP9G,EAAS8G,GACDiM,GAASlU,EAAUkU,IAASA,EAAKwE,QAAQzQ,GAGjDtH,EAAOsH,IAAW1H,EAAW0H,IAAW/G,EAAS+G,GACzCiM,GAASA,EAAKyE,WAAW1Q,IAGrCA,EAASkP,GAAWlP,EAAQ,CACxBiM,MAAM,EACNkD,UAAU,EACVC,QAAQ,KAGDjX,OACC8T,GAASjM,EAAOE,SAAS+L,GAG7BlN,IAAOlC,EAzBHkC,GAAMlC,CA0BtB,CAQO,SAAS8T,GAAoB3Q,EAAQnD,GAAe,GACvD,OAAKmD,EAIDnI,EAAWmI,GACHiM,GAAShR,EAAM,GAAIgR,EAAKgD,iBAAiB,MAAMhP,KAAKD,GAG5D9G,EAAS8G,GACDiM,KAAW2D,GAAQ5P,EAAQiM,GAGnCvT,EAAOsH,IAAW1H,EAAW0H,IAAW/G,EAAS+G,GACzCiM,GAASA,EAAK2E,SAAS5Q,IAGnCA,EAASkP,GAAWlP,EAAQ,CACxBiM,MAAM,EACNkD,UAAU,EACVC,QAAQ,KAGDjX,OACC8T,GAASjM,EAAOC,MAAM3E,GAAU2Q,EAAK2E,SAAStV,KAGlDyD,IAAOlC,EAzBHkC,GAAMlC,CA0BtB,CAeO,SAAS8Q,GAAUa,EAAOtF,EAAU,IACvC,MAAMlJ,EAAS6Q,GAAiB3H,GAEhC,IAAK1R,EAAQgX,GACT,OAAO2B,GAAW3B,EAAOtF,EAAQlG,SAAWI,IAAcpD,EAAQkJ,GAGtE,IAAK,MAAM+C,KAAQuC,EAAO,CACtB,MAAM9N,EAASyP,GAAWlE,EAAM/C,EAAQlG,SAAWI,IAAcpD,EAAQkJ,GAEzE,GAAIxI,EACA,OAAOA,CAEnB,CACA,CAeO,SAASwO,GAAWV,EAAOtF,EAAU,IACxC,MAAMlJ,EAAS6Q,GAAiB3H,GAEhC,IAAK1R,EAAQgX,GACT,OAAO+B,GAAY/B,EAAOtF,EAAQlG,SAAWI,IAAcpD,EAAQkJ,GAGvE,MAAMmG,EAAUb,EAAMrK,SAAS8H,GAASsE,GAAYtE,EAAM/C,EAAQlG,SAAWI,IAAcpD,EAAQkJ,KAEnG,OAAOsF,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAYA,SAASwB,GAAiB3H,GACtB,IAAKA,EACD,OAAOnR,EAGX,MAAMqH,EAAY,GAwBlB,OAtBI8J,EAAQ+C,KACR7M,EAAU5D,KAAK9C,GAEf0G,EAAU5D,KAAKzD,GAGfmR,EAAQ7P,UACR+F,EAAU5D,KAAKpD,GAGf8Q,EAAQnN,QACRqD,EAAU5D,KAAK1D,GAGfoR,EAAQiG,UACR/P,EAAU5D,KAAKlD,GAGf4Q,EAAQkG,QACRhQ,EAAU5D,KAAKvC,GAGXgT,GAAS7M,EAAUa,MAAM9D,GAAaA,EAAS8P,IAC3D,CC/NO,SAAS6E,GAAQpD,EAAUvR,EAAU+M,GACxC,MAEM6H,EAFQ7B,GAAWxB,GAEGvT,KAAK8R,GAAS,IAAIK,GAAUL,EAAM9P,EAAU+M,KAIxE,OAFAjI,KAEO,IAAIqM,GAAayD,EAC5B,CAQO,SAASjE,GAAKY,GAAUX,OAAEA,GAAS,GAAS,IAC/C,MAAMyB,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACtB,IAAKzH,GAAW4F,IAAIV,GAChB,SAGJ,MAAMC,EAAoBnF,GAAW6F,IAAIX,GACzC,IAAK,MAAMnN,KAAaoN,EACpBpN,EAAUgO,KAAK,CAAEC,UAE7B,CACA,CC3BO,SAASiE,GAAOtD,EAAUxE,GAC7B,OAAO+H,GACHvD,EACA,CACIwD,UAAW,SACRhI,GAGf,CAcO,SAASiI,GAAQzD,EAAUxE,GAC9B,OAAOkI,GACH1D,EACA,CACIwD,UAAW,SACRhI,GAGf,CAYO,SAASmI,GAAO3D,EAAUxE,GAC7B,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,IACHjB,EAAKqF,MAAMC,YACP,UACArE,EAAW,EACPA,EAASnS,QAAQ,GACjB,KAEZmO,EAER,CAYO,SAASsI,GAAQ9D,EAAUxE,GAC9B,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,IACHjB,EAAKqF,MAAMC,YACP,UACArE,EAAW,GACN,EAAIA,GAAUnS,QAAQ,GACvB,KAEZmO,EAER,CAgBO,SAASuI,GAAS/D,EAAUxE,GAC/B,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,EAAUhE,KACb,MAAM1I,IAAW,GAAiB,GAAX0M,IAAmBhE,EAAQwI,SAAW,EAAI,IAAI3W,QAAQ,GAC7EkR,EAAKqF,MAAMC,YACP,YACArE,EAAW,EACP,YAAYhE,EAAQyI,MAAMzI,EAAQ0I,MAAM1I,EAAQ2I,MAAMrR,QACtD,GACP,GAEL,CACImR,EAAG,EACHC,EAAG,EACHC,EAAG,KACA3I,GAGf,CAgBO,SAAS4I,GAAUpE,EAAUxE,GAChC,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,EAAUhE,KACb,MAAM1I,GAAsB,GAAX0M,GAAkBhE,EAAQwI,SAAW,EAAI,IAAI3W,QAAQ,GACtEkR,EAAKqF,MAAMC,YACP,YACArE,EAAW,EACP,YAAYhE,EAAQyI,MAAMzI,EAAQ0I,MAAM1I,EAAQ2I,MAAMrR,QACtD,GACP,GAEL,CACImR,EAAG,EACHC,EAAG,EACHC,EAAG,KACA3I,GAGf,CAcO,SAAS+H,GAAQvD,EAAUxE,GAC9B,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,EAAUhE,KACb,GAAiB,IAAbgE,EAQA,OAPAjB,EAAKqF,MAAMC,YAAY,WAAY,SAC/BrI,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,KAEpCtF,EAAKqF,MAAMC,YAAY,cAAe,IACtCtF,EAAKqF,MAAMC,YAAY,aAAc,MAK7C,MAAMS,EAAM3V,EAAS6M,EAAQgI,WAE7B,IAAI7E,EAAU4F,EAAoBP,EAC9B,CAAC,MAAO,UAAUxR,SAAS8R,IAC3B3F,EAAOJ,EAAKiG,aACZD,EAAiB/I,EAAQ6I,OACrB,IACA,aACJL,EAAkB,QAARM,IAEV3F,EAAOJ,EAAKkG,YACZF,EAAiB/I,EAAQ6I,OACrB,IACA,cACJL,EAAkB,SAARM,GAGd,MAAMI,IAAoB/F,EAAQA,EAAOa,IAAcwE,GAAW,EAAI,IAAI3W,QAAQ,GAC9EmO,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,YAAYU,KAAkBG,QAElEnG,EAAKqF,MAAMC,YAAYU,EAAgB,GAAGG,MAC1D,GAEQ,CACIlB,UAAW,SACXa,QAAQ,KACL7I,GAGf,CAcO,SAASkI,GAAS1D,EAAUxE,GAC/B,OAAO4H,GACHpD,GACA,CAACzB,EAAMiB,EAAUhE,KACb,GAAiB,IAAbgE,EAQA,OAPAjB,EAAKqF,MAAMC,YAAY,WAAY,SAC/BrI,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,KAEpCtF,EAAKqF,MAAMC,YAAY,cAAe,IACtCtF,EAAKqF,MAAMC,YAAY,aAAc,MAK7C,MAAMS,EAAM3V,EAAS6M,EAAQgI,WAE7B,IAAI7E,EAAU4F,EAAoBP,EAC9B,CAAC,MAAO,UAAUxR,SAAS8R,IAC3B3F,EAAOJ,EAAKiG,aACZD,EAAiB/I,EAAQ6I,OACrB,IACA,aACJL,EAAkB,QAARM,IAEV3F,EAAOJ,EAAKkG,YACZF,EAAiB/I,EAAQ6I,OACrB,IACA,cACJL,EAAkB,SAARM,GAGd,MAAMI,GAAmB/F,EAAOa,GAAYwE,GAAW,EAAI,IAAI3W,QAAQ,GACnEmO,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,YAAYU,KAAkBG,QAElEnG,EAAKqF,MAAMC,YAAYU,EAAgB,GAAGG,MAC1D,GAEQ,CACIlB,UAAW,SACXa,QAAQ,KACL7I,GAGf,CAcO,SAASmJ,GAAU3E,EAAUxE,GAChC,MAAMsF,EAAQU,GAAWxB,GAEzBxE,EAAU,CACNgI,UAAW,SACXa,QAAQ,KACL7I,GAGP,MAAM6H,EAAgBvC,EAAMrU,KAAK8R,IAC7B,MAAMqG,EAAgBrG,EAAKqF,MAAMiB,OAC3BC,EAAevG,EAAKqF,MAAMmB,MAGhC,OAFAxG,EAAKqF,MAAMC,YAAY,WAAY,UAE5B,IAAIjF,GACPL,GACA,CAACA,EAAMiB,EAAUhE,KAIb,GAHA+C,EAAKqF,MAAMC,YAAY,SAAUe,GACjCrG,EAAKqF,MAAMC,YAAY,QAASiB,GAEf,IAAbtF,EAQA,OAPAjB,EAAKqF,MAAMC,YAAY,WAAY,SAC/BrI,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,KAEpCtF,EAAKqF,MAAMC,YAAY,cAAe,IACtCtF,EAAKqF,MAAMC,YAAY,aAAc,MAK7C,MAAMS,EAAM3V,EAAS6M,EAAQgI,WAE7B,IAAI7E,EAAUqG,EAAeT,EACzB,CAAC,MAAO,UAAU/R,SAAS8R,IAC3B3F,EAAOJ,EAAKiG,aACZQ,EAAY,SACA,QAARV,IACAC,EAAiB/I,EAAQ6I,OACrB,IACA,gBAGR1F,EAAOJ,EAAKkG,YACZO,EAAY,QACA,SAARV,IACAC,EAAiB/I,EAAQ6I,OACrB,IACA,gBAIZ,MAAMvR,GAAU6L,EAAOa,GAAUnS,QAAQ,GAIzC,GAFAkR,EAAKqF,MAAMC,YAAYmB,EAAW,GAAGlS,OAEjCyR,EAAgB,CAChB,MAAMG,GAAmB/F,EAAO7L,GAAQzF,QAAQ,GAC5CmO,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,YAAYU,KAAkBG,QAElEnG,EAAKqF,MAAMC,YAAYU,EAAgB,GAAGG,MAElE,IAEYlJ,EACH,IAKL,OAFAjI,KAEO,IAAIqM,GAAayD,EAC5B,CAcO,SAAS4B,GAAWjF,EAAUxE,GACjC,MAAMsF,EAAQU,GAAWxB,GAEzBxE,EAAU,CACNgI,UAAW,SACXa,QAAQ,KACL7I,GAGP,MAAM6H,EAAgBvC,EAAMrU,KAAK8R,IAC7B,MAAMqG,EAAgBrG,EAAKqF,MAAMiB,OAC3BC,EAAevG,EAAKqF,MAAMmB,MAGhC,OAFAxG,EAAKqF,MAAMC,YAAY,WAAY,UAE5B,IAAIjF,GACPL,GACA,CAACA,EAAMiB,EAAUhE,KAIb,GAHA+C,EAAKqF,MAAMC,YAAY,SAAUe,GACjCrG,EAAKqF,MAAMC,YAAY,QAASiB,GAEf,IAAbtF,EAQA,OAPAjB,EAAKqF,MAAMC,YAAY,WAAY,SAC/BrI,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,KAEpCtF,EAAKqF,MAAMC,YAAY,cAAe,IACtCtF,EAAKqF,MAAMC,YAAY,aAAc,MAK7C,MAAMS,EAAM3V,EAAS6M,EAAQgI,WAE7B,IAAI7E,EAAUqG,EAAeT,EACzB,CAAC,MAAO,UAAU/R,SAAS8R,IAC3B3F,EAAOJ,EAAKiG,aACZQ,EAAY,SACA,QAARV,IACAC,EAAiB/I,EAAQ6I,OACrB,IACA,gBAGR1F,EAAOJ,EAAKkG,YACZO,EAAY,QACA,SAARV,IACAC,EAAiB/I,EAAQ6I,OACrB,IACA,gBAIZ,MAAMvR,GAAU6L,EAAQA,EAAOa,GAAWnS,QAAQ,GAIlD,GAFAkR,EAAKqF,MAAMC,YAAYmB,EAAW,GAAGlS,OAEjCyR,EAAgB,CAChB,MAAMG,GAAmB/F,EAAO7L,GAAQzF,QAAQ,GAC5CmO,EAAQ6I,OACR9F,EAAKqF,MAAMC,YAAY,YAAa,YAAYU,KAAkBG,QAElEnG,EAAKqF,MAAMC,YAAYU,EAAgB,GAAGG,MAElE,IAEYlJ,EACH,IAKL,OAFAjI,KAEO,IAAIqM,GAAayD,EAC5B,CCrbO,SAAS5S,GAAMuP,GAClB,MAAMzB,EAAO0B,GAAUD,EAAU,CAC7BzB,MAAM,IAGV,GAAKA,GAASA,EAAK2G,WAInB,OAAO3X,EAAM,GAAIgR,EAAK2G,WAAWtE,UAAUtF,QAAQiD,EACvD,CAQO,SAASjD,GAAQ0E,EAAU0C,GAG9B,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTyD,UAAUzC,EACjB,CAMO,SAAS0C,GAAUpF,GACtB,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,IAAK,MAAM4S,KAAQuC,EACfvC,EAAK6G,WAEb,CAOO,SAASC,GAAUrF,GACtB,OAAOrF,GACH2K,GAAetF,GAEvB,CAOO,SAASsF,GAAetF,GAC3B,OAAOwB,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,IACThU,QACC,CAAC4M,EAAQiE,KACL,GACKlU,EAAUkU,IAASA,EAAKwE,QAAQ,SACjCnY,EAAW2T,IACXhT,EAASgT,GAET,OAAOjE,EAAO3K,OACV2V,GACI/G,EAAKgD,iBACD,6BAMhB,GACIlX,EAAUkU,IACVA,EAAKwE,QAAQ,4IAEb,OAAOzI,EAGX,MAAMU,EAAOuD,EAAKgH,aAAa,QAC/B,IAAKvK,EACD,OAAOV,EAGX,GACIjQ,EAAUkU,IACVA,EAAKwE,QAAQ,oBAEb,IAAK,MAAMyC,KAAUjH,EAAKkH,gBACtBnL,EAAOxM,KACH,CACIkN,OACA/Q,MAAOub,EAAOvb,OAAS,UAKnCqQ,EAAOxM,KACH,CACIkN,OACA/Q,MAAOsU,EAAKtU,OAAS,KAKjC,OAAOqQ,CAAM,GAEjB,GAER,CAOO,SAASoL,GAAK1F,GACjB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IACTqX,MAAK,CAACnH,EAAM3Q,KACX,GAAIxD,EAASmU,GACT,OAAO,EAGX,GAAInU,EAASwD,GACT,OAAQ,EAGZ,GAAIlD,EAAW6T,GACX,OAAO,EAGX,GAAI7T,EAAWkD,GACX,OAAQ,EAGZ,GAAIhD,EAAWgD,GACX,OAAO,EAGX,GAAIhD,EAAW2T,GACX,OAAQ,EAWZ,GARIhT,EAASgT,KACTA,EAAOA,EAAK1T,MAGZU,EAASqC,KACTA,EAAQA,EAAM/C,MAGd0T,EAAKyE,WAAWpV,GAChB,OAAO,EAGX,MAAMyN,EAAMkD,EAAKoH,wBAAwB/X,GAEzC,OAAIyN,EAAMuK,KAAKC,6BAA+BxK,EAAMuK,KAAKE,gCAC7C,EAGRzK,EAAMuK,KAAKG,6BAA+B1K,EAAMuK,KAAKI,2BAC9C,EAGJ,CAAC,GAEhB,CAOO,SAAShE,GAAQhC,GACpB,MAAMzB,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAKyD,QAAQzR,aACxB,CC7MO,SAAS0V,GAAMjG,EAAU0C,GAC5B,OAAO9B,GAASZ,EAAU0C,EAAY,CAAEwD,OAAO,GACnD,CAWO,SAAStF,GAASZ,EAAU0C,GAAYwD,MAAEA,GAAQ,EAAKC,aAAEA,GAAe,GAAS,IACpFzD,EAAaI,GAAYJ,GAEzB,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGRgW,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMJ,EACFnT,EAAM,GADS4Y,EACL5H,EAAKqC,SACLrC,EAAKmC,YAEnB,IAAK,MAAMuF,KAASvF,EAChB,GAAKgC,EAAWuD,KAIhBtE,EAAQ7T,KAAKmY,GAETC,GACA,KAGhB,CAEI,OAAOpF,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CASO,SAASyE,GAAQpG,EAAU0C,EAAY2D,GAC1C,OAAOC,GAAQtG,EAAU0C,EAAY2D,EAAa,CAAEH,OAAO,GAC/D,CAOO,SAASK,GAAevG,GAC3B,MAAMc,EAAQ4E,GAAK1F,GAEnB,IAAKc,EAAMrW,OACP,OAIJ,GAAIqW,EAAMvO,MAAMgM,IAAUA,EAAK2G,aAC3B,OAGJ,MAAMsB,EAAQnG,KASd,OAPqB,IAAjBS,EAAMrW,OACN+b,EAAMC,WAAW3F,EAAMxR,UAEvBkX,EAAME,eAAe5F,EAAMxR,SAC3BkX,EAAMG,YAAY7F,EAAM8F,QAGrBJ,EAAMK,uBACjB,CAOO,SAASC,GAAS9G,GACrB,OAAOY,GAASZ,GAAU,EAAO,CAAEmG,cAAc,GACrD,CAOO,SAAS1E,GAASzB,GACrB,MAAMzB,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAKwI,OAChB,CAQO,SAASC,GAAKhH,EAAU0C,GAC3BA,EAAaI,GAAYJ,GAGzB,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EACb,KAAOvC,EAAOA,EAAK0I,aACf,GAAK5c,EAAUkU,GAAf,CAIImE,EAAWnE,IACXoD,EAAQ7T,KAAKyQ,GAGjB,KANZ,CAUI,OAAOuC,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAUO,SAASuF,GAAQlH,EAAU0C,EAAY2D,GAAaH,MAAEA,GAAQ,GAAU,IAC3ExD,EAAaI,GAAYJ,GACzB2D,EAAcvD,GAAYuD,GAAa,GAGvC,MAAMvF,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EACb,KAAOvC,EAAOA,EAAK0I,aACf,GAAK5c,EAAUkU,GAAf,CAIA,GAAI8H,EAAY9H,GACZ,MAGJ,GAAKmE,EAAWnE,KAIhBoD,EAAQ7T,KAAKyQ,GAET2H,GACA,KAbhB,CAkBI,OAAOpF,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAOO,SAASwF,GAAanH,GACzB,MAAMzB,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAK4I,YAChB,CAQO,SAASC,GAAOpH,EAAU0C,GAC7BA,EAAaI,GAAYJ,GAGzB,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EACbvC,EAAOA,EAAK2G,WAEP3G,GAIAmE,EAAWnE,IAIhBoD,EAAQ7T,KAAKyQ,GAGjB,OAAOuC,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAUO,SAAS2E,GAAQtG,EAAU0C,EAAY2D,GAAaH,MAAEA,GAAQ,GAAU,IAC3ExD,EAAaI,GAAYJ,GACzB2D,EAAcvD,GAAYuD,GAAa,GAGvC,MAAMvF,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EAAO,CACpB,MAAMwF,EAAU,GAChB,MAAO/H,EAAOA,EAAK2G,cACXxa,EAAW6T,KAIX8H,EAAY9H,MAIXmE,EAAWnE,KAIhB+H,EAAQe,QAAQ9I,IAEZ2H,MAKRvE,EAAQ7T,QAAQwY,EACxB,CAEI,OAAOxF,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAQO,SAAS2F,GAAKtH,EAAU0C,GAC3BA,EAAaI,GAAYJ,GAGzB,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EACb,KAAOvC,EAAOA,EAAKgJ,iBACf,GAAKld,EAAUkU,GAAf,CAIImE,EAAWnE,IACXoD,EAAQ7T,KAAKyQ,GAGjB,KANZ,CAUI,OAAOuC,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAUO,SAAS6F,GAAQxH,EAAU0C,EAAY2D,GAAaH,MAAEA,GAAQ,GAAU,IAC3ExD,EAAaI,GAAYJ,GACzB2D,EAAcvD,GAAYuD,GAAa,GAGvC,MAAMvF,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,IAAIpD,KAAQuC,EAAO,CACpB,MAAM2G,EAAW,GACjB,KAAOlJ,EAAOA,EAAKgJ,iBACf,GAAKld,EAAUkU,GAAf,CAIA,GAAI8H,EAAY9H,GACZ,MAGJ,GAAKmE,EAAWnE,KAIhBkJ,EAASJ,QAAQ9I,GAEb2H,GACA,KAbhB,CAiBQvE,EAAQ7T,QAAQ2Z,EACxB,CAEI,OAAO3G,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CAOO,SAASD,GAAO1B,GACnB,MAAMzB,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAKmJ,UAChB,CAUO,SAASD,GAASzH,EAAU0C,GAAYyD,aAAEA,GAAe,GAAS,IACrEzD,EAAaI,GAAYJ,GAGzB,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGJoD,EAAU,GAEhB,IAAK,MAAMpD,KAAQuC,EAAO,CACtB,MAAMsG,EAAS7I,EAAK2G,WAEpB,IAAKkC,EACD,SAGJ,MAAMK,EAAWtB,EACbiB,EAAOxG,SACPwG,EAAO1G,WAEX,IAAIiH,EACJ,IAAKA,KAAWF,EACRlJ,EAAKyE,WAAW2E,IAIfjF,EAAWiF,IAIhBhG,EAAQ7T,KAAK6Z,EAEzB,CAEI,OAAO7G,EAAMrW,OAAS,GAAKkX,EAAQlX,OAAS,EACxCuD,EAAO2T,GACPA,CACR,CCvYO,SAASiG,GAAgBrJ,EAAMyB,EAAUvR,GAC5C,MAAMoZ,EAAc7H,EAASvN,MAAM,iEA7CvC,SAAoC8L,EAAMyB,GACtC,OAAQ8H,IACJ,MAAM/E,EAAUxV,EAAM,GAAIgR,EAAKgD,iBAAiBvB,IAEhD,QAAK+C,EAAQtY,SAITsY,EAAQvQ,SAASsV,GACVA,EAGJ1B,GACH0B,GACCV,GAAWrE,EAAQvQ,SAAS4U,KAC5BA,GAAWA,EAAOpE,WAAWzE,KAChCjP,QAAO,CAEjB,CA4BQyY,CAA2BxJ,EAAMyB,GApBzC,SAAiCzB,EAAMyB,GACnC,OAAQ8H,GACJA,EAAO/E,SAAW+E,EAAO/E,QAAQ/C,GAC7B8H,EACA1B,GACI0B,GACCV,GAAWA,EAAOrE,QAAQ/C,KAC1BoH,GAAWA,EAAOpE,WAAWzE,KAChCjP,OACd,CAYQ0Y,CAAwBzJ,EAAMyB,GAElC,OAAQ5J,IACJ,GAAImI,EAAKyE,WAAW5M,EAAM0R,QACtB,OAGJ,MAAMG,EAAWJ,EAAYzR,EAAM0R,QAEnC,OAAKG,GAIL7c,OAAO8c,eAAe9R,EAAO,gBAAiB,CAC1CnM,MAAOge,EACPE,cAAc,IAElB/c,OAAO8c,eAAe9R,EAAO,iBAAkB,CAC3CnM,MAAOsU,EACP4J,cAAc,IAGX1Z,EAAS2H,SAbhB,CAasB,CAE9B,CA2FO,SAASgS,GAAiBC,EAAW5Z,GACxC,OAAQ2H,IACJ,KAAI,oBAAqBA,IAAUA,EAAMkS,gBAAgB1M,KAAKyM,GAI9D,OAAO5Z,EAAS2H,EAAM,CAE9B,CAOO,SAASmS,GAAe9Z,GAC3B,OAAQ2H,KACoB,IAApB3H,EAAS2H,IACTA,EAAMoS,gBAClB,CAEA,CAYO,SAASC,GAAoBlK,EAAM8J,EAAW5Z,GAAUia,QAAEA,EAAU,KAAIT,SAAEA,EAAW,MAAS,IACjG,OAAQ7R,IACJuS,GAAYpK,EAAM8J,EAAW5Z,EAAU,CAAEia,UAAST,aAC3CxZ,EAAS2H,GAExB,CCpMO,SAASwS,GAAS5I,EAAU6I,EAAYpa,GAAUia,QAAEA,GAAU,EAAKT,SAAEA,EAAW,KAAIa,QAAEA,GAAU,EAAKC,aAAEA,GAAe,GAAU,IACnI,MAAMjI,EAAQU,GAAWxB,EAAU,CAC/B0B,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZwa,EAAavR,GAAYuR,GAEzB,IAAK,MAAMR,KAAaQ,EAAY,CAChC,MAAMG,EAAgB3R,GAAWgR,GAE3BY,EAAY,CACdxa,WACAwZ,WACAc,eACAL,UACAI,WAGJ,IAAK,MAAMvK,KAAQuC,EAAO,CACjBvJ,GAAO0H,IAAIV,IACZhH,GAAOmD,IAAI6D,EAAM,IAGrB,MAAM2K,EAAa3R,GAAO2H,IAAIX,GAE9B,IAAI4K,EAAe1a,EAEfsa,IACAI,EAAeV,GAAoBlK,EAAM8J,EAAWc,EAAc,CAAET,UAAST,cAGjFkB,EAAeZ,GAAeY,GAE1BlB,IACAkB,EAAevB,GAAgBrJ,EAAM0J,EAAUkB,IAGnDA,EAAef,GAAiBC,EAAWc,GAE3CF,EAAUE,aAAeA,EACzBF,EAAUZ,UAAYA,EACtBY,EAAUD,cAAgBA,EAErBE,EAAWF,KACZE,EAAWF,GAAiB,IAGhCE,EAAWF,GAAelb,KAAK,IAAKmb,IAEpC1K,EAAK6K,iBAAiBJ,EAAeG,EAAc,CAAET,UAASI,WAC1E,CACA,CACA,CAYO,SAASO,GAAiBrJ,EAAUzI,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAC1GF,GAAS5I,EAAUzI,EAAQ9I,EAAU,CAAEia,UAAST,WAAUa,WAC9D,CAYO,SAASQ,GAAqBtJ,EAAUzI,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAC9GF,GAAS5I,EAAUzI,EAAQ9I,EAAU,CAAEia,UAAST,WAAUa,UAASC,cAAc,GACrF,CAWO,SAASQ,GAAavJ,EAAUzI,EAAQ9I,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAC5FF,GAAS5I,EAAUzI,EAAQ9I,EAAU,CAAEia,UAASI,UAASC,cAAc,GAC3E,CAOO,SAASS,GAAYxJ,EAAUyJ,GAClC,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/B0B,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EAAO,CACtB,MAAMoI,EAAa3R,GAAO2H,IAAIX,GAE9B,IAAK,MAAMmL,KAActe,OAAOkP,OAAO4O,GACnC,IAAK,MAAMD,KAAaS,EACpBd,GACIa,EACAR,EAAUZ,UACVY,EAAUxa,SACV,CACIia,QAASO,EAAUP,QACnBT,SAAUgB,EAAUhB,SACpBa,QAASG,EAAUH,QACnBC,aAAcE,EAAUF,cAKhD,CACA,CAWO,SAASJ,GAAY3I,EAAU6I,EAAYpa,GAAUia,QAAEA,EAAU,KAAIT,SAAEA,EAAW,MAAS,IAC9F,MAAMnH,EAAQU,GAAWxB,EAAU,CAC/B0B,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZ,IAAI6K,EACJ,GAAI2P,EAAY,CACZA,EAAavR,GAAYuR,GAEzB3P,EAAc,GAEd,IAAK,MAAMmP,KAAaQ,EAAY,CAChC,MAAMG,EAAgB3R,GAAWgR,GAE3BW,KAAiB9P,IACnBA,EAAY8P,GAAiB,IAGjC9P,EAAY8P,GAAelb,KAAKua,EAC5C,CACA,CAEI,IAAK,MAAM9J,KAAQuC,EAAO,CACtB,IAAKvJ,GAAO0H,IAAIV,GACZ,SAGJ,MAAM2K,EAAa3R,GAAO2H,IAAIX,GAE9B,IAAK,MAAOyK,EAAeU,KAAete,OAAOyL,QAAQqS,GACjDhQ,KAAiB8P,KAAiB9P,IAIlBwQ,EAAWpX,QAAQ2W,MAC/B/P,GAAgBA,EAAY8P,GAAezW,MAAM8V,IACjD,GAAIA,IAAcW,EACd,OAAO,EAGX,MAAMW,EAASxT,EAAsBkS,GAErC,OAAOY,EAAUZ,UAAU5V,MAAMkX,EAAO,SAKxClb,GAAYA,IAAawa,EAAUxa,cAInCwZ,GAAYA,IAAagB,EAAUhB,WAIvB,OAAZS,GAAoBA,IAAYO,EAAUP,UAI9CnK,EAAKqL,oBAAoBZ,EAAeC,EAAUE,aAAcF,EAAUP,UAEnE,KAGMje,eACNye,EAAWF,GAIrB5d,OAAOgE,KAAK8Z,GAAYze,QACzB8M,GAAOmH,OAAOH,EAE1B,CACA,CAWO,SAASsL,GAAoB7J,EAAUzI,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,EAAU,MAAS,IAC3FC,GAAY3I,EAAUzI,EAAQ9I,EAAU,CAAEia,UAAST,YACvD,CAYO,SAAS6B,GAAa9J,EAAUzI,GAAQnD,KAAEA,EAAO,KAAI2V,OAAEA,EAAS,KAAIC,QAAEA,GAAU,EAAIC,WAAEA,GAAa,GAAS,IAC/G,MAAMnJ,EAAQU,GAAWxB,EAAU,CAC/B0B,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZkJ,EAASD,GAAYC,GAErB,IAAK,MAAMnB,KAASmB,EAAQ,CACxB,MAAM2S,EAAY7S,GAAWjB,GAEvB6S,EAAY,IAAIkB,YAAYD,EAAW,CACzCH,SACAC,UACAC,eAGA7V,GACAhJ,OAAOgf,OAAOnB,EAAW7U,GAGzB8V,IAAc9T,IACd6S,EAAUoB,UAAYjU,EAAMvF,UAAUqZ,EAAUzf,OAAS,GACzDwe,EAAUX,gBAAkBnS,EAAsBC,IAGtD,IAAK,MAAMmI,KAAQuC,EACfvC,EAAK+L,cAAcrB,EAE/B,CACA,CAaO,SAASsB,GAAWvK,EAAU5J,GAAOhC,KAAEA,EAAO,KAAI2V,OAAEA,EAAS,KAAIC,QAAEA,GAAU,EAAIC,WAAEA,GAAa,GAAS,IAC5G,MAAM1L,EAAO0B,GAAUD,EAAU,CAC7B0B,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGN6b,EAAY7S,GAAWjB,GAEvB6S,EAAY,IAAIkB,YAAYD,EAAW,CACzCH,SACAC,UACAC,eAYJ,OATI7V,GACAhJ,OAAOgf,OAAOnB,EAAW7U,GAGzB8V,IAAc9T,IACd6S,EAAUoB,UAAYjU,EAAMvF,UAAUqZ,EAAUzf,OAAS,GACzDwe,EAAUX,gBAAkBnS,EAAsBC,IAG/CmI,EAAK+L,cAAcrB,EAC9B,CCpTO,SAAS9J,GAAMa,GAAUwK,KAAEA,GAAO,EAAIjT,OAAEA,GAAS,EAAKnD,KAAEA,GAAO,EAAKiF,WAAEA,GAAa,GAAU,IAOhG,OALcmI,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,IAGDhV,KAAK8R,IACd,MAAMY,EAAQZ,EAAKkM,UAAUD,GAM7B,OAJIjT,GAAUnD,GAAQiF,IAClBqR,GAAUnM,EAAMY,EAAO,CAAEqL,OAAMjT,SAAQnD,OAAMiF,eAG1C8F,CAAK,GAEpB,CAYA,SAASuL,GAAUnM,EAAMY,GAAOqL,KAAEA,GAAO,EAAIjT,OAAEA,GAAS,EAAKnD,KAAEA,GAAO,EAAKiF,WAAEA,GAAa,GAAU,IAChG,GAAI9B,GAAUoT,GAAQ1L,IAAIV,GAAO,CAC7B,MAAM2K,EAAayB,GAAQzL,IAAIX,GAE/B,IAAK,MAAMmL,KAActe,OAAOkP,OAAO4O,GACnC,IAAK,MAAMD,KAAaS,EACpBd,GACIzJ,EACA8J,EAAUZ,UACVY,EAAUxa,SACV,CACIia,QAASO,EAAUP,QACnBT,SAAUgB,EAAUhB,SACpBc,aAAcE,EAAUF,cAKhD,CAEI,GAAI3U,GAAQwW,GAAM3L,IAAIV,GAAO,CACzB,MAAMsM,EAAWD,GAAM1L,IAAIX,GAC3BqM,GAAMlQ,IAAIyE,EAAO,IAAK0L,GAC9B,CAEI,GAAIxR,GAAcwG,GAAYZ,IAAIV,GAAO,CACrC,MAAMuM,EAAiBjL,GAAYX,IAAIX,GAEvC,IAAK,MAAMnN,KAAa0Z,EACpB1Z,EAAU+N,MAAMA,EAE5B,CAEI,GAAIqL,EACA,IAAK,MAAO7W,EAAGsS,KAAU1H,EAAKmC,WAAW7J,UAErC6T,GAAUzE,EADS9G,EAAMuB,WAAW6B,KAAK5O,GACZ,CAAE6W,OAAIjT,OAAEA,EAAMnD,KAAEA,EAAIiF,WAAEA,GAG/D,CAOO,SAAS0R,GAAO/K,GAEnB,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGV,IAAK,MAAMA,KAAQuC,EACfvC,EAAKyM,SAGT,OAAOlK,CACX,CAMO,SAASmK,GAAMjL,GAClB,MAAMc,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAGd,IAAK,MAAM4S,KAAQuC,EAAO,CACtB,MAAMJ,EAAanT,EAAM,GAAIgR,EAAKmC,YAGlC,IAAK,MAAMuF,KAASvF,GACZrW,EAAUkU,IAAS3T,EAAW2T,IAAShT,EAASgT,KAChD2M,GAAWjF,GAGfA,EAAM+E,SAINzM,EAAKmJ,YACLwD,GAAW3M,EAAKmJ,YAIhBnJ,EAAKwI,SACLmE,GAAW3M,EAAKwI,QAE5B,CACA,CAMO,SAASiE,GAAOhL,GACnB,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAGZ,IAAK,MAAMnD,KAAQuC,GACXzW,EAAUkU,IAAS3T,EAAW2T,IAAShT,EAASgT,KAChD2M,GAAW3M,GAIXvT,EAAOuT,IACPA,EAAKyM,QAGjB,CAMO,SAASE,GAAW3M,GACvB,GAAIoM,GAAQ1L,IAAIV,GAAO,CACnB,MAAM2K,EAAayB,GAAQzL,IAAIX,GAE/B,GAAI,WAAY2K,EAAY,CACxB,MAAMD,EAAY,IAAIkB,YAAY,SAAU,CACxCH,SAAS,EACTC,YAAY,IAGhB1L,EAAK+L,cAAcrB,EAC/B,CAEQ,IAAK,MAAOD,EAAeU,KAAete,OAAOyL,QAAQqS,GACrD,IAAK,MAAMD,KAAaS,EACpBnL,EAAKqL,oBAAoBZ,EAAeC,EAAUE,aAAc,CAAET,QAASO,EAAUP,UAI7FiC,GAAQjM,OAAOH,EACvB,CAMI,GAJI/E,GAAOyF,IAAIV,IACX/E,GAAOkF,OAAOH,GAGdsB,GAAYZ,IAAIV,GAAO,CACvB,MAAMuM,EAAiBjL,GAAYX,IAAIX,GACvC,IAAK,MAAMnN,KAAa0Z,EACpB1Z,EAAUgO,MAEtB,CAEQ3F,GAAOwF,IAAIV,IACX9E,GAAOiF,OAAOH,GAGdqM,GAAM3L,IAAIV,IACVqM,GAAMlM,OAAOH,GAIjB,MAAMmC,EAAanT,EAAM,GAAIgR,EAAKqC,UAElC,IAAK,MAAMqF,KAASvF,EAChBwK,GAAWjF,GAIX1H,EAAKmJ,YACLwD,GAAW3M,EAAKmJ,YAIhBnJ,EAAKwI,SACLmE,GAAW3M,EAAKwI,QAExB,CAOO,SAASoE,GAAWnL,EAAUyJ,GACjC2B,GAAY3B,EAAezJ,EAC/B,CAOO,SAASoL,GAAYpL,EAAUyJ,GAElC,IAAI3I,EAAQU,GAAWxB,EAAU,CAC7BzB,MAAM,IAIN8M,EAAS7J,GAAWiI,EAAe,CACnClL,MAAM,EACNkD,UAAU,EACVhB,MAAM,IAIV,MAAMgB,EAAWtB,KAEjB,IAAK,MAAMvS,KAASyd,EAChB5J,EAAS6J,aAAa1d,EAAO,MAGjCyd,EAAS9d,EAAM,GAAIkU,EAASf,YAE5BI,EAAQA,EAAMxO,QAAQiM,IACjB8M,EAAO7Y,SAAS+L,KAChBuC,EAAMvO,MAAM3E,IACRA,EAAMoV,WAAWzE,IAClB3Q,EAAMsV,SAAS3E,OAIvB,IAAK,MAAO5K,EAAG4K,KAASuC,EAAMjK,UAAW,CACrC,MAAMuQ,EAAS7I,EAAK2G,WAEpB,IAAKkC,EACD,SAGJ,IAAImE,EAEAA,EADA5X,IAAMmN,EAAMrW,OAAS,EACZ4gB,EAEAlM,GAAMkM,EAAQ,CACnB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAIpB,IAAK,MAAM8F,KAASoM,EAChBnE,EAAOkE,aAAanM,EAAOZ,EAEvC,CAEIyM,GAAOlK,EACX,CCzRO,SAASyE,GAAavF,EAAUwL,GACnC,MAAMjN,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAIiN,EACOjN,EAAKgH,aAAaiG,GAGtBpgB,OAAOwL,YACVrJ,EAAM,GAAIgR,EAAKkN,YACVhf,KAAK+e,GAAc,CAACA,EAAUE,SAAUF,EAAUG,aAE/D,CAQO,SAASC,GAAW5L,EAAU9Q,GACjC,MAAMqP,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAIrP,GACAA,EAAMsB,EAAUtB,GAET8H,GAAauH,EAAKQ,QAAQ7P,KAG9B9D,OAAOwL,YACVxL,OAAOyL,QAAQ0H,EAAKQ,SACftS,KAAI,EAAEyC,EAAKjF,KAAW,CAACiF,EAAK8H,GAAa/M,MAEtD,CAOO,SAAS4hB,GAAQ7L,GACpB,OAAO8L,GAAY9L,EAAU,YACjC,CAQO,SAAS8L,GAAY9L,EAAU+L,GAClC,MAAMxN,EAAO0B,GAAUD,GAEvB,GAAKzB,EAIL,OAAOA,EAAKwN,EAChB,CAOO,SAASC,GAAQhM,GACpB,OAAO8L,GAAY9L,EAAU,cACjC,CAOO,SAASiM,GAASjM,GACrB,OAAO8L,GAAY9L,EAAU,QACjC,CAOO,SAASkM,GAAgBlM,EAAUwL,GACtC,MAAM1K,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACfvC,EAAK2N,gBAAgBV,EAE7B,CAOO,SAASW,GAAcnM,EAAU9Q,GACpC,MAAM4R,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACf5R,EAAMsB,EAAUtB,UAETqP,EAAKQ,QAAQ7P,EAE5B,CAOO,SAASkd,GAAepM,EAAU+L,GACrC,MAAMjL,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,SACRvC,EAAKwN,EAEpB,CAQO,SAASM,GAAarM,EAAUwL,EAAWvhB,GAC9C,MAAM6W,EAAQU,GAAWxB,GAEnByL,EAAa/U,EAAU8U,EAAWvhB,GAExC,IAAK,MAAOiF,EAAKjF,KAAUmB,OAAOyL,QAAQ4U,GACtC,IAAK,MAAMlN,KAAQuC,EACfvC,EAAK8N,aAAand,EAAKjF,EAGnC,CAQO,SAASqiB,GAAWtM,EAAU9Q,EAAKjF,GACtC,MAAM6W,EAAQU,GAAWxB,GAEnBjB,EAAUrI,EAAUxH,EAAKjF,EAAO,CAAE0M,MAAM,IAE9C,IAAK,IAAKzH,EAAKjF,KAAUmB,OAAOyL,QAAQkI,GAAU,CAC9C7P,EAAMsB,EAAUtB,GAChB,IAAK,MAAMqP,KAAQuC,EACfvC,EAAKQ,QAAQ7P,GAAOjF,CAEhC,CACA,CAOO,SAASsiB,GAAQvM,EAAUS,GAC9B,MAAMK,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACtB,MAAMJ,EAAanT,EAAM,GAAIgR,EAAKqC,UAElC,IAAK,MAAMqF,KAASvF,EAChBwK,GAAWjF,GAIX1H,EAAKmJ,YACLwD,GAAW3M,EAAKmJ,YAIhBnJ,EAAKwI,SACLmE,GAAW3M,EAAKwI,SAGpBxI,EAAKiO,UAAY/L,CACzB,CACA,CAQO,SAASoD,GAAY7D,EAAU+L,EAAU9hB,GAC5C,MAAM6W,EAAQU,GAAWxB,GAEnByM,EAAa/V,EAAUqV,EAAU9hB,GAEvC,IAAK,MAAOiF,EAAKjF,KAAUmB,OAAOyL,QAAQ4V,GACtC,IAAK,MAAMlO,KAAQuC,EACfvC,EAAKrP,GAAOjF,CAGxB,CAOO,SAASyiB,GAAQ1M,EAAU2M,GAC9B,MAAM7L,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACtB,MAAMJ,EAAanT,EAAM,GAAIgR,EAAKqC,UAElC,IAAK,MAAMqF,KAASvF,EAChBwK,GAAWjF,GAIX1H,EAAKmJ,YACLwD,GAAW3M,EAAKmJ,YAIhBnJ,EAAKwI,SACLmE,GAAW3M,EAAKwI,SAGpBxI,EAAKqO,YAAcD,CAC3B,CACA,CAOO,SAASE,GAAS7M,EAAU/V,GAC/B,MAAM6W,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACfvC,EAAKtU,MAAQA,CAErB,CC5PO,SAAS6iB,GAAU9M,EAAUyJ,GAChC,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGNgd,EAAS7J,GAAWiI,EAAe,CACrChI,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EACV1M,GAAK6K,IAAIV,IAKdwO,GAAQ1B,EAAQ,IADCjX,GAAK8K,IAAIX,IAGlC,CAQO,SAASyO,GAAQhN,EAAU9Q,GAC9B,MAAMqP,EAAO0B,GAAUD,EAAU,CAC7ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZ,IAAKkQ,IAASnK,GAAK6K,IAAIV,GACnB,OAGJ,MAAMsM,EAAWzW,GAAK8K,IAAIX,GAE1B,OAAOrP,EACH2b,EAAS3b,GACT2b,CACR,CAOO,SAASoC,GAAWjN,EAAU9Q,GACjC,MAAM4R,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EAAO,CACtB,IAAK1M,GAAK6K,IAAIV,GACV,SAGJ,MAAMsM,EAAWzW,GAAK8K,IAAIX,GAEtBrP,UACO2b,EAAS3b,GAGfA,GAAQ9D,OAAOgE,KAAKyb,GAAUpgB,QAC/B2J,GAAKsK,OAAOH,EAExB,CACA,CAQO,SAASwO,GAAQ/M,EAAU9Q,EAAKjF,GACnC,MAAM6W,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IAGN6e,EAAUxW,EAAUxH,EAAKjF,GAE/B,IAAK,MAAMsU,KAAQuC,EAAO,CACjB1M,GAAK6K,IAAIV,IACVnK,GAAKsG,IAAI6D,EAAM,IAGnB,MAAMsM,EAAWzW,GAAK8K,IAAIX,GAE1BnT,OAAOgf,OAAOS,EAAUqC,EAChC,CACA,CCvGO,SAASC,GAASnN,KAAaoN,GAClC,MAAMtM,EAAQU,GAAWxB,GAIzB,IAFAoN,EAAU9W,EAAa8W,IAEV3iB,OAIb,IAAK,MAAM8T,KAAQuC,EACfvC,EAAKhI,UAAU8W,OAAOD,EAE9B,CAQO,SAASE,GAAItN,EAAU4D,GAC1B,MAAMrF,EAAO0B,GAAUD,GAEvB,IAAKzB,EACD,OAGC9E,GAAOwF,IAAIV,IACZ9E,GAAOiB,IACH6D,EACA5I,IAAY4X,iBAAiBhP,IAIrC,MAAMiP,EAAa/T,GAAOyF,IAAIX,GAE9B,OAAKqF,GAILA,EAAQ7S,EAAU6S,GAEX4J,EAAWC,iBAAiB7J,IALxB,IAAK4J,EAMpB,CAQO,SAASE,GAAS1N,EAAU4D,GAC/B,MAAMrF,EAAO0B,GAAUD,GAEvB,IAAKzB,EACD,OAGJ,GAAIqF,EAGA,OAFAA,EAAQ7S,EAAU6S,GAEXrF,EAAKqF,MAAMA,GAGtB,MAAMnK,EAAS,GAEf,IAAK,MAAMmK,KAASrF,EAAKqF,MACrBnK,EAAOmK,GAASrF,EAAKqF,MAAMA,GAG/B,OAAOnK,CACX,CAMO,SAASkU,GAAK3N,GACjB,MAAMc,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACfvC,EAAKqF,MAAMC,YAAY,UAAW,OAE1C,CAOO,SAAS+J,GAAY5N,KAAaoN,GACrC,MAAMtM,EAAQU,GAAWxB,GAIzB,IAFAoN,EAAU9W,EAAa8W,IAEV3iB,OAIb,IAAK,MAAM8T,KAAQuC,EACfvC,EAAKhI,UAAUyU,UAAUoC,EAEjC,CAUO,SAASS,GAAS7N,EAAU4D,EAAO3Z,GAAO6jB,UAAEA,GAAY,GAAU,IACrE,MAAMhN,EAAQU,GAAWxB,GAEnBvG,EAAS/C,EAAUkN,EAAO3Z,GAEhC,IAAK,IAAK2Z,EAAO3Z,KAAUmB,OAAOyL,QAAQ4C,GAAS,CAC/CmK,EAAQ7S,EAAU6S,GAGd3Z,GAASO,EAAUP,KAAW8jB,IAAIC,SAASpK,EAAO3Z,KAClDA,GAAS,MAGb,IAAK,MAAMsU,KAAQuC,EACfvC,EAAKqF,MAAMC,YACPD,EACA3Z,EACA6jB,EACI,YACA,GAGpB,CACA,CAMO,SAASG,GAAKjO,GACjB,MAAMc,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACfvC,EAAKqF,MAAMC,YAAY,UAAW,GAE1C,CAMO,SAASqK,GAAOlO,GACnB,MAAMc,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EACfvC,EAAKqF,MAAMC,YACP,UACuB,SAAvBtF,EAAKqF,MAAMuK,QACP,GACA,OAGhB,CAOO,SAASC,GAAYpO,KAAaoN,GACrC,MAAMtM,EAAQU,GAAWxB,GAIzB,IAFAoN,EAAU9W,EAAa8W,IAEV3iB,OAIb,IAAK,MAAM8T,KAAQuC,EACf,IAAK,MAAMe,KAAauL,EACpB7O,EAAKhI,UAAU2X,OAAOrM,EAGlC,CCxLO,SAASwM,GAAOrO,GAAUsO,OAAEA,GAAS,GAAU,IAClD,MAAMC,EAAUC,GAAKxO,EAAU,CAAEsO,WAEjC,GAAKC,EAIL,MAAO,CACHtK,EAAGsK,EAAQE,KAAOF,EAAQxJ,MAAQ,EAClCb,EAAGqK,EAAQG,IAAMH,EAAQ1J,OAAS,EAE1C,CAOO,SAAS8J,GAAU3O,EAAU4O,GAChC,MAAMC,EAAeL,GAAKI,GAE1B,IAAKC,EACD,OAGJ,MAAM/N,EAAQU,GAAWxB,GAEnB1K,EAAUI,IACVrH,EAASsH,IACTmZ,EAAczd,GAAMiE,EAAQyZ,gBAAgBC,aAAe3gB,EAAO4gB,YAClEC,EAAc7d,GAAMiE,EAAQyZ,gBAAgBI,YAAc9gB,EAAO+gB,WAEjEC,EAAaP,IACbQ,EAAaJ,IAEnB,IAAK,MAAM3Q,KAAQuC,EAAO,CACtB,MAAMyN,EAAUC,GAAKjQ,GAUrB,IAAIgR,EAaAC,EANJ,GAfIjB,EAAQ1J,OAASgK,EAAahK,QAC9BtG,EAAKqF,MAAMC,YAAY,SAAU,GAAGgL,EAAahK,YAGjD0J,EAAQxJ,MAAQ8J,EAAa9J,OAC7BxG,EAAKqF,MAAMC,YAAY,QAAS,GAAGgL,EAAa9J,WAIhDwJ,EAAQE,KAAOI,EAAaJ,KAAO,EACnCc,EAAahB,EAAQE,KAAOI,EAAaJ,KAClCF,EAAQkB,MAAQZ,EAAaY,MAAQ,IAC5CF,EAAahB,EAAQkB,MAAQZ,EAAaY,OAG1CF,EAAY,CACZ,MAAMG,EAAUpC,GAAI/O,EAAM,QACpBoR,EAAWD,GAAuB,SAAZA,EAAqBxkB,WAAWwkB,GAAW,EACvEnR,EAAKqF,MAAMC,YAAY,OAAW8L,EAAWJ,EAAd,KAC3C,CASQ,GANIhB,EAAQG,IAAMG,EAAaH,IAAM,EACjCc,EAAYjB,EAAQG,IAAMG,EAAaH,IAChCH,EAAQqB,OAASf,EAAae,OAAS,IAC9CJ,EAAYjB,EAAQqB,OAASf,EAAae,QAG1CJ,EAAW,CACX,MAAMK,EAASvC,GAAI/O,EAAM,OACnBuR,EAAUD,GAAqB,SAAXA,EAAoB3kB,WAAW2kB,GAAU,EACnEtR,EAAKqF,MAAMC,YAAY,MAAUiM,EAAUN,EAAb,KAC1C,CAEsC,WAA1BlC,GAAI/O,EAAM,aACVA,EAAKqF,MAAMC,YAAY,WAAY,WAE/C,CAEI,MAAMkM,EAAcjB,IACdkB,EAAcd,IAEhBG,IAAeU,GAAeT,IAAeU,GAC7CrB,GAAU7N,EAAO8N,EAEzB,CAWO,SAASqB,GAAOjQ,EAAUiE,EAAGC,GAAGoK,OAAEA,GAAS,GAAU,IACxD,MAAM4B,EAAa7B,GAAOrO,EAAU,CAAEsO,WAEtC,GAAK4B,EAIL,OAAOhkB,EAAKgkB,EAAWjM,EAAGiM,EAAWhM,EAAGD,EAAGC,EAC/C,CAQO,SAASiM,GAAWnQ,EAAUyJ,GACjC,MAAM2G,EAAc/B,GAAO5E,GAE3B,GAAK2G,EAIL,OAAOH,GAAOjQ,EAAUoQ,EAAYnM,EAAGmM,EAAYlM,EACvD,CAWO,SAASmM,GAAUrQ,EAAUiE,EAAGC,GAAGoK,OAAEA,GAAS,GAAU,IAC3D,IAAIlI,EACAkK,EAAkBvlB,OAAOwlB,UAE7B,MAAMzP,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACtB,MAAM5U,EAAO+jB,GAAO1R,EAAM0F,EAAGC,EAAG,CAAEoK,WAC9BpiB,GAAQA,EAAOokB,IACfA,EAAkBpkB,EAClBka,EAAU7H,EAEtB,CAEI,OAAO6H,CACX,CAQO,SAASoK,GAAcxQ,EAAUyJ,GACpC,MAAM2G,EAAc/B,GAAO5E,GAE3B,GAAK2G,EAIL,OAAOC,GAAUrQ,EAAUoQ,EAAYnM,EAAGmM,EAAYlM,EAC1D,CAWO,SAASuM,GAASzQ,EAAUiE,GAAGqK,OAAEA,GAAS,EAAKziB,MAAEA,GAAQ,GAAS,IACrE,MAAM0iB,EAAUC,GAAKxO,EAAU,CAAEsO,WAEjC,IAAKC,EACD,OAGJ,MAAMmC,GAAWzM,EAAIsK,EAAQE,MACzBF,EAAQxJ,MACR,IAEJ,OAAOlZ,EACHI,EAAaykB,GACbA,CACR,CAWO,SAASC,GAAS3Q,EAAUkE,GAAGoK,OAAEA,GAAS,EAAKziB,MAAEA,GAAQ,GAAS,IACrE,MAAM0iB,EAAUC,GAAKxO,EAAU,CAAEsO,WAEjC,IAAKC,EACD,OAGJ,MAAMmC,GAAWxM,EAAIqK,EAAQG,KACzBH,EAAQ1J,OACR,IAEJ,OAAOhZ,EACHI,EAAaykB,GACbA,CACR,CASO,SAASE,GAAS5Q,GAAUsO,OAAEA,GAAS,GAAU,IACpD,MAAM/P,EAAO0B,GAAUD,GAEvB,IAAKzB,EACD,OAGJ,MAAMvL,EAAS,CACXiR,EAAG1F,EAAKsS,WACR3M,EAAG3F,EAAKuS,WAGZ,GAAIxC,EAAQ,CACR,IAAInH,EAAe5I,EAEnB,KAAO4I,EAAeA,EAAaA,cAC/BnU,EAAOiR,GAAKkD,EAAa0J,WACzB7d,EAAOkR,GAAKiD,EAAa2J,SAErC,CAEI,OAAO9d,CACX,CASO,SAASwb,GAAKxO,GAAUsO,OAAEA,GAAS,GAAU,IAChD,MAAM/P,EAAO0B,GAAUD,GAEvB,IAAKzB,EACD,OAGJ,MAAMvL,EAASuL,EAAKwS,wBAEpB,GAAIzC,EAAQ,CACR,MAAMjgB,EAASsH,IACf3C,EAAOiR,GAAK5V,EAAO2iB,QACnBhe,EAAOkR,GAAK7V,EAAO4iB,OAC3B,CAEI,OAAOje,CACX,CC9QO,SAAS8b,GAAW9O,GACvB,MAAMzB,EAAO0B,GAAUD,EAAU,CAC7BrU,UAAU,EACV0C,QAAQ,IAGZ,GAAKkQ,EAIL,OAAInU,EAASmU,GACFA,EAAKyS,QAGZtmB,EAAW6T,GACJA,EAAK2S,iBAAiBC,WAG1B5S,EAAK4S,UAChB,CAOO,SAASjC,GAAWlP,GACvB,MAAMzB,EAAO0B,GAAUD,EAAU,CAC7BrU,UAAU,EACV0C,QAAQ,IAGZ,GAAKkQ,EAIL,OAAInU,EAASmU,GACFA,EAAK0S,QAGZvmB,EAAW6T,GACJA,EAAK2S,iBAAiBE,UAG1B7S,EAAK6S,SAChB,CAQO,SAASC,GAAUrR,EAAUiE,EAAGC,GACnC,MAAMpD,EAAQU,GAAWxB,EAAU,CAC/BrU,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EACX1W,EAASmU,GACTA,EAAK+S,OAAOrN,EAAGC,GACRxZ,EAAW6T,IAClBA,EAAK2S,iBAAiBC,WAAalN,EACnC1F,EAAK2S,iBAAiBE,UAAYlN,IAElC3F,EAAK4S,WAAalN,EAClB1F,EAAK6S,UAAYlN,EAG7B,CAOO,SAASqN,GAAWvR,EAAUiE,GACjC,MAAMnD,EAAQU,GAAWxB,EAAU,CAC/BrU,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EACX1W,EAASmU,GACTA,EAAK+S,OAAOrN,EAAG1F,EAAK0S,SACbvmB,EAAW6T,GAClBA,EAAK2S,iBAAiBC,WAAalN,EAEnC1F,EAAK4S,WAAalN,CAG9B,CAOO,SAASuN,GAAWxR,EAAUkE,GACjC,MAAMpD,EAAQU,GAAWxB,EAAU,CAC/BrU,UAAU,EACV0C,QAAQ,IAGZ,IAAK,MAAMkQ,KAAQuC,EACX1W,EAASmU,GACTA,EAAK+S,OAAO/S,EAAKyS,QAAS9M,GACnBxZ,EAAW6T,GAClBA,EAAK2S,iBAAiBE,UAAYlN,EAElC3F,EAAK6S,UAAYlN,CAG7B,CC7GO,SAASW,GAAO7E,GAAUyR,QAAEA,EvBZR,EuBY6BC,MAAEA,GAAQ,GAAU,IACxE,IAAInT,EAAO0B,GAAUD,EAAU,CAC3BrU,UAAU,EACV0C,QAAQ,IAGZ,IAAKkQ,EACD,OAGJ,GAAInU,EAASmU,GACT,OAAOmT,EACHnT,EAAK0Q,YACL1Q,EAAKoT,YAOb,GAJIjnB,EAAW6T,KACXA,EAAOA,EAAKwQ,iBAGZ0C,GvB7BkB,EuB8BlB,OAAOlT,EAAKyQ,aAGhB,IAAIhc,EAASuL,EAAKiG,aAiBlB,OAfIiN,GvBvCmB,IuBwCnBze,GAAU4e,SAAStE,GAAI/O,EAAM,gBAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,oBAG7BkT,GvB1CkB,IuB2ClBze,GAAU4e,SAAStE,GAAI/O,EAAM,qBAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,yBAG7BkT,GvB9CkB,IuB+ClBze,GAAU4e,SAAStE,GAAI/O,EAAM,eAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,mBAG1BvL,CACX,CAUO,SAAS+R,GAAM/E,GAAUyR,QAAEA,EvBhEP,EuBgE4BC,MAAEA,GAAQ,GAAU,IACvE,IAAInT,EAAO0B,GAAUD,EAAU,CAC3BrU,UAAU,EACV0C,QAAQ,IAGZ,IAAKkQ,EACD,OAGJ,GAAInU,EAASmU,GACT,OAAOmT,EACHnT,EAAK6Q,WACL7Q,EAAKsT,WAOb,GAJInnB,EAAW6T,KACXA,EAAOA,EAAKwQ,iBAGZ0C,GvBjFkB,EuBkFlB,OAAOlT,EAAK4Q,YAGhB,IAAInc,EAASuL,EAAKkG,YAiBlB,OAfIgN,GvB3FmB,IuB4FnBze,GAAU4e,SAAStE,GAAI/O,EAAM,iBAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,mBAG7BkT,GvB9FkB,IuB+FlBze,GAAU4e,SAAStE,GAAI/O,EAAM,sBAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,wBAG7BkT,GvBlGkB,IuBmGlBze,GAAU4e,SAAStE,GAAI/O,EAAM,gBAC7BvL,GAAU4e,SAAStE,GAAI/O,EAAM,kBAG1BvL,CACX,CCpGO,SAAS8e,GAAK9R,GACjB,MAAMzB,EAAO0B,GAAUD,GAElBzB,GAILA,EAAKuT,MACT,CAMO,SAASC,GAAM/R,GAClB,MAAMzB,EAAO0B,GAAUD,GAElBzB,GAILA,EAAKwT,OACT,CAMO,SAASC,GAAMhS,GAClB,MAAMzB,EAAO0B,GAAUD,GAElBzB,GAILA,EAAKyT,OACT,CAMO,SAASC,GAAMxjB,GACc,aAA5BiH,IAAawc,WACbzjB,IAEAkH,IAAYyT,iBAAiB,mBAAoB3a,EAAU,CAAE0jB,MAAM,GAE3E,CC/CO,SAASC,GAAMpS,EAAUyJ,GAE5B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAIJ8M,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVhB,MAAM,IACP4R,UAEH,IAAK,MAAO1e,EAAG4K,KAASuC,EAAMjK,UAAW,CACrC,MAAMuQ,EAAS7I,EAAK2G,WAEpB,IAAKkC,EACD,SAGJ,IAAImE,EAEAA,EADA5X,IAAMmN,EAAMrW,OAAS,EACZ4gB,EAEAlM,GAAMkM,EAAQ,CACnB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAIpB,IAAK,MAAM8F,KAASoM,EAChBnE,EAAOkE,aAAanM,EAAOZ,EAAK0I,YAE5C,CACA,CAOO,SAASpN,GAAOmG,EAAUyJ,GAC7B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAIR0f,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVhB,MAAM,IAGV,IAAK,MAAO9M,EAAG4K,KAASuC,EAAMjK,UAAW,CACrC,IAAI0U,EAEAA,EADA5X,IAAMmN,EAAMrW,OAAS,EACZ4gB,EAEAlM,GAAMkM,EAAQ,CACnB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAIpB,IAAK,MAAM8F,KAASoM,EAChBhN,EAAK+M,aAAanM,EAAO,KAErC,CACA,CAOO,SAASmT,GAAStS,EAAUyJ,GAC/B5P,GAAO4P,EAAezJ,EAC1B,CAOO,SAASuS,GAAOvS,EAAUyJ,GAE7B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAIJ8M,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVhB,MAAM,IAGV,IAAK,MAAO9M,EAAG4K,KAASuC,EAAMjK,UAAW,CACrC,MAAMuQ,EAAS7I,EAAK2G,WAEpB,IAAKkC,EACD,SAGJ,IAAImE,EAEAA,EADA5X,IAAMmN,EAAMrW,OAAS,EACZ4gB,EAEAlM,GAAMkM,EAAQ,CACnB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAIpB,IAAK,MAAM8F,KAASoM,EAChBnE,EAAOkE,aAAanM,EAAOZ,EAEvC,CACA,CAOO,SAASiU,GAAYxS,EAAUyJ,GAClC2I,GAAM3I,EAAezJ,EACzB,CAOO,SAASsL,GAAatL,EAAUyJ,GACnC8I,GAAO9I,EAAezJ,EAC1B,CAOO,SAASyS,GAAQzS,EAAUyJ,GAC9B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IAIR0f,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVhB,MAAM,IAGV,IAAK,MAAO9M,EAAG4K,KAASuC,EAAMjK,UAAW,CACrC,MAAM6b,EAAanU,EAAKmU,WAExB,IAAInH,EAEAA,EADA5X,IAAMmN,EAAMrW,OAAS,EACZ4gB,EAEAlM,GAAMkM,EAAQ,CACnB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAIpB,IAAK,MAAM8F,KAASoM,EAChBhN,EAAK+M,aAAanM,EAAOuT,EAErC,CACA,CAOO,SAASC,GAAU3S,EAAUyJ,GAChCgJ,GAAQhJ,EAAezJ,EAC3B,CC5LO,SAAS4S,GAAO5S,EAAU0C,GAE7B,MAAM5B,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAGVmE,EAAaI,GAAYJ,GAEzB,MAAM4D,EAAU,GAEhB,IAAK,MAAM/H,KAAQuC,EAAO,CACtB,MAAMsG,EAAS7I,EAAK2G,WAEfkC,IAIDd,EAAQ9T,SAAS4U,IAIhB1E,EAAW0E,IAIhBd,EAAQxY,KAAKsZ,GACrB,CAEI,IAAK,MAAMA,KAAUd,EAAS,CAC1B,MAAMuM,EAAczL,EAAOlC,WAE3B,IAAK2N,EACD,SAGJ,MAAMjS,EAAWrT,EAAM,GAAI6Z,EAAO1G,YAElC,IAAK,MAAMuF,KAASrF,EAChBiS,EAAYvH,aAAarF,EAAOmB,EAE5C,CAEI4D,GAAO1E,EACX,CAOO,SAASnY,GAAK6R,EAAUyJ,GAE3B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IAIJ8M,EAAS7J,GAAWiI,EAAe,CACrChI,UAAU,EACVhB,MAAM,IAGV,IAAK,MAAMlC,KAAQuC,EAAO,CACtB,MAAMsG,EAAS7I,EAAK2G,WAEpB,IAAKkC,EACD,SAGJ,MAAMmE,EAASpM,GAAMkM,EAAQ,CACzB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAGVyZ,EAAavH,EAAOrY,QAAQ5D,QAE5ByjB,EAAiBnoB,EAAWkoB,GAC9BA,EAAWJ,WACXI,EACEE,EAAUzlB,EAAM,GAAIwlB,EAAexR,iBAAiB,MAAMJ,MAAM5C,IAAUA,EAAK0U,qBAAsBF,EAE3G,IAAK,MAAM5T,KAASoM,EAChBnE,EAAOkE,aAAanM,EAAOZ,GAG/ByU,EAAQ1H,aAAa/M,EAAM,KACnC,CACA,CAOO,SAAS2U,GAAQlT,EAAUyJ,GAE9B,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,IASJgN,EAASpM,GALAqC,GAAWiI,EAAe,CACrChI,UAAU,EACVhB,MAAM,IAGmB,CACzBlJ,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAGV8Z,EAAYrS,EAAM,GAExB,IAAKqS,EACD,OAGJ,MAAM/L,EAAS+L,EAAUjO,WAEzB,IAAKkC,EACD,OAGJ,MAAM0L,EAAavH,EAAO,GAEpBwH,EAAiBnoB,EAAWkoB,GAC9BA,EAAWJ,WACXI,EACEE,EAAUzlB,EAAM,GAAIwlB,EAAexR,iBAAiB,MAAMJ,MAAM5C,IAAUA,EAAK0U,qBAAsBF,EAE3G,IAAK,MAAM5T,KAASoM,EAChBnE,EAAOkE,aAAanM,EAAOgU,GAG/B,IAAK,MAAM5U,KAAQuC,EACfkS,EAAQ1H,aAAa/M,EAAM,KAEnC,CAOO,SAAS6U,GAAUpT,EAAUyJ,GAChC,MAAM3I,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAIN2J,EAAS7J,GAAWiI,EAAe,CACrChI,UAAU,EACVhB,MAAM,IAGV,IAAK,MAAMlC,KAAQuC,EAAO,CACtB,MAAMF,EAAWrT,EAAM,GAAIgR,EAAKmC,YAE1B6K,EAASpM,GAAMkM,EAAQ,CACzB9T,QAAQ,EACRnD,MAAM,EACNiF,YAAY,IAGVyZ,EAAavH,EAAOrY,QAAQ5D,QAE5ByjB,EAAiBnoB,EAAWkoB,GAC9BA,EAAWJ,WACXI,EACEE,EAAUzlB,EAAM,GAAIwlB,EAAexR,iBAAiB,MAAMJ,MAAM5C,IAAUA,EAAK0U,qBAAsBF,EAE3G,IAAK,MAAM5T,KAASoM,EAChBhN,EAAK+M,aAAanM,EAAO,MAG7B,IAAK,MAAM8G,KAASrF,EAChBoS,EAAQ1H,aAAarF,EAAO,KAExC,CACA,CCvLO,SAASoN,GAAWrT,GAAUsT,UAAEA,EAAY,MAAS,IACxD,MAAMxS,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACtB,IAAKtH,GAAOyF,IAAIV,GACZ,SAGJ,MAAMgV,EAAQ/Z,GAAO0F,IAAIX,GAErB+U,UACOC,EAAMD,GAGZA,GAAcloB,OAAOgE,KAAKmkB,GAAO9oB,QAClC+O,GAAOkF,OAAOH,EAE1B,CACA,CAQA,SAASiV,GAAQjV,GAAM+U,UAAEA,EAAY,WAAc,IAC/C,MAAMC,EAAQ/Z,GAAO0F,IAAIX,GAEzB,IAAKgV,KAAWD,KAAaC,GACzB,OAGJ,MAAMvM,EAAOuM,EAAMD,GAAWhkB,QAEzB0X,EAKLhR,QAAQC,QAAQ+Q,EAAKzI,IAChBrI,MAAM7E,IACHmiB,GAAQjV,EAAM,CAAE+U,aAAY,IAC7B3V,OAAOtM,IACNmI,GAAOkF,OAAOH,EAAK,IARvB/E,GAAOkF,OAAOH,EAUtB,CASO,SAASgV,GAAMvT,EAAUvR,GAAU6kB,UAAEA,EAAY,WAAc,IAClE,MAAMxS,EAAQU,GAAWxB,GAEzB,IAAK,MAAMzB,KAAQuC,EAAO,CACjBtH,GAAOyF,IAAIV,IACZ/E,GAAOkB,IAAI6D,EAAM,IAGrB,MAAMgV,EAAQ/Z,GAAO0F,IAAIX,GACnBkV,EAAeH,KAAaC,EAE7BE,IACDF,EAAMD,GAAa,CACdjiB,GAAM,IAAI2E,SAASC,IAChBvH,WAAWuH,EAAS,EAAE,MAKlCsd,EAAMD,GAAWxlB,KAAKW,GAEjBglB,GACDD,GAAQjV,EAAM,CAAE+U,aAE5B,CACA,CC7EO,SAASI,GAAU1T,GACtB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTpP,QAAQiM,GAASA,EAAKoV,aAC7B,CAQO,SAASC,GAAM5T,EAAUyJ,GAC5B,MAAM4B,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAGZ,OAAOF,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTpP,QAAQiM,GACP8M,EAAO9Y,MAAM3E,GACT2Q,EAAKsV,YAAYjmB,MAG7B,CAQO,SAAS0E,GAAO0N,EAAU0C,GAG7B,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTpP,OAAOoQ,EACd,CAQO,SAASoR,GAAU9T,EAAU0C,GAGhC,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTP,KAAKuB,IAAe,IAC3B,CAOO,SAASqR,GAAM/T,GAClB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,IACPjM,QAAQiM,GACNlU,EAAUkU,IAAmC,UAA1B+O,GAAI/O,EAAM,aAC9B6H,GACI7H,GACC6I,GAAW/c,EAAU+c,IAAuC,UAA5BkG,GAAIlG,EAAQ,cAC/C3c,QAEV,CAOO,SAASupB,GAAOhU,GACnB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACN5S,UAAU,EACV0C,QAAQ,IACTiE,QAAQiM,GACHnU,EAASmU,GACgC,YAAlCA,EAAK5S,SAASsoB,gBAGrBvpB,EAAW6T,GACqB,YAAzBA,EAAK0V,iBAGR1V,EAAK4I,cAErB,CAQO,SAAS+M,GAAIlU,EAAU0C,GAG1B,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTpP,QAAO,CAACiM,EAAM9N,KAAWiS,EAAWnE,EAAM9N,IACjD,CAQO,SAAS0jB,GAAOnU,EAAU0C,GAG7B,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTP,MAAK,CAAC5C,EAAM9N,KAAWiS,EAAWnE,EAAM9N,MAAW,IAC1D,CAQO,SAAS2jB,GAAKpU,EAAUyJ,GAC3B,MAAM4B,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAGZ,OAAOF,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTpP,QAAQiM,GACP8M,EAAO9Y,MAAM3E,GACT2Q,EAAKyE,WAAWpV,MAG5B,CAOO,SAASymB,GAAQrU,GACpB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACN5S,UAAU,EACV0C,QAAQ,IACTiE,QAAQiM,GACHnU,EAASmU,GACgC,YAAlCA,EAAK5S,SAASsoB,gBAGrBvpB,EAAW6T,GACqB,YAAzBA,EAAK0V,gBAGT1V,EAAK4I,cAEpB,CAOO,SAASmN,GAActU,GAC1B,OAAOwB,GAAWxB,GACb1N,QAAQiM,GACLlF,GAAW4F,IAAIV,IAE3B,CAQO,SAASgW,GAAcvU,EAAUwL,GACpC,OAAOhK,GAAWxB,GACb1N,QAAQiM,GACLA,EAAKiW,aAAahJ,IAE9B,CAOO,SAASiJ,GAAazU,GACzB,OAAOwB,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IACX2G,QAAQiM,KACLA,EAAK0U,mBAEf,CAQO,SAASyB,GAAU1U,KAAaoN,GAGnC,OAFAA,EAAU9W,EAAa8W,GAEhB5L,GAAWxB,GACb1N,QAAQiM,GACL6O,EAAQ7a,MAAMsP,GACVtD,EAAKhI,UAAU2M,SAASrB,MAGxC,CAOO,SAAS8S,GAAiB3U,GAC7B,OAAOwB,GAAWxB,GACb1N,QAAQiM,GACLrT,WAAWoiB,GAAI/O,EAAM,wBAEjC,CAOO,SAASqW,GAAkB5U,GAC9B,OAAOwB,GAAWxB,GACb1N,QAAQiM,GACLrT,WAAWoiB,GAAI/O,EAAM,yBAEjC,CAQO,SAASsW,GAAS7U,EAAU9Q,GAC/B,OAAOsS,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IACTiE,QAAQiM,KACFnK,GAAK6K,IAAIV,MAITrP,GAIYkF,GAAK8K,IAAIX,GAEV9O,eAAeP,KAEvC,CAQO,SAAS4lB,GAAe9U,EAAU0C,GAGrC,OAFAA,EAAaO,GAAoBP,GAE1BlB,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IACX2G,OAAOoQ,EACd,CAQO,SAASqS,GAAa/U,EAAU+L,GACnC,OAAOvK,GAAWxB,GACb1N,QAAQiM,GACLA,EAAK9O,eAAesc,IAEhC,CCjUO,SAASiJ,GAAehV,GAE3B,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVhB,MAAM,IACP4R,UAEG4C,EAAYtf,IAAYuf,eAE9B,IAAKD,EAAUE,WACX,OAGJ,MAAM3O,EAAQyO,EAAUG,WAAW,GAEnCH,EAAUI,kBACV7O,EAAM8O,WAEN,IAAK,MAAM/W,KAAQuC,EACf0F,EAAM+O,WAAWhX,EAEzB,CAMO,SAASiX,GAAgBxV,GAE5B,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVhB,MAAM,IACP4R,UAEG4C,EAAYtf,IAAYuf,eAE9B,IAAKD,EAAUE,WACX,OAGJ,MAAM3O,EAAQyO,EAAUG,WAAW,GAEnCH,EAAUI,kBAEV,IAAK,MAAM9W,KAAQuC,EACf0F,EAAM+O,WAAWhX,EAEzB,CA8EO,SAASkX,GAAOzV,GACnB,MAAMzB,EAAO0B,GAAUD,EAAU,CAC7BzB,MAAM,IAGV,GAAIA,GAAQ,WAAYA,EAEpB,YADAA,EAAKkX,SAIT,MAAMR,EAAYtf,IAAYuf,eAM9B,GAJID,EAAUE,WAAa,GACvBF,EAAUI,mBAGT9W,EACD,OAGJ,MAAMiI,EAAQnG,KACdmG,EAAMC,WAAWlI,GACjB0W,EAAUS,SAASlP,EACvB,CAMO,SAASmP,GAAU3V,GACtB,MAAMc,EAAQ4E,GAAK1F,GAEbiV,EAAYtf,IAAYuf,eAM9B,GAJID,EAAUE,YACVF,EAAUI,mBAGTvU,EAAMrW,OACP,OAGJ,MAAM+b,EAAQnG,KAEM,GAAhBS,EAAMrW,OACN+b,EAAMC,WAAW3F,EAAMxR,UAEvBkX,EAAME,eAAe5F,EAAMxR,SAC3BkX,EAAMG,YAAY7F,EAAM8F,QAG5BqO,EAAUS,SAASlP,EACvB,CAMO,SAASoP,GAAc5V,GAE1B,MAAMc,EAAQU,GAAWxB,EAAU,CAC/ByB,UAAU,EACVhB,MAAM,IAGJwU,EAAYtf,IAAYuf,eAE9B,IAAKD,EAAUE,WACX,OAGJ,MAAM3O,EAAQyO,EAAUG,WAAW,GAEnCH,EAAUI,kBAEV,MAAM9W,EAAOuC,EAAM5N,QAAQ5D,QACrB0jB,EAAUzlB,EAAM,GAAIgR,EAAKgD,iBAAiB,MAAMJ,MAAM5C,IAAUA,EAAK0U,qBAAsB1U,EAE3FkD,EAAW+E,EAAMqP,kBAEjBnV,EAAanT,EAAM,GAAIkU,EAASf,YAEtC,IAAK,MAAMuF,KAASvF,EAChBsS,EAAQ1H,aAAarF,EAAO,MAGhC,IAAK,MAAM1H,KAAQuC,EACf0F,EAAM+O,WAAWhX,EAEzB,CCtNO,SAASuX,GAAa9V,GACzB,OAAOwB,GAAWxB,GACbzN,MAAMgM,GAASlF,GAAW4F,IAAIV,IACvC,CAQO,SAASiW,GAAaxU,EAAUwL,GACnC,OAAOhK,GAAWxB,GACbzN,MAAMgM,GAASA,EAAKiW,aAAahJ,IAC1C,CAOO,SAASuK,GAAY/V,GACxB,OAAOwB,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IACX4G,MAAMgM,GAASA,EAAK0U,mBAC3B,CAQO,SAAS+C,GAAShW,KAAaoN,GAGlC,OAFAA,EAAU9W,EAAa8W,GAEhB5L,GAAWxB,GACbzN,MAAMgM,GACH6O,EAAQ7a,MAAMsP,GAActD,EAAKhI,UAAU2M,SAASrB,MAEhE,CAOO,SAASoU,GAAgBjW,GAC5B,OAAOwB,GAAWxB,GACbzN,MAAMgM,GACHrT,WAAWoiB,GAAI/O,EAAM,wBAEjC,CAOO,SAAS2X,GAAiBlW,GAC7B,OAAOwB,GAAWxB,GACbzN,MAAMgM,GACHrT,WAAWoiB,GAAI/O,EAAM,yBAEjC,CAQO,SAAS4X,GAAQnW,EAAU9Q,GAC9B,OAAOsS,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,IACTkE,MAAMgM,KACAnK,GAAK6K,IAAIV,MAITrP,GAIYkF,GAAK8K,IAAIX,GAEV9O,eAAeP,KAEvC,CAQO,SAASknB,GAAWpW,EAAU9Q,GAGjC,OAFAA,EAAMsB,EAAUtB,GAETsS,GAAWxB,GACbzN,MAAMgM,KAAWA,EAAKQ,QAAQ7P,IACvC,CAQO,SAASmnB,GAAcrW,EAAU0C,GAGpC,OAFAA,EAAaO,GAAoBP,GAE1BlB,GAAWxB,EAAU,CACxByB,UAAU,EACVC,QAAQ,EACR/V,UAAU,IACX4G,KAAKmQ,EACZ,CAOO,SAAS4T,GAAYtW,GACxB,OAAOwB,GAAWxB,GACbzN,MAAMgM,GAASA,EAAKwI,SAC7B,CAQO,SAASwP,GAAYvW,EAAU+L,GAClC,OAAOvK,GAAWxB,GACbzN,MAAMgM,GAASA,EAAK9O,eAAesc,IAC5C,CAOO,SAASyK,GAAUxW,GACtB,OAAOwB,GAAWxB,GACbzN,MAAMgM,GAASA,EAAKmJ,YAC7B,CAQO,SAAS+O,GAAGzW,EAAU0C,GAGzB,OAFAA,EAAaI,GAAYJ,GAElBlB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTnP,KAAKmQ,EACZ,CAOO,SAASiR,GAAY3T,GACxB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTnP,MAAMgM,GAASA,EAAKoV,aAC3B,CAQO,SAAS+C,GAAQ1W,EAAUyJ,GAC9B,MAAM4B,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAGZ,OAAOF,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTnP,MAAMgM,GACL8M,EAAO9Y,MAAM3E,GAAU2Q,EAAKsV,YAAYjmB,MAEhD,CAOO,SAAS+oB,GAAQ3W,GACpB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,IACPhM,MAAMgM,GACJlU,EAAUkU,IAAmC,UAA1B+O,GAAI/O,EAAM,aAC9B6H,GACI7H,GACC6I,GAAW/c,EAAU+c,IAAuC,UAA5BkG,GAAIlG,EAAQ,cAC/C3c,QAEV,CAOO,SAASmsB,GAAS5W,GACrB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACN5S,UAAU,EACV0C,QAAQ,IACTkE,MAAMgM,GACDnU,EAASmU,GACgC,YAAlCA,EAAK5S,SAASsoB,gBAGrBvpB,EAAW6T,GACqB,YAAzBA,EAAK0V,iBAGR1V,EAAK4I,cAErB,CAQO,SAAS0P,GAAO7W,EAAUyJ,GAC7B,MAAM4B,EAAS7J,GAAWiI,EAAe,CACrClL,MAAM,EACNkD,UAAU,EACVC,QAAQ,IAGZ,OAAOF,GAAWxB,EAAU,CACxBzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,IACTnP,MAAMgM,GACL8M,EAAO9Y,MAAM3E,GAAU2Q,EAAKyE,WAAWpV,MAE/C,CAOO,SAASkpB,GAAU9W,GACtB,OAAOwB,GAAWxB,EAAU,CACxBzB,MAAM,EACN5S,UAAU,EACV0C,QAAQ,IACTkE,MAAMgM,GACDnU,EAASmU,GACgC,YAAlCA,EAAK5S,SAASsoB,gBAGrBvpB,EAAW6T,GACqB,YAAzBA,EAAK0V,gBAGT1V,EAAK4I,cAEpB,CC1RA,MAAM4P,GAAQlW,GAAShT,UCPhB,SAASmpB,GAAMhX,EAAU1K,EAAU,MACtC,GAAInL,EAAW6V,GACX,OAAOiS,GAAMjS,GAGjB,MAAMc,EAAQU,GAAWxB,EAAU,CAC/BzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,EACRoS,MAAM,EACNnL,QAASA,GAAWI,MAGxB,OAAO,IAAImL,GAASC,EACxB,CCfO,SAASmW,GAAWpiB,EAAK4W,GAAYvX,MAAEA,GAAQ,EAAIoB,QAAEA,EAAUI,KAAiB,IAO7E,UANN+V,EAAa,CACTyL,IAAKriB,EACLK,KAAM,qBACHuW,MAIHA,EAAW0L,MAAQ,IAGlBjjB,IACDuX,EAAWyL,IAAMxd,GAAkB+R,EAAWyL,IAAK,IAAK9kB,KAAKD,QAGjE,MAAMilB,EAAS9hB,EAAQ+hB,cAAc,UAErC,IAAK,MAAOnoB,EAAKjF,KAAUmB,OAAOyL,QAAQ4U,GACtC2L,EAAO/K,aAAand,EAAKjF,GAK7B,OAFAqL,EAAQgiB,KAAKC,YAAYH,GAElB,IAAIphB,SAAQ,CAACC,EAAS8F,KACzBqb,EAAOta,OAAUzL,GAAM4E,IACvBmhB,EAAOna,QAAWd,GAAUJ,EAAOI,EAAM,GAEjD,CC3BO,SAASqb,GAAU3iB,EAAK4W,GAAYvX,MAAEA,GAAQ,EAAIoB,QAAEA,EAAUI,KAAiB,IAClF+V,EAAa,CACT9P,KAAM9G,EACN4iB,IAAK,gBACFhM,GAGFvX,IACDuX,EAAW9P,KAAOjC,GAAkB+R,EAAW9P,KAAM,IAAKvJ,KAAKD,QAGnE,MAAMulB,EAAOpiB,EAAQ+hB,cAAc,QAEnC,IAAK,MAAOnoB,EAAKjF,KAAUmB,OAAOyL,QAAQ4U,GACtCiM,EAAKrL,aAAand,EAAKjF,GAK3B,OAFAqL,EAAQgiB,KAAKC,YAAYG,GAElB,IAAI1hB,SAAQ,CAACC,EAAS8F,KACzB2b,EAAK5a,OAAUzL,GAAM4E,IACrByhB,EAAKza,QAAWd,GAAUJ,EAAOI,EAAM,GAE/C,CCRA,SAASwb,GAAapZ,EAAM/G,EAAcogB,IAEtC,MAAM5c,EAAOuD,EAAKyD,QAAQzR,cAE1B,KAAMyK,KAAQxD,GAEV,YADA+G,EAAKyM,SAKT,MAAM6M,EAAoB,GAEtB,MAAOrgB,GACPqgB,EAAkB/pB,QAAQ0J,EAAY,MAG1CqgB,EAAkB/pB,QAAQ0J,EAAYwD,IAEtC,MAAMyQ,EAAale,EAAM,GAAIgR,EAAKkN,YAElC,IAAK,MAAMD,KAAaC,EACfoM,EAAkB1W,MAAMvF,GAAS4P,EAAUE,SAASjZ,MAAMmJ,MAC3D2C,EAAK2N,gBAAgBV,EAAUE,UAKvC,MAAMhL,EAAanT,EAAM,GAAIgR,EAAKqC,UAClC,IAAK,MAAMqF,KAASvF,EAChBiX,GAAa1R,EAAOzO,EAE5B,CJtCAuf,GAAM1J,IKVC,SAAarN,EAAU1K,EAAU,MACpC,MAAMwL,EAAQgX,GAAM9pB,EAAOT,EAAM,GAAIkO,KAAKyD,MAAO8X,GAAMhX,EAAU1K,GAAS4J,SAE1E,OAAO,IAAI2B,GAASC,EACxB,ELOAiW,GAAM5J,SMfC,YAAqBC,GAGxB,OAFA2K,GAAUtc,QAAS2R,GAEZ3R,IACX,ENYAsb,GAAMnO,SOZC,SAAkBrR,EAAQ9I,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAG9E,OAFAkP,GAAUvc,KAAMlE,EAAQ9I,EAAU,CAAEia,UAASI,YAEtCrN,IACX,EPSAsb,GAAM1N,iBOGC,SAA0B9R,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAGhG,OAFAmP,GAAkBxc,KAAMlE,EAAQ0Q,EAAUxZ,EAAU,CAAEia,UAASI,YAExDrN,IACX,EPNAsb,GAAMzN,qBOkBC,SAA8B/R,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAGpG,OAFAoP,GAAsBzc,KAAMlE,EAAQ0Q,EAAUxZ,EAAU,CAAEia,UAASI,YAE5DrN,IACX,EPrBAsb,GAAMxN,aOgCC,SAAsBhS,EAAQ9I,GAAUia,QAAEA,GAAU,EAAKI,QAAEA,GAAU,GAAU,IAGlF,OAFAqP,GAAc1c,KAAMlE,EAAQ9I,EAAU,CAAEia,UAASI,YAE1CrN,IACX,EPnCAsb,GAAM3E,MQpBC,SAAe3I,GAGlB,OAFA2O,GAAO3c,KAAMgO,GAENhO,IACX,ERiBAsb,GAAM/B,eStBC,WAGH,OAFAqD,GAAgB5c,MAETA,IACX,ETmBAsb,GAAM3T,QUhBC,SAAiB3U,GAAU6kB,UAAEA,EAAY,aAAc9X,GAAY,IACtE,OAAOC,KAAK8X,OAAOhV,GACf+Z,GAAS/Z,EAAM9P,EAAU+M,IAC7B,CAAE8X,aAEN,EVYAyD,GAAMld,OQZC,SAAgB4P,GAGnB,OAFA8O,GAAQ9c,KAAMgO,GAEPhO,IACX,ERSAsb,GAAMzE,SQFC,SAAkB7I,GAGrB,OAFA+O,GAAU/c,KAAMgO,GAEThO,IACX,ERDAsb,GAAMhX,aWxBC,UAAsBxD,KAAEA,GAAO,GAAS,IAC3C,MAAMmF,EAAS+W,GAAchd,KAAM,CAAEc,SAErC,OAAO,IAAIsE,GAASa,EAAS,CAACA,GAAU,GAC5C,EXqBAqV,GAAMxE,OQOC,SAAgB9I,GAGnB,OAFAiP,GAAQjd,KAAMgO,GAEPhO,IACX,ERVAsb,GAAMvB,gBSlBC,WAGH,OAFAmD,GAAiBld,MAEVA,IACX,ETeAsb,GAAMjF,KY7BC,WAGH,OAFA8G,GAAMnd,MAECA,IACX,EZ0BAsb,GAAM1I,Oa3BC,UAAgBC,OAAEA,GAAS,GAAU,IACxC,OAAOuK,GAAQpd,KAAM,CAAE6S,UAC3B,Eb0BAyI,GAAM9Q,Mc7BC,SAAevD,GAClB,OAAO,IAAI7B,GAASiY,GAAOrd,KAAMiH,GACrC,Ed4BAqU,GAAMnW,ScrBC,SAAkB8B,GAAYyD,aAAEA,GAAe,GAAS,IAC3D,OAAO,IAAItF,GAASkY,GAAUtd,KAAMiH,EAAY,CAAEyD,iBACtD,EdoBA4Q,GAAM1D,We/BC,UAAoBC,UAAEA,EAAY,WAAc,IAGnD,OAFA0F,GAAYvd,KAAM,CAAE6X,cAEb7X,IACX,Ef4BAsb,GAAMhF,MYxBC,WAGH,OAFAkH,GAAOxd,MAEAA,IACX,EZqBAsb,GAAM5X,MgB7BC,SAAe3D,GAClB,MAAM+P,EAAS2N,GAAOzd,KAAMD,GAE5B,OAAO,IAAIqF,GAAS0K,EACxB,EhB0BAwL,GAAMjK,UiBnCC,SAAmBrD,GAGtB,OAFA0P,GAAW1d,KAAMgO,GAEVhO,IACX,EjBgCAsb,GAAMvN,YO0BC,SAAqBC,GAGxB,OAFA2P,GAAa3d,KAAMgO,GAEZhO,IACX,EP7BAsb,GAAM3Q,QcjBC,SAAiB1D,EAAY2D,GAChC,OAAO,IAAIxF,GAASwY,GAAS5d,KAAMiH,EAAY2D,GACnD,EdgBA0Q,GAAMxQ,ecVC,WACH,MAAMhI,EAAO+a,GAAgB7d,MAE7B,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EdOAwY,GAAMrD,UkBvCC,WACH,OAAO,IAAI7S,GAAS0Y,GAAW9d,MACnC,ElBsCAsb,GAAMpI,Ua7BC,SAAmB6K,GAGtB,OAFAC,GAAWhe,KAAM+d,GAEV/d,IACX,Eb0BAsb,GAAMjQ,ScHC,WACH,OAAO,IAAIjG,GAAS6Y,GAAUje,MAClC,EdEAsb,GAAMzJ,IM/BC,SAAa1J,GAChB,OAAO+V,GAAKle,KAAMmI,EACtB,EN8BAmT,GAAM6C,Me7BC,SAAe3kB,GAAUqe,UAAEA,EAAY,WAAc,IACxD,OAAO7X,KAAK8X,OAAOliB,GACf,IAAI2E,SAASC,GACTvH,WAAWuH,EAAShB,MAE5B,CAAEqe,aAEN,EfuBAyD,GAAMhM,OgB7BC,WAGH,OAFA8O,GAAQpe,MAEDA,IACX,EhB0BAsb,GAAM9G,OapBC,SAAgBhM,EAAGC,GAAGoK,OAAEA,GAAS,GAAU,IAC9C,OAAOwL,GAAQre,KAAMwI,EAAGC,EAAG,CAAEoK,UACjC,EbmBAyI,GAAM5G,WaZC,SAAoB1G,GACvB,OAAOsQ,GAAYte,KAAMgO,EAC7B,EbWAsN,GAAMzT,OmBxCC,UAAgBgQ,UAAEA,EAAY,aAAc9X,GAAY,IAC3D,OAAOC,KAAK8X,OAAOhV,GACfyb,GAAQzb,EAAM/C,IAClB,CAAE8X,aAEN,EnBoCAyD,GAAMtT,QmBtBC,UAAiB6P,UAAEA,EAAY,aAAc9X,GAAY,IAC5D,OAAOC,KAAK8X,OAAOhV,GACf0b,GAAS1b,EAAM/C,IACnB,CAAE8X,aAEN,EnBkBAyD,GAAM9L,MgBxBC,WAGH,OAFAiP,GAAOze,MAEAA,IACX,EhBqBAsb,GAAMoD,GKnCC,SAAY1pB,GACf,MAAM8N,EAAO9C,KAAKyD,IAAIzO,GAEtB,OAAO,IAAIoQ,GAAStC,EAAO,CAACA,GAAQ,GACxC,ELgCAwY,GAAMnD,MkB1CC,SAAenK,GAClB,OAAO,IAAI5I,GAASuZ,GAAO3e,KAAMgO,GACrC,ElByCAsN,GAAMpT,OmBTC,UAAgB2P,UAAEA,EAAY,aAAc9X,GAAY,IAC3D,OAAOC,KAAK8X,OAAOhV,GACf8b,GAAQ9b,EAAM/C,IAClB,CAAE8X,aAEN,EnBKAyD,GAAMjT,QmBOC,UAAiBwP,UAAEA,EAAY,aAAc9X,GAAY,IAC5D,OAAOC,KAAK8X,OAAOhV,GACf+b,GAAS/b,EAAM/C,IACnB,CAAE8X,aAEN,EnBXAyD,GAAMzkB,OkBpCC,SAAgBoQ,GACnB,OAAO,IAAI7B,GAAS0Z,GAAQ9e,KAAMiH,GACtC,ElBmCAqU,GAAMjD,UkB5BC,SAAmBpR,GACtB,MAAMnE,EAAOic,GAAW/e,KAAMiH,GAE9B,OAAO,IAAI7B,GAAStC,EAAO,CAACA,GAAQ,GACxC,ElByBAwY,GAAM5V,KoBvDC,SAAcnB,GACjB,OAAO,IAAIa,GAAS4Z,GAAMza,EAAUvE,MACxC,EpBsDAsb,GAAM1V,YoB/CC,SAAqBQ,GACxB,OAAO,IAAIhB,GAAS6Z,GAAa7Y,EAAWpG,MAChD,EpB8CAsb,GAAM3V,SoBvCC,SAAkBW,GACrB,OAAO,IAAIlB,GAAS8Z,GAAU5Y,EAAItG,MACtC,EpBsCAsb,GAAMzV,UoB/BC,SAAmBU,GACtB,OAAO,IAAInB,GAAS+Z,GAAW5Y,EAASvG,MAC5C,EpB8BAsb,GAAM7U,QoBvBC,SAAiBlC,GACpB,MAAMzB,EAAOsc,GAAS7a,EAAUvE,MAEhC,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EpBoBAwY,GAAM3U,eoBbC,SAAwBP,GAC3B,MAAMtD,EAAOuc,GAAgBjZ,EAAWpG,MAExC,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EpBUAwY,GAAM5U,YoBHC,SAAqBJ,GACxB,MAAMxD,EAAOwc,GAAahZ,EAAItG,MAE9B,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EpBAAwY,GAAM1U,aoBOC,SAAsBL,GACzB,MAAMzD,EAAOyc,GAAchZ,EAASvG,MAEpC,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EpBVAwY,GAAM7Q,MKvCC,WACH,OAAOzK,KAAK0e,GAAG,EACnB,ELsCApD,GAAMhD,MkB5BC,WACH,OAAO,IAAIlT,GAASoa,GAAOxf,MAC/B,ElB2BAsb,GAAM/E,MY/CC,WAGH,OAFAkJ,GAAOzf,MAEAA,IACX,EZ4CAsb,GAAMtV,ScrBC,WACH,MAAMlD,EAAO4c,GAAU1f,MAEvB,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EdkBAwY,GAAMxR,aqBpEC,SAAsBiG,GACzB,OAAO4P,GAAc3f,KAAM+P,EAC/B,ErBmEAuL,GAAM/J,QiB1DC,SAAiB9d,GACpB,OAAOmsB,GAAS5f,KAAMvM,EAC1B,EjByDA6nB,GAAMnL,WqB7DC,SAAoB1c,GACvB,OAAOosB,GAAY7f,KAAMvM,EAC7B,ErB4DA6nB,GAAMlL,QqBtDC,WACH,OAAO0P,GAAS9f,KACpB,ErBqDAsb,GAAMjL,YqB9CC,SAAqBC,GACxB,OAAOyP,GAAa/f,KAAMsQ,EAC9B,ErB6CAgL,GAAMjI,WsB1EC,WACH,OAAO2M,GAAYhgB,KACvB,EtByEAsb,GAAM7H,WsBnEC,WACH,OAAOwM,GAAYjgB,KACvB,EtBkEAsb,GAAMrJ,SMvDC,SAAkB9J,GACrB,OAAO+X,GAAUlgB,KAAMmI,EAC3B,ENsDAmT,GAAM/K,QqB1CC,WACH,OAAO4P,GAASngB,KACpB,ErByCAsb,GAAM9K,SqBnCC,WACH,OAAO4P,GAAUpgB,KACrB,ErBkCAsb,GAAMjB,auB/EC,WACH,OAAOgG,GAAcrgB,KACzB,EvB8EAsb,GAAMvC,auBvEC,SAAsBhJ,GACzB,OAAOuQ,GAActgB,KAAM+P,EAC/B,EvBsEAuL,GAAMhB,YuBhEC,WACH,OAAOiG,GAAavgB,KACxB,EvB+DAsb,GAAMf,SuBxDC,YAAqB5I,GACxB,OAAO6O,GAAUxgB,QAAS2R,EAC9B,EvBuDA2J,GAAMd,gBuBjDC,WACH,OAAOiG,GAAiBzgB,KAC5B,EvBgDAsb,GAAMb,iBuB1CC,WACH,OAAOiG,GAAkB1gB,KAC7B,EvByCAsb,GAAMZ,QuBlCC,SAAiBjnB,GACpB,OAAOktB,GAAS3gB,KAAMvM,EAC1B,EvBiCA6nB,GAAMX,WuB1BC,SAAoBlnB,GACvB,OAAOmtB,GAAY5gB,KAAMvM,EAC7B,EvByBA6nB,GAAMV,cuBlBC,SAAuB3T,GAC1B,OAAO4Z,GAAe7gB,KAAMiH,EAChC,EvBiBAqU,GAAMT,YuBXC,WACH,OAAOiG,GAAa9gB,KACxB,EvBUAsb,GAAMR,YuBHC,SAAqBxK,GACxB,OAAOyQ,GAAa/gB,KAAMsQ,EAC9B,EvBEAgL,GAAMP,UuBIC,WACH,OAAOiG,GAAWhhB,KACtB,EvBLAsb,GAAMlS,OwBtFC,UAAgB4M,QAAEA,EvDVE,EuDUmBC,MAAEA,GAAQ,GAAU,IAC9D,OAAOgL,GAAQjhB,KAAM,CAAEgW,UAASC,SACpC,ExBqFAqF,GAAM/C,OkB9CC,WACH,OAAO,IAAInT,GAAS8b,GAAQlhB,MAChC,ElB6CAsb,GAAMpJ,KMhEC,WAGH,OAFAiP,GAAMnhB,MAECA,IACX,EN6DAsb,GAAMtmB,MK5DC,WACH,OAAOosB,GAAOphB,KAClB,EL2DAsb,GAAMzb,QKpDC,SAAiBoH,GACpB,OAAOoa,GAASrhB,KAAMiH,EAC1B,ELmDAqU,GAAMvE,YQnDC,SAAqB/I,GAGxB,OAFAsT,GAAathB,KAAMgO,GAEZhO,IACX,ERgDAsb,GAAMzL,aQzCC,SAAsB7B,GAGzB,OAFAuT,GAAcvhB,KAAMgO,GAEbhO,IACX,ERsCAsb,GAAMN,GuBKC,SAAY/T,GACf,OAAOua,GAAIxhB,KAAMiH,EACrB,EvBNAqU,GAAMpD,YuBYC,WACH,OAAOuJ,GAAazhB,KACxB,EvBbAsb,GAAML,QuBoBC,SAAiBjN,GACpB,OAAO0T,GAAS1hB,KAAMgO,EAC1B,EvBrBAsN,GAAMJ,QuB2BC,WACH,OAAOyG,GAAS3hB,KACpB,EvB5BAsb,GAAMH,SuBkCC,WACH,OAAOyG,GAAU5hB,KACrB,EvBnCAsb,GAAMF,OuB0CC,SAAgBpN,GACnB,OAAO6T,GAAQ7hB,KAAMgO,EACzB,EvB3CAsN,GAAMD,UuBiDC,WACH,OAAOyG,GAAW9hB,KACtB,EvBlDAsb,GAAMyG,KKtDC,WACH,OAAO/hB,KAAK0e,IAAI,EACpB,ELqDApD,GAAM1G,Ua3DC,SAAmBpM,EAAGC,GAAGoK,OAAEA,GAAS,GAAU,IACjD,MAAM/P,EAAOkf,GAAWhiB,KAAMwI,EAAGC,EAAG,CAAEoK,WAEtC,OAAO,IAAIzN,GAAStC,EAAO,CAACA,GAAQ,GACxC,EbwDAwY,GAAMvG,cajDC,SAAuB/G,GAC1B,MAAMlL,EAAOmf,GAAejiB,KAAMgO,GAElC,OAAO,IAAI5I,GAAStC,EAAO,CAACA,GAAQ,GACxC,Eb8CAwY,GAAM/P,KclDC,SAActE,GACjB,OAAO,IAAI7B,GAAS8c,GAAMliB,KAAMiH,GACpC,EdiDAqU,GAAM7P,QczCC,SAAiBxE,EAAY2D,GAChC,OAAO,IAAIxF,GAAS+c,GAASniB,KAAMiH,EAAY2D,GACnD,EdwCA0Q,GAAM3R,UKnDC,WAGH,OAFAyY,GAAWpiB,MAEJA,IACX,ELgDAsb,GAAM7C,IkBxDC,SAAaxR,GAChB,OAAO,IAAI7B,GAASid,GAAKriB,KAAMiH,GACnC,ElBuDAqU,GAAM5C,OkBhDC,SAAgBzR,GACnB,MAAMnE,EAAOwf,GAAQtiB,KAAMiH,GAE3B,OAAO,IAAI7B,GAAStC,EAAO,CAACA,GAAQ,GACxC,ElB6CAwY,GAAM5P,acrCC,WACH,MAAM5I,EAAOyf,GAAcviB,MAE3B,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,EdkCAwY,GAAM3P,Oc3BC,SAAgB1E,GACnB,OAAO,IAAI7B,GAASod,GAAQxiB,KAAMiH,GACtC,Ed0BAqU,GAAMzQ,QclBC,SAAiB5D,EAAY2D,GAChC,OAAO,IAAIxF,GAASqd,GAASziB,KAAMiH,EAAY2D,GACnD,EdiBA0Q,GAAMtG,Sa5CC,SAAkBxM,GAAGqK,OAAEA,GAAS,EAAKziB,MAAEA,GAAQ,GAAS,IAC3D,OAAOsyB,GAAU1iB,KAAMwI,EAAG,CAAEqK,SAAQziB,SACxC,Eb2CAkrB,GAAMpG,SajCC,SAAkBzM,GAAGoK,OAAEA,GAAS,EAAKziB,MAAEA,GAAQ,GAAS,IAC3D,OAAOuyB,GAAU3iB,KAAMyI,EAAG,CAAEoK,SAAQziB,SACxC,EbgCAkrB,GAAMnG,SaxBC,UAAkBtC,OAAEA,GAAS,GAAU,IAC1C,OAAO+P,GAAU5iB,KAAM,CAAE6S,UAC7B,EbuBAyI,GAAMtE,QQpDC,SAAiBhJ,GAGpB,OAFA6U,GAAS7iB,KAAMgO,GAERhO,IACX,ERiDAsb,GAAMpE,UQ1CC,SAAmBlJ,GAGtB,OAFA8U,GAAW9iB,KAAMgO,GAEVhO,IACX,ERuCAsb,GAAMzP,KcfC,SAAc5E,GACjB,OAAO,IAAI7B,GAAS2d,GAAM/iB,KAAMiH,GACpC,EdcAqU,GAAMvP,QcNC,SAAiB9E,EAAY2D,GAChC,OAAO,IAAIxF,GAAS4d,GAAShjB,KAAMiH,EAAY2D,GACnD,EdKA0Q,GAAMxD,Me5FC,SAAe9kB,GAAU6kB,UAAEA,EAAY,WAAc,IAGxD,OAFAoL,GAAOjjB,KAAMhN,EAAU,CAAE6kB,cAElB7X,IACX,EfyFAsb,GAAMvI,KapBC,UAAcF,OAAEA,GAAS,GAAU,IACtC,OAAOqQ,GAAMljB,KAAM,CAAE6S,UACzB,EbmBAyI,GAAM/L,OgBzFC,WAGH,OAFA4T,GAAQnjB,MAEDA,IACX,EhBsFAsb,GAAM7K,gBqB1EC,SAAyBV,GAG5B,OAFAqT,GAAiBpjB,KAAM+P,GAEhB/P,IACX,ErBuEAsb,GAAMnJ,YMvFC,YAAwBR,GAG3B,OAFA0R,GAAarjB,QAAS2R,GAEf3R,IACX,ENoFAsb,GAAM9J,WiB3GC,SAAoB/d,GAGvB,OAFA6vB,GAAYtjB,KAAMvM,GAEXuM,IACX,EjBwGAsb,GAAM5K,cqBlEC,SAAuBjd,GAG1B,OAFA8vB,GAAevjB,KAAMvM,GAEduM,IACX,ErB+DAsb,GAAMpO,YOrDC,SAAqBpR,EAAQ9I,GAAUia,QAAEA,EAAU,MAAS,IAG/D,OAFAuW,GAAaxjB,KAAMlE,EAAQ9I,EAAU,CAAEia,YAEhCjN,IACX,EPkDAsb,GAAMlN,oBOvCC,SAA6BtS,EAAQ0Q,EAAUxZ,GAAUia,QAAEA,EAAU,MAAS,IAGjF,OAFAwW,GAAqBzjB,KAAMlE,EAAQ0Q,EAAUxZ,EAAU,CAAEia,YAElDjN,IACX,EPoCAsb,GAAM3K,eqB1DC,SAAwBL,GAG3B,OAFAoT,GAAgB1jB,KAAMsQ,GAEftQ,IACX,ErBuDAsb,GAAM5L,WgBtFC,SAAoB1B,GAGvB,OAFA2V,GAAY3jB,KAAMgO,GAEXhO,IACX,EhBmFAsb,GAAM3L,YgB5EC,SAAqB3B,GAGxB,OAFA4V,GAAa5jB,KAAMgO,GAEZhO,IACX,EhByEAsb,GAAMhT,SmBrDC,UAAkBuP,UAAEA,EAAY,aAAc9X,GAAY,IAC7D,OAAOC,KAAK8X,OAAOhV,GACf+gB,GAAU/gB,EAAM/C,IACpB,CAAE8X,aAEN,EnBiDAyD,GAAM3S,UmBjCC,UAAmBkP,UAAEA,EAAY,aAAc9X,GAAY,IAC9D,OAAOC,KAAK8X,OAAOhV,GACfghB,GAAWhhB,EAAM/C,IACrB,CAAE8X,aAEN,EnB6BAyD,GAAM3C,KkB9DC,SAAc3K,GACjB,OAAO,IAAI5I,GAAS2e,GAAM/jB,KAAMgO,GACpC,ElB6DAsN,GAAMtB,OStHC,WAGH,OAFAgK,GAAQhkB,MAEDA,IACX,ETmHAsb,GAAMpB,US7GC,WAGH,OAFA+J,GAAWjkB,MAEJA,IACX,ET0GAsb,GAAM1R,UKvEC,WACH,OAAOsa,GAAWlkB,KACtB,ELsEAsb,GAAMzR,eKhEC,WACH,OAAOsa,GAAgBnkB,KAC3B,EL+DAsb,GAAM1K,aqBxDC,SAAsBb,EAAWvhB,GAGpC,OAFA41B,GAAcpkB,KAAM+P,EAAWvhB,GAExBwR,IACX,ErBqDAsb,GAAMhK,QiB9GC,SAAiB7d,EAAKjF,GAGzB,OAFA61B,GAASrkB,KAAMvM,EAAKjF,GAEbwR,IACX,EjB2GAsb,GAAMzK,WqB9CC,SAAoBpd,EAAKjF,GAG5B,OAFA81B,GAAYtkB,KAAMvM,EAAKjF,GAEhBwR,IACX,ErB2CAsb,GAAMxK,QqBpCC,SAAiB9L,GAGpB,OAFAuf,GAASvkB,KAAMgF,GAERhF,IACX,ErBiCAsb,GAAMlT,YqBzBC,SAAqBkI,EAAU9hB,GAGlC,OAFAg2B,GAAaxkB,KAAMsQ,EAAU9hB,GAEtBwR,IACX,ErBsBAsb,GAAM1F,UsBjIC,SAAmBpN,EAAGC,GAGzB,OAFAgc,GAAWzkB,KAAMwI,EAAGC,GAEbzI,IACX,EtB8HAsb,GAAMxF,WsBvHC,SAAoBtN,GAGvB,OAFAkc,GAAY1kB,KAAMwI,GAEXxI,IACX,EtBoHAsb,GAAMvF,WsB7GC,SAAoBtN,GAGvB,OAFAkc,GAAY3kB,KAAMyI,GAEXzI,IACX,EtB0GAsb,GAAMlJ,SMhGC,SAAkBjK,EAAO3Z,GAAO6jB,UAAEA,GAAY,GAAU,IAG3D,OAFAuS,GAAU5kB,KAAMmI,EAAO3Z,EAAO,CAAE6jB,cAEzBrS,IACX,EN6FAsb,GAAMrK,QqBnBC,SAAiBC,GAGpB,OAFA2T,GAAS7kB,KAAMkR,GAERlR,IACX,ErBgBAsb,GAAMlK,SqBTC,SAAkB5iB,GAGrB,OAFAs2B,GAAU9kB,KAAMxR,GAETwR,IACX,ErBMAsb,GAAMrV,Oc7BC,WACH,MAAMnD,EAAOiiB,GAAQ/kB,MAErB,OAAO,IAAIoF,GAAStC,EAAO,CAACA,GAAQ,GACxC,Ed0BAwY,GAAM9I,KM1FC,WAGH,OAFAwS,GAAMhlB,MAECA,IACX,ENuFAsb,GAAMtP,ScnBC,SAAkB/E,GAAYyD,aAAEA,GAAe,GAAS,IAC3D,OAAO,IAAItF,GAAS6f,GAAUjlB,KAAMiH,EAAY,CAAEyD,iBACtD,EdkBA4Q,GAAMxT,QmBlCC,UAAiB+P,UAAEA,EAAY,aAAc9X,GAAY,IAC5D,OAAOC,KAAK8X,OAAOhV,GACfoiB,GAASpiB,EAAM/C,IACnB,CAAE8X,aAEN,EnB8BAyD,GAAMrT,SmBhBC,UAAkB4P,UAAEA,EAAY,aAAc9X,GAAY,IAC7D,OAAOC,KAAK8X,OAAOhV,GACfqiB,GAAUriB,EAAM/C,IACpB,CAAE8X,aAEN,EnBYAyD,GAAMrR,KKzEC,WACH,OAAO,IAAI7E,GAASiX,GAAMrc,MAC9B,ELwEAsb,GAAMpS,UmBCC,UAAmB2O,UAAEA,EAAY,aAAc9X,GAAY,IAC9D,OAAOC,KAAK8X,OAAOhV,GACfsiB,GAAWtiB,EAAM/C,IACrB,CAAE8X,aAEN,EnBLAyD,GAAM9R,WmBmBC,UAAoBqO,UAAEA,EAAY,aAAc9X,GAAY,IAC/D,OAAOC,KAAK8X,OAAOhV,GACfuiB,GAAYviB,EAAM/C,IACtB,CAAE8X,aAEN,EnBvBAyD,GAAM3X,KU7IC,UAAcC,OAAEA,GAAS,GAAS,IAIrC,OAHA5D,KAAK4X,aACL0N,GAAMtlB,KAAM,CAAE4D,WAEP5D,IACX,EVyIAsb,GAAM/U,QKrEC,WACH,OAAOgf,GAASvlB,KACpB,ELoEAsb,GAAM7I,OMzFC,WAGH,OAFA+S,GAAQxlB,MAEDA,IACX,ENsFAsb,GAAM3I,YM/EC,YAAwBhB,GAG3B,OAFA8T,GAAazlB,QAAS2R,GAEf3R,IACX,EN4EAsb,GAAMjN,aOzDC,SAAsBvS,GAAQnD,KAAEA,EAAO,KAAI2V,OAAEA,EAAS,KAAIC,QAAEA,GAAU,EAAIC,WAAEA,GAAa,GAAS,IAGrG,OAFAkX,GAAc1lB,KAAMlE,EAAQ,CAAEnD,OAAM2V,SAAQC,UAASC,eAE9CxO,IACX,EPsDAsb,GAAMxM,WO1CC,SAAoBnU,GAAOhC,KAAEA,EAAO,KAAI2V,OAAEA,EAAS,KAAIC,QAAEA,GAAU,EAAIC,WAAEA,GAAa,GAAS,IAClG,OAAOmX,GAAY3lB,KAAMrF,EAAO,CAAEhC,OAAM2V,SAAQC,UAASC,cAC7D,EPyCA8M,GAAMnE,OyBtKC,SAAgBlQ,GAGnB,OAFA2e,GAAQ5lB,KAAMiH,GAEPjH,IACX,EzBmKAsb,GAAM1C,QkBrFC,WACH,OAAO,IAAIxT,GAASygB,GAAS7lB,MACjC,ElBoFAsb,GAAMhS,MwBzJC,UAAe0M,QAAEA,EvDrBG,EuDqBkBC,MAAEA,GAAQ,GAAU,IAC7D,OAAO6P,GAAO9lB,KAAM,CAAEgW,UAASC,SACnC,ExBwJAqF,GAAMzC,ckB/EC,WACH,OAAO,IAAIzT,GAAS2gB,GAAe/lB,MACvC,ElB8EAsb,GAAMxC,ckBvEC,SAAuB/I,GAC1B,OAAO,IAAI3K,GAAS4gB,GAAehmB,KAAM+P,GAC7C,ElBsEAuL,GAAMtC,akBhEC,WACH,OAAO,IAAI5T,GAAS6gB,GAAcjmB,MACtC,ElB+DAsb,GAAMrC,UkBxDC,SAAmBtH,GACtB,OAAO,IAAIvM,GAAS8gB,GAAWlmB,KAAM2R,GACzC,ElBuDA2J,GAAMpC,iBkBjDC,WACH,OAAO,IAAI9T,GAAS+gB,GAAkBnmB,MAC1C,ElBgDAsb,GAAMnC,kBkB1CC,WACH,OAAO,IAAI/T,GAASghB,GAAmBpmB,MAC3C,ElByCAsb,GAAMlC,SkBlCC,SAAkB3lB,GACrB,OAAO,IAAI2R,GAASihB,GAAUrmB,KAAMvM,GACxC,ElBiCA6nB,GAAMjC,ekB1BC,SAAwBpS,GAC3B,OAAO,IAAI7B,GAASkhB,GAAgBtmB,KAAMiH,GAC9C,ElByBAqU,GAAMhC,akBlBC,SAAsBhJ,GACzB,OAAO,IAAIlL,GAASmhB,GAAcvmB,KAAMsQ,GAC5C,ElBiBAgL,GAAM5oB,KyBvKC,SAAcsb,GAGjB,OAFAwY,GAAMxmB,KAAMgO,GAELhO,IACX,EzBoKAsb,GAAM7D,QyB7JC,SAAiBzJ,GAGpB,OAFAyY,GAASzmB,KAAMgO,GAERhO,IACX,EzB0JAsb,GAAM3D,UyBnJC,SAAmB3J,GAGtB,OAFA0Y,GAAW1mB,KAAMgO,GAEVhO,IACX,EzBgJAsb,GAAMnB,cS9IC,WAGH,OAFAwM,GAAe3mB,MAERA,IACX,EiBfArQ,OAAOgf,OAAO4M,GAAO,CACjBqL,WzDlCsB,EyDmCtBC,YzDrCuB,EyDsCvBC,WzDnCsB,EyDoCtBC,YzDtCuB,EyDuCvBC,WzDpCsB,EyDqCtB7jB,aACAgB,gBACAiB,YACJsM,SAAIA,GACJvE,SAAIA,GACJS,iBAAIA,GACJC,qBAAIA,GACJC,aAAIA,GACJ6I,MAAIA,GACJ4C,eAAIA,GACA0N,KCIG,SAAclnB,GACjB,OAAO,IAAID,GAAYC,EAC3B,EDLA4H,QAAIA,GACJvJ,OAAIA,GACJyY,SAAIA,GACJvS,aAAIA,GACJwS,OAAIA,GACJiD,gBAAIA,GACJ1D,KAAIA,GACJzD,OAAIA,GACJpI,MAAIA,GACJrF,SAAIA,GACJyS,WAAIA,GACJtB,MAAIA,GACJ5S,MAAIA,GACJ2N,UAAIA,GACJtD,YAAIA,GACJpD,QAAIA,GACJG,eAAIA,GACJmN,UAAIA,GACJ/E,UAAIA,GACJ7H,SAAIA,GACA6b,OnDhCG,SAAgB3gB,EAAU,MAAOxG,EAAU,IAC9C,MAAM+C,EAAO7I,IAAa2hB,cAAcrV,GAQxC,GANI,SAAUxG,EACV+C,EAAKiO,UAAYhR,EAAQiF,KAClB,SAAUjF,IACjB+C,EAAKqO,YAAcpR,EAAQmR,MAG3B,UAAWnR,EAAS,CACpB,MAAM4R,EAAU9W,EAAanI,EAAKqN,EAAQonB,QAE1CrkB,EAAKhI,UAAU8W,OAAOD,EAC9B,CAEI,GAAI,UAAW5R,EACX,IAAK,IAAKoI,EAAO3Z,KAAUmB,OAAOyL,QAAQ2E,EAAQoI,OAC9CA,EAAQ7S,EAAU6S,GAGd3Z,GAASO,EAAUP,KAAW8jB,IAAIC,SAASpK,EAAO3Z,KAClDA,GAAS,MAGbsU,EAAKqF,MAAMC,YAAYD,EAAO3Z,GAQtC,GAJI,UAAWuR,IACX+C,EAAKtU,MAAQuR,EAAQvR,OAGrB,eAAgBuR,EAChB,IAAK,MAAOtM,EAAKjF,KAAUmB,OAAOyL,QAAQ2E,EAAQiQ,YAC9ClN,EAAK8N,aAAand,EAAKjF,GAI/B,GAAI,eAAgBuR,EAChB,IAAK,MAAOtM,EAAKjF,KAAUmB,OAAOyL,QAAQ2E,EAAQiR,YAC9ClO,EAAKrP,GAAOjF,EAIpB,GAAI,YAAauR,EAAS,CACtB,MAAMuD,EAAUrI,EAAU8E,EAAQuD,QAAS,KAAM,CAAEpI,MAAM,IAEzD,IAAK,IAAKzH,EAAKjF,KAAUmB,OAAOyL,QAAQkI,GACpC7P,EAAMsB,EAAUtB,GAChBqP,EAAKQ,QAAQ7P,GAAOjF,CAEhC,CAEI,OAAOsU,CACX,EmDrBIskB,cnD4BG,SAAuBC,GAC1B,OAAOptB,IAAamtB,cAAcC,EACtC,EmD7BI3iB,kBACAE,eACA0iB,WnDkDG,SAAoBpW,GACvB,OAAOjX,IAAastB,eAAerW,EACvC,EmDnDAW,IAAIA,GACAvX,WACA2I,OCvDG,SAAiB7J,EAAK2G,GACzB,OAAO,IAAID,GAAY,CACnB1G,MACAN,OAAQ,YACLiH,GAEX,EDkDAuP,OAAIA,GACJkF,OAAIA,GACJE,WAAIA,GACJ7M,OAAIA,GACJG,QAAIA,GACJwH,MAAIA,GACJ2I,MAAIA,GACAqP,K5C5EG,SAAcC,EAASj5B,EAAQ,MAClC,OAAOyL,IAAaytB,YAAYD,GAAS,EAAOj5B,EACpD,E4C2EIm5B,iB5BvBG,WACH,MAAMnO,EAAYtf,IAAYuf,eAE9B,IAAKD,EAAUE,WACX,MAAO,GAGX,MAAM3O,EAAQyO,EAAUG,WAAW,GAEnCH,EAAUI,kBAEV,MAAM5T,EAAW+E,EAAMqP,kBAEvB,OAAOtoB,EAAM,GAAIkU,EAASf,WAC9B,E4BUAiD,OAAIA,GACJG,QAAIA,GACJxR,OAAIA,GACJwhB,UAAIA,GACJ3S,KAAIA,GACJE,YAAIA,GACJD,SAAIA,GACJE,UAAIA,GACJY,QAAIA,GACJE,eAAIA,GACJD,YAAIA,GACJE,aAAIA,GACJ0R,MAAIA,GACJ/B,MAAIA,GACJvQ,SAAIA,GACAvC,ICtBG,SAAarK,EAAKT,EAAMoH,GAC3B,OAAO,IAAID,GAAY,CACnB1G,MACAT,UACGoH,GAEX,EDiBIhG,kBACAC,uBACJ8P,aAAIA,GACA7P,aACA2tB,UEtGG,SAAmBroB,GACtB,MAAMsoB,EAAS5tB,IAAa4tB,OACvBj0B,MAAM,KACN8R,MAAMmiB,GACHA,EACKC,YACA1yB,UAAU,EAAGmK,EAAKvQ,UAAYuQ,IAEtCuoB,YAEL,OAAKD,EAIEE,mBACHF,EAAOzyB,UAAUmK,EAAKvQ,OAAS,IAJxB,IAMf,EFsFAuiB,QAAIA,GACJpB,WAAIA,GACJC,QAAIA,GACJC,YAAIA,GACJgD,WAAIA,GACJI,WAAIA,GACAgG,a5B/BG,WACH,MAAMD,EAAYtf,IAAYuf,eAE9B,IAAKD,EAAUE,WACX,MAAO,GAGX,MAAM3O,EAAQyO,EAAUG,WAAW,GAC7BtU,EAAQvT,EAAM,GAAIiZ,EAAMK,wBAAwBtF,iBAAiB,MAEvE,IAAKT,EAAMrW,OACP,MAAO,CAAC+b,EAAMK,yBAGlB,GAAqB,IAAjB/F,EAAMrW,OACN,OAAOqW,EAGX,MAAM2iB,EAAiBjd,EAAMid,eACvBC,EAAeld,EAAMkd,aACrBnwB,EAAQlJ,EAAUo5B,GACpBA,EACAA,EAAeve,WACb1R,EAAMnJ,EAAUq5B,GAClBA,EACAA,EAAaxe,WAEXye,EAAgB7iB,EAAM5N,MACxB4N,EAAMxF,QAAQ/H,GACduN,EAAMxF,QAAQ9H,GAAO,GAEnBmO,EAAU,GAEhB,IAAIiiB,EACJ,IAAK,MAAMrlB,KAAQolB,EACXC,GAAYA,EAAS1gB,SAAS3E,KAIlCqlB,EAAWrlB,EACXoD,EAAQ7T,KAAKyQ,IAGjB,OAAOoD,EAAQlX,OAAS,EACpBuD,EAAO2T,GACPA,CACR,E4BdA+L,SAAIA,GACJ1B,QAAIA,GACJC,SAAIA,GACAtW,YACJmgB,aAAIA,GACJtB,aAAIA,GACJyB,gBAAIA,GACJC,iBAAIA,GACJH,YAAIA,GACJC,SAAIA,GACJG,QAAIA,GACJC,WAAIA,GACJC,cAAIA,GACJC,YAAIA,GACJC,YAAIA,GACJC,UAAIA,GACJ3R,OAAIA,GACJmP,OAAIA,GACJrG,KAAIA,GACJld,MAAIA,GACJ6K,QAAIA,GACJkX,YAAIA,GACJlH,aAAIA,GACJmL,GAAIA,GACJ9C,YAAIA,GACJ+C,QAAIA,GACJC,QAAIA,GACJC,SAAIA,GACJC,OAAIA,GACJC,UAAIA,GACAG,cACA4M,YxBlGG,SAAqBC,GAAM5vB,MAAEA,GAAQ,EAAIoB,QAAEA,EAAUI,KAAiB,IACzE,OAAOM,QAAQ8J,IACXgkB,EAAKr3B,KAAKoI,GACNrJ,EAASqJ,GACLoiB,GAAWpiB,EAAK,KAAM,CAAEX,QAAOoB,YAC/B2hB,GAAW,KAAMpiB,EAAK,CAAEX,QAAOoB,cAG/C,EwB2FIkiB,aACAuM,WvBxGG,SAAoBD,GAAM5vB,MAAEA,GAAQ,EAAIoB,QAAEA,EAAUI,KAAiB,IACxE,OAAOM,QAAQ8J,IACXgkB,EAAKr3B,KAAKoI,GACNrJ,EAASqJ,GACL2iB,GAAU3iB,EAAK,KAAM,CAAEX,QAAOoB,YAC9BkiB,GAAU,KAAM3iB,EAAK,CAAEX,QAAOoB,cAG9C,EuBiGI0uB,iB1CtDG,SAA0BC,EAAMC,EAAMC,GAAIpuB,SAAEA,GAAW,EAAI+S,QAAEA,GAAU,EAAIN,eAAEA,GAAiB,EAAI4b,QAAEA,EAAU,GAAM,IAUvH,OATIF,GAAQnuB,IACRmuB,EAAOG,EAAUH,GAGbC,IACAA,EAAKE,EAAUF,KAIf/tB,IACJ,MAAMkuB,EAAyB,eAAfluB,EAAMlB,KAEtB,GAAIovB,GAAWluB,EAAMguB,QAAQ35B,SAAW25B,EACpC,OAGJ,GAAIH,IAAwB,IAAhBA,EAAK7tB,GACb,OAOJ,GAJIoS,GACApS,EAAMoS,kBAGL0b,IAASC,EACV,OAGJ,MAAOI,EAAWC,GAAWpuB,EAAMlB,QAAQgE,GACvCA,GAAY9C,EAAMlB,MAClBgE,GAAYC,UAEVsrB,EAAYruB,IACVkuB,GAAWluB,EAAMguB,QAAQ35B,SAAW25B,IAIpC5b,IAAmBM,GACnB1S,EAAMoS,iBAGL0b,GAILA,EAAK9tB,GAAM,EAGTsuB,EAAUtuB,IACRkuB,GAAWluB,EAAMguB,QAAQ35B,SAAW25B,EAAU,GAI9CD,IAAoB,IAAdA,EAAG/tB,KAIToS,GACApS,EAAMoS,iBAGVG,GAAYta,OAAQk2B,EAAWE,GAC/B9b,GAAYta,OAAQm2B,EAASE,GAAO,EAGxC9b,GAASva,OAAQk2B,EAAWE,EAAU,CAAE3b,YACxCF,GAASva,OAAQm2B,EAASE,EAAO,CAEzC,E0CdArU,UAAIA,GACJG,cAAIA,GACJxJ,KAAIA,GACJE,QAAIA,GACAyd,WGxJG,WACH,MAAMt2B,EAASsH,IAEXtH,EAAOu2B,IAAMA,KACbv2B,EAAOu2B,EAAIC,GAEnB,EHmJAzf,UAAIA,GACJ8O,IAAIA,GACJC,OAAIA,GACJhN,aAAIA,GACJC,OAAIA,GACJd,QAAIA,GACAwe,clDtJG,SAAuBC,GAAO5wB,YAAEA,EAAc,aAAgB,IACjE,OAAOmM,GAAO0kB,gBAAgBD,EAAO5wB,EACzC,EkDqJIkG,iBACAmG,aACA7F,eACAsqB,MCtDG,SAAepwB,EAAKT,EAAMoH,GAC7B,OAAO,IAAID,GAAY,CACnB1G,MACAT,OACAG,OAAQ,WACLiH,GAEX,EDgDAiV,SAAIA,GACJE,SAAIA,GACJC,SAAIA,GACAsU,KC1BG,SAAcrwB,EAAKT,EAAMoH,GAC5B,OAAO,IAAID,GAAY,CACnB1G,MACAT,OACAG,OAAQ,UACLiH,GAEX,EDoBAiX,QAAIA,GACJE,UAAIA,GACJrL,KAAIA,GACJE,QAAIA,GACA2d,ICCG,SAAatwB,EAAKT,EAAMoH,GAC3B,OAAO,IAAID,GAAY,CACnB1G,MACAT,OACAG,OAAQ,SACLiH,GAEX,EDPIwb,SACAoO,SzB9IG,SAAkBplB,EAAU1K,EAAU,MACzC,MAAMiJ,EAAO0B,GAAUD,EAAU,CAC7BzB,MAAM,EACNkD,UAAU,EACVC,QAAQ,EACR/V,UAAU,EACV0C,QAAQ,EACRoS,MAAM,EACNnL,QAASA,GAAWI,MAGxB,OAAO,IAAImL,GAAStC,EAAO,CAACA,GAAQ,GACxC,EyBmIAgV,MAAIA,GACAtB,SACJzD,KAAIA,GACJxD,OAAIA,GACJkB,gBAAIA,GACJ0B,YAAIA,GACAyX,aExJG,SAAsBrqB,GAAMsqB,KAAEA,EAAO,KAAIC,OAAEA,GAAS,GAAU,IACjE,IAAKvqB,EACD,OAGJ,IAAIsoB,EAAS,GAAGtoB,2CAEZsqB,IACAhC,GAAU,SAASgC,KAGnBC,IACAjC,GAAU,WAGd5tB,IAAa4tB,OAASA,CAC1B,EFyIArW,WAAIA,GACJd,cAAIA,GACJxD,YAAIA,GACJkB,oBAAIA,GACJuC,eAAIA,GACJjB,WAAIA,GACJC,YAAIA,GACJrH,SAAIA,GACJK,UAAIA,GACJgQ,KAAIA,GACAoR,StB1LG,SAAkB/kB,EAAMjJ,EAAcogB,IACzC,MAAM6N,EAAW/vB,IAAa2hB,cAAc,YAC5CoO,EAASjZ,UAAY/L,EACrB,MAAMgB,EAAWgkB,EAAS1e,QACpBrG,EAAanT,EAAM,GAAIkU,EAASb,UAEtC,IAAK,MAAMqF,KAASvF,EAChBiX,GAAa1R,EAAOzO,GAGxB,OAAOiuB,EAASjZ,SACpB,EsBgLAiJ,OAAIA,GACJE,UAAIA,GACJtQ,UAAIA,GACJC,eAAIA,GACAogB,gB3DlIG,SAAyBlqB,GAC5B5M,EAAOmF,EAAcyH,EACzB,E2DiIImqB,qB3D3HG,SAA8BnqB,GACjC5M,EAAOoG,EAAmBwG,EAC9B,E2D0HA6Q,aAAIA,GACAzW,aACAgwB,UEjJG,SAAmB5qB,EAAM/Q,GAAO47B,QAAEA,EAAU,KAAIP,KAAEA,EAAO,KAAIC,OAAEA,GAAS,GAAU,IACrF,IAAKvqB,EACD,OAGJ,IAAIsoB,EAAS,GAAGtoB,KAAQ/Q,IAExB,GAAI47B,EAAS,CACT,MAAMC,EAAO,IAAI1zB,KACjB0zB,EAAKC,QACDD,EAAK7nB,UACK,IAAV4nB,GAEJvC,GAAU,YAAYwC,EAAKE,eACnC,CAEQV,IACAhC,GAAU,SAASgC,KAGnBC,IACAjC,GAAU,WAGd5tB,IAAa4tB,OAASA,CAC1B,EFyHAvW,QAAIA,GACJT,WAAIA,GACJC,QAAIA,GACJ1I,YAAIA,GACJwN,UAAIA,GACJE,WAAIA,GACJC,WAAIA,GACJ3D,SAAIA,GACJnB,QAAIA,GACJG,SAAIA,GACA/W,YACJ4L,OAAIA,GACJuM,KAAIA,GACJxG,SAAIA,GACJlE,QAAIA,GACJG,SAAIA,GACJgC,KAAIA,GACJf,UAAIA,GACJM,WAAIA,GACJ7F,KAAIA,GACJ4C,QAAIA,GACJkM,OAAIA,GACJE,YAAIA,GACJtE,aAAIA,GACJS,WAAIA,GACJqI,OAAIA,GACArd,W3DzHG,SAAoB0wB,GAAS,GAChC5wB,EAAOE,WAAa0wB,CACxB,E2DwHA5R,QAAIA,GACJtP,MAAIA,GACJuP,cAAIA,GACJC,cAAIA,GACJI,iBAAIA,GACJC,kBAAIA,GACJH,aAAIA,GACJC,UAAIA,GACJG,SAAIA,GACJC,eAAIA,GACJC,aAAIA,GACJ5mB,KAAIA,GACJ+kB,QAAIA,GACJE,UAAIA,GACJwC,cAAIA,KAGJ,IAAK,MAAO1mB,EAAKjF,KAAUmB,OAAOyL,QAAQxF,GACtC2lB,GAAM,IAAI9nB,KAASjF,EG5PvB,IAAI46B,GAmBG,SAASqB,GAAgB73B,EAAQ1C,GAOpC,OANAmK,EAAUzH,GACVuH,EAAWjK,GAAY0C,EAAO1C,UAE9Bk5B,GAAKx2B,EAAOu2B,EACZv2B,EAAOu2B,EAAIA,GAEJA,EACX,C,OC3Bex6B,EAAS+7B,YAAcD,GAAgBC,YAAcD,E"} \ No newline at end of file +{"version":3,"names":["isArray","Array","isArrayLike","value","isObject","isFunction","isWindow","isElement","Symbol","iterator","isNumeric","length","isDocument","nodeType","isFragment","host","isNaN","Number","isNode","isNull","parseFloat","isFinite","Object","isPlainObject","constructor","isShadow","isString","isUndefined","undefined","document","defaultView","clamp","min","max","Math","clampPercent","dist","x1","y1","x2","y2","len","hypot","map","fromMin","fromMax","toMin","toMax","random","a","b","randomInt","toStep","step","round","toFixed","replace","merge","array","arrays","reduce","acc","other","prototype","push","apply","unique","from","Set","wrap","isBrowser","window","_requestAnimationFrame","args","requestAnimationFrame","callback","setTimeout","evaluate","extend","object","objects","val","k","getDot","key","defaultValue","keys","split","shift","setDot","overwrite","hasOwnProperty","call","concat","join","escapeChars","unescapeChars","amp","lt","gt","quot","apos","_splitString","string","word","toLowerCase","camelCase","index","capitalize","charAt","toUpperCase","substring","escapeRegExp","kebabCase","leading","animationReference","newArgs","running","animation","_","cancel","global","cancelAnimationFrame","clearTimeout","callbacks","arg","reduceRight","curried","wait","trailing","debounceReference","lastRan","debounced","now","Date","delta","filter","some","includes","match","every","otherIndex","v1","v2","amount","ran","result","defaultArgs","slice","v","pointer","chars","fill","start","end","sign","abs","i","throttleReference","throttled","code","ajaxDefaults","afterSend","beforeSend","cache","contentType","data","headers","isLocal","method","onProgress","onUploadProgress","processData","rejectOnCancel","responseType","url","xhr","XMLHttpRequest","animationDefaults","duration","type","infinite","debug","config","context","useTimeout","getAjaxDefaults","getAnimationDefaults","getContext","getWindow","setContext","Error","setWindow","debounce","Promise","resolve","then","eventNamespacedRegExp","event","RegExp","parseClasses","classList","flat","flatMap","parseData","json","fromEntries","entries","JSON","stringify","parseDataset","lower","trim","parse","e","parseEvent","parseEvents","events","allowedTags","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","eventLookup","mousedown","touchstart","animations","Map","WeakMap","queues","styles","appendQueryString","searchParams","getSearchParams","append","setSearchParams","getURL","baseHref","location","origin","pathname","URL","parseFormData","values","parseValues","formData","FormData","set","parseParams","paramString","encodeURI","parseValue","subKey","name","urlData","search","toString","newUrl","pos","indexOf","AjaxRequest","options","this","_options","href","test","protocol","_promise","reject","_resolve","_isResolved","_reject","error","_isRejected","dataParams","URLSearchParams","open","username","password","setRequestHeader","mimeType","overrideMimeType","timeout","onload","status","response","onerror","onprogress","loaded","total","upload","send","reason","_isCancelled","abort","onRejected","catch","onFinally","finally","onFulfilled","setPrototypeOf","animating","getTime","timeline","currentTime","performance","update","time","node","currentAnimations","otherAnimations","delete","size","Animation","_node","_callback","dataset","animationStart","has","get","clone","stop","finish","_isStopped","_isFinished","progress","sqrt","animationTime","animationProgress","AnimationSet","_animations","all","attachShadow","selector","parseNode","mode","createFragment","createDocumentFragment","createRange","parser","DOMParser","parseHTML","html","childNodes","createContextualFragment","children","QuerySet","nodes","_nodes","each","forEach","begin","find","findById","findByClass","findByTag","querySelectorAll","parseNodes","fragment","shadow","results","newNodes","className","getElementsByClassName","id","tagName","getElementsByTagName","findOne","findOneById","findOneByClass","findOneByTag","querySelector","item","getElementById","_parseNode","nodeFilter","HTMLCollection","NodeList","_parseNodes","parseFilter","matches","isSameNode","parseFilterContains","contains","parseNodesFilter","animate","newAnimations","dropIn","slideIn","direction","dropOut","slideOut","fadeIn","style","setProperty","fadeOut","rotateIn","inverse","x","y","z","rotateOut","useGpu","dir","translateStyle","clientHeight","clientWidth","translateAmount","squeezeIn","initialHeight","height","initialWidth","width","sizeStyle","squeezeOut","parentNode","findIndex","normalize","serialize","serializeArray","getAttribute","option","selectedOptions","sort","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINS","child","first","elementsOnly","closest","limitFilter","parents","commonAncestor","range","selectNode","setStartBefore","setEndAfter","pop","commonAncestorContainer","contents","content","next","nextSibling","nextAll","offsetParent","parent","unshift","prev","previousSibling","prevAll","siblings","shadowRoot","sibling","delegateFactory","getDelegate","target","getDelegateContainsFactory","getDelegateMatchFactory","delegate","defineProperty","configurable","enumerable","delegateFactoryClean","delegateTarget","writable","namespaceFactory","eventName","namespaceRegExp","preventFactory","preventDefault","selfDestructFactory","capture","removeEvent","addEvent","eventNames","passive","selfDestruct","realEventName","eventData","nodeEvents","realCallback","addEventListener","addEventDelegate","addEventDelegateOnce","addEventOnce","cloneEvents","otherSelector","realEvents","regExp","removeEventListener","removeEventDelegate","triggerEvent","detail","bubbles","cancelable","realEvent","CustomEvent","assign","namespace","dispatchEvent","triggerOne","deep","cloneNode","deepClone","_events","_data","nodeData","nodeAnimations","detach","remove","empty","removeNode","replaceAll","replaceWith","others","insertBefore","clones","attribute","attributes","nodeName","nodeValue","getDataset","getHTML","getProperty","property","getText","getValue","removeAttribute","removeDataset","removeProperty","setAttribute","setDataset","setHTML","innerHTML","properties","setText","text","textContent","setValue","cloneData","setData","getData","removeData","newData","addClass","classes","add","css","getComputedStyle","nodeStyles","getPropertyValue","getStyle","hide","removeClass","setStyle","important","CSS","supports","show","toggle","display","toggleClass","center","offset","nodeBox","rect","left","top","constrain","containerSelector","containerBox","getScrollX","documentElement","scrollHeight","outerHeight","getScrollY","scrollWidth","outerWidth","preScrollX","preScrollY","leftOffset","topOffset","right","oldLeft","trueLeft","bottom","oldTop","trueTop","postScrollX","postScrollY","distTo","nodeCenter","distToNode","otherCenter","nearestTo","closestDistance","MAX_VALUE","nearestToNode","percentX","percent","percentY","position","offsetLeft","offsetTop","getBoundingClientRect","scrollX","scrollY","scrollingElement","scrollLeft","scrollTop","setScroll","scroll","setScrollX","setScrollY","boxSize","outer","innerHeight","parseInt","innerWidth","blur","click","focus","ready","readyState","once","after","reverse","appendTo","before","insertAfter","prepend","firstChild","prependTo","unwrap","outerParent","firstClone","firstCloneNode","deepest","childElementCount","wrapAll","firstNode","wrapInner","clearQueue","queueName","queue","dequeue","runningQueue","connected","isConnected","equal","isEqualNode","filterOne","fixed","hidden","visibilityState","not","notOne","same","visible","withAnimation","withAttribute","hasAttribute","withChildren","withClass","withCSSAnimation","withCSSTransition","withData","withDescendent","withProperty","afterSelection","selection","getSelection","rangeCount","getRangeAt","removeAllRanges","collapse","insertNode","beforeSelection","select","addRange","selectAll","wrapSelection","extractContents","hasAnimation","hasChildren","hasClass","hasCSSAnimation","hasCSSTransition","hasData","hasDataset","hasDescendent","hasFragment","hasProperty","hasShadow","is","isEqual","isFixed","isHidden","isSame","isVisible","proto","query","loadScript","src","defer","script","createElement","head","appendChild","loadStyle","rel","link","sanitizeNode","_allowedTags","allowedAttributes","_sort","_addClass","_addEvent","_addEventDelegate","_addEventDelegateOnce","_addEventOnce","_after","_afterSelection","_animate","_append","_appendTo","_attachShadow","_before","_beforeSelection","_blur","_center","_child","_children","_clearQueue","_click","_clone","_cloneData","_cloneEvents","_closest","_commonAncestor","_connected","container","_constrain","_contents","_css","delay","_detach","_distTo","_distToNode","_dropIn","_dropOut","_empty","eq","_equal","_fadeIn","_fadeOut","_filter","_filterOne","_find","_findByClass","_findById","_findByTag","_findOne","_findOneByClass","_findOneById","_findOneByTag","_fixed","_focus","_fragment","_getAttribute","_getData","_getDataset","_getHTML","_getProperty","_getScrollX","_getScrollY","_getStyle","_getText","_getValue","_hasAnimation","_hasAttribute","_hasChildren","_hasClass","_hasCSSAnimation","_hasCSSTransition","_hasData","_hasDataset","_hasDescendent","_hasFragment","_hasProperty","_hasShadow","_height","_hidden","_hide","_index","_indexOf","_insertAfter","_insertBefore","_is","_isConnected","_isEqual","_isFixed","_isHidden","_isSame","_isVisible","last","_nearestTo","_nearestToNode","_next","_nextAll","_normalize","_not","_notOne","_offsetParent","_parent","_parents","_percentX","_percentY","_position","_prepend","_prependTo","_prev","_prevAll","_queue","_rect","_remove","_removeAttribute","_removeClass","_removeData","_removeDataset","_removeEvent","_removeEventDelegate","_removeProperty","_replaceAll","_replaceWith","_rotateIn","_rotateOut","_same","_select","_selectAll","_serialize","_serializeArray","_setAttribute","_setData","_setDataset","_setHTML","_setProperty","_setScroll","_setScrollX","_setScrollY","_setStyle","_setText","_setValue","_shadow","_show","_siblings","_slideIn","_slideOut","_squeezeIn","_squeezeOut","_stop","_tagName","_toggle","_toggleClass","_triggerEvent","_triggerOne","_unwrap","_visible","_width","_withAnimation","_withAttribute","_withChildren","_withClass","_withCSSAnimation","_withCSSTransition","_withData","_withDescendent","_withProperty","_wrap","_wrapAll","_wrapInner","_wrapSelection","BORDER_BOX","CONTENT_BOX","MARGIN_BOX","PADDING_BOX","SCROLL_BOX","ajax","create","class","createComment","comment","createText","createTextNode","exec","command","execCommand","extractSelection","getCookie","cookie","trimStart","decodeURIComponent","startContainer","endContainer","selectedNodes","lastNode","loadScripts","urls","loadStyles","mouseDragFactory","down","move","up","touches","_debounce","isTouch","moveEvent","upEvent","realMove","realUp","noConflict","$","_$","parseDocument","input","parseFromString","patch","post","put","queryOne","removeCookie","path","secure","sanitize","template","setAjaxDefaults","setAnimationDefaults","setCookie","expires","date","setTime","toUTCString","enable","registerGlobals","globalThis"],"sources":["../node_modules/@fr0st/core/src/testing.js","../node_modules/@fr0st/core/src/math.js","../node_modules/@fr0st/core/src/array.js","../node_modules/@fr0st/core/src/function.js","../node_modules/@fr0st/core/src/object.js","../node_modules/@fr0st/core/src/string.js","../src/config.js","../src/helpers.js","../src/vars.js","../src/ajax/helpers.js","../src/ajax/ajax-request.js","../src/animation/helpers.js","../src/animation/animation.js","../src/animation/animation-set.js","../src/manipulation/create.js","../src/parser/parser.js","../src/query/query-set.js","../src/traversal/find.js","../src/filters.js","../src/animation/animate.js","../src/animation/animations.js","../src/utility/utility.js","../src/traversal/traversal.js","../src/events/event-factory.js","../src/events/event-handlers.js","../src/manipulation/manipulation.js","../src/attributes/attributes.js","../src/attributes/data.js","../src/attributes/styles.js","../src/attributes/position.js","../src/attributes/scroll.js","../src/attributes/size.js","../src/events/events.js","../src/manipulation/move.js","../src/manipulation/wrap.js","../src/queue/queue.js","../src/traversal/filter.js","../src/utility/selection.js","../src/utility/tests.js","../src/query/proto.js","../src/query/query.js","../src/scripts/scripts.js","../src/styles/styles.js","../src/utility/sanitize.js","../src/query/utility/utility.js","../src/query/attributes/styles.js","../src/query/events/event-handlers.js","../src/query/manipulation/move.js","../src/query/utility/selection.js","../src/query/animation/animate.js","../src/query/manipulation/create.js","../src/query/events/events.js","../src/query/attributes/position.js","../src/query/traversal/traversal.js","../src/query/queue/queue.js","../src/query/manipulation/manipulation.js","../src/query/attributes/data.js","../src/query/traversal/filter.js","../src/query/animation/animations.js","../src/query/traversal/find.js","../src/query/attributes/attributes.js","../src/query/attributes/scroll.js","../src/query/utility/tests.js","../src/query/attributes/size.js","../src/query/manipulation/wrap.js","../src/fquery.js","../src/ajax/ajax.js","../src/cookie/cookie.js","../src/globals.js","../src/index.js"],"sourcesContent":["/**\n * Testing methods\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst DOCUMENT_NODE = 9;\nconst DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Returns true if the value is an array.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is an array, otherwise FALSE.\n */\nexport const isArray = Array.isArray;\n\n/**\n * Returns true if the value is array-like.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is array-like, otherwise FALSE.\n */\nexport const isArrayLike = (value) =>\n isArray(value) ||\n (\n isObject(value) &&\n !isFunction(value) &&\n !isWindow(value) &&\n !isElement(value) &&\n (\n (\n Symbol.iterator in value &&\n isFunction(value[Symbol.iterator])\n ) ||\n (\n 'length' in value &&\n isNumeric(value.length) &&\n (\n !value.length ||\n value.length - 1 in value\n )\n )\n )\n );\n\n/**\n * Returns true if the value is a Boolean.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is boolean, otherwise FALSE.\n */\nexport const isBoolean = (value) =>\n value === !!value;\n\n/**\n * Returns true if the value is a Document.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Document, otherwise FALSE.\n */\nexport const isDocument = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_NODE;\n\n/**\n * Returns true if the value is a HTMLElement.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a HTMLElement, otherwise FALSE.\n */\nexport const isElement = (value) =>\n !!value &&\n value.nodeType === ELEMENT_NODE;\n\n/**\n * Returns true if the value is a DocumentFragment.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a DocumentFragment, otherwise FALSE.\n */\nexport const isFragment = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !value.host;\n\n/**\n * Returns true if the value is a function.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a function, otherwise FALSE.\n */\nexport const isFunction = (value) =>\n typeof value === 'function';\n\n/**\n * Returns true if the value is NaN.\n * @param {*} value The value to test.\n * @returns {Boolean} TRUE if the value is NaN, otherwise FALSE.\n */\nexport const isNaN = Number.isNaN;\n\n/**\n * Returns true if the value is a Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a Node, otherwise FALSE.\n */\nexport const isNode = (value) =>\n !!value &&\n (\n value.nodeType === ELEMENT_NODE ||\n value.nodeType === TEXT_NODE ||\n value.nodeType === COMMENT_NODE\n );\n\n/**\n * Returns true if the value is null.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is null, otherwise FALSE.\n */\nexport const isNull = (value) =>\n value === null;\n\n/**\n * Returns true if the value is numeric.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is numeric, otherwise FALSE.\n */\nexport const isNumeric = (value) =>\n !isNaN(parseFloat(value)) &&\n isFinite(value);\n\n/**\n * Returns true if the value is an object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is an object, otherwise FALSE.\n */\nexport const isObject = (value) =>\n !!value &&\n value === Object(value);\n\n/**\n * Returns true if the value is a plain object.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a plain object, otherwise FALSE.\n */\nexport const isPlainObject = (value) =>\n !!value &&\n value.constructor === Object;\n\n/**\n * Returns true if the value is a ShadowRoot.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a ShadowRoot, otherwise FALSE.\n */\nexport const isShadow = (value) =>\n !!value &&\n value.nodeType === DOCUMENT_FRAGMENT_NODE &&\n !!value.host;\n\n/**\n * Returns true if the value is a string.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a string, otherwise FALSE.\n */\nexport const isString = (value) =>\n value === `${value}`;\n\n/**\n * Returns true if the value is a text Node.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is a text Node, otherwise FALSE.\n */\nexport const isText = (value) =>\n !!value &&\n value.nodeType === TEXT_NODE;\n\n/**\n * Returns true if the value is undefined.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE if the value is undefined, otherwise FALSE.\n */\nexport const isUndefined = (value) =>\n value === undefined;\n\n/**\n * Returns true if the value is a Window.\n * @param {*} value The value to test.\n * @return {Boolean} TRUE is the value is a Window, otherwise FALSE.\n */\nexport const isWindow = (value) =>\n !!value &&\n !!value.document &&\n value.document.defaultView === value;\n","import { isNull } from './testing.js';\n\n/**\n * Math methods\n */\n\n/**\n * Clamp a value between a min and max.\n * @param {number} value The value to clamp.\n * @param {number} [min=0] The minimum value of the clamped range.\n * @param {number} [max=1] The maximum value of the clamped range.\n * @return {number} The clamped value.\n */\nexport const clamp = (value, min = 0, max = 1) =>\n Math.max(\n min,\n Math.min(\n max,\n value,\n ),\n );\n\n/**\n * Clamp a value between 0 and 100.\n * @param {number} value The value to clamp.\n * @return {number} The clamped value.\n */\nexport const clampPercent = (value) =>\n clamp(value, 0, 100);\n\n/**\n * Get the distance between two vectors.\n * @param {number} x1 The first vector X co-ordinate.\n * @param {number} y1 The first vector Y co-ordinate.\n * @param {number} x2 The second vector X co-ordinate.\n * @param {number} y2 The second vector Y co-ordinate.\n * @return {number} The distance between the vectors.\n */\nexport const dist = (x1, y1, x2, y2) =>\n len(\n x1 - x2,\n y1 - y2,\n );\n\n/**\n * Inverse linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} value The value to inverse interpolate.\n * @return {number} The interpolated amount.\n */\nexport const inverseLerp = (v1, v2, value) =>\n (value - v1) / (v2 - v1);\n\n/**\n * Get the length of an X,Y vector.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @returns {number} The length of the vector.\n */\nexport const len = Math.hypot;\n\n/**\n * Linear interpolation from one value to another.\n * @param {number} v1 The starting value.\n * @param {number} v2 The ending value.\n * @param {number} amount The amount to interpolate.\n * @return {number} The interpolated value.\n */\nexport const lerp = (v1, v2, amount) =>\n v1 *\n (1 - amount) +\n v2 *\n amount;\n\n/**\n * Map a value from one range to another.\n * @param {number} value The value to map.\n * @param {number} fromMin The minimum value of the current range.\n * @param {number} fromMax The maximum value of the current range.\n * @param {number} toMin The minimum value of the target range.\n * @param {number} toMax The maximum value of the target range.\n * @return {number} The mapped value.\n */\nexport const map = (value, fromMin, fromMax, toMin, toMax) =>\n (value - fromMin) *\n (toMax - toMin) /\n (fromMax - fromMin) +\n toMin;\n\n/**\n * Return a random floating-point number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const random = (a = 1, b = null) =>\n isNull(b) ?\n Math.random() * a :\n map(\n Math.random(),\n 0,\n 1,\n a,\n b,\n );\n\n/**\n * Return a random number.\n * @param {number} [a=1] The minimum value (inclusive).\n * @param {number} [b] The maximum value (exclusive).\n * @return {number} A random number.\n */\nexport const randomInt = (a = 1, b = null) =>\n random(a, b) | 0;\n\n/**\n * Constrain a number to a specified step-size.\n * @param {number} value The value to constrain.\n * @param {number} step The minimum step-size.\n * @return {number} The constrained value.\n */\nexport const toStep = (value, step = 0.01) =>\n parseFloat(\n (\n Math.round(value / step) *\n step\n ).toFixed(\n `${step}`.replace(/\\d*\\.?/, '').length,\n ),\n );\n","import { randomInt, toStep } from './math.js';\nimport { isArray, isArrayLike, isUndefined } from './testing.js';\n\n/**\n * Array methods\n */\n\n/**\n * Create a new array containing the values of the first array, that do not exist in any of the additional passed arrays.\n * @param {array} array The input array.\n * @param {...array} arrays The arrays to compare against.\n * @return {array} The output array.\n */\nexport const diff = (array, ...arrays) => {\n arrays = arrays.map(unique);\n return array.filter(\n (value) => !arrays\n .some((other) => other.includes(value)),\n );\n};\n\n/**\n * Create a new array containing the unique values that exist in all of the passed arrays.\n * @param {...array} arrays The input arrays.\n * @return {array} The output array.\n */\nexport const intersect = (...arrays) =>\n unique(\n arrays\n .reduce(\n (acc, array, index) => {\n array = unique(array);\n return merge(\n acc,\n array.filter(\n (value) =>\n arrays.every(\n (other, otherIndex) =>\n index == otherIndex ||\n other.includes(value),\n ),\n ),\n );\n },\n [],\n ),\n );\n\n/**\n * Merge the values from one or more arrays or array-like objects onto an array.\n * @param {array} array The input array.\n * @param {...array|object} arrays The arrays or array-like objects to merge.\n * @return {array} The output array.\n */\nexport const merge = (array = [], ...arrays) =>\n arrays.reduce(\n (acc, other) => {\n Array.prototype.push.apply(acc, other);\n return array;\n },\n array,\n );\n\n/**\n * Return a random value from an array.\n * @param {array} array The input array.\n * @return {*} A random value from the array, or null if it is empty.\n */\nexport const randomValue = (array) =>\n array.length ?\n array[randomInt(array.length)] :\n null;\n\n/**\n * Return an array containing a range of values.\n * @param {number} start The first value of the sequence.\n * @param {number} end The value to end the sequence on.\n * @param {number} [step=1] The increment between values in the sequence.\n * @return {number[]} The array of values from start to end.\n */\nexport const range = (start, end, step = 1) => {\n const sign = Math.sign(end - start);\n return new Array(\n (\n (\n Math.abs(end - start) /\n step\n ) +\n 1\n ) | 0,\n )\n .fill()\n .map(\n (_, i) =>\n start + toStep(\n (i * step * sign),\n step,\n ),\n );\n};\n\n/**\n * Remove duplicate elements in an array.\n * @param {array} array The input array.\n * @return {array} The filtered array.\n */\nexport const unique = (array) =>\n Array.from(\n new Set(array),\n );\n\n/**\n * Create an array from any value.\n * @param {*} value The input value.\n * @return {array} The wrapped array.\n */\nexport const wrap = (value) =>\n isUndefined(value) ?\n [] :\n (\n isArray(value) ?\n value :\n (\n isArrayLike(value) ?\n merge([], value) :\n [value]\n )\n );\n","import { isFunction, isUndefined } from './testing.js';\n\n/**\n * Function methods\n */\n\nconst isBrowser = typeof window !== 'undefined' && 'requestAnimationFrame' in window;\n\n/**\n * Execute a callback on the next animation frame\n * @param {function} callback Callback function to execute.\n * @return {number} The request ID.\n */\nconst _requestAnimationFrame = isBrowser ?\n (...args) => window.requestAnimationFrame(...args) :\n (callback) => setTimeout(callback, 1000 / 60);\n\n/**\n * Create a wrapped version of a function that executes at most once per animation frame\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the animation frame.\n * @return {function} The wrapped function.\n */\nexport const animation = (callback, { leading = false } = {}) => {\n let animationReference;\n let newArgs;\n let running;\n\n const animation = (...args) => {\n newArgs = args;\n\n if (running) {\n return;\n }\n\n if (leading) {\n callback(...newArgs);\n }\n\n running = true;\n animationReference = _requestAnimationFrame((_) => {\n if (!leading) {\n callback(...newArgs);\n }\n\n running = false;\n animationReference = null;\n });\n };\n\n animation.cancel = (_) => {\n if (!animationReference) {\n return;\n }\n\n if (isBrowser) {\n global.cancelAnimationFrame(animationReference);\n } else {\n clearTimeout(animationReference);\n }\n\n running = false;\n animationReference = null;\n };\n\n return animation;\n};\n\n/**\n * Create a wrapped function that will execute each callback in reverse order,\n * passing the result from each function to the previous.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const compose = (...callbacks) =>\n (arg) =>\n callbacks.reduceRight(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function, that will return new functions\n * until the number of total arguments passed reaches the arguments length\n * of the original function (at which point the function will execute).\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const curry = (callback) => {\n const curried = (...args) =>\n args.length >= callback.length ?\n callback(...args) :\n (...newArgs) =>\n curried(\n ...args.concat(newArgs),\n );\n\n return curried;\n};\n\n/**\n * Create a wrapped version of a function that executes once per wait period\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=false] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const debounce = (callback, wait = 0, { leading = false, trailing = true } = {}) => {\n let debounceReference;\n let lastRan;\n let newArgs;\n\n const debounced = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (!trailing) {\n return;\n }\n\n if (debounceReference) {\n clearTimeout(debounceReference);\n }\n\n debounceReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n debounceReference = null;\n },\n wait,\n );\n };\n\n debounced.cancel = (_) => {\n if (!debounceReference) {\n return;\n }\n\n clearTimeout(debounceReference);\n\n debounceReference = null;\n };\n\n return debounced;\n};\n\n/**\n * Evaluate a value from a function or value.\n * @param {*} value The value to evaluate.\n * @return {*} The evaluated value.\n */\nexport const evaluate = (value) =>\n isFunction(value) ?\n value() :\n value;\n\n/**\n * Create a wrapped version of a function that will only ever execute once.\n * Subsequent calls to the wrapped function will return the result of the initial call.\n * @param {function} callback Callback function to execute.\n * @return {function} The wrapped function.\n */\nexport const once = (callback) => {\n let ran;\n let result;\n\n return (...args) => {\n if (ran) {\n return result;\n }\n\n ran = true;\n result = callback(...args);\n return result;\n };\n};\n\n/**\n * Create a wrapped version of a function with predefined arguments.\n * @param {function} callback Callback function to execute.\n * @param {...*} [defaultArgs] Default arguments to pass to the function.\n * @return {function} The wrapped function.\n */\nexport const partial = (callback, ...defaultArgs) =>\n (...args) =>\n callback(\n ...(defaultArgs\n .slice()\n .map((v) =>\n isUndefined(v) ?\n args.shift() :\n v,\n ).concat(args)\n ),\n );\n\n/**\n * Create a wrapped function that will execute each callback in order,\n * passing the result from each function to the next.\n * @param {...function} callbacks Callback functions to execute.\n * @return {function} The wrapped function.\n */\nexport const pipe = (...callbacks) =>\n (arg) =>\n callbacks.reduce(\n (acc, callback) =>\n callback(acc),\n arg,\n );\n\n/**\n * Create a wrapped version of a function that executes at most once per wait period.\n * (using the most recent arguments passed to it).\n * @param {function} callback Callback function to execute.\n * @param {number} [wait=0] The number of milliseconds to wait until next execution.\n * @param {object} [options] The options for executing the function.\n * @param {Boolean} [options.leading=true] Whether to execute on the leading edge of the wait period.\n * @param {Boolean} [options.trailing=true] Whether to execute on the trailing edge of the wait period.\n * @return {function} The wrapped function.\n */\nexport const throttle = (callback, wait = 0, { leading = true, trailing = true } = {}) => {\n let throttleReference;\n let lastRan;\n let newArgs;\n let running;\n\n const throttled = (...args) => {\n const now = Date.now();\n const delta = lastRan ?\n now - lastRan :\n null;\n\n if (leading && (delta === null || delta >= wait)) {\n lastRan = now;\n callback(...args);\n return;\n }\n\n newArgs = args;\n if (running || !trailing) {\n return;\n }\n\n running = true;\n throttleReference = setTimeout(\n (_) => {\n lastRan = Date.now();\n callback(...newArgs);\n\n running = false;\n throttleReference = null;\n },\n delta === null ?\n wait :\n wait - delta,\n );\n };\n\n throttled.cancel = (_) => {\n if (!throttleReference) {\n return;\n }\n\n clearTimeout(throttleReference);\n\n running = false;\n throttleReference = null;\n };\n\n return throttled;\n};\n\n/**\n * Execute a function a specified number of times.\n * @param {function} callback Callback function to execute.\n * @param {number} amount The amount of times to execute the callback.\n */\nexport const times = (callback, amount) => {\n while (amount--) {\n if (callback() === false) {\n break;\n }\n }\n};\n","import { isArray, isObject, isPlainObject } from './testing.js';\n\n/**\n * Object methods\n */\n\n/**\n * Merge the values from one or more objects onto an object (recursively).\n * @param {object} object The input object.\n * @param {...object} objects The objects to merge.\n * @return {object} The output objects.\n */\nexport const extend = (object, ...objects) =>\n objects.reduce(\n (acc, val) => {\n for (const k in val) {\n if (isArray(val[k])) {\n acc[k] = extend(\n isArray(acc[k]) ?\n acc[k] :\n [],\n val[k],\n );\n } else if (isPlainObject(val[k])) {\n acc[k] = extend(\n isPlainObject(acc[k]) ?\n acc[k] :\n {},\n val[k],\n );\n } else {\n acc[k] = val[k];\n }\n }\n return acc;\n },\n object,\n );\n\n/**\n * Remove a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to remove from the object.\n */\nexport const forgetDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n break;\n }\n\n if (keys.length) {\n object = object[key];\n } else {\n delete object[key];\n }\n }\n};\n\n/**\n * Retrieve the value of a specified key from an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to retrieve from the object.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {*} The value retrieved from the object.\n */\nexport const getDot = (object, key, defaultValue) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return defaultValue;\n }\n\n object = object[key];\n }\n\n return object;\n};\n\n/**\n * Returns true if a specified key exists in an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to test for in the object.\n * @return {Boolean} TRUE if the key exists, otherwise FALSE.\n */\nexport const hasDot = (object, key) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (\n !isObject(object) ||\n !(key in object)\n ) {\n return false;\n }\n\n object = object[key];\n }\n\n return true;\n};\n\n/**\n * Retrieve values of a specified key from an array of objects using dot notation.\n * @param {object[]} objects The input objects.\n * @param {string} key The key to retrieve from the objects.\n * @param {*} [defaultValue] The default value if key does not exist.\n * @return {array} An array of values retrieved from the objects.\n */\nexport const pluckDot = (objects, key, defaultValue) =>\n objects\n .map((pointer) =>\n getDot(pointer, key, defaultValue),\n );\n\n/**\n * Set a specified value of a key for an object using dot notation.\n * @param {object} object The input object.\n * @param {string} key The key to set in the object.\n * @param {*} value The value to set.\n * @param {object} [options] The options for setting the value.\n * @param {Boolean} [options.overwrite=true] Whether to overwrite, if the key already exists.\n */\nexport const setDot = (object, key, value, { overwrite = true } = {}) => {\n const keys = key.split('.');\n while ((key = keys.shift())) {\n if (key === '*') {\n for (const k in object) {\n if (!{}.hasOwnProperty.call(object, k)) {\n continue;\n }\n\n setDot(\n object,\n [k].concat(keys).join('.'),\n value,\n overwrite,\n );\n }\n return;\n }\n\n if (keys.length) {\n if (\n !isObject(object[key]) ||\n !(key in object)\n ) {\n object[key] = {};\n }\n\n object = object[key];\n } else if (\n overwrite ||\n !(key in object)\n ) {\n object[key] = value;\n }\n }\n};\n","import { random } from './math.js';\n\n// HTML escape characters\nconst escapeChars = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n};\n\nconst unescapeChars = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: '\\'',\n};\n\n/**\n * String methods\n */\n\n/**\n * Split a string into individual words.\n * @param {string} string The input string.\n * @return {string[]} The split parts of the string.\n */\nconst _splitString = (string) =>\n `${string}`\n .split(/[^a-zA-Z0-9']|(?=[A-Z])/)\n .reduce(\n (acc, word) => {\n word = word.replace(/[^\\w]/, '').toLowerCase();\n if (word) {\n acc.push(word);\n }\n return acc;\n },\n [],\n );\n\n/**\n * Convert a string to camelCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const camelCase = (string) =>\n _splitString(string)\n .map(\n (word, index) =>\n index ?\n capitalize(word) :\n word,\n )\n .join('');\n\n/**\n * Convert the first character of string to upper case and the remaining to lower case.\n * @param {string} string The input string.\n * @return {string} The capitalized string.\n */\nexport const capitalize = (string) =>\n string.charAt(0).toUpperCase() +\n string.substring(1).toLowerCase();\n\n/**\n * Convert HTML special characters in a string to their corresponding HTML entities.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escape = (string) =>\n string.replace(\n /[&<>\"']/g,\n (match) =>\n escapeChars[match],\n );\n\n/**\n * Escape RegExp special characters in a string.\n * @param {string} string The input string.\n * @return {string} The escaped string.\n */\nexport const escapeRegExp = (string) =>\n string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n/**\n * Convert a string to a humanized form.\n * @param {string} string The input string.\n * @return {string} The humanized string.\n */\nexport const humanize = (string) =>\n capitalize(\n _splitString(string)\n .join(' '),\n );\n\n/**\n * Convert a string to kebab-case.\n * @param {string} string The input string.\n * @return {string} The kebab-cased string.\n */\nexport const kebabCase = (string) =>\n _splitString(string)\n .join('-')\n .toLowerCase();\n\n/**\n * Convert a string to PascalCase.\n * @param {string} string The input string.\n * @return {string} The camelCased string.\n */\nexport const pascalCase = (string) =>\n _splitString(string)\n .map(\n (word) =>\n word.charAt(0).toUpperCase() +\n word.substring(1),\n )\n .join('');\n\n/**\n * Return a random string.\n * @param {number} [length=16] The length of the output string.\n * @param {string} [chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789] The characters to generate the string from.\n * @return {string} The random string.\n */\nexport const randomString = (length = 16, chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789') =>\n new Array(length)\n .fill()\n .map(\n (_) =>\n chars[random(chars.length) | 0],\n )\n .join('');\n\n/**\n * Convert a string to snake_case.\n * @param {string} string The input string.\n * @return {string} The snake_cased string.\n */\nexport const snakeCase = (string) =>\n _splitString(string)\n .join('_')\n .toLowerCase();\n\n/**\n * Convert HTML entities in a string to their corresponding characters.\n * @param {string} string The input string.\n * @return {string} The unescaped string.\n */\nexport const unescape = (string) =>\n string.replace(\n /&(amp|lt|gt|quot|apos);/g,\n (_, code) =>\n unescapeChars[code],\n );\n","import { extend, isDocument, isWindow } from '@fr0st/core';\n\n/**\n * DOM Config\n */\n\nconst ajaxDefaults = {\n afterSend: null,\n beforeSend: null,\n cache: true,\n contentType: 'application/x-www-form-urlencoded',\n data: null,\n headers: {},\n isLocal: null,\n method: 'GET',\n onProgress: null,\n onUploadProgress: null,\n processData: true,\n rejectOnCancel: true,\n responseType: null,\n url: null,\n xhr: (_) => new XMLHttpRequest,\n};\n\nconst animationDefaults = {\n duration: 1000,\n type: 'ease-in-out',\n infinite: false,\n debug: false,\n};\n\nexport const config = {\n ajaxDefaults,\n animationDefaults,\n context: null,\n useTimeout: false,\n window: null,\n};\n\n/**\n * Get the AJAX defaults.\n * @return {object} The AJAX defaults.\n */\nexport function getAjaxDefaults() {\n return ajaxDefaults;\n};\n\n/**\n * Get the animation defaults.\n * @return {object} The animation defaults.\n */\nexport function getAnimationDefaults() {\n return animationDefaults;\n};\n\n/**\n * Get the document context.\n * @return {Document} The document context.\n */\nexport function getContext() {\n return config.context;\n};\n\n/**\n * Get the window.\n * @return {Window} The window.\n */\nexport function getWindow() {\n return config.window;\n};\n\n/**\n * Set the AJAX defaults.\n * @param {object} options The ajax default options.\n */\nexport function setAjaxDefaults(options) {\n extend(ajaxDefaults, options);\n};\n\n/**\n * Set the animation defaults.\n * @param {object} options The animation default options.\n */\nexport function setAnimationDefaults(options) {\n extend(animationDefaults, options);\n};\n\n/**\n * Set the document context.\n * @param {Document} context The document context.\n */\nexport function setContext(context) {\n if (!isDocument(context)) {\n throw new Error('FrostDOM requires a valid Document.');\n }\n\n config.context = context;\n};\n\n/**\n * Set the window.\n * @param {Window} window The window.\n */\nexport function setWindow(window) {\n if (!isWindow(window)) {\n throw new Error('FrostDOM requires a valid Window.');\n }\n\n config.window = window;\n};\n\n/**\n * Set whether animations should use setTimeout.\n * @param {Boolean} [enable=true] Whether animations should use setTimeout.\n */\nexport function useTimeout(enable = true) {\n config.useTimeout = enable;\n};\n","import { escapeRegExp, isArray, isNumeric, isObject, isString, isUndefined } from '@fr0st/core';\n\n/**\n * DOM Helpers\n */\n\n/**\n * Create a wrapped version of a function that executes once per tick.\n * @param {function} callback Callback function to debounce.\n * @return {function} The wrapped function.\n */\nexport function debounce(callback) {\n let running;\n\n return (...args) => {\n if (running) {\n return;\n }\n\n running = true;\n\n Promise.resolve().then((_) => {\n callback(...args);\n running = false;\n });\n };\n};\n\n/**\n * Return a RegExp for testing a namespaced event.\n * @param {string} event The namespaced event.\n * @return {RegExp} The namespaced event RegExp.\n */\nexport function eventNamespacedRegExp(event) {\n return new RegExp(`^${escapeRegExp(event)}(?:\\\\.|$)`, 'i');\n};\n\n/**\n * Return a single dimensional array of classes (from a multi-dimensional array or space-separated strings).\n * @param {array} classList The classes to parse.\n * @return {string[]} The parsed classes.\n */\nexport function parseClasses(classList) {\n return classList\n .flat()\n .flatMap((val) => val.split(' '))\n .filter((val) => !!val);\n};\n\n/**\n * Return a data object from a key and value, or a data object.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @param {object} [options] The options for parsing data.\n * @param {Boolean} [options.json=false] Whether to JSON encode the values.\n * @return {object} The data object.\n */\nexport function parseData(key, value, { json = false } = {}) {\n const result = isString(key) ?\n { [key]: value } :\n key;\n\n if (!json) {\n return result;\n }\n\n return Object.fromEntries(\n Object.entries(result)\n .map(([key, value]) => [key, isObject(value) || isArray(value) ? JSON.stringify(value) : value]),\n );\n};\n\n/**\n * Return a JS primitive from a dataset string.\n * @param {string} value The input value.\n * @return {*} The parsed value.\n */\nexport function parseDataset(value) {\n if (isUndefined(value)) {\n return value;\n }\n\n const lower = value.toLowerCase().trim();\n\n if (['true', 'on'].includes(lower)) {\n return true;\n }\n\n if (['false', 'off'].includes(lower)) {\n return false;\n }\n\n if (lower === 'null') {\n return null;\n }\n\n if (isNumeric(lower)) {\n return parseFloat(lower);\n }\n\n if (['{', '['].includes(lower.charAt(0))) {\n try {\n const result = JSON.parse(value);\n return result;\n } catch (e) { }\n }\n\n return value;\n};\n\n/**\n * Return a \"real\" event from a namespaced event.\n * @param {string} event The namespaced event.\n * @return {string} The real event.\n */\nexport function parseEvent(event) {\n return event.split('.')\n .shift();\n};\n\n/**\n * Return an array of events from a space-separated string.\n * @param {string} events The events.\n * @return {array} The parsed events.\n */\nexport function parseEvents(events) {\n return events.split(' ');\n};\n","/**\n * DOM Variables\n */\n\nexport const CONTENT_BOX = 0;\nexport const PADDING_BOX = 1;\nexport const BORDER_BOX = 2;\nexport const MARGIN_BOX = 3;\nexport const SCROLL_BOX = 4;\n\nexport const allowedTags = {\n '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\\w-]*$/i],\n 'a': ['target', 'href', 'title', 'rel'],\n 'area': [],\n 'b': [],\n 'br': [],\n 'col': [],\n 'code': [],\n 'div': [],\n 'em': [],\n 'hr': [],\n 'h1': [],\n 'h2': [],\n 'h3': [],\n 'h4': [],\n 'h5': [],\n 'h6': [],\n 'i': [],\n 'img': ['src', 'alt', 'title', 'width', 'height'],\n 'li': [],\n 'ol': [],\n 'p': [],\n 'pre': [],\n 's': [],\n 'small': [],\n 'span': [],\n 'sub': [],\n 'sup': [],\n 'strong': [],\n 'u': [],\n 'ul': [],\n};\n\nexport const eventLookup = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend'],\n};\n\nexport const animations = new Map();\n\nexport const data = new WeakMap();\n\nexport const events = new WeakMap();\n\nexport const queues = new WeakMap();\n\nexport const styles = new WeakMap();\n","import { isArray, isObject, isUndefined } from '@fr0st/core';\nimport { getWindow } from './../config.js';\n\n/**\n * Ajax Helpers\n */\n\n/**\n * Append a query string to a URL.\n * @param {string} url The input URL.\n * @param {string} key The query string key.\n * @param {string} value The query string value.\n * @return {string} The new URL.\n */\nexport function appendQueryString(url, key, value) {\n const searchParams = getSearchParams(url);\n\n searchParams.append(key, value);\n\n return setSearchParams(url, searchParams);\n};\n\n/**\n * Get the URLSearchParams from a URL string.\n * @param {string} url The URL.\n * @return {URLSearchParams} The URLSearchParams.\n */\nexport function getSearchParams(url) {\n return getURL(url).searchParams;\n};\n\n/**\n * Get the URL from a URL string.\n * @param {string} url The URL.\n * @return {URL} The URL.\n */\nfunction getURL(url) {\n const window = getWindow();\n const baseHref = (window.location.origin + window.location.pathname).replace(/\\/$/, '');\n\n return new URL(url, baseHref);\n};\n\n/**\n * Return a FormData object from an array or object.\n * @param {array|object} data The input data.\n * @return {FormData} The FormData object.\n */\nexport function parseFormData(data) {\n const values = parseValues(data);\n\n const formData = new FormData;\n\n for (const [key, value] of values) {\n if (key.substring(key.length - 2) === '[]') {\n formData.append(key, value);\n } else {\n formData.set(key, value);\n }\n }\n\n return formData;\n};\n\n/**\n * Return a URI-encoded attribute string from an array or object.\n * @param {array|object} data The input data.\n * @return {string} The URI-encoded attribute string.\n */\nexport function parseParams(data) {\n const values = parseValues(data);\n\n const paramString = values\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n return encodeURI(paramString);\n};\n\n/**\n * Return an attributes array, or a flat array of attributes from a key and value.\n * @param {string} key The input key.\n * @param {array|object|string} [value] The input value.\n * @return {array} The parsed attributes.\n */\nfunction parseValue(key, value) {\n if (value === null || isUndefined(value)) {\n return [];\n }\n\n if (isArray(value)) {\n if (key.substring(key.length - 2) !== '[]') {\n key += '[]';\n }\n\n return value.flatMap((val) => parseValue(key, val));\n }\n\n if (isObject(value)) {\n return Object.entries(value)\n .flatMap(([subKey, val]) => parseValue(`${key}[${subKey}]`, val));\n }\n\n return [[key, value]];\n};\n\n/**\n * Return an attributes array from a data array or data object.\n * @param {array|object} data The input data.\n * @return {array} The parsed attributes.\n */\nfunction parseValues(data) {\n if (isArray(data)) {\n return data.flatMap((value) => parseValue(value.name, value.value));\n }\n\n if (isObject(data)) {\n return Object.entries(data)\n .flatMap(([key, value]) => parseValue(key, value));\n }\n\n return data;\n};\n\n/**\n * Set the URLSearchParams for a URL string.\n * @param {string} url The URL.\n * @param {URLSearchParams} searchParams The URLSearchParams.\n * @return {string} The new URL string.\n */\nexport function setSearchParams(url, searchParams) {\n const urlData = getURL(url);\n\n urlData.search = searchParams.toString();\n\n const newUrl = urlData.toString();\n\n const pos = newUrl.indexOf(url);\n return newUrl.substring(pos);\n};\n","import { extend, isObject } from '@fr0st/core';\nimport { appendQueryString, getSearchParams, parseFormData, parseParams, setSearchParams } from './helpers.js';\nimport { getAjaxDefaults, getWindow } from './../config.js';\n\n/**\n * AjaxRequest Class\n * @class\n */\nexport default class AjaxRequest {\n /**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n */\n constructor(options) {\n this._options = extend(\n {},\n getAjaxDefaults(),\n options,\n );\n\n if (!this._options.url) {\n this._options.url = getWindow().location.href;\n }\n\n if (!this._options.cache) {\n this._options.url = appendQueryString(this._options.url, '_', Date.now());\n }\n\n if (!('Content-Type' in this._options.headers) && this._options.contentType) {\n this._options.headers['Content-Type'] = this._options.contentType;\n }\n\n if (this._options.isLocal === null) {\n this._options.isLocal = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol);\n }\n\n if (!this._options.isLocal && !('X-Requested-With' in this._options.headers)) {\n this._options.headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = (value) => {\n this._isResolved = true;\n resolve(value);\n };\n\n this._reject = (error) => {\n this._isRejected = true;\n reject(error);\n };\n });\n\n this.xhr = this._options.xhr();\n\n if (this._options.data) {\n if (this._options.processData && isObject(this._options.data)) {\n if (this._options.contentType === 'application/json') {\n this._options.data = JSON.stringify(this._options.data);\n } else if (this._options.contentType === 'application/x-www-form-urlencoded') {\n this._options.data = parseParams(this._options.data);\n } else {\n this._options.data = parseFormData(this._options.data);\n }\n }\n\n if (this._options.method === 'GET') {\n const dataParams = new URLSearchParams(this._options.data);\n\n const searchParams = getSearchParams(this._options.url);\n for (const [key, value] of dataParams.entries()) {\n searchParams.append(key, value);\n }\n\n this._options.url = setSearchParams(this._options.url, searchParams);\n this._options.data = null;\n }\n }\n\n this.xhr.open(this._options.method, this._options.url, true, this._options.username, this._options.password);\n\n for (const [key, value] of Object.entries(this._options.headers)) {\n this.xhr.setRequestHeader(key, value);\n }\n\n if (this._options.responseType) {\n this.xhr.responseType = this._options.responseType;\n }\n\n if (this._options.mimeType) {\n this.xhr.overrideMimeType(this._options.mimeType);\n }\n\n if (this._options.timeout) {\n this.xhr.timeout = this._options.timeout;\n }\n\n this.xhr.onload = (e) => {\n if (this.xhr.status > 400) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n } else {\n this._resolve({\n response: this.xhr.response,\n xhr: this.xhr,\n event: e,\n });\n }\n };\n\n if (!this._options.isLocal) {\n this.xhr.onerror = (e) =>\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n event: e,\n });\n }\n\n if (this._options.onProgress) {\n this.xhr.onprogress = (e) =>\n this._options.onProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.onUploadProgress) {\n this.xhr.upload.onprogress = (e) =>\n this._options.onUploadProgress(e.loaded / e.total, this.xhr, e);\n }\n\n if (this._options.beforeSend) {\n this._options.beforeSend(this.xhr);\n }\n\n this.xhr.send(this._options.data);\n\n if (this._options.afterSend) {\n this._options.afterSend(this.xhr);\n }\n }\n\n /**\n * Cancel a pending request.\n * @param {string} [reason=Request was cancelled] The reason for cancelling the request.\n */\n cancel(reason = 'Request was cancelled') {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n\n this.xhr.abort();\n\n this._isCancelled = true;\n\n if (this._options.rejectOnCancel) {\n this._reject({\n status: this.xhr.status,\n xhr: this.xhr,\n reason,\n });\n }\n }\n\n /**\n * Execute a callback if the request is rejected.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the request is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the request is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Execute a callback once the request is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the request is resolved.\n * @param {function} [onRejected] The callback to execute if the request is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AjaxRequest.prototype, Promise.prototype);\n","import { config, getWindow } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Helpers\n */\n\nlet animating = false;\n\n/**\n * Get the current time.\n * @return {number} The current time.\n */\nexport function getTime() {\n return document.timeline ?\n document.timeline.currentTime :\n performance.now();\n};\n\n/**\n * Start the animation loop (if not already started).\n */\nexport function start() {\n if (animating) {\n return;\n }\n\n animating = true;\n update();\n};\n\n/**\n * Run a single frame of all animations, and then queue up the next frame.\n */\nfunction update() {\n const time = getTime();\n\n for (const [node, currentAnimations] of animations) {\n const otherAnimations = currentAnimations.filter((animation) => !animation.update(time));\n\n if (!otherAnimations.length) {\n animations.delete(node);\n } else {\n animations.set(node, otherAnimations);\n }\n }\n\n if (!animations.size) {\n animating = false;\n } else if (config.useTimeout) {\n setTimeout(update, 1000 / 60);\n } else {\n getWindow().requestAnimationFrame(update);\n }\n};\n","import { clamp } from '@fr0st/core';\nimport { getTime } from './helpers.js';\nimport { getAnimationDefaults } from './../config.js';\nimport { animations } from './../vars.js';\n\n/**\n * Animation Class\n * @class\n */\nexport default class Animation {\n /**\n * New Animation constructor.\n * @param {HTMLElement} node The input node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for the animation.\n * @param {string} [options.type=ease-in-out] The type of animation\n * @param {number} [options.duration=1000] The duration the animation should last.\n * @param {Boolean} [options.infinite] Whether to repeat the animation.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n */\n constructor(node, callback, options) {\n this._node = node;\n this._callback = callback;\n\n this._options = {\n ...getAnimationDefaults(),\n ...options,\n };\n\n if (!('start' in this._options)) {\n this._options.start = getTime();\n }\n\n if (this._options.debug) {\n this._node.dataset.animationStart = this._options.start;\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n if (!animations.has(node)) {\n animations.set(node, []);\n }\n\n animations.get(node).push(this);\n }\n\n /**\n * Execute a callback if the animation is rejected.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Clone the animation to a new node.\n * @param {HTMLElement} node The input node.\n * @return {Animation} The cloned Animation.\n */\n clone(node) {\n return new Animation(node, this._callback, this._options);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animation.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animation.\n */\n stop({ finish = true } = {}) {\n if (this._isStopped || this._isFinished) {\n return;\n }\n\n const otherAnimations = animations.get(this._node)\n .filter((animation) => animation !== this);\n\n if (!otherAnimations.length) {\n animations.delete(this._node);\n } else {\n animations.set(this._node, otherAnimations);\n }\n\n if (finish) {\n this.update();\n }\n\n this._isStopped = true;\n\n if (!finish) {\n this._reject(this._node);\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n\n /**\n * Run a single frame of the animation.\n * @param {number} [time] The current time.\n * @return {Boolean} TRUE if the animation is finished, otherwise FALSE.\n */\n update(time = null) {\n if (this._isStopped) {\n return true;\n }\n\n let progress;\n\n if (time === null) {\n progress = 1;\n } else {\n progress = (time - this._options.start) / this._options.duration;\n\n if (this._options.infinite) {\n progress %= 1;\n } else {\n progress = clamp(progress);\n }\n\n if (this._options.type === 'ease-in') {\n progress = progress ** 2;\n } else if (this._options.type === 'ease-out') {\n progress = Math.sqrt(progress);\n } else if (this._options.type === 'ease-in-out') {\n if (progress <= 0.5) {\n progress = progress ** 2 * 2;\n } else {\n progress = 1 - ((1 - progress) ** 2 * 2);\n }\n }\n }\n\n if (this._options.debug) {\n this._node.dataset.animationTime = time;\n this._node.dataset.animationProgress = progress;\n }\n\n this._callback(this._node, progress, this._options);\n\n if (progress < 1) {\n return false;\n }\n\n if (this._options.debug) {\n delete this._node.dataset.animationStart;\n delete this._node.dataset.animationTime;\n delete this._node.dataset.animationProgress;\n }\n\n if (!this._isFinished) {\n this._isFinished = true;\n\n this._resolve(this._node);\n }\n\n return true;\n }\n}\n\nObject.setPrototypeOf(Animation.prototype, Promise.prototype);\n","/**\n* AnimationSet Class\n* @class\n*/\nexport default class AnimationSet {\n /**\n * New AnimationSet constructor.\n * @param {array} animations The animations.\n */\n constructor(animations) {\n this._animations = animations;\n this._promise = Promise.all(animations);\n }\n\n /**\n * Execute a callback if any of the animations is rejected.\n * @param {function} [onRejected] The callback to execute if an animation is rejected.\n * @return {Promise} The promise.\n */\n catch(onRejected) {\n return this._promise.catch(onRejected);\n }\n\n /**\n * Execute a callback once the animation is settled (resolved or rejected).\n * @param {function} [onFinally] The callback to execute once the animation is settled.\n * @return {Promise} The promise.\n */\n finally(onFinally) {\n return this._promise.finally(onFinally);\n }\n\n /**\n * Stop the animations.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to finish the animations.\n */\n stop({ finish = true } = {}) {\n for (const animation of this._animations) {\n animation.stop({ finish });\n }\n }\n\n /**\n * Execute a callback once the animation is resolved (or optionally rejected).\n * @param {function} onFulfilled The callback to execute if the animation is resolved.\n * @param {function} [onRejected] The callback to execute if the animation is rejected.\n * @return {Promise} The promise.\n */\n then(onFulfilled, onRejected) {\n return this._promise.then(onFulfilled, onRejected);\n }\n}\n\nObject.setPrototypeOf(AnimationSet.prototype, Promise.prototype);\n","import { camelCase, isNumeric, kebabCase, wrap } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNode } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\n\n/**\n * DOM Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {string|array|HTMLElement|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for attaching the shadow DOM.\n * @param {Boolean} [options.open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {ShadowRoot} The new ShadowRoot.\n */\nexport function attachShadow(selector, { open = true } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.attachShadow({\n mode: open ?\n 'open' :\n 'closed',\n });\n};\n\n/**\n * Create a new DOM element.\n * @param {string} [tagName=div] The type of HTML element to create.\n * @param {object} [options] The options to use for creating the element.\n * @param {string} [options.html] The HTML contents.\n * @param {string} [options.text] The text contents.\n * @param {string|array} [options.class] The classes.\n * @param {object} [options.style] An object containing style properties.\n * @param {string} [options.value] The value.\n * @param {object} [options.attributes] An object containing attributes.\n * @param {object} [options.properties] An object containing properties.\n * @param {object} [options.dataset] An object containing dataset values.\n * @return {HTMLElement} The new HTMLElement.\n */\nexport function create(tagName = 'div', options = {}) {\n const node = getContext().createElement(tagName);\n\n if ('html' in options) {\n node.innerHTML = options.html;\n } else if ('text' in options) {\n node.textContent = options.text;\n }\n\n if ('class' in options) {\n const classes = parseClasses(wrap(options.class));\n\n node.classList.add(...classes);\n }\n\n if ('style' in options) {\n for (let [style, value] of Object.entries(options.style)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n node.style.setProperty(style, value);\n }\n }\n\n if ('value' in options) {\n node.value = options.value;\n }\n\n if ('attributes' in options) {\n for (const [key, value] of Object.entries(options.attributes)) {\n node.setAttribute(key, value);\n }\n }\n\n if ('properties' in options) {\n for (const [key, value] of Object.entries(options.properties)) {\n node[key] = value;\n }\n }\n\n if ('dataset' in options) {\n const dataset = parseData(options.dataset, null, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n node.dataset[key] = value;\n }\n }\n\n return node;\n};\n\n/**\n * Create a new comment node.\n * @param {string} comment The comment contents.\n * @return {Node} The new comment node.\n */\nexport function createComment(comment) {\n return getContext().createComment(comment);\n};\n\n/**\n * Create a new document fragment.\n * @return {DocumentFragment} The new DocumentFragment.\n */\nexport function createFragment() {\n return getContext().createDocumentFragment();\n};\n\n/**\n * Create a new range object.\n * @return {Range} The new Range.\n */\nexport function createRange() {\n return getContext().createRange();\n};\n\n/**\n * Create a new text node.\n * @param {string} text The text contents.\n * @return {Node} The new text node.\n */\nexport function createText(text) {\n return getContext().createTextNode(text);\n};\n","\nimport { merge } from '@fr0st/core';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Parser\n */\n\nconst parser = new DOMParser();\n\n/**\n * Create a Document object from a string.\n * @param {string} input The input string.\n * @param {object} [options] The options for parsing the string.\n * @param {string} [options.contentType=text/html] The content type.\n * @return {Document} A new Document object.\n */\nexport function parseDocument(input, { contentType = 'text/html' } = {}) {\n return parser.parseFromString(input, contentType);\n};\n\n/**\n * Create an Array containing nodes parsed from a HTML string.\n * @param {string} html The HTML input string.\n * @return {array} An array of nodes.\n */\nexport function parseHTML(html) {\n const childNodes = createRange()\n .createContextualFragment(html)\n .children;\n\n return merge([], childNodes);\n};\n","/**\n * QuerySet Class\n * @class\n */\nexport default class QuerySet {\n /**\n * New DOM constructor.\n * @param {array} nodes The input nodes.\n */\n constructor(nodes = []) {\n this._nodes = nodes;\n }\n\n /**\n * Get the number of nodes.\n * @return {number} The number of nodes.\n */\n get length() {\n return this._nodes.length;\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} The QuerySet object.\n */\n each(callback) {\n this._nodes.forEach(\n (v, i) => callback(v, i),\n );\n\n return this;\n }\n\n /**\n * Retrieve the DOM node(s) contained in the QuerySet.\n * @param {number} [index=null] The index of the node.\n * @return {array|Node|Document|Window} The node(s).\n */\n get(index = null) {\n if (index === null) {\n return this._nodes;\n }\n\n return index < 0 ?\n this._nodes[index + this._nodes.length] :\n this._nodes[index];\n }\n\n /**\n * Execute a function for each node in the set.\n * @param {function} callback The callback to execute\n * @return {QuerySet} A new QuerySet object.\n */\n map(callback) {\n const nodes = this._nodes.map(callback);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Reduce the set of matched nodes to a subset specified by a range of indices.\n * @param {number} [begin] The index to slice from.\n * @param {number} [end] The index to slice to.\n * @return {QuerySet} A new QuerySet object.\n */\n slice(begin, end) {\n const nodes = this._nodes.slice(begin, end);\n\n return new QuerySet(nodes);\n }\n\n /**\n * Return an iterable from the nodes.\n * @return {ArrayIterator} The iterator object.\n */\n [Symbol.iterator]() {\n return this._nodes.values();\n }\n}\n","import { isDocument, isElement, isFragment, isShadow, merge, unique } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Find\n */\n\n/**\n * Return all nodes matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function find(selector, context = getContext()) {\n if (!selector) {\n return [];\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findByClass(match[2], context);\n }\n\n return findByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(selector));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(selector);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByClassName(className));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`.${className}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(`.${className}`) :\n node.getElementsByClassName(className);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findById(id, context = getContext()) {\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(`#${id}`));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = node.querySelectorAll(`#${id}`);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function findByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return merge([], context.getElementsByTagName(tagName));\n }\n\n if (isFragment(context) || isShadow(context)) {\n return merge([], context.querySelectorAll(tagName));\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const newNodes = isFragment(node) || isShadow(node) ?\n node.querySelectorAll(tagName) :\n node.getElementsByTagName(tagName);\n\n results.push(...newNodes);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a single node matching a selector.\n * @param {string} selector The query selector.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOne(selector, context = getContext()) {\n if (!selector) {\n return null;\n }\n\n // fast selector\n const match = selector.match(/^([\\#\\.]?)([\\w\\-]+)$/);\n\n if (match) {\n if (match[1] === '#') {\n return findOneById(match[2], context);\n }\n\n if (match[1] === '.') {\n return findOneByClass(match[2], context);\n }\n\n return findOneByTag(match[2], context);\n }\n\n if (isDocument(context) || isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(selector);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = node.querySelector(selector);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific class.\n * @param {string} className The class name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByClass(className, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByClassName(className).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(`.${className}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(`.${className}`) :\n node.getElementsByClassName(className).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific ID.\n * @param {string} id The id.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching element.\n */\nexport function findOneById(id, context = getContext()) {\n if (isDocument(context)) {\n return context.getElementById(id);\n }\n\n if (isElement(context) || isFragment(context) || isShadow(context)) {\n return context.querySelector(`#${id}`);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isDocument(node) ?\n node.getElementById(id) :\n node.querySelector(`#${id}`);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\n/**\n * Return a single node with a specific tag.\n * @param {string} tagName The tag name.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} [context=getContext()] The input node(s), or a query selector string.\n * @return {HTMLElement} The matching node.\n */\nexport function findOneByTag(tagName, context = getContext()) {\n if (isDocument(context) || isElement(context)) {\n return context.getElementsByTagName(tagName).item(0);\n }\n\n if (isFragment(context) || isShadow(context)) {\n return context.querySelector(tagName);\n }\n\n const nodes = parseNodes(context, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n if (!nodes.length) {\n return;\n }\n\n for (const node of nodes) {\n const result = isFragment(node) || isShadow(node) ?\n node.querySelector(tagName) :\n node.getElementsByTagName(tagName).item(0);\n\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n","import { isArray, isDocument, isElement, isFragment, isFunction, isNode, isShadow, isString, isWindow, merge, unique } from '@fr0st/core';\nimport { getContext } from './config.js';\nimport { parseHTML } from './parser/parser.js';\nimport QuerySet from './query/query-set.js';\nimport { find, findOne } from './traversal/find.js';\n\n/**\n * DOM Filters\n */\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNode(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes).shift();\n }\n\n return findOne(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return nodes;\n }\n\n if (nodes instanceof QuerySet) {\n const node = nodes.get(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n const node = nodes.item(0);\n\n return nodeFilter(node) ? node : undefined;\n }\n};\n\n/**\n * Recursively parse nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} context The context node(s), or a query selector string.\n * @param {DOM~nodeCallback} [nodeFilter] The callback to use for filtering nodes.\n * @param {Boolean} [first=false] Whether to only return the first result.\n * @return {array|Node|DocumentFragment|ShadowRoot|Document|Window} The parsed node(s).\n */\nfunction _parseNodes(nodes, context, nodeFilter, { html = false } = {}) {\n if (isString(nodes)) {\n if (html && nodes.trim().charAt(0) === '<') {\n return parseHTML(nodes);\n }\n\n return find(nodes, context);\n }\n\n if (nodeFilter(nodes)) {\n return [nodes];\n }\n\n if (nodes instanceof QuerySet) {\n return nodes.get().filter(nodeFilter);\n }\n\n if (nodes instanceof HTMLCollection || nodes instanceof NodeList) {\n return merge([], nodes).filter(nodeFilter);\n }\n\n return [];\n};\n\n/**\n * Return a node filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node filter callback.\n */\nexport function parseFilter(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return filter;\n }\n\n if (isString(filter)) {\n return (node) => isElement(node) && node.matches(filter);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.isSameNode(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.includes(node);\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return a node contains filter callback.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} filter The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [defaultValue=true] The default return value.\n * @return {DOM~filterCallback} The node contains filter callback.\n */\nexport function parseFilterContains(filter, defaultValue = true) {\n if (!filter) {\n return (_) => defaultValue;\n }\n\n if (isFunction(filter)) {\n return (node) => merge([], node.querySelectorAll('*')).some(filter);\n }\n\n if (isString(filter)) {\n return (node) => !!findOne(filter, node);\n }\n\n if (isNode(filter) || isFragment(filter) || isShadow(filter)) {\n return (node) => node.contains(filter);\n }\n\n filter = parseNodes(filter, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n if (filter.length) {\n return (node) => filter.some((other) => node.contains(other));\n }\n\n return (_) => !defaultValue;\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|Document} [options.context=getContext()] The Document context.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window} The matching node.\n */\nexport function parseNode(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNode(nodes, options.context || getContext(), filter, options);\n }\n\n for (const node of nodes) {\n const result = _parseNode(node, options.context || getContext(), filter, options);\n\n if (result) {\n return result;\n }\n }\n};\n\n/**\n * Return a filtered array of nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} nodes The input node(s), or a query selector or HTML string.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @param {Boolean} [options.html=false] Whether to allow HTML strings.\n * @param {HTMLElement|DocumentFragment|ShadowRoot|Document} [options.context=getContext()] The Document context.\n * @return {array} The filtered array of nodes.\n */\nexport function parseNodes(nodes, options = {}) {\n const filter = parseNodesFilter(options);\n\n if (!isArray(nodes)) {\n return _parseNodes(nodes, options.context || getContext(), filter, options);\n }\n\n const results = nodes.flatMap((node) => _parseNodes(node, options.context || getContext(), filter, options));\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return a function for filtering nodes.\n * @param {object} [options] The options for filtering.\n * @param {Boolean} [options.node=false] Whether to allow text and comment nodes.\n * @param {Boolean} [options.fragment=false] Whether to allow DocumentFragment.\n * @param {Boolean} [options.shadow=false] Whether to allow ShadowRoot.\n * @param {Boolean} [options.document=false] Whether to allow Document.\n * @param {Boolean} [options.window=false] Whether to allow Window.\n * @return {DOM~nodeCallback} The node filter function.\n */\nfunction parseNodesFilter(options) {\n if (!options) {\n return isElement;\n }\n\n const callbacks = [];\n\n if (options.node) {\n callbacks.push(isNode);\n } else {\n callbacks.push(isElement);\n }\n\n if (options.document) {\n callbacks.push(isDocument);\n }\n\n if (options.window) {\n callbacks.push(isWindow);\n }\n\n if (options.fragment) {\n callbacks.push(isFragment);\n }\n\n if (options.shadow) {\n callbacks.push(isShadow);\n }\n\n return (node) => callbacks.some((callback) => callback(node));\n};\n","import Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\nimport { animations } from './../vars.js';\n\n/**\n * DOM Animate\n */\n\n/**\n * Add an animation to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function animate(selector, callback, options) {\n const nodes = parseNodes(selector);\n\n const newAnimations = nodes.map((node) => new Animation(node, callback, options));\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Stop all animations for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n */\nexport function stop(selector, { finish = true } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!animations.has(node)) {\n continue;\n }\n\n const currentAnimations = animations.get(node);\n for (const animation of currentAnimations) {\n animation.stop({ finish });\n }\n }\n};\n","import { evaluate } from '@fr0st/core';\nimport { animate } from './animate.js';\nimport Animation from './animation.js';\nimport AnimationSet from './animation-set.js';\nimport { start } from './helpers.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Animations\n */\n\n/**\n * Drop each node into place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropIn(selector, options) {\n return slideIn(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Drop each node out of place.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function dropOut(selector, options) {\n return slideOut(\n selector,\n {\n direction: 'top',\n ...options,\n },\n );\n};\n\n/**\n * Fade the opacity of each node in.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeIn(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n progress.toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Fade the opacity of each node out.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function fadeOut(selector, options) {\n return animate(\n selector,\n (node, progress) =>\n node.style.setProperty(\n 'opacity',\n progress < 1 ?\n (1 - progress).toFixed(2) :\n '',\n ),\n options,\n );\n};\n\n/**\n * Rotate each node in on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((90 - (progress * 90)) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Rotate each node out on an X, Y or Z.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=1] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function rotateOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n const amount = ((progress * 90) * (options.inverse ? -1 : 1)).toFixed(2);\n node.style.setProperty(\n 'transform',\n progress < 1 ?\n `rotate3d(${options.x}, ${options.y}, ${options.z}, ${amount}deg)` :\n '',\n );\n },\n {\n x: 0,\n y: 1,\n z: 0,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideIn(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = ((size - (size * progress)) * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Slide each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function slideOut(selector, options) {\n return animate(\n selector,\n (node, progress, options) => {\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let translateStyle; let inverse;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n inverse = dir === 'top';\n } else {\n size = node.clientWidth;\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n inverse = dir === 'left';\n }\n\n const translateAmount = (size * progress * (inverse ? -1 : 1)).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n },\n {\n direction: 'bottom',\n useGpu: true,\n ...options,\n },\n );\n};\n\n/**\n * Squeeze each node in from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeIn(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size * progress).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n\n/**\n * Squeeze each node out from a direction.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options to use for animating.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {AnimationSet} A new AnimationSet that resolves when the animation has completed.\n */\nexport function squeezeOut(selector, options) {\n const nodes = parseNodes(selector);\n\n options = {\n direction: 'bottom',\n useGpu: true,\n ...options,\n };\n\n const newAnimations = nodes.map((node) => {\n const initialHeight = node.style.height;\n const initialWidth = node.style.width;\n node.style.setProperty('overflow', 'hidden');\n\n return new Animation(\n node,\n (node, progress, options) => {\n node.style.setProperty('height', initialHeight);\n node.style.setProperty('width', initialWidth);\n\n if (progress === 1) {\n node.style.setProperty('overflow', '');\n if (options.useGpu) {\n node.style.setProperty('transform', '');\n } else {\n node.style.setProperty('margin-left', '');\n node.style.setProperty('margin-top', '');\n }\n return;\n }\n\n const dir = evaluate(options.direction);\n\n let size; let sizeStyle; let translateStyle;\n if (['top', 'bottom'].includes(dir)) {\n size = node.clientHeight;\n sizeStyle = 'height';\n if (dir === 'top') {\n translateStyle = options.useGpu ?\n 'Y' :\n 'margin-top';\n }\n } else {\n size = node.clientWidth;\n sizeStyle = 'width';\n if (dir === 'left') {\n translateStyle = options.useGpu ?\n 'X' :\n 'margin-left';\n }\n }\n\n const amount = (size - (size * progress)).toFixed(2);\n\n node.style.setProperty(sizeStyle, `${amount}px`);\n\n if (translateStyle) {\n const translateAmount = (size - amount).toFixed(2);\n if (options.useGpu) {\n node.style.setProperty('transform', `translate${translateStyle}(${translateAmount}px)`);\n } else {\n node.style.setProperty(translateStyle, `${translateAmount}px`);\n }\n }\n },\n options,\n );\n });\n\n start();\n\n return new AnimationSet(newAnimations);\n};\n","import { isDocument, isElement, isFragment, isShadow, isWindow, merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { parseParams } from './../ajax/helpers.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Execute a command in the document context.\n * @param {string} command The command to execute.\n * @param {string} [value] The value to give the command.\n * @return {Boolean} TRUE if the command was executed, otherwise FALSE.\n */\nexport function exec(command, value = null) {\n return getContext().execCommand(command, false, value);\n};\n\n/**\n * Get the index of the first node relative to it's parent.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The index.\n */\nexport function index(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (!node || !node.parentNode) {\n return;\n }\n\n return merge([], node.parentNode.children).indexOf(node);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).findIndex(nodeFilter);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function normalize(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n node.normalize();\n }\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The serialized string.\n */\nexport function serialize(selector) {\n return parseParams(\n serializeArray(selector),\n );\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The serialized array.\n */\nexport function serializeArray(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n }).reduce(\n (values, node) => {\n if (\n (isElement(node) && node.matches('form')) ||\n isFragment(node) ||\n isShadow(node)\n ) {\n return values.concat(\n serializeArray(\n node.querySelectorAll(\n 'input, select, textarea',\n ),\n ),\n );\n }\n\n if (\n isElement(node) &&\n node.matches('[disabled], input[type=submit], input[type=reset], input[type=file], input[type=radio]:not(:checked), input[type=checkbox]:not(:checked)')\n ) {\n return values;\n }\n\n const name = node.getAttribute('name');\n if (!name) {\n return values;\n }\n\n if (\n isElement(node) &&\n node.matches('select[multiple]')\n ) {\n for (const option of node.selectedOptions) {\n values.push(\n {\n name,\n value: option.value || '',\n },\n );\n }\n } else {\n values.push(\n {\n name,\n value: node.value || '',\n },\n );\n }\n\n return values;\n },\n [],\n );\n}\n\n/**\n * Sort nodes by their position in the document.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The sorted array of nodes.\n */\nexport function sort(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).sort((node, other) => {\n if (isWindow(node)) {\n return 1;\n }\n\n if (isWindow(other)) {\n return -1;\n }\n\n if (isDocument(node)) {\n return 1;\n }\n\n if (isDocument(other)) {\n return -1;\n }\n\n if (isFragment(other)) {\n return 1;\n }\n\n if (isFragment(node)) {\n return -1;\n }\n\n if (isShadow(node)) {\n node = node.host;\n }\n\n if (isShadow(other)) {\n other = other.host;\n }\n\n if (node.isSameNode(other)) {\n return 0;\n }\n\n const pos = node.compareDocumentPosition(other);\n\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING || pos & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n\n if (pos & Node.DOCUMENT_POSITION_PRECEDING || pos & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n\n return 0;\n });\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.tagName.toLowerCase();\n};\n","import { isDocument, isElement, merge, unique } from '@fr0st/core';\nimport { parseFilter, parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\nimport { sort } from './../utility/utility.js';\n\n/**\n * DOM Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function child(selector, nodeFilter) {\n return children(selector, nodeFilter, { first: true });\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.first=false] Whether to only return the first matching node for each node.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function children(selector, nodeFilter, { first = false, elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const childNodes = elementsOnly ?\n merge([], node.children) :\n merge([], node.childNodes);\n\n for (const child of childNodes) {\n if (!nodeFilter(child)) {\n continue;\n }\n\n results.push(child);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function closest(selector, nodeFilter, limitFilter) {\n return parents(selector, nodeFilter, limitFilter, { first: true });\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The common ancestor.\n */\nexport function commonAncestor(selector) {\n const nodes = sort(selector);\n\n if (!nodes.length) {\n return;\n }\n\n // Make sure all nodes have a parent\n if (nodes.some((node) => !node.parentNode)) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length === 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n return range.commonAncestorContainer;\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The matching nodes.\n */\nexport function contents(selector) {\n return children(selector, false, { elementsOnly: false });\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {DocumentFragment} The DocumentFragment.\n */\nexport function fragment(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.content;\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function next(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function nextAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.nextSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n\n if (first) {\n break;\n }\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {HTMLElement} The offset parent.\n */\nexport function offsetParent(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.offsetParent;\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function parent(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n node = node.parentNode;\n\n if (!node) {\n continue;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n results.push(node);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function parents(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes have no parent\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const parents = [];\n while (node = node.parentNode) {\n if (isDocument(node)) {\n break;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n parents.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...parents);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The matching nodes.\n */\nexport function prev(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (nodeFilter(node)) {\n results.push(node);\n }\n\n break;\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @param {Boolean} [first=false] Whether to only return the first matching node for each node.\n * @return {array} The matching nodes.\n */\nexport function prevAll(selector, nodeFilter, limitFilter, { first = false } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n limitFilter = parseFilter(limitFilter, false);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (let node of nodes) {\n const siblings = [];\n while (node = node.previousSibling) {\n if (!isElement(node)) {\n continue;\n }\n\n if (limitFilter(node)) {\n break;\n }\n\n if (!nodeFilter(node)) {\n continue;\n }\n\n siblings.unshift(node);\n\n if (first) {\n break;\n }\n }\n\n results.push(...siblings);\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {ShadowRoot} The ShadowRoot.\n */\nexport function shadow(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node.shadowRoot;\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {object} [options] The options for filtering the nodes.\n * @param {Boolean} [options.elementsOnly=true] Whether to only return element nodes.\n * @return {array} The matching nodes.\n */\nexport function siblings(selector, nodeFilter, { elementsOnly = true } = {}) {\n nodeFilter = parseFilter(nodeFilter);\n\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n const results = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const siblings = elementsOnly ?\n parent.children :\n parent.childNodes;\n\n let sibling;\n for (sibling of siblings) {\n if (node.isSameNode(sibling)) {\n continue;\n }\n\n if (!nodeFilter(sibling)) {\n continue;\n }\n\n results.push(sibling);\n }\n }\n\n return nodes.length > 1 && results.length > 1 ?\n unique(results) :\n results;\n};\n","import { merge } from '@fr0st/core';\nimport { addEvent, removeEvent } from './event-handlers.js';\nimport { debounce as _debounce } from './../helpers.js';\nimport { closest } from './../traversal/traversal.js';\nimport { eventLookup } from './../vars.js';\n\n/**\n * DOM Event Factory\n */\n\n/**\n * Return a function for matching a delegate target to a custom selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateContainsFactory(node, selector) {\n return (target) => {\n const matches = merge([], node.querySelectorAll(selector));\n\n if (!matches.length) {\n return false;\n }\n\n if (matches.includes(target)) {\n return target;\n }\n\n return closest(\n target,\n (parent) => matches.includes(parent),\n (parent) => parent.isSameNode(node),\n ).shift();\n };\n};\n\n/**\n * Return a function for matching a delegate target to a standard selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @return {DOM~delegateCallback} The callback for finding the matching delegate.\n */\nfunction getDelegateMatchFactory(node, selector) {\n return (target) =>\n target.matches && target.matches(selector) ?\n target :\n closest(\n target,\n (parent) => parent.matches(selector),\n (parent) => parent.isSameNode(node),\n ).shift();\n};\n\n/**\n * Return a wrapped event callback that executes on a delegate selector.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {string} selector The delegate query selector.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The delegated event callback.\n */\nexport function delegateFactory(node, selector, callback) {\n const getDelegate = selector.match(/(?:^\\s*\\:scope|\\,(?=(?:(?:[^\"']*[\"']){2})*[^\"']*$)\\s*\\:scope)/) ?\n getDelegateContainsFactory(node, selector) :\n getDelegateMatchFactory(node, selector);\n\n return (event) => {\n if (node.isSameNode(event.target)) {\n return;\n }\n\n const delegate = getDelegate(event.target);\n\n if (!delegate) {\n return;\n }\n\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n enumerable: true,\n value: delegate,\n });\n Object.defineProperty(event, 'delegateTarget', {\n configurable: true,\n enumerable: true,\n value: node,\n });\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that cleans up delegate events.\n * @param {HTMLElement|ShadowRoot|Document} node The input node.\n * @param {function} callback The event callback.\n * @return {DOM~eventCallback} The cleaned event callback.\n */\nexport function delegateFactoryClean(node, callback) {\n return (event) => {\n if (!event.delegateTarget) {\n return callback(event);\n }\n\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n enumerable: true,\n value: node,\n });\n Object.defineProperty(event, 'delegateTarget', {\n writable: true,\n });\n\n delete event.delegateTarget;\n\n return callback(event);\n };\n}\n\n/**\n * Return a wrapped mouse drag event (optionally debounced).\n * @param {DOM~eventCallback} down The callback to execute on mousedown.\n * @param {DOM~eventCallback} move The callback to execute on mousemove.\n * @param {DOM~eventCallback} up The callback to execute on mouseup.\n * @param {object} [options] The options for the mouse drag event.\n * @param {Boolean} [options.debounce=true] Whether to debounce the move event.\n * @param {Boolean} [options.passive=true] Whether to use passive event listeners.\n * @param {Boolean} [options.preventDefault=true] Whether to prevent the default event.\n * @param {number} [options.touches=1] The number of touches to trigger the event for.\n * @return {DOM~eventCallback} The mouse drag event callback.\n */\nexport function mouseDragFactory(down, move, up, { debounce = true, passive = true, preventDefault = true, touches = 1 } = {}) {\n if (move && debounce) {\n move = _debounce(move);\n\n // needed to make sure up callback executes after final move callback\n if (up) {\n up = _debounce(up);\n }\n }\n\n return (event) => {\n const isTouch = event.type === 'touchstart';\n\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (down && down(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (!move && !up) {\n return;\n }\n\n const [moveEvent, upEvent] = event.type in eventLookup ?\n eventLookup[event.type] :\n eventLookup.mousedown;\n\n const realMove = (event) => {\n if (isTouch && event.touches.length !== touches) {\n return;\n }\n\n if (preventDefault && !passive) {\n event.preventDefault();\n }\n\n if (!move) {\n return;\n }\n\n move(event);\n };\n\n const realUp = (event) => {\n if (isTouch && event.touches.length !== touches - 1) {\n return;\n }\n\n if (up && up(event) === false) {\n return;\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n removeEvent(window, moveEvent, realMove);\n removeEvent(window, upEvent, realUp);\n };\n\n addEvent(window, moveEvent, realMove, { passive });\n addEvent(window, upEvent, realUp);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a namespace match.\n * @param {string} eventName The namespaced event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function namespaceFactory(eventName, callback) {\n return (event) => {\n if ('namespaceRegExp' in event && !event.namespaceRegExp.test(eventName)) {\n return;\n }\n\n return callback(event);\n };\n};\n\n/**\n * Return a wrapped event callback that checks for a return false for preventing default.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function preventFactory(callback) {\n return (event) => {\n if (callback(event) === false) {\n event.preventDefault();\n }\n };\n};\n\n/**\n * Return a wrapped event callback that removes itself after execution.\n * @param {HTMLElement|ShadowRoot|Document|Window} node The input node.\n * @param {string} eventName The event name.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [optoins.delegate] The delegate selector.\n * @return {DOM~eventCallback} The wrapped event callback.\n */\nexport function selfDestructFactory(node, eventName, callback, { capture = null, delegate = null } = {}) {\n return (event) => {\n removeEvent(node, eventName, callback, { capture, delegate });\n return callback(event);\n };\n};\n","import { delegateFactory, delegateFactoryClean, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js';\nimport { events } from './../vars.js';\n\n/**\n * DOM Event Handlers\n */\n\n/**\n * Add events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} eventNames The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @param {Boolean} [options.selfDestruct] Whether to use a self-destructing event.\n */\nexport function addEvent(selector, eventNames, callback, { capture = false, delegate = null, passive = false, selfDestruct = false } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n eventNames = parseEvents(eventNames);\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n const eventData = {\n callback,\n delegate,\n selfDestruct,\n capture,\n passive,\n };\n\n for (const node of nodes) {\n if (!events.has(node)) {\n events.set(node, {});\n }\n\n const nodeEvents = events.get(node);\n\n let realCallback = callback;\n\n if (selfDestruct) {\n realCallback = selfDestructFactory(node, eventName, realCallback, { capture, delegate });\n }\n\n realCallback = preventFactory(realCallback);\n\n if (delegate) {\n realCallback = delegateFactory(node, delegate, realCallback);\n } else {\n realCallback = delegateFactoryClean(node, realCallback);\n }\n\n realCallback = namespaceFactory(eventName, realCallback);\n\n eventData.realCallback = realCallback;\n eventData.eventName = eventName;\n eventData.realEventName = realEventName;\n\n if (!nodeEvents[realEventName]) {\n nodeEvents[realEventName] = [];\n }\n\n nodeEvents[realEventName].push({ ...eventData });\n\n node.addEventListener(realEventName, realCallback, { capture, passive });\n }\n }\n};\n\n/**\n * Add delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegate(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive });\n};\n\n/**\n * Add self-destructing delegated events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventDelegateOnce(selector, events, delegate, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, delegate, passive, selfDestruct: true });\n};\n\n/**\n * Add self-destructing events to each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n */\nexport function addEventOnce(selector, events, callback, { capture = false, passive = false } = {}) {\n addEvent(selector, events, callback, { capture, passive, selfDestruct: true });\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneEvents(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n const nodeEvents = events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n otherSelector,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n passive: eventData.passive,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n};\n\n/**\n * Remove events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [eventNames] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {string} [options.delegate] The delegate selector.\n */\nexport function removeEvent(selector, eventNames, callback, { capture = null, delegate = null } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n let eventLookup;\n if (eventNames) {\n eventNames = parseEvents(eventNames);\n\n eventLookup = {};\n\n for (const eventName of eventNames) {\n const realEventName = parseEvent(eventName);\n\n if (!(realEventName in eventLookup)) {\n eventLookup[realEventName] = [];\n }\n\n eventLookup[realEventName].push(eventName);\n }\n }\n\n for (const node of nodes) {\n if (!events.has(node)) {\n continue;\n }\n\n const nodeEvents = events.get(node);\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n if (eventLookup && !(realEventName in eventLookup)) {\n continue;\n }\n\n const otherEvents = realEvents.filter((eventData) => {\n if (eventLookup && !eventLookup[realEventName].some((eventName) => {\n if (eventName === realEventName) {\n return true;\n }\n\n const regExp = eventNamespacedRegExp(eventName);\n\n return eventData.eventName.match(regExp);\n })) {\n return true;\n }\n\n if (callback && callback !== eventData.callback) {\n return true;\n }\n\n if (delegate && delegate !== eventData.delegate) {\n return true;\n }\n\n if (capture !== null && capture !== eventData.capture) {\n return true;\n }\n\n node.removeEventListener(realEventName, eventData.realCallback, eventData.capture);\n\n return false;\n });\n\n if (!otherEvents.length) {\n delete nodeEvents[realEventName];\n }\n }\n\n if (!Object.keys(nodeEvents).length) {\n events.delete(node);\n }\n }\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n */\nexport function removeEventDelegate(selector, events, delegate, callback, { capture = null } = {}) {\n removeEvent(selector, events, callback, { capture, delegate });\n};\n\n/**\n * Trigger events on each node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n */\nexport function triggerEvent(selector, events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const nodes = parseNodes(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n events = parseEvents(events);\n\n for (const event of events) {\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n for (const node of nodes) {\n node.dispatchEvent(eventData);\n }\n }\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(selector, event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n const node = parseNode(selector, {\n shadow: true,\n document: true,\n window: true,\n });\n\n const realEvent = parseEvent(event);\n\n const eventData = new CustomEvent(realEvent, {\n detail,\n bubbles,\n cancelable,\n });\n\n if (data) {\n Object.assign(eventData, data);\n }\n\n if (realEvent !== event) {\n eventData.namespace = event.substring(realEvent.length + 1);\n eventData.namespaceRegExp = eventNamespacedRegExp(event);\n }\n\n return node.dispatchEvent(eventData);\n};\n","import { isElement, isFragment, isNode, isShadow, merge } from '@fr0st/core';\nimport { createFragment } from './create.js';\nimport { parseNodes } from './../filters.js';\nimport { animations as _animations, data as _data, events as _events, queues, styles } from './../vars.js';\nimport { addEvent } from './../events/event-handlers.js';\n\n/**\n * DOM Manipulation\n */\n\n/**\n * Clone each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {array} The cloned nodes.\n */\nexport function clone(selector, { deep = true, events = false, data = false, animations = false } = {}) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n });\n\n return nodes.map((node) => {\n const clone = node.cloneNode(deep);\n\n if (events || data || animations) {\n deepClone(node, clone, { deep, events, data, animations });\n }\n\n return clone;\n });\n};\n\n/**\n * Deep clone a single node.\n * @param {Node|HTMLElement|DocumentFragment} node The node.\n * @param {Node|HTMLElement|DocumentFragment} clone The clone.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n */\nfunction deepClone(node, clone, { deep = true, events = false, data = false, animations = false } = {}) {\n if (events && _events.has(node)) {\n const nodeEvents = _events.get(node);\n\n for (const realEvents of Object.values(nodeEvents)) {\n for (const eventData of realEvents) {\n addEvent(\n clone,\n eventData.eventName,\n eventData.callback,\n {\n capture: eventData.capture,\n delegate: eventData.delegate,\n selfDestruct: eventData.selfDestruct,\n },\n );\n }\n }\n }\n\n if (data && _data.has(node)) {\n const nodeData = _data.get(node);\n _data.set(clone, { ...nodeData });\n }\n\n if (animations && _animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n\n for (const animation of nodeAnimations) {\n animation.clone(clone);\n }\n }\n\n if (deep) {\n for (const [i, child] of node.childNodes.entries()) {\n const childClone = clone.childNodes.item(i);\n deepClone(child, childClone, { deep, events, data, animations });\n }\n }\n};\n\n/**\n * Detach each node from the DOM.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The detached nodes.\n */\nexport function detach(selector) {\n // DocumentFragment and ShadowRoot nodes can not be detached\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n for (const node of nodes) {\n node.remove();\n }\n\n return nodes;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function empty(selector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n for (const node of nodes) {\n const childNodes = merge([], node.childNodes);\n\n // Remove descendent elements\n for (const child of childNodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(child);\n }\n\n child.remove();\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n }\n};\n\n/**\n * Remove each node from the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function remove(selector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n for (const node of nodes) {\n if (isElement(node) || isFragment(node) || isShadow(node)) {\n removeNode(node);\n }\n\n // DocumentFragment and ShadowRoot nodes can not be removed\n if (isNode(node)) {\n node.remove();\n }\n }\n};\n\n/**\n * Remove all data for a single node.\n * @param {Node|HTMLElement|DocumentFragment|ShadowRoot} node The node.\n */\nexport function removeNode(node) {\n if (_events.has(node)) {\n const nodeEvents = _events.get(node);\n\n if ('remove' in nodeEvents) {\n const eventData = new CustomEvent('remove', {\n bubbles: false,\n cancelable: false,\n });\n\n node.dispatchEvent(eventData);\n }\n\n for (const [realEventName, realEvents] of Object.entries(nodeEvents)) {\n for (const eventData of realEvents) {\n node.removeEventListener(realEventName, eventData.realCallback, { capture: eventData.capture });\n }\n }\n\n _events.delete(node);\n }\n\n if (queues.has(node)) {\n queues.delete(node);\n }\n\n if (_animations.has(node)) {\n const nodeAnimations = _animations.get(node);\n for (const animation of nodeAnimations) {\n animation.stop();\n }\n }\n\n if (styles.has(node)) {\n styles.delete(node);\n }\n\n if (_data.has(node)) {\n _data.delete(node);\n }\n\n // Remove descendent elements\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n */\nexport function replaceAll(selector, otherSelector) {\n replaceWith(otherSelector, selector);\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n */\nexport function replaceWith(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be removed\n let nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n let others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n // Move nodes to a fragment so they don't get removed\n const fragment = createFragment();\n\n for (const other of others) {\n fragment.insertBefore(other, null);\n }\n\n others = merge([], fragment.childNodes);\n\n nodes = nodes.filter((node) =>\n !others.includes(node) &&\n !nodes.some((other) =>\n !other.isSameNode(node) &&\n other.contains(node),\n ),\n );\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n\n remove(nodes);\n};\n","import { camelCase, merge } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseData, parseDataset } from './../helpers.js';\nimport { removeNode } from './../manipulation/manipulation.js';\n\n/**\n * DOM Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [attribute] The attribute name.\n * @return {string|object} The attribute value, or an object containing attributes.\n */\nexport function getAttribute(selector, attribute) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (attribute) {\n return node.getAttribute(attribute);\n }\n\n return Object.fromEntries(\n merge([], node.attributes)\n .map((attribute) => [attribute.nodeName, attribute.nodeValue]),\n );\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(selector, key) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (key) {\n key = camelCase(key);\n\n return parseDataset(node.dataset[key]);\n }\n\n return Object.fromEntries(\n Object.entries(node.dataset)\n .map(([key, value]) => [key, parseDataset(value)]),\n );\n};\n\n/**\n * Get the HTML contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The HTML contents.\n */\nexport function getHTML(selector) {\n return getProperty(selector, 'innerHTML');\n};\n\n/**\n * Get a property value for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(selector, property) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n return node[property];\n};\n\n/**\n * Get the text contents of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The text contents.\n */\nexport function getText(selector) {\n return getProperty(selector, 'textContent');\n};\n\n/**\n * Get the value property of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {string} The value.\n */\nexport function getValue(selector) {\n return getProperty(selector, 'value');\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n */\nexport function removeAttribute(selector, attribute) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.removeAttribute(attribute);\n }\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} key The dataset key.\n */\nexport function removeDataset(selector, key) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n key = camelCase(key);\n\n delete node.dataset[key];\n }\n};\n\n/**\n * Remove a property from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n */\nexport function removeProperty(selector, property) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n delete node[property];\n }\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n */\nexport function setAttribute(selector, attribute, value) {\n const nodes = parseNodes(selector);\n\n const attributes = parseData(attribute, value);\n\n for (const [key, value] of Object.entries(attributes)) {\n for (const node of nodes) {\n node.setAttribute(key, value);\n }\n }\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n */\nexport function setDataset(selector, key, value) {\n const nodes = parseNodes(selector);\n\n const dataset = parseData(key, value, { json: true });\n\n for (let [key, value] of Object.entries(dataset)) {\n key = camelCase(key);\n for (const node of nodes) {\n node.dataset[key] = value;\n }\n }\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} html The HTML contents.\n */\nexport function setHTML(selector, html) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.innerHTML = html;\n }\n};\n\n/**\n * Set a property value for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n */\nexport function setProperty(selector, property, value) {\n const nodes = parseNodes(selector);\n\n const properties = parseData(property, value);\n\n for (const [key, value] of Object.entries(properties)) {\n for (const node of nodes) {\n node[key] = value;\n }\n }\n};\n\n/**\n * Set the text contents of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} text The text contents.\n */\nexport function setText(selector, text) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const childNodes = merge([], node.children);\n\n for (const child of childNodes) {\n removeNode(child);\n }\n\n // Remove ShadowRoot\n if (node.shadowRoot) {\n removeNode(node.shadowRoot);\n }\n\n // Remove DocumentFragment\n if (node.content) {\n removeNode(node.content);\n }\n\n node.textContent = text;\n }\n};\n\n/**\n * Set the value property of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} value The value.\n */\nexport function setValue(selector, value) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.value = value;\n }\n};\n","import { parseNode, parseNodes } from './../filters.js';\nimport { parseData } from './../helpers.js';\nimport { data } from './../vars.js';\n\n/**\n * DOM Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function cloneData(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const others = parseNodes(otherSelector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n setData(others, { ...nodeData });\n }\n};\n\n/**\n * Get custom data for the first node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(selector, key) {\n const node = parseNode(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n if (!node || !data.has(node)) {\n return;\n }\n\n const nodeData = data.get(node);\n\n return key ?\n nodeData[key] :\n nodeData;\n};\n\n/**\n * Remove custom data from each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n */\nexport function removeData(selector, key) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (!data.has(node)) {\n continue;\n }\n\n const nodeData = data.get(node);\n\n if (key) {\n delete nodeData[key];\n }\n\n if (!key || !Object.keys(nodeData).length) {\n data.delete(node);\n }\n }\n};\n\n/**\n * Set custom data for each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n */\nexport function setData(selector, key, value) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n });\n\n const newData = parseData(key, value);\n\n for (const node of nodes) {\n if (!data.has(node)) {\n data.set(node, {});\n }\n\n const nodeData = data.get(node);\n\n Object.assign(nodeData, newData);\n }\n};\n","import { isNumeric, kebabCase } from '@fr0st/core';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { parseClasses, parseData } from './../helpers.js';\nimport { styles } from './../vars.js';\n\n/**\n * DOM Styles\n */\n\n/**\n * Add classes to each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function addClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.add(...classes);\n }\n};\n\n/**\n * Get computed CSS style value(s) for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (!styles.has(node)) {\n styles.set(\n node,\n getWindow().getComputedStyle(node),\n );\n }\n\n const nodeStyles = styles.get(node);\n\n if (!style) {\n return { ...nodeStyles };\n }\n\n style = kebabCase(style);\n\n return nodeStyles.getPropertyValue(style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(selector, style) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n if (style) {\n style = kebabCase(style);\n\n return node.style[style];\n }\n\n const styles = {};\n\n for (const style of node.style) {\n styles[style] = node.style[style];\n }\n\n return styles;\n};\n\n/**\n * Hide each node from display.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function hide(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', 'none');\n }\n};\n\n/**\n * Remove classes from each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function removeClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n node.classList.remove(...classes);\n }\n};\n\n/**\n * Set style properties for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n */\nexport function setStyle(selector, style, value, { important = false } = {}) {\n const nodes = parseNodes(selector);\n\n const styles = parseData(style, value);\n\n for (let [style, value] of Object.entries(styles)) {\n style = kebabCase(style);\n\n // if value is numeric and property doesn't support number values, add px\n if (value && isNumeric(value) && !CSS.supports(style, value)) {\n value += 'px';\n }\n\n for (const node of nodes) {\n node.style.setProperty(\n style,\n value,\n important ?\n 'important' :\n '',\n );\n }\n }\n};\n\n/**\n * Display each hidden node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function show(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty('display', '');\n }\n};\n\n/**\n * Toggle the visibility of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function toggle(selector) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n node.style.setProperty(\n 'display',\n node.style.display === 'none' ?\n '' :\n 'none',\n );\n }\n};\n\n/**\n * Toggle classes for each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n */\nexport function toggleClass(selector, ...classes) {\n const nodes = parseNodes(selector);\n\n classes = parseClasses(classes);\n\n if (!classes.length) {\n return;\n }\n\n for (const node of nodes) {\n for (const className of classes) {\n node.classList.toggle(className);\n }\n }\n};\n","import { clampPercent, dist } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { getContext, getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center(selector, { offset = false } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n return {\n x: nodeBox.left + nodeBox.width / 2,\n y: nodeBox.top + nodeBox.height / 2,\n };\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} containerSelector The container node, or a query selector string.\n */\nexport function constrain(selector, containerSelector) {\n const containerBox = rect(containerSelector);\n\n if (!containerBox) {\n return;\n }\n\n const nodes = parseNodes(selector);\n\n const context = getContext();\n const window = getWindow();\n const getScrollX = (_) => context.documentElement.scrollHeight > window.outerHeight;\n const getScrollY = (_) => context.documentElement.scrollWidth > window.outerWidth;\n\n const preScrollX = getScrollX();\n const preScrollY = getScrollY();\n\n for (const node of nodes) {\n const nodeBox = rect(node);\n\n if (nodeBox.height > containerBox.height) {\n node.style.setProperty('height', `${containerBox.height}px`);\n }\n\n if (nodeBox.width > containerBox.width) {\n node.style.setProperty('width', `${containerBox.width}px`);\n }\n\n let leftOffset;\n if (nodeBox.left - containerBox.left < 0) {\n leftOffset = nodeBox.left - containerBox.left;\n } else if (nodeBox.right - containerBox.right > 0) {\n leftOffset = nodeBox.right - containerBox.right;\n }\n\n if (leftOffset) {\n const oldLeft = css(node, 'left');\n const trueLeft = oldLeft && oldLeft !== 'auto' ? parseFloat(oldLeft) : 0;\n node.style.setProperty('left', `${trueLeft - leftOffset}px`);\n }\n\n let topOffset;\n if (nodeBox.top - containerBox.top < 0) {\n topOffset = nodeBox.top - containerBox.top;\n } else if (nodeBox.bottom - containerBox.bottom > 0) {\n topOffset = nodeBox.bottom - containerBox.bottom;\n }\n\n if (topOffset) {\n const oldTop = css(node, 'top');\n const trueTop = oldTop && oldTop !== 'auto' ? parseFloat(oldTop) : 0;\n node.style.setProperty('top', `${trueTop - topOffset}px`);\n }\n\n if (css(node, 'position') === 'static') {\n node.style.setProperty('position', 'relative');\n }\n }\n\n const postScrollX = getScrollX();\n const postScrollY = getScrollY();\n\n if (preScrollX !== postScrollX || preScrollY !== postScrollY) {\n constrain(nodes, containerSelector);\n }\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the element.\n */\nexport function distTo(selector, x, y, { offset = false } = {}) {\n const nodeCenter = center(selector, { offset });\n\n if (!nodeCenter) {\n return;\n }\n\n return dist(nodeCenter.x, nodeCenter.y, x, y);\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return distTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestTo(selector, x, y, { offset = false } = {}) {\n let closest;\n let closestDistance = Number.MAX_VALUE;\n\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n const dist = distTo(node, x, y, { offset });\n if (dist && dist < closestDistance) {\n closestDistance = dist;\n closest = node;\n }\n }\n\n return closest;\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {HTMLElement} The nearest node.\n */\nexport function nearestToNode(selector, otherSelector) {\n const otherCenter = center(otherSelector);\n\n if (!otherCenter) {\n return;\n }\n\n return nearestTo(selector, otherCenter.x, otherCenter.y);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(selector, x, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (x - nodeBox.left) /\n nodeBox.width *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(selector, y, { offset = false, clamp = true } = {}) {\n const nodeBox = rect(selector, { offset });\n\n if (!nodeBox) {\n return;\n }\n\n const percent = (y - nodeBox.top) /\n nodeBox.height *\n 100;\n\n return clamp ?\n clampPercent(percent) :\n percent;\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the X and Y co-ordinates.\n */\nexport function position(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = {\n x: node.offsetLeft,\n y: node.offsetTop,\n };\n\n if (offset) {\n let offsetParent = node;\n\n while (offsetParent = offsetParent.offsetParent) {\n result.x += offsetParent.offsetLeft;\n result.y += offsetParent.offsetTop;\n }\n }\n\n return result;\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect(selector, { offset = false } = {}) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n const result = node.getBoundingClientRect();\n\n if (offset) {\n const window = getWindow();\n result.x += window.scrollX;\n result.y += window.scrollY;\n }\n\n return result;\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { parseNode, parseNodes } from './../filters.js';\n\n/**\n * DOM Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll X position.\n */\nexport function getScrollX(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollX;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollLeft;\n }\n\n return node.scrollLeft;\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY(selector) {\n const node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return node.scrollY;\n }\n\n if (isDocument(node)) {\n return node.scrollingElement.scrollTop;\n }\n\n return node.scrollTop;\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n */\nexport function setScroll(selector, x, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n }\n};\n\n/**\n * Scroll each node to an X position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} x The scroll X position.\n */\nexport function setScrollX(selector, x) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(x, node.scrollY);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollLeft = x;\n } else {\n node.scrollLeft = x;\n }\n }\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {number} y The scroll Y position.\n */\nexport function setScrollY(selector, y) {\n const nodes = parseNodes(selector, {\n document: true,\n window: true,\n });\n\n for (const node of nodes) {\n if (isWindow(node)) {\n node.scroll(node.scrollX, y);\n } else if (isDocument(node)) {\n node.scrollingElement.scrollTop = y;\n } else {\n node.scrollTop = y;\n }\n }\n};\n","import { isDocument, isWindow } from '@fr0st/core';\nimport { css } from './styles.js';\nimport { parseNode } from './../filters.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './../vars.js';\n\n/**\n * DOM Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerHeight :\n node.innerHeight;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollHeight;\n }\n\n let result = node.clientHeight;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-top'));\n result -= parseInt(css(node, 'padding-bottom'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-top-width'));\n result += parseInt(css(node, 'border-bottom-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-top'));\n result += parseInt(css(node, 'margin-bottom'));\n }\n\n return result;\n};\n\n/**\n * Get the computed width of the first node.\n * @param {string|array|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width(selector, { boxSize = PADDING_BOX, outer = false } = {}) {\n let node = parseNode(selector, {\n document: true,\n window: true,\n });\n\n if (!node) {\n return;\n }\n\n if (isWindow(node)) {\n return outer ?\n node.outerWidth :\n node.innerWidth;\n }\n\n if (isDocument(node)) {\n node = node.documentElement;\n }\n\n if (boxSize >= SCROLL_BOX) {\n return node.scrollWidth;\n }\n\n let result = node.clientWidth;\n\n if (boxSize <= CONTENT_BOX) {\n result -= parseInt(css(node, 'padding-left'));\n result -= parseInt(css(node, 'padding-right'));\n }\n\n if (boxSize >= BORDER_BOX) {\n result += parseInt(css(node, 'border-left-width'));\n result += parseInt(css(node, 'border-right-width'));\n }\n\n if (boxSize >= MARGIN_BOX) {\n result += parseInt(css(node, 'margin-left'));\n result += parseInt(css(node, 'margin-right'));\n }\n\n return result;\n};\n","import { getContext, getWindow } from './../config.js';\nimport { parseNode } from './../filters.js';\n\n/**\n * DOM Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function blur(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.blur();\n};\n\n/**\n * Trigger a click event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function click(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.click();\n};\n\n/**\n * Trigger a focus event on the first node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function focus(selector) {\n const node = parseNode(selector);\n\n if (!node) {\n return;\n }\n\n node.focus();\n};\n\n/**\n * Add a function to the ready queue.\n * @param {DOM~eventCallback} callback The callback to execute.\n */\nexport function ready(callback) {\n if (getContext().readyState === 'complete') {\n callback();\n } else {\n getWindow().addEventListener('DOMContentLoaded', callback, { once: true });\n }\n};\n","import { clone } from './manipulation.js';\nimport { parseNodes } from './../filters.js';\n\n/**\n * DOM Move\n */\n\n/**\n * Insert each other node after each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function after(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node.nextSibling);\n }\n }\n};\n\n/**\n * Append each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function append(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n }\n};\n\n/**\n * Append each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function appendTo(selector, otherSelector) {\n append(otherSelector, selector);\n};\n\n/**\n * Insert each other node before each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function before(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not have siblings\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n }\n};\n\n/**\n * Insert each node after each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertAfter(selector, otherSelector) {\n after(otherSelector, selector);\n};\n\n/**\n * Insert each node before each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function insertBefore(selector, otherSelector) {\n before(otherSelector, selector);\n};\n\n/**\n * Prepend each other node to each node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function prepend(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n });\n\n // ShadowRoot nodes can not be moved\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n html: true,\n });\n\n for (const [i, node] of nodes.entries()) {\n const firstChild = node.firstChild;\n\n let clones;\n if (i === nodes.length - 1) {\n clones = others;\n } else {\n clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n }\n\n for (const clone of clones) {\n node.insertBefore(clone, firstChild);\n }\n }\n};\n\n/**\n * Prepend each node to each other node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n */\nexport function prependTo(selector, otherSelector) {\n prepend(otherSelector, selector);\n};\n","import { isFragment, merge } from '@fr0st/core';\nimport { clone, remove } from './manipulation.js';\nimport { parseFilter, parseNodes } from './../filters.js';\n\n/**\n * DOM Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n */\nexport function unwrap(selector, nodeFilter) {\n // DocumentFragment and ShadowRoot nodes can not be unwrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n nodeFilter = parseFilter(nodeFilter);\n\n const parents = [];\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n if (parents.includes(parent)) {\n continue;\n }\n\n if (!nodeFilter(parent)) {\n continue;\n }\n\n parents.push(parent);\n }\n\n for (const parent of parents) {\n const outerParent = parent.parentNode;\n\n if (!outerParent) {\n continue;\n }\n\n const children = merge([], parent.childNodes);\n\n for (const child of children) {\n outerParent.insertBefore(child, parent);\n }\n }\n\n remove(parents);\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrap(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const parent = node.parentNode;\n\n if (!parent) {\n continue;\n }\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, node);\n }\n\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapAll(selector, otherSelector) {\n // DocumentFragment and ShadowRoot nodes can not be wrapped\n const nodes = parseNodes(selector, {\n node: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstNode = nodes[0];\n\n if (!firstNode) {\n return;\n }\n\n const parent = firstNode.parentNode;\n\n if (!parent) {\n return;\n }\n\n const firstClone = clones[0];\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n parent.insertBefore(clone, firstNode);\n }\n\n for (const node of nodes) {\n deepest.insertBefore(node, null);\n }\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n */\nexport function wrapInner(selector, otherSelector) {\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n // ShadowRoot nodes can not be cloned\n const others = parseNodes(otherSelector, {\n fragment: true,\n html: true,\n });\n\n for (const node of nodes) {\n const children = merge([], node.childNodes);\n\n const clones = clone(others, {\n events: true,\n data: true,\n animations: true,\n });\n\n const firstClone = clones.slice().shift();\n\n const firstCloneNode = isFragment(firstClone) ?\n firstClone.firstChild :\n firstClone;\n const deepest = merge([], firstCloneNode.querySelectorAll('*')).find((node) => !node.childElementCount) || firstCloneNode;\n\n for (const clone of clones) {\n node.insertBefore(clone, null);\n }\n\n for (const child of children) {\n deepest.insertBefore(child, null);\n }\n }\n};\n","import { parseNodes } from './../filters.js';\nimport { queues } from './../vars.js';\n\n/**\n * DOM Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName] The name of the queue to use.\n */\nexport function clearQueue(selector, { queueName = null } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n continue;\n }\n\n const queue = queues.get(node);\n\n if (queueName) {\n delete queue[queueName];\n }\n\n if (!queueName || !Object.keys(queue).length) {\n queues.delete(node);\n }\n }\n};\n\n/**\n * Run the next callback for a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nfunction dequeue(node, { queueName = 'default' } = {}) {\n const queue = queues.get(node);\n\n if (!queue || !(queueName in queue)) {\n return;\n }\n\n const next = queue[queueName].shift();\n\n if (!next) {\n queues.delete(node);\n return;\n }\n\n Promise.resolve(next(node))\n .then((_) => {\n dequeue(node, { queueName });\n }).catch((_) => {\n queues.delete(node);\n });\n};\n\n/**\n * Queue a callback on each node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n */\nexport function queue(selector, callback, { queueName = 'default' } = {}) {\n const nodes = parseNodes(selector);\n\n for (const node of nodes) {\n if (!queues.has(node)) {\n queues.set(node, {});\n }\n\n const queue = queues.get(node);\n const runningQueue = queueName in queue;\n\n if (!runningQueue) {\n queue[queueName] = [\n (_) => new Promise((resolve) => {\n setTimeout(resolve, 1);\n }),\n ];\n }\n\n queue[queueName].push(callback);\n\n if (!runningQueue) {\n dequeue(node, { queueName });\n }\n }\n};\n","import { isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function connected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) => node.isConnected);\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function equal(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isEqualNode(other),\n ),\n );\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function filter(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function filterOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find(nodeFilter) || null;\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function fixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).filter((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Return all hidden nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function hidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function not(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node, index) => !nodeFilter(node, index));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Node|HTMLElement|DocumentFragment|ShadowRoot} The filtered node.\n */\nexport function notOne(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).find((node, index) => !nodeFilter(node, index)) || null;\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function same(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).filter((node) =>\n others.some((other) =>\n node.isSameNode(other),\n ),\n );\n};\n\n/**\n * Return all visible nodes.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function visible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n\n/**\n * Return all nodes with an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n animations.has(node),\n );\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {array} The filtered nodes.\n */\nexport function withAttribute(selector, attribute) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasAttribute(attribute),\n );\n};\n\n/**\n * Return all nodes with child elements.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter((node) =>\n !!node.childElementCount,\n );\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {array} The filtered nodes.\n */\nexport function withClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .filter((node) =>\n classes.some((className) =>\n node.classList.contains(className),\n ),\n );\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSAnimation(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {array} The filtered nodes.\n */\nexport function withCSSTransition(selector) {\n return parseNodes(selector)\n .filter((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {array} The filtered nodes.\n */\nexport function withData(selector, key) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).filter((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Return all nodes with a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {array} The filtered nodes.\n */\nexport function withDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).filter(nodeFilter);\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {array} The filtered nodes.\n */\nexport function withProperty(selector, property) {\n return parseNodes(selector)\n .filter((node) =>\n node.hasOwnProperty(property),\n );\n};\n","import { isElement, merge, unique } from '@fr0st/core';\nimport { sort } from './utility.js';\nimport { getWindow } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { createRange } from './../manipulation/create.js';\n\n/**\n * DOM Selection\n */\n\n/**\n * Insert each node after the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function afterSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n range.collapse();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Insert each node before the selection.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function beforeSelection(selector) {\n // ShadowRoot nodes can not be moved\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n html: true,\n }).reverse();\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n\n/**\n * Extract selected nodes from the DOM.\n * @return {array} The selected nodes.\n */\nexport function extractSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const fragment = range.extractContents();\n\n return merge([], fragment.childNodes);\n};\n\n/**\n * Return all selected nodes.\n * @return {array} The selected nodes.\n */\nexport function getSelection() {\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return [];\n }\n\n const range = selection.getRangeAt(0);\n const nodes = merge([], range.commonAncestorContainer.querySelectorAll('*'));\n\n if (!nodes.length) {\n return [range.commonAncestorContainer];\n }\n\n if (nodes.length === 1) {\n return nodes;\n }\n\n const startContainer = range.startContainer;\n const endContainer = range.endContainer;\n const start = isElement(startContainer) ?\n startContainer :\n startContainer.parentNode;\n const end = isElement(endContainer) ?\n endContainer :\n endContainer.parentNode;\n\n const selectedNodes = nodes.slice(\n nodes.indexOf(start),\n nodes.indexOf(end) + 1,\n );\n const results = [];\n\n let lastNode;\n for (const node of selectedNodes) {\n if (lastNode && lastNode.contains(node)) {\n continue;\n }\n\n lastNode = node;\n results.push(node);\n }\n\n return results.length > 1 ?\n unique(results) :\n results;\n};\n\n/**\n * Create a selection on the first node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function select(selector) {\n const node = parseNode(selector, {\n node: true,\n });\n\n if (node && 'select' in node) {\n node.select();\n return;\n }\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n\n if (!node) {\n return;\n }\n\n const range = createRange();\n range.selectNode(node);\n selection.addRange(range);\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n */\nexport function selectAll(selector) {\n const nodes = sort(selector);\n\n const selection = getWindow().getSelection();\n\n if (selection.rangeCount) {\n selection.removeAllRanges();\n }\n\n if (!nodes.length) {\n return;\n }\n\n const range = createRange();\n\n if (nodes.length == 1) {\n range.selectNode(nodes.shift());\n } else {\n range.setStartBefore(nodes.shift());\n range.setEndAfter(nodes.pop());\n }\n\n selection.addRange(range);\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector or HTML string.\n */\nexport function wrapSelection(selector) {\n // ShadowRoot nodes can not be cloned\n const nodes = parseNodes(selector, {\n fragment: true,\n html: true,\n });\n\n const selection = getWindow().getSelection();\n\n if (!selection.rangeCount) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n\n selection.removeAllRanges();\n\n const node = nodes.slice().shift();\n const deepest = merge([], node.querySelectorAll('*')).find((node) => !node.childElementCount) || node;\n\n const fragment = range.extractContents();\n\n const childNodes = merge([], fragment.childNodes);\n\n for (const child of childNodes) {\n deepest.insertBefore(child, null);\n }\n\n for (const node of nodes) {\n range.insertNode(node);\n }\n};\n","import { camelCase, isDocument, isElement, isWindow } from '@fr0st/core';\nimport { parseFilter, parseFilterContains, parseNodes } from './../filters.js';\nimport { parseClasses } from './../helpers.js';\nimport { animations, data } from './../vars.js';\nimport { css } from './../attributes/styles.js';\nimport { closest } from './../traversal/traversal.js';\n\n/**\n * DOM Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation(selector) {\n return parseNodes(selector)\n .some((node) => animations.has(node));\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(selector, attribute) {\n return parseNodes(selector)\n .some((node) => node.hasAttribute(attribute));\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren(selector) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some((node) => node.childElementCount);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(selector, ...classes) {\n classes = parseClasses(classes);\n\n return parseNodes(selector)\n .some((node) =>\n classes.some((className) => node.classList.contains(className)),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'animation-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition(selector) {\n return parseNodes(selector)\n .some((node) =>\n parseFloat(css(node, 'transition-duration')),\n );\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(selector, key) {\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n }).some((node) => {\n if (!data.has(node)) {\n return false;\n }\n\n if (!key) {\n return true;\n }\n\n const nodeData = data.get(node);\n\n return nodeData.hasOwnProperty(key);\n });\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(selector, key) {\n key = camelCase(key);\n\n return parseNodes(selector)\n .some((node) => !!node.dataset[key]);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(selector, nodeFilter) {\n nodeFilter = parseFilterContains(nodeFilter);\n\n return parseNodes(selector, {\n fragment: true,\n shadow: true,\n document: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment(selector) {\n return parseNodes(selector)\n .some((node) => node.content);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(selector, property) {\n return parseNodes(selector)\n .some((node) => node.hasOwnProperty(property));\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow(selector) {\n return parseNodes(selector)\n .some((node) => node.shadowRoot);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(selector, nodeFilter) {\n nodeFilter = parseFilter(nodeFilter);\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some(nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected(selector) {\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) => node.isConnected);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isEqualNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes or a parent of any of the nodes is \"fixed\".\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed(selector) {\n return parseNodes(selector, {\n node: true,\n }).some((node) =>\n (isElement(node) && css(node, 'position') === 'fixed') ||\n closest(\n node,\n (parent) => isElement(parent) && css(parent, 'position') === 'fixed',\n ).length,\n );\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState !== 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState !== 'visible';\n }\n\n return !node.offsetParent;\n });\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(selector, otherSelector) {\n const others = parseNodes(otherSelector, {\n node: true,\n fragment: true,\n shadow: true,\n });\n\n return parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n }).some((node) =>\n others.some((other) => node.isSameNode(other)),\n );\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @param {string|array|Node|HTMLElement|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible(selector) {\n return parseNodes(selector, {\n node: true,\n document: true,\n window: true,\n }).some((node) => {\n if (isWindow(node)) {\n return node.document.visibilityState === 'visible';\n }\n\n if (isDocument(node)) {\n return node.visibilityState === 'visible';\n }\n\n return node.offsetParent;\n });\n};\n","import QuerySet from './query-set.js';\nimport { animate, stop } from './animation/animate.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus } from './events/events.js';\nimport { attachShadow } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { clearQueue, delay, queue } from './queue/queue.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { afterSelection, beforeSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { add, eq, first, index, indexOf, last, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nconst proto = QuerySet.prototype;\n\nproto.add = add;\nproto.addClass = addClass;\nproto.addEvent = addEvent;\nproto.addEventDelegate = addEventDelegate;\nproto.addEventDelegateOnce = addEventDelegateOnce;\nproto.addEventOnce = addEventOnce;\nproto.after = after;\nproto.afterSelection = afterSelection;\nproto.animate = animate;\nproto.append = append;\nproto.appendTo = appendTo;\nproto.attachShadow = attachShadow;\nproto.before = before;\nproto.beforeSelection = beforeSelection;\nproto.blur = blur;\nproto.center = center;\nproto.child = child;\nproto.children = children;\nproto.clearQueue = clearQueue;\nproto.click = click;\nproto.clone = clone;\nproto.cloneData = cloneData;\nproto.cloneEvents = cloneEvents;\nproto.closest = closest;\nproto.commonAncestor = commonAncestor;\nproto.connected = connected;\nproto.constrain = constrain;\nproto.contents = contents;\nproto.css = css;\nproto.delay = delay;\nproto.detach = detach;\nproto.distTo = distTo;\nproto.distToNode = distToNode;\nproto.dropIn = dropIn;\nproto.dropOut = dropOut;\nproto.empty = empty;\nproto.eq = eq;\nproto.equal = equal;\nproto.fadeIn = fadeIn;\nproto.fadeOut = fadeOut;\nproto.filter = filter;\nproto.filterOne = filterOne;\nproto.find = find;\nproto.findByClass = findByClass;\nproto.findById = findById;\nproto.findByTag = findByTag;\nproto.findOne = findOne;\nproto.findOneByClass = findOneByClass;\nproto.findOneById = findOneById;\nproto.findOneByTag = findOneByTag;\nproto.first = first;\nproto.fixed = fixed;\nproto.focus = focus;\nproto.fragment = fragment;\nproto.getAttribute = getAttribute;\nproto.getData = getData;\nproto.getDataset = getDataset;\nproto.getHTML = getHTML;\nproto.getProperty = getProperty;\nproto.getScrollX = getScrollX;\nproto.getScrollY = getScrollY;\nproto.getStyle = getStyle;\nproto.getText = getText;\nproto.getValue = getValue;\nproto.hasAnimation = hasAnimation;\nproto.hasAttribute = hasAttribute;\nproto.hasChildren = hasChildren;\nproto.hasClass = hasClass;\nproto.hasCSSAnimation = hasCSSAnimation;\nproto.hasCSSTransition = hasCSSTransition;\nproto.hasData = hasData;\nproto.hasDataset = hasDataset;\nproto.hasDescendent = hasDescendent;\nproto.hasFragment = hasFragment;\nproto.hasProperty = hasProperty;\nproto.hasShadow = hasShadow;\nproto.height = height;\nproto.hidden = hidden;\nproto.hide = hide;\nproto.index = index;\nproto.indexOf = indexOf;\nproto.insertAfter = insertAfter;\nproto.insertBefore = insertBefore;\nproto.is = is;\nproto.isConnected = isConnected;\nproto.isEqual = isEqual;\nproto.isFixed = isFixed;\nproto.isHidden = isHidden;\nproto.isSame = isSame;\nproto.isVisible = isVisible;\nproto.last = last;\nproto.nearestTo = nearestTo;\nproto.nearestToNode = nearestToNode;\nproto.next = next;\nproto.nextAll = nextAll;\nproto.normalize = normalize;\nproto.not = not;\nproto.notOne = notOne;\nproto.offsetParent = offsetParent;\nproto.parent = parent;\nproto.parents = parents;\nproto.percentX = percentX;\nproto.percentY = percentY;\nproto.position = position;\nproto.prepend = prepend;\nproto.prependTo = prependTo;\nproto.prev = prev;\nproto.prevAll = prevAll;\nproto.queue = queue;\nproto.rect = rect;\nproto.remove = remove;\nproto.removeAttribute = removeAttribute;\nproto.removeClass = removeClass;\nproto.removeData = removeData;\nproto.removeDataset = removeDataset;\nproto.removeEvent = removeEvent;\nproto.removeEventDelegate = removeEventDelegate;\nproto.removeProperty = removeProperty;\nproto.replaceAll = replaceAll;\nproto.replaceWith = replaceWith;\nproto.rotateIn = rotateIn;\nproto.rotateOut = rotateOut;\nproto.same = same;\nproto.select = select;\nproto.selectAll = selectAll;\nproto.serialize = serialize;\nproto.serializeArray = serializeArray;\nproto.setAttribute = setAttribute;\nproto.setData = setData;\nproto.setDataset = setDataset;\nproto.setHTML = setHTML;\nproto.setProperty = setProperty;\nproto.setScroll = setScroll;\nproto.setScrollX = setScrollX;\nproto.setScrollY = setScrollY;\nproto.setStyle = setStyle;\nproto.setText = setText;\nproto.setValue = setValue;\nproto.shadow = shadow;\nproto.show = show;\nproto.siblings = siblings;\nproto.slideIn = slideIn;\nproto.slideOut = slideOut;\nproto.sort = sort;\nproto.squeezeIn = squeezeIn;\nproto.squeezeOut = squeezeOut;\nproto.stop = stop;\nproto.tagName = tagName;\nproto.toggle = toggle;\nproto.toggleClass = toggleClass;\nproto.triggerEvent = triggerEvent;\nproto.triggerOne = triggerOne;\nproto.unwrap = unwrap;\nproto.visible = visible;\nproto.width = width;\nproto.withAnimation = withAnimation;\nproto.withAttribute = withAttribute;\nproto.withChildren = withChildren;\nproto.withClass = withClass;\nproto.withCSSAnimation = withCSSAnimation;\nproto.withCSSTransition = withCSSTransition;\nproto.withData = withData;\nproto.withDescendent = withDescendent;\nproto.withProperty = withProperty;\nproto.wrap = wrap;\nproto.wrapAll = wrapAll;\nproto.wrapInner = wrapInner;\nproto.wrapSelection = wrapSelection;\n\nexport default QuerySet;\n","import { isFunction } from '@fr0st/core';\nimport QuerySet from './proto.js';\nimport { getContext } from './../config.js';\nimport { parseNode, parseNodes } from './../filters.js';\nimport { ready } from './../events/events.js';\n\n/**\n * DOM Query\n */\n\n/**\n * Add a function to the ready queue or return a QuerySet.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet|function} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function query(selector, context = null) {\n if (isFunction(selector)) {\n return ready(selector);\n }\n\n const nodes = parseNodes(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(nodes);\n};\n\n/**\n * Return a QuerySet for the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The new QuerySet object.\n */\nexport function queryOne(selector, context = null) {\n const node = parseNode(selector, {\n node: true,\n fragment: true,\n shadow: true,\n document: true,\n window: true,\n html: true,\n context: context || getContext(),\n });\n\n return new QuerySet(node ? [node] : []);\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Scripts\n */\n\n/**\n * Load and execute a JavaScript file.\n * @param {string} url The URL of the script.\n * @param {object} [attributes] Additional attributes to set on the script tag.\n * @param {object} [options] The options for loading the script.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the script is loaded, or rejects on failure.\n */\nexport function loadScript(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n src: url,\n type: 'text/javascript',\n ...attributes,\n };\n\n if (!('async' in attributes)) {\n attributes.defer = '';\n }\n\n if (!cache) {\n attributes.src = appendQueryString(attributes.src, '_', Date.now());\n }\n\n const script = context.createElement('script');\n\n for (const [key, value] of Object.entries(attributes)) {\n script.setAttribute(key, value);\n }\n\n context.head.appendChild(script);\n\n return new Promise((resolve, reject) => {\n script.onload = (_) => resolve();\n script.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Load and executes multiple JavaScript files (in order).\n * @param {array} urls An array of script URLs or attribute objects.\n * @param {object} [options] The options for loading the scripts.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadScripts(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadScript(url, null, { cache, context }) :\n loadScript(null, url, { cache, context }),\n ),\n );\n};\n","import { isString } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { appendQueryString } from './../ajax/helpers.js';\n\n/**\n * DOM AJAX Styles\n */\n\n/**\n * Import a CSS Stylesheet file.\n * @param {string} url The URL of the stylesheet.\n * @param {object} [attributes] Additional attributes to set on the style tag.\n * @param {object} [options] The options for loading the stylesheet.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the stylesheet is loaded, or rejects on failure.\n */\nexport function loadStyle(url, attributes, { cache = true, context = getContext() } = {}) {\n attributes = {\n href: url,\n rel: 'stylesheet',\n ...attributes,\n };\n\n if (!cache) {\n attributes.href = appendQueryString(attributes.href, '_', Date.now());\n }\n\n const link = context.createElement('link');\n\n for (const [key, value] of Object.entries(attributes)) {\n link.setAttribute(key, value);\n }\n\n context.head.appendChild(link);\n\n return new Promise((resolve, reject) => {\n link.onload = (_) => resolve();\n link.onerror = (error) => reject(error);\n });\n};\n\n/**\n * Import multiple CSS Stylesheet files.\n * @param {array} urls An array of stylesheet URLs or attribute objects.\n * @param {object} [options] The options for loading the stylesheets.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Document} [options.context=getContext()] The document context.\n * @return {Promise} A new Promise that resolves when the request is completed, or rejects on failure.\n */\nexport function loadStyles(urls, { cache = true, context = getContext() } = {}) {\n return Promise.all(\n urls.map((url) =>\n isString(url) ?\n loadStyle(url, null, { cache, context }) :\n loadStyle(null, url, { cache, context }),\n ),\n );\n};\n","import { merge } from '@fr0st/core';\nimport { getContext } from './../config.js';\nimport { allowedTags as _allowedTags } from './../vars.js';\n\n/**\n * DOM Utility\n */\n\n/**\n * Sanitize a HTML string.\n * @param {string} html The input HTML string.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n * @return {string} The sanitized HTML string.\n */\nexport function sanitize(html, allowedTags = _allowedTags) {\n const template = getContext().createElement('template');\n template.innerHTML = html;\n const fragment = template.content;\n const childNodes = merge([], fragment.children);\n\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n\n return template.innerHTML;\n};\n\n/**\n * Sanitize a single node.\n * @param {HTMLElement} node The input node.\n * @param {object} [allowedTags] An object containing allowed tags and attributes.\n */\nfunction sanitizeNode(node, allowedTags = _allowedTags) {\n // check node\n const name = node.tagName.toLowerCase();\n\n if (!(name in allowedTags)) {\n node.remove();\n return;\n }\n\n // check node attributes\n const allowedAttributes = [];\n\n if ('*' in allowedTags) {\n allowedAttributes.push(...allowedTags['*']);\n }\n\n allowedAttributes.push(...allowedTags[name]);\n\n const attributes = merge([], node.attributes);\n\n for (const attribute of attributes) {\n if (!allowedAttributes.find((test) => attribute.nodeName.match(test))) {\n node.removeAttribute(attribute.nodeName);\n }\n }\n\n // check children\n const childNodes = merge([], node.children);\n for (const child of childNodes) {\n sanitizeNode(child, allowedTags);\n }\n};\n","import { merge, unique } from '@fr0st/core';\nimport { query } from './../query.js';\nimport QuerySet from './../query-set.js';\nimport { index as _index, indexOf as _indexOf, normalize as _normalize, serialize as _serialize, serializeArray as _serializeArray, sort as _sort, tagName as _tagName } from './../../utility/utility.js';\n\n/**\n * QuerySet Utility\n */\n\n/**\n * Merge with new nodes and sort the results.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} selector The input selector.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} [context] The context to search in.\n * @return {QuerySet} The QuerySet object.\n */\nexport function add(selector, context = null) {\n const nodes = _sort(unique(merge([], this.get(), query(selector, context).get())));\n\n return new QuerySet(nodes);\n};\n\n/**\n * Reduce the set of nodes to the one at the specified index.\n * @param {number} index The index of the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function eq(index) {\n const node = this.get(index);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Reduce the set of nodes to the first.\n * @return {QuerySet} The QuerySet object.\n */\nexport function first() {\n return this.eq(0);\n};\n\n/**\n * Get the index of the first node relative to it's parent node.\n * @return {number} The index.\n */\nexport function index() {\n return _index(this);\n};\n\n/**\n * Get the index of the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {number} The index.\n */\nexport function indexOf(nodeFilter) {\n return _indexOf(this, nodeFilter);\n};\n\n/**\n * Reduce the set of nodes to the last.\n * @return {QuerySet} The QuerySet object.\n */\nexport function last() {\n return this.eq(-1);\n};\n\n/**\n * Normalize nodes (remove empty text nodes, and join adjacent text nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function normalize() {\n _normalize(this);\n\n return this;\n};\n\n/**\n * Return a serialized string containing names and values of all form nodes.\n * @return {string} The serialized string.\n */\nexport function serialize() {\n return _serialize(this);\n};\n\n/**\n * Return a serialized array containing names and values of all form nodes.\n * @return {array} The serialized array.\n */\nexport function serializeArray() {\n return _serializeArray(this);\n};\n\n/**\n * Sort nodes by their position in the document.\n * @return {QuerySet} The QuerySet object.\n */\nexport function sort() {\n return new QuerySet(_sort(this));\n};\n\n/**\n * Return the tag name (lowercase) of the first node.\n * @return {string} The nodes tag name (lowercase).\n */\nexport function tagName() {\n return _tagName(this);\n};\n","import { addClass as _addClass, css as _css, getStyle as _getStyle, hide as _hide, removeClass as _removeClass, setStyle as _setStyle, show as _show, toggle as _toggle, toggleClass as _toggleClass } from './../../attributes/styles.js';\n\n/**\n * QuerySet Styles\n */\n\n/**\n * Add classes to each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addClass(...classes) {\n _addClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Get computed CSS style values for the first node.\n * @param {string} [style] The CSS style name.\n * @return {string|object} The CSS style value, or an object containing the computed CSS style properties.\n */\nexport function css(style) {\n return _css(this, style);\n};\n\n/**\n * Get style properties for the first node.\n * @param {string} [style] The style name.\n * @return {string|object} The style value, or an object containing the style properties.\n */\nexport function getStyle(style) {\n return _getStyle(this, style);\n};\n\n/**\n * Hide each node from display.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hide() {\n _hide(this);\n\n return this;\n};\n\n/**\n * Remove classes from each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeClass(...classes) {\n _removeClass(this, ...classes);\n\n return this;\n};\n\n/**\n * Set style properties for each node.\n * @param {string|object} style The style name, or an object containing styles.\n * @param {string} [value] The style value.\n * @param {object} [options] The options for setting the style.\n * @param {Boolean} [options.important] Whether the style should be !important.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setStyle(style, value, { important = false } = {}) {\n _setStyle(this, style, value, { important });\n\n return this;\n};\n\n/**\n * Display each hidden node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function show() {\n _show(this);\n\n return this;\n};\n\n/**\n * Toggle the visibility of each node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggle() {\n _toggle(this);\n\n return this;\n};\n\n/**\n * Toggle classes for each node.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function toggleClass(...classes) {\n _toggleClass(this, ...classes);\n\n return this;\n};\n","import { addEvent as _addEvent, addEventDelegate as _addEventDelegate, addEventDelegateOnce as _addEventDelegateOnce, addEventOnce as _addEventOnce, cloneEvents as _cloneEvents, removeEvent as _removeEvent, removeEventDelegate as _removeEventDelegate, triggerEvent as _triggerEvent, triggerOne as _triggerOne } from './../../events/event-handlers.js';\n\n/**\n * QuerySet Event Handlers\n */\n\n/**\n * Add an event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEvent(events, callback, { capture = false, passive = false } = {}) {\n _addEvent(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegate(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegate(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing delegated event to each node.\n * @param {string} events The event names.\n * @param {string} delegate The delegate selector.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventDelegateOnce(events, delegate, callback, { capture = false, passive = false } = {}) {\n _addEventDelegateOnce(this, events, delegate, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Add a self-destructing event to each node.\n * @param {string} events The event names.\n * @param {DOM~eventCallback} callback The callback to execute.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @param {Boolean} [options.passive] Whether to use a passive event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function addEventOnce(events, callback, { capture = false, passive = false } = {}) {\n _addEventOnce(this, events, callback, { capture, passive });\n\n return this;\n};\n\n/**\n * Clone all events from each node to other nodes.\n * @param {string|array|HTMLElement|ShadowRoot|Document|Window|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneEvents(otherSelector) {\n _cloneEvents(this, otherSelector);\n\n return this;\n};\n\n/**\n * Remove events from each node.\n * @param {string} [events] The event names.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEvent(events, callback, { capture = null } = {}) {\n _removeEvent(this, events, callback, { capture });\n\n return this;\n};\n\n/**\n * Remove delegated events from each node.\n * @param {string} [events] The event names.\n * @param {string} [delegate] The delegate selector.\n * @param {DOM~eventCallback} [callback] The callback to remove.\n * @param {object} [options] The options for the event.\n * @param {Boolean} [options.capture] Whether to use a capture event.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeEventDelegate(events, delegate, callback, { capture = null } = {}) {\n _removeEventDelegate(this, events, delegate, callback, { capture });\n\n return this;\n};\n\n/**\n * Trigger events on each node.\n * @param {string} events The event names.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {QuerySet} The QuerySet object.\n */\nexport function triggerEvent(events, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n _triggerEvent(this, events, { data, detail, bubbles, cancelable });\n\n return this;\n};\n\n/**\n * Trigger an event for the first node.\n * @param {string} event The event name.\n * @param {object} [options] The options to use for the Event.\n * @param {object} [options.data] Additional data to attach to the event.\n * @param {*} [options.detail] Additional details to attach to the event.\n * @param {Boolean} [options.bubbles=true] Whether the event will bubble.\n * @param {Boolean} [options.cancelable=true] Whether the event is cancelable.\n * @return {Boolean} FALSE if the event was cancelled, otherwise TRUE.\n */\nexport function triggerOne(event, { data = null, detail = null, bubbles = true, cancelable = true } = {}) {\n return _triggerOne(this, event, { data, detail, bubbles, cancelable });\n};\n","import { after as _after, append as _append, appendTo as _appendTo, before as _before, insertAfter as _insertAfter, insertBefore as _insertBefore, prepend as _prepend, prependTo as _prependTo } from './../../manipulation/move.js';\n\n/**\n * QuerySet Move\n */\n\n/**\n * Insert each other node after the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function after(otherSelector) {\n _after(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function append(otherSelector) {\n _append(this, otherSelector);\n\n return this;\n};\n\n/**\n * Append each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function appendTo(otherSelector) {\n _appendTo(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each other node before the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function before(otherSelector) {\n _before(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node after the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertAfter(otherSelector) {\n _insertAfter(this, otherSelector);\n\n return this;\n};\n\n/**\n * Insert each node before the first other node.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function insertBefore(otherSelector) {\n _insertBefore(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each other node to the first node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prepend(otherSelector) {\n _prepend(this, otherSelector);\n\n return this;\n};\n\n/**\n * Prepend each node to the first other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prependTo(otherSelector) {\n _prependTo(this, otherSelector);\n\n return this;\n};\n","import { afterSelection as _afterSelection, beforeSelection as _beforeSelection, select as _select, selectAll as _selectAll, wrapSelection as _wrapSelection } from './../../utility/selection.js';\n\n/**\n * QuerySet Selection\n */\n\n/**\n * Insert each node after the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function afterSelection() {\n _afterSelection(this);\n\n return this;\n};\n\n/**\n * Insert each node before the selection.\n * @return {QuerySet} The QuerySet object.\n */\nexport function beforeSelection() {\n _beforeSelection(this);\n\n return this;\n};\n\n/**\n * Create a selection on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function select() {\n _select(this);\n\n return this;\n};\n\n/**\n * Create a selection containing all of the nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function selectAll() {\n _selectAll(this);\n\n return this;\n};\n\n/**\n * Wrap selected nodes with other nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapSelection() {\n _wrapSelection(this);\n\n return this;\n};\n","import { animate as _animate, stop as _stop } from './../../animation/animate.js';\n\n/**\n * QuerySet Animate\n */\n\n/**\n * Add an animation to the queue for each node.\n * @param {DOM~animationCallback} callback The animation callback.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function animate(callback, { queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _animate(node, callback, options),\n { queueName },\n );\n};\n\n/**\n * Stop all animations and clear the queue of each node.\n * @param {object} [options] The options for stopping the animation.\n * @param {Boolean} [options.finish=true] Whether to complete all current animations.\n * @return {QuerySet} The QuerySet object.\n */\nexport function stop({ finish = true } = {}) {\n this.clearQueue();\n _stop(this, { finish });\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { attachShadow as _attachShadow } from './../../manipulation/create.js';\n\n/**\n * QuerySet Create\n */\n\n/**\n * Attach a shadow DOM tree to the first node.\n * @param {Boolean} [open=true] Whether the elements are accessible from JavaScript outside the root.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function attachShadow({ open = true } = {}) {\n const shadow = _attachShadow(this, { open });\n\n return new QuerySet(shadow ? [shadow] : []);\n}\n","import { blur as _blur, click as _click, focus as _focus } from './../../events/events.js';\n\n/**\n * QuerySet Events\n */\n\n/**\n * Trigger a blur event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function blur() {\n _blur(this);\n\n return this;\n};\n\n/**\n * Trigger a click event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function click() {\n _click(this);\n\n return this;\n};\n\n/**\n * Trigger a focus event on the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function focus() {\n _focus(this);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { center as _center, constrain as _constrain, distTo as _distTo, distToNode as _distToNode, nearestTo as _nearestTo, nearestToNode as _nearestToNode, percentX as _percentX, percentY as _percentY, position as _position, rect as _rect } from './../../attributes/position.js';\n\n/**\n * QuerySet Position\n */\n\n/**\n * Get the X,Y co-ordinates for the center of the first node.\n * @param {object} [options] The options for calculating the co-ordinates.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function center({ offset = false } = {}) {\n return _center(this, { offset });\n};\n\n/**\n * Contrain each node to a container node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} container The container node, or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function constrain(container) {\n _constrain(this, container);\n\n return this;\n};\n\n/**\n * Get the distance of a node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {number} The distance to the node.\n */\nexport function distTo(x, y, { offset = false } = {}) {\n return _distTo(this, x, y, { offset });\n};\n\n/**\n * Get the distance between two nodes.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {number} The distance between the nodes.\n */\nexport function distToNode(otherSelector) {\n return _distToNode(this, otherSelector);\n};\n\n/**\n * Get the nearest node to an X,Y position in the Window.\n * @param {number} x The X co-ordinate.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the distance.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestTo(x, y, { offset = false } = {}) {\n const node = _nearestTo(this, x, y, { offset });\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the nearest node to another node.\n * @param {string|array|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The node to compare, or a query selector string.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function nearestToNode(otherSelector) {\n const node = _nearestToNode(this, otherSelector);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Get the percentage of an X co-ordinate relative to a node's width.\n * @param {number} x The X co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentX(x, { offset = false, clamp = true } = {}) {\n return _percentX(this, x, { offset, clamp });\n};\n\n/**\n * Get the percentage of a Y co-ordinate relative to a node's height.\n * @param {number} y The Y co-ordinate.\n * @param {object} [options] The options for calculating the percentage.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @param {Boolean} [options.clamp=true] Whether to clamp the percent between 0 and 100.\n * @return {number} The percent.\n */\nexport function percentY(y, { offset = false, clamp = true } = {}) {\n return _percentY(this, y, { offset, clamp });\n};\n\n/**\n * Get the position of the first node relative to the Window or Document.\n * @param {object} [options] The options for calculating the position.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {object} An object with the x and y co-ordinates.\n */\nexport function position({ offset = false } = {}) {\n return _position(this, { offset });\n};\n\n/**\n * Get the computed bounding rectangle of the first node.\n * @param {object} [options] The options for calculating the bounding rectangle.\n * @param {Boolean} [options.offset] Whether to offset from the top-left of the Document.\n * @return {DOMRect} The computed bounding rectangle.\n */\nexport function rect({ offset = false } = {}) {\n return _rect(this, { offset });\n};\n","import QuerySet from './../query-set.js';\nimport { child as _child, children as _children, closest as _closest, commonAncestor as _commonAncestor, contents as _contents, fragment as _fragment, next as _next, nextAll as _nextAll, offsetParent as _offsetParent, parent as _parent, parents as _parents, prev as _prev, prevAll as _prevAll, shadow as _shadow, siblings as _siblings } from './../../traversal/traversal.js';\n\n/**\n * QuerySet Traversal\n */\n\n/**\n * Return the first child of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function child(nodeFilter) {\n return new QuerySet(_child(this, nodeFilter));\n};\n\n/**\n * Return all children of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function children(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_children(this, nodeFilter, { elementsOnly }));\n};\n\n/**\n * Return the closest ancestor to each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function closest(nodeFilter, limitFilter) {\n return new QuerySet(_closest(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the common ancestor of all nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function commonAncestor() {\n const node = _commonAncestor(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all children of each node (including text and comment nodes).\n * @return {QuerySet} The QuerySet object.\n */\nexport function contents() {\n return new QuerySet(_contents(this));\n};\n\n/**\n * Return the DocumentFragment of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fragment() {\n const node = _fragment(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the next sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function next(nodeFilter) {\n return new QuerySet(_next(this, nodeFilter));\n};\n\n/**\n * Return all next siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function nextAll(nodeFilter, limitFilter) {\n return new QuerySet(_nextAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the offset parent (relatively positioned) of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function offsetParent() {\n const node = _offsetParent(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return the parent of each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parent(nodeFilter) {\n return new QuerySet(_parent(this, nodeFilter));\n};\n\n/**\n * Return all parents of each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function parents(nodeFilter, limitFilter) {\n return new QuerySet(_parents(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the previous sibling for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prev(nodeFilter) {\n return new QuerySet(_prev(this, nodeFilter));\n};\n\n/**\n * Return all previous siblings for each node (optionally matching a filter, and before a limit).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [limitFilter] The limit node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function prevAll(nodeFilter, limitFilter) {\n return new QuerySet(_prevAll(this, nodeFilter, limitFilter));\n};\n\n/**\n * Return the ShadowRoot of the first node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function shadow() {\n const node = _shadow(this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all siblings for each node (optionally matching a filter).\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @param {Boolean} [elementsOnly=true] Whether to only return element nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function siblings(nodeFilter, { elementsOnly = true } = {}) {\n return new QuerySet(_siblings(this, nodeFilter, { elementsOnly }));\n};\n","import { clearQueue as _clearQueue, queue as _queue } from './../../queue/queue.js';\n\n/**\n * QuerySet Queue\n */\n\n/**\n * Clear the queue of each node.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to clear.\n * @return {QuerySet} The QuerySet object.\n */\nexport function clearQueue({ queueName = 'default' } = {}) {\n _clearQueue(this, { queueName });\n\n return this;\n};\n\n/**\n * Delay execution of subsequent items in the queue for each node.\n * @param {number} duration The number of milliseconds to delay execution by.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function delay(duration, { queueName = 'default' } = {}) {\n return this.queue((_) =>\n new Promise((resolve) =>\n setTimeout(resolve, duration),\n ),\n { queueName },\n );\n};\n\n/**\n * Queue a callback on each node.\n * @param {DOM~queueCallback} callback The callback to queue.\n * @param {object} [options] The options for clearing the queue.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @return {QuerySet} The QuerySet object.\n */\nexport function queue(callback, { queueName = 'default' } = {}) {\n _queue(this, callback, { queueName });\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { clone as _clone, detach as _detach, empty as _empty, remove as _remove, replaceAll as _replaceAll, replaceWith as _replaceWith } from './../../manipulation/manipulation.js';\n\n/**\n * QuerySet Manipulation\n */\n\n/**\n * Clone each node.\n * @param {object} options The options for cloning the node.\n * @param {Boolean} [options.deep=true] Whether to also clone all descendent nodes.\n * @param {Boolean} [options.events] Whether to also clone events.\n * @param {Boolean} [options.data] Whether to also clone custom data.\n * @param {Boolean} [options.animations] Whether to also clone animations.\n * @return {QuerySet} A new QuerySet object.\n */\nexport function clone(options) {\n const clones = _clone(this, options);\n\n return new QuerySet(clones);\n};\n\n/**\n * Detach each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function detach() {\n _detach(this);\n\n return this;\n};\n\n/**\n * Remove all children of each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function empty() {\n _empty(this);\n\n return this;\n};\n\n/**\n * Remove each node from the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function remove() {\n _remove(this);\n\n return this;\n};\n\n/**\n * Replace each other node with nodes.\n * @param {string|array|Node|HTMLElement|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceAll(otherSelector) {\n _replaceAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Replace each node with other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The input node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function replaceWith(otherSelector) {\n _replaceWith(this, otherSelector);\n\n return this;\n};\n","import { cloneData as _cloneData, getData as _getData, removeData as _removeData, setData as _setData } from './../../attributes/data.js';\n\n/**\n * QuerySet Data\n */\n\n/**\n * Clone custom data from each node to each other node.\n * @param {string|array|HTMLElement|DocumentFragment|ShadowRoot|Document|Window|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function cloneData(otherSelector) {\n _cloneData(this, otherSelector);\n\n return this;\n};\n\n/**\n * Get custom data for the first node.\n * @param {string} [key] The data key.\n * @return {*} The data value.\n */\nexport function getData(key) {\n return _getData(this, key);\n};\n\n/**\n * Remove custom data from each node.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeData(key) {\n _removeData(this, key);\n\n return this;\n};\n\n/**\n * Set custom data for each node.\n * @param {string|object} key The data key, or an object containing data.\n * @param {*} [value] The data value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setData(key, value) {\n _setData(this, key, value);\n\n return this;\n};\n","import QuerySet from './../query-set.js';\nimport { connected as _connected, equal as _equal, filter as _filter, filterOne as _filterOne, fixed as _fixed, hidden as _hidden, not as _not, notOne as _notOne, same as _same, visible as _visible, withAnimation as _withAnimation, withAttribute as _withAttribute, withChildren as _withChildren, withClass as _withClass, withCSSAnimation as _withCSSAnimation, withCSSTransition as _withCSSTransition, withData as _withData, withDescendent as _withDescendent, withProperty as _withProperty } from './../../traversal/filter.js';\n\n/**\n * QuerySet Filter\n */\n\n/**\n * Return all nodes connected to the DOM.\n * @return {QuerySet} The QuerySet object.\n */\nexport function connected() {\n return new QuerySet(_connected(this));\n};\n\n/**\n * Return all nodes considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function equal(otherSelector) {\n return new QuerySet(_equal(this, otherSelector));\n};\n\n/**\n * Return all nodes matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filter(nodeFilter) {\n return new QuerySet(_filter(this, nodeFilter));\n};\n\n/**\n * Return the first node matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function filterOne(nodeFilter) {\n const node = _filterOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all \"fixed\" nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fixed() {\n return new QuerySet(_fixed(this));\n};\n\n/**\n * Return all hidden nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function hidden() {\n return new QuerySet(_hidden(this));\n};\n\n/**\n * Return all nodes not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function not(nodeFilter) {\n return new QuerySet(_not(this, nodeFilter));\n};\n\n/**\n * Return the first node not matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function notOne(nodeFilter) {\n const node = _notOne(this, nodeFilter);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return all nodes considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function same(otherSelector) {\n return new QuerySet(_same(this, otherSelector));\n};\n\n/**\n * Return all visible nodes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function visible() {\n return new QuerySet(_visible(this));\n};\n\n/**\n * Return all nodes with an animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withAnimation() {\n return new QuerySet(_withAnimation(this));\n};\n\n/**\n * Return all nodes with a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withAttribute(attribute) {\n return new QuerySet(_withAttribute(this, attribute));\n};\n\n/**\n * Return all nodes with child elements.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withChildren() {\n return new QuerySet(_withChildren(this));\n};\n\n/**\n * Return all nodes with any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withClass(classes) {\n return new QuerySet(_withClass(this, classes));\n};\n\n/**\n * Return all nodes with a CSS animation.\n * @return {QuerySet} The QuerySet object.\n*/\nexport function withCSSAnimation() {\n return new QuerySet(_withCSSAnimation(this));\n};\n\n/**\n * Return all nodes with a CSS transition.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withCSSTransition() {\n return new QuerySet(_withCSSTransition(this));\n};\n\n/**\n * Return all nodes with custom data.\n * @param {string} [key] The data key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withData(key) {\n return new QuerySet(_withData(this, key));\n};\n\n/**\n * Return all elements with a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withDescendent(nodeFilter) {\n return new QuerySet(_withDescendent(this, nodeFilter));\n};\n\n/**\n * Return all nodes with a specified property.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function withProperty(property) {\n return new QuerySet(_withProperty(this, property));\n};\n","import { dropIn as _dropIn, dropOut as _dropOut, fadeIn as _fadeIn, fadeOut as _fadeOut, rotateIn as _rotateIn, rotateOut as _rotateOut, slideIn as _slideIn, slideOut as _slideOut, squeezeIn as _squeezeIn, squeezeOut as _squeezeOut } from './../../animation/animations.js';\n\n/**\n * QuerySet Animations\n */\n\n/**\n * Add a drop in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a drop out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=top] The direction to drop the node to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function dropOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _dropOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a fade out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function fadeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _fadeOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a rotate out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {number} [options.x=0] The amount to rotate on the X-axis.\n * @param {number} [options.y=1] The amount to rotate on the Y-axis.\n * @param {number} [options.z=0] The amount to rotate on the Z-axis.\n * @param {Boolean} [options.inverse] Whether to invert the rotation.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function rotateOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _rotateOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a slide out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to slide to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function slideOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _slideOut(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze in animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze from.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeIn({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeIn(node, options),\n { queueName },\n );\n};\n\n/**\n * Add a squeeze out animation to the queue for each node.\n * @param {object} [options] The options to use for animating.\n * @param {string} [options.queueName=default] The name of the queue to use.\n * @param {string|function} [options.direction=bottom] The direction to squeeze to.\n * @param {number} [options.duration=1000] The duration of the animation.\n * @param {string} [options.type=ease-in-out] The type of animation.\n * @param {Boolean} [options.infinite] Whether the animation should run forever.\n * @param {Boolean} [options.useGpu=true] Whether the animation should use GPU acceleration.\n * @param {Boolean} [options.debug] Whether to set debugging info on the node.\n * @return {QuerySet} The QuerySet object.\n */\nexport function squeezeOut({ queueName = 'default', ...options } = {}) {\n return this.queue((node) =>\n _squeezeOut(node, options),\n { queueName },\n );\n};\n","import QuerySet from './../query-set.js';\nimport { find as _find, findByClass as _findByClass, findById as _findById, findByTag as _findByTag, findOne as _findOne, findOneByClass as _findOneByClass, findOneById as _findOneById, findOneByTag as _findOneByTag } from './../../traversal/find.js';\n\n/**\n * QuerySet Find\n */\n\n/**\n * Return all descendent nodes matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function find(selector) {\n return new QuerySet(_find(selector, this));\n};\n\n/**\n * Return all descendent nodes with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByClass(className) {\n return new QuerySet(_findByClass(className, this));\n};\n\n/**\n * Return all descendent nodes with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findById(id) {\n return new QuerySet(_findById(id, this));\n};\n\n/**\n * Return all descendent nodes with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findByTag(tagName) {\n return new QuerySet(_findByTag(tagName, this));\n};\n\n/**\n * Return a single descendent node matching a selector.\n * @param {string} selector The query selector.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOne(selector) {\n const node = _findOne(selector, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific class.\n * @param {string} className The class name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByClass(className) {\n const node = _findOneByClass(className, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific ID.\n * @param {string} id The id.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneById(id) {\n const node = _findOneById(id, this);\n\n return new QuerySet(node ? [node] : []);\n};\n\n/**\n * Return a single descendent node with a specific tag.\n * @param {string} tagName The tag name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function findOneByTag(tagName) {\n const node = _findOneByTag(tagName, this);\n\n return new QuerySet(node ? [node] : []);\n};\n","import { getAttribute as _getAttribute, getDataset as _getDataset, getHTML as _getHTML, getProperty as _getProperty, getText as _getText, getValue as _getValue, removeAttribute as _removeAttribute, removeDataset as _removeDataset, removeProperty as _removeProperty, setAttribute as _setAttribute, setDataset as _setDataset, setHTML as _setHTML, setProperty as _setProperty, setText as _setText, setValue as _setValue } from './../../attributes/attributes.js';\n\n/**\n * QuerySet Attributes\n */\n\n/**\n * Get attribute value(s) for the first node.\n * @param {string} [attribute] The attribute name.\n * @return {string} The attribute value.\n */\nexport function getAttribute(attribute) {\n return _getAttribute(this, attribute);\n};\n\n/**\n * Get dataset value(s) for the first node.\n * @param {string} [key] The dataset key.\n * @return {*} The dataset value, or an object containing the dataset.\n */\nexport function getDataset(key) {\n return _getDataset(this, key);\n};\n\n/**\n * Get the HTML contents of the first node.\n * @return {string} The HTML contents.\n */\nexport function getHTML() {\n return _getHTML(this);\n};\n\n/**\n * Get a property value for the first node.\n * @param {string} property The property name.\n * @return {string} The property value.\n */\nexport function getProperty(property) {\n return _getProperty(this, property);\n};\n\n/**\n * Get the text contents of the first node.\n * @return {string} The text contents.\n */\nexport function getText() {\n return _getText(this);\n};\n\n/**\n * Get the value property of the first node.\n * @return {string} The value.\n */\nexport function getValue() {\n return _getValue(this);\n};\n\n/**\n * Remove an attribute from each node.\n * @param {string} attribute The attribute name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeAttribute(attribute) {\n _removeAttribute(this, attribute);\n\n return this;\n};\n\n/**\n * Remove a dataset value from each node.\n * @param {string} key The dataset key.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeDataset(key) {\n _removeDataset(this, key);\n\n return this;\n};\n\n/**\n * Remove a property from each node.\n * @param {string} property The property name.\n * @return {QuerySet} The QuerySet object.\n */\nexport function removeProperty(property) {\n _removeProperty(this, property);\n\n return this;\n};\n\n/**\n * Set an attribute value for each node.\n * @param {string|object} attribute The attribute name, or an object containing attributes.\n * @param {string} [value] The attribute value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setAttribute(attribute, value) {\n _setAttribute(this, attribute, value);\n\n return this;\n};\n\n/**\n * Set a dataset value for each node.\n * @param {string|object} key The dataset key, or an object containing dataset values.\n * @param {*} [value] The dataset value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setDataset(key, value) {\n _setDataset(this, key, value);\n\n return this;\n};\n\n/**\n * Set the HTML contents of each node.\n * @param {string} html The HTML contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setHTML(html) {\n _setHTML(this, html);\n\n return this;\n};\n\n/**\n * Set a property value for each node.\n * @param {string|object} property The property name, or an object containing properties.\n * @param {string} [value] The property value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setProperty(property, value) {\n _setProperty(this, property, value);\n\n return this;\n};\n\n/**\n * Set the text contents of each node.\n * @param {string} text The text contents.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setText(text) {\n _setText(this, text);\n\n return this;\n};\n\n/**\n * Set the value property of each node.\n * @param {string} value The value.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setValue(value) {\n _setValue(this, value);\n\n return this;\n};\n","import { getScrollX as _getScrollX, getScrollY as _getScrollY, setScroll as _setScroll, setScrollX as _setScrollX, setScrollY as _setScrollY } from './../../attributes/scroll.js';\n\n/**\n * QuerySet Scroll\n */\n\n/**\n * Get the scroll X position of the first node.\n * @return {number} The scroll X position.\n */\nexport function getScrollX() {\n return _getScrollX(this);\n};\n\n/**\n * Get the scroll Y position of the first node.\n * @return {number} The scroll Y position.\n */\nexport function getScrollY() {\n return _getScrollY(this);\n};\n\n/**\n * Scroll each node to an X,Y position.\n * @param {number} x The scroll X position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScroll(x, y) {\n _setScroll(this, x, y);\n\n return this;\n};\n\n/**\n * Scroll each node to an X position.\n * @param {number} x The scroll X position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollX(x) {\n _setScrollX(this, x);\n\n return this;\n};\n\n/**\n * Scroll each node to a Y position.\n * @param {number} y The scroll Y position.\n * @return {QuerySet} The QuerySet object.\n */\nexport function setScrollY(y) {\n _setScrollY(this, y);\n\n return this;\n};\n","import { hasAnimation as _hasAnimation, hasAttribute as _hasAttribute, hasChildren as _hasChildren, hasClass as _hasClass, hasCSSAnimation as _hasCSSAnimation, hasCSSTransition as _hasCSSTransition, hasData as _hasData, hasDataset as _hasDataset, hasDescendent as _hasDescendent, hasFragment as _hasFragment, hasProperty as _hasProperty, hasShadow as _hasShadow, is as _is, isConnected as _isConnected, isEqual as _isEqual, isFixed as _isFixed, isHidden as _isHidden, isSame as _isSame, isVisible as _isVisible } from './../../utility/tests.js';\n\n/**\n * QuerySet Tests\n */\n\n/**\n * Returns true if any of the nodes has an animation.\n * @return {Boolean} TRUE if any of the nodes has an animation, otherwise FALSE.\n */\nexport function hasAnimation() {\n return _hasAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified attribute.\n * @param {string} attribute The attribute name.\n * @return {Boolean} TRUE if any of the nodes has the attribute, otherwise FALSE.\n */\nexport function hasAttribute(attribute) {\n return _hasAttribute(this, attribute);\n};\n\n/**\n * Returns true if any of the nodes has child nodes.\n * @return {Boolean} TRUE if the any of the nodes has child nodes, otherwise FALSE.\n */\nexport function hasChildren() {\n return _hasChildren(this);\n};\n\n/**\n * Returns true if any of the nodes has any of the specified classes.\n * @param {...string|string[]} classes The classes.\n * @return {Boolean} TRUE if any of the nodes has any of the classes, otherwise FALSE.\n */\nexport function hasClass(...classes) {\n return _hasClass(this, ...classes);\n};\n\n/**\n * Returns true if any of the nodes has a CSS animation.\n * @return {Boolean} TRUE if any of the nodes has a CSS animation, otherwise FALSE.\n */\nexport function hasCSSAnimation() {\n return _hasCSSAnimation(this);\n};\n\n/**\n * Returns true if any of the nodes has a CSS transition.\n * @return {Boolean} TRUE if any of the nodes has a CSS transition, otherwise FALSE.\n */\nexport function hasCSSTransition() {\n return _hasCSSTransition(this);\n};\n\n/**\n * Returns true if any of the nodes has custom data.\n * @param {string} [key] The data key.\n * @return {Boolean} TRUE if any of the nodes has custom data, otherwise FALSE.\n */\nexport function hasData(key) {\n return _hasData(this, key);\n};\n\n/**\n * Returns true if any of the nodes has the specified dataset value.\n * @param {string} [key] The dataset key.\n * @return {Boolean} TRUE if any of the nodes has the dataset value, otherwise FALSE.\n */\nexport function hasDataset(key) {\n return _hasDataset(this, key);\n};\n\n/**\n * Returns true if any of the nodes contains a descendent matching a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes contains a descendent matching the filter, otherwise FALSE.\n */\nexport function hasDescendent(nodeFilter) {\n return _hasDescendent(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes has a DocumentFragment.\n * @return {Boolean} TRUE if any of the nodes has a DocumentFragment, otherwise FALSE.\n */\nexport function hasFragment() {\n return _hasFragment(this);\n};\n\n/**\n * Returns true if any of the nodes has a specified property.\n * @param {string} property The property name.\n * @return {Boolean} TRUE if any of the nodes has the property, otherwise FALSE.\n */\nexport function hasProperty(property) {\n return _hasProperty(this, property);\n};\n\n/**\n * Returns true if any of the nodes has a ShadowRoot.\n * @return {Boolean} TRUE if any of the nodes has a ShadowRoot, otherwise FALSE.\n */\nexport function hasShadow() {\n return _hasShadow(this);\n};\n\n/**\n * Returns true if any of the nodes matches a filter.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {Boolean} TRUE if any of the nodes matches the filter, otherwise FALSE.\n */\nexport function is(nodeFilter) {\n return _is(this, nodeFilter);\n};\n\n/**\n * Returns true if any of the nodes is connected to the DOM.\n * @return {Boolean} TRUE if any of the nodes is connected to the DOM, otherwise FALSE.\n */\nexport function isConnected() {\n return _isConnected(this);\n};\n\n/**\n * Returns true if any of the nodes is considered equal to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered equal to any of the other nodes, otherwise FALSE.\n */\nexport function isEqual(otherSelector) {\n return _isEqual(this, otherSelector);\n};\n\n/**\n * Returns true if any of the elements or a parent of any of the elements is \"fixed\".\n * @return {Boolean} TRUE if any of the nodes is \"fixed\", otherwise FALSE.\n */\nexport function isFixed() {\n return _isFixed(this);\n};\n\n/**\n * Returns true if any of the nodes is hidden.\n * @return {Boolean} TRUE if any of the nodes is hidden, otherwise FALSE.\n */\nexport function isHidden() {\n return _isHidden(this);\n};\n\n/**\n * Returns true if any of the nodes is considered identical to any of the other nodes.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector string.\n * @return {Boolean} TRUE if any of the nodes is considered identical to any of the other nodes, otherwise FALSE.\n */\nexport function isSame(otherSelector) {\n return _isSame(this, otherSelector);\n};\n\n/**\n * Returns true if any of the nodes is visible.\n * @return {Boolean} TRUE if any of the nodes is visible, otherwise FALSE.\n */\nexport function isVisible() {\n return _isVisible(this);\n};\n","\nimport { PADDING_BOX } from './../../vars.js';\nimport { height as _height, width as _width } from './../../attributes/size.js';\n\n/**\n * QuerySet Size\n */\n\n/**\n * Get the computed height of the first node.\n * @param {object} [options] The options for calculating the height.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer height.\n * @return {number} The height.\n */\nexport function height({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _height(this, { boxSize, outer });\n};\n\n/**\n * Get the computed width of the first node.\n * @param {object} [options] The options for calculating the width.\n * @param {number} [options.boxSize=PADDING_BOX] The box sizing to calculate.\n * @param {Boolean} [options.outer] Whether to use the window outer width.\n * @return {number} The width.\n */\nexport function width({ boxSize = PADDING_BOX, outer = false } = {}) {\n return _width(this, { boxSize, outer });\n};\n","import { unwrap as _unwrap, wrap as _wrap, wrapAll as _wrapAll, wrapInner as _wrapInner } from './../../manipulation/wrap.js';\n\n/**\n * QuerySet Wrap\n */\n\n/**\n * Unwrap each node.\n * @param {string|array|Node|HTMLElement|DocumentFragment|ShadowRoot|NodeList|HTMLCollection|QuerySet|DOM~filterCallback} [nodeFilter] The filter node(s), a query selector string or custom filter function.\n * @return {QuerySet} The QuerySet object.\n */\nexport function unwrap(nodeFilter) {\n _unwrap(this, nodeFilter);\n\n return this;\n};\n\n/**\n * Wrap each nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrap(otherSelector) {\n _wrap(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap all nodes with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapAll(otherSelector) {\n _wrapAll(this, otherSelector);\n\n return this;\n};\n\n/**\n * Wrap the contents of each node with other nodes.\n * @param {string|array|HTMLElement|DocumentFragment|NodeList|HTMLCollection|QuerySet} otherSelector The other node(s), or a query selector or HTML string.\n * @return {QuerySet} The QuerySet object.\n */\nexport function wrapInner(otherSelector) {\n _wrapInner(this, otherSelector);\n\n return this;\n};\n","import * as _ from '@fr0st/core';\nimport { getAjaxDefaults, getAnimationDefaults, getContext, getWindow, setAjaxDefaults, setAnimationDefaults, setContext, setWindow, useTimeout } from './config.js';\nimport { noConflict } from './globals.js';\nimport { debounce } from './helpers.js';\nimport { BORDER_BOX, CONTENT_BOX, MARGIN_BOX, PADDING_BOX, SCROLL_BOX } from './vars.js';\nimport { ajax, _delete, get, patch, post, put } from './ajax/ajax.js';\nimport { parseFormData, parseParams } from './ajax/helpers.js';\nimport { animate, stop } from './animation/animate.js';\nimport Animation from './animation/animation.js';\nimport AnimationSet from './animation/animation-set.js';\nimport { dropIn, dropOut, fadeIn, fadeOut, rotateIn, rotateOut, slideIn, slideOut, squeezeIn, squeezeOut } from './animation/animations.js';\nimport { getAttribute, getDataset, getHTML, getProperty, getText, getValue, removeAttribute, removeDataset, removeProperty, setAttribute, setDataset, setHTML, setProperty, setText, setValue } from './attributes/attributes.js';\nimport { cloneData, getData, removeData, setData } from './attributes/data.js';\nimport { center, constrain, distTo, distToNode, nearestTo, nearestToNode, percentX, percentY, position, rect } from './attributes/position.js';\nimport { getScrollX, getScrollY, setScroll, setScrollX, setScrollY } from './attributes/scroll.js';\nimport { height, width } from './attributes/size.js';\nimport { addClass, css, getStyle, hide, removeClass, setStyle, show, toggle, toggleClass } from './attributes/styles.js';\nimport { getCookie, removeCookie, setCookie } from './cookie/cookie.js';\nimport { mouseDragFactory } from './events/event-factory.js';\nimport { addEvent, addEventDelegate, addEventDelegateOnce, addEventOnce, cloneEvents, removeEvent, removeEventDelegate, triggerEvent, triggerOne } from './events/event-handlers.js';\nimport { blur, click, focus, ready } from './events/events.js';\nimport { attachShadow, create, createComment, createFragment, createRange, createText } from './manipulation/create.js';\nimport { clone, detach, empty, remove, replaceAll, replaceWith } from './manipulation/manipulation.js';\nimport { after, append, appendTo, before, insertAfter, insertBefore, prepend, prependTo } from './manipulation/move.js';\nimport { unwrap, wrap, wrapAll, wrapInner } from './manipulation/wrap.js';\nimport { parseDocument, parseHTML } from './parser/parser.js';\nimport { query, queryOne } from './query/query.js';\nimport QuerySet from './query/query-set.js';\nimport { clearQueue, queue } from './queue/queue.js';\nimport { loadScript, loadScripts } from './scripts/scripts.js';\nimport { loadStyle, loadStyles } from './styles/styles.js';\nimport { connected, equal, filter, filterOne, fixed, hidden, not, notOne, same, visible, withAnimation, withAttribute, withChildren, withClass, withCSSAnimation, withCSSTransition, withData, withDescendent, withProperty } from './traversal/filter.js';\nimport { find, findByClass, findById, findByTag, findOne, findOneByClass, findOneById, findOneByTag } from './traversal/find.js';\nimport { child, children, closest, commonAncestor, contents, fragment, next, nextAll, offsetParent, parent, parents, prev, prevAll, shadow, siblings } from './traversal/traversal.js';\nimport { sanitize } from './utility/sanitize.js';\nimport { afterSelection, beforeSelection, extractSelection, getSelection, select, selectAll, wrapSelection } from './utility/selection.js';\nimport { hasAnimation, hasAttribute, hasChildren, hasClass, hasCSSAnimation, hasCSSTransition, hasData, hasDataset, hasDescendent, hasFragment, hasProperty, hasShadow, is, isConnected, isEqual, isFixed, isHidden, isSame, isVisible } from './utility/tests.js';\nimport { exec, index, indexOf, normalize, serialize, serializeArray, sort, tagName } from './utility/utility.js';\n\nObject.assign(query, {\n BORDER_BOX,\n CONTENT_BOX,\n MARGIN_BOX,\n PADDING_BOX,\n SCROLL_BOX,\n Animation,\n AnimationSet,\n QuerySet,\n addClass,\n addEvent,\n addEventDelegate,\n addEventDelegateOnce,\n addEventOnce,\n after,\n afterSelection,\n ajax,\n animate,\n append,\n appendTo,\n attachShadow,\n before,\n beforeSelection,\n blur,\n center,\n child,\n children,\n clearQueue,\n click,\n clone,\n cloneData,\n cloneEvents,\n closest,\n commonAncestor,\n connected,\n constrain,\n contents,\n create,\n createComment,\n createFragment,\n createRange,\n createText,\n css,\n debounce,\n delete: _delete,\n detach,\n distTo,\n distToNode,\n dropIn,\n dropOut,\n empty,\n equal,\n exec,\n extractSelection,\n fadeIn,\n fadeOut,\n filter,\n filterOne,\n find,\n findByClass,\n findById,\n findByTag,\n findOne,\n findOneByClass,\n findOneById,\n findOneByTag,\n fixed,\n focus,\n fragment,\n get,\n getAjaxDefaults,\n getAnimationDefaults,\n getAttribute,\n getContext,\n getCookie,\n getData,\n getDataset,\n getHTML,\n getProperty,\n getScrollX,\n getScrollY,\n getSelection,\n getStyle,\n getText,\n getValue,\n getWindow,\n hasAnimation,\n hasAttribute,\n hasCSSAnimation,\n hasCSSTransition,\n hasChildren,\n hasClass,\n hasData,\n hasDataset,\n hasDescendent,\n hasFragment,\n hasProperty,\n hasShadow,\n height,\n hidden,\n hide,\n index,\n indexOf,\n insertAfter,\n insertBefore,\n is,\n isConnected,\n isEqual,\n isFixed,\n isHidden,\n isSame,\n isVisible,\n loadScript,\n loadScripts,\n loadStyle,\n loadStyles,\n mouseDragFactory,\n nearestTo,\n nearestToNode,\n next,\n nextAll,\n noConflict,\n normalize,\n not,\n notOne,\n offsetParent,\n parent,\n parents,\n parseDocument,\n parseFormData,\n parseHTML,\n parseParams,\n patch,\n percentX,\n percentY,\n position,\n post,\n prepend,\n prependTo,\n prev,\n prevAll,\n put,\n query,\n queryOne,\n queue,\n ready,\n rect,\n remove,\n removeAttribute,\n removeClass,\n removeCookie,\n removeData,\n removeDataset,\n removeEvent,\n removeEventDelegate,\n removeProperty,\n replaceAll,\n replaceWith,\n rotateIn,\n rotateOut,\n same,\n sanitize,\n select,\n selectAll,\n serialize,\n serializeArray,\n setAjaxDefaults,\n setAnimationDefaults,\n setAttribute,\n setContext,\n setCookie,\n setData,\n setDataset,\n setHTML,\n setProperty,\n setScroll,\n setScrollX,\n setScrollY,\n setStyle,\n setText,\n setValue,\n setWindow,\n shadow,\n show,\n siblings,\n slideIn,\n slideOut,\n sort,\n squeezeIn,\n squeezeOut,\n stop,\n tagName,\n toggle,\n toggleClass,\n triggerEvent,\n triggerOne,\n unwrap,\n useTimeout,\n visible,\n width,\n withAnimation,\n withAttribute,\n withCSSAnimation,\n withCSSTransition,\n withChildren,\n withClass,\n withData,\n withDescendent,\n withProperty,\n wrap,\n wrapAll,\n wrapInner,\n wrapSelection,\n});\n\nfor (const [key, value] of Object.entries(_)) {\n query[`_${key}`] = value;\n}\n\nexport default query;\n","import AjaxRequest from './ajax-request.js';\n\n/**\n * DOM Ajax\n */\n\n/**\n * Perform an XHR DELETE request.\n * @param {string} url The URL of the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=DELETE] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function _delete(url, options) {\n return new AjaxRequest({\n url,\n method: 'DELETE',\n ...options,\n });\n};\n\n/**\n * New AjaxRequest constructor.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.url=window.location] The URL of the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string|array|object|FormData} [options.data=null] The data to send with the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function ajax(options) {\n return new AjaxRequest(options);\n};\n\n/**\n * Perform an XHR GET request.\n * @param {string} url The URL of the request.\n * @param {string|array|object} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=GET] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function get(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n ...options,\n });\n};\n\n/**\n * Perform an XHR PATCH request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PATCH] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function patch(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PATCH',\n ...options,\n });\n};\n\n/**\n * Perform an XHR POST request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=POST] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function post(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'POST',\n ...options,\n });\n};\n\n/**\n * Perform an XHR PUT request.\n * @param {string} url The URL of the request.\n * @param {string|array|object|FormData} data The data to send with the request.\n * @param {object} [options] The options to use for the request.\n * @param {string} [options.method=PUT] The HTTP method of the request.\n * @param {Boolean|string} [options.contentType=application/x-www-form-urlencoded] The content type of the request.\n * @param {Boolean|string} [options.responseType] The content type of the response.\n * @param {string} [options.mimeType] The MIME type to use.\n * @param {string} [options.username] The username to authenticate with.\n * @param {string} [options.password] The password to authenticate with.\n * @param {number} [options.timeout] The number of milliseconds before the request will be terminated.\n * @param {Boolean} [options.isLocal] Whether to treat the request as a local request.\n * @param {Boolean} [options.cache=true] Whether to cache the request.\n * @param {Boolean} [options.processData=true] Whether to process the data based on the content type.\n * @param {Boolean} [options.rejectOnCancel=true] Whether to reject the promise if the request is cancelled.\n * @param {object} [options.headers] Additional headers to send with the request.\n * @param {Boolean|function} [options.afterSend=null] A callback to execute after making the request.\n * @param {Boolean|function} [options.beforeSend=null] A callback to execute before making the request.\n * @param {Boolean|function} [options.onProgress=null] A callback to execute on download progress.\n * @param {Boolean|function} [options.onUploadProgress=null] A callback to execute on upload progress.\n * @return {AjaxRequest} A new AjaxRequest that resolves when the request is completed, or rejects on failure.\n */\nexport function put(url, data, options) {\n return new AjaxRequest({\n url,\n data,\n method: 'PUT',\n ...options,\n });\n};\n","import { getContext } from './../config.js';\n\n/**\n * DOM Cookie\n */\n\n/**\n * Get a cookie value.\n * @param {string} name The cookie name.\n * @return {*} The cookie value.\n */\nexport function getCookie(name) {\n const cookie = getContext().cookie\n .split(';')\n .find((cookie) =>\n cookie\n .trimStart()\n .substring(0, name.length) === name,\n )\n .trimStart();\n\n if (!cookie) {\n return null;\n }\n\n return decodeURIComponent(\n cookie.substring(name.length + 1),\n );\n};\n\n/**\n * Remove a cookie.\n * @param {string} name The cookie name.\n * @param {object} [options] The options to use for the cookie.\n * @param {string} [options.path] The cookie path.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function removeCookie(name, { path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC`;\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n\n/**\n * Set a cookie value.\n * @param {string} name The cookie name.\n * @param {*} value The cookie value.\n * @param {object} [options] The options to use for the cookie.\n * @param {number} [options.expires] The number of seconds until the cookie will expire.\n * @param {string} [options.path] The path to use for the cookie.\n * @param {Boolean} [options.secure] Whether the cookie is secure.\n */\nexport function setCookie(name, value, { expires = null, path = null, secure = false } = {}) {\n if (!name) {\n return;\n }\n\n let cookie = `${name}=${value}`;\n\n if (expires) {\n const date = new Date;\n date.setTime(\n date.getTime() +\n expires * 1000,\n );\n cookie += `;expires=${date.toUTCString()}`;\n }\n\n if (path) {\n cookie += `;path=${path}`;\n }\n\n if (secure) {\n cookie += ';secure';\n }\n\n getContext().cookie = cookie;\n};\n","import { getWindow, setContext, setWindow } from './config.js';\nimport $ from './fquery.js';\n\nlet _$;\n\n/**\n * Reset the global $ variable.\n */\nexport function noConflict() {\n const window = getWindow();\n\n if (window.$ === $) {\n window.$ = _$;\n }\n};\n\n/**\n * Register the global variables.\n * @param {Window} window The window.\n * @param {Document} [document] The document.\n * @return {object} The fQuery object.\n */\nexport function registerGlobals(window, document) {\n setWindow(window);\n setContext(document || window.document);\n\n _$ = window.$;\n window.$ = $;\n\n return $;\n};\n","import { isWindow } from '@fr0st/core';\nimport { registerGlobals } from './globals.js';\n\nexport default isWindow(globalThis) ? registerGlobals(globalThis) : registerGlobals;\n"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 89de993..5971a3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,12 @@ }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.3", - "eslint": "^8.54.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "mocha": "^10.2.0", - "puppeteer": "^21.5.2", - "rollup": "^4.6.0", - "terser": "^5.24.0" + "puppeteer": "^21.6.1", + "rollup": "^4.9.1", + "terser": "^5.26.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -31,9 +31,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", - "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { "@babel/highlight": "^7.23.4", @@ -233,9 +233,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -256,9 +256,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -396,9 +396,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.8.0.tgz", - "integrity": "sha512-TkRHIV6k2D8OlUe8RtG+5jgOF/H98Myx0M6AOafC8DdNVOFiBSFa5cpRDtpm8LXOa9sVwe0+e6Q3FC56X/DZfg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.0.tgz", + "integrity": "sha512-QwguOLy44YBGC8vuPP2nmpX4MUN2FzWbsnvZJtiCzecU3lHmVZkaC1tq6rToi9a200m8RzlVtDyxCS0UIDrxUg==", "dev": true, "dependencies": { "debug": "4.3.4", @@ -505,9 +505,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.0.tgz", - "integrity": "sha512-keHkkWAe7OtdALGoutLY3utvthkGF+Y17ws9LYT8pxMBYXaCoH/8dXS2uzo6e8+sEhY7y/zi5RFo22Dy2lFpDw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", + "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", "cpu": [ "arm" ], @@ -518,9 +518,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.0.tgz", - "integrity": "sha512-y3Kt+34smKQNWilicPbBz/MXEY7QwDzMFNgwEWeYiOhUt9MTWKjHqe3EVkXwT2fR7izOvHpDWZ0o2IyD9SWX7A==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", + "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", "cpu": [ "arm64" ], @@ -531,9 +531,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.0.tgz", - "integrity": "sha512-oLzzxcUIHltHxOCmaXl+pkIlU+uhSxef5HfntW7RsLh1eHm+vJzjD9Oo4oUKso4YuP4PpbFJNlZjJuOrxo8dPg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", + "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", "cpu": [ "arm64" ], @@ -544,9 +544,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.0.tgz", - "integrity": "sha512-+ANnmjkcOBaV25n0+M0Bere3roeVAnwlKW65qagtuAfIxXF9YxUneRyAn/RDcIdRa7QrjRNJL3jR7T43ObGe8Q==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", + "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", "cpu": [ "x64" ], @@ -557,9 +557,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.0.tgz", - "integrity": "sha512-tBTSIkjSVUyrekddpkAqKOosnj1Fc0ZY0rJL2bIEWPKqlEQk0paORL9pUIlt7lcGJi3LzMIlUGXvtNi1Z6MOCQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", + "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", "cpu": [ "arm" ], @@ -570,9 +570,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.0.tgz", - "integrity": "sha512-Ed8uJI3kM11de9S0j67wAV07JUNhbAqIrDYhQBrQW42jGopgheyk/cdcshgGO4fW5Wjq97COCY/BHogdGvKVNQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", + "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", "cpu": [ "arm64" ], @@ -583,9 +583,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.0.tgz", - "integrity": "sha512-mZoNQ/qK4D7SSY8v6kEsAAyDgznzLLuSFCA3aBHZTmf3HP/dW4tNLTtWh9+LfyO0Z1aUn+ecpT7IQ3WtIg3ViQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", + "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", "cpu": [ "arm64" ], @@ -595,10 +595,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", + "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.0.tgz", - "integrity": "sha512-rouezFHpwCqdEXsqAfNsTgSWO0FoZ5hKv5p+TGO5KFhyN/dvYXNMqMolOb8BkyKcPqjYRBeT+Z6V3aM26rPaYg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", + "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", "cpu": [ "x64" ], @@ -609,9 +622,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.0.tgz", - "integrity": "sha512-Bbm+fyn3S6u51urfj3YnqBXg5vI2jQPncRRELaucmhBVyZkbWClQ1fEsRmdnCPpQOQfkpg9gZArvtMVkOMsh1w==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", + "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", "cpu": [ "x64" ], @@ -622,9 +635,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.0.tgz", - "integrity": "sha512-+MRMcyx9L2kTrTUzYmR61+XVsliMG4odFb5UmqtiT8xOfEicfYAGEuF/D1Pww1+uZkYhBqAHpvju7VN+GnC3ng==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", + "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", "cpu": [ "arm64" ], @@ -635,9 +648,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.0.tgz", - "integrity": "sha512-rxfeE6K6s/Xl2HGeK6cO8SiQq3k/3BYpw7cfhW5Bk2euXNEpuzi2cc7llxx1si1QgwfjNtdRNTGqdBzGlFZGFw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", + "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", "cpu": [ "ia32" ], @@ -648,9 +661,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.0.tgz", - "integrity": "sha512-QqmCsydHS172Y0Kc13bkMXvipbJSvzeglBncJG3LsYJSiPlxYACz7MmJBs4A8l1oU+jfhYEIC/+AUSlvjmiX/g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", + "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", "cpu": [ "x64" ], @@ -673,9 +686,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", - "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", "dev": true, "optional": true, "dependencies": { @@ -850,9 +863,9 @@ ] }, "node_modules/basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", + "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", "dev": true, "engines": { "node": ">=10.0.0" @@ -1023,9 +1036,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.33", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.33.tgz", - "integrity": "sha512-IxoFM5WGQOIAd95qrSXzJUv4eXIrh+RvU3rwwqIiwYuvfE7U/Llj4fejbsJnjJMUYCuGtVQsY2gv7oGl4aTNSQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.1.tgz", + "integrity": "sha512-dcCqOgq9fHKExc2R4JZs/oKbOghWpUNFAJODS8WKRtLhp3avtIH5UDCBrutdqZdh3pARogH8y1ObXm87emwb3g==", "dev": true, "dependencies": { "mitt": "3.0.1", @@ -1286,15 +1299,15 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -1503,9 +1516,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1704,9 +1717,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2523,32 +2536,35 @@ } }, "node_modules/puppeteer": { - "version": "21.5.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.5.2.tgz", - "integrity": "sha512-BaAGJOq8Fl6/cck6obmwaNLksuY0Bg/lIahCLhJPGXBFUD2mCffypa4A592MaWnDcye7eaHmSK9yot0pxctY8A==", + "version": "21.6.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.6.1.tgz", + "integrity": "sha512-O+pbc61oj8ln6m8EJKncrsQFmytgRyFYERtk190PeLbJn5JKpmmynn2p1PiFrlhCitAQXLJ0MOy7F0TeyCRqBg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "1.8.0", + "@puppeteer/browsers": "1.9.0", "cosmiconfig": "8.3.6", - "puppeteer-core": "21.5.2" + "puppeteer-core": "21.6.1" + }, + "bin": { + "puppeteer": "lib/esm/puppeteer/node/cli.js" }, "engines": { "node": ">=16.13.2" } }, "node_modules/puppeteer-core": { - "version": "21.5.2", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.5.2.tgz", - "integrity": "sha512-v4T0cWnujSKs+iEfmb8ccd7u4/x8oblEyKqplqKnJ582Kw8PewYAWvkH4qUWhitN3O2q9RF7dzkvjyK5HbzjLA==", + "version": "21.6.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.6.1.tgz", + "integrity": "sha512-0chaaK/RL9S1U3bsyR4fUeUfoj51vNnjWvXgG6DcsyMjwYNpLcAThv187i1rZCo7QhJP0wZN8plQkjNyrq2h+A==", "dev": true, "dependencies": { - "@puppeteer/browsers": "1.8.0", - "chromium-bidi": "0.4.33", + "@puppeteer/browsers": "1.9.0", + "chromium-bidi": "0.5.1", "cross-fetch": "4.0.0", "debug": "4.3.4", "devtools-protocol": "0.0.1203626", - "ws": "8.14.2" + "ws": "8.15.1" }, "engines": { "node": ">=16.13.2" @@ -2662,9 +2678,9 @@ } }, "node_modules/rollup": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.0.tgz", - "integrity": "sha512-R8i5Her4oO1LiMQ3jKf7MUglYV/mhQ5g5OKeld5CnkmPdIGo79FDDQYqPhq/PCVuTQVuxsWgIbDy9F+zdHn80w==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", + "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -2674,18 +2690,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.6.0", - "@rollup/rollup-android-arm64": "4.6.0", - "@rollup/rollup-darwin-arm64": "4.6.0", - "@rollup/rollup-darwin-x64": "4.6.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.6.0", - "@rollup/rollup-linux-arm64-gnu": "4.6.0", - "@rollup/rollup-linux-arm64-musl": "4.6.0", - "@rollup/rollup-linux-x64-gnu": "4.6.0", - "@rollup/rollup-linux-x64-musl": "4.6.0", - "@rollup/rollup-win32-arm64-msvc": "4.6.0", - "@rollup/rollup-win32-ia32-msvc": "4.6.0", - "@rollup/rollup-win32-x64-msvc": "4.6.0", + "@rollup/rollup-android-arm-eabi": "4.9.1", + "@rollup/rollup-android-arm64": "4.9.1", + "@rollup/rollup-darwin-arm64": "4.9.1", + "@rollup/rollup-darwin-x64": "4.9.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", + "@rollup/rollup-linux-arm64-gnu": "4.9.1", + "@rollup/rollup-linux-arm64-musl": "4.9.1", + "@rollup/rollup-linux-riscv64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-musl": "4.9.1", + "@rollup/rollup-win32-arm64-msvc": "4.9.1", + "@rollup/rollup-win32-ia32-msvc": "4.9.1", + "@rollup/rollup-win32-x64-msvc": "4.9.1", "fsevents": "~2.3.2" } }, @@ -2826,9 +2843,9 @@ } }, "node_modules/streamx": { - "version": "2.15.5", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", - "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "dev": true, "dependencies": { "fast-fifo": "^1.1.0", @@ -2920,9 +2937,9 @@ } }, "node_modules/terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -3099,9 +3116,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 335ddf1..16f5217 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fr0st/query", - "version": "3.2.3", + "version": "3.2.4", "description": "fQuery is a free, open-source DOM manipulation library for JavaScript.", "keywords": [ "dom", @@ -38,12 +38,12 @@ "private": false, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.3", - "eslint": "^8.54.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "mocha": "^10.2.0", - "puppeteer": "^21.5.2", - "rollup": "^4.6.0", - "terser": "^5.24.0" + "puppeteer": "^21.6.1", + "rollup": "^4.9.1", + "terser": "^5.26.0" }, "dependencies": { "@fr0st/core": "^2.1.3" diff --git a/src/events/event-factory.js b/src/events/event-factory.js index 424fed9..678fce0 100644 --- a/src/events/event-factory.js +++ b/src/events/event-factory.js @@ -75,18 +75,47 @@ export function delegateFactory(node, selector, callback) { } Object.defineProperty(event, 'currentTarget', { - value: delegate, configurable: true, + enumerable: true, + value: delegate, }); Object.defineProperty(event, 'delegateTarget', { - value: node, configurable: true, + enumerable: true, + value: node, }); return callback(event); }; }; +/** + * Return a wrapped event callback that cleans up delegate events. + * @param {HTMLElement|ShadowRoot|Document} node The input node. + * @param {function} callback The event callback. + * @return {DOM~eventCallback} The cleaned event callback. + */ +export function delegateFactoryClean(node, callback) { + return (event) => { + if (!event.delegateTarget) { + return callback(event); + } + + Object.defineProperty(event, 'currentTarget', { + configurable: true, + enumerable: true, + value: node, + }); + Object.defineProperty(event, 'delegateTarget', { + writable: true, + }); + + delete event.delegateTarget; + + return callback(event); + }; +} + /** * Return a wrapped mouse drag event (optionally debounced). * @param {DOM~eventCallback} down The callback to execute on mousedown. diff --git a/src/events/event-handlers.js b/src/events/event-handlers.js index 2b67196..68d9f5b 100644 --- a/src/events/event-handlers.js +++ b/src/events/event-handlers.js @@ -1,4 +1,4 @@ -import { delegateFactory, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js'; +import { delegateFactory, delegateFactoryClean, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js'; import { parseNode, parseNodes } from './../filters.js'; import { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js'; import { events } from './../vars.js'; @@ -55,6 +55,8 @@ export function addEvent(selector, eventNames, callback, { capture = false, dele if (delegate) { realCallback = delegateFactory(node, delegate, realCallback); + } else { + realCallback = delegateFactoryClean(node, realCallback); } realCallback = namespaceFactory(eventName, realCallback);