@webqit/oohtml 1.10.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +3 -3
- package/LICENSE +21 -0
- package/README.md +399 -396
- package/dist/context-api.js +2 -0
- package/dist/context-api.js.map +7 -0
- package/dist/html-imports.js +1 -2
- package/dist/html-imports.js.map +3 -3
- package/dist/html-modules.js +1 -2
- package/dist/html-modules.js.map +3 -3
- package/dist/main.js +26 -14
- package/dist/main.js.map +3 -3
- package/dist/namespaced-html.js +1 -2
- package/dist/namespaced-html.js.map +3 -3
- package/dist/scoped-js.js +27 -0
- package/dist/scoped-js.js.map +7 -0
- package/dist/state-api.js +1 -2
- package/dist/state-api.js.map +3 -3
- package/package.json +76 -76
- package/src/context-api/HTMLContext.js +158 -0
- package/src/context-api/HTMLContextManager.js +77 -0
- package/src/context-api/_ContextRequestEvent.js +26 -0
- package/src/context-api/index.js +53 -0
- package/src/{namespaced-html/browser-entry.js → context-api/targets.browser.js} +9 -9
- package/src/html-imports/_HTMLImportElement.js +216 -0
- package/src/html-imports/index.js +92 -557
- package/src/{browser-entry.js → html-imports/targets.browser.js} +10 -10
- package/src/html-modules/HTMLExportsManager.js +191 -0
- package/src/html-modules/_HTMLImportsContext.js +114 -0
- package/src/html-modules/index.js +133 -384
- package/src/{html-imports/browser-entry.js → html-modules/targets.browser.js} +9 -9
- package/src/index.js +34 -39
- package/src/namespaced-html/index.js +130 -144
- package/src/namespaced-html/targets.browser.js +10 -0
- package/src/scoped-js/index.js +382 -0
- package/src/scoped-js/targets.browser.js +10 -0
- package/src/state-api/index.js +55 -142
- package/src/state-api/targets.browser.js +10 -0
- package/src/{html-modules/browser-entry.js → targets.browser.js} +10 -10
- package/src/util.js +20 -180
- package/test/imports.test.js +194 -0
- package/test/index.js +119 -0
- package/test/modules.test.js +198 -0
- package/test/namespaced-html.test.js +50 -0
- package/test/scoped-js.js +57 -0
- package/test/state-api.test.js +34 -0
- package/test/test.html +69 -0
- package/dist/subscript.js +0 -15
- package/dist/subscript.js.map +0 -7
- package/src/state-api/browser-entry.js +0 -10
- package/src/subscript/Element.js +0 -103
- package/src/subscript/browser-entry.js +0 -10
- package/src/subscript/index.js +0 -70
- package/test/all.test.js +0 -0
package/dist/html-imports.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/@webqit/util/
|
|
4
|
-
"sourcesContent": ["\n/**\n * Return the remainder of a string after a given value.\n *\n * @param string subject\n * @param string search\n * @param bool\t afterLast\n *\n * @return string\n */\nexport default function(subject, search, afterLast = false) {\n\tif (search == '') {\n\t\treturn subject;\n\t}\n\tvar pos = afterLast ? subject.lastIndexOf(search) : subject.indexOf(search);\n\tif (pos === -1) {\n\t\treturn '';\n\t}\n\treturn subject.substr(pos + search.length);\n};\n", "\n/**\n * Tells if ANY items pass the test.\n *\n * @param array \tarr\n * @param function \tcallback\n *\n * @return bool\n */\nexport default function(arr, callback) {\n\treturn arr.reduce((prevTest, itm, i) => prevTest || callback(itm, i), false);\n};\n", "\n/**\n * Return the part of a string before a given value.\n *\n * @param string subject\n * @param string search\n * @param bool\t beforeLast\n *\n * @return string\n */\nexport default function(subject, search, beforeLast = false) {\n\tif (search == '') {\n\t\treturn subject;\n\t}\n\tvar pos = beforeLast ? subject.lastIndexOf(search) : subject.indexOf(search);\n\tif (pos === -1) {\n\t\treturn subject;\n\t}\n\treturn subject.substr(0, pos);\n};\n", "\n/**\n * Tells if val is undefined or is of type \"undefined\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn arguments.length && (val === undefined || typeof val === 'undefined');\n};\n", "\n/**\n * Tells if val is of type \"function\".\n * This holds true for both regular functions and classes.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn typeof val === 'function';\n};\n", "\n/**\n * @imports\n */\nimport _isTypeFunction from './isTypeFunction.js';\n\n/**\n * Tells if val is of type \"function\".\n *\n * @param object \t\tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isTypeFunction(val) || (val && {}.toString.call(val) === '[object function]');\n};\n", "\n/**\n * Adds an item if not already exist.\n *\n * @param array \tarr\n * @param array\t \t...itms\n *\n * @return array\n */\nexport default function(arr, ...items) {\n\titems.forEach(itm => {\n\t\tif (arr.indexOf(itm) < 0) {\n\t\t\tarr.push(itm);\n\t\t}\n\t});\n\treturn arr;\n};\n", "\n/**\n * Tells if val is of type \"array\".\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn Array.isArray(val);\n};\n", "\n/**\n * Tells if val is of type \"string\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val instanceof String || (typeof val === 'string' && val !== null);\n};\n", "\n/**\n * @imports\n */\nimport _isString from './isString.js';\nimport _isUndefined from './isUndefined.js';\n\n/**\n * Tells if val is \"array-like\".\n * This holds true for anything that has a length property.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn !_isString(val) && !_isUndefined(val.length);\n};\n", "\n/**\n * Tells if val is undefined or is null.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val === null || val === '';\n};\n", "\n/**\n * @imports\n */\nimport _isTypeFunction from './isTypeFunction.js';\n\n/**\n * Tells if val is of type \"object\".\n * This holds true for anything object, including built-ins.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn Array.isArray(val) || (typeof val === 'object' && val) || _isTypeFunction(val);\n};\n", "\n/**\n * @imports\n */\nimport _isNull from './isNull.js';\nimport _isUndefined from './isUndefined.js';\nimport _isTypeObject from './isTypeObject.js';\n\n/**\n * Tells if val is empty in its own type.\n * This holds true for NULLs, UNDEFINED, FALSE, 0,\n * objects without keys, empty arrays.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isNull(val) || _isUndefined(val) || val === false || val === 0 \n\t\t|| (_isTypeObject(val) && !Object.keys(val).length);\n};\n", "\n/**\n * Tells if val is pure object.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn !Array.isArray(val) && typeof val === 'object' && val;\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isTypeArray from '../js/isTypeArray.js';\nimport _isEmpty from '../js/isEmpty.js';\nimport _isObject from '../js/isObject.js';\n\n/**\n * Casts an array-like object to an array.\n *\n * @param mixed \tval\n * @param bool\t \tcastObject\n *\n * @return array\n */\nexport default function(val, castObject = true) {\n\tif (_isArray(val)) {\n\t\treturn val;\n\t};\n\tif (!castObject && _isObject(val)) {\n\t\treturn [val];\n\t};\n\tif (val !== false && val !== 0 && _isEmpty(val)) {\n\t\treturn [];\n\t};\n\tif (_isTypeArray(val)) {\n\t\treturn Array.prototype.slice.call(val);\n\t};\n\tif (_isObject(val)) {\n\t\treturn Object.values(val);\n\t};\n\treturn [val];\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\n\n/**\n * Returns the difference of two arrays;\n * optionally using a custom matching function.\n *\n * @param array \tarr\n * @param array\t \tarr2\n * @param function \tcallback\n *\n * @return array\n */\nexport default function(arr, arr2, callback = null) {\n\treturn !_isArray(arr2) ? [] : arr.filter(val1 => callback \n\t\t? arr2.filter(val2 => callback(val1, val2)).length \n\t\t: arr2.indexOf(val1) === -1\n\t);\n};\n", "\n/**\n * Removes instances of reference up to <limit> times.\n *\n * @param array \tarr\n * @param mixed\t \titm\n * @param int|bool \tlimit\n *\n * @return array\n */\nexport default function(arr, itm, limit = false) {\n\tvar i = arr.indexOf(itm);\n\twhile (i > -1 && (limit || limit === false)) {\n\t\tarr.splice(i, 1);\n\t\tif (limit > 0) {\n\t\t\tlimit --;\n\t\t};\n\t\ti = arr.indexOf(itm);\n\t};\n\treturn arr;\n};\n", "\n/**\n * Returns THE FIRST ENTRY OR A NUMBER OF ENTRIES counting forward from the begining.\n *\n * @param array \tarr\n * @param int\t \tamount\n *\n * @return mixed|array\n */\nexport default function(arr, amount = 1) {\n\tvar count = 0;\n\tarr.forEach(itm => {\n\t\tcount ++;\n\t});\n\tvar firsts = arr.slice(arr.length - count, amount);\n\treturn arguments.length > 1 ? firsts : firsts[0];\n};\n", "\n/**\n * Tells if val is of type \"number\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val instanceof Number || (typeof val === 'number');\n};\n", "\n/**\n * @imports\n */\nimport _isNumber from './isNumber.js';\n/**\n * Tells if val is of type \"string\" or a numeric string.\n * This holds true for both numbers and numeric strings.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isNumber(val) || (val !== true && val !== false && val !== null && val !== '' && !isNaN(val * 1));\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isObject from '../js/isObject.js';\nimport _isNumeric from '../js/isNumeric.js';\n\n/**\n * Flattens a nested array to the given depth.\n *\n * @param array \tarr\n * @param int \t \tdepth\n * @param bool \t \twithObjects\n *\n * @return array\n */\nconst _flatten = function(arr, depth = 1, withObjects = true) {\n\tif (!_isNumeric(depth) || depth <= 0) {\n\t\treturn arr;\n\t};\n\tif (!_isArray(arr) && _isObject(arr) && withObjects) {\n\t\tarr = Object.values(arr);\n\t};\n\tif (!_isArray(arr)) {\n\t\treturn arr;\n\t};\n\treturn arr.reduce((acc, val) => _isArray(val) || (_isObject(val) && withObjects) \n\t\t? acc.concat(_flatten(!_isArray(val) ? Object.values(val) : val, depth - 1, withObjects)) \n\t\t: acc.concat(val), []);\n};\n\n/**\n * @exports\n */\nexport default _flatten;", "\n/**\n * Tells if val is undefined or is of type \"boolean\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val === true || val === false;\n};\n", "\n/**\n * @imports\n */\nimport _first from './first.js';\n\n/**\n * Returns THE LAST ENTRY OR A NUMBER OF ENTRIES counting forward to the end.\n *\n * @param array \tarr\n * @param int\t \tamount\n *\n * @return mixed|array\n */\nexport default function(arr, amount = 1) {\n\treturn arguments.length > 1\n\t\t? _first(arr.slice().reverse(), amount).reverse()\n\t\t: _first(arr.slice().reverse());\n};\n", "\n/**\n * @imports\n */\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isNumeric from '../js/isNumeric.js';\n\n/**\n * Loops thru obj flatly with a callback function.\n * Stops when callback returns a non-undefined value.\n *\n * @param array|object \t\t\tobj \t\t\tThe array or object to iterate.\n * @param function \t\t\t\tcallback \t\tThe callback function.\n *\n * @return mixed|null\t\t\tAny non-null return from callback\n */\nexport default function(obj, callback) {\n\tvar returnValue = undefined;\n\tif (_isTypeObject(obj)) {\n\t\tObject.keys(obj).forEach((k, i) => {\n\t\t\tif (returnValue !== false) {\n\t\t\t\treturnValue = callback(_isNumeric(k) ? parseFloat(k) : k, obj[k], i);\n\t\t\t}\n\t\t});\n\t}\n\treturn returnValue;\n};\n", "\n/**\n * Returns a list of unique items.\n *\n * @param array\t \t\t\t\tarr\n *\t *\n * @return array\n */\nexport default function(arr) {\n\tconst distinct = (value, index, self) => {\n\t\treturn self.indexOf(value) === index;\n\t};\n\treturn arr.filter(distinct);\n};\n", "\n/**\n * Creates and/or returns an \"internals\" object for the given object.\n * \n * @param Any obj\n * @param String namespace\n * \n * @return Object\n */\nexport default function internals(obj, ...namespaces) {\n if (!globalThis.WebQitInternalsRegistry) {\n globalThis.WebQitInternalsRegistry = new Map;\n }\n var itnls = globalThis.WebQitInternalsRegistry.get(obj);\n if (!itnls) {\n itnls = new Map;\n if (namespaces[0] === false) {\n // FALSE means: Return orphan Map if not exists\n return itnls;\n }\n globalThis.WebQitInternalsRegistry.set(obj, itnls);\n }\n var _ns, _itnls;\n while ((_ns = namespaces.shift())) {\n if ((_itnls = itnls) && !(itnls = itnls.get(_ns))) {\n itnls = new Map;\n if (namespaces[0] === false) {\n // FALSE means: Return orphan Map if not exists\n return itnls;\n }\n _itnls.set(_ns, itnls);\n }\n }\n return itnls;\n}", "\n/**\n * @imports\n */\nimport _isObject from './isObject.js';\n\n/**\n * Tells if an object is direct instance of Object.prototype.\n * Quite useful in differentiating native objects and class instances from plain objects ({}).\n *\n * @param object \tobj\n *\n * @return bool\n */\nexport default function(obj) {\n\treturn _isObject(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\n\n/**\n * Returns the prototype chain.\n *\n * @param object \t\tobj\n * @param object\t \tuntil\n *\n * @return bool\n */\nexport default function(obj, until) {\n\tuntil = until || Object.prototype;\n\tuntil = until && !_isArray(until) ? [until] : until;\n\t// We get the chain of inheritance\n\tvar prototypalChain = [];\n\tvar obj = obj;\n\twhile((obj && (!until || until.indexOf(obj) < 0) && obj.name !== 'default')) {\n\t\tprototypalChain.push(obj);\n\t\tobj = obj ? Object.getPrototypeOf(obj) : null;\n\t}\n\treturn prototypalChain;\n};\n", "\n/**\n * @imports\n */\nimport _pushUnique from '../arr/pushUnique.js';\nimport _getPrototypeChain from './getPrototypeChain.js';\n\n/**\n * Eagerly retrieves object members all down the prototype chain.\n *\n * @param object\t \tobj\n * @param object\t \tuntil\n *\n * @return array\n */\nexport default function(obj, until) {\n\tvar keysAll = [];\n\t_getPrototypeChain(obj, until).forEach(obj => {\n\t\t_pushUnique(keysAll, ...Object.getOwnPropertyNames(obj));\n\t});\n\treturn keysAll;\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isFunction from '../js/isFunction.js';\nimport _isObject from '../js/isObject.js';\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isNumeric from '../js/isNumeric.js';\nimport _getAllPropertyNames from './getAllPropertyNames.js';\n\n/**\n * Merges values from subsequent arrays/objects first array/object;\n * optionally recursive\n *\n * @param array ...objs\n *\n * @return void\n */\nexport default function mergeCallback(objs, callback, deepProps = false, isReplace = false, withSymbols = false) {\n\tvar depth = 0;\n\tvar obj1 = objs.shift();\n\tif (_isNumeric(obj1) || obj1 === true || obj1 === false) {\n\t\tdepth = obj1;\n\t\tobj1 = objs.shift();\n\t}\n\tif (!objs.length) {\n\t\tthrow new Error('_merge() requires two or more array/objects.');\n\t}\n\tobjs.forEach((obj2, i) => {\n\t\tif (!_isTypeObject(obj2) && !_isFunction(obj2)) {\n\t\t\treturn;\n\t\t}\n\t\t(deepProps ? _getAllPropertyNames(obj2) : Object.getOwnPropertyNames(obj2)).forEach(key => {\n\t\t\tif (!callback(key, obj1, obj2, i)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar valAtObj1 = obj1[key];\n\t\t\tvar valAtObj2 = obj2[key];\n\t\t\tif (((_isArray(valAtObj1) && _isArray(valAtObj2)) || (_isObject(valAtObj1) && _isObject(valAtObj2))) \n\t\t\t&& (depth === true || depth > 0)) {\n\t\t\t\t// RECURSE...\n\t\t\t\tobj1[key] = _isArray(valAtObj1) && _isArray(valAtObj2) ? [] : {};\n\t\t\t\tmergeCallback([_isNumeric(depth) ? depth - 1 : depth, obj1[key], valAtObj1, valAtObj2], callback, deepProps, isReplace, withSymbols);\n\t\t\t} else {\n\t\t\t\tif (_isArray(obj1) && _isArray(obj2)) {\n\t\t\t\t\tif (isReplace) {\n\t\t\t\t\t\tobj1[key] = valAtObj2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj1.push(valAtObj2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// In case we're setting a read-only property\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (withSymbols) {\n\t\t\t\t\t\t\tObject.defineProperty(obj1, key, Object.getOwnPropertyDescriptor(obj2, key));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj1[key] = obj2[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\treturn obj1;\n};\n", "\n/**\n * @imports\n */\nimport _mergeCallback from './mergeCallback.js';\n\n/**\n * Merges values from subsequent arrays/objects first array/object;\n * optionally recursive\n *\n * @param array ...objs\n *\n * @return void\n */\nexport default function(...objs) {\n\treturn _mergeCallback(objs, (k, obj1, obj2) => {\n\t\treturn true;\n\t}, false/*deepProps*/, false/*isReplace*/, false/*withSymbols*/);\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isObject from '../js/isObject.js';\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isBoolean from '../js/isBoolean.js';\nimport _each from './each.js';\n\n/**\n * Gets the match(es) between (members of) two values;\n * assertion optionally custom.\n *\n * @param mixed \t\t\tob1\n * @param mixed \t\t\tobj2\n * @param string|function\tassertion\n * @param bool\t\t\t\tnetComparison\n * @param bool\t\t\t\tcontrast\n * @param bool\t\t\t\treturnOnFirstFalse\n *\n * @return bool|array|object\n */\nexport default function(obj1, obj2, assertion = true, netComparison = true, contrast = false, returnOnFirstFalse = false) {\n\tif (_isArray(obj1) && _isArray(obj2)) {\n\t\tvar result = [];\n\t\tvar contn = true;\n\t\tobj1.forEach(v1 => {\n\t\t\tif (!contn) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar testPass = false;\n\t\t\t_each(obj2, (k, v2) => {\n\t\t\t\tif (!testPass || (netComparison && _isTypeObject(v1))) {\n\t\t\t\t\ttestPass = assertion(v1, v2);\n\t\t\t\t\tif ((_isArray(testPass) && !testPass.length) || (_isObject(testPass) && !Object.keys(testPass).length)) {\n\t\t\t\t\t\ttestPass = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (_isTypeObject(testPass) && netComparison) {\n\t\t\t\t\t\t// Further recursions should use this testPass as v1\n\t\t\t\t\t\tv1 = testPass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (_isTypeObject(testPass)) {\n\t\t\t\tresult.push(netComparison ? testPass : v1);\n\t\t\t} else if (!_isBoolean(testPass)) {\n\t\t\t\tresult.push(testPass);\n\t\t\t} else if ((contrast && !testPass) || (!contrast && testPass)) {\n\t\t\t\tresult.push(v1);\n\t\t\t} else if (returnOnFirstFalse) {\n\t\t\t\tcontn = false;\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t}\n\t\n\tif (_isObject(obj1) && _isObject(obj2)) {\n\t\tvar result = {};\n\t\tvar contn = true;\n\t\tObject.keys(obj1).forEach(k => {\n\t\t\tif (!contn) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar testPass = assertion(obj1[k], obj2[k]);\n\t\t\tif ((_isArray(testPass) && !testPass.length) || (_isObject(testPass) && !Object.keys(testPass).length)) {\n\t\t\t\ttestPass = false;\n\t\t\t}\n\t\t\tif (_isTypeObject(testPass)) {\n\t\t\t\tresult[k] = netComparison ? testPass : obj1[k];\n\t\t\t} else if (!_isBoolean(testPass)) {\n\t\t\t\tresult[k] = testPass;\n\t\t\t} else if ((contrast && !testPass) || (!contrast && testPass)) {\n\t\t\t\tresult[k] = obj1[k];\n\t\t\t} else if (returnOnFirstFalse) {\n\t\t\t\tcontn = false;\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t}\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isFunction from '../js/isFunction.js';\nimport _mergeCallback from './mergeCallback.js';\n\n/**\n * Copies only properties of an object.\n *\n * @param object\t \tobj\n * @param array\t\t \tonly\n * @param array\t\t \texcept\n *\n * @return object\n */\nexport default function(obj, filter = []) {\n\treturn _mergeCallback([{}, obj], (key, obj1, obj2) => {\n\t\tif (!_isFunction(obj2[key])) {\n\t\t\treturn _isFunction(filter) ? filter(key) \n\t\t\t\t: (_isArray(filter) && filter.length ? filter.indexOf(key) > -1 : true);\n\t\t}\n\t}, false/*deepProps*/, false/*isReplace*/, false/*withSymbols*/);\n};\n", "\n/**\n * @imports\n */\nimport _isNumber from '../js/isNumber.js';\nimport _isArray from '../js/isArray.js';\nimport _isObject from '../js/isObject.js';\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isFunction from '../js/isFunction.js';\nimport _isPlainObject from '../js/isPlainObject.js';\nimport _compareCallback from './compareCallback.js';\n\n/**\n * Asserts (members of) the first value against (members of) subsequent values.\n * Assertion could be TRUE, FALSE, or custom.\n *\n * @param mixed \t\t\tobj1\n * @param mixed \t\t\tobj2\n * @param bool|function\t\tassertion\n * @param int\t\t\t\tdepth\n *\n * @return bool\n */\nconst _even = function(obj1, obj2, assertion = true, depth = 1) {\n\tif (_isArray(obj1) && _isArray(obj2) && obj1.length !== obj2.length) {\n\t\treturn !assertion;\n\t}\n\tif (_isObject(obj1) && _isObject(obj2)) {\n\t\tvar obj1Keys = Object.keys(obj1);\n\t\tvar obj2Keys = Object.keys(obj2);\n\t\tif (!obj1Keys.length && !obj2Keys.length) {\n\t\t\t// Objects that won't show keys must be compared by instance\n\t\t\t// Many native objects won't. So we can't judge by keys alone.\n\t\t\treturn _isPlainObject(obj1) && _isPlainObject(obj2) \n\t\t\t\t? assertion\n\t\t\t\t: (obj1 === obj2) === assertion;\n\t\t}\n\t\tif (!_even(obj1Keys, obj2Keys)) {\n\t\t\treturn !assertion;\n\t\t}\n\t}\n\tif (depth > 0 && ((_isArray(obj1) && _isArray(obj2)) || (_isObject(obj1) && _isObject(obj2)))) {\n\t\tvar result = _compareCallback(obj1, obj2, (v1, v2) => {\n\t\t\treturn _even(v1, v2, assertion, depth - 1);\n\t\t}, false/*netComparison*/, false/*contrast*/, true/*returnOnFirstFalse*/);\n\t\treturn _isArray(result) \n\t\t\t? result.length === obj1.length && result.length === obj2.length \n\t\t\t: (_isObject(result) && _isObject(obj1) \n\t\t\t\t? Object.keys(result).length === Object.keys(obj1).length && Object.keys(result).length === Object.keys(obj2).length \n\t\t\t\t: result);\n\t}\n\treturn _isFunction(assertion) ? assertion(obj1, obj2) : (\n\t\t_isNumber(obj1) && _isNumber(obj2) && isNaN(obj1) && isNaN(obj2) \n\t\t\t? assertion \n\t\t\t: (obj1 === obj2) === assertion\n\t);\n};\n\n/**\n * @exports\n */\nexport default _even;\n", "\r\n/**\r\n * Tells if val is pure object.\r\n *\r\n * @param object\t \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn !Array.isArray(val) && typeof val === 'object' && val;\r\n};\r\n", "\r\n/**\r\n * Detects vendor type from the given window object\r\n * \r\n * @param window window\r\n *\r\n * @return string\r\n */\r\nexport function getName(window) {\r\n // Firefox 1.0+\r\n var isFirefox = typeof window.InstallTrigger !== 'undefined';\r\n if (isFirefox) {\r\n return 'firefox';\r\n }\r\n // Safari 3.0+ \"[object HTMLElementConstructor]\" \r\n var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === \"[object SafariRemoteNotification]\"; })(!window['safari'] || (typeof window.safari !== 'undefined' && window.safari.pushNotification));\r\n if (isSafari) {\r\n return 'safari';\r\n }\r\n // Chrome 1 - 79\r\n var isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);\r\n // Edge (based on chromium) detection\r\n var isEdgeChromium = isChrome && (window.navigator.userAgent.indexOf(\"Edg\") != -1);\r\n // Opera 8.0+\r\n var isOpera = (!!window.opr && !!window.opr.addons) || !!window.opera || window.navigator.userAgent.indexOf(' OPR/') >= 0;\r\n\r\n // Internet Explorer 6-11\r\n var isIE = /*@cc_on!@*/false || !!window.document.documentMode;\r\n // Edge 20+\r\n var isEdge = !isIE && !!window.StyleMedia;\r\n // Blink engine detection\r\n var isBlink = (isChrome || isOpera) && !!window.CSS;\r\n return isEdge ? 'edge' : (\r\n isIE ? 'ie' : (\r\n isOpera ? 'opera' : (\r\n isEdgeChromium ? 'ie-chromium' : (\r\n isChrome ? 'chrome' : 'unknown'\r\n )\r\n )\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * Returns the vendor-specific property prefix.\r\n *\r\n * @return object\r\n */\r\nexport function getPrefix(window) {\r\n var styles = window.getComputedStyle(window.document.documentElement, '');\r\n var prefix = (Array.prototype.slice.call(styles).join('').match(/-(moz|webkit|ms)-/) || styles.Olink === '' && ['', 'o'])[1];\r\n var api = (('WebKit|Moz|Ms|O').match(new RegExp('(' + prefix + ')', 'i')) || [])[1];\r\n return {\r\n api,\r\n prefix,\r\n css: '-' + prefix + '-',\r\n };\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isObject from '@webqit/util/js/isObject.js';\r\nimport {\r\n getName as getVendorName,\r\n getPrefix as getVendorPrefix\r\n} from './vendor.js';\r\n\r\n/**\r\n * ---------------------------\r\n * Centralized ENV initializer\r\n * for actual and virtual browser environments.\r\n * ---------------------------\r\n */\r\n\r\nexport default function() {\r\n if (!(_isObject(this) && this.window) && (typeof window === 'undefined')) {\r\n throw new Error('A window context is required.');\r\n }\r\n const _window = _isObject(this) && this.window ? this.window : window;\r\n // Create global scope?\r\n if (!_window.WebQit) {\r\n _window.WebQit = {};\r\n }\r\n if (!_window.WebQit.window) {\r\n // Is this params for global or sub scope?\r\n let _vendor, _prefix;\r\n Object.defineProperty(_window.WebQit, 'window', {get: () => _window});\r\n Object.defineProperty(_window.WebQit, 'vendor', {value: {\r\n getName: () => {\r\n if (!_vendor) {\r\n _vendor = getVendorName(_window);\r\n }\r\n return _vendor;\r\n },\r\n getPrefix: () => {\r\n if (!_prefix) {\r\n _prefix = getVendorPrefix(_window);\r\n }\r\n return _prefix;\r\n }\r\n }});\r\n }\r\n return _window.WebQit;\r\n }", "\r\n/**\r\n * Tells if val is of type \"function\".\r\n * This holds true for both regular functions and classes.\r\n *\r\n * @param object\t \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn typeof val === 'function';\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isTypeFunction from './isTypeFunction.js';\r\n\r\n/**\r\n * Tells if val is of type \"object\".\r\n * This holds true for anything object, including built-ins.\r\n *\r\n * @param object\t \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn Array.isArray(val) || (typeof val === 'object' && val) || _isTypeFunction(val);\r\n};\r\n", "\r\n/**\r\n * Tells if val is of type \"number\".\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn val instanceof Number || (typeof val === 'number');\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isNumber from './isNumber.js';\r\n/**\r\n * Tells if val is of type \"string\" or a numeric string.\r\n * This holds true for both numbers and numeric strings.\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn _isNumber(val) || (val !== true && val !== false && val !== null && val !== '' && !isNaN(val * 1));\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _each from '@webqit/util/obj/each.js';\r\n\r\n/**\r\n * ---------------------------\r\n * Binds callbacks to requestAnimationFrame()\r\n * to create a central \"read/write\" phases for Ctxt access.\r\n * ---------------------------\r\n */\r\n\t\t\t\r\nexport default class Reflow {\r\n\r\n\t/**\r\n\t * Starts the loop.\r\n\t *\r\n\t * @return this\r\n\t */\r\n\tconstructor(window, asyncDOM = true) {\r\n\t\tthis.window = window;\r\n\t\tthis.async = asyncDOM;\r\n\t\tthis.readCallbacks = [];\r\n\t\tthis.writeCallbacks = [];\r\n\t\tthis._run();\r\n\t}\r\n\r\n\t_run() {\r\n\t\tthis.window.requestAnimationFrame(() => {\r\n\t\t\tthis.readCallbacks.forEach((callback, i) => {\r\n\t\t\t\tif (callback && !callback()) {\r\n\t\t\t\t\tthis.readCallbacks[i] = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.writeCallbacks.forEach((callback, i) => {\r\n\t\t\t\tif (callback && !callback()) {\r\n\t\t\t\t\tthis.writeCallbacks[i] = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis._run();\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * Binds a callback to the \"read\" phase.\r\n\t *\r\n\t * @param function \tcallback\r\n\t * @param bool\t\twithPromise\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonread(callback, withPromise = false) {\r\n\t\tif (withPromise) {\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tif (this.async === false) {\r\n\t\t\t\t\tcallback(resolve, reject);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.readCallbacks.push(() => {\r\n\t\t\t\t\t\tcallback(resolve, reject);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.async === false) {\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\tthis.readCallbacks.push(callback);\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Binds a callback to the \"write\" phase.\r\n\t *\r\n\t * @param function \tcallback\r\n\t * @param bool\t\twithPromise\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonwrite(callback, withPromise = false) {\r\n\t\tif (withPromise) {\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tif (this.async === false) {\r\n\t\t\t\t\tcallback(resolve, reject);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.writeCallbacks.push(() => {\r\n\t\t\t\t\t\tcallback(resolve, reject);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.async === false) {\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\tthis.writeCallbacks.push(callback);\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * A special construct for Ctxt manipulations that span\r\n\t * one or more read/write cycles.\r\n\t *\r\n\t * @param function \tread\r\n\t * @param function \twrite\r\n\t * @param mixed\t\tprevTransaction\r\n\t *\r\n\t * @return void|mixed\r\n\t */\r\n\tcycle(read, write, prevTransaction) {\r\n\t\tthis.onread(() => {\r\n\t\t\t// Record initial values\r\n\t\t\tvar readReturn = read(prevTransaction);\r\n\t\t\tif (readReturn) {\r\n\t\t\t\t// Call erite, the transation\r\n\t\t\t\tvar callWrite = (readReturn) => {\r\n\t\t\t\t\tthis.onwrite(() => {\r\n\t\t\t\t\t\tvar writeReturn = write(readReturn, prevTransaction);\r\n\t\t\t\t\t\tif (writeReturn) {\r\n\t\t\t\t\t\t\t// Repeat transaction\r\n\t\t\t\t\t\t\tvar repeatTransaction = (writeReturn) => {\r\n\t\t\t\t\t\t\t\tthis.cycle(read, write, writeReturn);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t// ---------------------------------------\r\n\t\t\t\t\t\t\t// If \"write\" returns a promise, we wait until it is resolved\r\n\t\t\t\t\t\t\t// ---------------------------------------\r\n\t\t\t\t\t\t\tif (writeReturn instanceof Promise) {\r\n\t\t\t\t\t\t\t\twriteReturn.then(repeatTransaction);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\trepeatTransaction();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t\t// ---------------------------------------\r\n\t\t\t\t// If \"read\" returns a promise, we wait until it is resolved\r\n\t\t\t\t// ---------------------------------------\r\n\t\t\t\tif (readReturn instanceof Promise) {\r\n\t\t\t\t\treadReturn.then(callWrite);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcallWrite();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n};", "\r\n/**\r\n * Tells if val is of type \"string\".\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn val instanceof String || (typeof val === 'string' && val !== null);\r\n};\r\n", "\r\n/**\r\n * Tells if val is of type \"array\".\r\n *\r\n * @param object\t \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn Array.isArray(val);\r\n};\r\n", "\r\n/**\r\n * Tells if val is undefined or is of type \"undefined\".\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn arguments.length && (val === undefined || typeof val === 'undefined');\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isString from './isString.js';\r\nimport _isUndefined from './isUndefined.js';\r\n\r\n/**\r\n * Tells if val is \"array-like\".\r\n * This holds true for anything that has a length property.\r\n *\r\n * @param object\t \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn !_isString(val) && !_isUndefined(val.length);\r\n};\r\n", "\r\n/**\r\n * Tells if val is undefined or is null.\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn val === null || val === '';\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isNull from './isNull.js';\r\nimport _isUndefined from './isUndefined.js';\r\nimport _isTypeObject from './isTypeObject.js';\r\n\r\n/**\r\n * Tells if val is empty in its own type.\r\n * This holds true for NULLs, UNDEFINED, FALSE, 0,\r\n * objects without keys, empty arrays.\r\n *\r\n * @param string \tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn _isNull(val) || _isUndefined(val) || val === false || val === 0 \r\n\t\t|| (_isTypeObject(val) && !Object.keys(val).length);\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isArray from '../js/isArray.js';\r\nimport _isTypeArray from '../js/isTypeArray.js';\r\nimport _isEmpty from '../js/isEmpty.js';\r\nimport _isObject from '../js/isObject.js';\r\n\r\n/**\r\n * Casts an array-like object to an array.\r\n *\r\n * @param mixed \tval\r\n * @param bool\t \tcastObject\r\n *\r\n * @return array\r\n */\r\nexport default function(val, castObject = true) {\r\n\tif (_isArray(val)) {\r\n\t\treturn val;\r\n\t};\r\n\tif (!castObject && _isObject(val)) {\r\n\t\treturn [val];\r\n\t};\r\n\tif (val !== false && val !== 0 && _isEmpty(val)) {\r\n\t\treturn [];\r\n\t};\r\n\tif (_isTypeArray(val)) {\r\n\t\treturn Array.prototype.slice.call(val);\r\n\t};\r\n\tif (_isObject(val)) {\r\n\t\treturn Object.values(val);\r\n\t};\r\n\treturn [val];\r\n};\r\n", "\n/**\n * @imports\n */\nimport init from '../index.js';\n\nexport default function(callback) {\n const WebQit = init.call(this);\n if (WebQit.DOM.isDOMReady || WebQit.window.document.readyState === 'complete') {\n callback(WebQit.window);\n } else {\n if (!WebQit.window.domReadyCallbacks) {\n WebQit.window.domReadyCallbacks = [];\n WebQit.window.document.addEventListener('DOMContentLoaded', () => {\n WebQit.DOM.isDOMReady = true;\n WebQit.window.domReadyCallbacks.splice(0).forEach(cb => cb(WebQit.window));\n }, false);\n }\n WebQit.window.domReadyCallbacks.push(callback);\n }\n}\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isString from '@webqit/util/js/isString.js';\r\nimport _difference from '@webqit/util/arr/difference.js';\r\nimport _arrFrom from '@webqit/util/arr/from.js';\r\nimport domReady from './ready.js';\r\n\r\n/**\r\n * ---------------------\r\n * Ctxt Mutations Utilities\r\n * ---------------------\r\n */\r\nexport default class Mutations {\r\n\r\n\t/**\r\n\t * Starts the loop.\r\n\t *\r\n\t * @return this\r\n\t */\r\n\tconstructor(window) {\r\n\t\tthis.window = window;\r\n\t}\r\n\r\n\t/**\r\n\t * ---------------------\r\n\t * PRESENCE\r\n\t * ---------------------\r\n\t */\r\n\t\t\r\n\t/**\r\n\t * Shortcut function to onPresenceChange().\r\n\t *\r\n\t * Observes when the given elements or selectors are added\r\n\t * to the given context.\r\n\t *\r\n\t * @param window\t\t\t\t\twindow\r\n\t * @param array|Element|string\t\tels\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonAdded(els, callback, params = {}) {\r\n\t\tparams.on = 'added';\r\n\t\treturn this.onPresenceChange(els, (el, presence, isTransient, addedState, removedState) => {\r\n\t\t\tcallback(el, presence, isTransient, addedState, removedState);\r\n\t\t}, params);\r\n\t}\r\n\r\n\t/**\r\n\t * Shortcut function to onPresenceChange().\r\n\t *\r\n\t * Observes when the given elements or selectors are removed\r\n\t * from the given context.\r\n\t *\r\n\t * @param array|Element|string\t\tels\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonRemoved(els, callback, params = {}) {\r\n\t\tparams.on = 'removed';\r\n\t\treturn this.onPresenceChange(els, (el, presence, isTransient, addedState, removedState) => {\r\n\t\t\tcallback(el, presence, isTransient, addedState, removedState);\r\n\t\t}, params);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a MutationObserver that fires if currently, and whenever,\r\n\t * the given element, or selector, is present in the Ctxt.\r\n\t *\r\n\t * @param string|Element\t\t\t\tselector\r\n\t * @param function\t\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\t\tparams\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonPresent(selector, callback, params = {}) {\r\n\t\t// On Ctxt-ready\r\n\t\tdomReady.call(this.window, () => {\r\n\t\t\t// On Ctxt mutation\r\n\t\t\tif (this.window.MutationObserver) {\r\n\t\t\t\tthis.onAdded(selector, (els, presence) => {\r\n\t\t\t\t\tels.forEach(el => callback(el, presence));\r\n\t\t\t\t}, params);\r\n\t\t\t}\r\n\t\t\tif (_isString(selector)) {\r\n\t\t\t\t// IMPORTANT: This must come after having observed mutations above\r\n\t\t\t\t// as the callback handler may trigger more additions\r\n\t\t\t\t_arrFrom(this.window.document.querySelectorAll(selector)).forEach(el => callback(el, 1));\r\n\t\t\t} else if (selector.parentNode) {\r\n\t\t\t\tcallback(selector, 1);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a MutationObserver that fires if currently, and whenever,\r\n\t * the given element, or selector, is absent in the Ctxt.\r\n\t *\r\n\t * @param string|Element\t\t\t\tselector\r\n\t * @param function\t\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\t\tparams\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonAbsent(selector, callback, params = {}) {\r\n\t\t// On Ctxt-ready\r\n\t\tdomReady.call(this.window, () => {\r\n\t\t\t// On Ctxt mutation\r\n\t\t\tif (this.window.MutationObserver) {\r\n\t\t\t\tonRemoved(selector, (els, presence) => {\r\n\t\t\t\t\tels.forEach(el => callback(el, presence));\r\n\t\t\t\t}, params);\r\n\t\t\t}\r\n\t\t\tif (_isString(selector)) {\r\n\t\t\t\t// IMPORTANT: This must come after having observed mutations above\r\n\t\t\t\t// as the callback handler may trigger more removals\r\n\t\t\t\tif (_arrFrom(this.window.document.querySelectorAll(selector)).length === 0) {\r\n\t\t\t\t\tcallback(null, 0);\r\n\t\t\t\t}\r\n\t\t\t} else if (!selector.parentNode) {\r\n\t\t\t\tcallback(selector, 0);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Observes when the given elements or selectors are added or removed\r\n\t * from the given context.\r\n\t *\r\n\t * @param array|Element|string\t\tels\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonPresenceChange(els, callback, params = {}) {\r\n\t\tels = _arrFrom(els, false/*castObject*/);\r\n\t\tvar search = (el, nodeListArray) => {\r\n\t\t\t// Filter out text nodes\r\n\t\t\tnodeListArray = nodeListArray.filter(node => node.matches);\r\n\t\t\tif (_isString(el)) {\r\n\t\t\t\t// Is directly mutated...\r\n\t\t\t\tvar matches = nodeListArray.filter(node => node.matches(el));\r\n\t\t\t\t// Is contextly mutated...\r\n\t\t\t\tif (params.observeIndirectMutation !== false) {\r\n\t\t\t\t\tmatches = nodeListArray\r\n\t\t\t\t\t\t.reduce((collection, node) => collection.concat(_arrFrom(node.querySelectorAll(el))), matches);\r\n\t\t\t\t\tif (matches.length) {\r\n\t\t\t\t\t\treturn matches;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Is directly mutated...\r\n\t\t\t\tif (nodeListArray.includes(el)) {\r\n\t\t\t\t\treturn [el];\r\n\t\t\t\t}\r\n\t\t\t\t// Is contextly mutated...\r\n\t\t\t\tif (params.observeIndirectMutation !== false && nodeListArray.length) {\r\n\t\t\t\t\tvar parentNode = el;\r\n\t\t\t\t\twhile(parentNode = parentNode.parentNode) {\r\n\t\t\t\t\t\tif (nodeListArray.includes(parentNode)) {\r\n\t\t\t\t\t\t\treturn [el];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tvar match = (els, sourceArray) => {\r\n\t\t\t// -------------------------------\r\n\t\t\t// Search can be expensive...\r\n\t\t\t// Multiple listeners searching the same thing in the same list?\r\n\t\t\tif (!sourceArray.$$searchCache) {\r\n\t\t\t\tsourceArray.$$searchCache = new Map();\r\n\t\t\t}\r\n\t\t\t// -------------------------------\r\n\t\t\treturn els.reduce((matches, el) => {\r\n\t\t\t\t// -------------------------------\r\n\t\t\t\tvar _matches;\r\n\t\t\t\tif (sourceArray.$$searchCache.has(el)) {\r\n\t\t\t\t\t_matches = sourceArray.$$searchCache.get(el);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_matches = search(el, sourceArray, _isString(el)) || [];\r\n\t\t\t\t\tsourceArray.$$searchCache.set(el, _matches);\r\n\t\t\t\t}\r\n\t\t\t\treturn matches.concat(_matches);\r\n\t\t\t}, []);\r\n\t\t};\r\n\t\tvar addedState = new Set(), removedState = new Set();\r\n\t\tvar fire = (list, state, isTransient) => {\r\n\t\t\tif ((state && params.on === 'removed') || (!state && params.on === 'added')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ((list = match(els, list)).length) {\r\n\t\t\t\tif (params.maintainCallState) {\r\n\t\t\t\t\tlist.forEach(el => {\r\n\t\t\t\t\t\tif (state) {\r\n\t\t\t\t\t\t\taddedState.add(el);\r\n\t\t\t\t\t\t\tremovedState.delete(el);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\taddedState.delete(el);\r\n\t\t\t\t\t\t\tremovedState.add(el);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcallback(list, state, isTransient, addedState, removedState);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcallback(list, state, isTransient);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tvar subject = params.context || this.window.document.documentElement;\r\n\t\tvar mo = this._observe(subject, (removed__addedNodes, added__removedNodes, addedNodes, removedNodes) => {\r\n\t\t\tif (!params.ignoreTransients) {\r\n\t\t\t\tfire(removed__addedNodes, 0, true);\r\n\t\t\t\tfire(removed__addedNodes.concat(added__removedNodes), 1, true);\r\n\t\t\t\tfire(added__removedNodes, 0, true);\r\n\t\t\t}\r\n\t\t\tfire(removedNodes, 0);\r\n\t\t\tfire(addedNodes, 1);\r\n\t\t});\r\n\t\treturn mo;\r\n\t}\r\n\r\n\t/**\r\n\t * ---------------------\r\n\t * MUTATIONS\r\n\t * ---------------------\r\n\t */\r\n\r\n\t/**\r\n\t * Observes changes in attributes of the given element.\r\n\t *\r\n\t * @param Element\t\t\t\t\tel\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param array\t\t\t\t\t\tfilter\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonAttrChange(el, callback, filter = []) {\r\n\t\tvar observer = new this.window.MutationObserver(callback);\r\n\t\tvar params = {attributes:true, attributeOldValue:true};\r\n\t\tif (filter) {\r\n\t\t\tparams.attributeFilter = filter;\r\n\t\t}\r\n\t\tobserver.observe(el, params);\r\n\t\treturn observer;\r\n\t}\r\n\r\n\t/**\r\n\t * Observes changes in tree/subtree of the given element.\r\n\t *\r\n\t * @param Element\t\t\t\t\tel\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param bool\t\t\t\t\t\tsubtree\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonTreeChange(el, callback, subtree = false) {\r\n\t\tvar observer = new this.window.MutationObserver(callback);\r\n\t\tvar params = {childList:true, subtree};\r\n\t\tobserver.observe(el, params);\r\n\t\treturn observer;\r\n\t}\r\n\r\n\t/**\r\n\t * Observes mutations on the given element.\r\n\t *\r\n\t * @param Element\t\t\t\t\tel\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return MutationObserver\r\n\t */\r\n\tonMutation(el, callback, params) {\r\n\t\tvar observer = new this.window.MutationObserver(callback);\r\n\t\tobserver.observe(el, params);\r\n\t\treturn observer;\r\n\t}\r\n\r\n\t/**\r\n\t * \r\n\t * @param Element subject \r\n\t * @param Function callback \r\n\t */\r\n\t_observe(subject, callback) {\r\n\t\tif (!MutationObserversCache.has(subject)) {\r\n\t\t\tconst callbacks = new Set();\r\n\t\t\tconst observer = new this.window.MutationObserver(mutations => {\r\n\t\t\t\tif (!callbacks.size) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar addedNodes = mutations.reduce((list, mut) => list.concat(_arrFrom(mut.addedNodes)), []),\r\n\t\t\t\tremovedNodes = mutations.reduce((list, mut) => list.concat(_arrFrom(mut.removedNodes)), []),\r\n\t\t\t\tremoved__addedNodes = [],\r\n\t\t\t\tadded__removedNodes = [];\r\n\r\n\t\t\t\taddedNodes = new Set(addedNodes);\r\n\t\t\t\tremovedNodes = new Set(removedNodes);\r\n\t\t\t\taddedNodes.forEach(el => {\r\n\t\t\t\t\tif (removedNodes.has(el)) {\r\n\t\t\t\t\t\tremovedNodes.delete(el);\r\n\t\t\t\t\t\taddedNodes.delete(el);\r\n\t\t\t\t\t\tif (el.isConnected) {\r\n\t\t\t\t\t\t\tremoved__addedNodes.push(el);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tadded__removedNodes.push(el);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\taddedNodes = [...addedNodes];\r\n\t\t\t\tremovedNodes = [...removedNodes];\r\n\r\n\t\t\t\tcallbacks.forEach(callback => callback(removed__addedNodes, added__removedNodes, addedNodes, removedNodes));\r\n\t\t\t});\r\n\t\t\tobserver.observe(subject, {childList:true, subtree:true});\r\n\t\t\tMutationObserversCache.set(subject, {callbacks, observer});\r\n\t\t}\r\n\t\tconst _observer = MutationObserversCache.get(subject);\r\n\t\t_observer.callbacks.add(callback);\r\n\t\treturn {disconnect() {\r\n\t\t\t_observer.callbacks.delete(callback);\r\n\t\t}, reconnect() {\r\n\t\t\t_observer.callbacks.add(callback);\r\n\t\t}};\r\n\t}\r\n};\r\n\r\nconst MutationObserversCache = new Map();\r\n", "\r\n/**\r\n * Applies all supported polyfills\r\n */\r\nexport default function(window) {\r\n CSS_escape(window);\r\n Node_isConnected(window);\r\n Element_matches(window);\r\n}\r\n\r\n/**\r\n * Polyfills the window.CSS object.\r\n * \r\n * @return void\r\n */\r\nexport function CSS_escape(window) {\r\n if (!window.CSS) {\r\n window.CSS = {};\r\n }\r\n if (!window.CSS.escape) {\r\n /**\r\n * Polyfills the window.CSS.escape() function.\r\n * \r\n * @param string str \r\n * \r\n * @return string\r\n */\r\n window.CSS.escape = str => str.replace(/([\\:@\\~\\$\\&])/g, '\\\\$1');\r\n }\r\n}\r\n\r\n/**\r\n * Polyfills the Node.prototype.isConnected property\r\n * \r\n * @see MDN\r\n * \r\n * @return bool\r\n*/\r\nexport function Node_isConnected(window) {\r\n if (!('isConnected' in window.Node.prototype)) {\r\n Object.defineProperty(window.Node.prototype, 'isConnected', {get: function() {\r\n return !this.ownerDocument || !(\r\n this.ownerDocument.compareDocumentPosition(this)\r\n & this.DOCUMENT_POSITION_DISCONNECTED);\r\n }});\r\n }\r\n}\r\n\r\n/**\r\n * Polyfills the Element.prototype.matches() method\r\n * \r\n * @see MDN\r\n * \r\n * @return void\r\n*/\r\nexport function Element_matches(window) {\r\n if (!window.Element.prototype.matches) {\r\n window.Element.prototype.matches = \r\n window.Element.prototype.matchesSelector || \r\n window.Element.prototype.mozMatchesSelector ||\r\n window.Element.prototype.msMatchesSelector || \r\n window.Element.prototype.oMatchesSelector || \r\n window.Element.prototype.webkitMatchesSelector ||\r\n function(s) {\r\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1; \r\n };\r\n }\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport _isString from '@webqit/util/js/isString.js';\r\nimport _arrFrom from '@webqit/util/arr/from.js';\r\nimport init from '../index.js';\r\n\r\n/**\r\n * Creates one or a list of DOM elements\r\n * from an input of markup, selector, HTMLElement.\r\n *\r\n * @param mixed \t\t\t\tinput\r\n * @param document|Element\t context\r\n * @param bool\t\t \t\t\tall\r\n *\r\n * @return Element|Array\r\n */\r\nexport default function query(input, context = null, all = false) {\r\n\tconst WebQit = init.call(this);\r\n\tif (_isString(input)) {\r\n\t\tvar els;\r\n\t\tif (input.trim().startsWith('<')) {\r\n\t\t\t// Create a node from markup\r\n\t\t\tvar temp = WebQit.window.document.createElement('div');\r\n\t\t\ttemp.innerHTML = input;\r\n\t\t\tels = all ? _arrFrom(temp.children) : temp.firstChild;\r\n\t\t} else {\r\n\t\t\tels = all ? _arrFrom(querySelectorAll.call(this, input, context)) : querySelector.call(this, input, context);\r\n\t\t}\r\n\t\treturn els;\r\n\t}\r\n\tif (input instanceof WebQit.window.Element) {\r\n\t\treturn all ? [input] : input;\r\n\t}\r\n\treturn all ? _arrFrom(input) : input;\r\n}\r\n\r\n/**\r\n * Creates a list of DOM elements\r\n * from an input of markup, selector, HTMLElement.\r\n *\r\n * @param mixed \t\t\t\tinput\r\n * @param document|Element\t context\r\n *\r\n * @return Array\r\n */\r\nexport function queryAll(selector, context = null) {\r\n return query.call(this, selector, context, true);\r\n}\r\n\r\n/**\r\n * Queries a DOM context for elements matching\r\n * the given selector.\r\n *\r\n * @param string \t\t\t\tselector\r\n * @param document|Element\t context\r\n * @param bool\t\t \t\t\tall\r\n *\r\n * @return Element|DOMNodeList\r\n */\r\nexport function querySelector(selector, context = null, all = false) {\r\n\tconst WebQit = init.call(this);\r\n context = context || WebQit.window.document;\r\n\tvar matchedItems, method = all ? 'querySelectorAll' : 'querySelector';\r\n\ttry {\r\n\t\tmatchedItems = context[method](selector);\r\n\t} catch(e) {\r\n\t\ttry {\r\n\t\t\tmatchedItems = context[method](selector.replace(/\\:is\\(/g, ':matches('));\r\n\t\t} catch(e) {\r\n\t\t\ttry {\r\n\t\t\t\tmatchedItems = context[method](selector.replace(/\\:is\\(/g, ':-webkit-any('));\r\n\t\t\t} catch(e) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tmatchedItems = context[method](selector.replace(/\\:is\\(/g, ':-moz-any('));\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn matchedItems;\r\n}\r\n\r\n/**\r\n * Queries a DOM context for elements matching\r\n * the given selector.\r\n *\r\n * @param string \t\t\t\tselector\r\n * @param document|Element\t context\r\n *\r\n * @return DOMNodeList\r\n */\r\nexport function querySelectorAll(selector, context = null) {\r\n return querySelector.call(this, selector, context, true);\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isTypeFunction from './isTypeFunction.js';\r\n\r\n/**\r\n * Tells if val is of type \"function\".\r\n *\r\n * @param object \t\tval\r\n *\r\n * @return bool\r\n */\r\nexport default function(val) {\r\n\treturn _isTypeFunction(val) || (val && {}.toString.call(val) === '[object function]');\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isTypeObject from '../js/isTypeObject.js';\r\nimport _isUndefined from '../js/isUndefined.js';\r\nimport _isNull from '../js/isNull.js';\r\nimport _arrFrom from '../arr/from.js';\r\n\r\n/**\r\n * Retrieves the value at the given path.\r\n *\r\n * A return value of undefined is ambiguous, and can mean either that the\r\n * path does not exist, or that the path actually exists but with a value of undefined. If it is required to\r\n * know whether the path actually exists, pass an object as a third argument.\r\n * This object will have an \"exists\" key set to true/false.\r\n *\r\n * @param object \t\t\t\tctxt\r\n * @param array \t\t\t\tpath\r\n * @param object \t\t\t\ttrap\r\n * @param object \t\t\t\treciever\r\n *\r\n * @return mixed\r\n */\r\nexport default function(ctxt, path, trap = {}, reciever = {}) {\r\n\tpath = _arrFrom(path).slice();\r\n\tvar _ctxt = ctxt;\r\n\twhile(!_isUndefined(_ctxt) && !_isNull(_ctxt) && path.length) {\r\n\t\tvar _key = path.shift();\r\n\t\tif (!(trap.get ? trap.get(_ctxt, _key) : (_isTypeObject(_ctxt) ? _key in _ctxt : _ctxt[_key]))) {\r\n\t\t\treciever.exists = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t_ctxt = trap.get ? trap.get(_ctxt, _key) : _ctxt[_key];\r\n\t}\r\n\treciever.exists = true;\r\n\treturn _ctxt;\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isTypeObject from '../js/isTypeObject.js';\r\nimport _isFunction from '../js/isFunction.js';\r\nimport _isNumeric from '../js/isNumeric.js';\r\nimport _isArray from '../js/isArray.js';\r\nimport _arrFrom from '../arr/from.js';\r\nimport _get from './get.js';\r\n\r\n/**\r\n * Sets a value to the given path.\r\n *\r\n * @param object \t\t\t\tobj\r\n * @param array \t\t\t\tpath\r\n * @param mixed \t\t\t\tval\r\n * @param object|function \t\tbuildTree\r\n * @param object \t\t\t\ttrap\r\n *\r\n * @return bool\r\n */\r\nexport default function(obj, path, val, buildTree = {}, trap = {}) {\r\n\tconst _set = (target, key, val) => {\r\n\t\tif (trap.set) {\r\n\t\t\treturn trap.set(target, key, val);\r\n\t\t} else {\r\n\t\t\tif (_isNumeric(path[i]) && _isArray(target)) {\r\n\t\t\t\ttarget.push(val);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = val;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\tpath = _arrFrom(path);\r\n\tvar target = obj;\r\n\tfor(var i = 0; i < path.length; i ++) {\r\n\t\tif (i < path.length - 1) {\r\n\t\t\tif (!target || (!_isTypeObject(target) && !_isFunction(target))) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tvar branch = _get(target, path[i], trap);\r\n\t\t\tif (!_isTypeObject(branch)) {\r\n\t\t\t\tif (trap.buildTree === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tbranch = _isFunction(trap.buildTree) ? trap.buildTree(i) : (_isNumeric(path[i + 1]) ? [] : {});\r\n\t\t\t\tvar branchSuccess = _set(target, path[i], branch);\r\n\t\t\t\tif (!branchSuccess) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttarget = branch;\r\n\t\t} else {\r\n\t\t\treturn _set(target, path[i], val);\r\n\t\t}\r\n\t}\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _isTypeObject from '../js/isTypeObject.js';\r\nimport _isFunction from '../js/isFunction.js';\r\nimport _arrFrom from '../arr/from.js';\r\nimport _get from './get.js';\r\n\r\n/**\r\n * Unsets a value from the given path.\r\n *\r\n * @param object \t\t\t\tobj\r\n * @param array \t\t\t\tpath\r\n * @param bool|function \t\treduceTree\r\n * @param object \t\t\t\ttrap\r\n *\r\n * @return bool\r\n */\r\nexport default function(obj, path, reduceTree = false, trap = {}) {\r\n\tpath = _arrFrom(path);\r\n\tvar success = false;\r\n\tdo {\r\n\t\tvar lastKey = path.pop();\r\n\t\tvar lastKey = lastKey === ''/*null*/ ? 0 : lastKey;\r\n\t\tvar _obj = obj;\r\n\t\tif (path.length) {\r\n\t\t\t_obj = _get(obj, path, {}/*reciever*/, trap);\r\n\t\t}\r\n\t\tif ((_isTypeObject(_obj) || _isFunction(_obj)) && (trap.has ? trap.has(_obj, lastKey) : lastKey in _obj)) {\r\n\t\t\tif (trap.deleteProperty) {\r\n\t\t\t\tsuccess = trap.deleteProperty(_obj, lastKey);\r\n\t\t\t} else if (trap.del) {\r\n\t\t\t\tsuccess = trap.del(_obj, lastKey);\r\n\t\t\t} else {\r\n\t\t\t\tdelete _obj[lastKey];\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\t\t}\r\n\t} while (success && reduceTree && path.length && (_isTypeObject(_obj) || _isFunction(_obj)) && !(trap.keys ? trap.keys(_obj) : Object.keys(_obj)).length);\r\n\treturn success;\r\n};\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport _get from './get.js';\r\n\r\n/**\r\n * Tells if the given path exists.\r\n *\r\n * @param object \t\t\t\tobj\r\n * @param array \t\t\t\tpath\r\n * @param object \t\t\t\ttrap\r\n *\r\n * @return bool\r\n */\r\nexport default function(obj, path, trap = {}) {\r\n\tvar reciever = {};\r\n\t_get(obj, path, trap, reciever);\r\n\treturn reciever.exists;\r\n};\r\n", "\n/**\n * @imports\n */\nimport _isNumeric from '@webqit/util/js/isNumeric.js';\nimport _isObject from '@webqit/util/js/isObject.js';\nimport _merge from '@webqit/util/obj/merge.js';\nimport _set from '@webqit/util/obj/set.js';\nimport _get from '@webqit/util/obj/get.js';\nimport _del from '@webqit/util/obj/del.js';\nimport _has from '@webqit/util/obj/has.js';\nimport init from '../index.js';\n\n/**\n * A WebQit's meta tag props reader.\n * \n * @param String name\n * @param Bool\t readWrite\n * \n * @return Object\n */\nexport default function meta(name, readWrite = false) {\n const WebQit = init.call(this);\n var metaInstance = {};\n\n // Initialize reader\n if (!(metaInstance.el = WebQit.window.document.head.querySelector('meta[name=\"oohtml\"]')) && readWrite) {\n metaInstance.el = WebQit.window.document.createElement('meta');\n metaInstance.el.setAttribute('name', name);\n WebQit.window.document.head.append(metaInstance.el);\n }\n if (metaInstance.el) {\n metaInstance.vars = (metaInstance.el.getAttribute('content') || '').split(';').filter(v => v).reduce((_metaVars, directive) => {\n var directiveSplit = directive.split('=').map(d => d.trim());\n _set(_metaVars, directiveSplit[0].split('.'), directiveSplit[1] === 'true' \n ? true : (directiveSplit[1] === 'false' \n ? false : (_isNumeric(directiveSplit[1]) ? parseInt(directiveSplit[1]) : directiveSplit[1])\n )\n );\n return _metaVars;\n }, {});\n }\n\n // Read prop...\n metaInstance.get = function(prop) {\n return _get(this.vars, prop.split('.'));\n }\n\n // Write prop...\n metaInstance.set = function(prop, val = null, asDefaults = false) {\n var props = _isObject(prop) ? prop : {[prop]: val === true ? 'true' : val};\n asDefaults = arguments.length < 3 ? val : asDefaults;\n Object.keys(props).forEach(name => {\n if (props[name] === false) {\n _del(this.vars, name.split('.'));\n } else if (_isObject(props[name])) {\n Object.keys(props[name]).forEach(_prop => {\n var _path = (name + '.' + _prop).split('.');\n if (!asDefaults || !_has(this.vars, _path)) {\n _set(this.vars, _path, props[name][_prop]);\n }\n });\n } else {\n var _path = name.split('.');\n if (!asDefaults || !_has(this.vars, _path)) {\n _set(this.vars, _path, props[name]);\n }\n }\n });\n if (readWrite) {\n const flatten = (base, obj) => Object.keys(obj).reduce((arr, name) => {\n var path = (base ? base + '.' : '') + name;\n if (_isObject(obj[name])) {\n arr.push(...flatten(path, obj[name]));\n } else {\n arr.push(path + '=' + obj[name]);\n }\n return arr;\n }, []);\n this.el.setAttribute('content', flatten('', this.vars).join(';'));\n }\n return true;\n }\n\n // Write prop...\n metaInstance.defaults = function(prop, val = null) {\n return this.set(prop, val, true);\n };\n\n return metaInstance;\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport init from '../index.js';\r\nimport Reflow from './Reflow.js';\r\nimport Mutations from './Mutations.js';\r\nimport polyfill from './polyfills.js';\r\nimport query, { queryAll, querySelector, querySelectorAll } from './query.js';\r\nimport ready from './ready.js';\r\nimport meta from './meta.js';\r\n\r\n/**\r\n * ---------------------------\r\n * Ctxt-Scope initializations.\r\n * ---------------------------\r\n */\r\n\r\nexport default function() {\r\n const WebQit = init.call(this);\r\n if (WebQit.DOM) {\r\n return WebQit;\r\n }\r\n WebQit.DOM = {};\r\n polyfill(WebQit.window);\r\n WebQit.DOM.reflow = new Reflow(WebQit.window);\r\n WebQit.DOM.mutations = new Mutations(WebQit.window);\r\n WebQit.DOM.meta = meta.bind(WebQit.window);\r\n WebQit.DOM.query = query.bind(WebQit.window);\r\n WebQit.DOM.queryAll = queryAll.bind(WebQit.window);\r\n WebQit.DOM.ready = ready.bind(WebQit.window);\r\n // ------\r\n return WebQit;\r\n}\r\n\r\nexport {\r\n meta,\r\n query,\r\n queryAll,\r\n querySelector,\r\n querySelectorAll,\r\n ready,\r\n}", "\n/**\n * @imports\n */\nimport _before from './before.js';\n\n/**\n * Return the part of a string before last occurence of a given value.\n *\n * @param string subject\n * @param string search\n *\n * @return string\n */\nexport default function(subject, search) {\n\treturn _before(subject, search, true);\n};\n", "\n/**\n * @imports\n */\nimport _after from './after.js';\nimport _beforeLast from './beforeLast.js';\n\n/**\n * Returns the string without the given opening and closing tags.\n *\n * @param string subject\n * @param string openingTag\n * @param string closingTag\n *\n * @return string\n */\nexport default function(subject, openingTag, closingTag) {\n\treturn _beforeLast(_after(subject, openingTag), closingTag);\n};\n", "\n/**\n * Tells if the string is warapped with the given opening and closing tags.\n *\n * @param string subject\n * @param string openingTag\n * @param string closingTag\n *\n * @return bool\n */\nexport default function(subject, openingTag, closingTag) {\n\treturn subject.startsWith(openingTag) && subject.endsWith(closingTag);\n};\n", "\n/**\n * @imports\n */\nimport _isString from '../js/isString.js';\nimport _isUndefined from '../js/isUndefined.js';\nimport _isFunction from '../js/isFunction.js';\nimport _arrFrom from '../arr/from.js';\nimport _flatten from '../arr/flatten.js';\nimport _first from '../arr/first.js';\nimport _last from '../arr/last.js';\nimport _merge from '../obj/merge.js';\nimport _even from '../obj/even.js';\nimport _copyPlain from '../obj/copyPlain.js';\n\n/**\n * --------------------------\n * TOKENIZER\n * --------------------------\n */\n\nexport default class Lexer {\n\n\t/**\n\t * Factory method.\n\t *\n\t * Handles caching.\n\t *\n\t * @see constructor()\n\t */\n\tstatic lex(str, delims, options = {}) {\n\t\tif (!_isString(str = str + '')) {\n\t\t\tthrow new Error('Argument1 must be a string!');\n\t\t}\n\t\tvar copyResult = result => {\n\t\t\treturn {\n\t\t\t\tdelims: result.delims.slice(),\n\t\t\t\toptions: _copyPlain(result.options),\n\t\t\t\tnesting: result.nesting.slice(),\n\t\t\t\tmaxDepth: result.maxDepth,\n\t\t\t\tcomments: result.comments.slice(),\n\t\t\t\ttokens: result.tokens.slice(),\n\t\t\t\tmatches: result.matches.slice(),\n\t\t\t\tmatchesi: _copyPlain(result.matchesi),\n\t\t\t};\n\t\t};\n\t\t// ASK CACHE ---------------------------\n\t\tif (Lexer.$cache[str] && options.cache !== false) {\n\t\t\tfor (var i = 0; i < Lexer.$cache[str].length; i ++) {\n\t\t\t\tvar cached = Lexer.$cache[str][i];\n\t\t\t\tif (_even(cached.delims, delims)) {\n\t\t\t\t\treturn copyResult(cached);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// FRESH PARSE\t -------------------------------\n\t\tvar instance = new Lexer(str, options);\n\t\tvar result = instance.lex(delims);\n\t\t// SAVE TO CACHE -------------------------------\n\t\tif (options.cache !== false) {\n\t\t\tLexer.$cache[str] = Lexer.$cache[str] || [];\n\t\t\tLexer.$cache[str].push(result);\n\t\t}\n\t\treturn copyResult(result);\n\t\t\n\t}\n\n\t/**\n\t * Factory method for .split().\n\t *\n\t * Handles caching.\n\t *\n\t * @see constructor()\n\t */\n\tstatic split(str, delims, options) {\n\t\treturn Lexer.lex(str, delims, options).tokens;\n\t}\n\n\t/**\n\t * Factory method for .match().\n\t *\n\t * Handles caching.\n\t *\n\t * @see constructor()\n\t */\n\tstatic match(str, delims, options) {\n\t\treturn Lexer.lex(str, delims, options).matches;\n\t}\n\n\t/**\n\t * Creates a lexer instance on a string with the given options.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions:\n\t * @param string \t\tblocks\t\t\t\tThe strings that begin and end a nested structure\n\t * @param number \t\tlimit\t\t\t\tMax results to return\n\t * @param string \t\tbackreference\t\tA character like (\\) that prefixes non-delim characters\n\t *\n\t * @return array\n\t */\n\tconstructor(str, options) {\n\t\tif (!_isString(str)) {\n\t\t\tthrow new Error('Lexer requires the first argument to be a string.');\n\t\t}\n\t\tthis.$str = str;\n\t\tthis.$options = options || {};\n\t\tif (!this.$options.blocks) {\n\t\t\tthis.$options.blocks = Lexer.$blocks;\n\t\t}\n\t\tif (!this.$options.quotes) {\n\t\t\tthis.$options.quotes = Lexer.$quotes;\n\t\t}\n\t\tif (!this.$options.comments) {\n\t\t\tthis.$options.comments = Lexer.$comments;\n\t\t}\n\t}\n\n\t/**\n\t * Parses the instance string on the given delimeters.\n\t *\n\t * This method supports static calling,\n\t * in which case a string is required as the first argument.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions\n\t *\n\t * @return object\n\t */\n\tlex(delims, options) {\n\t\tvar runtime = {\n\t\t\tdelims: _arrFrom(delims),\n\t\t\toptions: _merge(true, {}, this.$options, options || {}),\n\t\t\tnesting: [],\n\t\t\tmaxDepth: 0,\n\t\t\tcomments: [],\n\t\t\ttokens: [],\n\t\t\tmatches: [],\n\t\t\tmatchesi: {},\n\t\t};\n\t\t// Iterate over each character, keep track of current row and column (of the returned array)\n\t\tvar cursor = 0;\n\t\twhile(typeof cursor === 'number') {\n\t\t\tcursor = this._evalCharsAt(runtime, cursor);\n\t\t}\n\t\tif (runtime.nesting.length) {\n\t\t\tthrow new Error('Error parsing the string: ' + this.$str + '. Unterminated blocks: ' + _flatten(runtime.nesting).join(', ') + '');\n\t\t}\n\t\t// RETURN NEW ----------------------------------\n\t\treturn runtime;\n\t}\n\n\t/**\n\t * Expr helper: evaluates and handles the character on the current cursor.\n\t * Advances the cursor.\n\t *\n\t * @param object \truntime\n\t * @param int\t\ti\n\t *\n\t * @return void\n\t */\n\t_evalCharsAt(runtime, i) {\n\t\tif (i >= this.$str.length) {\n\t\t\treturn;\n\t\t}\n\t\tvar charWidth = 1;\n\t\tvar commentTest = {}, quoteTest = {}, nestingTest = {};\n\t\t// Quotes inside comments must be ignored\n\t\tif (!runtime.openComment) {\n\t\t\tquoteTest = this._testQuotes(runtime, i);\n\t\t}\n\t\t// Comments inside quotes must be ignored\n\t\tif (!runtime.openQuote) {\n\t\t\tcommentTest = this._testComments(runtime, i);\n\t\t}\n\t\t// Save comments\n\t\tif (runtime.openComment || commentTest.ending) {\n\t\t\t// Save only outer comments\n\t\t\tif (!runtime.nesting.length && !nestingTest.ending) {\n\t\t\t\tvar chars = commentTest.starting || commentTest.ending || this.$str[i];\n\t\t\t\tcharWidth = chars.length;\n\t\t\t\tthis._push(runtime, chars, 'comments', commentTest.starting);\n\t\t\t} else {\n\t\t\t\tthis._push(runtime, this.$str[i]);\n\t\t\t}\n\t\t} else if (runtime.openQuote || quoteTest.ending) {\n\t\t\t// Yes add quotes\n\t\t\tthis._push(runtime, this.$str[i]);\n\t\t} else if (runtime.options.limit && runtime.matches.length === runtime.options.limit) {\n\t\t\tthis._push(runtime, this.$str[i]);\n\t\t\treturn i + 1;\n\t\t} else {\n\t\t\t// Nesting tags inside comments and quotes have been ignored\n\t\t\tnestingTest = this._testNesting(runtime, i);\n\t\t\t// ---------------------\n\t\t\t// STOP ON THIS CHARACTER...?\n\t\t\t// ---------------------\n\t\t\tvar nestingTest = this._testNesting(runtime, i);\n\t\t\t// STOP CHAR(S)? at top level?\n\t\t\tvar stopChar = this._testChars(runtime.options.stopChars || [], runtime, i);\n\t\t\tif (!runtime.nesting.length && stopChar !== false) {\n\t\t\t\truntime.options.stopChar = stopChar;\n\t\t\t\truntime.options.stopCharForward = this.$str.substr(i);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// ---------------------\n\t\t\t// Match and split now...\n\t\t\t// ---------------------\n\t\t\tif (!runtime.delims.length) {\n\t\t\t\t// BLOCK-BASED SPLITTING...\n\t\t\t\tif (runtime.nesting.length === 2 && nestingTest.starting) {\n\t\t\t\t\truntime.matches.push(null);\n\t\t\t\t\tthis._push(runtime, nestingTest.starting);\n\t\t\t\t\tcharWidth = nestingTest.starting.length;\n\t\t\t\t} else if (!runtime.nesting.length && nestingTest.ending) {\n\t\t\t\t\tthis._push(runtime, nestingTest.ending);\n\t\t\t\t\tcharWidth = nestingTest.ending.length;\n\t\t\t\t\truntime.matches.push(null);\n\t\t\t\t} else/*no-nesting flag*/ {\n\t\t\t\t\tthis._push(runtime, this.$str[i]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// ---------------------\n\t\t\t\t// DELIMS-BASED SPLITTING\n\t\t\t\t// ---------------------\n\t\t\t\tif (!runtime.nesting.length && !nestingTest.ending) {\n\t\t\t\t\t// In case the chars at index 0 is a delim,\n\t\t\t\t\t// the resulting split should first have an empty string, instead of undefined\n\t\t\t\t\tthis._push(runtime, '');\n\t\t\t\t\tvar matchedDelim = this._testChars(runtime.delims, runtime, i);\n\t\t\t\t\tif (matchedDelim !== false) {\n\t\t\t\t\t\truntime.matches.push(matchedDelim);\n\t\t\t\t\t\truntime.matchesi[i] = matchedDelim;\n\t\t\t\t\t\tcharWidth = matchedDelim.length || 1;\n\t\t\t\t\t\tif (!runtime.options.preserveDelims) {\n\t\t\t\t\t\t\t// The current character is a delimiter...\n\t\t\t\t\t\t\t// and should not get to appending to the split series down the line\n\t\t\t\t\t\t\tvar nextIndex = i + (matchedDelim.length || 1);\n\t\t\t\t\t\t\tif (nextIndex === this.$str.length) {\n\t\t\t\t\t\t\t\t// In case the chars at last index is a delim,\n\t\t\t\t\t\t\t\t// the resulting split should last have an empty string\n\t\t\t\t\t\t\t\tthis._push(runtime, '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn nextIndex;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._push(runtime, matchedDelim || this.$str[i]);\n\t\t\t\t} else {\n\t\t\t\t\tvar chars = nestingTest.starting || nestingTest.ending || this.$str[i];\n\t\t\t\t\tcharWidth = chars.length;\n\t\t\t\t\tthis._push(runtime, chars);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn i + charWidth;\n\t}\n\n\t/**\n\t * Expr helper: tests for a quote start/end character on the current cursor.\n\t *\n\t * @param object\truntime\n\t * @param int\t\ti\n\t *\n\t * @return object\n\t */\n\t_testQuotes(runtime, i) {\n\t\tvar result = {};\n\t\t(runtime.options.quotes || []).forEach(quote => {\n\t\t\tif (this.$str.substr(i, 1) === quote) {\n\t\t\t\tif (!runtime.openQuote) {\n\t\t\t\t\truntime.openQuote = quote;\n\t\t\t\t\tresult.starting = quote;\n\t\t\t\t} else if (quote === runtime.openQuote) {\n\t\t\t\t\truntime.openQuote = false;\n\t\t\t\t\tresult.ending = quote;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t}\n\n\t/**\n\t * Expr helper: tests for a comment start/end character on the current cursor.\n\t *\n\t * @param object\truntime\n\t * @param int\t\ti\n\t *\n\t * @return object\n\t */\n\t_testComments(runtime, i) {\n\t\tvar result = {};\n\t\t(runtime.options.comments || []).forEach(block => {\n\t\t\tif (!runtime.openComment) {\n\t\t\t\tvar starting = _first(block);\n\t\t\t\tif (this.$str.substr(i).startsWith(starting)) {\n\t\t\t\t\truntime.openComment = block;\n\t\t\t\t\tresult.starting = starting;\n\t\t\t\t}\n\t\t\t} else if (_last(block) === _last(runtime.openComment)) {\n\t\t\t\tvar ending = _last(block);\n\t\t\t\tif (this.$str.substr(i).startsWith(ending)) {\n\t\t\t\t\truntime.openComment = false;\n\t\t\t\t\tresult.ending = ending;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t}\n\n\t/**\n\t * Expr helper: tests for a nesting start/end character on the current cursor.\n\t *\n\t * @param object\truntime\n\t * @param int\t\ti\n\t *\n\t * @return object\n\t */\n\t_testNesting(runtime, i) {\n\t\tvar result = {};\n\t\t(runtime.options.blocks || []).forEach(block => {\n\t\t\tvar starting = _first(block);\n\t\t\tif (this.$str.substr(i).startsWith(starting)) {\n\t\t\t\truntime.nesting = runtime.nesting.concat([block]);\n\t\t\t\tresult.starting = starting;\n\t\t\t} else if (runtime.nesting.length && _last(block) === _last(_last(runtime.nesting))) {\n\t\t\t\tvar ending = _last(block);\n\t\t\t\tif (this.$str.substr(i).startsWith(ending)) {\n\t\t\t\t\truntime.nesting = runtime.nesting.slice(0, -1);\n\t\t\t\t\tresult.ending = ending;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\truntime.maxDepth = Math.max(runtime.maxDepth, runtime.nesting.length);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Expr helper: tests for a delimiter or stop character on the current cursor.\n\t *\n\t * @param array\t\ttestList\n\t * @param object \truntime\n\t * @param int\t\ti\n\t *\n\t * @return mixed\n\t */\n\t_testChars(testList, runtime, i) {\n\t\tfor (var k = 0; k < testList.length; k ++) {\n\t\t\tvar test = testList[k];\n\t\t\tif (_isFunction(test)) {\n\t\t\t\tvar ret = test(this.$str.substr(0, i), this.$str.substr(i), runtime.tokens.slice());\n\t\t\t\tif (ret !== false) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (runtime.options.useRegex) {\n\t\t\t\tvar m = this.$str.substr(i).match(new RegExp('^' + test, runtime.options.useRegex !== true ? runtime.options.useRegex : ''));\n\t\t\t\tif (m) {\n\t\t\t\t\treturn m[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((!runtime.options.ci && this.$str.substr(i, test.length) === test)\n\t\t\t|| (runtime.options.ci && this.$str.substr(i, test.length).toLowerCase() === test.toLowerCase())) {\n\t\t\t\treturn test;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t/**\n\t * Expr helper: pushes a character or set of characters into the current split series.\n\t *\n\t * @param object \truntime\n\t * @param string\tchars\n\t * @param string\ttarget\n\t * @param bool\t\tisNewSeries\n\t *\n\t * @return void\n\t */\n\t_push(runtime, chars, target = 'tokens', isNewSeries = false) {\n\t\tvar splitSeries = runtime.matches.length;\n\t\tif (_isUndefined(runtime.tokens[splitSeries])) {\n\t\t\truntime.tokens[splitSeries] = '';\n\t\t}\n\n\t\tif (target === 'comments') {\n\t\t\tif (!runtime.tokens[splitSeries].comments) {\n\t\t\t\truntime.tokens[splitSeries] = new String(runtime.tokens[splitSeries]);\n\t\t\t\truntime.tokens[splitSeries].comments = [];\n\t\t\t}\n\t\t\tvar splitSeries2 = runtime.tokens[splitSeries].comments.length - (!runtime.tokens[splitSeries].comments.length || isNewSeries ? 0 : 1);\n\t\t\truntime.tokens[splitSeries].comments[splitSeries2] = (runtime.tokens[splitSeries].comments[splitSeries2] || '') + chars;\n\t\t} else {\n\t\t\tvar comments = runtime.tokens[splitSeries].comments;\n\t\t\truntime.tokens[splitSeries] = runtime.tokens[splitSeries] + chars;\n\t\t\t//runtime.tokens[splitSeries].comments = comments;\n\t\t}\n\t}\n\n\t/**\n\t * Splits the instance string on the given delimeters and returns the tokens.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions\n\t *\n\t * @return array\n\t */\n\tsplit(str, delims, options) {\n\t\treturn this.lex(delims, options).tokens;\n\t}\n\t\n\t/**\n\t * Splits the instance string on the given delimeters and returns the matches.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions:\n\t *\n\t * @return array\n\t */\n\tmatch(str, delims, options) {\n\t\treturn this.lex(delims, options).matches;\n\t}\n\t\n\t/**\n\t * Parses the instance string on the given delimeters using regex.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions\n\t *\n\t * @return object\n\t */\n\tregParse(delims, options) {\n\t\treturn this.lex(delims, _merge({useRegex: true}, options || {}));\n\t}\n\t\n\t/**\n\t * Splits the instance string on the given delimeters using regex; returns the tokens.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions\n\t *\n\t * @return array\n\t */\n\tregSplit(delims, options) {\n\t\treturn this.regParse(delims, options).tokens;\n\t}\n\t\n\t/**\n\t * Matches the instance string on the given delimeters using regex; returns the matches.\n\t *\n\t * @param string \tstr\n\t * @param object\toptions\n\t *\n\t * @return array\n\t */\n\tregMatch(delims, options) {\n\t\treturn this.regParse(delims, options).matches;\n\t}\n};\n\n/**\n * @var array\n */\nLexer.$blocks = [['(', ')'], ['[', ']'], ['{', '}'],];\n\n/**\n * @var array\n */\nLexer.$quotes = ['\"', \"'\", '`',];\n\n/**\n * @var array\n */\nLexer.$comments = [['/*', '*/'], ['//', \"\\n\"],];\n\n/**\n * @var object\n */\nLexer.$cache = Object.create(null);", "\n/**\n * @imports\n */\nimport domInit from '@webqit/browser-pie/src/dom/index.js';\nimport { _wrapped, _unwrap, _before, _after } from '@webqit/util/str/index.js';\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\nimport { _internals }from '@webqit/util/js/index.js';\nimport { _merge } from '@webqit/util/obj/index.js';\nimport Lexer from '@webqit/util/str/Lexer.js';\n\n/**\n * A OOHTML's meta tag props reader.\n * \n * @param Object defaults\n * \n * @return Object\n */\nexport function config(defaults, overrides = {}) {\n const WebQit = domInit.call(this);\n if (!WebQit.OOHTML) {\n // For feature modules that will call outside of ./index.js module\n WebQit.OOHTML = {};\n }\n if (!WebQit.OOHTML.meta) {\n WebQit.OOHTML.meta = WebQit.DOM.meta('oohtml', true/* readWrite */);\n }\n WebQit.OOHTML.meta.defaults(_merge(3, defaults, overrides));\n return WebQit.OOHTML.meta;\n}\n\n/**\n * Runs a \"scope-query\" against a context.\n *\n * @param Array\t contexts\n * @param String\tquery\n * @param Function\tcollectionCallback\n * @param Function\tadvancementCallback\n *\n * @return Array\n */\nexport function scopeQuery(contexts, query, collectionCallback, advancementCallback = null) {\n var queryPath = query.split('#')[0].split('/').map(n => n.trim()).filter(n => n);\n return execScopeQuery(contexts, queryPath, collectionCallback, advancementCallback);\n}\n\n/**\n * Parses a \"scope-query\" reference expression to seperate the \"reference\" and its \"modifiers\".\n *\n * @param String\texpr\n *\n * @return Array\n */\nexport function parseScopeReferenceExpr(reference) {\n var split = Lexer.split(reference.trim(), [':']);\n reference = split.shift();\n var modifiers = split.reduce((_modifiers, _modifier) => {\n var [ name, parentheses ] = Lexer.split(_modifier.trim(), []);\n _modifiers[name] = _unwrap(parentheses, '(', ')');\n return _modifiers;\n }, {});\n return [ reference, modifiers ];\n}\n\n/**\n * Determines if a given path matches a \"scope-query\".\n *\n * @param String\tquery\n * @param String\tpath\n *\n * @return Bool\n */\nexport function queryMatchPath(query, path) {\n path = path.split('#')[0].split('/').map(n => n.trim()).filter(n => n);\n query = query.split('#')[0].split('/').map(n => n.trim()).filter(n => n);\n return !query.length ? false : query.reduce((prev, segment, i) => {\n if (!prev) return false;\n return Lexer.split(segment.trim(), ['|', '+']).reduce((_prev, _reference) => {\n var [ _reference, modifiers ] = parseScopeReferenceExpr(_reference);\n _reference = _reference.trim();\n var sementIsMatch = _reference === path[i];\n if (!sementIsMatch && (('deep' in modifiers) || ('deepest' in modifiers))) {\n var _sementIsMatch = path.slice(i + 1).reduce((prev, s, i) => {\n return prev > -1 && ('deep' in modifiers) ? prev : (s === _reference ? i : prev);\n }, -1);\n if (_sementIsMatch > -1) {\n var e = path.splice(i, _sementIsMatch + 1);\n sementIsMatch = true;\n }\n }\n return _prev || sementIsMatch;\n }, false);\n }, true);\n}\n\nconst evalAssertExpr = (segment, callback) => {\n return Lexer.split(segment.trim(), ['|', '+'], { preserveDelims: true }).reduce((_result, _reference) => {\n var operator;\n if (_reference.startsWith('|') || _reference.startsWith('+')) {\n operator = _reference.substr(0, 1);\n _reference = _reference.substr(1).trim();\n }\n if (_result.theEnd || (operator === '|' && _result.length)) {\n _result.theEnd = true;\n return _result;\n }\n return _result.concat(callback(_reference.trim()));\n }, []).filter(t => t);\n};\n\nconst evalModuleExpr = (contexts, segment, collectionCallback) => {\n const lookAhead = contexts => contexts.reduce((_list, _module) => _list.concat(...collectionCallback(_module).values()), []);\n return evalAssertExpr(segment, _reference => {\n var [ _reference, modifiers ] = parseScopeReferenceExpr(_reference);\n // ------------\n return contexts.reduce((list, context) => {\n var collection = collectionCallback(context);\n if (_reference === '*') {\n _reference = '(' + collection.keys().join('+') + ')';\n }\n var itemArray = _wrapped(_reference, '(', ')') ? evalModuleExpr([context], _unwrap(_reference, '(', ')'), collectionCallback) : _arrFrom(collection.get(_reference), false);\n // ------------\n var appliedModifiers = [], reapplyAppliedModifiers = expr => `${expr}${appliedModifiers.map(m => `:${m}(${modifiers[m]})`).join('')}`;\n Object.keys(modifiers).forEach(modifier => {\n if (modifier === 'deep' || modifier === 'deepest') {\n var nextLevel = [context];\n while ((modifier === 'deepest' || !itemArray.length) && (nextLevel = lookAhead(nextLevel)).length) {\n var _itemArray = evalModuleExpr(nextLevel, reapplyAppliedModifiers(_reference), collectionCallback);\n if (_itemArray.length) {\n itemArray = _itemArray;\n }\n }\n } else {\n if (modifier === 'having' || modifier === 'not-having') {\n itemArray = itemArray.filter(module => {\n var filterHavingsResult = evalAssertExpr(modifiers[modifier], _filterHavings => collectionCallback(module, _filterHavings));\n return modifier === 'not-having' ? !filterHavingsResult.length : filterHavingsResult.length;\n }); \n }\n appliedModifiers.push(modifier);\n }\n });\n return list.concat(itemArray);\n }, []);\n });\n};\n\nconst execScopeQuery = function(contexts, path, collectionCallback, advancementCallback = null, level = 0) {\n\n if (!path.length) {\n return [];\n }\n\n let segment = path.shift(), isStopSegmentIfCount;\n if (segment.endsWith('.')) {\n isStopSegmentIfCount = true;\n segment = segment.substr(0, segment.length - 1).trim();\n }\n // -----------\n let modules = evalModuleExpr(contexts, segment, collectionCallback);\n modules.forEach(context => {\n if (_internals(context, 'oohtml').has('queryCallback')) {\n _internals(context, 'oohtml').get('queryCallback')();\n }\n });\n // -----------\n if (modules.length && isStopSegmentIfCount) {\n return modules;\n }\n // -----------\n if (path.length) {\n let submodules = execScopeQuery(modules, path.slice(), collectionCallback, advancementCallback, level + 1);\n if (submodules === -1) {\n return advancementCallback(modules, level, true);\n }\n return submodules;\n }\n\n return advancementCallback ? advancementCallback(modules, level) : modules;\n};\n", "\n/**\n * @imports\n */\nimport { _any, _remove, _unique, _difference, _from as _arrFrom } from '@webqit/util/arr/index.js';\nimport { _internals } from '@webqit/util/js/index.js';\nimport { _each } from '@webqit/util/obj/index.js';\nimport domInit from '@webqit/browser-pie/src/dom/index.js';\nimport { config, scopeQuery,\n parseScopeReferenceExpr, queryMatchPath\n} from '../util.js';\n\n/**\n * ---------------------------\n * HTML Partials\n * ---------------------------\n */\n\n/**\n * @init\n * \n * @param Object config\n */\nexport default function init( _config = {} ) {\n\n const WebQit = domInit.call( this );\n if ( _config.onDomReady ) {\n WebQit.DOM.ready( () => {\n init.call( this, { ..._config, onDomReady: false } );\n } );\n return;\n }\n\n const window = WebQit.window;\n const document = WebQit.window.document;\n const mutations = WebQit.DOM.mutations;\n\n const importInertContexts = [];\n const _meta = config.call(this, {\n element: {\n import: 'import',\n },\n attr: {\n importid: 'name',\n exportsearch: 'exportsearch',\n },\n }, _config.params );\n\n _defaultNoInherits.push(_meta.get('attr.importid'), _meta.get('attr.moduleref'));\n const modulerefSelector = '[' + window.CSS.escape(_meta.get('attr.moduleref')) + ']';\n const exportgroupSelector = '[' + window.CSS.escape(_meta.get('attr.exportgroup')) + ']';\n\n // ----------------------\n // Capture slot elements\n // ----------------------\n\n let prev;\n const Import = class/* extends window.HTMLElement*/ {\n\n /*\n static create(el) {\n return el;\n }\n constructor(importEl) {\n super();\n this.el = this;\n }\n */\n\n static create(el) {\n return _internals(this.el, 'oohtml').get('instance') || new Import(el);\n }\n constructor(importEl) {\n this.el = importEl;\n _internals(this.el, 'oohtml').set('instance', this);\n const [ importID, modifiers ] = parseScopeReferenceExpr(importEl.getAttribute(_meta.get('attr.importid')) || 'default');\n _internals(this.el, 'oohtml').set('importID', importID);\n _internals(this.el, 'oohtml').set('importModifiers', modifiers);\n }\n \n /**\n * Called by the Slots hydrator.\n *\n * @param Comment anchorNode\n * @param array slottedElements\n * @param Element compositionBlock\n *\n * @return void\n */\n hydrate(anchorNode, slottedElements, compositionBlock) {\n _internals(this.el, 'oohtml').set('anchorNode', anchorNode);\n _internals(this.el, 'oohtml').set('slottedElements', slottedElements);\n _internals(this.el, 'oohtml').set('compositionBlock', compositionBlock);\n this._bindSlotted(slottedElements);\n this._connectToCompositionBlock();\n }\n \n /**\n * This triggers self-resolution\n *\n * @return void\n */\n connectedCallback() {\n if (!_internals(this.el, 'oohtml').has('anchorNode')) {\n _internals(this.el, 'oohtml').set('anchorNode', _meta.get('isomorphic')\n ? document.createComment(this.el.outerHTML)\n : document.createTextNode(''));\n _internals(this.el, 'oohtml').set('compositionBlock', !this.el.hasAttribute(_meta.get('attr.moduleref'))\n ? this.el.parentNode.closest(modulerefSelector) : (\n this.el.getAttribute(_meta.get('attr.moduleref')).trim().startsWith('~') ? this.el.parentNode.closest(exportgroupSelector) : null\n ));\n this._connectToCompositionBlock();\n }\n WebQit.DOM.ready.call(WebQit, () => {\n this.resolve('connected');\n });\n }\n \n /**\n * Connects the instance to the compositionBlock.\n */\n _connectToCompositionBlock() {\n if (this.compositionBlock) {\n // Now after the update slot ID\n _internals(this.compositionBlock, 'oohtml', 'imports').set(this.importID, this.el);\n }\n }\n\n /**\n * Bind a slotted element.\n *\n * @param array exports\n *\n * @return void\n */\n _bindSlotted(exports) {\n exports.forEach(_export => {\n _export.importReference = this.el;\n });\n _internals(this.el, 'oohtml').set('slottedObserver', mutations.onRemoved(exports, (removed, state, isTransient, addedState, removedState) => {\n if (removedState && removedState.size === exports.length) {\n _internals(this.el, 'oohtml').get('slottedObserver').disconnect();\n }\n removed.forEach(remd => {\n // Let's ensure this wasn't slotted againe\n if (!remd.parentNode) {\n _remove(this.slottedElements, remd);\n }\n // if the slotted hasnt been slotted somewhere\n if (remd.importReference === this.el) {\n delete remd.importReference;\n }\n });\n // If this was the last of the s,ottable in the same family of IDs,\n // we should restore the original slot\n if (!this.slottedElements.length) {\n // Must be assigned bu now\n // for it to be removed in the first place\n if (this.anchorNode.isConnected) {\n this.anchorNode.replaceWith(this.el);\n }\n }\n }, {maintainCallState: true, ignoreTransients: true}));\n }\n\n /**\n * Resolves the slot\n */\n resolve(reason = null) {\n if (_any(importInertContexts, inertContext => this.el.closest(inertContext))) {\n return;\n }\n var getExports = (contexts, moduleref, exportsearch) => {\n var importId = this.importID,\n modifiers = this.importModifiers,\n [ searchA, searchB ] = (('search' in modifiers) || exportsearch !== null) ? ('search' in modifiers ? modifiers.search : exportsearch).split('-').filter(a => a).map(a => parseInt(a || 0)).concat([0, 1000]) : [0, 0];\n const aggrExports = modules => modules.reduce((_exports, _module) => _exports.concat(_internals(_module, 'oohtml', 'exports').get(importId) || []), []);\n return scopeQuery(contexts, moduleref, function(host, prop) {\n var collection = _internals(host, 'oohtml', 'templates');\n if (arguments.length === 1) return collection;\n if (prop.startsWith(':')) return _internals(host, 'oohtml', 'exports').get(prop.substr(1));\n return collection.get(prop);\n }, function(_modules, level, isRewinding) {\n var exportsAggr = aggrExports(_modules);\n if (!exportsAggr.length && level > searchA && searchB) {\n searchB --;\n return -1;\n }\n return exportsAggr;\n });\n };\n // -----------------\n // Global import or scoped slot?\n var templateSource, exports;\n if (this.el.hasAttribute(_meta.get('attr.moduleref'))) {\n // Did we previously had a compositionBlock?\n // Let's remove ourself\n if (this.compositionBlock && _internals(this.compositionBlock, 'oohtml', 'imports').get(this.importID) === this.el) {\n _internals(this.compositionBlock, 'oohtml', 'imports').delete(this.importID);\n }\n templateSource = this.el;\n } else {\n if (!this.compositionBlock) {\n console.warn('Scoped slots must be found within template contexts. [' + this.importID + ']', this.el);\n return;\n }\n templateSource = this.compositionBlock;\n }\n var moduleref = templateSource.getAttribute(_meta.get('attr.moduleref')).trim();\n var exportsearch = this.el.getAttribute(_meta.get('attr.exportsearch'));\n if (templateSource && (exports = getExports([moduleref.startsWith('~') ? this.compositionBlock : document], moduleref, exportsearch)).length) {\n if (_difference(exports, _internals(this.el, 'oohtml').get('originalSlottedElements') || []).length) {\n _internals(this.el, 'oohtml').set('originalSlottedElements', exports);\n this.fill(exports);\n }\n } else {\n _internals(this.el, 'oohtml').set('originalSlottedElements', null);\n this.empty();\n }\n }\n\n /**\n * Fill slot with exports.\n *\n * @param array|Element exports\n *\n * @return void\n */\n fill(exports) {\n exports = _arrFrom(exports, false/* castObject */).map(_export => _export.cloneNode(true));\n // ---------------------\n // Discard previous slotted elements\n // But this intentional removal should not trigger slot restoration\n this.empty(true/* silently */);\n if (this.el.isConnected) {\n this.el.replaceWith(this.anchorNode);\n }\n // ---------------------\n // Slot-in the corresponding exports from template\n exports.forEach(_export => {\n // ---------------------\n // Implement the slot?\n _internals(_export, 'oohtml', 'templates').set('~', this.el);\n // Inherit attributes from the slot element before replacement\n mergeAttributes(_export, this.el);\n // ---------------------\n if (!_export.getAttribute(_meta.get('attr.exportgroup'))) {\n _export.setAttribute(_meta.get('attr.exportgroup'), this.importID);\n }\n // Place slottable\n this.anchorNode.before(_export);\n });\n this._bindSlotted(exports);\n // ---------------------\n // Updatate records\n this.slottedElements.push(...exports);\n }\n\n /**\n * Empty slot.\n *\n * @param bool sliently\n *\n * @return void\n */\n empty(silently = false) {\n if (this.slottedElements) {\n var slottedElements = this.slottedElements;\n if (silently && _internals(this.el, 'oohtml').has('slottedObserver')) {\n _internals(this.el, 'oohtml').get('slottedObserver').disconnect();\n slottedElements = this.slottedElements.splice(0);\n }\n slottedElements.forEach(slottedElement => slottedElement.remove());\n }\n }\n\n /**\n * Returns the slot's name.\n *\n * @return string\n */\n get importID() {\n return _internals(this.el, 'oohtml').get('importID');\n }\n\n /**\n * Returns the slot's import Modifiers.\n *\n * @return string\n */\n get importModifiers() {\n return _internals(this.el, 'oohtml').get('importModifiers');\n }\n\n /**\n * Returns the slot's anchorNode.\n *\n * @return array\n */\n get anchorNode() {\n return _internals(this.el, 'oohtml').get('anchorNode');\n }\n\n /**\n * Returns the slot's compositionBlock, if any.\n *\n * @return array\n */\n get compositionBlock() {\n return _internals(this.el, 'oohtml').get('compositionBlock');\n }\n\n /**\n * Returns the slot's slotted elements.\n *\n * @return array\n */\n get slottedElements() {\n if (!_internals(this.el, 'oohtml').has('slottedElements')) {\n _internals(this.el, 'oohtml').set('slottedElements', []);\n }\n return _internals(this.el, 'oohtml').get('slottedElements');\n }\n\n /**\n * Returns the slot's implementable exports\n *\n * @return array\n */\n get exports() {\n return _internals(this.el, 'oohtml').get('exports');\n }\n \n /**\n * The attributes we want to observe.\n *\n * @return array\n */\n static get observedAttributes() {\n return [_meta.get('attr.importid')];\n }\n };\n\n // ----------------------\n // Capture import elements\n // ----------------------\n\n mutations.onPresent(_meta.get('element.import'), el => {\n var importElInstance = Import.create(el);\n importElInstance.connectedCallback();\n });\n /**\n window.customElements.define(_meta.get('element.import'), Import);\n */\n\n // ----------------------\n // Progressive resolution\n // ----------------------\n \n const resolveSlots = (el, exportName, reason = null) => {\n const shouldResolve = (importElInstance, importName) => {\n return !exportName || importName === exportName || (\n exportName === true && ((importElInstance.importModifiers && ('search' in importElInstance.importModifiers)) || importElInstance.el.getAttribute(_meta.get('attr.exportsearch')))\n );\n };\n if (el.matches(_meta.get('element.import'))) {\n var importElInstance = Import.create(el);\n if (shouldResolve(importElInstance, importElInstance.importID)) {\n importElInstance.resolve(reason);\n }\n } else {\n _internals(el, 'oohtml', 'imports').forEach((importEl, name) => {\n var importElInstance = Import.create(importEl);\n if (shouldResolve(importElInstance, name)) {\n importElInstance.resolve(`Resolution scope: ${reason}`);\n }\n });\n }\n };\n \n mutations.onPresent(modulerefSelector, el => {\n if (_any(importInertContexts, inertContext => el.closest(inertContext))) {\n return;\n }\n // Imports resolve by themselves\n // But...\n // We resolve them again when reference to template changes\n mutations.onAttrChange(el, mr => {\n if (mr[0].target.getAttribute(mr[0].attributeName) !== mr[0].oldValue) {\n resolveSlots(el, null, `Attr-Change: ${mr[0].attributeName}`);\n }\n }, [_meta.get('attr.moduleref'), _meta.get('attr.importid')]);\n });\n\n document.addEventListener('templatemutation', e => {\n // Resolve slots when the referenced template changes\n if (!e.detail.path) {\n return;\n }\n _arrFrom(document.querySelectorAll('[' + window.CSS.escape(_meta.get('attr.moduleref')) + ']')).forEach(el => {\n if (queryMatchPath(el.getAttribute(_meta.get('attr.moduleref')), e.detail.path)) {\n resolveSlots(el, true/* resolve imports with search() */, `'templatemutation' event: ${e.detail.path}, search()`);\n e.detail.addedExports.concat(e.detail.removedExports).forEach(exportGroup => {\n resolveSlots(el, exportGroup.name, `'templatemutation' event: ${e.detail.path}, ${exportGroup.name}`);\n });\n }\n });\n });\n\n // ----------------------\n // Restore slots from snapshots\n // ----------------------\n\n const hydrateSlots = () => {\n _arrFrom(document.querySelectorAll(exportgroupSelector)).forEach(_export => {\n // Scan\n if (_internals(_export.parentNode, 'oohtml').get('importsCan')) return;\n // hydrateSlots() might be running AFTER certain <slots> have resolved\n // and _export might be a just-resolved node\n if (_export.importReference) return;\n var slottedElements = [];\n _export.parentNode.childNodes.forEach(node => {\n var nodeValue;\n if (node.nodeType === 1/** ELEMENT_NODE */ && node.matches(exportgroupSelector)) {\n slottedElements.push(node);\n } else if (node.nodeType === 8/** COMMENT_NODE */ && (nodeValue = node.nodeValue.trim())\n && nodeValue.startsWith('<' + _meta.get('element.import'))\n && nodeValue.endsWith('</' + _meta.get('element.import') + '>')) {\n var importEl, reviver = document.createElement('div');\n reviver.innerHTML = nodeValue;\n if ((importEl = reviver.firstChild).matches(_meta.get('element.import'))) {\n // Belongs to a composition block?\n var compositionBlock = !importEl.hasAttribute(_meta.get('attr.moduleref'))\n ? node.parentNode.closest(modulerefSelector) : (\n importEl.getAttribute(_meta.get('attr.moduleref')).trim().startsWith('~') ? node.parentNode.closest(exportgroupSelector) : null\n )\n var importElInstance = Import.create(importEl);\n importElInstance.hydrate(node, slottedElements, compositionBlock);\n // Empty basket\n slottedElements = [];\n }\n }\n });\n // Scanning is once for every parent\n _internals(_export.parentNode, 'oohtml').set('importsCan', true);\n });\n };\n\n // ----------------------\n // Hydrate\n // ----------------------\n\n WebQit.DOM.ready.call(WebQit, () => {\n if (_meta.get('isomorphic')) {\n hydrateSlots();\n }\n });\n\n};\n\n/**\n * Imports exports from from sourceEl into el.\n *\n * @param Element\t\t\t\t exportEl\n * @param Element\t\t\t\t superExportEl\n * @param array \t\t\t\t noinherit\n *\n * @return Element\n */\nexport function mergePartials(exportEl, superExportEl, noinherit = []) {\n if (!superExportEl.exportsSlottables) {\n return exportEl;\n }\n _each(superExportEl.exportsSlottables, (slotId, slottable) => {\n if (exportEl.exportsSlottables && exportEl.exportsSlottables[slotId]) {\n // Simply inherit attributes from the search slottable\n // The export may however define a no-inherit directive for all its slottables\n var _noinherit = noinherit.concat((exportEl.getAttribute('noinherit') || '').split(' ').map(val => val.trim()));\n this.mergeAttributes(exportEl.exportsSlottables[slotId], slottable, _noinherit, false/*prioritize*/);\n } else {\n // Copy new slottables\n exportEl.append(slottable.clone(true));\n }\n });\n return exportEl;\n};\n\n/**\n * Imports attributes from sourceEl into el.\n *\n * @param Element\t\t\t\t el\n * @param Element\t\t\t\t sourceEl\n * @param array\t\t\t\t\t\tnoinherit\n * @param bool\t\t\t\t\t\tprioritize\n *\n * @return Element\n */\nexport function mergeAttributes(el, sourceEl, noinherit = [], prioritize = true) {\n // ----------------------------\n // Norecompose directive\n // ----------------------------\n noinherit = noinherit.concat(_defaultNoInherits);\n if (el.hasAttribute('noinherit')) {\n noinherit = noinherit.concat((el.getAttribute('noinherit') || '*').split(' ').map(val => val.trim()));\n }\n // ----------------------------\n // Merge list attributes...\n // ----------------------------\n var defaultListAttrs = _defaultListAttrs.concat(['role', 'class']);\n _unique(defaultListAttrs).forEach(type => {\n var b_attr, a_attr;\n if (!noinherit.includes(type) && !noinherit.includes('*') && (b_attr = sourceEl.getAttribute(type))) {\n if (a_attr = el.getAttribute(type)) {\n var jointList = !prioritize ? [b_attr, a_attr] : [a_attr, b_attr];\n } else {\n var jointList = [b_attr];\n }\n el.setAttribute(type, _unique(jointList.join(' ').split(' ').map(r => r.trim())).join(' '));\n noinherit.push(type);\n }\n });\n // ----------------------------\n // Merge key/val attributes...\n // ----------------------------\n _unique(_defaultKeyValAttrs.concat('style')).forEach(type => {\n var b_attr, a_attr;\n if (!noinherit.includes(type) && !noinherit.includes('*') && (b_attr = sourceEl.getAttribute(type))) {\n if (a_attr = el.getAttribute(type)) {\n var jointDefs = !prioritize ? [b_attr, a_attr] : [a_attr, b_attr];\n if (!jointDefs[0].trim().endsWith(';')) {\n jointDefs[0] = jointDefs[0] + ';';\n }\n } else {\n var jointDefs = [b_attr];\n }\n el.setAttribute(type, jointDefs.join(' '));\n noinherit.push(type);\n }\n });\n // ----------------------------\n // Port all other attributes...\n // ----------------------------\n if (!noinherit.includes('*')) {\n for (var i = 0; i < sourceEl.attributes.length; i ++) {\n var attr = sourceEl.attributes[i];\n if (!noinherit.includes(attr.name) \n && (!el.hasAttribute(attr.name) || prioritize)) {\n el.setAttribute(attr.name, attr.value);\n }\n }\n }\n return el;\n};\n\nconst _defaultNoInherits = ['nocompose'], \n _defaultKeyValAttrs = [],\n _defaultListAttrs = [];\n", "\n/**\n * @imports\n */\nimport init from './index.js';\n\n/**\n * @init\n */\ninit.call( window );"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../node_modules/@webqit/util/js/isObject.js", "../node_modules/@webqit/util/js/getType.js", "../node_modules/@webqit/util/js/internals.js", "../node_modules/@webqit/util/js/isArray.js", "../node_modules/@webqit/util/js/isTypeFunction.js", "../node_modules/@webqit/util/js/isClass.js", "../node_modules/@webqit/util/js/isNull.js", "../node_modules/@webqit/util/js/isUndefined.js", "../node_modules/@webqit/util/js/isTypeObject.js", "../node_modules/@webqit/util/js/isEmpty.js", "../node_modules/@webqit/util/js/isFunction.js", "../node_modules/@webqit/util/js/isNumber.js", "../node_modules/@webqit/util/js/isNumeric.js", "../node_modules/@webqit/util/js/isString.js", "../node_modules/@webqit/util/js/isTypeArray.js", "../node_modules/@webqit/util/arr/pushUnique.js", "../node_modules/@webqit/util/obj/getPrototypeChain.js", "../node_modules/@webqit/util/obj/getAllPropertyNames.js", "../node_modules/@webqit/util/obj/mergeCallback.js", "../node_modules/@webqit/util/obj/merge.js", "../node_modules/@webqit/util/arr/from.js", "../node_modules/@webqit/util/obj/get.js", "../node_modules/@webqit/util/obj/set.js", "../node_modules/@webqit/dom/src/_Reflow.js", "../node_modules/@webqit/dom/src/realtime/Realtime.js", "../node_modules/@webqit/dom/src/realtime/AttrRealtime.js", "../node_modules/@webqit/dom/src/realtime/DOMRealtime.js", "../node_modules/@webqit/dom/src/polyfills.js", "../node_modules/@webqit/dom/src/index.js", "../src/context-api/_ContextRequestEvent.js", "../src/util.js", "../src/context-api/HTMLContextManager.js", "../src/context-api/HTMLContext.js", "../node_modules/@webqit/observer/src/main.js", "../node_modules/@webqit/observer/src/core/Registration.js", "../node_modules/@webqit/observer/src/core/ListenerRegistration.js", "../node_modules/@webqit/observer/src/core/Registry.js", "../node_modules/@webqit/observer/src/core/ListenerRegistry.js", "../node_modules/@webqit/observer/src/core/TrapsRegistration.js", "../node_modules/@webqit/observer/src/core/TrapsRegistry.js", "../node_modules/@webqit/observer/src/core/Descriptor.js", "../node_modules/@webqit/observer/src/actors.js", "../node_modules/@webqit/observer/src/index.js", "../src/html-modules/index.js", "../src/html-modules/_HTMLImportsContext.js", "../src/html-imports/_HTMLImportElement.js", "../src/html-imports/index.js", "../src/html-imports/targets.browser.js"],
|
|
4
|
+
"sourcesContent": ["\n/**\n * Tells if val is pure object.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn !Array.isArray(val) && typeof val === 'object' && val;\n};\n", "\n/**\n * Returns the val's type.\n *\n * @param string \tval\n *\n * @return string\n */\nexport default function(val) {\n\treturn typeof val;\n};\n", "\n/**\n * Creates and/or returns an \"internals\" object for the given object.\n * \n * @param Any obj\n * @param String namespace\n * \n * @return Object\n */\nexport default function internals(obj, ...namespaces) {\n if (!globalThis.WebQitInternalsRegistry) {\n globalThis.WebQitInternalsRegistry = new Map;\n }\n var itnls = globalThis.WebQitInternalsRegistry.get(obj);\n if (!itnls) {\n itnls = new Map;\n if (namespaces[0] === false) {\n // FALSE means: Return orphan Map if not exists\n return itnls;\n }\n globalThis.WebQitInternalsRegistry.set(obj, itnls);\n }\n var _ns, _itnls;\n while ((_ns = namespaces.shift())) {\n if ((_itnls = itnls) && !(itnls = itnls.get(_ns))) {\n itnls = new Map;\n if (namespaces[0] === false) {\n // FALSE means: Return orphan Map if not exists\n return itnls;\n }\n _itnls.set(_ns, itnls);\n }\n }\n return itnls;\n}", "\n/**\n * Tells if val is of type \"array\".\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn Array.isArray(val);\n};\n", "\n/**\n * Tells if val is of type \"function\".\n * This holds true for both regular functions and classes.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn typeof val === 'function';\n};\n", "\n/**\n * @imports\n */\nimport _isTypeFunction from './isTypeFunction.js';\n\n/**\n * Tells if val is of type \"class\".\n *\n * @param object \t\tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isTypeFunction(val) && /^class\\s?/.test(Function.prototype.toString.call(val));\n};\n", "\n/**\n * Tells if val is undefined or is null.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val === null || val === '';\n};\n", "\n/**\n * Tells if val is undefined or is of type \"undefined\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn arguments.length && (val === undefined || typeof val === 'undefined');\n};\n", "\n/**\n * @imports\n */\nimport _isTypeFunction from './isTypeFunction.js';\n\n/**\n * Tells if val is of type \"object\".\n * This holds true for anything object, including built-ins.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn Array.isArray(val) || (typeof val === 'object' && val) || _isTypeFunction(val);\n};\n", "\n/**\n * @imports\n */\nimport _isNull from './isNull.js';\nimport _isUndefined from './isUndefined.js';\nimport _isTypeObject from './isTypeObject.js';\n\n/**\n * Tells if val is empty in its own type.\n * This holds true for NULLs, UNDEFINED, FALSE, 0,\n * objects without keys, empty arrays.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isNull(val) || _isUndefined(val) || val === false || val === 0 \n\t\t|| (_isTypeObject(val) && !Object.keys(val).length);\n};\n", "\n/**\n * @imports\n */\nimport _isTypeFunction from './isTypeFunction.js';\n\n/**\n * Tells if val is of type \"function\".\n *\n * @param object \t\tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isTypeFunction(val) || (val && {}.toString.call(val) === '[object function]');\n};\n", "\n/**\n * Tells if val is of type \"number\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val instanceof Number || (typeof val === 'number');\n};\n", "\n/**\n * @imports\n */\nimport _isNumber from './isNumber.js';\n/**\n * Tells if val is of type \"string\" or a numeric string.\n * This holds true for both numbers and numeric strings.\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn _isNumber(val) || (val !== true && val !== false && val !== null && val !== '' && !isNaN(val * 1));\n};\n", "\n/**\n * Tells if val is of type \"string\".\n *\n * @param string \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn val instanceof String || (typeof val === 'string' && val !== null);\n};\n", "\n/**\n * @imports\n */\nimport _isString from './isString.js';\nimport _isUndefined from './isUndefined.js';\n\n/**\n * Tells if val is \"array-like\".\n * This holds true for anything that has a length property.\n *\n * @param object\t \tval\n *\n * @return bool\n */\nexport default function(val) {\n\treturn !_isString(val) && !_isUndefined(val.length);\n};\n", "\n/**\n * Adds an item if not already exist.\n *\n * @param array \tarr\n * @param array\t \t...itms\n *\n * @return array\n */\nexport default function(arr, ...items) {\n\titems.forEach(itm => {\n\t\tif (arr.indexOf(itm) < 0) {\n\t\t\tarr.push(itm);\n\t\t}\n\t});\n\treturn arr;\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\n\n/**\n * Returns the prototype chain.\n *\n * @param object \t\tobj\n * @param object\t \tuntil\n *\n * @return bool\n */\nexport default function(obj, until) {\n\tuntil = until || Object.prototype;\n\tuntil = until && !_isArray(until) ? [until] : until;\n\t// We get the chain of inheritance\n\tvar prototypalChain = [];\n\tvar obj = obj;\n\twhile((obj && (!until || until.indexOf(obj) < 0) && obj.name !== 'default')) {\n\t\tprototypalChain.push(obj);\n\t\tobj = obj ? Object.getPrototypeOf(obj) : null;\n\t}\n\treturn prototypalChain;\n};\n", "\n/**\n * @imports\n */\nimport _pushUnique from '../arr/pushUnique.js';\nimport _getPrototypeChain from './getPrototypeChain.js';\n\n/**\n * Eagerly retrieves object members all down the prototype chain.\n *\n * @param object\t \tobj\n * @param object\t \tuntil\n *\n * @return array\n */\nexport default function(obj, until) {\n\tvar keysAll = [];\n\t_getPrototypeChain(obj, until).forEach(obj => {\n\t\t_pushUnique(keysAll, ...Object.getOwnPropertyNames(obj));\n\t});\n\treturn keysAll;\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isFunction from '../js/isFunction.js';\nimport _isObject from '../js/isObject.js';\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isNumeric from '../js/isNumeric.js';\nimport _getAllPropertyNames from './getAllPropertyNames.js';\n\n/**\n * Merges values from subsequent arrays/objects first array/object;\n * optionally recursive\n *\n * @param array ...objs\n *\n * @return void\n */\nexport default function mergeCallback(objs, callback, deepProps = false, isReplace = false, withSymbols = false) {\n\tvar depth = 0;\n\tvar obj1 = objs.shift();\n\tif (_isNumeric(obj1) || obj1 === true || obj1 === false) {\n\t\tdepth = obj1;\n\t\tobj1 = objs.shift();\n\t}\n\tif (!objs.length) {\n\t\tthrow new Error('_merge() requires two or more array/objects.');\n\t}\n\tobjs.forEach((obj2, i) => {\n\t\tif (!_isTypeObject(obj2) && !_isFunction(obj2)) {\n\t\t\treturn;\n\t\t}\n\t\t(deepProps ? _getAllPropertyNames(obj2) : Object.keys(obj2)).forEach(key => {\n\t\t\tif (!callback(key, obj1, obj2, i)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar valAtObj1 = obj1[key];\n\t\t\tvar valAtObj2 = obj2[key];\n\t\t\tif (((_isArray(valAtObj1) && _isArray(valAtObj2)) || (_isObject(valAtObj1) && _isObject(valAtObj2))) \n\t\t\t&& (depth === true || depth > 0)) {\n\t\t\t\t// RECURSE...\n\t\t\t\tobj1[key] = _isArray(valAtObj1) && _isArray(valAtObj2) ? [] : {};\n\t\t\t\tmergeCallback([_isNumeric(depth) ? depth - 1 : depth, obj1[key], valAtObj1, valAtObj2], callback, deepProps, isReplace, withSymbols);\n\t\t\t} else {\n\t\t\t\tif (_isArray(obj1) && _isArray(obj2)) {\n\t\t\t\t\tif (isReplace) {\n\t\t\t\t\t\tobj1[key] = valAtObj2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj1.push(valAtObj2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// In case we're setting a read-only property\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (withSymbols) {\n\t\t\t\t\t\t\tObject.defineProperty(obj1, key, Object.getOwnPropertyDescriptor(obj2, key));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj1[key] = obj2[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\treturn obj1;\n};\n", "\n/**\n * @imports\n */\nimport _mergeCallback from './mergeCallback.js';\n\n/**\n * Merges values from subsequent arrays/objects first array/object;\n * optionally recursive\n *\n * @param array ...objs\n *\n * @return void\n */\nexport default function(...objs) {\n\treturn _mergeCallback(objs, (k, obj1, obj2) => {\n\t\treturn true;\n\t}, false/*deepProps*/, false/*isReplace*/, false/*withSymbols*/);\n};\n", "\n/**\n * @imports\n */\nimport _isArray from '../js/isArray.js';\nimport _isTypeArray from '../js/isTypeArray.js';\nimport _isEmpty from '../js/isEmpty.js';\nimport _isObject from '../js/isObject.js';\n\n/**\n * Casts an array-like object to an array.\n *\n * @param mixed \tval\n * @param bool\t \tcastObject\n *\n * @return array\n */\nexport default function(val, castObject = true) {\n\tif (_isArray(val)) {\n\t\treturn val;\n\t};\n\tif (!castObject && _isObject(val)) {\n\t\treturn [val];\n\t};\n\tif (val !== false && val !== 0 && _isEmpty(val)) {\n\t\treturn [];\n\t};\n\tif (_isTypeArray(val)) {\n\t\treturn Array.prototype.slice.call(val);\n\t};\n\tif (_isObject(val)) {\n\t\treturn Object.values(val);\n\t};\n\treturn [val];\n};\n", "\n/**\n * @imports\n */\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isUndefined from '../js/isUndefined.js';\nimport _isNull from '../js/isNull.js';\nimport _arrFrom from '../arr/from.js';\n\n/**\n * Retrieves the value at the given path.\n *\n * A return value of undefined is ambiguous, and can mean either that the\n * path does not exist, or that the path actually exists but with a value of undefined. If it is required to\n * know whether the path actually exists, pass an object as a third argument.\n * This object will have an \"exists\" key set to true/false.\n *\n * @param object \t\t\t\tctxt\n * @param array \t\t\t\tpath\n * @param object \t\t\t\ttrap\n * @param object \t\t\t\treciever\n *\n * @return mixed\n */\nexport default function(ctxt, path, trap = {}, reciever = {}) {\n\tpath = _arrFrom(path).slice();\n\tvar _ctxt = ctxt;\n\twhile(!_isUndefined(_ctxt) && !_isNull(_ctxt) && path.length) {\n\t\tvar _key = path.shift();\n\t\tif (!(trap.get ? trap.get(_ctxt, _key) : (_isTypeObject(_ctxt) ? _key in _ctxt : _ctxt[_key]))) {\n\t\t\treciever.exists = false;\n\t\t\treturn;\n\t\t}\n\t\t_ctxt = trap.get ? trap.get(_ctxt, _key) : _ctxt[_key];\n\t}\n\treciever.exists = true;\n\treturn _ctxt;\n};\n", "\n/**\n * @imports\n */\nimport _isTypeObject from '../js/isTypeObject.js';\nimport _isFunction from '../js/isFunction.js';\nimport _isNumeric from '../js/isNumeric.js';\nimport _isArray from '../js/isArray.js';\nimport _arrFrom from '../arr/from.js';\nimport _get from './get.js';\n\n/**\n * Sets a value to the given path.\n *\n * @param object \t\t\t\tobj\n * @param array \t\t\t\tpath\n * @param mixed \t\t\t\tval\n * @param object|function \t\tbuildTree\n * @param object \t\t\t\ttrap\n *\n * @return bool\n */\nexport default function(obj, path, val, buildTree = {}, trap = {}) {\n\tconst _set = (target, key, val) => {\n\t\tif (trap.set) {\n\t\t\treturn trap.set(target, key, val);\n\t\t} else {\n\t\t\tif (_isNumeric(path[i]) && _isArray(target)) {\n\t\t\t\ttarget.push(val);\n\t\t\t} else {\n\t\t\t\ttarget[key] = val;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t};\n\tpath = _arrFrom(path);\n\tvar target = obj;\n\tfor(var i = 0; i < path.length; i ++) {\n\t\tif (i < path.length - 1) {\n\t\t\tif (!target || (!_isTypeObject(target) && !_isFunction(target))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar branch = _get(target, path[i], trap);\n\t\t\tif (!_isTypeObject(branch)) {\n\t\t\t\tif (trap.buildTree === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbranch = _isFunction(trap.buildTree) ? trap.buildTree(i) : (_isNumeric(path[i + 1]) ? [] : {});\n\t\t\t\tvar branchSuccess = _set(target, path[i], branch);\n\t\t\t\tif (!branchSuccess) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttarget = branch;\n\t\t} else {\n\t\t\treturn _set(target, path[i], val);\n\t\t}\n\t}\n};\n", "\r\n/**\r\n * ---------------------------\r\n * Binds callbacks to requestAnimationFrame()\r\n * to create a central \"read/write\" phases for Ctxt access.\r\n * ---------------------------\r\n */\r\n\t\t\t\r\nexport default window => class Reflow {\r\n\r\n\t/**\r\n\t * Starts the loop.\r\n\t *\r\n\t * @return this\r\n\t */\r\n\tconstructor( asyncDOM = true ) {\r\n\t\tObject.defineProperty( this, 'window', { value: window } );\r\n\t\tObject.defineProperty( this, 'readCallbacks', { value: new Set } );\r\n\t\tObject.defineProperty( this, 'writeCallbacks', { value: new Set } );\r\n\t\tthis.async = asyncDOM;\r\n\t\tif ( this.window.requestAnimationFrame ) {\r\n\t\t\tthis._run();\r\n\t\t} else {\r\n\t\t\tthis.async = false;\r\n\t\t}\r\n\t}\r\n\r\n\t_run() {\r\n\t\tthis.window.requestAnimationFrame( () => {\r\n\t\t\tthis.readCallbacks.forEach( callback => {\r\n\t\t\t\tif ( !callback() ) {\r\n\t\t\t\t\tthis.readCallbacks.delete( callback );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\tthis.writeCallbacks.forEach( callback => {\r\n\t\t\t\tif ( !callback() ) {\r\n\t\t\t\t\tthis.writeCallbacks.delete( callback );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\tthis._run();\r\n\t\t} );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Binds a callback to the \"read\" phase.\r\n\t *\r\n\t * @param function \tcallback\r\n\t * @param bool\t\twithPromise\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonread( callback, withPromise = false ) {\r\n\t\tif ( withPromise ) {\r\n\t\t\treturn new Promise( ( resolve, reject ) => {\r\n\t\t\t\tif ( this.async === false ) {\r\n\t\t\t\t\tcallback( resolve, reject );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.readCallbacks.add( () => {\r\n\t\t\t\t\t\tcallback( resolve, reject );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\t\tif ( this.async === false ) {\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\tthis.readCallbacks.add( callback );\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Binds a callback to the \"write\" phase.\r\n\t *\r\n\t * @param function \tcallback\r\n\t * @param bool\t\twithPromise\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tonwrite( callback, withPromise = false ) {\r\n\t\tif ( withPromise ) {\r\n\t\t\treturn new Promise( ( resolve, reject ) => {\r\n\t\t\t\tif ( this.async === false ) {\r\n\t\t\t\t\tcallback( resolve, reject );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.writeCallbacks.add( () => {\r\n\t\t\t\t\t\tcallback( resolve, reject );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\t\tif ( this.async === false ) {\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\tthis.writeCallbacks.add( callback );\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * A special construct for Ctxt manipulations that span\r\n\t * one or more read/write cycles.\r\n\t *\r\n\t * @param function \tread\r\n\t * @param function \twrite\r\n\t * @param mixed\t\tprevTransaction\r\n\t *\r\n\t * @return void|mixed\r\n\t */\r\n\tcycle( onread, onwrite, prevTransaction ) {\r\n\t\tthis.onread( () => {\r\n\t\t\t// Record initial values\r\n\t\t\tconst readReturn = onread( prevTransaction );\r\n\t\t\t// Call erite, the transation\r\n\t\t\tconst callWrite = ( readReturn ) => {\r\n\t\t\t\tif ( readReturn === undefined ) return;\r\n\t\t\t\tthis.onwrite( () => {\r\n\t\t\t\t\tconst writeReturn = onwrite( readReturn, prevTransaction );\r\n\t\t\t\t\t// Repeat transaction\r\n\t\t\t\t\tconst repeatTransaction = ( writeReturn ) => {\r\n\t\t\t\t\t\tif ( writeReturn === undefined ) return;\r\n\t\t\t\t\t\tthis.cycle( onread, onwrite, writeReturn );\r\n\t\t\t\t\t};\r\n\t\t\t\t\t// ---------------------------------------\r\n\t\t\t\t\t// If \"write\" returns a promise, we wait until it is resolved\r\n\t\t\t\t\t// ---------------------------------------\r\n\t\t\t\t\tif ( writeReturn instanceof Promise ) {\r\n\t\t\t\t\t\twriteReturn.then( repeatTransaction );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trepeatTransaction( writeReturn );\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t};\r\n\t\t\t// ---------------------------------------\r\n\t\t\t// If \"read\" returns a promise, we wait until it is resolved\r\n\t\t\t// ---------------------------------------\r\n\t\t\tif ( readReturn instanceof Promise ) {\r\n\t\t\t\treadReturn.then( callWrite );\r\n\t\t\t} else {\r\n\t\t\t\tcallWrite( readReturn );\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _isFunction, _isObject, _internals } from '@webqit/util/js/index.js';\r\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\r\n\r\n/**\r\n *\r\n * @class Realtime\r\n */\r\nexport default class Realtime {\r\n\r\n\t/**\r\n\t * @constructor\r\n\t *\r\n\t * @param document|Element\tcontext\r\n\t */\r\n\tconstructor( context, namespace, window ) {\r\n\t\tthis.context = context;\r\n\t\tthis.namespace = namespace;\r\n\t\tthis.window = context.defaultView || context.ownerDocument?.defaultView || window;\r\n\t\tthis.document = this.window.document;\r\n\t\tthis.wq = this.window.wq;\r\n\t\tObject.defineProperty( this, '#', { value: {} } );\r\n\t}\r\n\r\n\t/**\r\n\t * Resolves arguments\r\n\t * \r\n\t * @param Array \t\t\targs \r\n\t * \r\n\t * @returns Array\r\n\t */\r\n\tresolveArgs( args ) {\r\n\t\tif ( _isFunction( args[ 0 ] ) ) { args = [ [], ...args ]; }\r\n\t\telse if ( _isObject( args[ 0 ] ) && args.length === 1 ) {\r\n\t\t\targs = [ [], undefined, args[ 0 ] ];\r\n\t\t} else if ( _isObject( args[ 1 ] ) && args.length === 2 ) {\r\n\t\t\targs = [ _arrFrom( args[ 0 ], false/*castObject*/ ), undefined, args[ 1 ] ];\r\n\t\t} else { args[ 0 ] = _arrFrom( args[ 0 ], false/*castObject*/ ); }\r\n\t\treturn args;\r\n\t}\r\n\r\n\t/**\r\n\t * @registry\r\n\t *\r\n\t * @param Array\t\t\t\t...args\r\n\t * \r\n\t * @returns Map\r\n\t */\r\n\tregistry( ...args ) {\r\n\t\treturn _internals( this.window, 'dom.realtime', this.namespace, ...args );\r\n\t}\r\n\t\t\r\n\t/**\r\n\t * @createSignalGenerator\r\n\t * \r\n\t * @param Object \t\t\tmo \r\n\t * \r\n\t * @returns Object\r\n\t */\r\n\tcreateSignalGenerator() {\r\n\t\treturn {\r\n\t\t\tgenerate() {\r\n\t\t\t\t// Abort previous\r\n\t\t\t\tthis.lastController?.abort();\r\n\t\t\t\tthis.lastController = new AbortController;\r\n\t\t\t\tconst flags = { signal: this.lastController.signal };\r\n\t\t\t\treturn flags;\r\n\t\t\t},\r\n\t\t\tdisconnect() { this.lastController?.abort(); }\r\n\t\t}\r\n\t}\r\n\t\t\r\n\t/**\r\n\t * Loops through registration objects whose contexts match the event context.\r\n\t * \r\n\t * @param String \t\tinterceptionTiming\r\n\t * @param Object|Array \trecord_s\r\n\t * @param Function \t\tcallback \r\n\t * \r\n\t * @returns void\r\n\t */\r\n\tforEachMatchingContext( interceptionTiming, record_s, callback ) {\r\n\t\tconst { window } = this, records = Array.isArray( record_s ) ? record_s : [ record_s ];\r\n\t\tlet dispatchBatch = new Set;\r\n\t\tfor ( const [ depth, registries ] of this.registry( interceptionTiming ) ) {\r\n\t\t\tfor ( const [ context, registry ] of registries ) {\r\n\t\t\t\t// Ensure event target is/within context\r\n\t\t\t\tlet matches = records.filter( record => {\r\n\t\t\t\t\tif ( !context.contains( record.target ) ) return false;\r\n\t\t\t\t\treturn depth === 'subtree' || record.target === context;\r\n\t\t\t\t} );\r\n\t\t\t\tif ( !matches.length ) continue;\r\n\t\t\t\t// Records will be dispatched in their original form\r\n\t\t\t\tif ( !Array.isArray( record_s ) ) { matches = matches[ 0 ]; }\r\n\t\t\t\tfor ( const registration of registry ) {\r\n\t\t\t\t\tdispatchBatch.add( [ registration, matches, context ] );\r\n\t\t\t\t\t//callback.call( this, registration, matches, context );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Saving everything to dispatchBatch ensures that recursive modifications\r\n\t\t// to both this.registry( interceptionTiming ), registries, and registry aren't pciked up\r\n\t\tfor ( const [ registration, record_s, context ] of dispatchBatch ) {\r\n\t\t\tcallback.call( this, registration, record_s, context );\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @disconnectables\r\n\t * \r\n\t * @param AbortSignal \t\tsignal\r\n\t * @param Array \t\t\t...objects \r\n\t * \r\n\t * @returns Object\r\n\t */\r\n\tdisconnectables( signal, ...objects ) {\r\n\t\tconst disconnectable = { disconnect() {\r\n\t\t\tobjects.forEach( d => (\r\n\t\t\t\td && _isFunction( d.disconnect ) && d.disconnect() \r\n\t\t\t\t|| _isFunction( d ) && d() \r\n\t\t\t\t|| _isObject( d ) && ( d.disconnected = true )\r\n\t\t\t) );\r\n\t\t} };\r\n\t\tif ( signal ) signal.addEventListener( 'abort', () => disconnectable.disconnect() );\r\n\t\treturn disconnectable;\r\n\t}\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport Realtime from './Realtime.js';\r\n\r\n/**\r\n *\r\n * @class AttrRealtime\r\n */\r\nexport default class AttrRealtime extends Realtime {\r\n\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tconstructor( context, ...args ) {\r\n\t\tsuper( context, 'attr', ...args );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Runs a query.\r\n\t *\r\n\t * @param array|string\t\t\t\tfilter\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return Disconnectable|Void\r\n\t */\r\n\tget( filter, callback = undefined, params = {} ) {\r\n\t\tconst originalFilterIsString = typeof filter === 'string';\r\n\t\t[ filter = [], callback = undefined, params = {} ] = this.resolveArgs( arguments );\r\n\t\tconst { context } = this;\r\n\t\t// -------------\r\n\t\tconst records = attrIntersection( context, filter );\r\n\t\tconst record_s = originalFilterIsString ? records[ 0 ] : records;\r\n\t\tif ( !callback ) return record_s;\r\n\t\tconst signalGenerator = callback && params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tconst flags = signalGenerator?.generate() || {};\r\n\t\tcallback( record_s, flags, context );\r\n\t\t// -------------\r\n\t\tif ( params.live ) {\r\n\t\t\tif ( signalGenerator ) { params = { ...params, signalGenerator }; }\r\n\t\t\tconst disconnectable_live = this.observe( originalFilterIsString ? filter[ 0 ] : filter, callback, { newValue: true, ...params } );\r\n\t\t\treturn this.disconnectables( params.signal, disconnectable_live );\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Mutation Observer\r\n\t * \r\n\t * @param array|string\t\t\t\tfilter\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t * \r\n\t * @returns Disconnectable\r\n\t */\r\n\tobserve( filter, callback, params = {} ) {\r\n\t\tconst originalFilterIsString = typeof filter === 'string';\r\n\t\t[ filter = [], callback, params = {} ] = this.resolveArgs( arguments );\r\n\t\t// ------------------------\r\n\t\tif ( [ 'sync', 'intercept' ].includes( params.timing ) ) return this.observeSync( originalFilterIsString ? filter[ 0 ] : filter, callback, params );\r\n\t\tif ( params.timing && params.timing !== 'async' ) throw new Error( `Timing option \"${ params.timing }\" invalid.` );\r\n\t\t// ------------------------\r\n\t\tconst { context, window, wq } = this;\r\n\t\t// ------------------\r\n\t\tif ( params.eventDetails && !wq.attrInterceptionHooks?.intercepting ) {\r\n\t\t\tattrInterception.call( window, 'intercept', () => {} );\r\n\t\t}\r\n\t\t// -------------\r\n\t\tconst disconnectable = new window.MutationObserver( records => {\r\n\t\t\trecords = dedup( records ).map( rcd => withAttrEventDetails.call( window, rcd ) );\r\n\t\t\tdispatch.call( window, registration, records, context );\r\n\t\t} );\r\n\t\t// ------------------\r\n\t\tconst $params = { attributes: true, attributeOldValue: params.oldValue, subtree: params.subtree };\r\n\t\tif ( filter.length ) { $params.attributeFilter = filter; }\r\n\t\tdisconnectable.observe( context, $params );\r\n\t\t// -------------\r\n\t\tconst signalGenerator = params.signalGenerator || params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tconst registration = { context, filter, callback, params, atomics: new Map, originalFilterIsString, signalGenerator, disconnectable };\r\n\t\t// -------------\r\n\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Mutation Interceptor\r\n\t * \r\n\t * @param array|string\t\t\t\tfilter\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t * \r\n\t * @returns Disconnectable\r\n\t */\r\n\tobserveSync( filter, callback, params = {} ) {\r\n\t\tconst originalFilterIsString = typeof filter === 'string';\r\n\t\t[ filter, callback, params = {} ] = this.resolveArgs( arguments );\r\n\t\tconst { context, window } = this;\r\n\t\t// -------------\r\n\t\tif ( params.timing && ![ 'sync', 'intercept' ].includes( params.timing ) ) throw new Error( `Timing option \"${ params.timing }\" invalid.` );\r\n\t\tconst interceptionTiming = params.timing === 'intercept' ? 'intercept' : 'sync';\r\n\t\tconst intersectionDepth = params.subtree ? 'subtree' : 'children';\r\n\t\tif ( !this.registry( interceptionTiming ).size ) {\r\n\t\t\t// One handler per intercept/sync registry\r\n\t\t\tattrInterception.call( window, interceptionTiming, records => {\r\n\t\t\t\tthis.forEachMatchingContext( interceptionTiming, records, dispatch );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t// -------------\r\n\t\tconst disconnectable = { disconnect() {\r\n\t\t\tregistry.delete( registration );\r\n\t\t\tif ( !registry.size ) { registries.delete( context ); }\r\n\t\t} };\r\n\t\tconst signalGenerator = params.signalGenerator || params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tconst registration = { context, filter, callback, params, atomics: new Map, originalFilterIsString, signalGenerator, disconnectable };\r\n\t\t// -------------\r\n\t\tconst registries = this.registry( interceptionTiming, intersectionDepth );\r\n\t\tif ( !registries.has( context ) ) { registries.set( context, new Set ); }\r\n\t\tconst registry = registries.get( context );\r\n\t\tregistry.add( registration );\r\n\t\t// -------------\r\n\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator );\r\n\t}\r\n}\r\n\r\n/**\r\n * Deduplicates records.\r\n * \r\n * @param Array \t\t\trecords\r\n * \r\n * @returns Array\r\n */\r\nfunction dedup( records ) {\r\n\treturn records.reduce( ( rcds, rcd, i ) => {\r\n\t\tif ( rcds[ i - 1 ]?.attributeName === rcd.attributeName ) return rcds;\r\n\t\treturn rcds.concat( rcd );\r\n\t}, [] );\r\n}\r\n\r\n/**\r\n * Dispatches a mutation record if it matches the observed.\r\n * \r\n * @param Object \t\t\tregistration\r\n * @param Array \t\t\trecords\r\n * \r\n * @returns Void\r\n */\r\nfunction dispatch( registration, records ) {\r\n\tconst { context, filter, callback, params, atomics, originalFilterIsString, signalGenerator } = registration;\r\n\tif ( params.atomic && !atomics.size ) {\r\n\t\trecords = attrIntersection( context, filter, records );\r\n\t}\r\n\t// Should we care about old / new values being present?\r\n\tif ( !( params.newValue === null && params.oldValue === null ) ) {\r\n\t\trecords = records.map( rcd => {\r\n\t\t\tlet exclusion;\r\n\t\t\tif ( !params.oldValue && ( 'oldValue' in rcd ) ) {\r\n\t\t\t\t( { oldValue: exclusion, ...rcd } = rcd );\r\n\t\t\t}\r\n\t\t\tif ( !params.newValue && ( 'value' in rcd ) ) {\r\n\t\t\t\t( { value: exclusion, ...rcd } = rcd );\r\n\t\t\t} else if ( params.newValue && typeof rcd.value === 'undefined' ) {\r\n\t\t\t\trcd = { ...rcd, value: rcd.target.getAttribute( rcd.name ) };\r\n\t\t\t}\r\n\t\t\treturn rcd;\r\n\t\t} );\r\n\t}\r\n\tif ( params.atomic ) {\r\n\t\trecords.forEach( record => atomics.set( record.name, record ) );\r\n\t\trecords = Array.from( atomics.entries() ).map( ( [ , value ] ) => value );\r\n\t}\r\n\tconst record_s = originalFilterIsString ? records[ 0 ] : records;\r\n\tconst flags = signalGenerator?.generate() || {};\r\n\tcallback( record_s, flags, context );\r\n}\r\n\r\n/**\r\n * Helper to determining which records to deliver.\r\n * \r\n * @param Object \t\t\tcontext\r\n * @param Array \t\t\tfilter\r\n * @param Array \t\t\trecords\r\n * \r\n * @returns Array\r\n */\r\nfunction attrIntersection( context, filter, records = [] ) {\r\n\tconst _type = { event: null, type: 'attribute' };\r\n\tif ( filter.length ) {\r\n\t\treturn filter.map( attrName => {\r\n\t\t\treturn records.find( r => r.name === attrName ) || { target: context, name: attrName, value: context.getAttribute( attrName ), ..._type };\r\n\t\t} );\r\n\t}\r\n\tconst attrs = Array.from( context.attributes );\r\n\treturn attrs.map( attr => {\r\n\t\treturn records.find( r => r.name === attr.nodeName ) || { target: context, name: attr.nodeName, value: attr.nodeValue, ..._type };\r\n\t} );\r\n}\r\n\r\n/**\r\n * Determines the event for an attr mutation record.\r\n * \r\n * @param MutationRecord \t{ target, attributeName }\r\n * \r\n * @returns Object\r\n */\r\nfunction withAttrEventDetails( { target, attributeName, value, oldValue } ) {\r\n\tconst window = this, registry = window.wq.attrInterceptionRecords?.get( target ) || {};\r\n\tconst event = registry[ attributeName ] || 'mutation';\r\n\tconst record = { target, name: attributeName, value, oldValue, type: 'observation', event };\r\n\treturn record;\r\n}\r\n\r\n/**\r\n * Attributes intersection engine.\r\n * \r\n * @param String \t\t\ttiming \r\n * @param Function \t\t\tcallback \r\n * \r\n * @returns \r\n */\r\nfunction attrInterception( timing, callback ) {\r\n\tconst window = this;\r\n\tconst { wq, document, Element } = window;\r\n\tif ( !wq.attrInterceptionHooks ) { wq.attrInterceptionHooks = new Map; }\r\n\tif ( !wq.attrInterceptionHooks.has( timing ) ) { wq.attrInterceptionHooks.set( timing, new Set ); }\r\n\twq.attrInterceptionHooks.get( timing ).add( callback );\r\n\tconst rm = () => wq.attrInterceptionHooks.get( timing ).delete( callback );\r\n\tif ( wq.attrInterceptionHooks?.intercepting ) return rm;\r\n\tconsole.warn( `Attr mutation APIs are now being intercepted.` );\r\n\twq.attrInterceptionHooks.intercepting = true;\r\n\twq.attrInterceptionRecords = new Map;\r\n\r\n\t// Interception hooks\r\n\tconst attrIntercept = ( record, defaultAction ) => {\r\n\t\tif ( !wq.attrInterceptionRecords.has( record.target ) ) { wq.attrInterceptionRecords.set( record.target, {} ); }\r\n\t\tconst registry = wq.attrInterceptionRecords.get( record.target );\r\n\t\t// ------------------\r\n\t\tclearTimeout( registry[ record.name ]?.timeout ); // Clear any previous that's still active\r\n\t\tregistry[ record.name ] = record.event; // Main: set event details... and next to timeout details\r\n\t\tconst timeout = setTimeout( () => { delete registry[ record.name ]; }, 0 );\r\n\t\tObject.defineProperty( record.event, 'timeout', { value: timeout, configurable: true } );\r\n\t\t// ------------------\r\n\t\twq.attrInterceptionHooks.get( 'intercept' )?.forEach( callback => callback( [ record ] ) );\r\n\t\tconst returnValue = defaultAction();\r\n\t\twq.attrInterceptionHooks.get( 'sync' )?.forEach( callback => callback( [ record ] ) );\r\n\t\treturn returnValue;\r\n\t};\r\n\r\n\t// Interception observer WILL need to know non-API-based mutations\r\n\tconst mo = new window.MutationObserver( records => {\r\n\t\trecords = dedup( records ).map( rcd => withAttrEventDetails.call( window, rcd ) ).filter( ( rcd, i ) => {\r\n\t\t\treturn !Array.isArray( rcd.event );\r\n\t\t} );\r\n\t\tif ( !records.length ) return;\r\n\t\twq.attrInterceptionHooks.get( 'intercept' )?.forEach( callback => callback( records ) );\r\n\t\twq.attrInterceptionHooks.get( 'sync' )?.forEach( callback => callback( records ) );\r\n\t} );\r\n\tmo.observe( document, { attributes: true, subtree: true, attributeOldValue: true } );\r\n\r\n\t// Intercept DOM attr mutation methods\r\n\tconst originalApis = Object.create( null );\r\n\t[ 'setAttribute', 'removeAttribute', 'toggleAttribute', ].forEach( apiName => {\r\n\t\toriginalApis[ apiName ] = Element.prototype[ apiName ];\r\n\t\tElement.prototype[ apiName ] = function( ...args ) {\r\n\t\t\tlet value, oldValue = this.getAttribute( args[ 0 ] );\r\n\t\t\tif ( [ 'setAttribute', 'toggleAttribute' ].includes( apiName ) ) { value = args[ 1 ]; }\r\n\t\t\tif ( apiName === 'toggleAttribute' && value === undefined ) {\r\n\t\t\t\tvalue = oldValue === null ? true : false;\r\n\t\t\t}\r\n\t\t\tconst record = { target: this, name: args[ 0 ], value, oldValue, type: 'interception', event: [ this, apiName ] };\r\n\t\t\tconst exec = () => originalApis[ apiName ].call( this, ...args );\r\n\t\t\treturn attrIntercept( record, exec );\r\n\t\t}\r\n\t} );\r\n\r\n\treturn rm;\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport { _isObject } from '@webqit/util/js/index.js';\r\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\r\nimport AttrRealtime from './AttrRealtime.js';\r\nimport Realtime from './Realtime.js';\r\n\r\n/**\r\n *\r\n * @class DOMRealtime\r\n */\r\nexport default class DOMRealtime extends Realtime {\r\n\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tconstructor( context, ...args ) {\r\n\t\tsuper( context, 'tree', ...args );\r\n\t}\r\n\r\n\t/**\r\n\t * Alias for ( new AttrRealtime() ).all( ... )\r\n\t */\r\n\tattr( filter, callback = undefined, params = {} ) {\r\n\t\tconst { context, window } = this;\r\n\t\treturn ( new AttrRealtime( context, window ) ).get( ...arguments );\r\n\t}\r\n\r\n\t/**\r\n\t * Runs a query.\r\n\t *\r\n\t * @param array|Element|string\t\tselectors\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t *\r\n\t * @return Disconnectable|Void\r\n\t */\r\n\tquery( selectors, callback = undefined, params = {} ) {\r\n\t\t[ selectors, callback = undefined, params = {} ] = this.resolveArgs( arguments );\r\n\t\tconst { context } = this;\r\n\t\t// ------------------\r\n\t\tconst records = new Map, getRecord = target => {\r\n\t\t\tif ( !records.has( target ) ) { records.set( target, { target, entrants: [], exits: [], type: 'query', event: null } ); }\r\n\t\t\treturn records.get( target );\r\n\t\t};\r\n\t\t// ------------------\r\n\t\tif ( !params.generation || params.generation === 'entrants' ) {\r\n\t\t\tif ( !selectors.length ) {\r\n\t\t\t\t//if ( params.subtree ) throw new Error( `The subtree option requires a selector to work.` );\r\n\t\t\t\t[ ...context.children ].forEach( node => getRecord( context ).entrants.push( node ) );\r\n\t\t\t} else if ( selectors.every( selector => typeof selector === 'string' ) && ( selectors = selectors.join( ',' ) ) ) {\r\n\t\t\t\tconst matches = params.subtree\r\n\t\t\t\t\t? context.querySelectorAll( selectors )\r\n\t\t\t\t\t: [ ...context.children ].filter( node => node.matches( selectors ) );\r\n\t\t\t\tmatches.forEach( node => getRecord( node.parentNode || context ).entrants.push( node ) );\r\n\t\t\t}\r\n\t\t}\r\n\t\t// ------------------\r\n\t\tif ( !callback ) return records;\r\n\t\tconst disconnectable = { disconnected: false };\r\n\t\tconst signalGenerator = callback && params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tfor ( const [ , record ] of records ) {\r\n\t\t\tif ( disconnectable.disconnected ) break;\r\n\t\t\tconst flags = signalGenerator?.generate() || {};\r\n\t\t\tcallback( record, flags, context );\r\n\t\t}\r\n\t\t// ------------------\r\n\t\tif ( params.live ) {\r\n\t\t\tif ( signalGenerator ) { params = { ...params, signalGenerator }; }\r\n\t\t\tconst disconnectable_live = this.observe( selectors, callback, params );\r\n\t\t\treturn this.disconnectables( params.signal, disconnectable, disconnectable_live );\r\n\t\t}\r\n\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator );\r\n\t}\r\n\r\n\t/**\r\n\t * Alias for query( ..., { subtree: false } )\r\n\t */\r\n\tchildren( selectors, callback = undefined, params = {} ) {\r\n\t\t[ selectors, callback = undefined, params = {} ] = this.resolveArgs( arguments );\r\n\t\treturn this.query( selectors, callback, { ...params, subtree: false } );\r\n\t}\r\n\r\n\t/**\r\n\t * Alias for query( ..., { subtree: true } )\r\n\t */\r\n\tsubtree( selectors, callback = undefined, params = {} ) {\r\n\t\t[ selectors, callback = undefined, params = {} ] = this.resolveArgs( arguments );\r\n\t\treturn this.query( selectors, callback, { ...params, subtree: true } );\r\n\t}\r\n\r\n\t/**\r\n\t * Mutation Observer\r\n\t * \r\n\t * @param array|Element|string\t\tselectors\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t * \r\n\t * @returns Disconnectable\r\n\t */\r\n\tobserve( selectors, callback, params = {} ) {\r\n\t\t[ selectors, callback, params = {} ] = this.resolveArgs( arguments );\r\n\t\t// ------------------------\r\n\t\tif ( [ 'sync', 'intercept' ].includes( params.timing ) ) return this.observeSync( selectors, callback, params );\r\n\t\tif ( params.timing && params.timing !== 'async' ) throw new Error( `Timing option \"${ params.timing }\" invalid.` );\r\n\t\t// ------------------------\r\n\t\tconst { context, window, wq, document } = this;\r\n\t\t// ------------------\r\n\t\tif ( params.eventDetails ) { wq.domInterceptionRecordsAlwaysOn = true; }\r\n\t\tif ( ( document.readyState === 'loading' || wq.domInterceptionRecordsAlwaysOn ) && !wq.domInterceptionHooks?.intercepting ) {\r\n\t\t\tdomInterception.call( window, 'sync', () => {} );\r\n\t\t}\r\n\t\t// -------------\r\n\t\tconst disconnectable = new window.MutationObserver( records => records.forEach( record => {\r\n\t\t\tdispatch.call( window, registration, withEventDetails.call( window, record ), context );\r\n\t\t} ) );\r\n\t\tdisconnectable.observe( context, { childList: true, subtree: params.subtree, } );\r\n\t\tconst signalGenerator = params.signalGenerator || params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tconst registration = { context, selectors, callback, params, signalGenerator, disconnectable };\r\n\t\t// -------------\r\n\t\tif ( params.staticSensitivity ) {\r\n\t\t\tconst disconnectable_attr = staticSensitivity.call( window, registration );\r\n\t\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator, disconnectable_attr );\r\n\t\t}\r\n\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Mutation Interceptor\r\n\t * \r\n\t * @param array|Element|string\t\tselectors\r\n\t * @param function\t\t\t\t\tcallback\r\n\t * @param object\t\t\t\t\tparams\r\n\t * \r\n\t * @returns Disconnectable\r\n\t */\r\n\tobserveSync( selectors, callback, params = {} ) {\r\n\t\t[ selectors, callback, params = {} ] = this.resolveArgs( arguments );\r\n\t\tconst { context, window } = this;\r\n\t\t// -------------\r\n\t\tif ( params.timing && ![ 'sync', 'intercept' ].includes( params.timing ) ) throw new Error( `Timing option \"${ params.timing }\" invalid.` );\r\n\t\tconst interceptionTiming = params.timing === 'intercept' ? 'intercept' : 'sync';\r\n\t\tconst intersectionDepth = params.subtree ? 'subtree' : 'children';\r\n\t\tif ( !this.registry( interceptionTiming ).size ) {\r\n\t\t\t// One handler per intercept/sync registry\r\n\t\t\tdomInterception.call( window, interceptionTiming, record => {\r\n\t\t\t\tthis.forEachMatchingContext( interceptionTiming, record, dispatch );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t// -------------\r\n\t\tconst disconnectable = { disconnect() {\r\n\t\t\tregistry.delete( registration );\r\n\t\t\tif ( !registry.size ) { registries.delete( context ); }\r\n\t\t} };\r\n\t\tconst signalGenerator = params.signalGenerator || params.lifecycleSignals && this.createSignalGenerator();\r\n\t\tconst registration = { context, selectors, callback, params, signalGenerator, disconnectable };\r\n\t\t// -------------\r\n\t\tconst registries = this.registry( interceptionTiming, intersectionDepth );\r\n\t\tif ( !registries.has( context ) ) { registries.set( context, new Set ); }\r\n\t\tconst registry = registries.get( context );\r\n\t\tregistry.add( registration );\r\n\t\t// -------------\r\n\t\tif ( params.staticSensitivity ) {\r\n\t\t\tconst disconnectable_attr = staticSensitivity.call( window, registration );\r\n\t\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator, disconnectable_attr );\r\n\t\t}\r\n\t\treturn this.disconnectables( params.signal, disconnectable, signalGenerator );\r\n\t}\r\n}\r\n\r\n/**\r\n * Sensitivty for attribute changes for attribute selectors.\r\n * \r\n * @param object registration\r\n * \r\n * @returns Disconnectable\r\n */\r\nfunction staticSensitivity( registration ) {\r\n\tconst window = this;\r\n\tconst { context, selectors, callback, params, signalGenerator } = registration;\r\n\tconst parse = selector => [ ...selector.matchAll(/\\[([^\\=\\]]+)(\\=[^\\]]+)?\\]/g) ].map( x => x[ 1 ] );\r\n\tif ( !( registration.$attrs = selectors.filter( s => typeof s === 'string' && s.includes( '[' ) ).reduce( ( attrs, selector ) => attrs.concat( parse( selector ) ), [] ) ).length ) return;\r\n\t// ---------\r\n\tconst entrants = new Set, exits = new Set;\r\n\tentrants.push = val => ( exits.delete( val ), entrants.add( val ) );\r\n\texits.push = val => ( entrants.delete( val ), exits.add( val ) );\r\n\tregistration.$deliveryCache = { entrants, exits };\r\n\t// ---------\r\n\treturn ( new AttrRealtime( context, window ) ).observe( registration.$attrs, _records => {\r\n\t\tconst records = new Map, getRecord = target => {\r\n\t\t\tif ( !records.has( target ) ) { records.set( target, { target, entrants: [], exits: [], type: 'static', event: null } ); }\r\n\t\t\treturn records.get( target );\r\n\t\t};\r\n\t\t// ---------\r\n\t\tconst matchesCache = new WeakMap;\r\n\t\tconst matches = node => {\r\n\t\t\tif ( !matchesCache.has( node ) ) { matchesCache.set( node, selectors.some( selector => node.matches( selector ) ) ); }\r\n\t\t\treturn matchesCache.get( node );\r\n\t\t};\r\n\t\t// ---------\r\n\t\tfor ( const _record of _records ) {\r\n\t\t\t[ 'entrants', 'exits' ].forEach( generation => {\r\n\t\t\t\tif ( params.generation && generation !== params.generation ) return;\r\n\t\t\t\tif ( registration.$deliveryCache[ generation ].has( _record.target ) || ( generation === 'entrants' ? !matches( _record.target ) : matches( _record.target ) ) ) return;\r\n\t\t\t\tregistration.$deliveryCache[ generation ].push( _record.target );\r\n\t\t\t\tgetRecord( _record.target )[ generation ].push( _record.target );\r\n\t\t\t\tgetRecord( _record.target ).event = _record.event;\r\n\t\t\t} );\r\n\t\t}\r\n\t\t// ---------\r\n\t\tfor ( const [ , record ] of records ) {\r\n\t\t\tconst flags = signalGenerator?.generate() || {};\r\n\t\t\tcallback( record, flags, context );\r\n\t\t}\r\n\t}, { subtree: params.subtree, timing: params.timing, eventDetails: params.eventDetails } );\r\n}\r\n\r\n/**\r\n * Dispatches a mutation record if it matches the observed.\r\n * \r\n * @param Object \t\t\tregistration \r\n * @param Object \t\t\trecord \r\n * \r\n * @returns Void\r\n */\r\nfunction dispatch( registration, _record ) {\r\n\tconst { context, selectors, callback, params, signalGenerator, $deliveryCache } = registration;\r\n\t// ---------\r\n\tconst record = { ..._record, entrants: [], exits: [] };\r\n\t[ 'entrants', 'exits' ].forEach( generation => {\r\n\t\tif ( params.generation && generation !== params.generation ) return;\r\n\t\tif ( selectors.length ) {\r\n\t\t\trecord[ generation ] = nodesIntersection( selectors, _record[ generation ], _record.event !== 'parse' );\r\n\t\t} else {\r\n\t\t\trecord[ generation ] = [ ..._record[ generation ] ];\r\n\t\t}\r\n\t\tif ( !$deliveryCache ) return;\r\n\t\tfor ( const node of record[ generation ] ) {\r\n\t\t\t$deliveryCache[ generation ].push( node );\r\n\t\t}\r\n\t} );\r\n\t// ---------\r\n\tif ( !record.entrants.length && !record.exits.length ) return;\r\n\tconst flags = signalGenerator?.generate() || {};\r\n\tcallback( record, flags, context );\r\n}\r\n\r\n/**\r\n * Aggregates instances of els in sources\r\n * \r\n * @param Array \t\t\ttargets \r\n * @param Array \t\t\tsources \r\n * @param Bool \t\t\t\tdeepIntersect \r\n * \r\n * @returns \r\n */\r\nfunction nodesIntersection( targets, sources, deepIntersect ) {\r\n\tsources = Array.isArray( sources ) ? sources : [ ...sources ];\r\n\tconst match = ( sources, target ) => {\r\n\t\t// Filter out text nodes\r\n\t\tsources = sources.filter( source => source.matches );\r\n\t\tif ( typeof target === 'string' ) {\r\n\t\t\t// Is directly mutated...\r\n\t\t\tlet matches = sources.filter( source => source.matches( target ) );\r\n\t\t\t// Is contextly mutated...\r\n\t\t\tif ( deepIntersect ) {\r\n\t\t\t\tmatches = sources.reduce( ( collection, source ) => {\r\n\t\t\t\t\treturn [ ...collection, ...source.querySelectorAll( target ) ];\r\n\t\t\t\t}, matches );\r\n\t\t\t}\r\n\t\t\tif ( matches.length ) return matches;\r\n\t\t} else {\r\n\t\t\t// Is directly mutated...\r\n\t\t\tif ( sources.includes( target ) || (\r\n\t\t\t\tdeepIntersect && sources.some( source => source.contains( target ) )\r\n\t\t\t) ) { return [ target ]; }\r\n\t\t}\r\n\t};\r\n\t// Search can be expensive...\r\n\t// Multiple listeners searching the same thing in the same list?\r\n\tif ( !sources.$$searchCache ) { sources.$$searchCache = new Map; }\r\n\treturn targets.reduce( ( matches, target ) => {\r\n\t\tlet _matches;\r\n\t\tif ( sources.$$searchCache.has( target ) ) {\r\n\t\t\t_matches = sources.$$searchCache.get( target );\r\n\t\t} else {\r\n\t\t\t_matches = match( sources, target ) || [];\r\n\t\t\tif ( _isObject( target ) ) {\r\n\t\t\t\tsources.$$searchCache.set( target, _matches );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn matches.concat( _matches );\r\n\t}, [] );\r\n}\r\n\r\n/**\r\n * Determines the event for a mutation record\r\n * \r\n * @param MutationRecord \t{ target, entrants, exits }\r\n * \r\n * @returns Object\r\n */\r\nfunction withEventDetails( { target, addedNodes, removedNodes } ) {\r\n\tlet window = this, event;\r\n\tevent = _arrFrom( addedNodes ).reduce( ( prev, node ) => prev || window.wq.domInterceptionRecords?.get( node ), null );\r\n\tevent = _arrFrom( removedNodes ).reduce( ( prev, node ) => prev || window.wq.domInterceptionRecords?.get( node ), event );\r\n\tevent = event || window.document.readyState === 'loading' && 'parse' || 'mutation';\r\n\treturn { target, entrants: addedNodes, exits: removedNodes, type: 'observation', event };\r\n}\r\n\r\n/**\r\n * DOM intersection engine.\r\n * \r\n * @param String \t\t\ttiming \r\n * @param Function \t\t\tcallback \r\n * \r\n * @returns \r\n */\r\nfunction domInterception( timing, callback ) {\r\n\tconst window = this;\r\n\tconst { wq, document, Node, Element, HTMLElement, HTMLTemplateElement, DocumentFragment } = window;\r\n\tif ( !wq.domInterceptionHooks ) { wq.domInterceptionHooks = new Map; }\r\n\tif ( !wq.domInterceptionHooks.has( timing ) ) { wq.domInterceptionHooks.set( timing, new Set ); }\r\n\twq.domInterceptionHooks.get( timing ).add( callback );\r\n\tconst rm = () => wq.domInterceptionHooks.get( timing ).delete( callback );\r\n\tif ( wq.domInterceptionHooks?.intercepting ) return rm;\r\n\tconsole.warn( `DOM mutation APIs are now being intercepted.` );\r\n\twq.domInterceptionHooks.intercepting = true;\r\n\twq.domInterceptionRecords = new Map;\r\n\r\n\t// Interception hooks\r\n\tconst shouldObserve = () => true//document.readyState === 'loading' || wq.domInterceptionRecordsAlwaysOn;\r\n\tconst intercept = ( record, defaultAction ) => {\r\n\t\tif ( shouldObserve() ) {\r\n\t\t\trecord.entrants.concat( record.exits ).forEach( node => {\r\n\t\t\t\tclearTimeout( wq.domInterceptionRecords.get( node )?.timeout ); // Clear any previous that's still active\r\n\t\t\t\twq.domInterceptionRecords.set( node, record.event ); // Main: set event details... and next to timeout details\r\n\t\t\t\tconst timeout = setTimeout( () => { wq.domInterceptionRecords.delete( node ); }, 0 );\r\n\t\t\t\tObject.defineProperty( record.event, 'timeout', { value: timeout, configurable: true } );\r\n\t\t\t} );\r\n\t\t} else { wq.domInterceptionRecords.clear(); }\r\n\t\twq.domInterceptionHooks.get( 'intercept' )?.forEach( callback => callback( record ) );\r\n\t\tconst returnValue = defaultAction();\r\n\t\twq.domInterceptionHooks.get( 'sync' )?.forEach( callback => callback( record ) );\r\n\t\treturn returnValue;\r\n\t};\r\n\r\n\t// Interception observer WILL need to know non-API-based mutations\r\n\tif ( shouldObserve() ) {\r\n\t\tconst mo = new window.MutationObserver( records => records.forEach( record => {\r\n\t\t\tif ( Array.isArray( ( record = withEventDetails.call( window, record ) ).event ) ) return;\r\n\t\t\twq.domInterceptionHooks.get( 'intercept' )?.forEach( callback => callback( record ) );\r\n\t\t\twq.domInterceptionHooks.get( 'sync' )?.forEach( callback => callback( record ) );\r\n\t\t} ) );\r\n\t\tmo.observe( document, { childList: true, subtree: true, } );\r\n\t\tdocument.addEventListener( 'readystatechange', () => !shouldObserve() && mo.disconnect() );\r\n\t}\r\n\r\n\t// Intercept DOM mutation methods\r\n\tconst originalApis = Object.create( null );\r\n\t[ 'insertBefore'/*Node*/, 'insertAdjacentElement', 'insertAdjacentHTML', 'setHTML',\r\n\t\t'replaceChildren', 'replaceWith', 'remove', 'replaceChild'/*Node*/, 'removeChild'/*Node*/, \r\n\t\t'before', 'after', 'append', 'prepend', 'appendChild'/*Node*/, \r\n\t].forEach( apiName => {\r\n\t\t// We'll be sure to monkey the correct interface\r\n\t\tconst Interface = [ 'insertBefore', 'replaceChild', 'removeChild', 'appendChild' ].includes( apiName ) ? Node : Element;\r\n\t\toriginalApis[ apiName ] = Interface.prototype[ apiName ];\r\n\t\t// In case newer methods like setHTML() are not supported\r\n\t\tif ( !originalApis[ apiName ] ) return;\r\n\t\t// Monkey now...\r\n\t\tInterface.prototype[ apiName ] = function( ...args ) {\r\n\t\t\t// Instance of Node interface? Abort!\r\n\t\t\tconst exec = () => originalApis[ apiName ].call( this, ...args );\r\n\t\t\tif ( !( this instanceof Element || this instanceof DocumentFragment ) ) return exec();\r\n\t\t\t// --------------\r\n\t\t\t// Obtain exits and entrants\r\n\t\t\tlet exits = [], entrants = [], target = this;\r\n\t\t\tif ( [ 'insertBefore' ].includes( apiName ) ) {\r\n\t\t\t\tentrants = [ args[ 0 ] ];\r\n\t\t\t} else if ( [ 'insertAdjacentElement', 'insertAdjacentHTML' ].includes( apiName ) ) {\r\n\t\t\t\tentrants = [ args[ 1 ] ];\r\n\t\t\t\tif ( [ 'beforebegin', 'afterend' ].includes( args[ 0 ] ) ) {\r\n\t\t\t\t\ttarget = this.parentNode;\r\n\t\t\t\t}\r\n\t\t\t} else if ( [ 'setHTML', 'replaceChildren' ].includes( apiName ) ) {\r\n\t\t\t\texits = [ ...this.childNodes ];\r\n\t\t\t\tentrants = apiName === 'replaceChildren' ? [ ...args ] : [ args[ 0 ] ];\r\n\t\t\t} else if ( [ 'replaceWith', 'remove' ].includes( apiName ) ) {\r\n\t\t\t\texits = [ this ];\r\n\t\t\t\tentrants = apiName === 'replaceWith' ? [ ...args ] : [];\r\n\t\t\t\ttarget = this.parentNode;\r\n\t\t\t} else if ( [ 'replaceChild' ].includes( apiName ) ) {\r\n\t\t\t\texits = [ args[ 1 ] ];\r\n\t\t\t\tentrants = [ args[ 0 ] ];\r\n\t\t\t} else if ( [ 'removeChild' ].includes( apiName ) ) {\r\n\t\t\t\texits = [ ...args ];\r\n\t\t\t} else {\r\n\t\t\t\t// 'before', 'after', 'append', 'prepend', 'appendChild'\r\n\t\t\t\tentrants = [ ...args ];\r\n\t\t\t\tif ( [ 'before', 'after' ].includes( apiName ) ) {\r\n\t\t\t\t\ttarget = this.parentNode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// --------------\r\n\t\t\t// Parse HTML to entrants\r\n\t\t\tlet apiNameFinal = apiName;\r\n\t\t\tif ( [ 'insertAdjacentHTML', 'setHTML' ].includes( apiName ) ) {\r\n\t\t\t\tlet tempNodeName = this.nodeName;\r\n\t\t\t\tif ( apiName === 'insertAdjacentHTML' && [ 'beforebegin', 'afterend' ].includes( args[ 0 ] ) ) {\r\n\t\t\t\t\t// We can't handle this... and this is going to throw afterall\r\n\t\t\t\t\tif ( !this.parentNode ) return originalApis[ apiName ].call( this, ...args );\r\n\t\t\t\t\ttempNodeName = this.parentNode.nodeName;\r\n\t\t\t\t}\r\n\t\t\t\tconst temp = document.createElement( tempNodeName );\r\n\t\t\t\toriginalApis.setHTML.call( temp, entrants[ 0 ], apiName === 'setHTML' ? args[ 1 ] : {} );\r\n\t\t\t\tentrants = [ ...temp.childNodes ];\r\n\t\t\t\t// -------------- \r\n\t\t\t\tif ( apiName === 'insertAdjacentHTML' ) {\r\n\t\t\t\t\tapiNameFinal = 'insertAdjacentElement';\r\n\t\t\t\t\targs[ 1 ] = new DocumentFragment;\r\n\t\t\t\t\targs[ 1 ].______isTemp = true;\r\n\t\t\t\t\targs[ 1 ].append( ...temp.childNodes );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tapiNameFinal = 'replaceChildren';\r\n\t\t\t\t\targs = [ ...temp.childNodes ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// --------------\r\n\t\t\tconst record = { target, entrants, exits, type: 'interception', event: [ this, apiName ] };\r\n\t\t\treturn intercept( record, () => {\r\n\t\t\t\treturn originalApis[ apiNameFinal ].call( this, ...args );\r\n\t\t\t} );\r\n\t\t}\r\n\t} );\r\n\r\n\t// Intercept DOM mutation properties\r\n\t[ 'outerHTML', 'outerText'/*HTMLElement*/, 'innerHTML', \r\n\t\t'innerText'/*HTMLElement*/,'textContent'/*Node*/, 'nodeValue'/*Node*/\r\n\t].forEach( apiName => {\r\n\t\t// We'll be sure to monkey the correct interface\r\n\t\tconst Interface = [ 'textContent', 'nodeValue' ].includes( apiName ) ? Node : (\r\n\t\t\t[ 'outerText', 'innerText' ].includes( apiName ) ? HTMLElement : Element\r\n\t\t);\r\n\t\toriginalApis[ apiName ] = Object.getOwnPropertyDescriptor( Interface.prototype, apiName );\r\n\t\tObject.defineProperty( Interface.prototype, apiName, { ...originalApis[ apiName ], set: function( value ) {\r\n\t\t\tlet exec = () => originalApis[ apiName ].set.call( this, value );\r\n\t\t\t// Instance of Node interface? Abort!\r\n\t\t\tif ( !( this instanceof Element ) ) return exec();\r\n\t\t\t// --------------\r\n\t\t\t// Obtain exits and entrants\r\n\t\t\tlet exits = [], entrants = [], target = this;\r\n\t\t\tif ( [ 'outerHTML', 'outerText' ].includes( apiName ) ) {\r\n\t\t\t\texits = [ this ];\r\n\t\t\t\ttarget = this.parentNode;\r\n\t\t\t} else {\r\n\t\t\t\t// 'innerHTML', 'innerText', 'textContent', 'nodeValue'\r\n\t\t\t\texits = /*this instanceof HTMLTemplateElement \r\n\t\t\t\t\t? [ ...this.content.childNodes ]\r\n\t\t\t\t\t: */[ ...this.childNodes ];\r\n\t\t\t}\r\n\t\t\t// --------------\r\n\t\t\t// Parse HTML to nodes\r\n\t\t\tif ( [ 'outerHTML', 'innerHTML' ].includes( apiName ) ) {\r\n\t\t\t\tlet tempNodeName = this.nodeName;\r\n\t\t\t\tif ( apiName === 'outerHTML' ) {\r\n\t\t\t\t\t// We can't handle this... and this is going to throw afterall\r\n\t\t\t\t\tif ( !this.parentNode ) return exec();\r\n\t\t\t\t\ttempNodeName = this.parentNode.nodeName;\r\n\t\t\t\t}\r\n\t\t\t\tconst temp = document.createElement( tempNodeName === 'TEMPLATE' ? 'div' : tempNodeName );\r\n\t\t\t\toriginalApis[ apiName ].set.call( temp, value );\r\n\t\t\t\tentrants = /*[ ...temp.childNodes ];*/this instanceof HTMLTemplateElement ? [] : [ ...temp.childNodes ];\r\n\t\t\t\t// -------------- \r\n\t\t\t\tif ( apiName === 'outerHTML' ) {\r\n\t\t\t\t\tvalue = new DocumentFragment;\r\n\t\t\t\t\tvalue.______isTemp = true;\r\n\t\t\t\t\tvalue.append( ...temp.childNodes );\r\n\t\t\t\t\texec = () => originalApis.replaceWith.call( this, value );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( this instanceof HTMLTemplateElement ) {\r\n\t\t\t\t\t\texec = () => this.content.replaceChildren( ...temp.childNodes );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texec = () => originalApis.replaceChildren.call( this, ...temp.childNodes );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// -------------- \r\n\t\t\tconst record = { target, entrants, exits, type: 'interception', event: [ this, apiName ] };\r\n\t\t\treturn intercept( record, exec );\r\n\t\t} } );\r\n\t} );\r\n\r\n\t// Intercept document mutation methods\r\n\t[ 'append', 'prepend', 'replaceChildren' ].forEach( apiName => {\r\n\t\t[ document, DocumentFragment.prototype ].forEach( target => {\r\n\t\t\tconst originalApi = target[ apiName ];\r\n\t\t\ttarget[ apiName ] = function( ...args ) {\r\n\t\t\t\tif ( this.______isTemp ) return originalApi.call( this, ...args );\r\n\t\t\t\tconst exits = apiName === 'replaceChildren' ? [ ...this.childNodes ] : [];\r\n\t\t\t\tconst record = {\r\n\t\t\t\t\ttarget: this,\r\n\t\t\t\t\tentrants: args,\r\n\t\t\t\t\texits,\r\n\t\t\t\t\ttype: 'interception', \r\n\t\t\t\t\tevent: [ this, apiName ]\r\n\t\t\t\t};\r\n\t\t\t\treturn intercept( record, () => {\r\n\t\t\t\t\treturn originalApi.call( this, ...args );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\t} );\r\n\r\n\treturn rm;\r\n}\r\n", "\r\n/**\r\n * Applies all supported polyfills\r\n */\r\nexport default function() {\r\n CSS_escape.call( this );\r\n Node_isConnected.call( this );\r\n Element_matches.call( this );\r\n}\r\n\r\n/**\r\n * Polyfills the window.CSS object.\r\n * \r\n * @return void\r\n */\r\nexport function CSS_escape() {\r\n const window = this;\r\n if ( !window.CSS ) { window.CSS = {} }\r\n if ( !window.CSS.escape ) {\r\n /**\r\n * Polyfills the window.CSS.escape() function.\r\n * \r\n * @param string str \r\n * \r\n * @return string\r\n */\r\n window.CSS.escape = str => str.replace( /([\\:@\\~\\$\\&])/g, '\\\\$1' );\r\n }\r\n}\r\n\r\n/**\r\n * Polyfills the Node.prototype.isConnected property\r\n * \r\n * @see MDN\r\n * \r\n * @return bool\r\n*/\r\nexport function Node_isConnected() {\r\n const window = this;\r\n if ( !( 'isConnected' in window.Node.prototype ) ) {\r\n Object.defineProperty( window.Node.prototype, 'isConnected', { get: function() {\r\n return !this.ownerDocument || !(\r\n this.ownerDocument.compareDocumentPosition( this )\r\n & this.DOCUMENT_POSITION_DISCONNECTED);\r\n } } );\r\n }\r\n}\r\n\r\n/**\r\n * Polyfills the Element.prototype.matches() method\r\n * \r\n * @see MDN\r\n * \r\n * @return void\r\n*/\r\nexport function Element_matches() {\r\n const window = this;\r\n if ( !window.Element.prototype.matches ) {\r\n window.Element.prototype.matches = \r\n window.Element.prototype.matchesSelector || \r\n window.Element.prototype.mozMatchesSelector ||\r\n window.Element.prototype.msMatchesSelector || \r\n window.Element.prototype.oMatchesSelector || \r\n window.Element.prototype.webkitMatchesSelector ||\r\n function( s ) {\r\n var matches = ( this.document || this.ownerDocument ).querySelectorAll( s ),\r\n i = matches.length;\r\n while ( --i >= 0 && matches.item( i ) !== this ) {}\r\n return i > -1; \r\n }\r\n }\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _isNumeric } from '@webqit/util/js/index.js';\r\nimport { _set, _get, _merge } from '@webqit/util/obj/index.js';\r\nimport _Reflow from './_Reflow.js';\r\nimport DOMRealtime from './realtime/DOMRealtime.js';\r\nimport AttrRealtime from './realtime/AttrRealtime.js';\r\nimport polyfill from './polyfills.js';\r\n\r\nexport default function() {\r\n const window = this;\r\n if ( !window.wq ) window.wq = {};\r\n if ( window.wq.dom ) return window.wq.dom;\r\n window.wq.dom = {};\r\n polyfill.call( window );\r\n // ------\r\n const Reflow = _Reflow( window );\r\n window.wq.dom.Reflow = new Reflow;\r\n // ------\r\n window.wq.dom.DOMRealtime = DOMRealtime;\r\n window.wq.dom.AttrRealtime = AttrRealtime;\r\n window.wq.dom.realtime = ( context, namespace = 'tree' ) => {\r\n if ( namespace === 'tree' ) return new DOMRealtime( context, window );\r\n if ( namespace === 'attr' ) return new AttrRealtime( context, window );\r\n };\r\n // ------\r\n window.wq.dom.ready = ready.bind( window );\r\n window.wq.dom.meta = meta.bind( window );\r\n // ------\r\n return window.wq.dom;\r\n}\r\n\r\n\r\n/**\r\n * DOM-ready listeners.\r\n * \r\n * @param Function\t \t\tcallback\r\n * \r\n * @return void\r\n */\r\nfunction ready( callback ) {\r\n\tconst window = this;\r\n\tif ( window.document.readyState === 'complete' ) {\r\n\t\tcallback( window );\r\n\t} else {\r\n\t\tif ( !window.document.domReadyCallbacks ) {\r\n\t\t\twindow.document.domReadyCallbacks = [];\r\n\t\t\twindow.document.addEventListener( 'DOMContentLoaded', () => {\r\n\t\t\t\twindow.document.domReadyCallbacks.splice( 0 ).forEach( cb => cb( window ) );\r\n\t\t\t}, false );\r\n\t\t}\r\n\t\twindow.document.domReadyCallbacks.push( callback );\r\n\t}\r\n}\r\n\r\n/**\r\n * A wq's meta tag props reader.\r\n * \r\n * @param String name\r\n * @param Bool\t readWrite\r\n * \r\n * @return Object\r\n */\r\nfunction meta( name, readWrite = false ) {\r\n const window = this;\r\n const metaInstance = { content: {} };\r\n // Initialize reader\r\n if ( !(metaInstance.el = window.document.querySelector( `meta[name=\"${ name }\"]` ) ) && readWrite ) {\r\n metaInstance.el = window.document.createElement( 'meta' );\r\n metaInstance.el.setAttribute( 'name', name );\r\n window.document.head.append( metaInstance.el );\r\n }\r\n if ( metaInstance.el ) {\r\n metaInstance.content = ( metaInstance.el.getAttribute( 'content' ) || '' ).split( ';' ).filter( v => v ).reduce( ( _metaVars, directive ) => {\r\n const directiveSplit = directive.split( '=' ).map( d => d.trim() );\r\n _set( _metaVars, directiveSplit[ 0 ].split( '.' ), directiveSplit[ 1 ] === 'true' \r\n ? true : (directiveSplit[ 1 ] === 'false' ? false : (\r\n _isNumeric( directiveSplit[ 1 ] ) ? parseInt( directiveSplit[ 1 ] ) : directiveSplit[ 1 ]\r\n ) )\r\n );\r\n return _metaVars;\r\n }, {} );\r\n }\r\n // Read prop...\r\n metaInstance.get = function( prop ) { return JSON.parse( JSON.stringify( _get( this.content, prop.split( '.' ) ) ) ); }\r\n // Copy...\r\n metaInstance.copy = function() {\r\n\t\treturn JSON.parse( JSON.stringify( this.content ) );\r\n };\r\n\t// Copy with defaults...\r\n metaInstance.copyWithDefaults = function( ...defaults ) {\r\n\t\tif ( defaults.length ) return _merge( true, {}, ...defaults.reverse().concat( this.content ) );\r\n\t\treturn this.copy();\r\n };\r\n return metaInstance;\r\n}", "\r\nexport default function() {\r\n const window = this;\r\n return class ContextRequestEvent extends window.Event {\r\n\r\n /**\r\n * @constructor\r\n */\r\n constructor( request, callback, { type = 'contextrequest', ...params } = {} ) {\r\n super( type, params );\r\n Object.defineProperty( this, 'request', { get: () => request } );\r\n Object.defineProperty( this, 'callback', { get: () => callback } );\r\n }\r\n\r\n /**\r\n * @respondWith\r\n */\r\n respondWith( response, ...rest ) {\r\n if ( this.request.diff ) {\r\n if ( 'previousValue' in this && this.previousValue === response ) return;\r\n this.previousValue = response;\r\n }\r\n return this.callback( response, ...rest );\r\n }\r\n };\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _internals } from '@webqit/util/js/index.js';\r\n\r\nexport const _ = ( node, ...args ) => _internals( node, 'oohtml', ...args );\r\n\r\nexport const _compare = ( a, b, depth = 1, objectSizing = false ) => {\r\n if ( depth && typeof a === 'object' && a && typeof b === 'object' && b && ( !objectSizing || Object.keys( a ).length === Object.keys( b ).length ) ) {\r\n for ( let key in a ) {\r\n if ( !_compare( a[ key ], b[ key ], depth - 1, objectSizing ) ) return false;\r\n }\r\n return true;\r\n }\r\n if ( Array.isArray( a ) && Array.isArray( b ) && a.length === b.length ) {\r\n return ( b = b.slice( 0 ).sort() ) && a.slice( 0 ).sort().every( ( valueA, i ) => valueA === b[ i ] );\r\n }\r\n return a === b;\r\n};", "\r\n/**\r\n * @imports\r\n */\r\nimport _ContextRequestEvent from './_ContextRequestEvent.js';\r\nimport { _ } from '../util.js';\r\n\r\nexport default class HTMLContextManager {\r\n\r\n /**\r\n * @instance\r\n */\r\n static instance( host ) {\r\n return _( host ).get( 'contextsmanager::instance' ) || new this( host );;\r\n }\r\n\r\n /**\r\n * @constructor\r\n */\r\n constructor( host ) {\r\n _( host ).get( `contextsmanager::instance` )?.dispose();\r\n _( host ).set( `contextsmanager::instance`, this );\r\n const priv = { host, contexts: new Set };\r\n Object.defineProperty( this, '#', { get: () => priv } );\r\n const ContextRequestEvent = _ContextRequestEvent.call( host.ownerDocument?.defaultView || host.defaultView );\r\n Object.defineProperty( this, 'ContextRequestEvent', { get: () => ContextRequestEvent } );\r\n this[ Symbol.iterator ] = function*() {\r\n const it = priv.contexts[ Symbol.iterator ]();\r\n yield it.next().value;\r\n }\r\n }\r\n\r\n /**\r\n * @length()\r\n */\r\n get length() {\r\n this[ '#' ].contexts.size;\r\n }\r\n\r\n /**\r\n * @find()\r\n */\r\n find( callback ) {\r\n return [ ...this[ '#' ].contexts ].find( callback );\r\n }\r\n\r\n /**\r\n * @attach()\r\n */\r\n attach( context ) {\r\n this[ '#' ].contexts.add( context );\r\n context.initialize( this[ '#' ].host );\r\n }\r\n\r\n /**\r\n * @detach()\r\n */\r\n detach( context ) {\r\n context.dispose( this[ '#' ].host );\r\n this[ '#' ].contexts.delete( context );\r\n }\r\n\r\n /**\r\n * @ask()\r\n */\r\n ask( request, callback, params = {} ) {\r\n return this[ '#' ].host.dispatchEvent(\r\n new this.ContextRequestEvent( request, callback, { bubbles: true, ...params } )\r\n );\r\n }\r\n\r\n /**\r\n * @dispose()\r\n */\r\n dispose() {}\r\n\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _compare } from '../util.js';\r\nimport HTMLContextManager from './HTMLContextManager.js';\r\n\r\nexport default class HTMLContext {\r\n\r\n /**\r\n * @params\r\n */\r\n static get params() {\r\n return {};\r\n }\r\n\r\n /**\r\n * @attachTo\r\n */\r\n static attachTo( host, Id, multiple = false ) {\r\n let instance, contextMgr = HTMLContextManager.instance( host );\r\n if ( !multiple && ( instance = contextMgr.find( cx => this.matchRequest( cx.id, Id, true ) ) ) ) return instance;\r\n return contextMgr.attach( new this( Id ) );\r\n }\r\n\r\n /**\r\n * @detachFrom\r\n */\r\n static detachFrom( host, Id, multiple = false ) {\r\n let instance, contextMgr = HTMLContextManager.instance( host );\r\n for ( instance of contextMgr[ '#' ].contexts ) {\r\n if ( !this.matchRequest( instance.id, Id, true ) || ( typeof multiple === 'function' && !multiple( instance ) ) ) continue;\r\n contextMgr.detach( instance );\r\n if ( typeof multiple !== 'function' && !multiple ) return instance;\r\n }\r\n }\r\n \r\n /**\r\n * @createId\r\n */\r\n static createId( host, fields = {} ) {\r\n const id = { type: 'HTMLModules', ...fields };\r\n if ( id.name ) return id;\r\n if ( host.getAttribute && !( id.name = ( host.getAttribute( this.params.context.attr.contextname ) || '' ).trim() ) ) {\r\n delete id.name;\r\n } else if ( !host.ownerDocument ) {\r\n id.name = 'root';\r\n }\r\n return id;\r\n }\r\n \r\n /**\r\n * @createRequest\r\n */\r\n static createRequest( fields = {} ) {\r\n return { ...fields };\r\n }\r\n\r\n /**\r\n * @matchesRequest\r\n */\r\n static matchRequest( id, request, strict = false ) {\r\n if ( strict ) return _compare( id, request, 1, true );\r\n return request.type === id.type && !request.name || request.name === id.name;\r\n }\r\n\r\n /**\r\n * @constructor\r\n */\r\n constructor( id ) {\r\n Object.defineProperty( this, 'id', { get: () => id } );\r\n Object.defineProperty( this, 'subscriptions', { value: new Set } );\r\n }\r\n\r\n /**\r\n * @length()\r\n */\r\n get length() {\r\n this.subscriptions.size;\r\n }\r\n\r\n /**\r\n * @handle()\r\n */\r\n handle( event ) {}\r\n\r\n /**\r\n * @subscribe()\r\n */\r\n subscribe( event ) {\r\n this.subscriptions.add( event );\r\n if ( !event.request.signal ) return;\r\n event.request.signal.addEventListener( 'abort', () => {\r\n this.unsubscribe( event );\r\n } );\r\n }\r\n\r\n /**\r\n * @unsubscribe()\r\n */\r\n unsubscribe( event ) {\r\n this.subscriptions.delete( event );\r\n event.request.controller?.abort();\r\n }\r\n\r\n /**\r\n * @handleEvent()\r\n */\r\n handleEvent( event ) {\r\n if ( this.disposed || ( event.target === this.host && !event.request?.selfScoped )\r\n || !event.request || typeof event.callback !== 'function' || !this.constructor.matchRequest( this.id, event.request ) ) return;\r\n event.stopPropagation();\r\n if ( event.type === 'contextclaim' ) {\r\n const claims = new Set;\r\n this.subscriptions.forEach( subscriptionEvent => {\r\n if ( !event.target.contains( subscriptionEvent.request.selfScoped ? subscriptionEvent.target : subscriptionEvent.target.parentNode ) \r\n || !this.constructor.matchRequest( event.request/*provider ID*/, subscriptionEvent.request/*request ID*/ ) ) return;\r\n this.subscriptions.delete( subscriptionEvent );\r\n claims.add( subscriptionEvent );\r\n } );\r\n event.respondWith( claims );\r\n } else if ( event.type === 'contextrequest' ) {\r\n if ( event.request.live ) { this.subscribe( event ); }\r\n this.handle( event );\r\n }\r\n }\r\n\r\n /**\r\n * @initialize()\r\n */\r\n initialize( host ) {\r\n this.host = host;\r\n this.disposed = false;\r\n host.addEventListener( 'contextrequest', this );\r\n host.addEventListener( 'contextclaim', this );\r\n HTMLContextManager.instance( host ).ask( this.id, claims => claims.forEach( subscriptionEvent => {\r\n this.subscribe( subscriptionEvent );\r\n this.handle( subscriptionEvent );\r\n } ), { type: 'contextclaim' } );\r\n return this;\r\n }\r\n \r\n /**\r\n * @dispose()\r\n */\r\n dispose( host ) {\r\n this.disposed = true;\r\n host.removeEventListener( 'contextrequest', this );\r\n host.removeEventListener( 'contextclaim', this );\r\n this.subscriptions.forEach( subscriptionEvent => {\r\n this.unsubscribe( subscriptionEvent );\r\n const { target, request, callback, params } = subscriptionEvent;\r\n HTMLContextManager.instance( target ).ask( request, callback, params );\r\n } );\r\n return this;\r\n }\r\n\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _internals, _isObject, _isTypeObject, _isFunction, _getType } from '@webqit/util/js/index.js';\r\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\r\nimport ListenerRegistry from './core/ListenerRegistry.js';\r\nimport TrapsRegistry from './core/TrapsRegistry.js';\r\nimport Descriptor from './core/Descriptor.js';\r\nimport { unproxy } from './actors.js';\r\n\r\n/* ---------------SPECIAL APIs--------------- */\r\n\r\n/**\r\n * Reduces a path array against handler.\r\n * \r\n * @param Array|Object\t target\r\n * @param Array\t path\r\n * @param Function\t receiver\r\n * @param Function\t final\r\n * @param Object\t params\r\n * \r\n * @example deep( object, [ segement1, segement2 ], observe, ( value, flags ) => {}, params );\r\n *\r\n * @return Any\r\n */\r\nexport function deep( target, path, receiver, final = x => x, params = {} ) {\r\n return ( function eat( target, path, _params ) {\r\n const segment = path[ _params.level ];\r\n // ---------------\r\n if ( _params.level < path.length - 1 ) { _params = { ..._params, preflight: true }; }\r\n else { _params = { ..._params, preflight: /*reset*/params.preflight }; }\r\n // ---------------\r\n return receiver( target, segment, ( result, ...args ) => {\r\n // -----------\r\n const paramsNext = ( flags = {} ) => ( { ..._params, ...flags, level: _params.level + 1, } );\r\n const addTrail = desc => {\r\n if ( !( desc instanceof Descriptor ) ) return;\r\n desc.path = [ desc.key ];\r\n if ( target instanceof Descriptor ) {\r\n desc.path = target.path.concat( desc.key );\r\n desc.context = target;\r\n }\r\n };\r\n // -----------\r\n if ( isPropsList( segment ) && Array.isArray( result ) ) {\r\n // -----------\r\n result.forEach( addTrail );\r\n if ( _params.level === path.length - 1 || ( !result.length && _params.midwayResults ) ) return final( result, ...args );\r\n return result.map( entry => eat( entry, path, paramsNext( ...args ) ) )\r\n // -----------\r\n }\r\n // -----------\r\n addTrail( result );\r\n const $isTypeObject = _isTypeObject( resolveObj( result, false ) );\r\n if ( _params.level === path.length - 1 || ( !$isTypeObject && _params.midwayResults ) ) return final( result, ...args );\r\n return $isTypeObject && eat( result, path, paramsNext( ...args ) );\r\n // -----------\r\n }, _params );\r\n } )( target, path.slice( 0 ), { ...params, level: 0 } );\r\n}\r\n\r\n/**\r\n * Adds an observer to a target's registry.\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Object\t prop\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return AbortController\r\n */\r\nexport function observe( target, prop, receiver, params = {} ) {\r\n // ---------------\r\n target = resolveObj( target );\r\n\tif ( _isFunction( arguments[ 1 ] ) ) {\r\n [ , receiver, params = {} ] = arguments;\r\n prop = Infinity;\r\n\t}\r\n\tif ( !_isFunction( receiver ) ) throw new Error( `Handler must be a function; \"${ _getType( receiver ) }\" given!` );\r\n // ---------------\r\n const emit = bind( target, prop, receiver, params );\r\n if ( params.preflight ) {\r\n params = { ...params, descripted: true };\r\n delete params.live;\r\n return get( target, prop, emit, params );\r\n }\r\n return emit();\r\n}\r\n\r\n/**\r\n * Adds an interceptor object to a target's registry.\r\n *\r\n * @param Array|Object\t target\r\n * @param Object\t traps\r\n * @param Object\t\t params\r\n *\r\n * @return AbortRegistry\r\n */\r\nexport function intercept( target, traps, params = {} ) {\r\n // ---------------\r\n target = resolveObj( target );\r\n if ( !_isObject( traps ) ) {\r\n [ /*target*/, /*type*/, /*handler*/, params = {} ] = arguments;\r\n traps = { [ arguments[ 1 ] ]: arguments[ 2 ] };\r\n }\r\n // ---------------\r\n return TrapsRegistry.getInstance( target, true, params.namespace ).addRegistration( { traps, params } );\r\n}\r\n\r\n/* ---------------QUERY APIs--------------- */\r\n\r\n/**\r\n * Performs a \"getOwnPropertyDescriptor\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Number\t prop\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function getOwnPropertyDescriptor( target, prop, receiver = x => x, params = {} ) {\r\n return exec( target, 'getOwnPropertyDescriptor', { key: prop }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"getOwnPropertyDescriptors\" operation.\r\n * @note this isn't part of the standard Reflect API.\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Number\t prop\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function getOwnPropertyDescriptors( target, prop, receiver = x => x, params = {} ) {\r\n return exec( target, 'getOwnPropertyDescriptors', { key: prop }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"getPrototypeOf\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function getPrototypeOf( target, receiver = x => x, params = {} ) {\r\n return exec( target, 'getPrototypeOf', {}, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"isExtensible\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function isExtensible( target, receiver = x => x, params = {} ) {\r\n return exec( target, 'isExtensible', {}, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"ownKeys\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function ownKeys( target, receiver = x => x, params = {} ) {\r\n return exec( target, 'ownKeys', {}, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs an operation of the given \"type\".\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Number\t prop\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function has( target, prop, receiver = x => x, params = {} ) {\r\n return exec( target, 'has', { key: prop }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a get operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Number\t prop\r\n * @param Function\t receiver\r\n * @param Object\t params\r\n *\r\n * @return Any\r\n */\r\nexport function get( target, prop, receiver = x => x, params = {} ) {\r\n // ---------------\r\n let isLive;\r\n target = resolveObj( target );\r\n if ( _isObject( receiver ) ) { [ params, receiver ] = [ receiver, x => x ]; }\r\n else if ( params.live ) { isLive = true; }\r\n // ---------------\r\n return resolveProps( target, prop, props => {\r\n const related = [ ...props ];\r\n return ( function next( results, _props, _done ) {\r\n if ( !_props.length ) return _done( results );\r\n const prop = _props.shift();\r\n // ---------\r\n function defaultGet( descriptor, value = undefined ) {\r\n const _next = value => ( descriptor.value = value, next( results.concat( params.live || params.descripted ? descriptor : value ), _props, _done ) );\r\n if ( arguments.length > 1 ) return _next( value );\r\n const accessorizedProps = _internals( target, 'accessorizedProps', false );\r\n const accessorization = accessorizedProps && accessorizedProps.get( descriptor.key );\r\n if ( accessorization && accessorization.intact() ) {\r\n return _next( accessorization.getValue() );\r\n }\r\n return _next( Reflect.get( target, descriptor.key, ...( params.receiver ? [ params.receiver ] : [] ) ) );\r\n }\r\n // ---------\r\n const descriptor = new Descriptor( target, {\r\n type: 'get',\r\n key: prop,\r\n value: undefined,\r\n related,\r\n } );\r\n const listenerRegistry = TrapsRegistry.getInstance( target, false, params.namespace );\r\n if ( listenerRegistry ) {\r\n return listenerRegistry.emit( descriptor, defaultGet );\r\n }\r\n return defaultGet( descriptor );\r\n } )( [], props.slice( 0 ), results => {\r\n const result_s = isPropsList( prop/*original*/ ) ? results : results[ 0 ];\r\n if ( isLive ) {\r\n const emit = bind( target, prop, receiver, params );\r\n return emit( result_s );\r\n }\r\n return receiver( result_s );\r\n } );\r\n } );\r\n}\r\n\r\n/* ---------------MUTATION APIs--------------- */\r\n\r\n/**\r\n * Performs a set operation.\r\n * \r\n * @param Object\t target\r\n * @param String|Number\t prop\r\n * @param Any\t value\r\n * @param Function\t receiver\r\n * @param Object\t params\r\n * @param Bool\t def\r\n *\r\n * @return Any\r\n */\r\nexport function set( target, prop, value, receiver = x => x, params = {}, def = false ) {\r\n // ---------------\r\n target = resolveObj( target );\r\n let entries = [ [ prop, value ] ];\r\n if ( _isObject( prop ) ) {\r\n [ /*target*/, /*hash*/, receiver = x => x, params = {}, def = false ] = arguments;\r\n entries = Object.entries( prop );\r\n }\r\n if ( _isObject( receiver ) ) { [ def, params, receiver ] = [ typeof params === 'boolean' ? params : false, receiver, x => x ]; }\r\n // ---------------\r\n const related = entries.map( ( [ prop ] ) => prop );\r\n return ( function next( descriptors, entries, _done ) {\r\n if ( !entries.length ) return _done( descriptors );\r\n const [ prop, value ] = entries.shift();\r\n // ---------\r\n function defaultSet( descriptor, status = undefined ) {\r\n const _next = status => ( descriptor.status = status, next( descriptors.concat( descriptor ), entries, _done ) );\r\n if ( arguments.length > 1 ) return _next( descriptor, status );\r\n const accessorizedProps = _internals( target, 'accessorizedProps', false );\r\n const accessorization = accessorizedProps && accessorizedProps.get( descriptor.key );\r\n if ( descriptor.type === 'defineProperty' ) {\r\n if ( accessorization && !accessorization.restore() ) _next( false );\r\n Object.defineProperty( target, descriptor.key, descriptor.value );\r\n return _next( true );\r\n }\r\n if ( accessorization && accessorization.intact() ) {\r\n return _next( accessorization.setValue( descriptor.value ) );\r\n }\r\n return _next( Reflect.set( target, descriptor.key, descriptor.value ) );\r\n }\r\n // ---------\r\n function exec( isUpdate, oldValue ) {\r\n const descriptor = new Descriptor( target, {\r\n type: def ? 'defineProperty' : 'set',\r\n key: prop,\r\n value,\r\n isUpdate,\r\n oldValue,\r\n related: [ ...related ],\r\n detail: params.detail,\r\n } );\r\n const listenerRegistry = TrapsRegistry.getInstance( target, false, params.namespace );\r\n return listenerRegistry \r\n ? listenerRegistry.emit( descriptor, defaultSet ) \r\n : defaultSet( descriptor );\r\n }\r\n // ---------\r\n return has( target, prop, isUpdate => {\r\n if ( !isUpdate || params.oldValue !== true ) return exec( isUpdate );\r\n return get( target, prop, oldValue => exec( isUpdate, oldValue ), params );\r\n }, params );\r\n // ---------\r\n } )( [], entries.slice( 0 ), descriptors => {\r\n const listenerRegistry = ListenerRegistry.getInstance( target, false, params.namespace );\r\n if ( listenerRegistry ) listenerRegistry.emit( descriptors );\r\n return receiver(\r\n isPropsList( prop/*original*/ ) ? descriptors.map( opr => opr.status ) : descriptors[ 0 ].status\r\n );\r\n } );\r\n}\r\n\r\n/**\r\n * Performs a defineProperty operation.\r\n * \r\n * @param Object\t target\r\n * @param String|Number\t prop\r\n * @param Object\t descriptor\r\n * @param Function\t receiver\r\n * @param Object\t params\r\n *\r\n * @return Any\r\n */\r\nexport function defineProperty( target, prop, descriptor, receiver = x => x, params = {} ) {\r\n return set( target, prop, descriptor, receiver, params, true/*def*/ );\r\n}\r\n\r\n/**\r\n * Performs a defineProperties operation.\r\n * @note this isn't part of the standard Reflect API.\r\n * \r\n * @param Object\t target\r\n * @param Object\t descriptors\r\n * @param Function\t receiver\r\n * @param Object\t params\r\n *\r\n * @return Any\r\n */\r\nexport function defineProperties( target, descriptors, receiver = x => x, params = {} ) {\r\n return set( target, descriptors, receiver, params, true/*def*/ );\r\n}\r\n\r\n/**\r\n * Performs a delete operation.\r\n * \r\n * @param Object\t target\r\n * @param String|Number\t prop\r\n * @param Function\t receiver\r\n * @param Object\t params\r\n *\r\n * @return Any\r\n */\r\nexport function deleteProperty( target, prop, receiver = x => x, params = {} ) {\r\n // ---------------\r\n target = resolveObj( target );\r\n if ( _isObject( receiver ) ) { [ params, receiver ] = [ receiver, x => x ]; }\r\n // ---------------\r\n const props = _arrFrom( prop ), related = [ ...props ];\r\n return ( function next( descriptors, props, _done ) {\r\n if ( !props.length ) return _done( descriptors );\r\n const prop = props.shift();\r\n // ---------\r\n function defaultDel( descriptor, status = undefined ) {\r\n const _next = status => ( descriptor.status = status, next( descriptors.concat( descriptor ), props, _done ) );\r\n if ( arguments.length > 1 ) return _next( descriptor, status );\r\n const accessorizedProps = _internals( target, 'accessorizedProps', false );\r\n const accessorization = accessorizedProps && accessorizedProps.get( descriptor.key );\r\n if ( accessorization && !accessorization.restore() ) _next( false );\r\n return _next( Reflect.deleteProperty( target, descriptor.key ) );\r\n }\r\n // ---------\r\n function exec( oldValue ) {\r\n const descriptor = new Descriptor( target, {\r\n type: 'deleteProperty',\r\n key: prop,\r\n oldValue,\r\n related: [ ...related ],\r\n detail: params.detail,\r\n } );\r\n const listenerRegistry = TrapsRegistry.getInstance( target, false, params.namespace );\r\n return listenerRegistry \r\n ? listenerRegistry.emit( descriptor, defaultDel ) \r\n : defaultDel( descriptor );\r\n }\r\n // ---------\r\n if ( params.oldValue === false ) return exec();\r\n return get( target, prop, exec, params );\r\n // ---------\r\n } )( [], props.slice( 0 ), descriptors => {\r\n const listenerRegistry = ListenerRegistry.getInstance( target, false, params.namespace );\r\n if ( listenerRegistry ) listenerRegistry.emit( descriptors );\r\n return receiver(\r\n isPropsList( prop/*original*/ ) ? descriptors.map( opr => opr.status ) : descriptors[ 0 ].status\r\n );\r\n } );\r\n}\r\n\r\n/* ---------------EFFECT APIs--------------- */\r\n\r\n/**\r\n * Performs a \"construct\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Array\t\t\t argumentsList\r\n * @param Object\t\t newTarget\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function construct( target, argumentsList, newTarget = null, receiver = x => x, params = {} ) {\r\n return exec( target, 'construct', arguments.length > 2 ? { argumentsList, newTarget } : { argumentsList }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs an \"apply\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Any\t thisArgument\r\n * @param Array\t argumentsList\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function apply( target, thisArgument, argumentsList, receiver = x => x, params = {} ) {\r\n return exec( target, 'apply', { thisArgument, argumentsList }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"setPrototypeOf\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Anyr\t proto\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function setPrototypeOf( target, proto, receiver = x => x, params = {} ) {\r\n return exec( target, 'setPrototypeOf', { proto }, receiver, params );\r\n}\r\n\r\n/**\r\n * Performs a \"preventExtension\" operation.\r\n *\r\n * @param Array|Object\t target\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nexport function preventExtensions( target, receiver = x => x, params = {} ) {\r\n return exec( target, 'preventExtensions', {}, receiver, params );\r\n}\r\n\r\n/* ---------------HELPER APIs--------------- */\r\n\r\n/**\r\n * Adds an observer to a target's registry.\r\n *\r\n * @param Array|Object\t target\r\n * @param String|Object\t prop\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Function: AbortController\r\n */\r\nfunction bind( target, prop, receiver, params = {} ) {\r\n let controller;\r\n if ( !params.signal ) {\r\n controller = new AbortController;\r\n params = { ...params, signal: controller.signal };\r\n }\r\n const listenerRegistry = ListenerRegistry.getInstance( target, true, params.namespace );\r\n return function emit( descriptor_s, prevRegistration = null ) {\r\n prevRegistration?.remove();\r\n const registrationNext = listenerRegistry.addRegistration( prop, emit, params );\r\n const flags = { signal: registrationNext.signal, };\r\n if ( arguments.length ) {\r\n receiver( descriptor_s, flags );\r\n }\r\n return controller;\r\n };\r\n}\r\n\r\n/**\r\n * Performs an operation of the given \"type\".\r\n *\r\n * @param Array|Object\t target\r\n * @param String\t\t type\r\n * @param Object\t\t payload\r\n * @param Function\t receiver\r\n * @param Object\t\t params\r\n *\r\n * @return Any\r\n */\r\nfunction exec( target, type, payload = {}, receiver = x => x, params = {} ) {\r\n // ---------\r\n target = resolveObj( target );\r\n if ( _isObject( receiver ) ) { [ params, receiver ] = [ receiver, x => x ]; } \r\n // ---------\r\n function defaultExec( descriptor, result ) {\r\n if ( arguments.length > 1 ) return receiver( result );\r\n return receiver( Reflect[ type ]( target, ...Object.values( payload ) ) );\r\n }\r\n // ---------\r\n const descriptor = new Descriptor( target, { type, ...payload } );\r\n const listenerRegistry = TrapsRegistry.getInstance( target, false, params.namespace );\r\n if ( listenerRegistry ) {\r\n return listenerRegistry.emit( descriptor, defaultExec );\r\n }\r\n return defaultExec( descriptor );\r\n}\r\n\r\n// Asks if prop is a multi-result field\r\nfunction isPropsList( prop ) {\r\n return prop === Infinity || Array.isArray( prop );\r\n}\r\n\r\n// Resolves obj down to it's self\r\nfunction resolveObj( obj, assert = true ) {\r\n\tif ( ( !obj || !_isTypeObject( obj ) ) && assert ) throw new Error( `Object must be of type object or array! \"${ _getType( obj ) }\" given.` );\r\n if ( obj instanceof Descriptor ) {\r\n obj = obj.value;\r\n }\r\n\treturn obj && unproxy( obj );\r\n}\r\n\r\n// Resolves prop down to actual keys\r\nfunction resolveProps( obj, prop, receiver ) {\r\n if ( prop === Infinity ) return ownKeys( obj, receiver );\r\n return receiver( _arrFrom( prop ) );\r\n}\r\n", "\r\n/**\r\n * ---------------------------\r\n * The Registration class\r\n * ---------------------------\r\n */\r\n\r\nexport default class Registration {\r\n\t\r\n\t/**\r\n\t * Initializes the instance.\r\n\t *\r\n\t * @param Registry\t\t\tregistry\r\n\t * @param object\t\t\tdfn\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tconstructor( registry, dfn ) {\r\n\t\tthis.registry = registry;\r\n\t\tObject.assign( this, { ...dfn, target: registry.target } );\r\n\t\tif ( this.params.signal ) {\r\n\t\t\tthis.params.signal.addEventListener( 'abort', () => this.remove() );\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a \"disconnected\" flag on the Registration.\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tremove() {\r\n\t\tthis.removed = true;\r\n\t\treturn this.registry.removeRegistration( this );\r\n\t}\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\r\nimport Registration from './Registration.js';\r\n\r\n/**\r\n * ---------------------------\r\n * The ListenerRegistration class\r\n * ---------------------------\r\n */\r\n\r\nexport default class ListenerRegistration extends Registration {\r\n\t\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper( ...arguments );\r\n\t\tObject.defineProperty( this, 'abortController', { value: new AbortController } );\r\n\t\tObject.defineProperty( this, 'signal', { value: this.abortController.signal } );\r\n\t}\r\n\r\n\t/**\r\n\t * De-registers the instance.\r\n\t * \r\n\t * @return Void\r\n\t */\r\n\tremove() {\r\n\t\tthis.abortController.abort();\r\n\t\tsuper.remove();\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the observer's handler function\r\n\t * on matching with the event's fields.\r\n\t *\r\n\t * @param Array\t\t\t \t\tevents\r\n\t *\r\n\t * @return Any\r\n\t */\r\n\tfire( events ) {\r\n\t\tlet matches = events, filter = this.filter;\r\n\t\tif ( filter !== Infinity && ( filter = _arrFrom( filter ) ) ) {\r\n\t\t\tmatches = events.filter( event => filter.includes( event.key ) );\r\n\t\t}\r\n\t\tif ( matches.length ) {\r\n\t\t\treturn this.filter === Infinity || Array.isArray( this.filter )\r\n\t\t\t\t? this.handler( matches, this )\r\n\t\t\t\t: this.handler( matches[ 0 ], this );\r\n\t\t}\r\n\t}\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport { _isTypeObject, _getType, _internals } from '@webqit/util/js/index.js';\r\nimport { _from as _arrFrom, _intersect, _equals as _arrEquals } from '@webqit/util/arr/index.js';\r\n\r\n/**\r\n * ---------------------------\r\n * The Registry class\r\n * ---------------------------\r\n */\r\n\r\nexport default class Registry {\r\n\t\r\n\t/**\r\n\t * Initializes the instance.\r\n\t *\r\n\t * @param object\ttarget\r\n\t * \r\n\t * @return void\r\n\t */\r\n\tconstructor( target ) {\r\n\t\tthis.target = target;\r\n\t\tthis.entries = [];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adds an Registration instance\r\n\t * with optional tags.\r\n\t *\r\n\t * @param Registration\t\tregistration\r\n\t *\r\n\t * @return Registration\r\n\t */\r\n\taddRegistration( registration ) {\r\n\t\tthis.entries.push( registration );\r\n\t\treturn registration;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Removes registrations by reference.\r\n\t *\r\n\t * @param Registration\t\tregistration\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tremoveRegistration( registration ) {\r\n\t\tthis.entries = this.entries.filter( _entry => _entry !== registration );\r\n\t}\r\n\t\t\r\n\t/**\r\n\t * Returns a observer-specific object embedded on an element.\r\n\t *\r\n\t * @param string\t\ttype\r\n\t * @param array|object\ttarget\r\n\t * @param bool \tcreateIfNotExists\r\n\t * @param string \tnamespace\r\n\t *\r\n\t * @return Registry\r\n\t */\r\n\tstatic _getInstance( type, target, createIfNotExists = true, namespace = this.__namespace ) {\r\n\t\tif ( !_isTypeObject( target ) ) throw new Error( `Subject must be of type object; \"${ _getType( target ) }\" given!` );\r\n\t\tlet ImplementationClass = this;\r\n\t\tif ( namespace && globalThis.WebQitObserverNamespaceRegistry.has( type + '-' + namespace ) ) {\r\n\t\t\tImplementationClass = globalThis.WebQitObserverNamespaceRegistry.get( type + '-' + namespace );\r\n\t\t\ttype += '-' + namespace\r\n\t\t}\r\n\t\tif ( !_internals( target, 'observerApi' ).has( type ) && createIfNotExists ) {\r\n\t\t\t_internals( target, 'observerApi' ).set( type, new ImplementationClass( target ) );\r\n\t\t}\r\n\t\treturn _internals( target, 'observerApi' ).get( type );\r\n\t}\r\n\r\n\t/**\r\n\t * Extend a Fireable Class with a namespace.\r\n\t *\r\n\t * @param string\t\tnamespace\r\n\t * @param class \tImplementationClass\r\n\t *\r\n\t * @return void|class\r\n\t */\r\n\tstatic _namespace( type, namespace, ImplementationClass = null ) {\r\n\t\ttype += '-' + namespace;\r\n\t\tif ( arguments.length === 2 ) return globalThis.WebQitObserverNamespaceRegistry.get( type );\r\n\t\tif ( !( ImplementationClass.prototype instanceof this ) ) {\r\n\t\t\tthrow new Error( `The implementation of the namespace ${ this.name }.${ namespace } must be a subclass of ${ this.name }.` );\r\n\t\t}\r\n\t\tglobalThis.WebQitObserverNamespaceRegistry.set( type, ImplementationClass );\r\n\t\tImplementationClass.__namespace = namespace;\r\n\t}\r\n}\r\n\r\nif ( !globalThis.WebQitObserverNamespaceRegistry ) {\r\n\tglobalThis.WebQitObserverNamespaceRegistry = new Map;\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport ListenerRegistration from './ListenerRegistration.js';\r\nimport Registry from './Registry.js';\r\n\r\n/**\r\n * ---------------------------\r\n * The ListenerRegistry class\r\n * ---------------------------\r\n */\r\n\r\nexport default class ListenerRegistry extends Registry {\r\n\r\n\tstatic getInstance( target, createIfNotExists = true, namespace = null ) {\r\n\t\treturn super._getInstance( 'listeners', ...arguments );\r\n\t}\r\n\r\n\tstatic namespace( namespace, ImplementationClass = null ) {\r\n\t\treturn super._namespace( 'listeners', ...arguments );\r\n\t}\r\n\t\r\n\t/**\r\n\t * @inheritdoc\r\n\t */\r\n\taddRegistration( filter, handler, params ) {\r\n\t\treturn super.addRegistration( new ListenerRegistration( this, { filter, handler, params } ) );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Fires all observers with the given evt (change).\r\n\t *\r\n\t * @param Arrayn events\r\n\t *\r\n\t * @return Void\r\n\t */\r\n\temit( events ) {\r\n\t\tthis.entries.forEach( listener => listener.fire( events ) );\r\n\t}\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport Registration from './Registration.js';\r\n\r\n/**\r\n * ---------------------------\r\n * The TrapsRegistration class\r\n * ---------------------------\r\n */\r\n\r\nexport default class TrapsRegistration extends Registration {\r\n\t\r\n\t/**\r\n\t * Calls the observer's handler function\r\n\t * on matching with the descriptor's fields.\r\n\t *\r\n\t * @param Descriptor\t\t\t \tdescriptor\r\n\t * @param function\t\t\t\t\tnext\r\n\t * @param mixed\t\t\t\t\t \trecieved\r\n\t *\r\n\t * @return void\r\n\t */\r\n\texec( descriptor, next, recieved ) {\r\n\t\tif ( this.running || !this.traps[ descriptor.type ] ) {\r\n\t\t\treturn next( ...Array.prototype.slice.call( arguments, 2 ) );\r\n\t\t}\r\n\t\tthis.running = true;\r\n\t\treturn this.traps[ descriptor.type ]( descriptor, recieved, ( ...args ) => {\r\n\t\t\tthis.running = false;\r\n\t\t\treturn next( ...args );\r\n\t\t} );\r\n\t}\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport TrapsRegistration from './TrapsRegistration.js';\r\nimport Registry from './Registry.js';\r\n\r\n/**\r\n * ---------------------------\r\n * The TrapsRegistry class\r\n * ---------------------------\r\n */\r\n\r\nexport default class TrapsRegistry extends Registry {\r\n\r\n\tstatic getInstance( target, createIfNotExists = true, namespace = null ) {\r\n\t\treturn super._getInstance( 'traps', ...arguments );\r\n\t}\r\n\r\n\tstatic namespace( namespace, ImplementationClass = null ) {\r\n\t\treturn super._namespace( 'traps', ...arguments );\r\n\t}\r\n\t\r\n\t/**\r\n\t * @inheritdoc\r\n\t */\r\n\taddRegistration( dfn ) {\r\n\t\treturn super.addRegistration( new TrapsRegistration( this, dfn ) );\r\n\t}\r\n\r\n\t/**\r\n\t * Fires all interceptors with the given action.\r\n\t *\r\n\t * @param Descriptor\t\tdescriptor\r\n\t * @param function\t\t\tdefaultHandler\r\n\t *\r\n\t * @return mixed\r\n\t */\r\n\temit( descriptor, defaultHandler = null ) {\r\n\t\tconst $this = this;\r\n\t\treturn ( function next( index, ..._args ) {\r\n\t\t\tconst registration = $this.entries[ index ];\r\n\t\t\tif ( registration ) {\r\n\t\t\t\treturn registration.exec( descriptor, ( ...args ) => {\r\n\t\t\t\t\treturn next( index + 1, ...args );\r\n\t\t\t\t}/*next*/, ..._args );\r\n\t\t\t}\r\n\t\t\treturn defaultHandler ? defaultHandler( descriptor, ..._args ) : _args[ 0 ];\r\n\t\t} )( 0 );\r\n\t}\r\n}", "\r\n/**\r\n * ---------------------------\r\n * The Descriptor class\r\n * ---------------------------\r\n */\r\n\r\nexport default class Descriptor {\r\n\t\r\n\t/**\r\n\t * Initializes the instance.\r\n\t *\r\n\t * @param array|object\ttarget\r\n\t * @param object\t\tdfn\r\n\t *\r\n\t * @return void\r\n\t */\r\n\tconstructor( target, dfn ) {\r\n\t\tthis.target = target;\r\n\t\tif ( !( dfn.type ) ) throw new Error( 'Descriptor type must be given in definition!' );\r\n\t\tObject.assign( this, dfn );\r\n\t}\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport { _from as _arrFrom } from '@webqit/util/arr/index.js';\r\nimport { _isClass, _isFunction, _isTypeObject, _getType, _internals } from '@webqit/util/js/index.js';\r\nimport { set, deleteProperty, has, get, ownKeys, defineProperty, getOwnPropertyDescriptor } from \"./main.js\";\r\nimport { apply, construct, getPrototypeOf, setPrototypeOf, isExtensible, preventExtensions } from \"./main.js\";\r\n\r\n/* ---------------ACCESSORIZE METHODS--------------- */\r\n\r\n/**\r\n * Accessorizes props.\r\n *\r\n * @param Array|Object\ttarget\r\n * @param String|Array\tprops\r\n * @param Object\t\tparams\r\n *\r\n * @return Array\r\n */\r\nexport function accessorize( target, props, params = {} ) {\r\n target = resolveTarget( target );\r\n const accessorizedProps = _internals( target, 'accessorizedProps' );\r\n // ---------\r\n function getDescriptorDeep( prop ) {\r\n let descriptor, proto = target;\r\n while ( !descriptor && ( proto = Object.getPrototypeOf( proto ) ) ) {\r\n descriptor = Object.getOwnPropertyDescriptor( proto, prop );\r\n }\r\n return descriptor \r\n ? { proto, descriptor } \r\n : { descriptor: { value: undefined } };\r\n }\r\n // ---------\r\n function accessorizeProp( prop ) {\r\n if ( accessorizedProps.has( prop ) ) return true;\r\n // ------------------\r\n // Current Descriptor Record\r\n const currentDescriptorRecord = getDescriptorDeep( prop );\r\n currentDescriptorRecord.getValue = function() {\r\n return 'get' in this.descriptor ? this.descriptor.get() : this.descriptor.value;\r\n };\r\n currentDescriptorRecord.setValue = function( value ) {\r\n return 'set' in this.descriptor ? this.descriptor.set( value ) : ( this.descriptor.value = value )\r\n };\r\n currentDescriptorRecord.intact = function() {\r\n const currentDescriptor = Object.getOwnPropertyDescriptor( target, prop );\r\n return currentDescriptor.get === accessorization.get \r\n && currentDescriptor.set === accessorization.set\r\n && accessorizedProps.get( prop ) === this;\r\n };\r\n currentDescriptorRecord.restore = function() {\r\n if ( !this.intact() ) return false;\r\n if ( this.proto !== target ) { delete target[ prop ]; }\r\n else { Object.defineProperty( target, prop, this.descriptor ); }\r\n accessorizedProps.delete( prop );\r\n return true;\r\n };\r\n accessorizedProps.set( prop, currentDescriptorRecord );\r\n // ------------------\r\n // enumerable, configurable\r\n const { enumerable = true, configurable = true } = currentDescriptorRecord.descriptor;\r\n const accessorization = { enumerable, configurable };\r\n // set, get\r\n if ( [ 'value', 'set' ].some( x => x in currentDescriptorRecord.descriptor ) ) {\r\n accessorization.set = function ( value ) { return set( this, prop, value, params ); };\r\n }\r\n if ( [ 'value', 'get' ].some( x => x in currentDescriptorRecord.descriptor ) ) {\r\n accessorization.get = function () { return get( this, prop, params ); };\r\n }\r\n try {\r\n Object.defineProperty( target, prop, accessorization );\r\n return true;\r\n } catch( e ) {\r\n accessorizedProps.delete( prop );\r\n return false;\r\n }\r\n }\r\n const _props = Array.isArray( props ) ? props : (\r\n props === undefined ? Object.keys( target ) : [ props ]\r\n );\r\n const statuses = _props.map( accessorizeProp );\r\n return props === undefined || Array.isArray( props ) \r\n ? statuses \r\n : statuses[ 0 ];\r\n}\r\n\r\n/**\r\n * Unaccessorizes previously accessorized props.\r\n *\r\n * @param Array|Object\ttarget\r\n * @param String|Array\tprops\r\n * @param Object\t\tparams\r\n *\r\n * @return Array\r\n */\r\nexport function unaccessorize( target, props, params = {} ) {\r\n target = resolveTarget( target );\r\n const accessorizedProps = _internals( target, 'accessorizedProps' );\r\n function unaccessorizeProp( prop ) {\r\n if ( !accessorizedProps.has( prop ) ) return true;\r\n return accessorizedProps.get( prop ).restore();\r\n }\r\n const _props = Array.isArray( props ) ? props : (\r\n props === undefined ? Object.keys( target ) : [ props ]\r\n );\r\n const statuses = _props.map( unaccessorizeProp );\r\n return props === undefined || Array.isArray( props ) \r\n ? statuses \r\n : statuses[ 0 ];\r\n}\r\n\r\n/* ---------------PROXY METHODS--------------- */\r\n\r\n/**\r\n * Returns an object as a proxy and binds all instance methods\r\n * to the proxy instead of the object itself.\r\n *\r\n * @param Array|Object\t\ttarget\r\n * @param Object\t\t params\r\n *\r\n * @return Proxy\r\n */\r\nexport function proxy( target, params = {} ) {\r\n target = resolveTarget( target );\r\n const proxy = new Proxy( target, {\r\n apply: ( target, thisArgument, argumentsList ) => apply( target, thisArgument, argumentsList, params ),\r\n construct: ( target, argumentsList, newTarget = null ) => construct( target, argumentsList, newTarget, params ),\r\n defineProperty: ( target, propertyKey, attributes ) => defineProperty( target, propertyKey, attributes, params ),\r\n deleteProperty: ( target, propertyKey ) => deleteProperty( target, propertyKey, params ),\r\n get: ( target, propertyKey, receiver = null ) => {\r\n const val = get( target, propertyKey, { ...params, receiver } );\r\n if ( params.proxyAutoBinding !== false && _isFunction( val ) && !_isClass( val )) {\r\n return val.bind( proxy );\r\n }\r\n return val;\r\n },\r\n getOwnPropertyDescriptor: ( target, propertyKey ) => getOwnPropertyDescriptor( target, propertyKey, params ),\r\n getPrototypeOf: target => getPrototypeOf( target, params ),\r\n has: ( target, propertyKey ) => has( target, propertyKey, params ),\r\n isExtensible: target => isExtensible( target, params ),\r\n ownKeys: target => ownKeys( target, params ),\r\n preventExtensions: target => preventExtensions( target, params ),\r\n set: ( target, propertyKey, value, receiver = null ) => set( target, propertyKey, value, { ...params, receiver } ),\r\n setPrototypeOf: ( target, prototype ) => setPrototypeOf( target, prototype, params ),\r\n });\r\n _internals( proxy ).set( proxy, target );\r\n\treturn proxy;\r\n}\r\n\r\n/**\r\n * Returns the original object earlier proxied by proxy().\r\n *\r\n * @param Proxy|Any\t\ttarget\r\n *\r\n * @return Any\r\n */\r\nexport function unproxy( target ) {\r\n // Proxy targets are mapped to their own instances internally\r\n return _internals( target, false ).get( target ) || target;\r\n}\r\n\r\n/* ---------------HELPERS--------------- */\r\n\r\n/** \r\n * Ensures target object is an object or array.\r\n *\r\n * @param Array|Object\ttarget\r\n *\r\n * @return Array|Object\r\n */\r\nfunction resolveTarget( target ) {\r\n\tif ( !target || !_isTypeObject( target ) ) throw new Error('Target must be of type object!');\r\n\treturn unproxy( target );\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport * as main from './main.js';\r\nimport * as actors from './actors.js';\r\n\r\nconst Observer = { ...main, ...actors };\r\n\r\nexport default Observer;", "\r\n/**\r\n * @imports\r\n */\r\nimport wqDom from '@webqit/dom';\r\nimport Observer from '@webqit/observer';\r\nimport _HTMLImportsContext from './_HTMLImportsContext.js';\r\nimport HTMLExportsManager from './HTMLExportsManager.js';\r\nimport { _ } from '../util.js';\r\n\r\n/**\r\n * Initializes HTML Modules.\r\n * \r\n * @param Object $params \r\n *\r\n * @return Void\r\n */\r\nexport default function init( $params = {} ) {\r\n const window = this, dom = wqDom.call( window );\r\n // -------\r\n const params = dom.meta( 'oohtml' ).copyWithDefaults( $params, {\r\n template: { attr: { exportid: 'exportid', inherits: 'inherits' }, api: { modules: 'modules', exportid: 'exportid' }, },\r\n context: { attr: { importscontext: 'importscontext', contextname: 'contextname' }, api: { modules: 'modules' }, },\r\n export: { attr: { exportid: 'exportid' }, },\r\n staticsensitivity: true,\r\n } );\r\n params.window = window;\r\n params.templateSelector = `template[${ window.CSS.escape( params.template.attr.exportid ) }]`;\r\n params.ownerContextSelector = [ params.context.attr.contextname, params.context.attr.importscontext ].map( a => `[${ window.CSS.escape( a ) }]` ).join( ',' );\r\n params.HTMLImportsContext = class extends _HTMLImportsContext {\r\n static get params() { return params; }\r\n }\r\n // -------\r\n exposeModulesObjects.call( this, params );\r\n realtime.call( this, params );\r\n}\r\n\r\n/**\r\n * Returns the \"exports\" object associated with the given node.\r\n *\r\n * @param Element node\r\n * @param Bool autoCreate\r\n *\r\n * @return Object\r\n */\r\nexport function getModulesObject( node, autoCreate = true ) {\r\n\tif ( !_( node ).has( 'modules' ) && autoCreate ) {\r\n\t\tconst modulesObj = Object.create( null );\r\n\t\tObserver.intercept( modulesObj, 'set', ( event, receiver, next ) => {\r\n\t\t\tif ( !event.key.startsWith( '#' ) || event.value instanceof Set ) return next();\r\n if ( !Array.isArray( event.value ) ) { event.value = [ event.value ]; }\r\n event.value = new Set( event.value );\r\n\t\t\treturn next();\r\n\t\t} );\r\n\t\t_( node ).set( 'modules', modulesObj );\r\n\t}\r\n\treturn _( node ).get( 'modules' );\r\n}\r\n\r\n/**\r\n * Exposes HTML Modules with native APIs.\r\n *\r\n * @param Object params\r\n *\r\n * @return Void\r\n */\r\nfunction exposeModulesObjects( params ) {\r\n const window = this;\r\n // Assertions\r\n if ( params.context.api.modules in window.document ) { throw new Error( `document already has a \"${ params.context.api.modules }\" property!` ); }\r\n if ( params.template.api.modules in window.HTMLElement.prototype ) { throw new Error( `The \"HTMLElement\" class already has a \"${ params.template.api.modules }\" property!` ); }\r\n if ( params.template.api.exportid in window.HTMLTemplateElement.prototype ) { throw new Error( `The \"HTMLTemplateElement\" class already has a \"${ params.template.api.exportid }\" property!` ); }\r\n // Definitions\r\n Object.defineProperty( window.document, params.context.api.modules, { get: function() {\r\n return getModulesObject( window.document );\r\n } } );\r\n Object.defineProperty( window.HTMLElement.prototype, params.template.api.modules, { get: function() {\r\n return getModulesObject( this );\r\n } } );\r\n Object.defineProperty( window.HTMLTemplateElement.prototype, params.template.api.exportid, { get: function() {\r\n return this.isConnected ? HTMLExportsManager.instance( this, params ).exportId : this.getAttribute( params.template.attr.exportid );\r\n } } );\r\n}\r\n\r\n/**\r\n * Performs realtime capture of elements and builds their contents graph.\r\n *\r\n * @param Object\t params\r\n *\r\n * @return Void\r\n */\r\nfunction realtime( params ) {\r\n const window = this, { dom } = window.wq;\r\n // ------------\r\n const attachImportsContext = host => {\r\n const contextId = params.HTMLImportsContext.createId( host );\r\n params.HTMLImportsContext.attachTo( host, contextId );\r\n };\r\n const detachImportsContext = ( host, force ) => {\r\n const contextId = params.HTMLImportsContext.createId( host );\r\n params.HTMLImportsContext.detachFrom( host, contextId, cx => {\r\n return force || host.matches && !host.matches( params.ownerContextSelector ) && !Object.keys( cx.modules ).length;\r\n } );\r\n };\r\n // ------------\r\n dom.realtime( window.document ).observe( [ params.templateSelector, params.ownerContextSelector ], record => {\r\n record.entrants.forEach( entry => {\r\n if ( entry.matches( params.templateSelector ) ) {\r\n Object.defineProperty( entry, 'scoped', { value: entry.hasAttribute( 'scoped' ) } ); \r\n const moduleExport = new HTMLExportsManager( entry, params );\r\n moduleExport.ownerContext = entry.scoped ? record.target : window.document;\r\n const ownerContextModulesObj = getModulesObject( moduleExport.ownerContext );\r\n if ( moduleExport.exportId ) { Observer.set( ownerContextModulesObj, moduleExport.exportId, entry ); }\r\n // The ownerContext's modulesObj - ownerContextModulesObj - has to be populated\r\n // Before attaching a context instance to it, to give the just created context something to use for\r\n // fullfiling reclaimed requests.\r\n attachImportsContext( moduleExport.ownerContext );\r\n } else {\r\n attachImportsContext( entry );\r\n }\r\n } );\r\n record.exits.forEach( entry => {\r\n if ( entry.matches( params.templateSelector ) ) {\r\n const moduleExport = HTMLExportsManager.instance( entry, params );\r\n const ownerContextModulesObj = getModulesObject( moduleExport.ownerContext );\r\n if ( moduleExport.exportId ) { Observer.deleteProperty( ownerContextModulesObj, moduleExport.exportId ); }\r\n detachImportsContext( moduleExport.ownerContext );\r\n } else {\r\n detachImportsContext( entry, true );\r\n }\r\n } );\r\n }, { subtree: true, timing: 'sync', staticSensitivity: params.staticsensitivity } );\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport Observer from '@webqit/observer';\r\nimport { HTMLContextManager, HTMLContext } from '../context-api/index.js';\r\nimport { getModulesObject } from './index.js';\r\nimport { _ } from '../util.js';\r\n\r\nexport default class _HTMLImportsContext extends HTMLContext {\r\n \r\n /**\r\n * @createRequest\r\n */\r\n static createRequest( fields = {} ) {\r\n const request = { type: 'HTMLModules', ...fields };\r\n if ( !request.name && request.detail?.startsWith( '/' ) ) { request.name = 'root'; }\r\n else if ( request.detail?.startsWith( '@' ) ) {\r\n const [ contextName, detail ] = request.detail.split( ':' ).map( s => s.trim() );\r\n request.name = contextName.slice( 1 );\r\n request.detail = detail;\r\n }\r\n return request;\r\n }\r\n\r\n /**\r\n * @modules\r\n */\r\n get modules() {\r\n return getModulesObject( this.host );\r\n }\r\n\r\n /**\r\n * @handle()\r\n */\r\n handle( event ) {\r\n // Any existing event.request.controller? Abort!\r\n event.request.controller?.abort();\r\n\r\n // Parse and translate detail\r\n if ( ( event.request.detail || '' ).trim() === '/' ) return event.respondWith( this.modules );\r\n const $params = this.constructor.params;\r\n let path = ( event.request.detail || '' ).split( /\\/|(?<=\\w)(?=\\W)/g ).map( x => x.trim() ).filter( x => x );\r\n if ( path.length ) { path = path.join( `/${ $params.template.api.modules }/` )?.split( '/' ) || []; }\r\n // No detail?\r\n if ( !path.length ) return event.respondWith();\r\n\r\n // We'll now fulfill request\r\n const params = { live: event.request.live, descripted: true, midwayResults: true };\r\n // Find a way to resolve request against two sources\r\n event.request.controller = Observer.deep( this.modules, path, Observer.get, ( result, { signal } = {} ) => {\r\n if ( !result.value && this.host.isConnected === false ) return; // Subtree is being disposed\r\n if ( result.value || !this.altModules ) return event.respondWith( result.value );\r\n // This superModules binding is automatically aborted by the injected control.signal; see below\r\n return Observer.deep( this.altModules, path, Observer.get, result => {\r\n return event.respondWith( result.value );\r\n }, { signal, ...params } );\r\n }, params );\r\n }\r\n\r\n /**\r\n * @startRealtime()\r\n */\r\n realtimeSources( host ) {\r\n this.host = host;\r\n // ----------------\r\n const update = () => {\r\n for ( const subscriptionEvent of this.subscriptions ) {\r\n this.handle( subscriptionEvent );\r\n }\r\n };\r\n // ----------------\r\n const $params = this.constructor.params;\r\n if ( !this.host.matches || !$params.context.attr.importscontext ) return;\r\n // Any existing this.refdSourceController? Abort!\r\n this.refdSourceController?.disconnect();\r\n const dom = this.host.ownerDocument.defaultView.wq.dom;\r\n this.refdSourceController = dom.realtime( this.host ).attr( $params.context.attr.importscontext, ( record, { signal } ) => {\r\n // No importscontext attr set. But we're still watching\r\n if ( !record.value ) {\r\n this.altModules = undefined;\r\n return update();\r\n }\r\n // This superModules contextrequest is automatically aborted by the injected signal below\r\n const request = this.constructor.createRequest( { detail: record.value.trim(), live: true, signal } );\r\n HTMLContextManager.instance( this.host ).ask( request, response => {\r\n this.altModules = !( response && Object.getPrototypeOf( response ) ) ? response : getModulesObject( response );\r\n update();\r\n } );\r\n }, { live: true, timing: 'sync', lifecycleSignals: true } );\r\n }\r\n\r\n /**\r\n * @initialize()\r\n */\r\n initialize( host ) {\r\n // If host has importscontext attr, compute that\r\n this.realtimeSources( host );\r\n // Now, listen for contextrequest and contextclaim events\r\n // And process own claim\r\n return super.initialize( host );\r\n }\r\n \r\n /**\r\n * @dispose()\r\n */\r\n dispose( host ) {\r\n // Stop listening for sources\r\n this.refdSourceController?.disconnect();\r\n // Now, stop listening for contextrequest and contextclaim events\r\n // And relinquish own subscribers to owner context\r\n return super.dispose( host );\r\n }\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport { HTMLContextManager } from '../context-api/index.js';\r\nimport _HTMLImportsContext from '../html-modules/_HTMLImportsContext.js';\r\nimport { _ } from '../util.js';\r\n\r\n/**\r\n * Creates the HTMLImportElement class.\r\n * \r\n * @param Object params \r\n * \r\n * @return HTMLImportElement\r\n */\r\nexport default function( params ) {\r\n const window = this, { dom } = window.wq;\r\n const BaseExportElement = params.import.tagName.includes( '-' )\r\n ? ( params.HTMLImportBaseElement || window.HTMLElement )\r\n : class {};\r\n return class HTMLImportElement extends BaseExportElement {\r\n \r\n /**\r\n * @instance\r\n * \r\n * @param HTMLElement node\r\n * \r\n * @returns \r\n */\r\n static instance( node ) {\r\n if ( params.import.tagName.includes( '-' ) && ( node instanceof this ) ) return node;\r\n return _( node ).get( 'import::instance' ) || new this( node );;\r\n }\r\n\r\n /**\r\n * @constructor\r\n */\r\n constructor( ...args ) {\r\n super();\r\n // --------\r\n const el = args[ 0 ] || this;\r\n _( el ).set( 'import::instance', this );\r\n Object.defineProperty( this, 'el', { get: () => el, configurable: false } );\r\n\r\n const priv = {};\r\n Object.defineProperty( this, '#', { get: () => priv, configurable: false } );\r\n priv.slottedElements = new Set;\r\n\r\n priv.setAnchorNode = anchorNode => {\r\n priv.anchorNode = anchorNode;\r\n _( anchorNode ).set( 'anchoredNode@imports', this.el );\r\n };\r\n\r\n priv.importRequest = ( callback, signal = null ) => {\r\n const detail = priv.moduleRef && !priv.moduleRef.includes( '#' ) ? `${ priv.moduleRef }#default` : priv.moduleRef;\r\n const request = _HTMLImportsContext.createRequest( { detail, live: signal && true, signal, selfScoped: true } );\r\n HTMLContextManager.instance( this.el.isConnected ? this.el.parentNode : priv.anchorNode.parentNode ).ask( request, response => {\r\n callback( ( response instanceof Set ? new Set( response ) : response ) || [] );\r\n } );\r\n };\r\n\r\n priv.hydrate = ( anchorNode, slottedElements ) => {\r\n // ----------------\r\n priv.moduleRef = ( this.el.getAttribute( params.import.attr.moduleref ) || '' ).trim();\r\n priv.setAnchorNode( anchorNode );\r\n priv.autoRestore( () => {\r\n slottedElements.forEach( slottedElement => {\r\n priv.slottedElements.add( slottedElement );\r\n _( slottedElement ).set( 'slot@imports', this.el );\r\n } );\r\n } );\r\n // ----------------\r\n priv.hydrationImportRequest = new AbortController;\r\n priv.importRequest( modules => {\r\n if ( priv.originalsRemapped ) { return this.fill( modules ); }\r\n const identifiersMap = [ ...modules ].map( module => ( { el: module, exportId: module.getAttribute( params.export.attr.exportid ) || 'default', tagName: module.tagName, } ) );\r\n slottedElements.forEach( slottedElement => {\r\n const tagName = slottedElement.tagName, exportId = slottedElement.getAttribute( params.export.attr.exportid ) || 'default';\r\n const originalsMatch = identifiersMap.filter( moduleIdentifiers => tagName === moduleIdentifiers.tagName && exportId === moduleIdentifiers.exportId );\r\n if ( originalsMatch.length !== 1 ) return;\r\n _( slottedElement ).set( 'original@imports', originalsMatch[ 0 ].el );\r\n } );\r\n priv.originalsRemapped = true;\r\n }, priv.hydrationImportRequest.signal );\r\n };\r\n\r\n priv.autoRestore = ( callback = null ) => {\r\n priv.autoRestoreRealtime?.disconnect();\r\n if ( callback ) callback();\r\n if ( !priv.slottedElements.size ) {\r\n priv.anchorNode.replaceWith( this.el );\r\n return;\r\n }\r\n const autoRestoreRealtime = dom.realtime( window.document ).observe( [ ...priv.slottedElements ], record => {\r\n record.exits.forEach( outgoingNode => {\r\n _( outgoingNode ).delete( 'slot@imports' );\r\n priv.slottedElements.delete( outgoingNode );\r\n } );\r\n if ( !priv.slottedElements.size ) {\r\n autoRestoreRealtime.disconnect();\r\n // At this point, ignore if this is a removal involving the whole parent node\r\n if ( !record.target.isConnected ) return;\r\n priv.anchorNode.replaceWith( this.el );\r\n }\r\n }, { subtree: true, timing: 'sync', generation: 'exits' } );\r\n priv.autoRestoreRealtime = autoRestoreRealtime;\r\n };\r\n\r\n priv.connectedCallback = () => {\r\n // In case this is DOM node relocation or induced reinsertion into the DOM\r\n if ( priv.slottedElements.size ) throw new Error( `Illegal reinsertion into the DOM; import slot is not empty!` );\r\n // Totally initialize this instance?\r\n if ( !priv.anchorNode ) { priv.setAnchorNode( this.createAnchorNode() ); }\r\n if ( priv.moduleRefRealtime ) return;\r\n priv.moduleRefRealtime = dom.realtime( this.el ).attr( params.import.attr.moduleref, ( record, { signal } ) => {\r\n priv.moduleRef = record.value;\r\n ;\r\n // Below, we ignore first restore from hydration\r\n priv.importRequest( modules => !priv.hydrationImportRequest && this.fill( modules ), signal );\r\n }, { live: true, timing: 'sync', lifecycleSignals: true } );\r\n // Must come after\r\n priv.hydrationImportRequest?.abort();\r\n priv.hydrationImportRequest = null;\r\n };\r\n\r\n priv.disconnectedCallback = () => {\r\n priv.hydrationImportRequest?.abort();\r\n priv.hydrationImportRequest = null;\r\n if ( priv.anchorNode.isConnected ) return;\r\n priv.moduleRefRealtime?.disconnect();\r\n priv.moduleRefRealtime = null;\r\n };\r\n }\r\n\r\n /**\r\n * Creates the slot's anchor node.\r\n *\r\n * @return Element\r\n */\r\n createAnchorNode() {\r\n if ( !params.isomorphic ) { return window.document.createTextNode( '' ) }\r\n return window.document.createComment( this.el.outerHTML );\r\n }\r\n\r\n /**\r\n * Fills the slot with slottableElements\r\n *\r\n * @param Iterable slottableElements\r\n *\r\n * @return void\r\n */\r\n fill( slottableElements ) {\r\n if ( Array.isArray( slottableElements ) ) { slottableElements = new Set( slottableElements ) }\r\n this[ '#' ].autoRestore( () => { \r\n this[ '#' ].slottedElements.forEach( slottedElement => {\r\n const slottedElementOriginal = _( slottedElement ).get( 'original@imports' );\r\n // If still available in source, simply leave unchanged\r\n // otherwise remove it from slot... to reflect this change\r\n if ( slottableElements.has( slottedElementOriginal ) ) {\r\n slottableElements.delete( slottedElementOriginal );\r\n } else {\r\n this[ '#' ].slottedElements.delete( slottedElement );\r\n // This removal will not be caught\r\n slottedElement.remove();\r\n }\r\n } );\r\n // Make sure anchor node is what's in place...\r\n // not the import element itslef - but all only when we have slottableElements.size\r\n if ( this.el.isConnected && slottableElements.size ) {\r\n this.el.replaceWith( this[ '#' ].anchorNode );\r\n }\r\n // Insert slottables now\r\n slottableElements.forEach( slottableElement => {\r\n // Clone each slottable element and give it a reference to its original\r\n const slottableElementClone = slottableElement.cloneNode( true );\r\n // The folllowing references must be set before adding to DODM\r\n if ( !slottableElementClone.hasAttribute( params.export.attr.exportid ) ) {\r\n slottableElementClone.toggleAttribute( params.export.attr.exportid, true );\r\n }\r\n _( slottableElementClone ).set( 'original@imports', slottableElement );\r\n _( slottableElementClone ).set( 'slot@imports', this.el );\r\n this[ '#' ].slottedElements.add( slottableElementClone );\r\n this[ '#' ].anchorNode.before( slottableElementClone );\r\n } );\r\n } );\r\n }\r\n\r\n /**\r\n * Empty slot.\r\n *\r\n * @return void\r\n */\r\n empty() { this[ '#' ].slottedElements.forEach( slottedElement => slottedElement.remove() ); }\r\n\r\n /**\r\n * Returns the slot's anchorNode.\r\n *\r\n * @return array\r\n */\r\n get anchorNode() { return this[ '#' ].anchorNode; }\r\n\r\n /**\r\n * Returns the slot's module reference, if any.\r\n *\r\n * @return string\r\n */\r\n get moduleRef() { return this[ '#' ].moduleRef; }\r\n\r\n /**\r\n * Returns the slot's slotted elements.\r\n *\r\n * @return array\r\n */\r\n get slottedElements() { return this[ '#' ].slottedElements; }\r\n }\r\n}", "\r\n/**\r\n * @imports\r\n */\r\nimport wqDom from '@webqit/dom';\r\nimport _HTMLImportElement from './_HTMLImportElement.js';\r\nimport { _ } from '../util.js';\r\n\r\n/**\r\n * Initializes HTML Modules.\r\n * \r\n * @param $params Object\r\n *\r\n * @return Void\r\n */\r\nexport default function init( $params = { }) {\r\n const window = this, dom = wqDom.call( window );\r\n // -------\r\n const params = dom.meta( 'oohtml' ).copyWithDefaults( $params, {\r\n import: { tagName: 'import', attr: { moduleref: 'module' }, },\r\n export: { attr: { exportid: 'exportid' }, },\r\n isomorphic: true,\r\n } );\r\n params.slottedElementsSelector = `[${ window.CSS.escape( params.export.attr.exportid ) }]`;\r\n params.HTMLImportElement = _HTMLImportElement.call( this, params );\r\n // -------\r\n dom.ready( () => hydration.call( this, params ) );\r\n realtime.call( this, params );\r\n}\r\n\r\n/**\r\n * Performs realtime capture of elements and their attributes\r\n * and their module query results; then resolves the respective import elements.\r\n *\r\n * @param Object params\r\n *\r\n * @return Void\r\n */\r\nfunction realtime( params ) {\r\n const window = this, { dom } = window.wq;\r\n dom.realtime( window.document ).observe( params.import.tagName, record => {\r\n record.entrants.forEach( node => handleRealtime( node, true, record ) );\r\n record.exits.forEach( node => handleRealtime( node, false, record ) );\r\n }, { subtree: true, timing: 'sync' } );\r\n function handleRealtime( entry, connectedState, record ) {\r\n const elInstance = params.HTMLImportElement.instance( entry );\r\n if ( connectedState ) { elInstance[ '#' ].connectedCallback(); }\r\n else { elInstance[ '#' ].disconnectedCallback(); }\r\n }\r\n}\r\n\r\n/**\r\n * Performs hydration for server-slotted elements.\r\n *\r\n * @param Object params\r\n *\r\n * @return Void\r\n */\r\nfunction hydration( params ) {\r\n const window = this;\r\n function scan( context ) {\r\n const slottedElements = new Set;\r\n context.childNodes.forEach( node => {\r\n if ( node.nodeType === 1/** ELEMENT_NODE */ ) {\r\n if ( !node.matches( params.slottedElementsSelector ) ) return;\r\n if ( _( node ).get( 'slot@imports' ) ) return;\r\n slottedElements.add( node );\r\n } else if ( node.nodeType === 8/** COMMENT_NODE */ ) {\r\n const nodeValue = node.nodeValue.trim();\r\n if ( !nodeValue.startsWith( '<' + params.import.tagName ) ) return;\r\n if ( !nodeValue.endsWith( '</' + params.import.tagName + '>' ) ) return;\r\n const reviver = window.document.createElement( 'div' );\r\n reviver.innerHTML = nodeValue;\r\n const importEl = reviver.firstChild;\r\n if ( !importEl.matches( params.import.tagName ) ) return;\r\n params.HTMLImportElement.instance( importEl )[ '#' ].hydrate(\r\n node/* the comment node */, slottedElements\r\n );\r\n slottedElements.clear();\r\n }\r\n } );\r\n }\r\n Array.from( window.document.querySelectorAll( params.slottedElementsSelector ) ).forEach( slottedElement => {\r\n // hydration() might be running AFTER certain <slots> have resolved\r\n // and slottedElement might be a just-resolved node\r\n if ( _( slottedElement ).get( 'slot@imports' ) ) return;\r\n if ( _( slottedElement.parentNode ).get( 'alreadyscanned@imports' ) ) return;\r\n scan( slottedElement.parentNode );\r\n // Scanning is once for every parent\r\n _( slottedElement.parentNode ).set( 'alreadyscanned@imports', true );\r\n } );\r\n}\r\n", "\r\n/**\r\n * @imports\r\n */\r\nimport init from './index.js';\r\n\r\n/**\r\n * @init\r\n */\r\ninit.call( window );"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|