diff --git a/packages/index.d.ts b/packages/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/packages/monster/CHANGELOG b/packages/monster/CHANGELOG
index 6722da199be312ddb6b7ee3c4e46706fac4622d9..1372e682f9589fd4104e80a851c164aab2a91644 100644
--- a/packages/monster/CHANGELOG
+++ b/packages/monster/CHANGELOG
@@ -2,6 +2,18 @@
 
 All notable changes to this project will be documented in this file.
 
+## [1.20.1] - 2021-10-18
+
+## Fixed
+
+- [closest cannot be used, because closest is not correct for slotted elements](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/70)
+
+## [1.20.0] - 2021-10-16
+
+## Fixed
+
+- [closest cannot be used, because closest is not correct for slotted elements](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/70)
+
 ## [1.19.0] - 2021-10-16
 
 ## Added
diff --git a/packages/monster/dist/modules/constants.js b/packages/monster/dist/modules/constants.js
index a76e32ea12d0c8516620731dbc14d7e5c0a52188..c3c970c4645aac7502dbab01864fb4d41ce1be75 100644
--- a/packages/monster/dist/modules/constants.js
+++ b/packages/monster/dist/modules/constants.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{Monster}from"./namespace.js";const PROPERTY_KEY_INTERNALDATA="monsterInternalData";export{Monster,PROPERTY_KEY_INTERNALDATA};
\ No newline at end of file
+'use strict';import{Monster}from"./namespace.js";const PROPERTY_KEY_INTERNALDATA="monsterInternalData";export{Monster,PROPERTY_KEY_INTERNALDATA};
diff --git a/packages/monster/dist/modules/constraints/abstract.js b/packages/monster/dist/modules/constraints/abstract.js
index f39a5eb00f91372aba2a082830c4d699197118fc..8560d4263a0b6cb6da745d06f651818b4ffb5f01 100644
--- a/packages/monster/dist/modules/constraints/abstract.js
+++ b/packages/monster/dist/modules/constraints/abstract.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";class AbstractConstraint extends Base{constructor(){super()}isValid(s){return Promise.reject(s)}}assignToNamespace("Monster.Constraints",AbstractConstraint);export{Monster,AbstractConstraint};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";class AbstractConstraint extends Base{constructor(){super()}isValid(value){return Promise.reject(value)}}assignToNamespace("Monster.Constraints",AbstractConstraint);export{Monster,AbstractConstraint};
diff --git a/packages/monster/dist/modules/constraints/abstractoperator.js b/packages/monster/dist/modules/constraints/abstractoperator.js
index e547a006491d54c1b6c9e79489ca035d54f27772..21e41cbb7614e110c21d614adcb856fb0ae24e60 100644
--- a/packages/monster/dist/modules/constraints/abstractoperator.js
+++ b/packages/monster/dist/modules/constraints/abstractoperator.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class AbstractOperator extends AbstractConstraint{constructor(t,r){if(super(),!(t instanceof AbstractConstraint&&r instanceof AbstractConstraint))throw new TypeError("parameters must be from type AbstractConstraint");this.operantA=t,this.operantB=r}}assignToNamespace("Monster.Constraints",AbstractOperator);export{Monster,AbstractOperator};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class AbstractOperator extends AbstractConstraint{constructor(operantA,operantB){super();if(!(operantA instanceof AbstractConstraint)||!(operantB instanceof AbstractConstraint)){throw new TypeError("parameters must be from type AbstractConstraint")}this.operantA=operantA;this.operantB=operantB}}assignToNamespace("Monster.Constraints",AbstractOperator);export{Monster,AbstractOperator};
diff --git a/packages/monster/dist/modules/constraints/andoperator.js b/packages/monster/dist/modules/constraints/andoperator.js
index 80d95626dc1af0fbb5ff759ba67ff56f09b3a0e8..56f62145ca3e0002a31438edefaced589905e322 100644
--- a/packages/monster/dist/modules/constraints/andoperator.js
+++ b/packages/monster/dist/modules/constraints/andoperator.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{AbstractOperator}from"./abstractoperator.js";class AndOperator extends AbstractOperator{isValid(r){return Promise.all([this.operantA.isValid(r),this.operantB.isValid(r)])}}assignToNamespace("Monster.Constraints",AndOperator);export{Monster,AndOperator};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{AbstractOperator}from"./abstractoperator.js";class AndOperator extends AbstractOperator{isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}assignToNamespace("Monster.Constraints",AndOperator);export{Monster,AndOperator};
diff --git a/packages/monster/dist/modules/constraints/invalid.js b/packages/monster/dist/modules/constraints/invalid.js
index 7100384c581c3a3dc2b0e263957ccc3893538feb..951b50c07a0a3b472f6756a3a8437cfeb463cdb3 100644
--- a/packages/monster/dist/modules/constraints/invalid.js
+++ b/packages/monster/dist/modules/constraints/invalid.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class Invalid extends AbstractConstraint{isValid(s){return Promise.reject(s)}}assignToNamespace("Monster.Constraints",Invalid);export{Monster,Invalid};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class Invalid extends AbstractConstraint{isValid(value){return Promise.reject(value)}}assignToNamespace("Monster.Constraints",Invalid);export{Monster,Invalid};
diff --git a/packages/monster/dist/modules/constraints/isarray.js b/packages/monster/dist/modules/constraints/isarray.js
index 5e443099614a12b32369ffbee8dd881e17919559..403c54f309c6b6c05899087a579a38b76fd5675d 100644
--- a/packages/monster/dist/modules/constraints/isarray.js
+++ b/packages/monster/dist/modules/constraints/isarray.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isArray}from"../types/is.js";import{AbstractConstraint}from"./abstract.js";class IsArray extends AbstractConstraint{isValid(s){return isArray(s)?Promise.resolve(s):Promise.reject(s)}}assignToNamespace("Monster.Constraints",IsArray);export{Monster,IsArray};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isArray}from"../types/is.js";import{AbstractConstraint}from"./abstract.js";class IsArray extends AbstractConstraint{isValid(value){if(isArray(value)){return Promise.resolve(value)}return Promise.reject(value)}}assignToNamespace("Monster.Constraints",IsArray);export{Monster,IsArray};
diff --git a/packages/monster/dist/modules/constraints/isobject.js b/packages/monster/dist/modules/constraints/isobject.js
index 4828d2b534983aa1fbf8c0dcdfe716abb78ffd7f..14d0ea830c881bfe50a719b331d38adc55bc67c6 100644
--- a/packages/monster/dist/modules/constraints/isobject.js
+++ b/packages/monster/dist/modules/constraints/isobject.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isObject}from"../types/is.js";import{AbstractConstraint}from"./abstract.js";class IsObject extends AbstractConstraint{isValid(s){return isObject(s)?Promise.resolve(s):Promise.reject(s)}}assignToNamespace("Monster.Constraints",IsObject);export{Monster,IsObject};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isObject}from"../types/is.js";import{AbstractConstraint}from"./abstract.js";class IsObject extends AbstractConstraint{isValid(value){if(isObject(value)){return Promise.resolve(value)}return Promise.reject(value)}}assignToNamespace("Monster.Constraints",IsObject);export{Monster,IsObject};
diff --git a/packages/monster/dist/modules/constraints/namespace.js b/packages/monster/dist/modules/constraints/namespace.js
index 73a17aceba9e1d114aec32b94f61921a57e7c64d..9c487fcc4cdbb1b0c7cdd19fa7370bce6dac49af 100644
--- a/packages/monster/dist/modules/constraints/namespace.js
+++ b/packages/monster/dist/modules/constraints/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Constraints";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Constraints";
diff --git a/packages/monster/dist/modules/constraints/oroperator.js b/packages/monster/dist/modules/constraints/oroperator.js
index 5a8a66ff5c21915c275f8ec34e0d49b0e45b286f..7b20cc55fd23518a40fe9fc9c6cbf07e20aaeef1 100644
--- a/packages/monster/dist/modules/constraints/oroperator.js
+++ b/packages/monster/dist/modules/constraints/oroperator.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{AbstractOperator}from"./abstractoperator.js";class OrOperator extends AbstractOperator{isValid(s){var o=this;return new Promise(function(t,r){let a,e;o.operantA.isValid(s).then(function(){t()}).catch(function(){(a=!1)===e&&r()}),o.operantB.isValid(s).then(function(){t()}).catch(function(){(e=!1)===a&&r()})})}}assignToNamespace("Monster.Constraints",OrOperator);export{Monster,OrOperator};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{AbstractOperator}from"./abstractoperator.js";class OrOperator extends AbstractOperator{isValid(value){var self=this;return new Promise(function(resolve,reject){let a,b;self.operantA.isValid(value).then(function(){resolve()}).catch(function(){a=false;if(b===false){reject()}});self.operantB.isValid(value).then(function(){resolve()}).catch(function(){b=false;if(a===false){reject()}})})}}assignToNamespace("Monster.Constraints",OrOperator);export{Monster,OrOperator};
diff --git a/packages/monster/dist/modules/constraints/valid.js b/packages/monster/dist/modules/constraints/valid.js
index 3c086a9caf63a5babf622da229bc08a762e8708c..586c06ee9d2c6af53752f785764078dca3df4578 100644
--- a/packages/monster/dist/modules/constraints/valid.js
+++ b/packages/monster/dist/modules/constraints/valid.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class Valid extends AbstractConstraint{isValid(s){return Promise.resolve(s)}}assignToNamespace("Monster.Constraints",Valid);export{Monster,Valid};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{AbstractConstraint}from"./abstract.js";class Valid extends AbstractConstraint{isValid(value){return Promise.resolve(value)}}assignToNamespace("Monster.Constraints",Valid);export{Monster,Valid};
diff --git a/packages/monster/dist/modules/data/buildmap.js b/packages/monster/dist/modules/data/buildmap.js
index f85be256969eac7634f8c9945194f4d3300d67cb..5ceb44c8fa024849e71114fab1d1b69cf161f058 100644
--- a/packages/monster/dist/modules/data/buildmap.js
+++ b/packages/monster/dist/modules/data/buildmap.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isFunction,isObject,isString}from"../types/is.js";import{validateString}from"../types/validate.js";import{clone}from"../util/clone.js";import{DELIMITER,Pathfinder,WILDCARD}from"./pathfinder.js";function buildMap(t,e,a,n,r){const o=new Map;let i;if(isFunction(e)){if(i=e(t),!(i instanceof Map))throw new TypeError("the selector callback must return a map")}else{if(!isString(e))throw new TypeError("value is neither a string nor a function");i=new Map,buildFlatMap.call(i,t,e)}return i instanceof Map&&i.forEach((t,e,i)=>{isFunction(r)&&!0!==r.call(i,t,e)||(e=build(t,n,e),t=build(t,a),o.set(e,t))}),o}function buildFlatMap(i,t,a,n){var r=this;const o=new Map;var e=r.size;void 0===a&&(a=[]);let l=t.split(DELIMITER),s,p=[];do{if(s=l.shift(),p.push(s),s===WILDCARD){let t=new Pathfinder(i),e;try{e=t.getVia(p.join(DELIMITER))}catch(t){e=new Map}for(const[d,h]of e){let e=clone(a);p.map(t=>{e.push(t===WILDCARD?d:t)});var c=e.join(DELIMITER);let t=buildFlatMap.call(r,h,l.join(DELIMITER),e,h);isObject(t)&&(t["^"]=n),o.set(c,t)}}}while(0<l.length);if(e===r.size)for(var[f,u]of o)r.set(f,u);return i}function build(t,a,n){if(void 0===a)return n||t;validateString(a);const e=[...a.matchAll(/(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm)];let r=new Pathfinder(t);return 0===e.length?r.getVia(a):(e.forEach(e=>{var i=e?.groups,e=i?.placeholder;if(void 0!==e){i=i?.path;let t=r.getVia(i);void 0===t&&(t=n),a=a.replaceAll(e,t)}}),a)}assignToNamespace("Monster.Data",buildMap);export{Monster,buildMap};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isFunction,isObject,isString}from"../types/is.js";import{validateString}from"../types/validate.js";import{clone}from"../util/clone.js";import{DELIMITER,Pathfinder,WILDCARD}from"./pathfinder.js";function buildMap(subject,selector,valueTemplate,keyTemplate,filter){const result=new Map;let map;if(isFunction(selector)){map=selector(subject);if(!(map instanceof Map)){throw new TypeError("the selector callback must return a map")}}else if(isString(selector)){map=new Map;buildFlatMap.call(map,subject,selector)}else{throw new TypeError("value is neither a string nor a function")}if(!(map instanceof Map)){return result}map.forEach((v,k,m)=>{if(isFunction(filter)){if(filter.call(m,v,k)!==true)return}k=build(v,keyTemplate,k);v=build(v,valueTemplate);result.set(k,v)});return result}function buildFlatMap(subject,selector,key,parentMap){const result=this;const currentMap=new Map;const resultLength=result.size;if(key===undefined)key=[];let parts=selector.split(DELIMITER);let current="",currentPath=[];do{current=parts.shift();currentPath.push(current);if(current===WILDCARD){let finder=new Pathfinder(subject);let map;try{map=finder.getVia(currentPath.join(DELIMITER))}catch(e){let a=e;map=new Map}for(const[k,o]of map){let copyKey=clone(key);currentPath.map(a=>{copyKey.push(a===WILDCARD?k:a)});let kk=copyKey.join(DELIMITER);let sub=buildFlatMap.call(result,o,parts.join(DELIMITER),copyKey,o);if(isObject(sub)){sub["^"]=parentMap}currentMap.set(kk,sub)}}}while(parts.length>0);if(resultLength===result.size){for(const[k,o]of currentMap){result.set(k,o)}}return subject}function build(subject,definition,defaultValue){if(definition===undefined)return defaultValue?defaultValue:subject;validateString(definition);const regexp=/(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm;const array=[...definition.matchAll(regexp)];let finder=new Pathfinder(subject);if(array.length===0){return finder.getVia(definition)}array.forEach(a=>{let groups=a?.["groups"];let placeholder=groups?.["placeholder"];if(placeholder===undefined)return;let path=groups?.["path"];let v=finder.getVia(path);if(v===undefined)v=defaultValue;definition=definition.replaceAll(placeholder,v)});return definition}assignToNamespace("Monster.Data",buildMap);export{Monster,buildMap};
diff --git a/packages/monster/dist/modules/data/diff.js b/packages/monster/dist/modules/data/diff.js
index 03c3ae7a7c04849c797c610a69a213c049b263f7..de8eac9f6a2ea9ae60e2a1279fc8460c48ce4935 100644
--- a/packages/monster/dist/modules/data/diff.js
+++ b/packages/monster/dist/modules/data/diff.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isObject}from"../types/is.js";import{typeOf}from"../types/typeof.js";function Diff(e,t){return doDiff(e,t)}function getKeys(e,t,n){if(isArray(n)){const o=e.length>t.length?new Array(e.length):new Array(t.length);return o.fill(0),new Set(o.map((e,t)=>t))}return new Set(Object.keys(e).concat(Object.keys(t)))}function doDiff(t,n,e,o){var r=typeOf(t),s=typeOf(n);const a=e||[],i=o||[];return r!==s||"object"!==r&&"array"!==r?void 0!==(s=getOperator(t,n,r,s))&&i.push(buildResult(t,n,s,e)):getKeys(t,n,r).forEach(e=>{Object.prototype.hasOwnProperty.call(t,e)?Object.prototype.hasOwnProperty.call(n,e)?doDiff(t[e],n[e],a.concat(e),i):i.push(buildResult(t[e],n[e],"delete",a.concat(e))):i.push(buildResult(t[e],n[e],"add",a.concat(e)))}),i}function buildResult(e,t,n,o){const r={operator:n,path:o};return"add"!==n&&(r.first={value:e,type:typeof e},!isObject(e)||void 0!==(e=Object.getPrototypeOf(e)?.constructor?.name)&&(r.first.instance=e)),"add"!==n&&"update"!==n||(r.second={value:t,type:typeof t},!isObject(t)||void 0!==(t=Object.getPrototypeOf(t)?.constructor?.name)&&(r.second.instance=t)),r}function isNotEqual(e,t){return typeof e!=typeof t||(e instanceof Date&&t instanceof Date?e.getTime()!==t.getTime():e!==t)}function getOperator(e,t){let n;var o=typeof e,r=typeof t;return"undefined"==o&&"undefined"!=r?n="add":"undefined"!=o&&"undefined"==r?n="delete":isNotEqual(e,t)&&(n="update"),n}assignToNamespace("Monster.Data",Diff);export{Monster,Diff};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isObject}from"../types/is.js";import{typeOf}from"../types/typeof.js";function Diff(first,second){return doDiff(first,second)}function getKeys(a,b,type){if(isArray(type)){const keys=a.length>b.length?new Array(a.length):new Array(b.length);keys.fill(0);return new Set(keys.map((_,i)=>i))}return new Set(Object.keys(a).concat(Object.keys(b)))}function doDiff(a,b,path,diff){let typeA=typeOf(a);let typeB=typeOf(b);const currPath=path||[];const currDiff=diff||[];if(typeA===typeB&&(typeA==="object"||typeA==="array")){getKeys(a,b,typeA).forEach(v=>{if(!Object.prototype.hasOwnProperty.call(a,v)){currDiff.push(buildResult(a[v],b[v],"add",currPath.concat(v)))}else if(!Object.prototype.hasOwnProperty.call(b,v)){currDiff.push(buildResult(a[v],b[v],"delete",currPath.concat(v)))}else{doDiff(a[v],b[v],currPath.concat(v),currDiff)}})}else{const o=getOperator(a,b,typeA,typeB);if(o!==undefined){currDiff.push(buildResult(a,b,o,path))}}return currDiff}function buildResult(a,b,operator,path){const result={operator,path};if(operator!=="add"){result.first={value:a,type:typeof a};if(isObject(a)){const name=Object.getPrototypeOf(a)?.constructor?.name;if(name!==undefined){result.first.instance=name}}}if(operator==="add"||operator==="update"){result.second={value:b,type:typeof b};if(isObject(b)){const name=Object.getPrototypeOf(b)?.constructor?.name;if(name!==undefined){result.second.instance=name}}}return result}function isNotEqual(a,b){if(typeof a!==typeof b){return true}if(a instanceof Date&&b instanceof Date){return a.getTime()!==b.getTime()}return a!==b}function getOperator(a,b){let operator;let typeA=typeof a;let typeB=typeof b;if(typeA==="undefined"&&typeB!=="undefined"){operator="add"}else if(typeA!=="undefined"&&typeB==="undefined"){operator="delete"}else if(isNotEqual(a,b)){operator="update"}return operator}assignToNamespace("Monster.Data",Diff);export{Monster,Diff};
diff --git a/packages/monster/dist/modules/data/extend.js b/packages/monster/dist/modules/data/extend.js
index 1cbd5aabd6c59c10daab8ef9b27cfef7481fb39a..c60293ab895a0b66986aba4910ee274ec1af904a 100644
--- a/packages/monster/dist/modules/data/extend.js
+++ b/packages/monster/dist/modules/data/extend.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isObject}from"../types/is.js";import{typeOf}from"../types/typeof.js";function extend(){let e,r;for(r=0;r<arguments.length;r++){var t=arguments[r];if(!isObject(t)&&!isArray(t))throw new Error("unsuported argument "+JSON.stringify(t));if(void 0!==e)for(var s in t){var i=t?.[s];if(i!==e?.[s])if(isObject(i)||isArray(i)){if(void 0===e[s]&&(isArray(i)?e[s]=[]:e[s]={}),typeOf(e[s])!==typeOf(i))throw new Error("type mismatch: "+JSON.stringify(e[s])+" != "+JSON.stringify(i));e[s]=extend(e[s],i)}else e[s]=i}else e=t}return e}assignToNamespace("Monster.Data",extend);export{Monster,extend};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isObject}from"../types/is.js";import{typeOf}from"../types/typeof.js";function extend(){let o,i;for(i=0;i<arguments.length;i++){let a=arguments[i];if(!(isObject(a)||isArray(a))){throw new Error("unsuported argument "+JSON.stringify(a))}if(o===undefined){o=a;continue}for(let k in a){let v=a?.[k];if(v===o?.[k]){continue}if(isObject(v)||isArray(v)){if(o[k]===undefined){if(isArray(v)){o[k]=[]}else{o[k]={}}}if(typeOf(o[k])!==typeOf(v)){throw new Error("type mismatch: "+JSON.stringify(o[k])+" != "+JSON.stringify(v))}o[k]=extend(o[k],v)}else{o[k]=v}}}return o}assignToNamespace("Monster.Data",extend);export{Monster,extend};
diff --git a/packages/monster/dist/modules/data/namespace.js b/packages/monster/dist/modules/data/namespace.js
index 1822bb3c5179b8fa1b350fba32db0abf6bd4edd7..2f814177ad2097cc72505258d39862c544f5fcac 100644
--- a/packages/monster/dist/modules/data/namespace.js
+++ b/packages/monster/dist/modules/data/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Data";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Data";
diff --git a/packages/monster/dist/modules/data/pathfinder.js b/packages/monster/dist/modules/data/pathfinder.js
index 1e2455e267fc89e120df8bf98783d17d04078720..aea312ae2c69e5cb65b0332eecf3b5b477079c35 100644
--- a/packages/monster/dist/modules/data/pathfinder.js
+++ b/packages/monster/dist/modules/data/pathfinder.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isArray,isInteger,isObject,isPrimitive}from"../types/is.js";import{Stack}from"../types/stack.js";import{validateInteger,validateString}from"../types/validate.js";const DELIMITER=".",WILDCARD="*";class Pathfinder extends Base{constructor(t){if(super(),isPrimitive(t))throw new Error("the parameter must not be a simple type");this.object=t,this.wildCard=WILDCARD}setWildCard(t){return validateString(t),this.wildCard=t,this}getVia(t){return getValueViaPath.call(this,this.object,validateString(t))}setVia(t,e){return validateString(t),setValueViaPath.call(this,this.object,t,e),this}deleteVia(t){return validateString(t),deleteValueViaPath.call(this,this.object,t),this}exists(t){validateString(t);try{return getValueViaPath.call(this,this.object,t,!0),!0}catch(t){}return!1}}function iterate(t,e,a){const i=new Map;if(isObject(t)||isArray(t))for(var[r,s]of Object.entries(t))i.set(r,getValueViaPath.call(this,s,e,a));else{var n=e.split(DELIMITER).shift();i.set(n,getValueViaPath.call(this,t,e,a))}return i}function getValueViaPath(e,t,a){if(""===t)return e;let i=t.split(DELIMITER),r=i.shift();if(r===this.wildCard)return iterate.call(this,e,i.join(DELIMITER),a);if(isObject(e)||isArray(e)){let t;if(e instanceof Map||e instanceof WeakMap)t=e.get(r);else if(e instanceof Set||e instanceof WeakSet)r=parseInt(r),validateInteger(r),t=[...e][r];else{if("function"==typeof WeakRef&&e instanceof WeakRef)throw Error("unsupported action for this data type");t=(isArray(e)&&(r=parseInt(r),validateInteger(r)),e?.[r])}if(isObject(t)||isArray(t))return getValueViaPath.call(this,t,i.join(DELIMITER),a);if(0<i.length)throw Error("the journey is not at its end ("+i.join(DELIMITER)+")");if(!0===a&&!e.hasOwnProperty(r))throw Error("unknown value");return t}throw TypeError("unsupported type "+typeof e)}function setValueViaPath(e,t,a){validateString(t);let i=t.split(DELIMITER),r=i.pop();var s,t=i.join(DELIMITER);let n=new Stack,o=t;for(;;){try{getValueViaPath.call(this,e,o,!0);break}catch(t){}if(n.push(o),i.pop(),o=i.join(DELIMITER),""===o)break}for(;!n.isEmpty();){o=n.pop();let t={};n.isEmpty()||(s=n.peek().split(DELIMITER).pop(),isInteger(parseInt(s))&&(t=[])),setValueViaPath.call(this,e,o,t)}let l=getValueViaPath.call(this,e,t);if(!isObject(e)&&!isArray(e))throw TypeError("unsupported type: "+typeof e);if(l instanceof Map||l instanceof WeakMap)l.set(r,a);else if(l instanceof Set||l instanceof WeakSet)l.append(a);else{if("function"==typeof WeakRef&&l instanceof WeakRef)throw Error("unsupported action for this data type");isArray(l)&&(r=parseInt(r),validateInteger(r)),assignProperty(l,r,a)}}function assignProperty(t,e,a){t.hasOwnProperty(e)&&void 0===a&&delete t[e],t[e]=a}function deleteValueViaPath(t,e){const a=e.split(DELIMITER);let i=a.pop();e=a.join(DELIMITER);const r=getValueViaPath.call(this,t,e);if(r instanceof Map)r.delete(i);else{if(r instanceof Set||r instanceof WeakMap||r instanceof WeakSet||"function"==typeof WeakRef&&r instanceof WeakRef)throw Error("unsupported action for this data type");isArray(r)&&(i=parseInt(i),validateInteger(i)),delete r[i]}}assignToNamespace("Monster.Data",Pathfinder);export{DELIMITER,WILDCARD,Monster,Pathfinder};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isArray,isInteger,isObject,isPrimitive}from"../types/is.js";import{Stack}from"../types/stack.js";import{validateInteger,validateString}from"../types/validate.js";export const DELIMITER=".";export const WILDCARD="*";class Pathfinder extends Base{constructor(object){super();if(isPrimitive(object)){throw new Error("the parameter must not be a simple type")}this.object=object;this.wildCard=WILDCARD}setWildCard(wildcard){validateString(wildcard);this.wildCard=wildcard;return this}getVia(path){return getValueViaPath.call(this,this.object,validateString(path))}setVia(path,value){validateString(path);setValueViaPath.call(this,this.object,path,value);return this}deleteVia(path){validateString(path);deleteValueViaPath.call(this,this.object,path);return this}exists(path){validateString(path);try{getValueViaPath.call(this,this.object,path,true);return true}catch(e){}return false}}assignToNamespace("Monster.Data",Pathfinder);export{Monster,Pathfinder};function iterate(subject,path,check){const result=new Map;if(isObject(subject)||isArray(subject)){for(const[key,value]of Object.entries(subject)){result.set(key,getValueViaPath.call(this,value,path,check))}}else{let key=path.split(DELIMITER).shift();result.set(key,getValueViaPath.call(this,subject,path,check))}return result}function getValueViaPath(subject,path,check){if(path===""){return subject}let parts=path.split(DELIMITER);let current=parts.shift();if(current===this.wildCard){return iterate.call(this,subject,parts.join(DELIMITER),check)}if(isObject(subject)||isArray(subject)){let anchor;if(subject instanceof Map||subject instanceof WeakMap){anchor=subject.get(current)}else if(subject instanceof Set||subject instanceof WeakSet){current=parseInt(current);validateInteger(current);anchor=[...subject]?.[current]}else if(typeof WeakRef==="function"&&subject instanceof WeakRef){throw Error("unsupported action for this data type")}else if(isArray(subject)){current=parseInt(current);validateInteger(current);anchor=subject?.[current]}else{anchor=subject?.[current]}if(isObject(anchor)||isArray(anchor)){return getValueViaPath.call(this,anchor,parts.join(DELIMITER),check)}if(parts.length>0){throw Error("the journey is not at its end ("+parts.join(DELIMITER)+")")}if(check===true&&!subject.hasOwnProperty(current)){throw Error("unknown value")}return anchor}throw TypeError("unsupported type "+typeof subject)}function setValueViaPath(object,path,value){validateString(path);let parts=path.split(DELIMITER);let last=parts.pop();let subpath=parts.join(DELIMITER);let stack=new Stack;let current=subpath;while(true){try{getValueViaPath.call(this,object,current,true);break}catch(e){}stack.push(current);parts.pop();current=parts.join(DELIMITER);if(current==="")break}while(!stack.isEmpty()){current=stack.pop();let obj={};if(!stack.isEmpty()){let n=stack.peek().split(DELIMITER).pop();if(isInteger(parseInt(n))){obj=[]}}setValueViaPath.call(this,object,current,obj)}let anchor=getValueViaPath.call(this,object,subpath);if(!isObject(object)&&!isArray(object)){throw TypeError("unsupported type: "+typeof object)}if(anchor instanceof Map||anchor instanceof WeakMap){anchor.set(last,value)}else if(anchor instanceof Set||anchor instanceof WeakSet){anchor.append(value)}else if(typeof WeakRef==="function"&&anchor instanceof WeakRef){throw Error("unsupported action for this data type")}else if(isArray(anchor)){last=parseInt(last);validateInteger(last);assignProperty(anchor,last,value)}else{assignProperty(anchor,last,value)}}function assignProperty(object,key,value){if(!object.hasOwnProperty(key)){object[key]=value;return}if(value===undefined){delete object[key]}object[key]=value}function deleteValueViaPath(object,path){const parts=path.split(DELIMITER);let last=parts.pop();const subpath=parts.join(DELIMITER);const anchor=getValueViaPath.call(this,object,subpath);if(anchor instanceof Map){anchor.delete(last)}else if(anchor instanceof Set||anchor instanceof WeakMap||anchor instanceof WeakSet||typeof WeakRef==="function"&&anchor instanceof WeakRef){throw Error("unsupported action for this data type")}else if(isArray(anchor)){last=parseInt(last);validateInteger(last);delete anchor[last]}else{delete anchor[last]}}
diff --git a/packages/monster/dist/modules/data/pipe.js b/packages/monster/dist/modules/data/pipe.js
index 87d961511eefda50f1e55c65a18f5cff736a8d81..0feadc9e068930768e7d28384ed5431f14046c13 100644
--- a/packages/monster/dist/modules/data/pipe.js
+++ b/packages/monster/dist/modules/data/pipe.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateString}from"../types/validate.js";import{Transformer}from"./transformer.js";const DELIMITER="|";class Pipe extends Base{constructor(e){super(),validateString(e),this.pipe=e.split(DELIMITER).map(e=>new Transformer(e))}setCallback(e,s,r){for(var[,t]of Object.entries(this.pipe))t.setCallback(e,s,r);return this}run(e){return this.pipe.reduce((e,s,r,t)=>s.run(e),e)}}assignToNamespace("Monster.Data",Pipe);export{Monster,Pipe};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateString}from"../types/validate.js";import{Transformer}from"./transformer.js";const DELIMITER="|";class Pipe extends Base{constructor(pipe){super();validateString(pipe);this.pipe=pipe.split(DELIMITER).map(v=>{return new Transformer(v)})}setCallback(name,callback,context){for(const[,t]of Object.entries(this.pipe)){t.setCallback(name,callback,context)}return this}run(value){return this.pipe.reduce((accumulator,transformer,currentIndex,array)=>{return transformer.run(accumulator)},value)}}assignToNamespace("Monster.Data",Pipe);export{Monster,Pipe};
diff --git a/packages/monster/dist/modules/data/transformer.js b/packages/monster/dist/modules/data/transformer.js
index b5fb181661b63eaacdbac6f1b4607d9f2ef326c9..ff4c787ee75420f672884468f1cf216a1be55b25 100644
--- a/packages/monster/dist/modules/data/transformer.js
+++ b/packages/monster/dist/modules/data/transformer.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobal}from"../types/global.js";import{ID}from"../types/id.js";import{isArray,isObject,isString}from"../types/is.js";import{validateFunction,validateInteger,validateObject,validatePrimitive,validateString}from"../types/validate.js";import{clone}from"../util/clone.js";import{Pathfinder}from"./pathfinder.js";class Transformer extends Base{constructor(e){super(),validateString(e),this.args=disassemble(e),this.command=this.args.shift(),this.callbacks=new Map}setCallback(e,t,r){return validateString(e),validateFunction(t),void 0!==r&&validateObject(r),this.callbacks.set(e,{callback:t,context:r}),this}run(e){return transform.apply(this,[e])}}function disassemble(e){validateString(e);let a=new Map;var t;for(t of e.matchAll(/((?<pattern>\\(?<char>.)){1})/gim)){var r,s,n=t?.groups;isObject(n)&&(s=n?.char,(r=n?.pattern)&&s&&(n="__"+(new ID).toString()+"__",a.set(n,s),e=e.replace(r,n)))}let i=e.split(":");return i=i.map(function(e){let t=e.trim();for(var r of a)t=t.replace(r[0],r[1]);return t}),i}function convertToString(e){return isObject(e)&&e.hasOwnProperty("toString")&&(e=e.toString()),validateString(e),e}function transform(s){let n=clone(this.args),i;switch(this.command){case"static":return this.args.join(":");case"tolower":case"strtolower":case"tolowercase":return validateString(s),s.toLowerCase();case"toupper":case"strtoupper":case"touppercase":return validateString(s),s.toUpperCase();case"tostring":return""+s;case"tointeger":var o=parseInt(s);return validateInteger(o),o;case"tojson":return JSON.stringify(s);case"fromjson":return JSON.parse(s);case"trim":return validateString(s),s.trim();case"rawurlencode":return validateString(s),encodeURIComponent(s).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A");case"call":let e;var c=n.shift();let t=getGlobal();return isObject(s)&&s.hasOwnProperty(c)?e=s[c]:this.callbacks.has(c)?(o=this.callbacks.get(c),e=o?.callback,t=o?.context):"object"==typeof window&&window.hasOwnProperty(c)&&(e=window[c]),validateFunction(e),n.unshift(s),e.call(t,...n);case"plain":case"plaintext":return validateString(s),(new DOMParser).parseFromString(s,"text/html").body.textContent||"";case"if":case"?":validatePrimitive(s);let r=n.shift()||void 0,a=n.shift()||void 0;return"value"===r&&(r=s),"\\value"===r&&(r="value"),"value"===a&&(a=s),"\\value"===a&&(a="value"),void 0!==s&&""!==s&&"off"!==s&&"false"!==s&&!1!==s||"on"===s||"true"===s||!0===s?r:a;case"ucfirst":return validateString(s),s.charAt(0).toUpperCase()+s.substr(1);case"ucwords":return validateString(s),s.replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,function(e){return e.toUpperCase()});case"count":case"length":if((isString(s)||isObject(s)||isArray(s))&&s.hasOwnProperty("length"))return s.length;throw new TypeError("unsupported type "+typeof s);case"base64":return convertToString(s),btoa(s);case"empty":return"";case"undefined":return;case"prefix":return validateString(s),n?.[0]+s;case"suffix":return validateString(s),s+n?.[0];case"uniqid":return(new ID).toString();case"key":case"property":case"index":i=n.shift()||"undefined";var l=n.shift()||"";if(s instanceof Map)return s.has(i)?s.get(i):l;if(isObject(s)||isArray(s))return s?.[i]||l;throw new Error("type not supported");case"path":return i=n.shift()||"undefined",new Pathfinder(s).getVia(i);case"substring":validateString(s);c=parseInt(n[0])||0,l=(parseInt(n[1])||0)+c;return s.substring(c,l);case"nop":return s;case"default":return void 0!==s?s:n[0];default:throw new Error("unknown command "+this.command)}return s}assignToNamespace("Monster.Data",Transformer);export{Monster,Transformer};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobal}from"../types/global.js";import{ID}from"../types/id.js";import{isArray,isObject,isString}from"../types/is.js";import{validateFunction,validateInteger,validateObject,validatePrimitive,validateString}from"../types/validate.js";import{clone}from"../util/clone.js";import{Pathfinder}from"./pathfinder.js";class Transformer extends Base{constructor(definition){super();validateString(definition);this.args=disassemble(definition);this.command=this.args.shift();this.callbacks=new Map}setCallback(name,callback,context){validateString(name);validateFunction(callback);if(context!==undefined){validateObject(context)}this.callbacks.set(name,{callback:callback,context:context});return this}run(value){return transform.apply(this,[value])}}assignToNamespace("Monster.Data",Transformer);export{Monster,Transformer};function disassemble(command){validateString(command);let placeholder=new Map;const regex=/((?<pattern>\\(?<char>.)){1})/mig;let result=command.matchAll(regex);for(let m of result){let g=m?.["groups"];if(!isObject(g)){continue}let p=g?.["pattern"];let c=g?.["char"];if(p&&c){let r="__"+new ID().toString()+"__";placeholder.set(r,c);command=command.replace(p,r)}}let parts=command.split(":");parts=parts.map(function(value){let v=value.trim();for(let k of placeholder){v=v.replace(k[0],k[1])}return v});return parts}function convertToString(value){if(isObject(value)&&value.hasOwnProperty("toString")){value=value.toString()}validateString(value);return value}function transform(value){let args=clone(this.args);let key;switch(this.command){case"static":return this.args.join(":");case"tolower":case"strtolower":case"tolowercase":validateString(value);return value.toLowerCase();case"toupper":case"strtoupper":case"touppercase":validateString(value);return value.toUpperCase();case"tostring":return""+value;case"tointeger":let n=parseInt(value);validateInteger(n);return n;case"tojson":return JSON.stringify(value);case"fromjson":return JSON.parse(value);case"trim":validateString(value);return value.trim();case"rawurlencode":validateString(value);return encodeURIComponent(value).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A");case"call":let callback;let callbackName=args.shift();let context=getGlobal();if(isObject(value)&&value.hasOwnProperty(callbackName)){callback=value[callbackName]}else if(this.callbacks.has(callbackName)){let s=this.callbacks.get(callbackName);callback=s?.["callback"];context=s?.["context"]}else if(typeof window==="object"&&window.hasOwnProperty(callbackName)){callback=window[callbackName]}validateFunction(callback);args.unshift(value);return callback.call(context,...args);case"plain":case"plaintext":validateString(value);let doc=new DOMParser().parseFromString(value,"text/html");return doc.body.textContent||"";case"if":case"?":validatePrimitive(value);let trueStatement=args.shift()||undefined;let falseStatement=args.shift()||undefined;if(trueStatement==="value"){trueStatement=value}if(trueStatement==="\\value"){trueStatement="value"}if(falseStatement==="value"){falseStatement=value}if(falseStatement==="\\value"){falseStatement="value"}let condition=value!==undefined&&value!==""&&value!=="off"&&value!=="false"&&value!==false||value==="on"||value==="true"||value===true;return condition?trueStatement:falseStatement;case"ucfirst":validateString(value);let firstchar=value.charAt(0).toUpperCase();return firstchar+value.substr(1);case"ucwords":validateString(value);return value.replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,function(v){return v.toUpperCase()});case"count":case"length":if((isString(value)||isObject(value)||isArray(value))&&value.hasOwnProperty("length")){return value.length}throw new TypeError("unsupported type "+typeof value);case"base64":convertToString(value);return btoa(value);case"empty":return"";case"undefined":return undefined;case"prefix":validateString(value);let prefix=args?.[0];return prefix+value;case"suffix":validateString(value);let suffix=args?.[0];return value+suffix;case"uniqid":return new ID().toString();case"key":case"property":case"index":key=args.shift()||"undefined";let defaultValue=args.shift()||"";if(value instanceof Map){if(!value.has(key)){return defaultValue}return value.get(key)}if(isObject(value)||isArray(value)){if(value?.[key]){return value?.[key]}return defaultValue}throw new Error("type not supported");case"path":key=args.shift()||"undefined";return new Pathfinder(value).getVia(key);case"substring":validateString(value);let start=parseInt(args[0])||0;let end=(parseInt(args[1])||0)+start;return value.substring(start,end);case"nop":return value;case"default":if(value!==undefined){return value}return args[0];default:throw new Error("unknown command "+this.command);}return value}
diff --git a/packages/monster/dist/modules/dom/assembler.js b/packages/monster/dist/modules/dom/assembler.js
index 49b0570a8ee73b69c475b5c6b16a88eccdcbefb5..6ce8c643165346d5d56e69e4061b7f5a7149a8ba 100644
--- a/packages/monster/dist/modules/dom/assembler.js
+++ b/packages/monster/dist/modules/dom/assembler.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalFunction}from"../types/global.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateInstance,validateString}from"../types/validate.js";const ATTRIBUTEPREFIX="data-monster-";class Assembler extends Base{constructor(e){super(),this.attributePrefix=ATTRIBUTEPREFIX,validateInstance(e,getGlobalFunction("DocumentFragment")),this.fragment=e}setAttributePrefix(e){return validateString(e),this.attributePrefix=e,this}getAttributePrefix(){return this.attributePrefix}createDocumentFragment(e){return void 0===e&&(e=new ProxyObserver({})),validateInstance(e,ProxyObserver),this.fragment.cloneNode(!0)}}assignToNamespace("Monster.DOM",Assembler);export{Monster,ATTRIBUTEPREFIX,Assembler};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalFunction}from"../types/global.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateInstance,validateString}from"../types/validate.js";const ATTRIBUTEPREFIX="data-monster-";class Assembler extends Base{constructor(fragment){super();this.attributePrefix=ATTRIBUTEPREFIX;validateInstance(fragment,getGlobalFunction("DocumentFragment"));this.fragment=fragment}setAttributePrefix(prefix){validateString(prefix);this.attributePrefix=prefix;return this}getAttributePrefix(){return this.attributePrefix}createDocumentFragment(data){if(data===undefined){data=new ProxyObserver({})}validateInstance(data,ProxyObserver);let fragment=this.fragment.cloneNode(true);return fragment}}assignToNamespace("Monster.DOM",Assembler);export{Monster,ATTRIBUTEPREFIX,Assembler};
diff --git a/packages/monster/dist/modules/dom/attributes.js b/packages/monster/dist/modules/dom/attributes.js
index 691461eb2e855673570eb2b7d1ab93c83d700df6..b803193cc0740d987f4bd82015f911ff4e20411b 100644
--- a/packages/monster/dist/modules/dom/attributes.js
+++ b/packages/monster/dist/modules/dom/attributes.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobalFunction}from"../types/global.js";import{TokenList}from"../types/tokenlist.js";import{validateInstance,validateString,validateSymbol}from"../types/validate.js";import{ATTRIBUTE_OBJECTLINK}from"./constants.js";function findClosestObjectLink(t){return findClosestByAttribute(t,ATTRIBUTE_OBJECTLINK)}function addToObjectLink(t,e,n){return validateInstance(t,HTMLElement),validateSymbol(e),void 0===t?.[e]&&(t[e]=new Set),addAttributeToken(t,ATTRIBUTE_OBJECTLINK,e.toString()),t[e].add(n),t}function removeObjectLink(t,e){return validateInstance(t,HTMLElement),validateSymbol(e),void 0===t?.[e]||(removeAttributeToken(t,ATTRIBUTE_OBJECTLINK,e.toString()),delete t[e]),t}function hasObjectLink(t,e){return validateInstance(t,HTMLElement),validateSymbol(e),void 0!==t?.[e]&&containsAttributeToken(t,ATTRIBUTE_OBJECTLINK,e.toString())}function getLinkedObjects(t,e){if(validateInstance(t,HTMLElement),validateSymbol(e),void 0===t?.[e])throw new Error("there is no object link for "+e.toString());return t?.[e][Symbol.iterator]()}function toggleAttributeToken(t,e,n){return validateInstance(t,HTMLElement),validateString(n),validateString(e),t.hasAttribute(e)?t.setAttribute(e,new TokenList(t.getAttribute(e)).toggle(n).toString()):t.setAttribute(e,n),t}function addAttributeToken(t,e,n){return validateInstance(t,HTMLElement),validateString(n),validateString(e),t.hasAttribute(e)?t.setAttribute(e,new TokenList(t.getAttribute(e)).add(n).toString()):t.setAttribute(e,n),t}function removeAttributeToken(t,e,n){return validateInstance(t,HTMLElement),validateString(n),validateString(e),t.hasAttribute(e)&&t.setAttribute(e,new TokenList(t.getAttribute(e)).remove(n).toString()),t}function containsAttributeToken(t,e,n){return validateInstance(t,HTMLElement),validateString(n),validateString(e),!!t.hasAttribute(e)&&new TokenList(t.getAttribute(e)).contains(n)}function replaceAttributeToken(t,e,n,i){return validateInstance(t,HTMLElement),validateString(n),validateString(i),validateString(e),t.hasAttribute(e)&&t.setAttribute(e,new TokenList(t.getAttribute(e)).replace(n,i).toString()),t}function clearAttributeTokens(t,e){return validateInstance(t,HTMLElement),validateString(e),t.hasAttribute(e)&&t.setAttribute(e,""),t}function findClosestByAttribute(t,e,n){if(validateInstance(t,getGlobalFunction("HTMLElement")),t.hasAttribute(e)&&t.getAttribute(e)===n)return t;let i=validateString(e);void 0!==n&&(i+="="+validateString(n));t=t.closest("["+i+"]");return t instanceof HTMLElement?t:void 0}assignToNamespace("Monster.DOM",getLinkedObjects,addToObjectLink,removeObjectLink,findClosestByAttribute,hasObjectLink,clearAttributeTokens,replaceAttributeToken,containsAttributeToken,removeAttributeToken,addAttributeToken,toggleAttributeToken);export{Monster,addToObjectLink,removeObjectLink,hasObjectLink,findClosestByAttribute,clearAttributeTokens,replaceAttributeToken,containsAttributeToken,removeAttributeToken,addAttributeToken,toggleAttributeToken,getLinkedObjects,findClosestObjectLink};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{getGlobalFunction}from"../types/global.js";import{TokenList}from"../types/tokenlist.js";import{validateInstance,validateString,validateSymbol}from"../types/validate.js";import{ATTRIBUTE_OBJECTLINK}from"./constants.js";function findClosestObjectLink(element){return findClosestByAttribute(element,ATTRIBUTE_OBJECTLINK)}function addToObjectLink(element,symbol,object){validateInstance(element,HTMLElement);validateSymbol(symbol);if(element?.[symbol]===undefined){element[symbol]=new Set}addAttributeToken(element,ATTRIBUTE_OBJECTLINK,symbol.toString());element[symbol].add(object);return element}function removeObjectLink(element,symbol){validateInstance(element,HTMLElement);validateSymbol(symbol);if(element?.[symbol]===undefined){return element}removeAttributeToken(element,ATTRIBUTE_OBJECTLINK,symbol.toString());delete element[symbol];return element}function hasObjectLink(element,symbol){validateInstance(element,HTMLElement);validateSymbol(symbol);if(element?.[symbol]===undefined){return false}return containsAttributeToken(element,ATTRIBUTE_OBJECTLINK,symbol.toString())}function getLinkedObjects(element,symbol){validateInstance(element,HTMLElement);validateSymbol(symbol);if(element?.[symbol]===undefined){throw new Error("there is no object link for "+symbol.toString())}return element?.[symbol][Symbol.iterator]()}function toggleAttributeToken(element,key,token){validateInstance(element,HTMLElement);validateString(token);validateString(key);if(!element.hasAttribute(key)){element.setAttribute(key,token);return element}element.setAttribute(key,new TokenList(element.getAttribute(key)).toggle(token).toString());return element}function addAttributeToken(element,key,token){validateInstance(element,HTMLElement);validateString(token);validateString(key);if(!element.hasAttribute(key)){element.setAttribute(key,token);return element}element.setAttribute(key,new TokenList(element.getAttribute(key)).add(token).toString());return element}function removeAttributeToken(element,key,token){validateInstance(element,HTMLElement);validateString(token);validateString(key);if(!element.hasAttribute(key)){return element}element.setAttribute(key,new TokenList(element.getAttribute(key)).remove(token).toString());return element}function containsAttributeToken(element,key,token){validateInstance(element,HTMLElement);validateString(token);validateString(key);if(!element.hasAttribute(key)){return false}return new TokenList(element.getAttribute(key)).contains(token)}function replaceAttributeToken(element,key,from,to){validateInstance(element,HTMLElement);validateString(from);validateString(to);validateString(key);if(!element.hasAttribute(key)){return element}element.setAttribute(key,new TokenList(element.getAttribute(key)).replace(from,to).toString());return element}function clearAttributeTokens(element,key){validateInstance(element,HTMLElement);validateString(key);if(!element.hasAttribute(key)){return element}element.setAttribute(key,"");return element}function findClosestByAttribute(element,key,value){validateInstance(element,getGlobalFunction("HTMLElement"));if(element.hasAttribute(key)&&element.getAttribute(key)===value){return element}let selector=validateString(key);if(value!==undefined)selector+="="+validateString(value);let result=element.closest("["+selector+"]");if(result instanceof HTMLElement){return result}return undefined}assignToNamespace("Monster.DOM",getLinkedObjects,addToObjectLink,removeObjectLink,findClosestByAttribute,hasObjectLink,clearAttributeTokens,replaceAttributeToken,containsAttributeToken,removeAttributeToken,addAttributeToken,toggleAttributeToken);export{Monster,addToObjectLink,removeObjectLink,hasObjectLink,findClosestByAttribute,clearAttributeTokens,replaceAttributeToken,containsAttributeToken,removeAttributeToken,addAttributeToken,toggleAttributeToken,getLinkedObjects,findClosestObjectLink};
diff --git a/packages/monster/dist/modules/dom/constants.js b/packages/monster/dist/modules/dom/constants.js
index 74446c27f2befbe6f9493a9f465e37d12265e68b..8e99c06b91b3cb2431947bd95846dbabbd3aa7c7 100644
--- a/packages/monster/dist/modules/dom/constants.js
+++ b/packages/monster/dist/modules/dom/constants.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{Monster}from"../namespace.js";const ATTRIBUTE_PREFIX="data-monster-",ATTRIBUTE_OPTIONS=ATTRIBUTE_PREFIX+"options",DEFAULT_THEME="monster",ATTRIBUTE_THEME_PREFIX=ATTRIBUTE_PREFIX+"theme-",ATTRIBUTE_THEME_NAME=ATTRIBUTE_THEME_PREFIX+"name",ATTRIBUTE_UPDATER_ATTRIBUTES=ATTRIBUTE_PREFIX+"attributes",ATTRIBUTE_UPDATER_REPLACE=ATTRIBUTE_PREFIX+"replace",ATTRIBUTE_UPDATER_INSERT=ATTRIBUTE_PREFIX+"insert",ATTRIBUTE_UPDATER_INSERT_REFERENCE=ATTRIBUTE_PREFIX+"insert-reference",ATTRIBUTE_UPDATER_REMOVE=ATTRIBUTE_PREFIX+"remove",ATTRIBUTE_UPDATER_BIND=ATTRIBUTE_PREFIX+"bind",ATTRIBUTE_ROLE=ATTRIBUTE_PREFIX+"role",ATTRIBUTE_OBJECTLINK=ATTRIBUTE_PREFIX+"objectlink",OBJECTLINK_KEY_UPDATER="monsterUpdater";export{Monster,ATTRIBUTE_PREFIX,ATTRIBUTE_OPTIONS,DEFAULT_THEME,ATTRIBUTE_THEME_PREFIX,ATTRIBUTE_ROLE,ATTRIBUTE_THEME_NAME,ATTRIBUTE_UPDATER_ATTRIBUTES,ATTRIBUTE_UPDATER_REPLACE,ATTRIBUTE_UPDATER_INSERT,ATTRIBUTE_UPDATER_INSERT_REFERENCE,ATTRIBUTE_UPDATER_REMOVE,ATTRIBUTE_UPDATER_BIND,ATTRIBUTE_OBJECTLINK,OBJECTLINK_KEY_UPDATER};
\ No newline at end of file
+'use strict';import{Monster}from"../namespace.js";const ATTRIBUTE_PREFIX="data-monster-";const ATTRIBUTE_OPTIONS=ATTRIBUTE_PREFIX+"options";const DEFAULT_THEME="monster";const ATTRIBUTE_THEME_PREFIX=ATTRIBUTE_PREFIX+"theme-";const ATTRIBUTE_THEME_NAME=ATTRIBUTE_THEME_PREFIX+"name";const ATTRIBUTE_UPDATER_ATTRIBUTES=ATTRIBUTE_PREFIX+"attributes";const ATTRIBUTE_UPDATER_REPLACE=ATTRIBUTE_PREFIX+"replace";const ATTRIBUTE_UPDATER_INSERT=ATTRIBUTE_PREFIX+"insert";const ATTRIBUTE_UPDATER_INSERT_REFERENCE=ATTRIBUTE_PREFIX+"insert-reference";const ATTRIBUTE_UPDATER_REMOVE=ATTRIBUTE_PREFIX+"remove";const ATTRIBUTE_UPDATER_BIND=ATTRIBUTE_PREFIX+"bind";const ATTRIBUTE_ROLE=ATTRIBUTE_PREFIX+"role";const ATTRIBUTE_OBJECTLINK=ATTRIBUTE_PREFIX+"objectlink";const OBJECTLINK_KEY_UPDATER="monsterUpdater";export{Monster,ATTRIBUTE_PREFIX,ATTRIBUTE_OPTIONS,DEFAULT_THEME,ATTRIBUTE_THEME_PREFIX,ATTRIBUTE_ROLE,ATTRIBUTE_THEME_NAME,ATTRIBUTE_UPDATER_ATTRIBUTES,ATTRIBUTE_UPDATER_REPLACE,ATTRIBUTE_UPDATER_INSERT,ATTRIBUTE_UPDATER_INSERT_REFERENCE,ATTRIBUTE_UPDATER_REMOVE,ATTRIBUTE_UPDATER_BIND,ATTRIBUTE_OBJECTLINK,OBJECTLINK_KEY_UPDATER};
diff --git a/packages/monster/dist/modules/dom/customcontrol.js b/packages/monster/dist/modules/dom/customcontrol.js
index 4d2f6d772225759cabb252053dc8801fe5043710..f80e919fe10df27bcee926006fd159b06022ef65 100644
--- a/packages/monster/dist/modules/dom/customcontrol.js
+++ b/packages/monster/dist/modules/dom/customcontrol.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{extend}from"../data/extend.js";import{assignToNamespace,Monster}from"../namespace.js";import{CustomElement}from"./customelement.js";const internalSymbol=Symbol("internalSymbol");class CustomControl extends CustomElement{constructor(){super(),"function"==typeof this.attachInternals&&(this[internalSymbol]=this.attachInternals())}static get formAssociated(){return!0}get defaults(){return extend({},super.defaults)}get value(){throw Error("the value getter must be overwritten by the derived class")}set value(t){throw Error("the value setter must be overwritten by the derived class")}get labels(){return getInternal.call(this)?.labels}get name(){return this.getAttribute("name")}get type(){return this.constructor.getTag()}get validity(){return getInternal.call(this)?.validity}get validationMessage(){return getInternal.call(this)?.validationMessage}get willValidate(){return getInternal.call(this)?.willValidate}get states(){return getInternal.call(this)?.states}get form(){return getInternal.call(this)?.form}setFormValue(t,e){getInternal.call(this).setFormValue(t,e)}setValidity(t,e,r){getInternal.call(this).setValidity(t,e,r)}checkValidity(){return getInternal.call(this)?.checkValidity()}reportValidity(){return getInternal.call(this)?.reportValidity()}}function getInternal(){if(!(internalSymbol in this))throw new Error("ElementInternals is not supported and a polyfill is necessary");return this[internalSymbol]}assignToNamespace("Monster.DOM",CustomControl);export{Monster,CustomControl};
\ No newline at end of file
+'use strict';import{extend}from"../data/extend.js";import{assignToNamespace,Monster}from"../namespace.js";import{CustomElement}from"./customelement.js";const internalSymbol=Symbol("internalSymbol");class CustomControl extends CustomElement{constructor(){super();if(typeof this["attachInternals"]==="function"){this[internalSymbol]=this.attachInternals()}}static get formAssociated(){return true}get defaults(){return extend({},super.defaults)}get value(){throw Error("the value getter must be overwritten by the derived class")}set value(value){throw Error("the value setter must be overwritten by the derived class")}get labels(){return getInternal.call(this)?.labels}get name(){return this.getAttribute("name")}get type(){return this.constructor.getTag()}get validity(){return getInternal.call(this)?.validity}get validationMessage(){return getInternal.call(this)?.validationMessage}get willValidate(){return getInternal.call(this)?.willValidate}get states(){return getInternal.call(this)?.states}get form(){return getInternal.call(this)?.form}setFormValue(value,state){getInternal.call(this).setFormValue(value,state)}setValidity(flags,message,anchor){getInternal.call(this).setValidity(flags,message,anchor)}checkValidity(){return getInternal.call(this)?.checkValidity()}reportValidity(){return getInternal.call(this)?.reportValidity()}}function getInternal(){const self=this;if(!(internalSymbol in this)){throw new Error("ElementInternals is not supported and a polyfill is necessary")}return this[internalSymbol]}assignToNamespace("Monster.DOM",CustomControl);export{Monster,CustomControl};
diff --git a/packages/monster/dist/modules/dom/customelement.js b/packages/monster/dist/modules/dom/customelement.js
index 30acc274b0a1b5ad3f482974f50ecaa80c89710f..51e708e1aeb86320cb6105069dc7e3f8885dbf8b 100644
--- a/packages/monster/dist/modules/dom/customelement.js
+++ b/packages/monster/dist/modules/dom/customelement.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{PROPERTY_KEY_INTERNALDATA}from"../constants.js";import{extend}from"../data/extend.js";import{Pathfinder}from"../data/pathfinder.js";import{assignToNamespace,Monster}from"../namespace.js";import{parseDataURL}from"../types/dataurl.js";import{getGlobalObject}from"../types/global.js";import{isArray,isString}from"../types/is.js";import{Observer}from"../types/observer.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateFunction,validateInstance,validateObject}from"../types/validate.js";import{clone}from"../util/clone.js";import{addToObjectLink,getLinkedObjects,hasObjectLink}from"./attributes.js";import{ATTRIBUTE_OPTIONS,OBJECTLINK_KEY_UPDATER}from"./constants.js";import{findDocumentTemplate,Template}from"./template.js";import{Updater}from"./updater.js";const internalDataSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA),objectLinkSymbol=Symbol.for(OBJECTLINK_KEY_UPDATER),initMethodSymbol=Symbol("initMethodSymbol"),assembleMethodSymbol=Symbol("assembleMethodSymbol");class CustomElement extends HTMLElement{constructor(){super(),this[internalDataSymbol]=new ProxyObserver({options:extend({},this.defaults,getOptionsFromAttributes.call(this))}),initOptionObserver.call(this),this[initMethodSymbol]()}static get observedAttributes(){return[ATTRIBUTE_OPTIONS]}get defaults(){return{shadowMode:"open",delegatesFocus:!0,templates:{main:void 0}}}static getTag(){throw new Error("the method getTag must be overwritten by the derived class.")}static getCSSStyleSheet(){}attachObserver(t){return this[internalDataSymbol].attachObserver(t),this}detachObserver(t){return this[internalDataSymbol].detachObserver(t),this}containsObserver(t){return this[internalDataSymbol].containsObserver(t)}getOption(t,e){let o;try{o=new Pathfinder(this[internalDataSymbol].getRealSubject().options).getVia(t)}catch(t){}return void 0===o?e:o}setOption(t,e){return new Pathfinder(this[internalDataSymbol].getSubject().options).setVia(t,e),this}setOptions(t){isString(t)&&(t=parseOptionsJSON(t));var e=this;return extend(e[internalDataSymbol].getSubject().options,e.defaults,t),e}[initMethodSymbol](){return this}[assembleMethodSymbol](){var t;let e;if(!1!==this.getOption("shadowMode",!1)){try{initShadowRoot.call(this),e=this.shadowRoot.childNodes}catch(t){}try{initCSSStylesheet.call(this)}catch(t){}}e instanceof NodeList||(initHtmlContent.call(this),e=this.childNodes);const o=new Set;addToObjectLink(this,objectLinkSymbol,o);for([,t]of Object.entries(e))if(t instanceof HTMLElement&&!(t instanceof HTMLTemplateElement)){const i=new Updater(t,clone(this[internalDataSymbol].getRealSubject().options));o.add(i),i.run().then(()=>{i.enableEventProcessing()})}return this}connectedCallback(){hasObjectLink(this,objectLinkSymbol)||this[assembleMethodSymbol]()}disconnectedCallback(){}adoptedCallback(){}attributeChangedCallback(t,e,o){t===ATTRIBUTE_OPTIONS&&this.setOptions(o)}hasNode(t){var e=this;return!!containChildNode.call(e,validateInstance(t,Node))||e.shadowRoot instanceof ShadowRoot&&containChildNode.call(e.shadowRoot,t)}}function containChildNode(t){var e;if(this.contains(t))return!0;for([,e]of Object.entries(this.childNodes)){if(e.contains(t))return!0;containChildNode.call(e,t)}return!1}function initOptionObserver(){const i=this;i.attachObserver(new Observer(function(){if(hasObjectLink(i,Symbol.for(OBJECTLINK_KEY_UPDATER)))for(const e of getLinkedObjects(i,Symbol.for(OBJECTLINK_KEY_UPDATER)))for(const o of e){var t=clone(i[internalDataSymbol].getRealSubject().options);Object.assign(o.getSubject(),t)}}))}function getOptionsFromAttributes(){if(this.hasAttribute(ATTRIBUTE_OPTIONS))try{return parseOptionsJSON(this.getAttribute(ATTRIBUTE_OPTIONS))}catch(t){throw new Error("the options attribute "+ATTRIBUTE_OPTIONS+" does not contain a valid json definition (actual: "+this.getAttribute(ATTRIBUTE_OPTIONS)+").")}return{}}function parseOptionsJSON(e){if(isString(e)){try{e=parseDataURL(e).content}catch(t){}try{var t=JSON.parse(e);return validateObject(t),t}catch(t){throw new Error("the options does not contain a valid json definition (actual: "+e+").")}}return{}}function initHtmlContent(){try{let t=findDocumentTemplate(this.constructor.getTag());this.appendChild(t.createDocumentFragment())}catch(t){var e=this.getOption("templates.main","");isString(e)&&0<e.length&&(this.innerHTML=e)}return this}function initCSSStylesheet(){var t=this;if(!(this.shadowRoot instanceof ShadowRoot))return t;var e=this.constructor.getCSSStyleSheet();if(e instanceof CSSStyleSheet)this.shadowRoot.adoptedStyleSheets=[e];else if(isArray(e))this.shadowRoot.adoptedStyleSheets=e;else if(isString(e)){const o=t.shadowRoot.createElement("<style>");o.innerText=e,this.shadowRoot.adoptedStyleSheets=e}return t}function initShadowRoot(){let t,e;try{t=findDocumentTemplate(this.constructor.getTag())}catch(t){if(e=this.getOption("templates.main",""),!isString(e)||void 0===e||""===e)throw new Error("html is not set.")}return this.attachShadow({mode:this.getOption("shadowMode","open"),delegatesFocus:this.getOption("delegatesFocus",!0)}),t instanceof Template?this.shadowRoot.appendChild(t.createDocumentFragment()):this.shadowRoot.innerHTML=e,this}function registerCustomElement(t){validateFunction(t),getGlobalObject("customElements").define(t.getTag(),t)}assignToNamespace("Monster.DOM",CustomElement,registerCustomElement);export{Monster,registerCustomElement,CustomElement,initMethodSymbol,assembleMethodSymbol};
\ No newline at end of file
+'use strict';import{PROPERTY_KEY_INTERNALDATA}from"../constants.js";import{extend}from"../data/extend.js";import{Pathfinder}from"../data/pathfinder.js";import{assignToNamespace,Monster}from"../namespace.js";import{parseDataURL}from"../types/dataurl.js";import{getGlobalObject}from"../types/global.js";import{isArray,isString}from"../types/is.js";import{Observer}from"../types/observer.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateFunction,validateInstance,validateObject}from"../types/validate.js";import{clone}from"../util/clone.js";import{addToObjectLink,getLinkedObjects,hasObjectLink}from"./attributes.js";import{ATTRIBUTE_OPTIONS,OBJECTLINK_KEY_UPDATER}from"./constants.js";import{findDocumentTemplate,Template}from"./template.js";import{Updater}from"./updater.js";const internalDataSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA);const objectLinkSymbol=Symbol.for(OBJECTLINK_KEY_UPDATER);const initMethodSymbol=Symbol("initMethodSymbol");const assembleMethodSymbol=Symbol("assembleMethodSymbol");class CustomElement extends HTMLElement{constructor(){super();this[internalDataSymbol]=new ProxyObserver({"options":extend({},this.defaults,getOptionsFromAttributes.call(this))});initOptionObserver.call(this);this[initMethodSymbol]()}static get observedAttributes(){return[ATTRIBUTE_OPTIONS]}get defaults(){return{shadowMode:"open",delegatesFocus:true,templates:{main:undefined}}}static getTag(){throw new Error("the method getTag must be overwritten by the derived class.")}static getCSSStyleSheet(){return undefined}attachObserver(observer){this[internalDataSymbol].attachObserver(observer);return this}detachObserver(observer){this[internalDataSymbol].detachObserver(observer);return this}containsObserver(observer){return this[internalDataSymbol].containsObserver(observer)}getOption(path,defaultValue){let value;try{value=new Pathfinder(this[internalDataSymbol].getRealSubject()["options"]).getVia(path)}catch(e){}if(value===undefined)return defaultValue;return value}setOption(path,value){new Pathfinder(this[internalDataSymbol].getSubject()["options"]).setVia(path,value);return this}setOptions(options){if(isString(options)){options=parseOptionsJSON(options)}const self=this;extend(self[internalDataSymbol].getSubject()["options"],self.defaults,options);return self}[initMethodSymbol](){return this}[assembleMethodSymbol](){const self=this;let elements;if(this.getOption("shadowMode",false)!==false){try{initShadowRoot.call(this);elements=this.shadowRoot.childNodes}catch(e){}try{initCSSStylesheet.call(this)}catch(e){}}if(!(elements instanceof NodeList)){initHtmlContent.call(this);elements=this.childNodes}const updater=new Set;addToObjectLink(this,objectLinkSymbol,updater);for(const[,element]of Object.entries(elements)){if(!(element instanceof HTMLElement))continue;if(element instanceof HTMLTemplateElement)continue;const u=new Updater(element,clone(self[internalDataSymbol].getRealSubject()["options"]));updater.add(u);u.run().then(()=>{u.enableEventProcessing()})}return this}connectedCallback(){let self=this;if(!hasObjectLink(self,objectLinkSymbol)){self[assembleMethodSymbol]()}}disconnectedCallback(){}adoptedCallback(){}attributeChangedCallback(attrName,oldVal,newVal){const self=this;if(attrName===ATTRIBUTE_OPTIONS){self.setOptions(newVal)}}hasNode(node){const self=this;if(containChildNode.call(self,validateInstance(node,Node))){return true}if(!(self.shadowRoot instanceof ShadowRoot)){return false}return containChildNode.call(self.shadowRoot,node)}}function containChildNode(node){const self=this;if(self.contains(node)){return true}for(const[,e]of Object.entries(self.childNodes)){if(e.contains(node)){return true}containChildNode.call(e,node)}return false}function initOptionObserver(){const self=this;self.attachObserver(new Observer(function(){if(!hasObjectLink(self,Symbol.for(OBJECTLINK_KEY_UPDATER))){return}const updaters=getLinkedObjects(self,Symbol.for(OBJECTLINK_KEY_UPDATER));for(const list of updaters){for(const updater of list){let d=clone(self[internalDataSymbol].getRealSubject()["options"]);Object.assign(updater.getSubject(),d)}}}))}function getOptionsFromAttributes(){if(this.hasAttribute(ATTRIBUTE_OPTIONS)){try{return parseOptionsJSON(this.getAttribute(ATTRIBUTE_OPTIONS))}catch(e){throw new Error("the options attribute "+ATTRIBUTE_OPTIONS+" does not contain a valid json definition (actual: "+this.getAttribute(ATTRIBUTE_OPTIONS)+").")}}return{}}function parseOptionsJSON(data){if(isString(data)){try{let dataUrl=parseDataURL(data);data=dataUrl.content}catch(e){}try{let obj=JSON.parse(data);validateObject(obj);return obj}catch(e){throw new Error("the options does not contain a valid json definition (actual: "+data+").")}}return{}}function initHtmlContent(){try{let template=findDocumentTemplate(this.constructor.getTag());this.appendChild(template.createDocumentFragment())}catch(e){let html=this.getOption("templates.main","");if(isString(html)&&html.length>0){this.innerHTML=html}}return this}function initCSSStylesheet(){const self=this;if(!(this.shadowRoot instanceof ShadowRoot)){return self}const styleSheet=this.constructor.getCSSStyleSheet();if(styleSheet instanceof CSSStyleSheet){this.shadowRoot.adoptedStyleSheets=[styleSheet]}else if(isArray(styleSheet)){this.shadowRoot.adoptedStyleSheets=styleSheet}else if(isString(styleSheet)){const style=self.shadowRoot.createElement("<style>");style.innerText=styleSheet;this.shadowRoot.adoptedStyleSheets=styleSheet}return self}function initShadowRoot(){let template,html;try{template=findDocumentTemplate(this.constructor.getTag())}catch(e){html=this.getOption("templates.main","");if(!isString(html)||html===undefined||html===""){throw new Error("html is not set.")}}this.attachShadow({mode:this.getOption("shadowMode","open"),delegatesFocus:this.getOption("delegatesFocus",true)});if(template instanceof Template){this.shadowRoot.appendChild(template.createDocumentFragment());return this}this.shadowRoot.innerHTML=html;return this}function registerCustomElement(element){validateFunction(element);getGlobalObject("customElements").define(element.getTag(),element)}assignToNamespace("Monster.DOM",CustomElement,registerCustomElement);export{Monster,registerCustomElement,CustomElement,initMethodSymbol,assembleMethodSymbol};
diff --git a/packages/monster/dist/modules/dom/events.js b/packages/monster/dist/modules/dom/events.js
index 501d8c4544c9b188f2d79890d4966465f144f4bc..5a7f746743bf1d236fecf40df5d2170eca1b438d 100644
--- a/packages/monster/dist/modules/dom/events.js
+++ b/packages/monster/dist/modules/dom/events.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{validateInstance,validateString}from"../types/validate.js";import{findClosestByAttribute}from"./attributes.js";import{getDocument}from"./util.js";function fireEvent(e,t){var n;getDocument();if(e instanceof HTMLElement)"click"!==t?(n=new Event(validateString(t),{bubbles:!0,cancelable:!0}),e.dispatchEvent(n)):e.click();else{if(!(e instanceof HTMLCollection||e instanceof NodeList))throw new TypeError("value is not an instance of HTMLElement or HTMLCollection");for(var o of e)fireEvent(o,t)}}function findTargetElementFromEvent(e,t,n){if(validateInstance(e,Event),"function"!=typeof e.composedPath)throw new Error("unsupported event");e=e.composedPath()?.[0];if(e instanceof HTMLElement)return findClosestByAttribute(e,t,n)}assignToNamespace("Monster.DOM",findTargetElementFromEvent,fireEvent);export{Monster,findTargetElementFromEvent,fireEvent};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isArray}from"../types/is.js";import{validateInstance,validateString}from"../types/validate.js";import{getDocument}from"./util.js";function fireEvent(element,type){const document=getDocument();if(element instanceof HTMLElement){if(type==="click"){element.click();return}let event=new Event(validateString(type),{bubbles:true,cancelable:true});element.dispatchEvent(event)}else if(element instanceof HTMLCollection||element instanceof NodeList){for(let e of element){fireEvent(e,type)}}else{throw new TypeError("value is not an instance of HTMLElement or HTMLCollection")}}function findTargetElementFromEvent(event,attributeName,attributeValue){validateInstance(event,Event);if(typeof event.composedPath!=="function"){throw new Error("unsupported event")}const path=event.composedPath();const element=path?.[0];if(isArray(path)){for(let i=0;i<path.length;i++){const o=path[i];if(o instanceof HTMLElement&&o.hasAttribute(attributeName)&&(attributeValue===undefined||o.getAttribute(attributeName)===attributeValue)){return o}}}return undefined}assignToNamespace("Monster.DOM",findTargetElementFromEvent,fireEvent);export{Monster,findTargetElementFromEvent,fireEvent};
diff --git a/packages/monster/dist/modules/dom/locale.js b/packages/monster/dist/modules/dom/locale.js
index 1dcb4d50472f2f6f9246fa6534a70ec0601f028b..d2d21106de5d2f91f44e1d7283cc7fad5d489c20 100644
--- a/packages/monster/dist/modules/dom/locale.js
+++ b/packages/monster/dist/modules/dom/locale.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{parseLocale}from"../i18n/locale.js";import{assignToNamespace,Monster}from"../namespace.js";import{getDocument}from"./util.js";const DEFAULT_LANGUAGE="en";function getLocaleOfDocument(){const e=getDocument();let t=e.querySelector("html");if(t instanceof HTMLElement&&t.hasAttribute("lang")){var o=t.getAttribute("lang");if(o)return new parseLocale(o)}return parseLocale(DEFAULT_LANGUAGE)}assignToNamespace("Monster.DOM",getLocaleOfDocument);export{Monster,getLocaleOfDocument};
\ No newline at end of file
+'use strict';import{parseLocale}from"../i18n/locale.js";import{assignToNamespace,Monster}from"../namespace.js";import{getDocument}from"./util.js";const DEFAULT_LANGUAGE="en";function getLocaleOfDocument(){const document=getDocument();let html=document.querySelector("html");if(html instanceof HTMLElement&&html.hasAttribute("lang")){let locale=html.getAttribute("lang");if(locale){return new parseLocale(locale)}}return parseLocale(DEFAULT_LANGUAGE)}assignToNamespace("Monster.DOM",getLocaleOfDocument);export{Monster,getLocaleOfDocument};
diff --git a/packages/monster/dist/modules/dom/namespace.js b/packages/monster/dist/modules/dom/namespace.js
index 5735336cf27937310f2c0c1678de648748491941..d1d74bbe4771a07ee984141e7bd690c6ceb31503 100644
--- a/packages/monster/dist/modules/dom/namespace.js
+++ b/packages/monster/dist/modules/dom/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.DOM";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.DOM";
diff --git a/packages/monster/dist/modules/dom/template.js b/packages/monster/dist/modules/dom/template.js
index 1223eb0eab10b68d780449eeaabd487df648809a..c2766e8b3a85628c720369b1cd7681b8ed15a785 100644
--- a/packages/monster/dist/modules/dom/template.js
+++ b/packages/monster/dist/modules/dom/template.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalFunction,getGlobalObject}from"../types/global.js";import{validateInstance,validateString}from"../types/validate.js";import{getDocumentTheme}from"./theme.js";class Template extends Base{constructor(e){super();var t=getGlobalFunction("HTMLTemplateElement");validateInstance(e,t),this.template=e}getTemplateElement(){return this.template}createDocumentFragment(){return this.template.content.cloneNode(!0)}}function findDocumentTemplate(e,t){validateString(e),t instanceof Document||t instanceof DocumentFragment||(t instanceof Node&&((t=t.getRootNode())instanceof Document||t instanceof DocumentFragment||(t=t.ownerDocument)),t instanceof Document||t instanceof DocumentFragment||(t=getGlobalObject("document")));var n=getGlobalFunction("HTMLTemplateElement");let o=getDocumentTheme();var a=e+"-"+o.getName();let m=t.getElementById(a);if(m instanceof n)return new Template(m);if(m=t.getElementById(e),m instanceof n)return new Template(m);if(t!==getGlobalObject("document"))return findDocumentTemplate(e);throw new Error("template "+e+" not found.")}assignToNamespace("Monster.DOM",Template,findDocumentTemplate);export{Monster,Template,findDocumentTemplate};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalFunction,getGlobalObject}from"../types/global.js";import{validateInstance,validateString}from"../types/validate.js";import{getDocumentTheme}from"./theme.js";class Template extends Base{constructor(template){super();const HTMLTemplateElement=getGlobalFunction("HTMLTemplateElement");validateInstance(template,HTMLTemplateElement);this.template=template}getTemplateElement(){return this.template}createDocumentFragment(){return this.template.content.cloneNode(true)}}function findDocumentTemplate(id,currentNode){validateString(id);if(!(currentNode instanceof Document||currentNode instanceof DocumentFragment)){if(currentNode instanceof Node){currentNode=currentNode.getRootNode();if(!(currentNode instanceof Document||currentNode instanceof DocumentFragment)){currentNode=currentNode.ownerDocument}}if(!(currentNode instanceof Document||currentNode instanceof DocumentFragment)){currentNode=getGlobalObject("document")}}const HTMLTemplateElement=getGlobalFunction("HTMLTemplateElement");let theme=getDocumentTheme();let themedID=id+"-"+theme.getName();let template=currentNode.getElementById(themedID);if(template instanceof HTMLTemplateElement){return new Template(template)}template=currentNode.getElementById(id);if(template instanceof HTMLTemplateElement){return new Template(template)}if(currentNode!==getGlobalObject("document")){return findDocumentTemplate(id)}throw new Error("template "+id+" not found.")}assignToNamespace("Monster.DOM",Template,findDocumentTemplate);export{Monster,Template,findDocumentTemplate};
diff --git a/packages/monster/dist/modules/dom/theme.js b/packages/monster/dist/modules/dom/theme.js
index e8adb9fd9461d0d11ac92f55724c5df130f347d3..9fa7b18efd3a730eb0b3c3417a7fe27bf516f39c 100644
--- a/packages/monster/dist/modules/dom/theme.js
+++ b/packages/monster/dist/modules/dom/theme.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalObject}from"../types/global.js";import{validateString}from"../types/validate.js";import{ATTRIBUTE_THEME_NAME,DEFAULT_THEME}from"./constants.js";class Theme extends Base{constructor(e){super(),validateString(e),this.name=e}getName(){return this.name}}function getDocumentTheme(){let e=getGlobalObject("document"),t=DEFAULT_THEME,s=e.querySelector("html");var m;return s instanceof HTMLElement&&((m=s.getAttribute(ATTRIBUTE_THEME_NAME))&&(t=m)),new Theme(t)}assignToNamespace("Monster.DOM",Theme,getDocumentTheme);export{Monster,Theme,getDocumentTheme};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{getGlobalObject}from"../types/global.js";import{validateString}from"../types/validate.js";import{ATTRIBUTE_THEME_NAME,DEFAULT_THEME}from"./constants.js";class Theme extends Base{constructor(name){super();validateString(name);this.name=name}getName(){return this.name}}function getDocumentTheme(){let document=getGlobalObject("document");let name=DEFAULT_THEME;let element=document.querySelector("html");if(element instanceof HTMLElement){let theme=element.getAttribute(ATTRIBUTE_THEME_NAME);if(theme){name=theme}}return new Theme(name)}assignToNamespace("Monster.DOM",Theme,getDocumentTheme);export{Monster,Theme,getDocumentTheme};
diff --git a/packages/monster/dist/modules/dom/updater.js b/packages/monster/dist/modules/dom/updater.js
index cc1aecd80ee55a4af15cf355c28cfb1e697d72e3..9c9275a2a68e07d2e6f1893bf39b18e03e6582da 100644
--- a/packages/monster/dist/modules/dom/updater.js
+++ b/packages/monster/dist/modules/dom/updater.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{Diff}from"../data/diff.js";import{Pathfinder}from"../data/pathfinder.js";import{Pipe}from"../data/pipe.js";import{ATTRIBUTE_UPDATER_ATTRIBUTES,ATTRIBUTE_UPDATER_BIND,ATTRIBUTE_UPDATER_INSERT,ATTRIBUTE_UPDATER_INSERT_REFERENCE,ATTRIBUTE_UPDATER_REMOVE,ATTRIBUTE_UPDATER_REPLACE}from"../dom/constants.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isArray,isInstance,isIterable}from"../types/is.js";import{Observer}from"../types/observer.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateArray,validateInstance}from"../types/validate.js";import{clone}from"../util/clone.js";import{findDocumentTemplate}from"./template.js";import{getDocument}from"./util.js";class Updater extends Base{constructor(e,t){super(),this.element=validateInstance(e,HTMLElement);t=void 0===t?{}:t;isInstance(t,ProxyObserver)||(t=new ProxyObserver(t)),this.last={},this.callbacks=new Map,this.callbacks.set("checkstate",getCheckStateCallback.call(this)),this.subject=t.attachObserver(new Observer(()=>{var e,t=this.subject.getRealSubject(),r=Diff(this.last,t);this.last=clone(t);for([,e]of Object.entries(r))removeElement.call(this,e),insertElement.call(this,e),updateContent.call(this,e),updateAttributes.call(this,e)})),this.eventTypes=["keyup","click","change","drop","touchend","input"]}setEventTypes(e){return this.eventTypes=validateArray(e),this}enableEventProcessing(){this.disableEventProcessing();for(const e of this.eventTypes)this.element.addEventListener(e,getControlEventHandler.call(this));return this}disableEventProcessing(){for(const e of this.eventTypes)this.element.removeEventListener(e,getControlEventHandler.call(this));return this}run(){return this.last={__init__:!0},this.subject.notifyObservers()}getSubject(){return this.subject.getSubject()}setCallback(e,t){return this.callbacks.set(e,t),this}}function getCheckStateCallback(){return function(e){if(this instanceof HTMLInputElement){if(-1!==["radio","checkbox"].indexOf(this.type))return this.value+""==e+""?"true":void 0}else if(this instanceof HTMLOptionElement&&isArray(e)&&-1!==e.indexOf(this.value))return"true"}}const symbol=Symbol("EventHandler");function getControlEventHandler(){const i=this;if(i[symbol])return i[symbol];const a=new Pathfinder(this.subject.getSubject());return i[symbol]=r=>{const s=r.target;if(s.hasAttribute(ATTRIBUTE_UPDATER_BIND)){let e=s.getAttribute(ATTRIBUTE_UPDATER_BIND);if(0!==e.indexOf("path:"))throw new Error("the bind argument must start as a value with a path.");e=e.substr(5);let t;if(s instanceof HTMLInputElement)t="checkbox"!==s.type||s.checked?s.value:void 0;else if(s instanceof HTMLTextAreaElement)t=s.value;else if(s instanceof HTMLSelectElement)switch(s.type){case"select-one":t=s.value;break;case"select-multiple":t=s.value;let e=s?.selectedOptions;void 0===e&&(e=s.querySelectorAll(":scope option:checked")),t=Array.from(e).map(({value:e})=>e)}else{if(!(s?.constructor?.prototype&&Object.getOwnPropertyDescriptor(s.constructor.prototype,"value")?.get||s.hasOwnProperty("value")))throw new Error("unsupported object");t=s?.value}r=clone(i.subject.getRealSubject());const n=new Pathfinder(r);n.setVia(e,t),0<new Diff(r,i.subject.getRealSubject()).length&&a.setVia(e,t)}},i[symbol]}function removeElement(e){for(var[,t]of this.element.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_REMOVE+"]").entries())t.parentNode.removeChild(t)}function insertElement(t){var a=this.subject.getRealSubject();getDocument();let o=new WeakSet,r=0;for(;;){let i=!1;r++;let e=clone(t?.path);if(!isArray(e))return this;for(;0<e.length;){var l,s=e.join(".");for([,l]of this.element.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_INSERT+'*="path:'+s+'"]').entries())if(!o.has(l)){o.add(l),i=!0;const m=l.getAttribute(ATTRIBUTE_UPDATER_INSERT);let e=m.trim();var c=e.indexOf(" "),T=e.substr(0,c).trim(),u=T+"-";let t=e.substr(c).trim();if(0<t.indexOf("|"))throw new Error("pipes are not allowed when cloning a node.");let r=new Pipe(t);this.callbacks.forEach((e,t)=>{r.setCallback(t,e)});var E,p,c=r.run(a),f=t.split(":").pop();let s;if(l.hasChildNodes()&&(s=l.lastChild),!isIterable(c))throw new Error("the value is not iterable");let n=new Set;for([E,p]of Object.entries(c)){var h=u+E,d=f+"."+E;n.add(h);var A=l.querySelector("["+ATTRIBUTE_UPDATER_INSERT_REFERENCE+'="'+h+'"]');A instanceof HTMLElement?s=A:appendNewDocumentFragment(l,T,h,d)}var b,c=l.querySelectorAll("["+ATTRIBUTE_UPDATER_INSERT_REFERENCE+'*="'+u+'"]');for([,b]of Object.entries(c))n.has(b.getAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE))||l.removeChild(b)}e.pop()}if(!1===i)break;if(200<r++)throw new Error("the maximum depth for the recursion is reached.")}}function appendNewDocumentFragment(e,t,r,s){let n=findDocumentTemplate(t,e);var i,a=n.createDocumentFragment();for([,i]of Object.entries(a.childNodes))i instanceof HTMLElement&&(applyRecursive(i,t,s),i.setAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE,r)),e.appendChild(i)}function applyRecursive(t,r,s){if(t instanceof HTMLElement){if(t.hasAttribute(ATTRIBUTE_UPDATER_REPLACE)){let e=t.getAttribute(ATTRIBUTE_UPDATER_REPLACE);t.setAttribute(ATTRIBUTE_UPDATER_REPLACE,e.replace("path:"+r,"path:"+s))}if(t.hasAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)){let e=t.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);t.setAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES,e.replace("path:"+r,"path:"+s))}for(var[,e]of Object.entries(t.childNodes))applyRecursive(e,r,s)}}function updateContent(e){var t=this.subject.getRealSubject(),e=clone(e?.path);runUpdateContent.call(this,this.element,e,t)}function runUpdateContent(t,r,s){if(isArray(r)){r=clone(r);let e=new WeakSet;for(;0<r.length;){var n,i=r.join(".");r.pop();for([,n]of t.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_REPLACE+'^="path:'+i+'"], ['+ATTRIBUTE_UPDATER_REPLACE+'^="static:"]').entries())if(!e.has(n)){e.add(n);const o=n.getAttribute(ATTRIBUTE_UPDATER_REPLACE);var a=o.trim();let r=new Pipe(a);this.callbacks.forEach((e,t)=>{r.setCallback(t,e)});a=r.run(s);if(a instanceof HTMLElement){for(;n.firstChild;)n.removeChild(n.firstChild);n.addNode(a)}else n.innerHTML=a}}}}function updateAttributes(e){var t=this.subject.getRealSubject(),e=clone(e?.path);runUpdateAttributes.call(this,this.element,e,t)}function runUpdateAttributes(t,r,s){if(isArray(r)){r=clone(r);let e=new WeakSet;for(;0<r.length;){var n=r.join(".");r.pop();for(const[,l]of t.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_ATTRIBUTES+'*="path:'+n+'"]').entries())if(!e.has(l)){e.add(l);const c=l.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);for(var[,i]of Object.entries(c.split(","))){i=i.trim();var a=i.indexOf(" "),o=i.substr(0,a).trim(),a=i.substr(a).trim();let r=new Pipe(a);this.callbacks.forEach((e,t)=>{r.setCallback(t,e,l)});a=r.run(s);void 0===a?l.removeAttribute(o):l.getAttribute(o)!==a&&l.setAttribute(o,a),handleInputControlAttributeUpdate.call(this,l,o,a)}}}}}function handleInputControlAttributeUpdate(e,t,r){if(e instanceof HTMLSelectElement)switch(e.type){case"select-multiple":for(var[s,n]of Object.entries(e.options))-1!==r.indexOf(n.value)?n.selected=!0:n.selected=!1;break;case"select-one":for(var[i,a]of Object.entries(e.options))if(a.value===r){e.selectedIndex=i;break}}else if(e instanceof HTMLInputElement)switch(e.type){case"radio":case"checkbox":e.checked="checked"===t&&void 0!==r;break;default:"value"===t&&(e.value=void 0===r?"":r)}else e instanceof HTMLTextAreaElement&&"value"===t&&(e.value=void 0===r?"":r)}assignToNamespace("Monster.DOM",Updater);export{Monster,Updater};
\ No newline at end of file
+'use strict';import{Diff}from"../data/diff.js";import{Pathfinder}from"../data/pathfinder.js";import{Pipe}from"../data/pipe.js";import{ATTRIBUTE_UPDATER_ATTRIBUTES,ATTRIBUTE_UPDATER_BIND,ATTRIBUTE_UPDATER_INSERT,ATTRIBUTE_UPDATER_INSERT_REFERENCE,ATTRIBUTE_UPDATER_REMOVE,ATTRIBUTE_UPDATER_REPLACE}from"../dom/constants.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isArray,isInstance,isIterable}from"../types/is.js";import{Observer}from"../types/observer.js";import{ProxyObserver}from"../types/proxyobserver.js";import{validateArray,validateInstance}from"../types/validate.js";import{clone}from"../util/clone.js";import{findDocumentTemplate}from"./template.js";import{getDocument}from"./util.js";class Updater extends Base{constructor(element,subject){super();this.element=validateInstance(element,HTMLElement);if(subject===undefined)subject={};let a=subject;if(!isInstance(subject,ProxyObserver)){subject=new ProxyObserver(subject)}this.last={};this.callbacks=new Map;this.callbacks.set("checkstate",getCheckStateCallback.call(this));this.subject=subject.attachObserver(new Observer(()=>{const s=this.subject.getRealSubject();const diff=Diff(this.last,s);this.last=clone(s);for(const[,change]of Object.entries(diff)){removeElement.call(this,change);insertElement.call(this,change);updateContent.call(this,change);updateAttributes.call(this,change)}}));this.eventTypes=["keyup","click","change","drop","touchend","input"]}setEventTypes(types){this.eventTypes=validateArray(types);return this}enableEventProcessing(){this.disableEventProcessing();for(const type of this.eventTypes){this.element.addEventListener(type,getControlEventHandler.call(this))}return this}disableEventProcessing(){for(const type of this.eventTypes){this.element.removeEventListener(type,getControlEventHandler.call(this))}return this}run(){this.last={"__init__":true};return this.subject.notifyObservers()}getSubject(){return this.subject.getSubject()}setCallback(name,callback){this.callbacks.set(name,callback);return this}}function getCheckStateCallback(){const self=this;return function(current){if(this instanceof HTMLInputElement){if(["radio","checkbox"].indexOf(this.type)!==-1){return this.value+""===current+""?"true":undefined}}else if(this instanceof HTMLOptionElement){if(isArray(current)&&current.indexOf(this.value)!==-1){return"true"}return undefined}}}const symbol=Symbol("EventHandler");function getControlEventHandler(){const self=this;if(self[symbol]){return self[symbol]}const pathfinder=new Pathfinder(this.subject.getSubject());self[symbol]=event=>{const element=event.target;if(!element.hasAttribute(ATTRIBUTE_UPDATER_BIND)){return}let path=element.getAttribute(ATTRIBUTE_UPDATER_BIND);if(path.indexOf("path:")!==0){throw new Error("the bind argument must start as a value with a path.")}path=path.substr(5);let value;if(element instanceof HTMLInputElement){switch(element.type){case"checkbox":value=element.checked?element.value:undefined;break;default:value=element.value;break;}}else if(element instanceof HTMLTextAreaElement){value=element.value}else if(element instanceof HTMLSelectElement){switch(element.type){case"select-one":value=element.value;break;case"select-multiple":value=element.value;let options=element?.selectedOptions;if(options===undefined)options=element.querySelectorAll(":scope option:checked");value=Array.from(options).map(({value})=>value);break;}}else if(element?.constructor?.prototype&&!!Object.getOwnPropertyDescriptor(element.constructor.prototype,"value")?.["get"]||element.hasOwnProperty("value")){value=element?.["value"]}else{throw new Error("unsupported object")}const copy=clone(self.subject.getRealSubject());const pf=new Pathfinder(copy);pf.setVia(path,value);const diff=new Diff(copy,self.subject.getRealSubject());if(diff.length>0){pathfinder.setVia(path,value)}};return self[symbol]}function removeElement(change){for(const[,element]of this.element.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_REMOVE+"]").entries()){element.parentNode.removeChild(element)}}function insertElement(change){const self=this;const subject=self.subject.getRealSubject();const document=getDocument();let mem=new WeakSet;let wd=0;while(true){let found=false;wd++;let p=clone(change?.["path"]);if(!isArray(p))return this;while(p.length>0){const current=p.join(".");const list=this.element.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_INSERT+"*=\"path:"+current+"\"]").entries();for(const[,containerElement]of list){if(mem.has(containerElement))continue;mem.add(containerElement);found=true;const attributes=containerElement.getAttribute(ATTRIBUTE_UPDATER_INSERT);let def=attributes.trim();let i=def.indexOf(" ");let key=def.substr(0,i).trim();let refPrefix=key+"-";let cmd=def.substr(i).trim();if(cmd.indexOf("|")>0){throw new Error("pipes are not allowed when cloning a node.")}let pipe=new Pipe(cmd);this.callbacks.forEach((f,n)=>{pipe.setCallback(n,f)});let value=pipe.run(subject);let dataPath=cmd.split(":").pop();let insertPoint;if(containerElement.hasChildNodes()){insertPoint=containerElement.lastChild}if(!isIterable(value)){throw new Error("the value is not iterable")}let available=new Set;for(const[_i,obj]of Object.entries(value)){let ref=refPrefix+_i;let currentPath=dataPath+"."+_i;available.add(ref);let refElement=containerElement.querySelector("["+ATTRIBUTE_UPDATER_INSERT_REFERENCE+"=\""+ref+"\"]");if(refElement instanceof HTMLElement){insertPoint=refElement;continue}appendNewDocumentFragment(containerElement,key,ref,currentPath)}let nodes=containerElement.querySelectorAll("["+ATTRIBUTE_UPDATER_INSERT_REFERENCE+"*=\""+refPrefix+"\"]");for(const[,node]of Object.entries(nodes)){if(!available.has(node.getAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE))){containerElement.removeChild(node)}}}p.pop()}if(found===false)break;if(wd++>200){throw new Error("the maximum depth for the recursion is reached.")}}}function appendNewDocumentFragment(container,key,ref,path){let template=findDocumentTemplate(key,container);let nodes=template.createDocumentFragment();for(const[,node]of Object.entries(nodes.childNodes)){if(node instanceof HTMLElement){applyRecursive(node,key,path);node.setAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE,ref)}container.appendChild(node)}}function applyRecursive(node,key,path){if(node instanceof HTMLElement){if(node.hasAttribute(ATTRIBUTE_UPDATER_REPLACE)){let value=node.getAttribute(ATTRIBUTE_UPDATER_REPLACE);node.setAttribute(ATTRIBUTE_UPDATER_REPLACE,value.replace("path:"+key,"path:"+path))}if(node.hasAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)){let value=node.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);node.setAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES,value.replace("path:"+key,"path:"+path))}for(const[,child]of Object.entries(node.childNodes)){applyRecursive(child,key,path)}}}function updateContent(change){const self=this;const subject=self.subject.getRealSubject();let p=clone(change?.["path"]);runUpdateContent.call(this,this.element,p,subject)}function runUpdateContent(container,parts,subject){if(!isArray(parts))return;parts=clone(parts);let mem=new WeakSet;while(parts.length>0){const current=parts.join(".");parts.pop();for(const[,element]of container.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_REPLACE+"^=\"path:"+current+"\"], ["+ATTRIBUTE_UPDATER_REPLACE+"^=\"static:\"]").entries()){if(mem.has(element))continue;mem.add(element);const attributes=element.getAttribute(ATTRIBUTE_UPDATER_REPLACE);let cmd=attributes.trim();let pipe=new Pipe(cmd);this.callbacks.forEach((f,n)=>{pipe.setCallback(n,f)});let value=pipe.run(subject);if(value instanceof HTMLElement){while(element.firstChild){element.removeChild(element.firstChild)}element.addNode(value)}else{element.innerHTML=value}}}}function updateAttributes(change){const subject=this.subject.getRealSubject();let p=clone(change?.["path"]);runUpdateAttributes.call(this,this.element,p,subject)}function runUpdateAttributes(container,parts,subject){const self=this;if(!isArray(parts))return;parts=clone(parts);let mem=new WeakSet;while(parts.length>0){const current=parts.join(".");parts.pop();for(const[,element]of container.querySelectorAll(":scope ["+ATTRIBUTE_UPDATER_ATTRIBUTES+"*=\"path:"+current+"\"]").entries()){if(mem.has(element))continue;mem.add(element);const attributes=element.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);for(let[,def]of Object.entries(attributes.split(","))){def=def.trim();let i=def.indexOf(" ");let name=def.substr(0,i).trim();let cmd=def.substr(i).trim();let pipe=new Pipe(cmd);self.callbacks.forEach((f,n)=>{pipe.setCallback(n,f,element)});let value=pipe.run(subject);if(value===undefined){element.removeAttribute(name)}else if(element.getAttribute(name)!==value){element.setAttribute(name,value)}handleInputControlAttributeUpdate.call(this,element,name,value)}}}}function handleInputControlAttributeUpdate(element,name,value){const self=this;if(element instanceof HTMLSelectElement){switch(element.type){case"select-multiple":for(const[index,opt]of Object.entries(element.options)){if(value.indexOf(opt.value)!==-1){opt.selected=true}else{opt.selected=false}}break;case"select-one":for(const[index,opt]of Object.entries(element.options)){if(opt.value===value){element.selectedIndex=index;break}}break;}}else if(element instanceof HTMLInputElement){switch(element.type){case"radio":if(name==="checked"&&value!==undefined){element.checked=true}else{element.checked=false}break;case"checkbox":if(name==="checked"&&value!==undefined){element.checked=true}else{element.checked=false}break;case"text":default:if(name==="value"){element.value=value===undefined?"":value}break;}}else if(element instanceof HTMLTextAreaElement){if(name==="value"){element.value=value===undefined?"":value}}}assignToNamespace("Monster.DOM",Updater);export{Monster,Updater};
diff --git a/packages/monster/dist/modules/dom/util.js b/packages/monster/dist/modules/dom/util.js
index 8d58f49066488bbd33decfa99ed52ae38cba770c..a7dcb43ded3582b6a2ce42f88f43b4beae20f44a 100644
--- a/packages/monster/dist/modules/dom/util.js
+++ b/packages/monster/dist/modules/dom/util.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";import{validateString}from"../types/validate.js";function getDocument(){var t=getGlobal()?.document;if("object"!=typeof t)throw new Error("not supported environment");return t}function getWindow(){var t=getGlobal()?.window;if("object"!=typeof t)throw new Error("not supported environment");return t}function getDocumentFragmentFromString(t){validateString(t);const e=getDocument(),n=e.createElement("template");return n.innerHTML=t,n.content}assignToNamespace("Monster.DOM",getWindow,getDocument,getDocumentFragmentFromString);export{Monster,getWindow,getDocument,getDocumentFragmentFromString};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";import{validateString}from"../types/validate.js";function getDocument(){let document=getGlobal()?.["document"];if(typeof document!=="object"){throw new Error("not supported environment")}return document}function getWindow(){let window=getGlobal()?.["window"];if(typeof window!=="object"){throw new Error("not supported environment")}return window}function getDocumentFragmentFromString(html){validateString(html);const document=getDocument();const template=document.createElement("template");template.innerHTML=html;return template.content}assignToNamespace("Monster.DOM",getWindow,getDocument,getDocumentFragmentFromString);export{Monster,getWindow,getDocument,getDocumentFragmentFromString};
diff --git a/packages/monster/dist/modules/i18n/locale.js b/packages/monster/dist/modules/i18n/locale.js
index 087be3c400691e137f0f1316295c2543e5532d33..118efa4509e2f158db6d034e151ea645beb308cb 100644
--- a/packages/monster/dist/modules/i18n/locale.js
+++ b/packages/monster/dist/modules/i18n/locale.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateString}from"../types/validate.js";import{clone}from"../util/clone.js";const propertiesSymbol=Symbol("properties"),localeStringSymbol=Symbol("localeString");class Locale extends Base{constructor(e,i,t,o,a,r){super(),this[propertiesSymbol]={language:void 0===e?void 0:validateString(e),script:void 0===t?void 0:validateString(t),region:void 0===i?void 0:validateString(i),variants:void 0===o?void 0:validateString(o),extlang:void 0===a?void 0:validateString(a),privateUse:void 0===r?void 0:validateString(r)};let n=[];if(void 0!==e&&n.push(e),void 0!==t&&n.push(t),void 0!==i&&n.push(i),void 0!==o&&n.push(o),void 0!==a&&n.push(a),void 0!==r&&n.push(r),0===n.length)throw new Error("unsupported locale");this[localeStringSymbol]=n.join("-")}get localeString(){return this[localeStringSymbol]}get language(){return this[propertiesSymbol].language}get region(){return this[propertiesSymbol].region}get script(){return this[propertiesSymbol].script}get variants(){return this[propertiesSymbol].variants}get extlang(){return this[propertiesSymbol].extlang}get privateUse(){return this[propertiesSymbol].privateValue}toString(){return""+this.localeString}getMap(){return clone(this[propertiesSymbol])}}function parseLocale(e){e=validateString(e).replace(/_/g,"-");let i,t,o,a,r,n,l=new RegExp("^(((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+))$"),s;if(null!==(s=l.exec(e))&&s.index===l.lastIndex&&l.lastIndex++,null==s)throw new Error("unsupported locale");return void 0!==s[6]&&(i=s[6],1<(a=i.split("-")).length&&(i=a[0],n=a[1])),void 0!==s[14]&&(t=s[14]),void 0!==s[12]&&(r=s[12]),void 0!==s[16]&&(o=s[16]),new Locale(i,t,r,o,n)}assignToNamespace("Monster.I18n",Locale,parseLocale);export{Monster,Locale,parseLocale};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateString}from"../types/validate.js";import{clone}from"../util/clone.js";const propertiesSymbol=Symbol("properties");const localeStringSymbol=Symbol("localeString");class Locale extends Base{constructor(language,region,script,variants,extlang,privateUse){super();this[propertiesSymbol]={language:language===undefined?undefined:validateString(language),script:script===undefined?undefined:validateString(script),region:region===undefined?undefined:validateString(region),variants:variants===undefined?undefined:validateString(variants),extlang:extlang===undefined?undefined:validateString(extlang),privateUse:privateUse===undefined?undefined:validateString(privateUse)};let s=[];if(language!==undefined)s.push(language);if(script!==undefined)s.push(script);if(region!==undefined)s.push(region);if(variants!==undefined)s.push(variants);if(extlang!==undefined)s.push(extlang);if(privateUse!==undefined)s.push(privateUse);if(s.length===0){throw new Error("unsupported locale")}this[localeStringSymbol]=s.join("-")}get localeString(){return this[localeStringSymbol]}get language(){return this[propertiesSymbol].language}get region(){return this[propertiesSymbol].region}get script(){return this[propertiesSymbol].script}get variants(){return this[propertiesSymbol].variants}get extlang(){return this[propertiesSymbol].extlang}get privateUse(){return this[propertiesSymbol].privateValue}toString(){return""+this.localeString}getMap(){return clone(this[propertiesSymbol])}}function parseLocale(locale){locale=validateString(locale).replace(/_/g,"-");let language,region,variants,parts,script,extlang,regexRegular="(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)",regexIrregular="(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)",regexGrandfathered="("+regexIrregular+"|"+regexRegular+")",regexPrivateUse="(x(-[A-Za-z0-9]{1,8})+)",regexSingleton="[0-9A-WY-Za-wy-z]",regexExtension="("+regexSingleton+"(-[A-Za-z0-9]{2,8})+)",regexVariant="([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})",regexRegion="([A-Za-z]{2}|[0-9]{3})",regexScript="([A-Za-z]{4})",regexExtlang="([A-Za-z]{3}(-[A-Za-z]{3}){0,2})",regexLanguage="(([A-Za-z]{2,3}(-"+regexExtlang+")?)|[A-Za-z]{4}|[A-Za-z]{5,8})",regexLangtag="("+regexLanguage+"(-"+regexScript+")?"+"(-"+regexRegion+")?"+"(-"+regexVariant+")*"+"(-"+regexExtension+")*"+"(-"+regexPrivateUse+")?"+")",regexLanguageTag="^("+regexGrandfathered+"|"+regexLangtag+"|"+regexPrivateUse+")$",regex=new RegExp(regexLanguageTag),match;if((match=regex.exec(locale))!==null){if(match.index===regex.lastIndex){regex.lastIndex++}}if(match===undefined||match===null){throw new Error("unsupported locale")}if(match[6]!==undefined){language=match[6];parts=language.split("-");if(parts.length>1){language=parts[0];extlang=parts[1]}}if(match[14]!==undefined){region=match[14]}if(match[12]!==undefined){script=match[12]}if(match[16]!==undefined){variants=match[16]}return new Locale(language,region,script,variants,extlang)}assignToNamespace("Monster.I18n",Locale,parseLocale);export{Monster,Locale,parseLocale};
diff --git a/packages/monster/dist/modules/i18n/namespace.js b/packages/monster/dist/modules/i18n/namespace.js
index 494029367b112074849750a3ffe921599a13ac1e..ee290d30a9b47f30a7918f437e42db034e503bd3 100644
--- a/packages/monster/dist/modules/i18n/namespace.js
+++ b/packages/monster/dist/modules/i18n/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.I18n";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.I18n";
diff --git a/packages/monster/dist/modules/i18n/provider.js b/packages/monster/dist/modules/i18n/provider.js
index d69da7a2713f704a004f2abff08e14b3ade28fa7..9ee9dff17feeaff82068776ac2506927cd2d04ab 100644
--- a/packages/monster/dist/modules/i18n/provider.js
+++ b/packages/monster/dist/modules/i18n/provider.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{BaseWithOptions}from"../types/basewithoptions.js";import{Locale}from"./locale.js";import{Translations}from"./translations.js";class Provider extends BaseWithOptions{getTranslations(e){return new Promise((s,o)=>{try{s(new Translations(e))}catch(s){o(s)}})}}assignToNamespace("Monster.I18n",Provider);export{Monster,Provider};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{BaseWithOptions}from"../types/basewithoptions.js";import{Locale}from"./locale.js";import{Translations}from"./translations.js";class Provider extends BaseWithOptions{getTranslations(locale){return new Promise((resolve,reject)=>{try{resolve(new Translations(locale))}catch(e){reject(e)}})}}assignToNamespace("Monster.I18n",Provider);export{Monster,Provider};
diff --git a/packages/monster/dist/modules/i18n/providers/fetch.js b/packages/monster/dist/modules/i18n/providers/fetch.js
index 041ece0785751ec134e0d49176136bfe58644b5d..353f4554b9f2ab3a6af97ac4d180a518ea24057e 100644
--- a/packages/monster/dist/modules/i18n/providers/fetch.js
+++ b/packages/monster/dist/modules/i18n/providers/fetch.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{PROPERTY_KEY_INTERNALDATA}from"../../constants.js";import{extend}from"../../data/extend.js";import{assignToNamespace,Monster}from"../../namespace.js";import{Formatter}from"../../text/formatter.js";import{getGlobalFunction}from"../../types/global.js";import{isInstance,isString}from"../../types/is.js";import{validateObject,validateString}from"../../types/validate.js";import{parseLocale}from"../locale.js";import{Provider}from"../provider.js";import{Translations}from"../translations.js";const optionsSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA);class Fetch extends Provider{constructor(t,e){super(e),isInstance(t,URL)&&(t=t.toString()),void 0===e&&(e={}),validateString(t),this.url=t,this[optionsSymbol]=extend({},super.defaults,this.defaults,validateObject(e))}get defaults(){return{fetch:{method:"GET",mode:"cors",cache:"no-cache",credentials:"omit",redirect:"follow",referrerPolicy:"no-referrer"}}}getTranslations(e){isString(e)&&(e=parseLocale(e));let t=new Formatter(e.getMap());return getGlobalFunction("fetch")(t.format(this.url),this.getOption("fetch",{})).then(t=>t.json()).then(t=>new Translations(e).assignTranslations(t))}}assignToNamespace("Monster.I18n.Providers",Fetch);export{Monster,Fetch};
\ No newline at end of file
+'use strict';import{PROPERTY_KEY_INTERNALDATA}from"../../constants.js";import{extend}from"../../data/extend.js";import{assignToNamespace,Monster}from"../../namespace.js";import{Formatter}from"../../text/formatter.js";import{getGlobalFunction}from"../../types/global.js";import{isInstance,isString}from"../../types/is.js";import{validateObject,validateString}from"../../types/validate.js";import{parseLocale}from"../locale.js";import{Provider}from"../provider.js";import{Translations}from"../translations.js";const optionsSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA);class Fetch extends Provider{constructor(url,options){super(options);if(isInstance(url,URL)){url=url.toString()}if(options===undefined){options={}}validateString(url);this.url=url;this[optionsSymbol]=extend({},super.defaults,this.defaults,validateObject(options))}get defaults(){return{fetch:{method:"GET",mode:"cors",cache:"no-cache",credentials:"omit",redirect:"follow",referrerPolicy:"no-referrer"}}}getTranslations(locale){if(isString(locale)){locale=parseLocale(locale)}let formatter=new Formatter(locale.getMap());return getGlobalFunction("fetch")(formatter.format(this.url),this.getOption("fetch",{})).then(response=>response.json()).then(data=>{return new Translations(locale).assignTranslations(data)})}}assignToNamespace("Monster.I18n.Providers",Fetch);export{Monster,Fetch};
diff --git a/packages/monster/dist/modules/i18n/providers/namespace.js b/packages/monster/dist/modules/i18n/providers/namespace.js
index ebd8a186f8d48c388cd078f2b68ac6eda7c74ece..eb5801f642f9a2db57278ab2502ce8fbfb881aac 100644
--- a/packages/monster/dist/modules/i18n/providers/namespace.js
+++ b/packages/monster/dist/modules/i18n/providers/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.I18n.Providers";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.I18n.Providers";
diff --git a/packages/monster/dist/modules/i18n/translations.js b/packages/monster/dist/modules/i18n/translations.js
index e443bfce899feb6fb2b9e1c32abb9e8510c48d41..2040b0b9b7cf48af8e272e67ee6ff0e82ae47822 100644
--- a/packages/monster/dist/modules/i18n/translations.js
+++ b/packages/monster/dist/modules/i18n/translations.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isObject,isString}from"../types/is.js";import{validateInstance,validateInteger,validateObject,validateString}from"../types/validate.js";import{Locale,parseLocale}from"./locale.js";class Translations extends Base{constructor(t){super(),isString(t)&&(t=parseLocale(t)),this.locale=validateInstance(t,Locale),this.storage=new Map}getText(t,e){if(!this.storage.has(t)){if(void 0===e)throw new Error("key "+t+" not found");return validateString(e)}var r=this.storage.get(t);return isObject(r)?this.getPluralRuleText(t,"other",e):this.storage.get(t)}getPluralRuleText(t,e,r){if(!this.storage.has(t))return validateString(r);let a=validateObject(this.storage.get(t)),s;if(isString(e))s=e.toLocaleString();else{if(0===(e=validateInteger(e))&&a.hasOwnProperty("zero"))return validateString(a.zero);s=new Intl.PluralRules(this.locale.toString()).select(validateInteger(e))}return a.hasOwnProperty(s)?validateString(a[s]):a.hasOwnProperty(DEFAULT_KEY)?validateString(a[DEFAULT_KEY]):validateString(r)}setText(t,e){if(isString(e)||isObject(e))return this.storage.set(validateString(t),e),this;throw new TypeError("value is not a string or object")}assignTranslations(t){validateObject(t);for(var[e,r]of Object.entries(t))this.setText(e,r);return this}}assignToNamespace("Monster.I18n",Translations);export{Monster,Translations};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isObject,isString}from"../types/is.js";import{validateInstance,validateInteger,validateObject,validateString}from"../types/validate.js";import{Locale,parseLocale}from"./locale.js";class Translations extends Base{constructor(locale){super();if(isString(locale)){locale=parseLocale(locale)}this.locale=validateInstance(locale,Locale);this.storage=new Map}getText(key,defaultText){if(!this.storage.has(key)){if(defaultText===undefined){throw new Error("key "+key+" not found")}return validateString(defaultText)}let r=this.storage.get(key);if(isObject(r)){return this.getPluralRuleText(key,"other",defaultText)}return this.storage.get(key)}getPluralRuleText(key,count,defaultText){if(!this.storage.has(key)){return validateString(defaultText)}let r=validateObject(this.storage.get(key));let keyword;if(isString(count)){keyword=count.toLocaleString()}else{count=validateInteger(count);if(count===0){if(r.hasOwnProperty("zero")){return validateString(r["zero"])}}keyword=new Intl.PluralRules(this.locale.toString()).select(validateInteger(count))}if(r.hasOwnProperty(keyword)){return validateString(r[keyword])}if(r.hasOwnProperty(DEFAULT_KEY)){return validateString(r[DEFAULT_KEY])}return validateString(defaultText)}setText(key,text){if(isString(text)||isObject(text)){this.storage.set(validateString(key),text);return this}throw new TypeError("value is not a string or object")}assignTranslations(translations){validateObject(translations);for(const[k,v]of Object.entries(translations)){this.setText(k,v)}return this}}assignToNamespace("Monster.I18n",Translations);export{Monster,Translations};
diff --git a/packages/monster/dist/modules/logging/handler.js b/packages/monster/dist/modules/logging/handler.js
index d9e7676ead4d14f62a9ca9faff17b63a9c7b86c6..4732d8c4d4ded2cd9d83966be18da9bacc8ea846 100644
--- a/packages/monster/dist/modules/logging/handler.js
+++ b/packages/monster/dist/modules/logging/handler.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInstance,validateInteger}from"../types/validate.js";import{LogEntry}from"./logentry.js";import{ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACE,WARN}from"./logger.js";class Handler extends Base{constructor(){super(),this.loglevel=OFF}log(e){return validateInstance(e,LogEntry),!(this.loglevel<e.getLogLevel())}setLogLevel(e){return validateInteger(e),this.loglevel=e,this}getLogLevel(){return this.loglevel}setAll(){return this.setLogLevel(ALL),this}setTrace(){return this.setLogLevel(TRACE),this}setDebug(){return this.setLogLevel(DEBUG),this}setInfo(){return this.setLogLevel(INFO),this}setWarn(){return this.setLogLevel(WARN),this}setError(){return this.setLogLevel(ERROR),this}setFatal(){return this.setLogLevel(FATAL),this}setOff(){return this.setLogLevel(OFF),this}}assignToNamespace("Monster.Logging",Handler);export{Monster,Handler};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInstance,validateInteger}from"../types/validate.js";import{LogEntry}from"./logentry.js";import{ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACE,WARN}from"./logger.js";class Handler extends Base{constructor(){super();this.loglevel=OFF}log(entry){validateInstance(entry,LogEntry);if(this.loglevel<entry.getLogLevel()){return false}return true}setLogLevel(loglevel){validateInteger(loglevel);this.loglevel=loglevel;return this}getLogLevel(){return this.loglevel}setAll(){this.setLogLevel(ALL);return this}setTrace(){this.setLogLevel(TRACE);return this}setDebug(){this.setLogLevel(DEBUG);return this}setInfo(){this.setLogLevel(INFO);return this}setWarn(){this.setLogLevel(WARN);return this}setError(){this.setLogLevel(ERROR);return this}setFatal(){this.setLogLevel(FATAL);return this}setOff(){this.setLogLevel(OFF);return this}}assignToNamespace("Monster.Logging",Handler);export{Monster,Handler};
diff --git a/packages/monster/dist/modules/logging/handler/console.js b/packages/monster/dist/modules/logging/handler/console.js
index 1cda51055f4cc3f08cb6666d0af946e1e1094df0..7a46b5983b4fba87860cad3b14653a125846889b 100644
--- a/packages/monster/dist/modules/logging/handler/console.js
+++ b/packages/monster/dist/modules/logging/handler/console.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../../namespace.js";import{Base}from"../../types/base.js";import{getGlobalObject}from"../../types/global.js";import{Handler}from"../handler.js";import{LogEntry}from"../logentry.js";class ConsoleHandler extends Handler{constructor(){super()}log(o){if(super.log(o)){let e=getGlobalObject("console");return e?(e.log(o.toString()),!0):!1}return!1}}assignToNamespace("Monster.Logging.Handler",ConsoleHandler);export{Monster,ConsoleHandler};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../../namespace.js";import{Base}from"../../types/base.js";import{getGlobalObject}from"../../types/global.js";import{Handler}from"../handler.js";import{LogEntry}from"../logentry.js";class ConsoleHandler extends Handler{constructor(){super()}log(entry){if(super.log(entry)){let console=getGlobalObject("console");if(!console)return false;console.log(entry.toString());return true}return false}}assignToNamespace("Monster.Logging.Handler",ConsoleHandler);export{Monster,ConsoleHandler};
diff --git a/packages/monster/dist/modules/logging/handler/namespace.js b/packages/monster/dist/modules/logging/handler/namespace.js
index 2d5b41d05327f033d5eafb3a689beafced576405..608ec4b03e54a7cf1300535bdb6465435afb6c90 100644
--- a/packages/monster/dist/modules/logging/handler/namespace.js
+++ b/packages/monster/dist/modules/logging/handler/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Logging.Handler";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Logging.Handler";
diff --git a/packages/monster/dist/modules/logging/logentry.js b/packages/monster/dist/modules/logging/logentry.js
index f6bb7ff254de707adfdc3f8acb038be68d00e7b4..4494ae59defc8d6082cebf30ce0c598b5133cd23 100644
--- a/packages/monster/dist/modules/logging/logentry.js
+++ b/packages/monster/dist/modules/logging/logentry.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInteger}from"../types/validate.js";class LogEntry extends Base{constructor(e,...t){super(),validateInteger(e),this.loglevel=e,this.arguments=t}getLogLevel(){return this.loglevel}getArguments(){return this.arguments}}assignToNamespace("Monster.Logging",LogEntry);export{Monster,LogEntry};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInteger}from"../types/validate.js";class LogEntry extends Base{constructor(loglevel,...args){super();validateInteger(loglevel);this.loglevel=loglevel;this.arguments=args}getLogLevel(){return this.loglevel}getArguments(){return this.arguments}}assignToNamespace("Monster.Logging",LogEntry);export{Monster,LogEntry};
diff --git a/packages/monster/dist/modules/logging/logger.js b/packages/monster/dist/modules/logging/logger.js
index ca6002e39462d280d3fb0a0577409f94c56d1fde..458a9632b2b181408ce26d3685298d95370143ed 100644
--- a/packages/monster/dist/modules/logging/logger.js
+++ b/packages/monster/dist/modules/logging/logger.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{Handler}from"../logging/handler.js";import{LogEntry}from"../logging/logentry.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInteger,validateObject,validateString}from"../types/validate.js";const ALL=255,TRACE=64,DEBUG=32,INFO=16,WARN=8,ERROR=4,FATAL=2,OFF=0;class Logger extends Base{constructor(){super(),this.handler=new Set}addHandler(e){if(validateObject(e),!(e instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.add(e),this}removeHandler(e){if(validateObject(e),!(e instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.delete(e),this}logTrace(){return triggerLog.apply(this,[TRACE,...arguments]),this}logDebug(){return triggerLog.apply(this,[DEBUG,...arguments]),this}logInfo(){return triggerLog.apply(this,[INFO,...arguments]),this}logWarn(){return triggerLog.apply(this,[WARN,...arguments]),this}logError(){return triggerLog.apply(this,[ERROR,...arguments]),this}logFatal(){return triggerLog.apply(this,[FATAL,...arguments]),this}getLabel(e){return validateInteger(e),e===ALL?"ALL":e===TRACE?"TRACE":e===DEBUG?"DEBUG":e===INFO?"INFO":e===WARN?"WARN":e===ERROR?"ERROR":e===FATAL?"FATAL":e===OFF?"OFF":"unknown"}getLevel(e){return validateString(e),"ALL"===e?ALL:"TRACE"===e?TRACE:"DEBUG"===e?DEBUG:"INFO"===e?INFO:"WARN"===e?WARN:"ERROR"===e?ERROR:"FATAL"===e?FATAL:"OFF"===e?OFF:0}}function triggerLog(e,...r){var t;for(t of this.handler)t.log(new LogEntry(e,r));return this}assignToNamespace("Monster.Logging",Logger);export{Monster,Logger,ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF};
\ No newline at end of file
+'use strict';import{Handler}from"../logging/handler.js";import{LogEntry}from"../logging/logentry.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateInteger,validateObject,validateString}from"../types/validate.js";const ALL=255;const TRACE=64;const DEBUG=32;const INFO=16;const WARN=8;const ERROR=4;const FATAL=2;const OFF=0;class Logger extends Base{constructor(){super();this.handler=new Set}addHandler(handler){validateObject(handler);if(!(handler instanceof Handler)){throw new Error("the handler must be an instance of Handler")}this.handler.add(handler);return this}removeHandler(handler){validateObject(handler);if(!(handler instanceof Handler)){throw new Error("the handler must be an instance of Handler")}this.handler.delete(handler);return this}logTrace(){triggerLog.apply(this,[TRACE,...arguments]);return this}logDebug(){triggerLog.apply(this,[DEBUG,...arguments]);return this}logInfo(){triggerLog.apply(this,[INFO,...arguments]);return this}logWarn(){triggerLog.apply(this,[WARN,...arguments]);return this}logError(){triggerLog.apply(this,[ERROR,...arguments]);return this}logFatal(){triggerLog.apply(this,[FATAL,...arguments]);return this}getLabel(level){validateInteger(level);if(level===ALL)return"ALL";if(level===TRACE)return"TRACE";if(level===DEBUG)return"DEBUG";if(level===INFO)return"INFO";if(level===WARN)return"WARN";if(level===ERROR)return"ERROR";if(level===FATAL)return"FATAL";if(level===OFF)return"OFF";return"unknown"}getLevel(label){validateString(label);if(label==="ALL")return ALL;if(label==="TRACE")return TRACE;if(label==="DEBUG")return DEBUG;if(label==="INFO")return INFO;if(label==="WARN")return WARN;if(label==="ERROR")return ERROR;if(label==="FATAL")return FATAL;if(label==="OFF")return OFF;return 0}}assignToNamespace("Monster.Logging",Logger);export{Monster,Logger,ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF};function triggerLog(loglevel,...args){var logger=this;for(let handler of logger.handler){handler.log(new LogEntry(loglevel,args))}return logger}
diff --git a/packages/monster/dist/modules/logging/namespace.js b/packages/monster/dist/modules/logging/namespace.js
index 205c160a15984dec2c43f260c92ccbf1ce0e031b..0d8a753e82547f7e8f8c6829fb88b8c1307769b4 100644
--- a/packages/monster/dist/modules/logging/namespace.js
+++ b/packages/monster/dist/modules/logging/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Logging";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Logging";
diff --git a/packages/monster/dist/modules/math/namespace.js b/packages/monster/dist/modules/math/namespace.js
index 84d7466262809ade0d304b690f75800807410e56..9c622d8c43a4c3156be76a0a3db38675fedb6517 100644
--- a/packages/monster/dist/modules/math/namespace.js
+++ b/packages/monster/dist/modules/math/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Math";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Math";
diff --git a/packages/monster/dist/modules/math/random.js b/packages/monster/dist/modules/math/random.js
index 243246b338a16c58e39646bf484b469d004915be..f2d3464fb50d82fe629e5ac021d7843bb3828835 100644
--- a/packages/monster/dist/modules/math/random.js
+++ b/packages/monster/dist/modules/math/random.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";function random(r,t){if((t=void 0===t?MAX:t)<(r=void 0===r?0:r))throw new Error("max must be greater than min");return Math.round(create(r,t))}var MAX=1e9;function create(r,t){let e;var o=getGlobal();if(e=o?.crypto||o?.msCrypto||o?.crypto||void 0,void 0===e)throw new Error("missing crypt");let a=0;var n=t-r;if(n<2)throw new Error("the distance is too small to create a random number.");o=Math.ceil(Math.log2(n));if(53<o)throw new Error("we cannot generate numbers larger than 53 bits.");var i=Math.ceil(o/8),o=Math.pow(2,o)-1,s=new Uint8Array(i);e.getRandomValues(s);let l=8*(i-1);for(var m=0;m<i;m++)a+=s[m]*Math.pow(2,l),l-=8;return a&=o,a>=n?create(r,t):r+a}Math.log2=Math.log2||function(r){return Math.log(r)/Math.log(2)},assignToNamespace("Monster.Math",random);export{Monster,random};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";function random(min,max){if(min===undefined){min=0}if(max===undefined){max=MAX}if(max<min){throw new Error("max must be greater than min")}return Math.round(create(min,max))}var MAX=1000000000;Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)};function create(min,max){let crypt;let globalReference=getGlobal();crypt=globalReference?.["crypto"]||globalReference?.["msCrypto"]||globalReference?.["crypto"]||undefined;if(typeof crypt==="undefined"){throw new Error("missing crypt")}let rval=0;const range=max-min;if(range<2){throw new Error("the distance is too small to create a random number.")}const bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53){throw new Error("we cannot generate numbers larger than 53 bits.")}const bytesNeeded=Math.ceil(bitsNeeded/8);const mask=Math.pow(2,bitsNeeded)-1;const byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);let p=(bytesNeeded-1)*8;for(var i=0;i<bytesNeeded;i++){rval+=byteArray[i]*Math.pow(2,p);p-=8}rval=rval&mask;if(rval>=range){return create(min,max)}return min+rval}assignToNamespace("Monster.Math",random);export{Monster,random};
diff --git a/packages/monster/dist/modules/monster.js b/packages/monster/dist/modules/monster.js
index 4281250320cda5e652e6421ed9e0d8b26eaeb7bf..0081a2bfa30a87df245705b7a7f5f89e945dfa93 100644
--- a/packages/monster/dist/modules/monster.js
+++ b/packages/monster/dist/modules/monster.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import"./constants.js";import"./constraints/abstract.js";import"./constraints/abstractoperator.js";import"./constraints/andoperator.js";import"./constraints/invalid.js";import"./constraints/isarray.js";import"./constraints/isobject.js";import"./constraints/oroperator.js";import"./constraints/valid.js";import"./data/buildmap.js";import"./data/diff.js";import"./data/extend.js";import"./data/pathfinder.js";import"./data/pipe.js";import"./data/transformer.js";import"./dom/assembler.js";import"./dom/attributes.js";import"./dom/constants.js";import"./dom/customcontrol.js";import"./dom/customelement.js";import"./dom/events.js";import"./dom/locale.js";import"./dom/template.js";import"./dom/theme.js";import"./dom/updater.js";import"./dom/util.js";import"./i18n/locale.js";import"./i18n/provider.js";import"./i18n/providers/fetch.js";import"./i18n/translations.js";import"./logging/handler.js";import"./logging/handler/console.js";import"./logging/logentry.js";import"./logging/logger.js";import"./math/random.js";import{Monster}from"./namespace.js";import"./text/formatter.js";import"./types/base.js";import"./types/basewithoptions.js";import"./types/global.js";import"./types/id.js";import"./types/is.js";import"./types/observer.js";import"./types/observerlist.js";import"./types/proxyobserver.js";import"./types/queue.js";import"./types/randomid.js";import"./types/stack.js";import"./types/tokenlist.js";import"./types/typeof.js";import"./types/uniquequeue.js";import"./types/validate.js";import"./types/version.js";import"./util/clone.js";import"./util/comparator.js";import"./util/freeze.js";let rootName;try{rootName=Monster.Types.getGlobalObject("__MonsterRootName__")}catch(t){}rootName=rootName||"Monster",Monster.Types.getGlobal()[rootName]=Monster;export{Monster};
\ No newline at end of file
+'use strict';import"./constants.js";import"./constraints/abstract.js";import"./constraints/abstractoperator.js";import"./constraints/andoperator.js";import"./constraints/invalid.js";import"./constraints/isarray.js";import"./constraints/isobject.js";import"./constraints/oroperator.js";import"./constraints/valid.js";import"./data/buildmap.js";import"./data/diff.js";import"./data/extend.js";import"./data/pathfinder.js";import"./data/pipe.js";import"./data/transformer.js";import"./dom/assembler.js";import"./dom/attributes.js";import"./dom/constants.js";import"./dom/customcontrol.js";import"./dom/customelement.js";import"./dom/events.js";import"./dom/locale.js";import"./dom/template.js";import"./dom/theme.js";import"./dom/updater.js";import"./dom/util.js";import"./i18n/locale.js";import"./i18n/provider.js";import"./i18n/providers/fetch.js";import"./i18n/translations.js";import"./logging/handler.js";import"./logging/handler/console.js";import"./logging/logentry.js";import"./logging/logger.js";import"./math/random.js";import{Monster}from"./namespace.js";import"./text/formatter.js";import"./types/base.js";import"./types/basewithoptions.js";import"./types/global.js";import"./types/id.js";import"./types/is.js";import"./types/observer.js";import"./types/observerlist.js";import"./types/proxyobserver.js";import"./types/queue.js";import"./types/randomid.js";import"./types/stack.js";import"./types/tokenlist.js";import"./types/typeof.js";import"./types/uniquequeue.js";import"./types/validate.js";import"./types/version.js";import"./util/clone.js";import"./util/comparator.js";import"./util/freeze.js";let rootName;try{rootName=Monster.Types.getGlobalObject("__MonsterRootName__")}catch(e){}if(!rootName)rootName="Monster";Monster.Types.getGlobal()[rootName]=Monster;export{Monster};
diff --git a/packages/monster/dist/modules/namespace.js b/packages/monster/dist/modules/namespace.js
index a110ef08279e8949a0d28517faef59778e217ae6..8e3113f430afd9b3a8c534631f30b16e09f589db 100644
--- a/packages/monster/dist/modules/namespace.js
+++ b/packages/monster/dist/modules/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";class Namespace{constructor(e){if(void 0===e||"string"!=typeof e)throw new Error("namespace is not a string");this.namespace=e}getNamespace(){return this.namespace}toString(){return this.getNamespace()}}const Monster=new Namespace("Monster");function assignToNamespace(e,...r){let n=namespaceFor(e.split("."));if(0===r.length)throw new Error("no functions have been passed.");for(let e=0,t=r.length;e<t;e++)n[objectName(r[e])]=r[e];return n}function objectName(t){try{if("function"!=typeof t)throw new Error("the first argument is not a function or class.");if(t.hasOwnProperty("name"))return t.name;if("function"==typeof t.toString){let e=t.toString();var r=e.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(r)&&"string"==typeof r[1])return r[1];var n=e.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(n)&&"string"==typeof n[1])return n[1]}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(t){let r=Monster,n="Monster";for(let e=0;e<t.length;e++)"Monster"!==t[e]&&(n+="."+t[e],r.hasOwnProperty(t[e])||(r[t[e]]=new Namespace(n)),r=r[t[e]]);return r}assignToNamespace("Monster",assignToNamespace,Namespace);export{Monster,assignToNamespace};
\ No newline at end of file
+'use strict';class Namespace{constructor(namespace){if(namespace===undefined||typeof namespace!=="string"){throw new Error("namespace is not a string")}this.namespace=namespace}getNamespace(){return this.namespace}toString(){return this.getNamespace()}}export const Monster=new Namespace("Monster");function assignToNamespace(ns,...obj){let current=namespaceFor(ns.split("."));if(obj.length===0){throw new Error("no functions have been passed.")}for(let i=0,l=obj.length;i<l;i++){current[objectName(obj[i])]=obj[i]}return current}function objectName(fn){try{if(typeof fn!=="function"){throw new Error("the first argument is not a function or class.")}if(fn.hasOwnProperty("name")){return fn.name}if("function"===typeof fn.toString){let s=fn.toString();let f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&typeof f[1]==="string"){return f[1]}let c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&typeof c[1]==="string"){return c[1]}}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){let space=Monster,ns="Monster";for(let i=0;i<parts.length;i++){if("Monster"===parts[i]){continue}ns+="."+parts[i];if(!space.hasOwnProperty(parts[i])){space[parts[i]]=new Namespace(ns)}space=space[parts[i]]}return space}assignToNamespace("Monster",assignToNamespace,Namespace);export{assignToNamespace};
diff --git a/packages/monster/dist/modules/text/formatter.js b/packages/monster/dist/modules/text/formatter.js
index 57fc13f400e0333ff08dd509d11f05ef02ca97a8..3bfadf6208b47c33f2a6b4e909f574c709ddc14a 100644
--- a/packages/monster/dist/modules/text/formatter.js
+++ b/packages/monster/dist/modules/text/formatter.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{Pipe}from"../data/pipe.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateObject,validateString}from"../types/validate.js";class Formatter extends Base{constructor(e){super(),this.object=validateObject(e),this.openMarker="${",this.closeMarker="}"}setMarker(e,r){return void 0===r&&(r=e),this.openMarker=validateString(e),this.closeMarker=validateString(r),this}format(e){return tokenizer.call(this,validateString(e))}}function tokenizer(e){var r=this;let t=[];for(;;){var a=e.indexOf(r.openMarker);if(-1===a){t.push(e);break}0<a&&(t.push(e.substring(0,a)),e=e.substring(a));var s=e.substring(r.openMarker.length).indexOf(r.closeMarker)+r.openMarker.length;if(-1===s)throw new Error("syntax error in formatter template");a="path:"+e.substring(r.openMarker.length,s);t.push(validateString(new Pipe(a).run(r.object))),e=e.substring(s+r.closeMarker.length)}return t.join("")}assignToNamespace("Monster.Text",Formatter);export{Monster,Formatter};
\ No newline at end of file
+'use strict';import{Pipe}from"../data/pipe.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{validateObject,validateString}from"../types/validate.js";class Formatter extends Base{constructor(object){super();this.object=validateObject(object);this.openMarker="${";this.closeMarker="}"}setMarker(open,close){if(close===undefined){close=open}this.openMarker=validateString(open);this.closeMarker=validateString(close);return this}format(text){return tokenizer.call(this,validateString(text))}}function tokenizer(text){const self=this;let formatted=[];while(true){let startIndex=text.indexOf(self.openMarker);if(startIndex===-1){formatted.push(text);break}else if(startIndex>0){formatted.push(text.substring(0,startIndex));text=text.substring(startIndex)}let endIndex=text.substring(self.openMarker.length).indexOf(self.closeMarker)+self.openMarker.length;if(endIndex===-1){throw new Error("syntax error in formatter template");return}let command="path:"+text.substring(self.openMarker.length,endIndex);formatted.push(validateString(new Pipe(command).run(self.object)));text=text.substring(endIndex+self.closeMarker.length)}return formatted.join("")}assignToNamespace("Monster.Text",Formatter);export{Monster,Formatter};
diff --git a/packages/monster/dist/modules/text/namespace.js b/packages/monster/dist/modules/text/namespace.js
index 6d6c14b6573402f8def41f7b052ad7dfe91047d2..b376a63f99a87b9febcca44b75161a09358fd2cb 100644
--- a/packages/monster/dist/modules/text/namespace.js
+++ b/packages/monster/dist/modules/text/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Text";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Text";
diff --git a/packages/monster/dist/modules/types/base.js b/packages/monster/dist/modules/types/base.js
index 8499489fca92fcb7ebfcab7b0278a3396e04f450..ae9a54dcf3dc1a3a51395d27483ecd18444417b1 100644
--- a/packages/monster/dist/modules/types/base.js
+++ b/packages/monster/dist/modules/types/base.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";class Base extends Object{toString(){return JSON.stringify(this)}}assignToNamespace("Monster.Types",Base);export{Monster,Base};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";class Base extends Object{toString(){return JSON.stringify(this)}}assignToNamespace("Monster.Types",Base);export{Monster,Base};
diff --git a/packages/monster/dist/modules/types/basewithoptions.js b/packages/monster/dist/modules/types/basewithoptions.js
index ae413311929be7724c971f338e92e5162a4a347e..b340e5a42dd8fb88211e2993d82a6242c6d3a99d 100644
--- a/packages/monster/dist/modules/types/basewithoptions.js
+++ b/packages/monster/dist/modules/types/basewithoptions.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{PROPERTY_KEY_INTERNALDATA}from"../constants.js";import{extend}from"../data/extend.js";import{Pathfinder}from"../data/pathfinder.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{validateObject}from"./validate.js";const optionsSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA);class BaseWithOptions extends Base{constructor(t){super(),void 0===t&&(t={}),this[optionsSymbol]=extend({},this.defaults,validateObject(t))}get defaults(){return{}}getOption(t,e){let s;try{s=new Pathfinder(this[optionsSymbol]).getVia(t)}catch(t){}return void 0===s?e:s}}assignToNamespace("Monster.Types",BaseWithOptions);export{Monster,BaseWithOptions};
\ No newline at end of file
+'use strict';import{PROPERTY_KEY_INTERNALDATA}from"../constants.js";import{extend}from"../data/extend.js";import{Pathfinder}from"../data/pathfinder.js";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{validateObject}from"./validate.js";const optionsSymbol=Symbol.for(PROPERTY_KEY_INTERNALDATA);class BaseWithOptions extends Base{constructor(options){super();if(options===undefined){options={}}this[optionsSymbol]=extend({},this.defaults,validateObject(options))}get defaults(){return{}}getOption(path,defaultValue){let value;try{value=new Pathfinder(this[optionsSymbol]).getVia(path)}catch(e){}if(value===undefined)return defaultValue;return value}}assignToNamespace("Monster.Types",BaseWithOptions);export{Monster,BaseWithOptions};
diff --git a/packages/monster/dist/modules/types/binary.js b/packages/monster/dist/modules/types/binary.js
index c8753b23bd0cf1914e635695e00802ff3116abe6..f31284a0aa2f1333e49b04966c8a3127f9cc24c2 100644
--- a/packages/monster/dist/modules/types/binary.js
+++ b/packages/monster/dist/modules/types/binary.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace}from"../namespace.js";import{Monster,validateString}from"./validate.js";function toBinary(t){const e=new Uint16Array(validateString(t).length);for(let r=0;r<e.length;r++)e[r]=t.charCodeAt(r);var n=new Uint8Array(e.buffer);let a="";for(let r=0;r<n.byteLength;r++)a+=String.fromCharCode(n[r]);return a}function fromBinary(t){const e=new Uint8Array(validateString(t).length);for(let r=0;r<e.length;r++)e[r]=t.charCodeAt(r);var n=new Uint16Array(e.buffer);let a="";for(let r=0;r<n.length;r++)a+=String.fromCharCode(n[r]);return a}assignToNamespace("Monster.Types",toBinary,fromBinary);export{Monster,toBinary,fromBinary};
\ No newline at end of file
+'use strict';import{assignToNamespace}from"../namespace.js";import{Monster,validateString}from"./validate.js";function toBinary(string){const codeUnits=new Uint16Array(validateString(string).length);for(let i=0;i<codeUnits.length;i++){codeUnits[i]=string.charCodeAt(i)}const charCodes=new Uint8Array(codeUnits.buffer);let result="";for(let i=0;i<charCodes.byteLength;i++){result+=String.fromCharCode(charCodes[i])}return result}function fromBinary(binary){const bytes=new Uint8Array(validateString(binary).length);for(let i=0;i<bytes.length;i++){bytes[i]=binary.charCodeAt(i)}const charCodes=new Uint16Array(bytes.buffer);let result="";for(let i=0;i<charCodes.length;i++){result+=String.fromCharCode(charCodes[i])}return result}assignToNamespace("Monster.Types",toBinary,fromBinary);export{Monster,toBinary,fromBinary};
diff --git a/packages/monster/dist/modules/types/dataurl.js b/packages/monster/dist/modules/types/dataurl.js
index 4b47884fbe85c0f1d4beb0428f635af8b5500370..80dc54c47b8c4bf11564420e7a295736e1f90e29 100644
--- a/packages/monster/dist/modules/types/dataurl.js
+++ b/packages/monster/dist/modules/types/dataurl.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace}from"../namespace.js";import{Base,Monster}from"./base.js";import{isString}from"./is.js";import{MediaType,parseMediaType}from"./mediatype.js";import{validateBoolean,validateInstance,validateString}from"./validate.js";const internal=Symbol("internal");class DataUrl extends Base{constructor(t,e,a){super(),isString(e)&&(e=parseMediaType(e)),this[internal]={content:validateString(t),mediatype:validateInstance(e,MediaType),base64:validateBoolean(void 0===a||a)}}get content(){return this[internal].base64?atob(this[internal].content):this[internal].content}get mediatype(){return this[internal].mediatype}toString(){let t=this[internal].content;return t=!0===this[internal].base64?";base64,"+t:","+encodeURIComponent(t),"data:"+this[internal].mediatype.toString()+t}}function parseDataURL(t){if(validateString(t),"data:"!==(t=t.trim()).substring(0,5))throw new TypeError("incorrect or missing data protocol");var e=(t=t.substring(5)).indexOf(",");if(-1===e)throw new TypeError("malformed data url");let a=t.substring(e+1),n=t.substring(0,e).trim(),r="text/plain;charset=US-ASCII",i=!1;return""!==n?(r=n,n.endsWith("base64")?(e=n.lastIndexOf(";"),r=n.substring(0,e),i=!0):a=decodeURIComponent(a),r=parseMediaType(r)):a=decodeURIComponent(a),new DataUrl(a,r,i)}assignToNamespace("Monster.Types",parseDataURL,DataUrl);export{Monster,parseDataURL,DataUrl};
\ No newline at end of file
+'use strict';import{assignToNamespace}from"../namespace.js";import{Base,Monster}from"./base.js";import{isString}from"./is.js";import{MediaType,parseMediaType}from"./mediatype.js";import{validateBoolean,validateInstance,validateString}from"./validate.js";const internal=Symbol("internal");class DataUrl extends Base{constructor(content,mediatype,base64){super();if(isString(mediatype)){mediatype=parseMediaType(mediatype)}this[internal]={content:validateString(content),mediatype:validateInstance(mediatype,MediaType),base64:validateBoolean(base64===undefined?true:base64)}}get content(){return this[internal].base64?atob(this[internal].content):this[internal].content}get mediatype(){return this[internal].mediatype}toString(){let content=this[internal].content;if(this[internal].base64===true){content=";base64,"+content}else{content=","+encodeURIComponent(content)}return"data:"+this[internal].mediatype.toString()+content}}function parseDataURL(dataurl){validateString(dataurl);dataurl=dataurl.trim();if(dataurl.substring(0,5)!=="data:"){throw new TypeError("incorrect or missing data protocol")}dataurl=dataurl.substring(5);let p=dataurl.indexOf(",");if(p===-1){throw new TypeError("malformed data url")}let content=dataurl.substring(p+1);let mediatypeAndBase64=dataurl.substring(0,p).trim();let mediatype="text/plain;charset=US-ASCII";let base64Flag=false;if(mediatypeAndBase64!==""){mediatype=mediatypeAndBase64;if(mediatypeAndBase64.endsWith("base64")){let i=mediatypeAndBase64.lastIndexOf(";");mediatype=mediatypeAndBase64.substring(0,i);base64Flag=true}else{content=decodeURIComponent(content)}mediatype=parseMediaType(mediatype)}else{content=decodeURIComponent(content)}return new DataUrl(content,mediatype,base64Flag)}assignToNamespace("Monster.Types",parseDataURL,DataUrl);export{Monster,parseDataURL,DataUrl};
diff --git a/packages/monster/dist/modules/types/global.js b/packages/monster/dist/modules/types/global.js
index 8d4451eb93c43db510ae6660ca11aa05a23bb126..7f531442071e6f5f8a0fcc990b5a5ea8f23458e8 100644
--- a/packages/monster/dist/modules/types/global.js
+++ b/packages/monster/dist/modules/types/global.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{validateFunction,validateObject,validateString}from"./validate.js";let globalReference;function getGlobal(){return globalReference}function getGlobalObject(e){validateString(e);var t=globalReference?.[e];if(void 0===t)throw new Error("the object "+e+" is not defined");return validateObject(t),t}function getGlobalFunction(e){validateString(e);var t=globalReference?.[e];if(void 0===t)throw new Error("the function "+e+" is not defined");return validateFunction(t),t}!function(){if("object"!=typeof globalThis)if("undefined"==typeof self){if("undefined"==typeof window){if(Object.defineProperty(Object.prototype,"__monster__",{get:function(){return this},configurable:!0}),"object"==typeof __monster__)return __monster__.globalThis=__monster__,delete Object.prototype.__monster__,globalReference=globalThis;try{globalReference=Function("return this")()}catch(e){}throw new Error("unsupported environment.")}globalReference=window}else globalReference=self;else globalReference=globalThis}(),assignToNamespace("Monster.Types",getGlobal,getGlobalObject,getGlobalFunction);export{Monster,getGlobal,getGlobalObject,getGlobalFunction};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{validateFunction,validateObject,validateString}from"./validate.js";let globalReference;(function(){if(typeof globalThis==="object"){globalReference=globalThis;return}if(typeof self!=="undefined"){globalReference=self;return}else if(typeof window!=="undefined"){globalReference=window;return}Object.defineProperty(Object.prototype,"__monster__",{get:function(){return this},configurable:true});if(typeof __monster__==="object"){__monster__.globalThis=__monster__;delete Object.prototype.__monster__;globalReference=globalThis;return}try{globalReference=Function("return this")()}catch(e){}throw new Error("unsupported environment.")})();function getGlobal(){return globalReference}function getGlobalObject(name){validateString(name);let o=globalReference?.[name];if(typeof o==="undefined")throw new Error("the object "+name+" is not defined");validateObject(o);return o}function getGlobalFunction(name){validateString(name);let f=globalReference?.[name];if(typeof f==="undefined")throw new Error("the function "+name+" is not defined");validateFunction(f);return f}assignToNamespace("Monster.Types",getGlobal,getGlobalObject,getGlobalFunction);export{Monster,getGlobal,getGlobalObject,getGlobalFunction};
diff --git a/packages/monster/dist/modules/types/id.js b/packages/monster/dist/modules/types/id.js
index 96e0c334ac919e364310dbbfe70a4d8385c3ec9e..2af1a44840d99f28122bc21446282fa23d71c627 100644
--- a/packages/monster/dist/modules/types/id.js
+++ b/packages/monster/dist/modules/types/id.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{validateString}from"./validate.js";let internalCounter=new Map;class ID extends Base{constructor(e){super(),void 0===e&&(e="id"),validateString(e),internalCounter.has(e)||internalCounter.set(e,1);var t=internalCounter.get(e);this.id=e+t,internalCounter.set(e,++t)}toString(){return this.id}}assignToNamespace("Monster.Types",ID);export{Monster,ID};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{validateString}from"./validate.js";let internalCounter=new Map;class ID extends Base{constructor(prefix){super();if(prefix===undefined){prefix="id"}validateString(prefix);if(!internalCounter.has(prefix)){internalCounter.set(prefix,1)}let count=internalCounter.get(prefix);this.id=prefix+count;internalCounter.set(prefix,++count)}toString(){return this.id}}assignToNamespace("Monster.Types",ID);export{Monster,ID};
diff --git a/packages/monster/dist/modules/types/is.js b/packages/monster/dist/modules/types/is.js
index a9b12ec244cffbc6c53fef899fac041eaedf7ee1..c77bfe350dc98eceaa7e7dba290fd4e062b21acc 100644
--- a/packages/monster/dist/modules/types/is.js
+++ b/packages/monster/dist/modules/types/is.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";function isIterable(i){return void 0!==i&&(null!==i&&"function"==typeof i?.[Symbol.iterator])}function isPrimitive(i){return null==i||("string"==(i=typeof i)||"number"==i||"boolean"==i||"symbol"==i)}function isSymbol(i){return"symbol"==typeof i}function isBoolean(i){return!0===i||!1===i}function isString(i){return void 0!==i&&"string"==typeof i}function isObject(i){return!isArray(i)&&(!isPrimitive(i)&&"object"==typeof i)}function isInstance(i,n){return!!isObject(i)&&(!!isFunction(n)&&(!!n.hasOwnProperty("prototype")&&i instanceof n))}function isArray(i){return!!Array.isArray(i)}function isFunction(i){return!isArray(i)&&(!isPrimitive(i)&&"function"==typeof i)}function isInteger(i){return Number.isInteger(i)}assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger,isSymbol);export{Monster,isPrimitive,isBoolean,isString,isObject,isInstance,isArray,isFunction,isIterable,isInteger,isSymbol};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";function isIterable(value){if(value===undefined)return false;if(value===null)return false;return typeof value?.[Symbol.iterator]==="function"}function isPrimitive(value){var type;if(value===undefined||value===null){return true}type=typeof value;if(type==="string"||type==="number"||type==="boolean"||type==="symbol"){return true}return false}function isSymbol(value){return"symbol"===typeof value?true:false}function isBoolean(value){if(value===true||value===false){return true}return false}function isString(value){if(value===undefined||typeof value!=="string"){return false}return true}function isObject(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="object"){return true}return false}function isInstance(value,instance){if(!isObject(value))return false;if(!isFunction(instance))return false;if(!instance.hasOwnProperty("prototype"))return false;return value instanceof instance?true:false}function isArray(value){if(Array.isArray(value)){return true}return false}function isFunction(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="function"){return true}return false}function isInteger(value){return Number.isInteger(value)}assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger,isSymbol);export{Monster,isPrimitive,isBoolean,isString,isObject,isInstance,isArray,isFunction,isIterable,isInteger,isSymbol};
diff --git a/packages/monster/dist/modules/types/mediatype.js b/packages/monster/dist/modules/types/mediatype.js
index a39b055e68928459316a5ecec8c01cb59cd957de..b0aac29558f2a6fcbd2db52b747289bcc2744454 100644
--- a/packages/monster/dist/modules/types/mediatype.js
+++ b/packages/monster/dist/modules/types/mediatype.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace}from"../namespace.js";import{Base,Monster}from"./base.js";import{isString}from"./is.js";import{validateArray,validateString}from"./validate.js";const internal=Symbol("internal");class MediaType extends Base{constructor(e,t,r){super(),this[internal]={type:validateString(e).toLowerCase(),subtype:validateString(t).toLowerCase(),parameter:[]},void 0!==r&&(this[internal].parameter=validateArray(r))}get type(){return this[internal].type}get subtype(){return this[internal].subtype}get parameter(){return this[internal].parameter}get parameter(){const r=new Map;return this[internal].parameter.forEach(e=>{let t=e.value;t.startsWith('"')&&t.endsWith('"')&&(t=t.substring(1,t.length-1)),r.set(e.key,t)}),r}toString(){let e=[];for(var t of this[internal].parameter)e.push(t.key+"="+t.value);return this[internal].type+"/"+this[internal].subtype+(0<e.length?";"+e.join(";"):"")}}function parseMediaType(e){var t=/(?<type>[A-Za-z]+|\*)\/(?<subtype>([a-zA-Z0-9.\+_\-]+)|\*|)(?<parameter>\s*;\s*([a-zA-Z0-9]+)\s*(=\s*("?[A-Za-z0-9_\-]+"?))?)*/g.exec(validateString(e))?.groups;if(void 0===t)throw new TypeError("the mimetype can not be parsed");var r=t?.type,e=t?.subtype,t=t?.parameter;if(""===e||""===r)throw new TypeError("blank value is not allowed");return new MediaType(r,e,parseParameter(t))}function parseParameter(e){if(isString(e)){let r=[];return e.split(";").forEach(e=>{var t;""!==(e=e.trim())&&(t=e.split("="),e=validateString(t?.[0]).trim(),t=validateString(t?.[1]).trim(),r.push({key:e,value:t}))}),r}}assignToNamespace("Monster.Types",parseMediaType,MediaType);export{Monster,parseMediaType,MediaType};
\ No newline at end of file
+'use strict';import{assignToNamespace}from"../namespace.js";import{Base,Monster}from"./base.js";import{isString}from"./is.js";import{validateArray,validateString}from"./validate.js";const internal=Symbol("internal");class MediaType extends Base{constructor(type,subtype,parameter){super();this[internal]={type:validateString(type).toLowerCase(),subtype:validateString(subtype).toLowerCase(),parameter:[]};if(parameter!==undefined){this[internal]["parameter"]=validateArray(parameter)}}get type(){return this[internal].type}get subtype(){return this[internal].subtype}get parameter(){return this[internal].parameter}get parameter(){const result=new Map;this[internal]["parameter"].forEach(p=>{let value=p.value;if(value.startsWith("\"")&&value.endsWith("\"")){value=value.substring(1,value.length-1)}result.set(p.key,value)});return result}toString(){let parameter=[];for(let a of this[internal].parameter){parameter.push(a.key+"="+a.value)}return this[internal].type+"/"+this[internal].subtype+(parameter.length>0?";"+parameter.join(";"):"")}}function parseMediaType(mediatype){const regex=/(?<type>[A-Za-z]+|\*)\/(?<subtype>([a-zA-Z0-9.\+_\-]+)|\*|)(?<parameter>\s*;\s*([a-zA-Z0-9]+)\s*(=\s*("?[A-Za-z0-9_\-]+"?))?)*/g;const result=regex.exec(validateString(mediatype));const groups=result?.["groups"];if(groups===undefined){throw new TypeError("the mimetype can not be parsed")}const type=groups?.["type"];const subtype=groups?.["subtype"];const parameter=groups?.["parameter"];if(subtype===""||type===""){throw new TypeError("blank value is not allowed")}return new MediaType(type,subtype,parseParameter(parameter))}function parseParameter(parameter){if(!isString(parameter)){return undefined}let result=[];parameter.split(";").forEach(entry=>{entry=entry.trim();if(entry===""){return}const kv=entry.split("=");let key=validateString(kv?.[0]).trim();let value=validateString(kv?.[1]).trim();result.push({key:key,value:value})});return result}assignToNamespace("Monster.Types",parseMediaType,MediaType);export{Monster,parseMediaType,MediaType};
diff --git a/packages/monster/dist/modules/types/namespace.js b/packages/monster/dist/modules/types/namespace.js
index 6d9cf3ae45947fc17804b814277e083d90fb9811..b61f7712612d55ec441d2329eab138e5ddb273bc 100644
--- a/packages/monster/dist/modules/types/namespace.js
+++ b/packages/monster/dist/modules/types/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Types";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Types";
diff --git a/packages/monster/dist/modules/types/observer.js b/packages/monster/dist/modules/types/observer.js
index 808da1ab583fd9b21d407fb1990cc81f5b4a5df1..5d7e1b439240e64734c87626bf788fe4217b8365 100644
--- a/packages/monster/dist/modules/types/observer.js
+++ b/packages/monster/dist/modules/types/observer.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{isObject}from"./is.js";import{TokenList}from"./tokenlist.js";import{UniqueQueue}from"./uniquequeue.js";class Observer extends Base{constructor(e,...t){if(super(),"function"!=typeof e)throw new Error("observer callback must be a function");this.callback=e,this.arguments=t,this.tags=new TokenList,this.queue=new UniqueQueue}addTag(e){return this.tags.add(e),this}removeTag(e){return this.tags.remove(e),this}getTags(){return this.tags.entries()}hasTag(e){return this.tags.contains(e)}update(e){let i=this;return new Promise(function(s,r){isObject(e)?(i.queue.add(e),setTimeout(()=>{try{if(i.queue.isEmpty())return void s();var t=i.queue.poll();let e=i.callback.apply(t,i.arguments);if(isObject(e)&&e instanceof Promise)return void e.then(s).catch(r);s(e)}catch(e){r(e)}},0)):r("subject must be an object")})}}assignToNamespace("Monster.Types",Observer);export{Monster,Observer};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{isObject}from"./is.js";import{TokenList}from"./tokenlist.js";import{UniqueQueue}from"./uniquequeue.js";class Observer extends Base{constructor(callback,...args){super();if(typeof callback!=="function"){throw new Error("observer callback must be a function")}this.callback=callback;this.arguments=args;this.tags=new TokenList;this.queue=new UniqueQueue}addTag(tag){this.tags.add(tag);return this}removeTag(tag){this.tags.remove(tag);return this}getTags(){return this.tags.entries()}hasTag(tag){return this.tags.contains(tag)}update(subject){let self=this;return new Promise(function(resolve,reject){if(!isObject(subject)){reject("subject must be an object");return}self.queue.add(subject);setTimeout(()=>{try{if(self.queue.isEmpty()){resolve();return}let s=self.queue.poll();let result=self.callback.apply(s,self.arguments);if(isObject(result)&&result instanceof Promise){result.then(resolve).catch(reject);return}resolve(result)}catch(e){reject(e)}},0)})}}assignToNamespace("Monster.Types",Observer);export{Monster,Observer};
diff --git a/packages/monster/dist/modules/types/observerlist.js b/packages/monster/dist/modules/types/observerlist.js
index c80ad6efd3bcba4041953a8c6c726d523813f97c..adceb8d07eaa34530418fd03d6d318fdcda2746d 100644
--- a/packages/monster/dist/modules/types/observerlist.js
+++ b/packages/monster/dist/modules/types/observerlist.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{Observer}from"./observer.js";import{validateInstance}from"./validate.js";class ObserverList extends Base{constructor(){super(),this.observers=[]}attach(e){return validateInstance(e,Observer),this.observers.push(e),this}detach(e){validateInstance(e,Observer);for(var s=0,r=this.observers.length;s<r;s++)this.observers[s]===e&&this.observers.splice(s,1);return this}contains(e){validateInstance(e,Observer);for(var s=0,r=this.observers.length;s<r;s++)if(this.observers[s]===e)return!0;return!1}notify(e){let s=[];for(var r=0,t=this.observers.length;r<t;r++)s.push(this.observers[r].update(e));return Promise.all(s)}}assignToNamespace("Monster.Types",ObserverList);export{Monster,ObserverList};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{Observer}from"./observer.js";import{validateInstance}from"./validate.js";class ObserverList extends Base{constructor(){super();this.observers=[]}attach(observer){validateInstance(observer,Observer);this.observers.push(observer);return this}detach(observer){validateInstance(observer,Observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){this.observers.splice(i,1)}}return this}contains(observer){validateInstance(observer,Observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){return true}}return false}notify(subject){let pomises=[];var i=0,l=this.observers.length;for(;i<l;i++){pomises.push(this.observers[i].update(subject))}return Promise.all(pomises)}}assignToNamespace("Monster.Types",ObserverList);export{Monster,ObserverList};
diff --git a/packages/monster/dist/modules/types/proxyobserver.js b/packages/monster/dist/modules/types/proxyobserver.js
index f2a9bc98da9146e0054f84df45299060ab512761..622dfa83c32f9ed236dda99c496801965271cf1b 100644
--- a/packages/monster/dist/modules/types/proxyobserver.js
+++ b/packages/monster/dist/modules/types/proxyobserver.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{isArray,isObject,isPrimitive}from"./is.js";import{Observer}from"./observer.js";import{ObserverList}from"./observerlist.js";import{validateObject}from"./validate.js";class ProxyObserver extends Base{constructor(e){super(),this.realSubject=validateObject(e),this.subject=new Proxy(e,getHandler.call(this)),this.objectMap=new WeakMap,this.objectMap.set(this.realSubject,this.subject),this.proxyMap=new WeakMap,this.proxyMap.set(this.subject,this.realSubject),this.observers=new ObserverList}getSubject(){return this.subject}getRealSubject(){return this.realSubject}attachObserver(e){return this.observers.attach(e),this}detachObserver(e){return this.observers.detach(e),this}notifyObservers(){return this.observers.notify(this)}containsObserver(e){return this.observers.contains(e)}}function getHandler(){const a=this,s={get:function(e,t,r){r=Reflect.get(e,t,r);if("symbol"==typeof t)return r;if(isPrimitive(r))return r;if(isArray(r)||isObject(r)){if(a.objectMap.has(r))return a.objectMap.get(r);if(a.proxyMap.has(r))return r;t=new Proxy(r,s);return a.objectMap.set(r,t),a.proxyMap.set(t,r),t}return r},set:function(e,t,r,s){a.proxyMap.has(r)&&(r=a.proxyMap.get(r)),a.proxyMap.has(e)&&(e=a.proxyMap.get(e));let o=Reflect.get(e,t,s);if(a.proxyMap.has(o)&&(o=a.proxyMap.get(o)),o===r)return!0;let i=Reflect.getOwnPropertyDescriptor(e,t);return void 0===i&&(i={writable:!0,enumerable:!0,configurable:!0}),i.value=r,e=Reflect.defineProperty(e,t,i),"symbol"!=typeof t&&a.observers.notify(a),e},deleteProperty:function(e,t){return t in e&&(delete e[t],"symbol"!=typeof t&&a.observers.notify(a),!0)},defineProperty:function(e,t,r){r=Reflect.defineProperty(e,t,r);return"symbol"!=typeof t&&a.observers.notify(a),r},setPrototypeOf:function(e,t){var r=Reflect.setPrototypeOf(object1,t);return"symbol"!=typeof t&&a.observers.notify(a),r}};return s}assignToNamespace("Monster.Types",ProxyObserver);export{Monster,ProxyObserver};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";import{isArray,isObject,isPrimitive}from"./is.js";import{Observer}from"./observer.js";import{ObserverList}from"./observerlist.js";import{validateObject}from"./validate.js";class ProxyObserver extends Base{constructor(object){super();this.realSubject=validateObject(object);this.subject=new Proxy(object,getHandler.call(this));this.objectMap=new WeakMap;this.objectMap.set(this.realSubject,this.subject);this.proxyMap=new WeakMap;this.proxyMap.set(this.subject,this.realSubject);this.observers=new ObserverList}getSubject(){return this.subject}getRealSubject(){return this.realSubject}attachObserver(observer){this.observers.attach(observer);return this}detachObserver(observer){this.observers.detach(observer);return this}notifyObservers(){return this.observers.notify(this)}containsObserver(observer){return this.observers.contains(observer)}}assignToNamespace("Monster.Types",ProxyObserver);export{Monster,ProxyObserver};function getHandler(){const proxy=this;const handler={get:function(target,key,receiver){const value=Reflect.get(target,key,receiver);if(typeof key==="symbol"){return value}if(isPrimitive(value)){return value}if(isArray(value)||isObject(value)){if(proxy.objectMap.has(value)){return proxy.objectMap.get(value)}else if(proxy.proxyMap.has(value)){return value}else{let p=new Proxy(value,handler);proxy.objectMap.set(value,p);proxy.proxyMap.set(p,value);return p}}return value},set:function(target,key,value,receiver){if(proxy.proxyMap.has(value)){value=proxy.proxyMap.get(value)}if(proxy.proxyMap.has(target)){target=proxy.proxyMap.get(target)}let current=Reflect.get(target,key,receiver);if(proxy.proxyMap.has(current)){current=proxy.proxyMap.get(current)}if(current===value){return true}let result;let descriptor=Reflect.getOwnPropertyDescriptor(target,key);if(descriptor===undefined){descriptor={writable:true,enumerable:true,configurable:true}}descriptor["value"]=value;result=Reflect.defineProperty(target,key,descriptor);if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return result},deleteProperty:function(target,key){if(key in target){delete target[key];if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return true}return false},defineProperty:function(target,key,descriptor){let result=Reflect.defineProperty(target,key,descriptor);if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return result},setPrototypeOf:function(target,key){let result=Reflect.setPrototypeOf(object1,key);if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return result}};return handler}
diff --git a/packages/monster/dist/modules/types/queue.js b/packages/monster/dist/modules/types/queue.js
index 3e8f6b0afc3f10be6669157250eb17bd527e1da5..1fa501f69265a21c4e662da6881c258724af4ac5 100644
--- a/packages/monster/dist/modules/types/queue.js
+++ b/packages/monster/dist/modules/types/queue.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Queue extends Base{constructor(){super(),this.data=[]}isEmpty(){return 0===this.data.length}peek(){if(!this.isEmpty())return this.data[0]}add(s){return this.data.push(s),this}clear(){return this.data=[],this}poll(){if(!this.isEmpty())return this.data.shift()}}assignToNamespace("Monster.Types",Queue);export{Monster,Queue};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Queue extends Base{constructor(){super();this.data=[]}isEmpty(){return this.data.length===0}peek(){if(this.isEmpty()){return undefined}return this.data[0]}add(value){this.data.push(value);return this}clear(){this.data=[];return this}poll(){if(this.isEmpty()){return undefined}return this.data.shift()}}assignToNamespace("Monster.Types",Queue);export{Monster,Queue};
diff --git a/packages/monster/dist/modules/types/randomid.js b/packages/monster/dist/modules/types/randomid.js
index 1537e7edae1ed802125435d51245eaf7bc0206c0..bc996df7b8a39e3d71e53b5845dc926414c5b5d5 100644
--- a/packages/monster/dist/modules/types/randomid.js
+++ b/packages/monster/dist/modules/types/randomid.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{random}from"../math/random.js";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"./global.js";import{ID}from"./id.js";let internalCounter=0;class RandomID extends ID{constructor(){super(),internalCounter+=1,this.id=getGlobal().btoa(random(1,1e4)).replace(/=/g,"").replace(/^[0-9]+/,"X")+internalCounter}}assignToNamespace("Monster.Types",RandomID);export{Monster,RandomID};
\ No newline at end of file
+'use strict';import{random}from"../math/random.js";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"./global.js";import{ID}from"./id.js";let internalCounter=0;class RandomID extends ID{constructor(){super();internalCounter+=1;this.id=getGlobal().btoa(random(1,10000)).replace(/=/g,"").replace(/^[0-9]+/,"X")+internalCounter}}assignToNamespace("Monster.Types",RandomID);export{Monster,RandomID};
diff --git a/packages/monster/dist/modules/types/stack.js b/packages/monster/dist/modules/types/stack.js
index efbe92589d51115a4891ad0ac97dec447bf045f5..6310ee21b64b8bfdb5d328ed6398d551194eb8f1 100644
--- a/packages/monster/dist/modules/types/stack.js
+++ b/packages/monster/dist/modules/types/stack.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Stack extends Base{constructor(){super(),this.data=[]}isEmpty(){return 0===this.data.length}peek(){if(!this.isEmpty())return this.data?.[this.data.length-1]}push(t){return this.data.push(t),this}clear(){return this.data=[],this}pop(){if(!this.isEmpty())return this.data.pop()}}assignToNamespace("Monster.Types",Stack);export{Monster,Stack};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Stack extends Base{constructor(){super();this.data=[]}isEmpty(){return this.data.length===0}peek(){if(this.isEmpty()){return undefined}return this.data?.[this.data.length-1]}push(value){this.data.push(value);return this}clear(){this.data=[];return this}pop(){if(this.isEmpty()){return undefined}return this.data.pop()}}assignToNamespace("Monster.Types",Stack);export{Monster,Stack};
diff --git a/packages/monster/dist/modules/types/tokenlist.js b/packages/monster/dist/modules/types/tokenlist.js
index 5462f1785eff9aca25fa44e2163dd60b5bfb14f6..e53221bea7649aa65e85e7bd5296c8d5f8e6338d 100644
--- a/packages/monster/dist/modules/types/tokenlist.js
+++ b/packages/monster/dist/modules/types/tokenlist.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isIterable,isString}from"../types/is.js";import{validateFunction,validateString}from"../types/validate.js";import{Base}from"./base.js";class TokenList extends Base{constructor(t){super(),this.tokens=new Set,void 0!==t&&this.add(t)}getIterator(){return this[Symbol.iterator]()}[Symbol.iterator](){let t=0,e=this.entries();return{next:()=>t<e.length?{value:e?.[t++],done:!1}:{done:!0}}}contains(r){if(isString(r)){r=r.trim();let e=0;return r.split(" ").forEach(t=>!1!==this.tokens.has(t.trim())&&void e++),0<e}if(isIterable(r)){let t=0;for(var e of r){if(validateString(e),!1===this.tokens.has(e.trim()))return!1;t++}return 0<t}return!1}add(t){if(isString(t))t.split(" ").forEach(t=>{this.tokens.add(t.trim())});else if(isIterable(t))for(var e of t)validateString(e),this.tokens.add(e.trim());else if(void 0!==t)throw new TypeError("unsupported value");return this}clear(){return this.tokens.clear(),this}remove(t){if(isString(t))t.split(" ").forEach(t=>{this.tokens.delete(t.trim())});else if(isIterable(t))for(var e of t)validateString(e),this.tokens.delete(e.trim());else if(void 0!==t)throw new TypeError("unsupported value");return this}replace(t,e){if(validateString(t),validateString(e),!this.contains(t))return this;let r=Array.from(this.tokens);t=r.indexOf(t);return-1===t||(r.splice(t,1,e),this.tokens=new Set,this.add(r)),this}toggle(t){if(isString(t))t.split(" ").forEach(t=>{toggleValue.call(this,t)});else if(isIterable(t))for(var e of t)toggleValue.call(this,e);else if(void 0!==t)throw new TypeError("unsupported value");return this}entries(){return Array.from(this.tokens)}forEach(t){return validateFunction(t),this.tokens.forEach(t),this}toString(){return this.entries().join(" ")}}function toggleValue(t){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");return validateString(t),t=t.trim(),this.contains(t)?this.remove(t):this.add(t),this}assignToNamespace("Monster.Types",TokenList);export{Monster,TokenList};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isIterable,isString}from"../types/is.js";import{validateFunction,validateString}from"../types/validate.js";import{Base}from"./base.js";class TokenList extends Base{constructor(init){super();this.tokens=new Set;if(typeof init!=="undefined"){this.add(init)}}getIterator(){return this[Symbol.iterator]()}[Symbol.iterator](){let index=0;let entries=this.entries();return{next:()=>{if(index<entries.length){return{value:entries?.[index++],done:false}}else{return{done:true}}}}}contains(value){if(isString(value)){value=value.trim();let counter=0;value.split(" ").forEach(token=>{if(this.tokens.has(token.trim())===false)return false;counter++});return counter>0?true:false}if(isIterable(value)){let counter=0;for(let token of value){validateString(token);if(this.tokens.has(token.trim())===false)return false;counter++}return counter>0?true:false}return false}add(value){if(isString(value)){value.split(" ").forEach(token=>{this.tokens.add(token.trim())})}else if(isIterable(value)){for(let token of value){validateString(token);this.tokens.add(token.trim())}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}clear(){this.tokens.clear();return this}remove(value){if(isString(value)){value.split(" ").forEach(token=>{this.tokens.delete(token.trim())})}else if(isIterable(value)){for(let token of value){validateString(token);this.tokens.delete(token.trim())}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}replace(token,newToken){validateString(token);validateString(newToken);if(!this.contains(token)){return this}let a=Array.from(this.tokens);let i=a.indexOf(token);if(i===-1)return this;a.splice(i,1,newToken);this.tokens=new Set;this.add(a);return this}toggle(value){if(isString(value)){value.split(" ").forEach(token=>{toggleValue.call(this,token)})}else if(isIterable(value)){for(let token of value){toggleValue.call(this,token)}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}entries(){return Array.from(this.tokens)}forEach(callback){validateFunction(callback);this.tokens.forEach(callback);return this}toString(){return this.entries().join(" ")}}function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");validateString(token);token=token.trim();if(this.contains(token)){this.remove(token);return this}this.add(token);return this}assignToNamespace("Monster.Types",TokenList);export{Monster,TokenList};
diff --git a/packages/monster/dist/modules/types/typeof.js b/packages/monster/dist/modules/types/typeof.js
index d6b23aa83d4cf60dd09cc22f1e19189736393d19..da97dc721b4bbfd97139f74477cc1490e0545b11 100644
--- a/packages/monster/dist/modules/types/typeof.js
+++ b/packages/monster/dist/modules/types/typeof.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";function typeOf(t){let e={}.toString.call(t).match(/\s([a-zA-Z]+)/)[1];return"Object"===e&&(t=/^(class|function)\s+(\w+)/.exec(t.constructor.toString()),e=t&&2<t.length?t[2]:""),e.toLowerCase()}assignToNamespace("Monster.Types",typeOf);export{Monster,typeOf};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";function typeOf(value){let type={}.toString.call(value).match(/\s([a-zA-Z]+)/)[1];if("Object"===type){const results=/^(class|function)\s+(\w+)/.exec(value.constructor.toString());type=results&&results.length>2?results[2]:""}return type.toLowerCase()}assignToNamespace("Monster.Types",typeOf);export{Monster,typeOf};
diff --git a/packages/monster/dist/modules/types/uniquequeue.js b/packages/monster/dist/modules/types/uniquequeue.js
index 39d0f2e2d846b38c624b3d9268644f3812fd14b5..5f17c46b9540056c3f5da9d76ee1392ab2f99533 100644
--- a/packages/monster/dist/modules/types/uniquequeue.js
+++ b/packages/monster/dist/modules/types/uniquequeue.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Queue}from"./queue.js";import{validateObject}from"./validate.js";class UniqueQueue extends Queue{constructor(){super(),this.unique=new WeakSet}add(e){return validateObject(e),this.unique.has(e)||(this.unique.add(e),super.add(e)),this}clear(){return super.clear(),this.unique=new WeakSet,this}poll(){if(!this.isEmpty()){var e=this.data.shift();return this.unique.delete(e),e}}}assignToNamespace("Monster.Types",UniqueQueue);export{Monster,UniqueQueue};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Queue}from"./queue.js";import{validateObject}from"./validate.js";class UniqueQueue extends Queue{constructor(){super();this.unique=new WeakSet}add(value){validateObject(value);if(!this.unique.has(value)){this.unique.add(value);super.add(value)}return this}clear(){super.clear();this.unique=new WeakSet;return this}poll(){if(this.isEmpty()){return undefined}let value=this.data.shift();this.unique.delete(value);return value}}assignToNamespace("Monster.Types",UniqueQueue);export{Monster,UniqueQueue};
diff --git a/packages/monster/dist/modules/types/validate.js b/packages/monster/dist/modules/types/validate.js
index 4b5367b73dee1483001897800b75b2b956161f1d..c26011216261e8fa9a424e51bd80fa46166333f4 100644
--- a/packages/monster/dist/modules/types/validate.js
+++ b/packages/monster/dist/modules/types/validate.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isBoolean,isFunction,isInstance,isInteger,isIterable,isObject,isPrimitive,isString,isSymbol}from"./is.js";function validateIterable(e){if(!isIterable(e))throw new TypeError("value is not iterable");return e}function validatePrimitive(e){if(!isPrimitive(e))throw new TypeError("value is not a primitive");return e}function validateBoolean(e){if(!isBoolean(e))throw new TypeError("value is not a boolean");return e}function validateString(e){if(!isString(e))throw new TypeError("value is not a string");return e}function validateObject(e){if(!isObject(e))throw new TypeError("value is not a object");return e}function validateInstance(e,i){if(isInstance(e,i))return e;{let e="";throw(isObject(i)||isFunction(i))&&(e=i?.name),e=e&&" "+e,new TypeError("value is not an instance of"+e)}}function validateArray(e){if(!isArray(e))throw new TypeError("value is not an array");return e}function validateSymbol(e){if(!isSymbol(e))throw new TypeError("value is not an symbol");return e}function validateFunction(e){if(!isFunction(e))throw new TypeError("value is not a function");return e}function validateInteger(e){if(!isInteger(e))throw new TypeError("value is not an integer");return e}assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable,validateInteger);export{Monster,validatePrimitive,validateBoolean,validateString,validateObject,validateInstance,validateArray,validateFunction,validateIterable,validateInteger,validateSymbol};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{isArray,isBoolean,isFunction,isInstance,isInteger,isIterable,isObject,isPrimitive,isString,isSymbol}from"./is.js";function validateIterable(value){if(!isIterable(value)){throw new TypeError("value is not iterable")}return value}function validatePrimitive(value){if(!isPrimitive(value)){throw new TypeError("value is not a primitive")}return value}function validateBoolean(value){if(!isBoolean(value)){throw new TypeError("value is not a boolean")}return value}function validateString(value){if(!isString(value)){throw new TypeError("value is not a string")}return value}function validateObject(value){if(!isObject(value)){throw new TypeError("value is not a object")}return value}function validateInstance(value,instance){if(!isInstance(value,instance)){let n="";if(isObject(instance)||isFunction(instance)){n=instance?.["name"]}if(n){n=" "+n}throw new TypeError("value is not an instance of"+n)}return value}function validateArray(value){if(!isArray(value)){throw new TypeError("value is not an array")}return value}function validateSymbol(value){if(!isSymbol(value)){throw new TypeError("value is not an symbol")}return value}function validateFunction(value){if(!isFunction(value)){throw new TypeError("value is not a function")}return value}function validateInteger(value){if(!isInteger(value)){throw new TypeError("value is not an integer")}return value}assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable,validateInteger);export{Monster,validatePrimitive,validateBoolean,validateString,validateObject,validateInstance,validateArray,validateFunction,validateIterable,validateInteger,validateSymbol};
diff --git a/packages/monster/dist/modules/types/version.js b/packages/monster/dist/modules/types/version.js
index 86bbdcae6537fb0584658515289d6f99d78821cf..76be4c3e3e047bf1364b8efca8507a9cc6b653f6 100644
--- a/packages/monster/dist/modules/types/version.js
+++ b/packages/monster/dist/modules/types/version.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Version extends Base{constructor(r,t,e){var s;if(super(),"string"==typeof r&&void 0===t&&void 0===e&&(s=r.toString().split("."),r=parseInt(s[0]||0),t=parseInt(s[1]||0),e=parseInt(s[2]||0)),void 0===r)throw new Error("major version is undefined");if(void 0===t&&(t=0),void 0===e&&(e=0),this.major=parseInt(r),this.minor=parseInt(t),this.patch=parseInt(e),isNaN(this.major))throw new Error("major is not a number");if(isNaN(this.minor))throw new Error("minor is not a number");if(isNaN(this.patch))throw new Error("patch is not a number")}toString(){return this.major+"."+this.minor+"."+this.patch}compareTo(r){if("string"!=typeof(r=r instanceof Version?r.toString():r))throw new Error("type exception");if(r===this.toString())return 0;var t=[this.major,this.minor,this.patch],e=r.split("."),s=Math.max(t.length,e.length);for(let r=0;r<s;r+=1){if(t[r]&&!e[r]&&0<parseInt(t[r])||parseInt(t[r])>parseInt(e[r]))return 1;if(e[r]&&!t[r]&&0<parseInt(e[r])||parseInt(t[r])<parseInt(e[r]))return-1}return 0}}assignToNamespace("Monster.Types",Version);let monsterVersion;function getVersion(){return monsterVersion instanceof Version||(monsterVersion=new Version("1.19.0")),monsterVersion}assignToNamespace("Monster",getVersion);export{Monster,Version,getVersion};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"./base.js";class Version extends Base{constructor(major,minor,patch){super();if(typeof major==="string"&&minor===undefined&&patch===undefined){let parts=major.toString().split(".");major=parseInt(parts[0]||0);minor=parseInt(parts[1]||0);patch=parseInt(parts[2]||0)}if(major===undefined){throw new Error("major version is undefined")}if(minor===undefined){minor=0}if(patch===undefined){patch=0}this.major=parseInt(major);this.minor=parseInt(minor);this.patch=parseInt(patch);if(isNaN(this.major)){throw new Error("major is not a number")}if(isNaN(this.minor)){throw new Error("minor is not a number")}if(isNaN(this.patch)){throw new Error("patch is not a number")}}toString(){return this.major+"."+this.minor+"."+this.patch}compareTo(version){if(version instanceof Version){version=version.toString()}if(typeof version!=="string"){throw new Error("type exception")}if(version===this.toString()){return 0}let a=[this.major,this.minor,this.patch];let b=version.split(".");let len=Math.max(a.length,b.length);for(let i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i])){return 1}else if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i])){return-1}}return 0}}assignToNamespace("Monster.Types",Version);let monsterVersion;function getVersion(){if(monsterVersion instanceof Version){return monsterVersion}monsterVersion=new Version("1.19.0");return monsterVersion}assignToNamespace("Monster",getVersion);export{Monster,Version,getVersion};
diff --git a/packages/monster/dist/modules/util/clone.js b/packages/monster/dist/modules/util/clone.js
index 60fd61151bfa433468466aeef2ea7b81a3de179a..180f5ecc2eb748c4e98a454a34f9a5f0063a67ce 100644
--- a/packages/monster/dist/modules/util/clone.js
+++ b/packages/monster/dist/modules/util/clone.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";import{isArray,isFunction,isObject,isPrimitive}from"../types/is.js";function clone(n){if(null===n)return n;if(isPrimitive(n))return n;if(isFunction(n))return n;if(isArray(n)){let e=[];for(var t=0,r=n.length;t<r;t++)e[t]=clone(n[t]);return e}if(isObject(n)){if(n instanceof Date){let e=new Date;return e.setTime(n.getTime()),e}if("undefined"!=typeof Element&&n instanceof Element)return n;if("undefined"!=typeof HTMLDocument&&n instanceof HTMLDocument)return n;if("undefined"!=typeof DocumentFragment&&n instanceof DocumentFragment)return n;if(n===getGlobal())return n;if("undefined"!=typeof globalContext&&n===globalContext)return n;if("undefined"!=typeof window&&n===window)return n;if("undefined"!=typeof document&&n===document)return n;if("undefined"!=typeof navigator&&n===navigator)return n;if("undefined"!=typeof JSON&&n===JSON)return n;try{if(n instanceof Proxy)return n}catch(e){}return cloneObject(n)}throw new Error("unable to clone obj! its type isn't supported.")}function cloneObject(e){var n,t;if(e.hasOwnProperty("getClone"),"function"===e.getClone)return e.getClone();for(t in n={},"function"==typeof e.constructor&&"function"==typeof e.constructor.call&&(n=new e.constructor),e)e.hasOwnProperty(t)&&(Monster.Types.isPrimitive(e[t])?n[t]=e[t]:n[t]=clone(e[t]));return n}assignToNamespace("Monster.Util",clone);export{Monster,clone};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{getGlobal}from"../types/global.js";import{isArray,isFunction,isObject,isPrimitive}from"../types/is.js";function clone(obj){if(null===obj){return obj}if(isPrimitive(obj)){return obj}if(isFunction(obj)){return obj}if(isArray(obj)){let copy=[];for(var i=0,len=obj.length;i<len;i++){copy[i]=clone(obj[i])}return copy}if(isObject(obj)){if(obj instanceof Date){let copy=new Date;copy.setTime(obj.getTime());return copy}if(typeof Element!=="undefined"&&obj instanceof Element)return obj;if(typeof HTMLDocument!=="undefined"&&obj instanceof HTMLDocument)return obj;if(typeof DocumentFragment!=="undefined"&&obj instanceof DocumentFragment)return obj;if(obj===getGlobal())return obj;if(typeof globalContext!=="undefined"&&obj===globalContext)return obj;if(typeof window!=="undefined"&&obj===window)return obj;if(typeof document!=="undefined"&&obj===document)return obj;if(typeof navigator!=="undefined"&&obj===navigator)return obj;if(typeof JSON!=="undefined"&&obj===JSON)return obj;try{if(obj instanceof Proxy){return obj}}catch(e){}return cloneObject(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function cloneObject(obj){var copy;if(typeof obj.hasOwnProperty("getClone")&&obj.getClone==="function"){return obj.getClone()}copy={};if(typeof obj.constructor==="function"&&typeof obj.constructor.call==="function"){copy=new obj.constructor}for(let key in obj){if(!obj.hasOwnProperty(key)){continue}if(Monster.Types.isPrimitive(obj[key])){copy[key]=obj[key];continue}copy[key]=clone(obj[key])}return copy}assignToNamespace("Monster.Util",clone);export{Monster,clone};
diff --git a/packages/monster/dist/modules/util/comparator.js b/packages/monster/dist/modules/util/comparator.js
index d7df9b288d3b062d25ab7110920f5436308bbb74..02ac1bf5e7d1625c98974ec1cdcc5fa71c7a0c6c 100644
--- a/packages/monster/dist/modules/util/comparator.js
+++ b/packages/monster/dist/modules/util/comparator.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isFunction}from"../types/is.js";class Comparator extends Base{constructor(r){if(super(),isFunction(r))this.compare=r;else{if(void 0!==r)throw new TypeError("unsupported type");this.compare=function(r,e){if(typeof r!=typeof e)throw new TypeError("impractical comparison");return r===e?0:r<e?-1:1}}}reverse(){const s=this.compare;return this.compare=(r,e)=>s(e,r),this}equal(r,e){return 0===this.compare(r,e)}greaterThan(r,e){return 0<this.compare(r,e)}greaterThanOrEqual(r,e){return this.greaterThan(r,e)||this.equal(r,e)}lessThanOrEqual(r,e){return this.lessThan(r,e)||this.equal(r,e)}lessThan(r,e){return this.compare(r,e)<0}}assignToNamespace("Monster.Util",Comparator);export{Monster,Comparator};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{Base}from"../types/base.js";import{isFunction}from"../types/is.js";class Comparator extends Base{constructor(callback){super();if(isFunction(callback)){this.compare=callback}else if(callback!==undefined){throw new TypeError("unsupported type")}else{this.compare=function(a,b){if(typeof a!==typeof b){throw new TypeError("impractical comparison")}if(a===b){return 0}return a<b?-1:1}}}reverse(){const original=this.compare;this.compare=(a,b)=>original(b,a);return this}equal(a,b){return this.compare(a,b)===0}greaterThan(a,b){return this.compare(a,b)>0}greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}lessThan(a,b){return this.compare(a,b)<0}}assignToNamespace("Monster.Util",Comparator);export{Monster,Comparator};
diff --git a/packages/monster/dist/modules/util/freeze.js b/packages/monster/dist/modules/util/freeze.js
index 37334fb32c25c9d62f729ddaeae29be0a9bda81f..56751b7d1b4b2a94ea581e6906c267f80ca7a0ab 100644
--- a/packages/monster/dist/modules/util/freeze.js
+++ b/packages/monster/dist/modules/util/freeze.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";import{assignToNamespace,Monster}from"../namespace.js";import{validateObject}from"../types/validate.js";function deepFreeze(e){var t;validateObject(e);for(t of Object.getOwnPropertyNames(e)){var r=e[t];e[t]=r&&"object"==typeof r?deepFreeze(r):r}return Object.freeze(e)}assignToNamespace("Monster.Util",deepFreeze);export{Monster,deepFreeze};
\ No newline at end of file
+'use strict';import{assignToNamespace,Monster}from"../namespace.js";import{validateObject}from"../types/validate.js";function deepFreeze(object){validateObject(object);var propNames=Object.getOwnPropertyNames(object);for(let name of propNames){let value=object[name];object[name]=value&&typeof value==="object"?deepFreeze(value):value}return Object.freeze(object)}assignToNamespace("Monster.Util",deepFreeze);export{Monster,deepFreeze};
diff --git a/packages/monster/dist/modules/util/namespace.js b/packages/monster/dist/modules/util/namespace.js
index 599eade9197b1feaabfdf2a027c3b0295d1ed48b..791155a1f3c672b18db4d3b86e48e14895ce6f6a 100644
--- a/packages/monster/dist/modules/util/namespace.js
+++ b/packages/monster/dist/modules/util/namespace.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-"use strict";const namespace="Monster.Util";export{namespace};
\ No newline at end of file
+'use strict';export const namespace="Monster.Util";
diff --git a/packages/monster/dist/monster.dev.js b/packages/monster/dist/monster.dev.js
index 26d561c68970397e48864f27d68b3301fbf74034..098334c989207a139d8e1b59109acbb4dfd5966f 100644
--- a/packages/monster/dist/monster.dev.js
+++ b/packages/monster/dist/monster.dev.js
@@ -10462,8 +10462,8 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export */   "fireEvent": function() { return /* binding */ fireEvent; }
 /* harmony export */ });
 /* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var _types_validate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14);
-/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32);
+/* harmony import */ var _types_is_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9);
+/* harmony import */ var _types_validate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14);
 /* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41);
 
 /**
@@ -10506,7 +10506,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
  * @copyright schukai GmbH
  * @memberOf Monster.DOM
  * @throws {TypeError} value is not an instance of HTMLElement or HTMLCollection
- * @summary Construct and send and event 
+ * @summary Construct and send and event
  */
 
 function fireEvent(element, type) {
@@ -10518,7 +10518,7 @@ function fireEvent(element, type) {
       return;
     }
 
-    var event = new Event((0,_types_validate_js__WEBPACK_IMPORTED_MODULE_1__.validateString)(type), {
+    var event = new Event((0,_types_validate_js__WEBPACK_IMPORTED_MODULE_2__.validateString)(type), {
       bubbles: true,
       cancelable: true
     });
@@ -10543,7 +10543,8 @@ function fireEvent(element, type) {
 }
 /**
  * This function gets the path `Event.composedPath()` from an event and tries to find the next element
- * up the tree `element.closest()` with the attribute and value. If no value is specified, only the attribute is searched.
+ * up the tree `element.closest()` with the attribute and value. If no value, or a value that is undefined or null, 
+ * is specified, only the attribute is searched.
  *
  * You can call the function via the monster namespace `new Monster.DOM.findTargetElementFromEvent()`.
  *
@@ -10566,7 +10567,7 @@ function fireEvent(element, type) {
  * @since 1.14.0
  * @param {Event} event
  * @param {string} attributeName
- * @param {string|null} attributeValue
+ * @param {string|null|undefined} attributeValue
  * @throws {Error} unsupported event
  * @memberOf Monster.DOM
  * @throws {TypeError} value is not a string
@@ -10576,17 +10577,23 @@ function fireEvent(element, type) {
 
 
 function findTargetElementFromEvent(event, attributeName, attributeValue) {
-  (0,_types_validate_js__WEBPACK_IMPORTED_MODULE_1__.validateInstance)(event, Event);
+  (0,_types_validate_js__WEBPACK_IMPORTED_MODULE_2__.validateInstance)(event, Event);
 
   if (typeof event.composedPath !== 'function') {
     throw new Error('unsupported event');
   }
 
   var path = event.composedPath();
-  var element = path === null || path === void 0 ? void 0 : path[0];
+  var element = path === null || path === void 0 ? void 0 : path[0]; // closest cannot be used here, because closest is not correct for slotted elements
 
-  if (element instanceof HTMLElement) {
-    return (0,_attributes_js__WEBPACK_IMPORTED_MODULE_2__.findClosestByAttribute)(element, attributeName, attributeValue);
+  if ((0,_types_is_js__WEBPACK_IMPORTED_MODULE_1__.isArray)(path)) {
+    for (var i = 0; i < path.length; i++) {
+      var o = path[i];
+
+      if (o instanceof HTMLElement && o.hasAttribute(attributeName) && (attributeValue === undefined || o.getAttribute(attributeName) === attributeValue)) {
+        return o;
+      }
+    }
   }
 
   return undefined;
diff --git a/packages/monster/dist/monster.dev.js.map b/packages/monster/dist/monster.dev.js.map
index 4b947d35a65fa0af9084fc1c0481a39fec3437d5..5d0bd968dcb8960d5551ea3032901e39d7f9490a 100644
--- a/packages/monster/dist/monster.dev.js.map
+++ b/packages/monster/dist/monster.dev.js.map
@@ -1 +1 @@
-{"version":3,"file":"monster.dev.js","mappings":"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B;;;;;;;;;;;;;;;ACxDa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQd,KAAR,EAAe;AACX,UAAIR,qDAAO,CAACQ,KAAD,CAAX,EAAoB;AAChB,eAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;AAED,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAdiBD;;AAkBtBvB,gEAAiB,CAAC,qBAAD,EAAwBsC,OAAxB,CAAjB;;;;;;;;;;;;;;;;;;;;;;AChEa;AAEb;AACA;AACA;;;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASE,UAAT,CAAoBhB,KAApB,EAA2B;AACvB,MAAIA,KAAK,KAAK3B,SAAd,EAAyB,OAAO,KAAP;AACzB,MAAI2B,KAAK,KAAK,IAAd,EAAoB,OAAO,KAAP;AACpB,SAAO,QAAOA,KAAP,aAAOA,KAAP,uBAAOA,KAAK,CAAGiB,MAAM,CAACC,QAAV,CAAZ,MAAoC,UAA3C;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,WAAT,CAAqBnB,KAArB,EAA4B;AACxB,MAAIoB,IAAJ;;AAEA,MAAIpB,KAAK,KAAK3B,SAAV,IAAuB2B,KAAK,KAAK,IAArC,EAA2C;AACvC,WAAO,IAAP;AACH;;AAEDoB,EAAAA,IAAI,WAAUpB,KAAV,CAAJ;;AAEA,MAAIoB,IAAI,KAAK,QAAT,IAAqBA,IAAI,KAAK,QAA9B,IAA0CA,IAAI,KAAK,SAAnD,IAAgEA,IAAI,KAAK,QAA7E,EAAuF;AACnF,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,QAAT,CAAkBrB,KAAlB,EAAyB;AACrB,SAAQ,qBAAoBA,KAApB,CAAD,GAA8B,IAA9B,GAAqC,KAA5C;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsB,SAAT,CAAmBtB,KAAnB,EAA0B;AAEtB,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAhC,EAAuC;AACnC,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuB,QAAT,CAAkBvB,KAAlB,EAAyB;AACrB,MAAIA,KAAK,KAAK3B,SAAV,IAAuB,OAAO2B,KAAP,KAAiB,QAA5C,EAAsD;AAClD,WAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwB,QAAT,CAAkBxB,KAAlB,EAAyB;AAErB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAImB,WAAW,CAACnB,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,QAAOA,KAAP,MAAiB,QAArB,EAA+B;AAC3B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASyB,UAAT,CAAoBzB,KAApB,EAA2B0B,QAA3B,EAAqC;AAEjC,MAAI,CAACF,QAAQ,CAACxB,KAAD,CAAb,EAAsB,OAAO,KAAP;AACtB,MAAI,CAAC2B,UAAU,CAACD,QAAD,CAAf,EAA2B,OAAO,KAAP;AAC3B,MAAI,CAACA,QAAQ,CAACzC,cAAT,CAAwB,WAAxB,CAAL,EAA2C,OAAO,KAAP;AAC3C,SAAQe,KAAK,YAAY0B,QAAlB,GAA8B,IAA9B,GAAqC,KAA5C;AAEH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASlC,OAAT,CAAiBQ,KAAjB,EAAwB;AACpB,MAAIT,KAAK,CAACC,OAAN,CAAcQ,KAAd,CAAJ,EAA0B;AACtB,WAAO,IAAP;AACH;;AACD,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2B,UAAT,CAAoB3B,KAApB,EAA2B;AACvB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAImB,WAAW,CAACnB,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;AAC7B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AAEH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS4B,SAAT,CAAmB5B,KAAnB,EAA0B;AACtB,SAAO6B,MAAM,CAACD,SAAP,CAAiB5B,KAAjB,CAAP;AACH;;AAGDxB,gEAAiB,CAAC,eAAD,EAAkB2C,WAAlB,EAA+BG,SAA/B,EAA0CC,QAA1C,EAAoDC,QAApD,EAA8DhC,OAA9D,EAAuEmC,UAAvE,EAAmFX,UAAnF,EAA+FY,SAA/F,EAA0GP,QAA1G,CAAjB;;;;;;;;;;;;;;;AC7Ya;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMS;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ9B,KAAR,EAAe;AACX,UAAIwB,sDAAQ,CAACxB,KAAD,CAAZ,EAAqB;AACjB,eAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;AAED,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAdkBD;;AAkBvBvB,gEAAiB,CAAC,qBAAD,EAAwBsD,QAAxB,CAAjB;;;;;;;;;;;;;;ACjEa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ/B,KAAR,EAAe;AACX,UAAIgC,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI/B,OAAJ,CAAY,UAAUc,OAAV,EAAmBb,MAAnB,EAA2B;AAC1C,YAAI+B,CAAJ,EAAOC,CAAP;AAEAF,QAAAA,IAAI,CAACzB,QAAL,CAAcK,OAAd,CAAsBZ,KAAtB,EACKmC,IADL,CACU,YAAY;AACdpB,UAAAA,OAAO;AACV,SAHL,EAGOqB,KAHP,CAGa,YAAY;AACrBH,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAIC,CAAC,KAAK,KAAV,EAAiB;AACbhC,YAAAA,MAAM;AACT;AACJ,SATD;AAWA8B,QAAAA,IAAI,CAACxB,QAAL,CAAcI,OAAd,CAAsBZ,KAAtB,EACKmC,IADL,CACU,YAAY;AACdpB,UAAAA,OAAO;AACV,SAHL,EAGOqB,KAHP,CAGa,YAAY;AACrBF,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAID,CAAC,KAAK,KAAV,EAAiB;AACb/B,YAAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoBI;;AAyCzB9B,gEAAiB,CAAC,qBAAD,EAAwBuD,UAAxB,CAAjB;;;;;;;;;;;;;;AC1Fa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMM;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQrC,KAAR,EAAe;AACX,aAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;;;EAVeD;;AAcpBvB,gEAAiB,CAAC,qBAAD,EAAwB6D,KAAxB,CAAjB;;;;;;;;;;;;;;;;;ACxDa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASM,QAAT,CAAkBC,OAAlB,EAA2BC,QAA3B,EAAqCC,aAArC,EAAoDC,WAApD,EAAiEC,MAAjE,EAAyE;AAErE,MAAMC,MAAM,GAAG,IAAIC,GAAJ,EAAf;AAEA,MAAIC,GAAJ;;AACA,MAAIxB,wDAAU,CAACkB,QAAD,CAAd,EAA0B;AACtBM,IAAAA,GAAG,GAAGN,QAAQ,CAACD,OAAD,CAAd;;AACA,QAAI,EAAEO,GAAG,YAAYD,GAAjB,CAAJ,EAA2B;AACvB,YAAM,IAAIzC,SAAJ,CAAc,yCAAd,CAAN;AACH;AACJ,GALD,MAKO,IAAIc,sDAAQ,CAACsB,QAAD,CAAZ,EAAwB;AAC3BM,IAAAA,GAAG,GAAG,IAAID,GAAJ,EAAN;AACAE,IAAAA,YAAY,CAACC,IAAb,CAAkBF,GAAlB,EAAuBP,OAAvB,EAAgCC,QAAhC;AACH,GAHM,MAGA;AACH,UAAM,IAAIpC,SAAJ,CAAc,0CAAd,CAAN;AACH;;AAED,MAAI,EAAE0C,GAAG,YAAYD,GAAjB,CAAJ,EAA2B;AACvB,WAAOD,MAAP;AACH;;AAGDE,EAAAA,GAAG,CAACG,OAAJ,CAAY,UAACC,CAAD,EAAIC,CAAJ,EAAOC,CAAP,EAAa;AACrB,QAAI9B,wDAAU,CAACqB,MAAD,CAAd,EAAwB;AACpB,UAAIA,MAAM,CAACK,IAAP,CAAYI,CAAZ,EAAeF,CAAf,EAAkBC,CAAlB,MAAyB,IAA7B,EAAmC;AACtC;;AAEDA,IAAAA,CAAC,GAAGE,KAAK,CAACH,CAAD,EAAIR,WAAJ,EAAiBS,CAAjB,CAAT;AACAD,IAAAA,CAAC,GAAGG,KAAK,CAACH,CAAD,EAAIT,aAAJ,CAAT;AAEAG,IAAAA,MAAM,CAACU,GAAP,CAAWH,CAAX,EAAcD,CAAd;AACH,GATD;AAWA,SAAON,MAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,YAAT,CAAsBR,OAAtB,EAA+BC,QAA/B,EAAyCe,GAAzC,EAA8CC,SAA9C,EAAyD;AAErD,MAAMZ,MAAM,GAAG,IAAf;AACA,MAAMa,UAAU,GAAG,IAAIZ,GAAJ,EAAnB;AAEA,MAAMa,YAAY,GAAGd,MAAM,CAACe,IAA5B;AAEA,MAAIJ,GAAG,KAAKvF,SAAZ,EAAuBuF,GAAG,GAAG,EAAN;AAEvB,MAAIjE,KAAK,GAAGkD,QAAQ,CAACjE,KAAT,CAAe4D,qDAAf,CAAZ;AACA,MAAI9D,OAAO,GAAG,EAAd;AAAA,MAAkBuF,WAAW,GAAG,EAAhC;;AACA,KAAG;AAECvF,IAAAA,OAAO,GAAGiB,KAAK,CAACuE,KAAN,EAAV;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiBzF,OAAjB;;AAEA,QAAIA,OAAO,KAAKgE,oDAAhB,EAA0B;AAEtB,UAAI0B,MAAM,GAAG,IAAI3B,sDAAJ,CAAeG,OAAf,CAAb;AACA,UAAIO,GAAG,SAAP;;AACA,UAAI;AACAA,QAAAA,GAAG,GAAGiB,MAAM,CAACC,MAAP,CAAcJ,WAAW,CAACK,IAAZ,CAAiB9B,qDAAjB,CAAd,CAAN;AACH,OAFD,CAEE,OAAO9C,CAAP,EAAU;AACR,YAAIuC,CAAC,GAAGvC,CAAR;AACAyD,QAAAA,GAAG,GAAG,IAAID,GAAJ,EAAN;AACH;;AATqB,iDAYDC,GAZC;AAAA;;AAAA;AAAA;AAAA;AAAA,cAYVK,CAZU;AAAA,cAYPe,CAZO;;AAclB,cAAIC,OAAO,GAAGjC,qDAAK,CAACqB,GAAD,CAAnB;AAEAK,UAAAA,WAAW,CAACd,GAAZ,CAAgB,UAAClB,CAAD,EAAO;AACnBuC,YAAAA,OAAO,CAACL,IAAR,CAAclC,CAAC,KAAKS,oDAAP,GAAmBc,CAAnB,GAAuBvB,CAApC;AACH,WAFD;AAIA,cAAIwC,EAAE,GAAGD,OAAO,CAACF,IAAR,CAAa9B,qDAAb,CAAT;AACA,cAAIkC,GAAG,GAAGtB,YAAY,CAACC,IAAb,CAAkBJ,MAAlB,EAA0BsB,CAA1B,EAA6B5E,KAAK,CAAC2E,IAAN,CAAW9B,qDAAX,CAA7B,EAAoDgC,OAApD,EAA6DD,CAA7D,CAAV;;AAEA,cAAI/C,sDAAQ,CAACkD,GAAD,CAAZ,EAAmB;AACfA,YAAAA,GAAG,CAAC,GAAD,CAAH,GAAWb,SAAX;AACH;;AAEDC,UAAAA,UAAU,CAACH,GAAX,CAAec,EAAf,EAAmBC,GAAnB;AA3BkB;;AAYtB,4DAA0B;AAAA;AAgBzB;AA5BqB;AAAA;AAAA;AAAA;AAAA;AA8BzB;AAGJ,GAtCD,QAsCS/E,KAAK,CAACE,MAAN,GAAe,CAtCxB,EAXqD,CAmDrD;;;AACA,MAAIkE,YAAY,KAAKd,MAAM,CAACe,IAA5B,EAAkC;AAAA,gDACTF,UADS;AAAA;;AAAA;AAC9B,6DAAiC;AAAA;AAAA,YAArBN,CAAqB;AAAA,YAAlBe,CAAkB;;AAC7BtB,QAAAA,MAAM,CAACU,GAAP,CAAWH,CAAX,EAAce,CAAd;AACH;AAH6B;AAAA;AAAA;AAAA;AAAA;AAIjC;;AAED,SAAO3B,OAAP;AAEH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASc,KAAT,CAAed,OAAf,EAAwB+B,UAAxB,EAAoCC,YAApC,EAAkD;AAC9C,MAAID,UAAU,KAAKtG,SAAnB,EAA8B,OAAOuG,YAAY,GAAGA,YAAH,GAAkBhC,OAArC;AAC9BN,EAAAA,kEAAc,CAACqC,UAAD,CAAd;;AAEA,MAAME,MAAM,4BAAG,mCAAH;AAAA;AAAA;AAAA,IAAZ;;AACA,MAAMC,KAAK,sBAAOH,UAAU,CAACI,QAAX,CAAoBF,MAApB,CAAP,CAAX;;AAEA,MAAIT,MAAM,GAAG,IAAI3B,sDAAJ,CAAeG,OAAf,CAAb;;AAEA,MAAIkC,KAAK,CAACjF,MAAN,KAAiB,CAArB,EAAwB;AACpB,WAAOuE,MAAM,CAACC,MAAP,CAAcM,UAAd,CAAP;AACH;;AAEDG,EAAAA,KAAK,CAACxB,OAAN,CAAc,UAACrB,CAAD,EAAO;AACjB,QAAI+C,MAAM,GAAG/C,CAAH,aAAGA,CAAH,uBAAGA,CAAC,CAAG,QAAH,CAAd;AACA,QAAIgD,WAAW,GAAGD,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,aAAH,CAAxB;AACA,QAAIC,WAAW,KAAK5G,SAApB,EAA+B;AAE/B,QAAI6G,IAAI,GAAGF,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,MAAH,CAAjB;AAEA,QAAIzB,CAAC,GAAGa,MAAM,CAACC,MAAP,CAAca,IAAd,CAAR;AACA,QAAI3B,CAAC,KAAKlF,SAAV,EAAqBkF,CAAC,GAAGqB,YAAJ;AAErBD,IAAAA,UAAU,GAAGA,UAAU,CAACQ,UAAX,CAAsBF,WAAtB,EAAmC1B,CAAnC,CAAb;AAGH,GAbD;AAeA,SAAOoB,UAAP;AAEH;;AAGDnG,gEAAiB,CAAC,cAAD,EAAiBmE,QAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;ACzZa;AAEb;AACA;AACA;;AAEA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASyC,gBAAT,CAA0BpF,KAA1B,EAAiC;AAC7B,MAAI,CAACgB,kDAAU,CAAChB,KAAD,CAAf,EAAwB;AACpB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASqF,iBAAT,CAA2BrF,KAA3B,EAAkC;AAC9B,MAAI,CAACmB,mDAAW,CAACnB,KAAD,CAAhB,EAAyB;AACrB,UAAM,IAAIS,SAAJ,CAAc,0BAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsF,eAAT,CAAyBtF,KAAzB,EAAgC;AAC5B,MAAI,CAACsB,iDAAS,CAACtB,KAAD,CAAd,EAAuB;AACnB,UAAM,IAAIS,SAAJ,CAAc,wBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsC,cAAT,CAAwBtC,KAAxB,EAA+B;AAC3B,MAAI,CAACuB,gDAAQ,CAACvB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuF,cAAT,CAAwBvF,KAAxB,EAA+B;AAC3B,MAAI,CAACwB,gDAAQ,CAACxB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwF,gBAAT,CAA0BxF,KAA1B,EAAiC0B,QAAjC,EAA2C;AACvC,MAAI,CAACD,kDAAU,CAACzB,KAAD,EAAQ0B,QAAR,CAAf,EAAkC;AAC9B,QAAI+D,CAAC,GAAG,EAAR;;AACA,QAAIjE,gDAAQ,CAACE,QAAD,CAAR,IAAsBC,kDAAU,CAACD,QAAD,CAApC,EAAgD;AAC5C+D,MAAAA,CAAC,GAAG/D,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAG,MAAH,CAAZ;AACH;;AAED,QAAI+D,CAAJ,EAAO;AACHA,MAAAA,CAAC,GAAG,MAAMA,CAAV;AACH;;AAED,UAAM,IAAIhF,SAAJ,CAAc,gCAAgCgF,CAA9C,CAAN;AACH;;AACD,SAAOzF,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS0F,aAAT,CAAuB1F,KAAvB,EAA8B;AAC1B,MAAI,CAACR,+CAAO,CAACQ,KAAD,CAAZ,EAAqB;AACjB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2F,cAAT,CAAwB3F,KAAxB,EAA+B;AAC3B,MAAI,CAACqB,gDAAQ,CAACrB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,wBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS4F,gBAAT,CAA0B5F,KAA1B,EAAiC;AAC7B,MAAI,CAAC2B,kDAAU,CAAC3B,KAAD,CAAf,EAAwB;AACpB,UAAM,IAAIS,SAAJ,CAAc,yBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AACvG,CAAD,CAAhB;AACA,SAAOA,CAAP;AACH;;AAGDb,gEAAiB,CAAC,eAAD,EAAkBsH,SAAlB,EAA6B2B,eAA7B,EAA8CC,iBAA9C,CAAjB;;;;;;;;;;;;;;;;;;;ACpJa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACO,IAAMlF,SAAS,GAAG,GAAlB;AACP;AACA;AACA;AACA;;AACO,IAAME,QAAQ,GAAG,GAAjB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,sBAAYmF,MAAZ,EAAoB;AAAA;;AAAA;;AAChB;;AAEA,QAAIzG,yDAAW,CAACyG,MAAD,CAAf,EAAyB;AACrB,YAAM,IAAItJ,KAAJ,CAAU,yCAAV,CAAN;AACH;;AAED,UAAKsJ,MAAL,GAAcA,MAAd;AACA,UAAKC,QAAL,GAAgBnF,QAAhB;AARgB;AASnB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYoF,QAAZ,EAAsB;AAClBxF,MAAAA,kEAAc,CAACwF,QAAD,CAAd;AACA,WAAKD,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,CAAUvJ,MAAV,GAAmB,CAA/B,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,cAAKG,KAAL,EAAY;AACR,WAAKoJ,IAAL,CAAUjF,IAAV,CAAenE,KAAf;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAKoJ,IAAL,GAAY,EAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAM;AACF,UAAI,KAAKL,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AACD,aAAO,KAAK+K,IAAL,CAAUR,GAAV,EAAP;AACH;;;;EAhEe9I;;AAqEpBtB,gEAAiB,CAAC,eAAD,EAAkBmJ,KAAlB,CAAjB;;;;;;;;;;;;;;;ACrGa;AAEb;AACA;AACA;;;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS2B,IAAT,CAAcC,KAAd,EAAqBC,MAArB,EAA6B;AACzB,SAAOC,MAAM,CAACF,KAAD,EAAQC,MAAR,CAAb;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,OAAT,CAAiBzH,CAAjB,EAAoBC,CAApB,EAAuBd,IAAvB,EAA6B;AACzB,MAAI5B,qDAAO,CAAC4B,IAAD,CAAX,EAAmB;AACf,QAAMuI,IAAI,GAAG1H,CAAC,CAACpC,MAAF,GAAWqC,CAAC,CAACrC,MAAb,GAAsB,IAAIN,KAAJ,CAAU0C,CAAC,CAACpC,MAAZ,CA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;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AACF;AACJ;AACA;AACA;AACI,uBAAYnG,UAAZ,EAAwB;AAAA;;AAAA;;AACpB;AACArC,IAAAA,kEAAc,CAACqC,UAAD,CAAd;AAEA,UAAKgH,IAAL,GAAYC,WAAW,CAACjH,UAAD,CAAvB;AACA,UAAKkH,OAAL,GAAe,MAAKF,IAAL,CAAUzH,KAAV,EAAf;AACA,UAAK4H,SAAL,GAAiB,IAAI5I,GAAJ,EAAjB;AANoB;AAQvB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYhE,IAAZ,EAAkB+L,QAAlB,EAA4BC,OAA5B,EAAqC;AACjC5I,MAAAA,kEAAc,CAACpD,IAAD,CAAd;AACA0G,MAAAA,oEAAgB,CAACqF,QAAD,CAAhB;;AAEA,UAAIC,OAAO,KAAK7M,SAAhB,EAA2B;AACvBkH,QAAAA,kEAAc,CAAC2F,OAAD,CAAd;AACH;;AAED,WAAKY,SAAL,CAAenI,GAAf,CAAmBzE,IAAnB,EAAyB;AACrB+L,QAAAA,QAAQ,EAAEA,QADW;AAEr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CA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMqB;;;;;AAEF;AACJ;AACA;AACI,mBAAc;AAAA;;AAAA;;AACV;AACA,UAAKlI,IAAL,GAAY,EAAZ;AAFU;AAGb;AAGD;AACJ;AACA;;;;;WACI,mBAAU;AACN,aAAO,KAAKA,IAAL,CAAUvJ,MAAV,KAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAKkJ,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AAED,aAAO,KAAK+K,IAAL,CAAU,CAAV,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,aAAIpJ,KAAJ,EAAW;AACP,WAAKoJ,IAAL,CAAUjF,IAAV,CAAenE,KAAf;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAKoJ,IAAL,GAAY,EAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAKL,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AACD,aAAO,KAAK+K,IAAL,CAAUlF,KAAV,EAAP;AACH;;;;EA/DepE;;AAoEpBtB,gEAAiB,CAAC,eAAD,EAAkB8S,KAAlB,CAAjB;;;;;;;;;;;;;;;;AC3Ha;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM7C;;;;;AAEF;AACJ;AACA;AACI,0B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;AACA,IAAME,aAAa,GAAG,SAAtB;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,sBAAsB,GAAGH,gBAAgB,GAAG,QAAlD;AAEA;AACA;AACA;AACA;;AACA,IAAMI,oBAAoB,GAAGD,sBAAsB,GAAG,MAAtD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAME,4BAA4B,GAAGL,gBAAgB,GAAG,YAAxD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMM,yBAAyB,GAAGN,gBAAgB,GAAG,SAArD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMO,wBAAwB,GAAGP,gBAAgB,GAAG,QAApD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMQ,kCAAkC,GAAGR,gBAAgB,GAAG,kBAA9D;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMS,wBAAwB,GAAGT,gBAAgB,GAAG,QAApD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMU,sBAAsB,GAAGV,gBAAgB,GAAG,MAAlD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMW,cAAc,GAAGX,gBAAgB,GAAG,MAA1C;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMtB,oBAAoB,GAAGsB,gBAAgB,GAAG,YAAhD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMY,sBAAsB,GAAG,gBAA/B;;;;;;;;;;;;;;;ACzGa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA,IAAME,cAAc,GAAG7S,MAAM,CAAC,gBAAD,CAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM8S;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;;AAEA,QAAI,OAAO,MAAK,iBAAL,CAAP,KAAmC,UAAvC,EAAmD;AAC/C;AACZ;AACA;AACA;AACA;AACY,YAAKD,cAAL,IAAuB,MAAKE,eAAL,EAAvB;AACH;;AAVS;AAYb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;;AAKI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAe;AACX,aAAOpJ,uDAAM,CAAC,EAAD,mEAAb;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAY;AACR,YAAMtM,KAAK,CAAC,2DAAD,CAAX;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;SACI,aAAU0B,KAAV,EAAiB;AACb,YAAM1B,KAAK,CAAC,2DAAD,CAAX;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAa;AAAA;;AACT,kCAAO2V,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,sDAAO,kBAAwB6Q,MAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;;;;SACI,eAAW;AACP,aAAO,KAAKxB,YAAL,CAAkB,MAAlB,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;SACI,eAAW;AACP,aAAO,KAAK3L,WAAL,CAAiBoN,MAAjB,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAe;AAAA;;AACX,mCAAOF,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwB+Q,QAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAwB;AAAA;;AACpB,mCAAOH,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwBgR,iBAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAmB;AAAA;;AACf,mCAAOJ,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwBiR,YAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAa;AAAA;;AACT,mCAAOL,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwBkR,MAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;SACI,eAAW;AAAA;;AACP,mCAAON,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwBmR,IAA/B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,sBAAaxU,KAAb,EAAoByU,KAApB,EAA2B;AACvBR,MAAAA,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,EAAuBqR,YAAvB,CAAoC1U,KAApC,EAA2CyU,KAA3C;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAYE,KAAZ,EAAmBC,OAAnB,EAA4BvM,MAA5B,EAAoC;AAChC4L,MAAAA,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,EAAuBwR,WAAvB,CAAmCF,KAAnC,EAA0CC,OAA1C,EAAmDvM,MAAnD;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,yBAAgB;AAAA;;AACZ,mCAAO4L,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwByR,aAAxB,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,0BAAiB;AAAA;;AACb,mCAAOb,WAAW,CAAC5Q,IAAZ,CAAiB,IAAjB,CAAP,uDAAO,mBAAwB0R,cAAxB,EAAP;AACH;;;SA1MD,eAA4B;AACxB,aAAO,IAAP;AACH;;;;EA9BuBlB;AA0O5B;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASI,WAAT,GAAuB;AACnB,MAAMjS,IAAI,GAAG,IAAb;;AAEA,MAAI,EAAE8R,cAAc,IAAI,IAApB,CAAJ,EAA+B;AAC3B,UAAM,IAAIxV,KAAJ,CAAU,+DAAV,CAAN;AACH;;AAED,SAAO,KAAKwV,cAAL,CAAP;AACH;;AAEDtV,gEAAiB,CAAC,aAAD,EAAgBuV,aAAhB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtTa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAMqB,kBAAkB,GAAGnU,MAAM,CAACoU,GAAP,CAAWnX,oEAAX,CAA3B;AAEA;AACA;AACA;AACA;;AACA,IAAMoX,gBAAgB,GAAGrU,MAAM,CAACoU,GAAP,CAAWzB,kEAAX,CAAzB;AAEA;AACA;AACA;AACA;;AACA,IAAM2B,gBAAgB,GAAGtU,MAAM,CAAC,kBAAD,CAA/B;AAEA;AACA;AACA;AACA;;AACA,IAAMuU,oBAAoB,GAAGvU,MAAM,CAAC,sBAAD,CAAnC;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM4S;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;AACA,UAAKuB,kBAAL,IAA2B,IAAIlH,kEAAJ,CAAkB;AAAC,iBAAWtD,uDAAM,CAAC,EAAD,EAAK,MAAK6K,QAAV,EAAoBC,wBAAwB,CAACrS,IAAzB,+BAApB;AAAlB,KAAlB,CAA3B;AACAsS,IAAAA,kBAAkB,CAACtS,IAAnB;;AACA,UAAKkS,gBAAL;;AAJU;AAKb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;;AAKI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAe;AACX,aAAO;AACHK,QAAAA,UAAU,EAAE,MADT;AAEHC,QAAAA,cAAc,EAAE,IAFb;AAGHC,QAAAA,SAAS,EAAE;AACPC,UAAAA,IAAI,EAAE1X;AADC;AAHR,OAAP;AAOH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AA+BI;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAe0Q,QAAf,EAAyB;AACrB,WAAKqG,kBAAL,EAAyBY,cAAzB,CAAwCjH,QAAxC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAeA,QAAf,EAAyB;AACrB,WAAKqG,kBAAL,EAAyBa,cAAzB,CAAwClH,QAAxC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,0BAAiBA,QAAjB,EAA2B;AACvB,aAAO,KAAKqG,kBAAL,EAAyBc,gBAAzB,CAA0CnH,QAA1C,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;W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;AACA;AACA;AACA;;IACM6F;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,iBAAY5b,IAAZ,EAAkB;AAAA;;AAAA;;AACd;AACAoD,IAAAA,kEAAc,CAACpD,IAAD,CAAd;AACA,UAAKA,IAAL,GAAYA,IAAZ;AAHc;AAIjB;AAED;AACJ;AACA;AACA;;;;;WACI,mBAAU;AACN,aAAO,KAAKA,IAAZ;AACH;;;;EAnBeY;AAuBpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASua,gBAAT,GAA4B;AACxB,MAAI3T,QAAQ,GAAGe,iEAAe,CAAC,UAAD,CAA9B;AACA,MAAIvI,IAAI,GAAGgU,wDAAX;AAEA,MAAItB,OAAO,GAAGlL,QAAQ,CAACqU,aAAT,CAAuB,MAAvB,CAAd;;AACA,MAAInJ,OAAO,YAAYI,WAAvB,EAAoC;AAChC,QAAI0I,KAAK,GAAG9I,OAAO,CAACc,YAAR,CAAqBU,+DAArB,CAAZ;;AACA,QAAIsH,KAAJ,EAAW;AACPxb,MAAAA,IAAI,GAAGwb,KAAP;AACH;AACJ;;AAED,SAAO,IAAII,KAAJ,CAAU5b,IAAV,CAAP;AAEH;;AAEDV,gEAAiB,CAAC,aAAD,EAAgBsc,KAAhB,EAAuBT,gBAAvB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;ACnGa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;AAQA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM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AAc,UAAd,CAAf;;AACA,MAAI,QAAOY,QAAP,MAAoB,QAAxB,EAAkC;AAC9B,UAAM,IAAIpI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOoI,QAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS6X,SAAT,GAAqB;AAAA;;AACjB,MAAI9X,MAAM,kBAAGX,2DAAS,EAAZ,gDAAG,YAAc,QAAd,CAAb;;AACA,MAAI,QAAOW,MAAP,MAAkB,QAAtB,EAAgC;AAC5B,UAAM,IAAInI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOmI,MAAP;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS+X,6BAAT,CAAuCnG,IAAvC,EAA6C;AACzC/V,EAAAA,kEAAc,CAAC+V,IAAD,CAAd;AAEA,MAAM3R,QAAQ,GAAGsU,WAAW,EAA5B;AACA,MAAM9C,QAAQ,GAAGxR,QAAQ,CAACkS,aAAT,CAAuB,UAAvB,CAAjB;AACAV,EAAAA,QAAQ,CAACI,SAAT,GAAqBD,IAArB;AAEA,SAAOH,QAAQ,CAACD,OAAhB;AACH;;AAGDzZ,gEAAiB,CAAC,aAAD,EAAgB+f,SAAhB,EAA2BvD,WAA3B,EAAwCwD,6BAAxC,CAAjB;;;;;;;;;;;;;;;;;ACzM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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMiC;;;;;AACF,qBAAc;AAAA;;AAAA;;AACV;AAEA;AACR;AACA;AACA;AACA;;AACQ,UAAKC,QAAL,GAAgBJ,2CAAhB;AARU;AASb;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,aAAI7J,KAAJ,EAAW;AACP3U,MAAAA,oEAAgB,CAAC2U,KAAD,EAAQuJ,kDAAR,CAAhB;;AAEA,UAAI,KAAKU,QAAL,GAAgBjK,KAAK,CAACkK,WAAN,EAApB,EAAyC;AACrC,eAAO,KAAP;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAYD,QAAZ,EAAsB;AAClBve,MAAAA,mEAAe,CAACue,QAAD,CAAf;AACA,WAAKA,QAAL,GAAgBA,QAAhB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,uBAAc;AACV,aAAO,KAAKA,QAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,kBAAS;AACL,WAAKE,WAAL,CAAiBX,2CAAjB;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP,WAAKW,WAAL,CAAiBL,6CAAjB;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP,WAAKK,WAAL,CAAiBV,6CAAjB;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,uBAAU;AACN,WAAKU,WAAL,CAAiBP,4CAAjB;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,uBAAU;AACN,WAAKO,WAAL,CAAiBJ,4CAAjB;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP,WAAKI,WAAL,CAAiBT,6CAAjB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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///../../../../packages/monster/source/constants.js","webpack:///../../../../packages/monster/source/namespace.js","webpack:///../../../../packages/monster/source/constraints/abstract.js","webpack:///../../../../packages/monster/source/types/base.js","webpack:///../../../../packages/monster/source/constraints/abstractoperator.js","webpack:///../../../../packages/monster/source/constraints/andoperator.js","webpack:///../../../../packages/monster/source/constraints/invalid.js","webpack:///../../../../packages/monster/source/constraints/isarray.js","webpack:///../../../../packages/monster/source/types/is.js","webpack:///../../../../packages/monster/source/constraints/isobject.js","webpack:///../../../../packages/monster/source/constraints/oroperator.js","webpack:///../../../../packages/monster/source/constraints/valid.js","webpack:///../../../../packages/monster/source/data/buildmap.js","webpack:///../../../../packages/monster/source/types/validate.js","webpack:///../../../../packages/monster/source/util/clone.js","webpack:///../../../../packages/monster/source/types/global.js","webpack:///../../../../packages/monster/source/data/pathfinder.js","webpack:///../../../../packages/monster/source/types/stack.js","webpack:///../../../../packages/monster/source/data/diff.js","webpack:///../../../../packages/monster/source/types/typeof.js","webpack:///../../../../packages/monster/source/data/extend.js","webpack:///../../../../packages/monster/source/data/pipe.js","webpack:///../../../../packages/monster/source/data/transformer.js","webpack:///../../../../packages/monster/source/types/id.js","webpack:///../../../../packages/monster/source/dom/assembler.js","webpack:///../../../../packages/monster/source/types/proxyobserver.js","webpack:///../../../../packages/monster/source/types/observer.js","webpack:///../../../../packages/monster/source/types/tokenlist.js","webpack:///../../../../packages/monster/source/types/uniquequeue.js","webpack:///../../../../packages/monster/source/types/queue.js","webpack:///../../../../packages/monster/source/types/observerlist.js","webpack:///../../../../packages/monster/source/dom/attributes.js","webpack:///../../../../packages/monster/source/dom/constants.js","webpack:///../../../../packages/monster/source/dom/customcontrol.js","webpack:///../../../../packages/monster/source/dom/customelement.js","webpack:///../../../../packages/monster/source/types/dataurl.js","webpack:///../../../../packages/monster/source/types/mediatype.js","webpack:///../../../../packages/monster/source/dom/template.js","webpack:///../../../../packages/monster/source/dom/theme.js","webpack:///../../../../packages/monster/source/dom/updater.js","webpack:///../../../../packages/monster/source/dom/util.js","webpack:///../../../../packages/monster/source/dom/events.js","webpack:///../../../../packages/monster/source/dom/locale.js","webpack:///../../../../packages/monster/source/i18n/locale.js","webpack:///../../../../packages/monster/source/i18n/provider.js","webpack:///../../../../packages/monster/source/types/basewithoptions.js","webpack:///../../../../packages/monster/source/i18n/translations.js","webpack:///../../../../packages/monster/source/i18n/providers/fetch.js","webpack:///../../../../packages/monster/source/text/formatter.js","webpack:///../../../../packages/monster/source/logging/handler.js","webpack:///../../../../packages/monster/source/logging/logentry.js","webpack:///../../../../packages/monster/source/logging/logger.js","webpack:///../../../../packages/monster/source/logging/handler/console.js","webpack:///../../../../packages/monster/source/math/random.js","webpack:///../../../../packages/monster/source/types/randomid.js","webpack:///../../../../packages/monster/source/types/version.js","webpack:///../../../../packages/monster/source/util/comparator.js","webpack:///../../../../packages/monster/source/util/freeze.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///../../../../packages/monster/source/monster.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"window\"] = factory();\n\telse\n\t\troot[\"window\"] = factory();\n})(self, function() {\nreturn ","'use strict';\n\nimport {Monster} from './namespace.js';\n/**\n * Property-Keys\n * @author schukai GmbH\n */\n\n/**\n * formerly known as PROPERTY_KEY_OPTIONS\n *\n * @memberOf Monster\n * @type {string}\n * @since 1.15.0\n */\nconst PROPERTY_KEY_INTERNALDATA = 'monsterInternalData';\n\n\nexport {\n    Monster,\n    PROPERTY_KEY_INTERNALDATA\n}","'use strict';\n\n/**\n * Main namespace for Monster.\n *\n * @namespace Monster\n * @author schukai GmbH\n */\n\n\n/**\n * namespace class objects form the basic framework of the namespace administration.\n *\n * all functions, classes and objects of the library hang within the namespace tree.\n *\n * via `obj instanceof Monster.Namespace` it is also easy to check whether it is an object or a namespace.\n *\n * @memberOf Monster\n * @copyright schukai GmbH\n * @since 1.0.0\n */\nclass Namespace {\n\n    /**\n     *\n     * @param namespace\n     * @param obj\n     */\n    constructor(namespace) {\n        if (namespace === undefined || typeof namespace !== 'string') {\n            throw new Error(\"namespace is not a string\")\n        }\n        this.namespace = namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getNamespace() {\n        return this.namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.getNamespace();\n    }\n}\n\n/**\n * @type {Namespace}\n * @global\n */\nexport const Monster = new Namespace(\"Monster\");\n\n/**\n * To expand monster, the `Monster.assignToNamespace()` method can be used.\n *\n * you must call the method in the monster namespace. this allows you to mount your own classes, objects and functions into the namespace.\n *\n * To avoid confusion and so that you do not accidentally overwrite existing functions, you should use the custom namespace `X`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/namespace.js';\n * function hello() {\n *            console.log('Hello World!');\n *        }\n * Monster.assignToNamespace(\"Monster.X\", hello)\n * Monster.X.hello(); // ↦ Hello World!\n * </script>\n *\n * ```\n *\n * @param {string} ns\n * @param {function} obj\n * @return {current}\n * @memberOf Monster\n * @throws {Error} no functions have been passed.\n * @throws {Error} the name of the class or function cannot be resolved.\n * @throws {Error} the first argument is not a function or class.\n * @throws {Error} exception\n * @since 1.0.0\n */\nfunction assignToNamespace(ns, ...obj) {\n    let current = namespaceFor(ns.split(\".\"));\n\n    if (obj.length === 0) {\n        throw new Error('no functions have been passed.');\n    }\n\n    for (let i = 0, l = obj.length; i < l; i++) {\n        current[objectName(obj[i])] = obj[i];\n    }\n\n    return current\n}\n\n/**\n *\n * @param {class|function} fn\n * @returns {string}\n * @private\n * @throws {Error} the name of the class or function cannot be resolved.\n * @throws {Error} the first argument is not a function or class.\n * @throws {Error} exception\n */\nfunction objectName(fn) {\n    try {\n\n        if (typeof fn !== 'function') {\n            throw  new Error(\"the first argument is not a function or class.\");\n        }\n\n        if (fn.hasOwnProperty('name')) {\n            return fn.name;\n        }\n\n        if (\"function\" === typeof fn.toString) {\n            let s = fn.toString();\n            let f = s.match(/^\\s*function\\s+([^\\s(]+)/);\n            if (Array.isArray(f) && typeof f[1] === 'string') {\n                return f[1];\n            }\n            let c = s.match(/^\\s*class\\s+([^\\s(]+)/);\n            if (Array.isArray(c) && typeof c[1] === 'string') {\n                return c[1];\n            }\n        }\n\n    } catch (e) {\n        throw new Error(\"exception \" + e);\n    }\n\n    throw new Error(\"the name of the class or function cannot be resolved.\");\n}\n\n/**\n *\n * @param parts\n * @returns {Namespace}\n * @private\n */\nfunction namespaceFor(parts) {\n    let space = Monster, ns = 'Monster';\n\n    for (let i = 0; i < parts.length; i++) {\n\n        if (\"Monster\" === parts[i]) {\n            continue;\n        }\n\n        ns += '.' + parts[i];\n\n        if (!space.hasOwnProperty(parts[i])) {\n            space[parts[i]] = new Namespace(ns);\n        }\n\n        space = space[parts[i]];\n    }\n\n    return space;\n}\n\n\nassignToNamespace('Monster', assignToNamespace, Namespace);\nexport {assignToNamespace}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\n\n\n/**\n * The abstract constraint defines the api for all constraints. mainly the method isValid() is defined.\n *\n * derived classes must implement the method isValid().\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AbstractConstraint extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n    }\n\n    /**\n     * this method must return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n}\n\nassignToNamespace('Monster.Constraints', AbstractConstraint);\nexport {Monster, AbstractConstraint}","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * This is the base class from which all monster classes are derived.\n *\n * You can call the method via the monster namespace `new Monster.Types.Base()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/base.js';\n * console.log(new Monster.Types.Base())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Base} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/base.js';\n * console.log(new Base())\n * </script>\n * ```\n *\n * The class was formerly called Object.\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Base extends Object {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return JSON.stringify(this);\n    };\n\n\n}\n\nassignToNamespace('Monster.Types', Base);\nexport {Monster, Base}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * Operators allow you to link constraints together. for example, you can check whether a value is an object or an array. each operator has two operands that are linked together.\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AbstractOperator extends AbstractConstraint {\n\n    /**\n     *\n     * @param {AbstractConstraint} operantA\n     * @param {AbstractConstraint} operantB\n     * @throws {TypeError} \"parameters must be from type AbstractConstraint\"\n     */\n    constructor(operantA, operantB) {\n        super();\n\n        if (!(operantA instanceof AbstractConstraint) || !(operantB instanceof AbstractConstraint)) {\n            throw new TypeError(\"parameters must be from type AbstractConstraint\")\n        }\n\n        this.operantA = operantA;\n        this.operantB = operantB;\n\n    }\n\n\n}\n\nassignToNamespace('Monster.Constraints', AbstractOperator);\nexport {Monster, AbstractOperator}","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n * new Monster.Constraint.AndOperator();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n * new AndOperator();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n *\n * new AndOperator(\n * new Valid(), new Valid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * new AndOperator(\n * new Invalid(), new Valid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AndOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.all([this.operantA.isValid(value), this.operantB.isValid(value)]);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', AndOperator);\nexport {Monster, AndOperator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * The invalid constraint allows an always invalid query to be performed. this constraint is mainly intended for testing.\n *\n * You can call the method via the monster namespace `new Monster.Constraint.Invalid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * new Monster.Constraint.Invalid();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * new Invalid();\n * </script>\n * ```\n *\n * @example\n *\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n *\n * new Invalid().isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass Invalid extends AbstractConstraint {\n\n    /**\n     * this method return a rejected promise\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', Invalid);\nexport {Monster, Invalid}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray} from \"../types/is.js\";\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n * console.log(new Monster.Constraint.IsArray())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n * console.log(new IsArray())\n * </script>\n * ```\n *\n * @example\n *\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n *\n * new IsArray()\n * .isValid([])\n * .then(()=>console.log(true));\n * // ↦ true\n *\n * new IsArray()\n * .isValid(99)\n * .catch(e=>console.log(e));\n * // ↦ 99\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass IsArray extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isArray(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', IsArray);\nexport {Monster, IsArray}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * With this function you can check if a value is iterable\n *\n * You can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isIterable(null)) // ↦ false\n * console.log(Monster.Types.isIterable('hello')) // ↦ true\n * console.log(Monster.Types.isIterable([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isIterable(null))  // ↦ false\n * console.log(isIterable('hello'))  // ↦ true\n * console.log(isIterable([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isIterable(value) {\n    if (value === undefined) return false;\n    if (value === null) return false;\n    return typeof value?.[Symbol.iterator] === 'function';\n}\n\n\n/**\n * Checks whether the value passed is a primitive (string, number, boolean, NaN, undefined, null or symbol)\n *\n * You can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isPrimitive('2')) // ↦ false\n * console.log(Monster.Types.isPrimitive([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isPrimitive('2'))  // ↦ true\n * console.log(isPrimitive([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isPrimitive(value) {\n    var type;\n\n    if (value === undefined || value === null) {\n        return true;\n    }\n\n    type = typeof value;\n\n    if (type === 'string' || type === 'number' || type === 'boolean' || type === 'symbol') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Checks whether the value passed is a symbol\n *\n * You can call the method via the monster namespace `Monster.Types.isSymbol()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isSymbol('2')) // ↦ false\n * console.log(Monster.Types.isSymbol(Symbol('test')) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isSymbol} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isSymbol(Symbol('a')))  // ↦ true\n * console.log(isSymbol([])  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isSymbol(value) {\n    return ('symbol' === typeof value) ? true : false;\n}\n\n/**\n * Checks whether the value passed is a boolean\n *\n * You can call the method via the monster namespace `Monster.Types.isBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isBoolean('2')) // ↦ false\n * console.log(Monster.Types.isBoolean([])) // ↦ false\n * console.log(Monster.Types.isBoolean(true)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isBoolean('2'))  // ↦ false\n * console.log(isBoolean([]))  // ↦ false\n * console.log(isBoolean(2>4))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isBoolean(value) {\n\n    if (value === true || value === false) {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a string\n *\n * you can call the method via the monster namespace `Monster.Types.isString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isString('2')) // ↦ true\n * console.log(Monster.Types.isString([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isString('2'))  // ↦ true\n * console.log(isString([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isString(value) {\n    if (value === undefined || typeof value !== 'string') {\n        return false;\n    }\n    return true;\n}\n\n/**\n * checks whether the value passed is a object\n *\n * you can call the method via the monster namespace `Monster.Types.isObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isObject('2')) // ↦ false\n * console.log(Monster.Types.isObject([])) // ↦ false\n * console.log(Monster.Types.isObject({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isObject('2'))  // ↦ false\n * console.log(isObject([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isObject(value) {\n\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'object') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a object and instance of instance\n *\n * you can call the method via the monster namespace `Monster.Types.isInstance()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isInstance('2')) // ↦ false\n * console.log(Monster.Types.isInstance([])) // ↦ false\n * console.log(Monster.Types.isInstance({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isInstance} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isInstance('2'))  // ↦ false\n * console.log(isInstance([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @param {*} instance\n * @returns {boolean}\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isInstance(value, instance) {\n\n    if (!isObject(value)) return false;\n    if (!isFunction(instance)) return false;\n    if (!instance.hasOwnProperty('prototype')) return false;\n    return (value instanceof instance) ? true : false;\n\n}\n\n/**\n * checks whether the value passed is a array\n *\n * you can call the method via the monster namespace `Monster.Types.isArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isArray('2')) // ↦ false\n * console.log(Monster.Types.isArray([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isArray('2'))  // ↦ false\n * console.log(isArray([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isArray(value) {\n    if (Array.isArray(value)) {\n        return true;\n    }\n    return false;\n}\n\n/**\n * checks whether the value passed is a function\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isFunction(()=>{})) // ↦ true\n * console.log(Monster.Types.isFunction('2')) // ↦ false\n * console.log(Monster.Types.isFunction([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isFunction(()=>{})) // ↦ true\n * console.log(isFunction('2'))  // ↦ false\n * console.log(isFunction([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isFunction(value) {\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'function') {\n        return true;\n    }\n\n    return false;\n\n}\n\n/**\n * checks whether the value passed is an integer\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isInteger(()=>{})) // ↦ true\n * console.log(Monster.Types.isInteger('2')) // ↦ false\n * console.log(Monster.Types.isInteger(2)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isInteger(()=>{})) // ↦ true\n * console.log(isInteger('2'))  // ↦ false\n * console.log(isInteger(2))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isInteger(value) {\n    return Number.isInteger(value);\n}\n\n\nassignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger, isSymbol);\nexport {\n    Monster,\n    isPrimitive,\n    isBoolean,\n    isString,\n    isObject,\n    isInstance,\n    isArray,\n    isFunction,\n    isIterable,\n    isInteger,\n    isSymbol\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isObject} from \"../types/is.js\";\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n * console.log(new Monster.Constraint.IsObject())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n * console.log(new IsObject())\n * </script>\n * ```\n *\n * @example\n *\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n *\n * new IsObject()\n * .isValid({})\n * .then(()=>console.log(true));\n * // ↦ true\n *\n *\n * new IsObject()\n * .isValid(99)\n * .catch(e=>console.log(e));\n * // ↦ 99\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass IsObject extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isObject(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', IsObject);\nexport {Monster, IsObject}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraint/oroperator.js';\n * new Monster.Constraint.OrOperator();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraint/oroperator.js';\n * new OrOperator();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/oroperator.js';\n *\n * new OrOperator(\n * new Valid(), new Invalid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * new OrOperator(\n * new Invalid(), new Invalid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass OrOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            let a, b;\n\n            self.operantA.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                a = false;\n                /** b has already been evaluated and was not true */\n                if (b === false) {\n                    reject();\n                }\n            });\n\n            self.operantB.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                b = false;\n                /** b has already been evaluated and was not true */\n                if (a === false) {\n                    reject();\n                }\n            });\n        });\n    }\n\n\n}\n\nassignToNamespace('Monster.Constraints', OrOperator);\nexport {Monster, OrOperator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * The valid constraint allows an always valid query to be performed. this constraint is mainly intended for testing.\n *\n * You can call the method via the monster namespace `new Monster.Constraint.Valid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * new Monster.Constraint.Valid();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * new Valid();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n *\n * new Valid().isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass Valid extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.resolve(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', Valid);\nexport {Monster, Valid}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isFunction, isObject, isString} from \"../types/is.js\";\nimport {validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {DELIMITER, Pathfinder, WILDCARD} from \"./pathfinder.js\";\n\n/**\n * With the help of the function `buildMap()`, maps can be easily created from data objects.\n *\n * Either a simple definition `a.b.c` or a template `${a.b.c}` can be specified as the path.\n * Key and value can be either a definition or a template. The key does not have to be defined.\n *\n * You can call the method via the monster namespace `Monster.Data.buildMap()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * console.log(Monster.Data.buildMap())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * console.log(buildMap())\n * </script>\n * ```\n * \n * The templates determine the appearance of the keys and the value of the map. Either a single value `id` can be taken or a composite key `${id} ${name}` can be used.\n * \n * If you want to access values of the parent data set, you have to use the `^` character `${id} ${^.name}`.\n *\n * @example\n *\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * // a typical data structure as reported by an api\n *\n * let map;\n * let obj = {\n *     \"data\": [\n *         {\n *             \"id\": 10,\n *             \"name\": \"Cassandra\",\n *             \"address\": {\n *                 \"street\": \"493-4105 Vulputate Street\",\n *                 \"city\": \"Saumur\",\n *                 \"zip\": \"52628\"\n *             }\n *         },\n *         {\n *             \"id\": 20,\n *             \"name\": \"Holly\",\n *             \"address\": {\n *                 \"street\": \"1762 Eget Rd.\",\n *                 \"city\": \"Schwalbach\",\n *                 \"zip\": \"952340\"\n *             }\n *         },\n *         {\n *             \"id\": 30,\n *             \"name\": \"Guy\",\n *             \"address\": {\n *                 \"street\": \"957-388 Sollicitudin Avenue\",\n *                 \"city\": \"Panchià\",\n *                 \"zip\": \"420729\"\n *             }\n *         }\n *     ]\n * };\n *\n * // The function is passed this data structure and with the help of the selector `'data.*'` the data to be considered are selected.\n * // The key is given by a simple definition `'id'` and the value is given by a template `'${name} (${address.zip} ${address.city})'`.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id');\n * console.log(map);\n *\n * // ↦ Map(3) {\n * //  '10' => 'Cassandra (52628 Saumur)',\n * //  '20' => 'Holly (952340 Schwalbach)',\n * //  '30' => 'Guy (420729 Panchià)'\n * // }\n *\n * // If no key is specified, the key from the selection, here the array index, is taken.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})');\n * console.log(map);\n *\n * // ↦ Map(3) {\n * //  '0' => 'Cassandra (52628 Saumur)',\n * //  '1' => 'Holly (952340 Schwalbach)',\n * //  '2' => 'Guy (420729 Panchià)'\n * // }\n *\n * // a filter (function(value, key) {}) can be specified to accept only defined entries.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id', function (value, key) {\n *                return (value['id'] >= 20) ? true : false\n *            });\n * console.log(map);\n *\n * // ↦ Map(2) {\n * //  20 => 'Holly (952340 Schwalbach)',\n * //  30 => 'Guy (420729 Panchià)'\n * // }\n *\n * @param {*} subject\n * @param {string|Monster.Data~exampleSelectorCallback} selector\n * @param {string} [valueTemplate]\n * @param {string} [keyTemplate]\n * @param {Monster.Data~exampleFilterCallback} [filter]\n * @return {*}\n * @memberOf Monster.Data\n * @throws {TypeError} value is neither a string nor a function\n * @throws {TypeError} the selector callback must return a map\n */\nfunction buildMap(subject, selector, valueTemplate, keyTemplate, filter) {\n\n    const result = new Map\n\n    let map;\n    if (isFunction(selector)) {\n        map = selector(subject)\n        if (!(map instanceof Map)) {\n            throw new TypeError('the selector callback must return a map');\n        }\n    } else if (isString(selector)) {\n        map = new Map;\n        buildFlatMap.call(map, subject, selector);\n    } else {\n        throw new TypeError('value is neither a string nor a function')\n    }\n\n    if (!(map instanceof Map)) {\n        return result;\n    }\n\n\n    map.forEach((v, k, m) => {\n        if (isFunction(filter)) {\n            if (filter.call(m, v, k) !== true) return;\n        }\n\n        k = build(v, keyTemplate, k);\n        v = build(v, valueTemplate);\n\n        result.set(k, v);\n    });\n\n    return result;\n}\n\n/**\n * @private\n * @param subject\n * @param selector\n * @param key\n * @param parentMap\n * @return {*}\n */\nfunction buildFlatMap(subject, selector, key, parentMap) {\n\n    const result = this;\n    const currentMap = new Map;\n\n    const resultLength = result.size;\n\n    if (key === undefined) key = [];\n\n    let parts = selector.split(DELIMITER);\n    let current = \"\", currentPath = [];\n    do {\n\n        current = parts.shift();\n        currentPath.push(current);\n\n        if (current === WILDCARD) {\n\n            let finder = new Pathfinder(subject);\n            let map\n            try {\n                map = finder.getVia(currentPath.join(DELIMITER));\n            } catch (e) {\n                let a = e;\n                map = new Map();\n            }\n\n\n            for (const [k, o] of map) {\n\n                let copyKey = clone(key);\n\n                currentPath.map((a) => {\n                    copyKey.push((a === WILDCARD) ? k : a)\n                })\n\n                let kk = copyKey.join(DELIMITER);\n                let sub = buildFlatMap.call(result, o, parts.join(DELIMITER), copyKey, o);\n\n                if (isObject(sub)) {\n                    sub['^'] = parentMap;\n                }\n\n                currentMap.set(kk, sub);\n            }\n\n        }\n\n\n    } while (parts.length > 0);\n\n    // no set in child run\n    if (resultLength === result.size) {\n        for (const [k, o] of currentMap) {\n            result.set(k, o);\n        }\n    }\n\n    return subject;\n\n}\n\n\n/**\n * With the help of this filter callback, values can be filtered out. Only if the filter function returns true, the value is taken for the map.\n *\n * @callback Monster.Data~exampleFilterCallback\n * @param {*} value Value\n * @param {string} key  Key\n * @memberOf Monster.Data\n * @see {@link Monster.Data.buildMap}\n */\n\n/**\n * Alternatively to a string selector a callback can be specified. this must return a map.\n *\n * @example\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n *\n * let obj = {\n *                \"data\": [\n *                    {\n *                        \"id\": 10,\n *                        \"name\": \"Cassandra\",\n *                        \"enrichment\": {\n *                            variants: [\n *                                {\n *                                    sku: 1, label: \"XXS\", price: [\n *                                        {vk: '12.12 €'},\n *                                        {vk: '12.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 2, label: \"XS\", price: [\n *                                        {vk: '22.12 €'},\n *                                        {vk: '22.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 3, label: \"S\", price: [\n *                                        {vk: '32.12 €'},\n *                                        {vk: '32.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 4, label: \"L\", price: [\n *                                        {vk: '42.12 €'},\n *                                        {vk: '42.12 €'}\n *                                    ]\n *                                }\n *                            ]\n *\n *                        }\n *                    },\n *                    {\n *                        \"id\": 20,\n *                        \"name\": \"Yessey!\",\n *                        \"enrichment\": {\n *                            variants: [\n *                                {\n *                                    sku: 1, label: \"XXS\", price: [\n *                                        {vk: '12.12 €'},\n *                                        {vk: '12.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 2, label: \"XS\", price: [\n *                                        {vk: '22.12 €'},\n *                                        {vk: '22.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 3, label: \"S\", price: [\n *                                        {vk: '32.12 €'},\n *                                        {vk: '32.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 4, label: \"L\", price: [\n *                                        {vk: '42.12 €'},\n *                                        {vk: '42.12 €'}\n *                                    ]\n *                                }\n *                            ]\n *\n *                        }\n *                    }\n *                ]\n *            };\n *\n * let callback = function (subject) {\n *                let m = new Map;\n *\n *                for (const [i, b] of Object.entries(subject.data)) {\n *\n *                    let key1 = i;\n *\n *                    for (const [j, c] of Object.entries(b.enrichment.variants)) {\n *                        let key2 = j;\n *\n *                        for (const [k, d] of Object.entries(c.price)) {\n *\n *                            let key3 = k;\n *\n *                            d.name = b.name;\n *                            d.label = c.label;\n *                            d.id = [key1, key2, key3].join('.');\n *\n *                            m.set(d.id, d);\n *                        }\n *\n *                    }\n *                }\n *                return m;\n *            }\n *\n * let map = buildMap(obj, callback, '${name} ${vk}', '${id}')\n *\n * // ↦ Map(3) {\n * //  \"0.0.0\":\"Cassandra 12.12 €\",\n * //  \"0.0.1\":\"Cassandra 12.12 €\",\n * //  \"0.1.0\":\"Cassandra 22.12 €\",\n * //  \"0.1.1\":\"Cassandra 22.12 €\",\n * //  \"0.2.0\":\"Cassandra 32.12 €\",\n * //  \"0.2.1\":\"Cassandra 32.12 €\",\n * //  \"0.3.0\":\"Cassandra 42.12 €\",\n * //  \"0.3.1\":\"Cassandra 42.12 €\",\n * //  \"1.0.0\":\"Yessey! 12.12 €\",\n * //  \"1.0.1\":\"Yessey! 12.12 €\",\n * //  \"1.1.0\":\"Yessey! 22.12 €\",\n * //  \"1.1.1\":\"Yessey! 22.12 €\",\n * //  \"1.2.0\":\"Yessey! 32.12 €\",\n * //  \"1.2.1\":\"Yessey! 32.12 €\",\n * //  \"1.3.0\":\"Yessey! 42.12 €\",\n * //  \"1.3.1\":\"Yessey! 42.12 €\"\n * // }\n *\n * @callback Monster.Data~exampleSelectorCallback\n * @param {*} subject subject\n * @return Map\n * @since 1.17.0\n * @memberOf Monster.Data\n * @see {@link Monster.Data.buildMap}\n */\n\n/**\n * @private\n * @param {*} subject\n * @param {string|undefined} definition\n * @param {*} defaultValue\n * @return {*}\n */\nfunction build(subject, definition, defaultValue) {\n    if (definition === undefined) return defaultValue ? defaultValue : subject;\n    validateString(definition);\n\n    const regexp = /(?<placeholder>\\${(?<path>[a-z\\^A-Z.\\-_0-9]*)})/gm\n    const array = [...definition.matchAll(regexp)];\n\n    let finder = new Pathfinder(subject);\n\n    if (array.length === 0) {\n        return finder.getVia(definition);\n    }\n\n    array.forEach((a) => {\n        let groups = a?.['groups'];\n        let placeholder = groups?.['placeholder']\n        if (placeholder === undefined) return;\n\n        let path = groups?.['path']\n\n        let v = finder.getVia(path);\n        if (v === undefined) v = defaultValue;\n\n        definition = definition.replaceAll(placeholder, v);\n\n\n    })\n\n    return definition;\n\n}\n\n\nassignToNamespace('Monster.Data', buildMap);\nexport {Monster, buildMap}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {\n    isArray,\n    isBoolean,\n    isFunction,\n    isInstance,\n    isInteger,\n    isIterable,\n    isObject,\n    isPrimitive,\n    isString,\n    isSymbol\n} from './is.js';\n\n/**\n * This method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError\n * console.log(Monster.Types.validateIterable([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateIterable('2'))  // ↦ TypeError\n * console.log(validateIterable([]))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster.Types.isPrimitive}\n * @see {@link Monster.Types#isPrimitive}\n */\nfunction validateIterable(value) {\n    if (!isIterable(value)) {\n        throw new TypeError('value is not iterable')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validatePrimitive('2')) // ↦ value\n * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validatePrimitive('2'))  // ↦ value\n * console.log(validatePrimitive([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster.Types.isPrimitive}\n * @see {@link Monster.Types#isPrimitive}\n */\nfunction validatePrimitive(value) {\n    if (!isPrimitive(value)) {\n        throw new TypeError('value is not a primitive')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the boolean type. this function is identical to isBoolean() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateBoolean(true)) // ↦ value\n * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError\n * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateBoolean(false))  // ↦ value\n * console.log(validateBoolean('2'))  // ↦ TypeError\n * console.log(validateBoolean([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n\n * @throws {TypeError}  value is not primitive\n */\nfunction validateBoolean(value) {\n    if (!isBoolean(value)) {\n        throw new TypeError('value is not a boolean')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the string type. this function is identical to isString() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateString('2')) // ↦ value\n * console.log(Monster.Types.validateString([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateString('2'))  // ↦ value\n * console.log(validateString([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a string\n */\nfunction validateString(value) {\n    if (!isString(value)) {\n        throw new TypeError('value is not a string')\n    }\n    return value\n}\n\n\n/**\n * This method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateObject({})) // ↦ value\n * console.log(Monster.Types.validateObject('2')) // ↦ TypeError\n * console.log(Monster.Types.validateObject([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateObject({}))  // ↦ value\n * console.log(validateObject('2'))  // ↦ TypeError\n * console.log(validateObject([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a object\n */\nfunction validateObject(value) {\n    if (!isObject(value)) {\n        throw new TypeError('value is not a object')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the object instance.\n *\n * You can call the method via the monster namespace `Monster.Types.validateInstance()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateInstance({}, Object)) // ↦ value\n * console.log(Monster.Types.validateInstance('2', Object)) // ↦ TypeError\n * console.log(Monster.Types.validateInstance([], Object)) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateInstance} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateInstance({}, Object)) // ↦ value\n * console.log(validateInstance('2', Object)) // ↦ TypeError\n * console.log(validateInstance([], Object)) // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an instance of\n */\nfunction validateInstance(value, instance) {\n    if (!isInstance(value, instance)) {\n        let n = \"\";\n        if (isObject(instance) || isFunction(instance)) {\n            n = instance?.['name']\n        }\n\n        if (n) {\n            n = \" \" + n;\n        }\n\n        throw new TypeError('value is not an instance of' + n)\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the array type. this function is identical to isArray() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateArray('2')) // ↦ TypeError\n * console.log(Monster.Types.validateArray([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateArray('2'))  // ↦ TypeError\n * console.log(validateArray([]))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an array\n */\nfunction validateArray(value) {\n    if (!isArray(value)) {\n        throw new TypeError('value is not an array')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the symbol type. this function is identical to isSymbol() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateSymbol()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateSymbol('2')) // ↦ TypeError\n * console.log(Monster.Types.validateSymbol([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateSymbol} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateSymbol('2'))  // ↦ TypeError\n * console.log(validateSymbol())  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an symbol\n */\nfunction validateSymbol(value) {\n    if (!isSymbol(value)) {\n        throw new TypeError('value is not an symbol')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the function type. this function is identical to isFunction() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateFunction(()=>{})) // ↦ value\n * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError\n * console.log(Monster.Types.validateFunction([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateFunction(()=>{})) // ↦ value\n * console.log(validateFunction('2'))  // ↦ TypeError\n * console.log(validateFunction([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a function\n */\nfunction validateFunction(value) {\n    if (!isFunction(value)) {\n        throw new TypeError('value is not a function')\n    }\n    return value\n}\n\n/**\n * This method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateInteger()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError\n * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError\n * console.log(Monster.Types.validateInteger(2)) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateInteger(true)) // ↦ TypeError\n * console.log(validateInteger('2'))  // ↦ TypeError\n * console.log(validateInteger(2))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an integer\n */\nfunction validateInteger(value) {\n    if (!isInteger(value)) {\n        throw new TypeError('value is not an integer')\n    }\n    return value\n}\n\nassignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);\nexport {\n    Monster,\n    validatePrimitive,\n    validateBoolean,\n    validateString,\n    validateObject,\n    validateInstance,\n    validateArray,\n    validateFunction,\n    validateIterable,\n    validateInteger,\n    validateSymbol\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from '../types/global.js';\nimport {isArray, isFunction, isObject, isPrimitive} from '../types/is.js';\n\n\n/**\n * With this function, objects can be cloned.\n * The entire object tree is run through.\n *\n * Proxy, Element, HTMLDocument and DocumentFragment instances are not cloned.\n * Global objects such as windows are also not cloned,\n *\n * If an object has a method `getClone()`, this method is used to create the clone.\n *\n * You can call the method via the monster namespace `Monster.Util.clone()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/clone.js';\n * console.log(Monster.Util.clone({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/clone.js';\n * console.log(clone({}))\n * </script>\n * ```\n *\n * @param {*} obj object to be cloned\n * @returns {*}\n *\n * @since 1.0.0\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @throws {Error} unable to clone obj! its type isn't supported.\n */\nfunction clone(obj) {\n\n    // typeof null results in 'object'.  https://2ality.com/2013/10/typeof-null.html\n    if (null === obj) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isPrimitive(obj)) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isFunction(obj)) {\n        return obj;\n    }\n\n    // Handle Array\n    if (isArray(obj)) {\n        let copy = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            copy[i] = clone(obj[i]);\n        }\n\n        return copy;\n    }\n\n    if (isObject(obj)) {\n\n\n        // Handle Date\n        if (obj instanceof Date) {\n            let copy = new Date();\n            copy.setTime(obj.getTime());\n            return copy;\n        }\n\n        /** Do not clone DOM nodes */\n        if (typeof Element !== 'undefined' && obj instanceof Element) return obj;\n        if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;\n        if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;\n\n        /** Do not clone global objects */\n        if (obj === getGlobal()) return obj;\n        if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;\n        if (typeof window !== 'undefined' && obj === window) return obj;\n        if (typeof document !== 'undefined' && obj === document) return obj;\n        if (typeof navigator !== 'undefined' && obj === navigator) return obj;\n        if (typeof JSON !== 'undefined' && obj === JSON) return obj;\n\n        // Handle Proxy-Object\n        try {\n            // try/catch because possible: TypeError: Function has non-object prototype 'undefined' in instanceof check\n            if (obj instanceof Proxy) {\n                return obj;\n            }\n        } catch (e) {\n        }\n\n        return cloneObject(obj)\n\n    }\n\n    throw new Error(\"unable to clone obj! its type isn't supported.\");\n}\n\n/**\n *\n * @param {object} obj\n * @returns {object}\n * @private\n */\nfunction cloneObject(obj) {\n    var copy;\n\n    /** Object has clone method */\n    if (typeof obj.hasOwnProperty('getClone') && obj.getClone === 'function') {\n        return obj.getClone();\n    }\n\n    copy = {};\n    if (typeof obj.constructor === 'function' &&\n        typeof obj.constructor.call === 'function') {\n        copy = new obj.constructor();\n    }\n\n    for (let key in obj) {\n\n        if (!obj.hasOwnProperty(key)) {\n            continue;\n        }\n\n        if (Monster.Types.isPrimitive(obj[key])) {\n            copy[key] = obj[key];\n            continue;\n        }\n\n        copy[key] = clone(obj[key]);\n    }\n\n    return copy;\n}\n\nassignToNamespace('Monster.Util', clone);\nexport {Monster, clone}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {validateFunction, validateObject, validateString} from \"./validate.js\";\n\n/**\n * @type {objec}\n * @private\n */\nlet globalReference;\n\n/**\n * @private\n * @throws {Error} unsupported environment.\n */\n(function () {\n\n    if (typeof globalThis === 'object') {\n        globalReference = globalThis;\n        return;\n    }\n\n    if (typeof self !== 'undefined') {\n        globalReference = self;\n        return;\n    } else if (typeof window !== 'undefined') {\n        globalReference = window;\n        return;\n    }\n\n    Object.defineProperty(Object.prototype, '__monster__', {\n        get: function () {\n            return this;\n        },\n        configurable: true\n    });\n\n    if (typeof __monster__ === 'object') {\n        __monster__.globalThis = __monster__;\n        delete Object.prototype.__monster__;\n\n        globalReference = globalThis;\n        return;\n    }\n\n    try {\n        globalReference = Function('return this')();\n    } catch (e) {\n\n    }\n\n    throw new Error(\"unsupported environment.\")\n\n\n}());\n\n/**\n * Return globalThis\n *\n * If globalThis is not available, it will be polyfilled\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @returns {objec} globalThis\n */\nfunction getGlobal() {\n    return globalReference;\n}\n\n/**\n * Return global object or throw Error\n *\n * You can call the method via the monster namespace `Monster.Types.getGlobalObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(Monster.Types.getGlobalObject('document')) // ↦ { }\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getGlobalObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(getGlobalObject('document')) // ↦ { }\n * </script>\n * ```\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @param {string} name\n * @returns {objec}\n * @throws {Error} the object is not defined\n * @throws {TypeError} value is not a object\n * @throws {TypeError} value is not a string\n */\nfunction getGlobalObject(name) {\n    validateString(name);\n    let o = globalReference?.[name];\n    if (typeof o === 'undefined') throw new Error('the object ' + name + ' is not defined');\n    validateObject(o);\n    return o;\n}\n\n/**\n * Return global function or throw Error\n *\n * You can call the method via the monster namespace `Monster.Types.getGlobalFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(Monster.Types.getGlobalFunction('parseInt')) // ↦ f parseInt() { }\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getGlobalFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(getGlobalFunction('parseInt')) // ↦ f parseInt() { }\n * </script>\n * ```\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @param {string} name\n * @returns {objec}\n * @throws {TypeError} value is not a function\n * @throws {Error} the function is not defined\n * @throws {TypeError} value is not a string\n */\nfunction getGlobalFunction(name) {\n    validateString(name);\n    let f = globalReference?.[name];\n    if (typeof f === 'undefined') throw new Error('the function ' + name + ' is not defined');\n    validateFunction(f);\n    return f;\n}\n\n\nassignToNamespace('Monster.Types', getGlobal, getGlobalObject, getGlobalFunction);\nexport {Monster, getGlobal, getGlobalObject, getGlobalFunction}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {isArray, isInteger, isObject, isPrimitive} from '../types/is.js';\nimport {Stack} from \"../types/stack.js\";\nimport {validateInteger, validateString} from '../types/validate.js';\n\n/**\n * path separator\n *\n * @private\n * @type {string}\n */\nexport const DELIMITER = '.';\n/**\n * @private\n * @type {string}\n */\nexport const WILDCARD = '*';\n\n/**\n * You can call the method via the monster namespace `new Monster.Data.Pathfinder()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n * console.log(new Monster.Data.Pathfinder())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n * console.log(new Pathfinder())\n * </script>\n * ```\n *\n * With the help of the pathfinder, values can be read and written from an object construct.\n *\n * ```\n * new Pathfinder({\n * a: {\n *     b: {\n *         f: [\n *             {\n *                 g: false,\n *             }\n *         ],\n *     }\n * }\n * }).getVia(\"a.b.f.0.g\"); // ↦ false\n * ```\n *\n * if a value is not present or has the wrong type, a corresponding exception is thrown.\n *\n * ```\n * new Pathfinder({}).getVia(\"a.b.f.0.g\"); // ↦ Error\n * ```\n *\n * The `Pathfinder.exists()` method can be used to check whether access to the path is possible.\n *\n * ```\n * new Pathfinder({}).exists(\"a.b.f.0.g\"); // ↦ false\n * ```\n *\n * pathfinder can also be used to build object structures. to do this, the `Pathfinder.setVia()` method must be used.\n *\n * ```\n * obj = {};\n * new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}\n * ```\n *\n * @example\n *\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n *\n * let value = new Pathfinder({\n * a: {\n *     b: {\n *         f: [\n *             {\n *                 g: false,\n *             }\n *         ],\n *     }\n * }\n * }).getVia(\"a.b.f.0.g\");\n *\n *  console.log(value);\n *  // ↦ false\n *\n * try {\n *   new Pathfinder({}).getVia(\"a.b.f.0.g\");  \n * } catch(e) {\n *   console.log(e.toString());\n *   // ↦ Error: the journey is not at its end (b.f.0.g)\n * }\n *\n * @example\n *\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n *\n * let p = new Pathfinder({\n *                a: {\n *                    x: [\n *                        {c: 1}, {c: 2}\n *                    ],\n *                    y: true\n *                },\n *                b: {\n *                    x: [\n *                        {c: 1, d: false}, {c: 2}\n *                    ],\n *                    y: true\n *                },\n *            });\n *\n * let r = p.getVia(\"*.x.*.c\");\n * console.log(r);\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Pathfinder extends Base {\n\n    /**\n     * @param {array|object|Map|Set} value\n     * @since 1.4.0\n     * @throws  {Error} the parameter must not be a simple type\n     **/\n    constructor(object) {\n        super();\n\n        if (isPrimitive(object)) {\n            throw new Error('the parameter must not be a simple type');\n        }\n\n        this.object = object;\n        this.wildCard = WILDCARD;\n    }\n\n    /**\n     * set wildcard\n     *\n     * @param {string} wildcard\n     * @return {Pathfinder}\n     * @since 1.7.0\n     */\n    setWildCard(wildcard) {\n        validateString(wildcard);\n        this.wildCard = wildcard;\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @since 1.4.0\n     * @returns {*}\n     * @throws {TypeError} unsupported type\n     * @throws {Error} the journey is not at its end\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    getVia(path) {\n        return getValueViaPath.call(this, this.object, validateString(path));\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @param {*} value\n     * @returns {Pathfinder}\n     * @since 1.4.0\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    setVia(path, value) {\n        validateString(path);\n        setValueViaPath.call(this, this.object, path, value);\n        return this;\n    }\n\n    /**\n     * Delete Via Path\n     *\n     * @param {string} path\n     * @returns {Pathfinder}\n     * @since 1.6.0\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    deleteVia(path) {\n        validateString(path);\n        deleteValueViaPath.call(this, this.object, path);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @return {bool}\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @since 1.4.0\n     */\n    exists(path) {\n        validateString(path);\n        try {\n            getValueViaPath.call(this, this.object, path, true);\n            return true;\n        } catch (e) {\n\n        }\n\n        return false;\n    }\n\n}\n\nassignToNamespace('Monster.Data', Pathfinder);\nexport {Monster, Pathfinder}\n\n/**\n *\n * @param {*} subject\n * @param {string} path\n * @param {string} check\n * @return {Map}\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction iterate(subject, path, check) {\n\n    const result = new Map;\n\n    if (isObject(subject) || isArray(subject)) {\n        for (const [key, value] of Object.entries(subject)) {\n            result.set(key, getValueViaPath.call(this, value, path, check))\n        }\n    } else {\n        let key = path.split(DELIMITER).shift();\n        result.set(key, getValueViaPath.call(this, subject, path, check));\n    }\n\n    return result;\n\n\n}\n\n/**\n *\n * @param {*} subject\n * @param [string} path\n * @param [boolean} check \n * @returns {*}\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction getValueViaPath(subject, path, check) {\n\n    if (path === \"\") {\n        return subject;\n    }\n\n    let parts = path.split(DELIMITER)\n    let current = parts.shift();\n\n    if (current === this.wildCard) {\n        return iterate.call(this, subject, parts.join(DELIMITER), check);\n    }\n\n    if (isObject(subject) || isArray(subject)) {\n\n        let anchor;\n        if (subject instanceof Map || subject instanceof WeakMap) {\n            anchor = subject.get(current);\n\n        } else if (subject instanceof Set || subject instanceof WeakSet) {\n            current = parseInt(current);\n            validateInteger(current)\n            anchor = [...subject]?.[current];\n\n        } else if (typeof WeakRef === 'function' && subject instanceof WeakRef) {\n            throw Error('unsupported action for this data type');\n\n        } else if (isArray(subject)) {\n            current = parseInt(current);\n            validateInteger(current)\n            anchor = subject?.[current];\n        } else {\n            anchor = subject?.[current];\n        }\n\n        if (isObject(anchor) || isArray(anchor)) {\n            return getValueViaPath.call(this, anchor, parts.join(DELIMITER), check)\n        }\n\n        if (parts.length > 0) {\n            throw Error(\"the journey is not at its end (\" + parts.join(DELIMITER) + \")\");\n        }\n\n        if (check === true && !subject.hasOwnProperty(current)) {\n            throw Error('unknown value');\n        }\n\n        return anchor;\n\n    }\n\n    throw TypeError(\"unsupported type \" + typeof subject)\n\n}\n\n/**\n *\n * @param object\n * @param path\n * @param value\n * @returns {void}\n * @throws {TypeError} unsupported type\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction setValueViaPath(object, path, value) {\n\n    validateString(path);\n\n    let parts = path.split(DELIMITER)\n    let last = parts.pop();\n    let subpath = parts.join(DELIMITER);\n\n    let stack = new Stack()\n    let current = subpath;\n    while (true) {\n\n        try {\n            getValueViaPath.call(this, object, current, true)\n            break;\n        } catch (e) {\n\n        }\n\n        stack.push(current);\n        parts.pop();\n        current = parts.join(DELIMITER);\n\n        if (current === \"\") break;\n    }\n\n    while (!stack.isEmpty()) {\n        current = stack.pop();\n        let obj = {};\n\n        if (!stack.isEmpty()) {\n            let n = stack.peek().split(DELIMITER).pop();\n            if (isInteger(parseInt(n))) {\n                obj = [];\n            }\n\n        }\n\n        setValueViaPath.call(this, object, current, obj);\n    }\n\n    let anchor = getValueViaPath.call(this, object, subpath);\n\n    if (!isObject(object) && !isArray(object)) {\n        throw TypeError(\"unsupported type: \" + typeof object);\n    }\n\n    if (anchor instanceof Map || anchor instanceof WeakMap) {\n        anchor.set(last, value);\n    } else if (anchor instanceof Set || anchor instanceof WeakSet) {\n        anchor.append(value)\n\n    } else if (typeof WeakRef === 'function' && anchor instanceof WeakRef) {\n        throw Error('unsupported action for this data type');\n\n    } else if (isArray(anchor)) {\n        last = parseInt(last);\n        validateInteger(last)\n        assignProperty(anchor, last, value);\n    } else {\n        assignProperty(anchor, last, value);\n    }\n\n\n}\n\n/**\n * @private\n * @param {object} object\n * @param {string} key\n * @param {*} value\n */\nfunction assignProperty(object, key, value) {\n\n    if (!object.hasOwnProperty(key)) {\n        object[key] = value;\n        return;\n    }\n\n    if (value === undefined) {\n        delete object[key];\n    }\n\n    object[key] = value;\n\n}\n\n/**\n *\n * @param object\n * @param path\n * @returns {void}\n * @throws {TypeError} unsupported type\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @since 1.6.0\n * @private\n */\nfunction deleteValueViaPath(object, path) {\n\n    const parts = path.split(DELIMITER)\n    let last = parts.pop();\n    const subpath = parts.join(DELIMITER);\n\n    const anchor = getValueViaPath.call(this, object, subpath);\n\n    if (anchor instanceof Map) {\n        anchor.delete(last);\n    } else if (anchor instanceof Set || anchor instanceof WeakMap || anchor instanceof WeakSet || (typeof WeakRef === 'function' && anchor instanceof WeakRef)) {\n        throw Error('unsupported action for this data type');\n\n    } else if (isArray(anchor)) {\n        last = parseInt(last);\n        validateInteger(last)\n        delete anchor[last];\n    } else {\n        delete anchor[last];\n    }\n\n\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/stack.js';\n * console.log(new Monster.Types.Stack())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/stack.js';\n * console.log(new Stack())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Stack extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.data = [];\n    }\n\n\n    /**\n     * @return {boolean}\n     */\n    isEmpty() {\n        return this.data.length === 0;\n    }\n\n    /**\n     * looks at the object at the top of this stack without removing it from the stack.\n     *\n     * @return {*}\n     */\n    peek() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n\n        return this.data?.[this.data.length - 1];\n    }\n\n    /**\n     * pushes an item onto the top of this stack.\n     *\n     * @param {*} value\n     * @returns {Queue}\n     */\n    push(value) {\n        this.data.push(value)\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        this.data = [];\n        return this;\n    }\n\n    /**\n     * removes the object at the top of this stack and returns\n     * that object as the value of this function. is the stack empty\n     * the return value is undefined.\n     *\n     * @return {*}\n     */\n    pop() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        return this.data.pop();\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', Stack);\nexport {Monster, Stack}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray, isObject} from \"../types/is.js\";\nimport {typeOf} from \"../types/typeof.js\";\n\n/**\n * With the diff function you can perform the change of one object to another. The result shows the changes of the second object to the first object.\n *\n * The operator `add` means that something has been added to the second object. `delete` means that something has been deleted from the second object compared to the first object.\n *\n * You can call the method via the monster namespace `Monster.Data.Diff()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n * console.log(Monster.Data.Diff(a, b))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n * console.log(Diff(a, b))\n * </script>\n * ```\n *\n * @example\n *\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n *\n * // given are two objects x and y.\n *\n * let x = {\n *     a: 1,\n *     b: \"Hello!\"\n * }\n *\n *  let y = {\n *     a: 2,\n *     c: true\n * }\n *\n * // These two objects can be compared with each other.\n *\n * console.log(Diff(x, y));\n *\n * // the result is then the following\n *\n * //\n * // [\n * // {\n * //        operator: 'update',\n * //        path: [ 'a' ],\n * //        first: { value: 1, type: 'number' },\n * //        second: { value: 2, type: 'number' }\n * //    },\n * // {\n * //        operator: 'delete',\n * //        path: [ 'b' ],\n * //        first: { value: 'Hello!', type: 'string' }\n * //    },\n * // {\n * //        operator: 'add',\n * //        path: [ 'c' ],\n * //        second: { value: true, type: 'boolean' }\n * //    }\n * // ]\n *\n * @param {*} first\n * @param {*} second\n * @return {array}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nfunction Diff(first, second) {\n    return doDiff(first, second)\n}\n\n/**\n * @private\n * @param a\n * @param b\n * @param type\n * @return {Set<string>|Set<number>}\n */\nfunction getKeys(a, b, type) {\n    if (isArray(type)) {\n        const keys = a.length > b.length ? new Array(a.length) : new Array(b.length);\n        keys.fill(0);\n        return new Set(keys.map((_, i) => i));\n    }\n\n    return new Set(Object.keys(a).concat(Object.keys(b)));\n}\n\n/**\n * @private\n * @param a\n * @param b\n * @param path\n * @param diff\n * @return {array}\n */\nfunction doDiff(a, b, path, diff) {\n\n    let typeA = typeOf(a)\n    let typeB = typeOf(b)\n\n    const currPath = path || [];\n    const currDiff = diff || [];\n\n    if (typeA === typeB && (typeA === 'object' || typeA ==='array')) { \n\n        getKeys(a, b, typeA).forEach((v) => {\n\n            if (!(Object.prototype.hasOwnProperty.call(a, v))) {\n                currDiff.push(buildResult(a[v], b[v], 'add', currPath.concat(v)));\n            } else if (!(Object.prototype.hasOwnProperty.call(b, v))) {\n                currDiff.push(buildResult(a[v], b[v], 'delete', currPath.concat(v)));\n            } else {\n                doDiff(a[v], b[v], currPath.concat(v), currDiff);\n            }\n        });\n\n    } else {\n\n        const o = getOperator(a, b, typeA, typeB);\n        if (o !== undefined) {\n            currDiff.push(buildResult(a, b, o, path));\n        }\n\n    }\n\n    return currDiff;\n\n}\n\n/**\n *\n * @param {*} a\n * @param {*} b\n * @param {string} operator\n * @param {array} path\n * @return {{path: array, operator: string}}\n * @private\n */\nfunction buildResult(a, b, operator, path) {\n\n    const result = {\n        operator,\n        path,\n    };\n\n    if (operator !== 'add') {\n        result.first = {\n            value: a,\n            type: typeof a\n        };\n\n        if (isObject(a)) {\n            const name = Object.getPrototypeOf(a)?.constructor?.name;\n            if (name !== undefined) {\n                result.first.instance = name;\n            }\n        }\n    }\n\n    if (operator === 'add' || operator === 'update') {\n        result.second = {\n            value: b,\n            type: typeof b\n        };\n\n        if (isObject(b)) {\n            const name = Object.getPrototypeOf(b)?.constructor?.name;\n            if (name !== undefined) {\n                result.second.instance = name;\n            }\n        }\n\n    }\n\n    return result;\n}\n\n/**\n * @private\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n */\nfunction isNotEqual(a, b) {\n\n    if (typeof a !== typeof b) {\n        return true;\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n        return a.getTime() !== b.getTime();\n    }\n\n    return a !== b;\n}\n\n/**\n * @private\n * @param {*} a\n * @param {*} b\n * @return {string|undefined}\n */\nfunction getOperator(a, b) {\n\n    /**\n     * @type {string|undefined}\n     */\n    let operator;\n\n    /**\n     * @type {string}\n     */\n    let typeA = typeof a;\n\n    /**\n     * @type {string}\n     */\n    let typeB = typeof b;\n\n    if (typeA === 'undefined' && typeB !== 'undefined') {\n        operator = 'add';\n    } else if (typeA !== 'undefined' && typeB === 'undefined') {\n        operator = 'delete';\n    } else if (isNotEqual(a, b)) {\n        operator = 'update';\n    }\n\n    return operator;\n\n}\n\nassignToNamespace('Monster.Data', Diff);\nexport {Monster, Diff}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * The built-in typeof method is known to have some historical weaknesses. This function tries to provide a better and more accurate result.\n *\n * You can call the method via the monster namespace `Monster.Types.typeOf()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n * console.log(Monster.Types.typeOf())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n * console.log(typeOf())\n * </script>\n * ```\n *\n * @example\n *\n * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n *\n * console.log(typeOf(undefined)); // ↦ undefined\n * console.log(typeOf(\"\")); // ↦ string\n * console.log(typeOf(5)); // ↦ number\n * console.log(typeOf({})); // ↦ object\n * console.log(typeOf([])); // ↦ array\n * console.log(typeOf(new Map)); // ↦ map\n * console.log(typeOf(true)); // ↦ boolean\n *\n * @param {*} value\n * @return {string}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n */\nfunction typeOf(value) {\n    let type = ({}).toString.call(value).match(/\\s([a-zA-Z]+)/)[1];\n    if ('Object' === type) {\n        const results = (/^(class|function)\\s+(\\w+)/).exec(value.constructor.toString());\n        type = (results && results.length > 2) ? results[2] : '';\n    }\n    return type.toLowerCase();\n}\n\nassignToNamespace('Monster.Types', typeOf);\nexport {\n    Monster,\n    typeOf\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray, isObject} from \"../types/is.js\";\nimport {typeOf} from \"../types/typeof.js\";\n\n/**\n * extend copies all enumerable own properties from one or\n * more source objects to a target object. It returns the modified target object.\n *\n * You can call the method via the monster namespace `Monster.Data.extend()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/extend.js';\n * console.log(Monster.Data.extend(a, b))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/extend.js';\n * console.log(extend(a, b))\n * </script>\n * ```\n *\n * @param {object} target\n * @param {object}\n * @return {object}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n * @throws {Error} unsuported argument\n * @throws {Error} type mismatch\n */\nfunction extend() {\n    let o, i;\n\n    for (i = 0; i < arguments.length; i++) {\n        let a = arguments[i];\n\n        if (!(isObject(a) || isArray(a))) {\n            throw new Error('unsuported argument ' + JSON.stringify(a));\n        }\n\n        if (o === undefined) {\n            o = a;\n            continue;\n        }\n\n        for (let k in a) {\n\n            let v = a?.[k];\n\n            if (v === o?.[k]) {\n                continue;\n            }\n\n            if ((isObject(v) || isArray(v))) {\n\n                if (o[k] === undefined) {\n                    if (isArray(v)) {\n                        o[k] = [];\n                    } else {\n                        o[k] = {};\n                    }\n                }\n\n                if (typeOf(o[k]) !== typeOf(v)) {\n                    throw new Error(\"type mismatch: \" + JSON.stringify(o[k]) + \" != \" + JSON.stringify(v));\n                }\n\n                o[k] = extend(o[k], v);\n\n            } else {\n                o[k] = v;\n            }\n\n        }\n    }\n\n    return o;\n}\n\n\nassignToNamespace('Monster.Data', extend);\nexport {Monster, extend}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateString} from '../types/validate.js';\nimport {Transformer} from './transformer.js';\n\n\nconst DELIMITER = '|';\n\n/**\n * The pipe class makes it possible to combine several processing steps.\n *\n * You can call the method via the monster namespace `new Monster.Data.Pipe()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n * console.log(new Monster.Data.Pipe())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n * console.log(new Pipe())\n * </script>\n * ```\n *\n * A pipe consists of commands whose input and output are connected with the pipe symbol `|`.\n *\n * With the Pipe, processing steps can be combined. Here, the value of an object is accessed via the pathfinder (path command).\n * the word is then converted to uppercase letters and a prefix Hello is added. the two backslash safe the space char.\n *\n * @example\n * import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n *\n * let obj = {\n *    a: {\n *        b: {\n *            c: {\n *                d: \"world\"\n *            }\n *        }\n *    }\n * }\n *\n * console.log(new Pipe('path:a.b.c.d | toupper | prefix:Hello\\\\ ').run(obj));\n * // ↦ Hello WORLD\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Pipe extends Base {\n\n    /**\n     *\n     * @param {string} pipe a pipe consists of commands whose input and output are connected with the pipe symbol `|`.\n     * @throws {TypeError}\n     */\n    constructor(pipe) {\n        super();\n        validateString(pipe);\n        this.pipe = pipe.split(DELIMITER).map((v) => {\n            return new Transformer(v);\n        });\n\n\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @param {object} context\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback, context) {\n\n        for (const [, t] of Object.entries(this.pipe)) {\n            t.setCallback(name, callback, context);\n        }\n\n        return this;\n    }\n\n    /**\n     * run a pipe\n     *\n     * @param {*} value\n     * @returns {*}\n     */\n    run(value) {\n        return this.pipe.reduce((accumulator, transformer, currentIndex, array) => {\n            return transformer.run(accumulator);\n        }, value);\n    }\n}\n\nassignToNamespace('Monster.Data', Pipe);\nexport {Monster, Pipe}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobal} from \"../types/global.js\";\nimport {ID} from '../types/id.js';\nimport {isArray, isObject, isString} from '../types/is.js';\nimport {\n    validateFunction,\n    validateInteger,\n    validateObject,\n    validatePrimitive,\n    validateString\n} from '../types/validate.js';\nimport {clone} from \"../util/clone.js\";\nimport {Pathfinder} from \"./pathfinder.js\";\n\n/**\n * The transformer class is a swiss army knife for manipulating values. especially in combination with the pipe, processing chains can be built up.\n *\n * You can call the method via the monster namespace `new Monster.Data.Transformer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n * console.log(new Monster.Data.Transformer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n * console.log(new Transformer())\n * </script>\n * ```\n *\n * A simple example is the conversion of all characters to lowercase. for this purpose the command tolower must be used.\n *\n * ```\n * let t = new Transformer('tolower').run('ABC'); // ↦ abc\n * ```\n *\n * **all commands**\n *\n * in the following table all commands, parameters and existing aliases are described.\n *\n * | command      | parameter                  | alias                   | description                                                                                                                                                                                                                                                                                                                                                |\n * |:-------------|:---------------------------|:------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n * | base64       |                            |                         | Converts the value to base64                                                                                                                                                                                                                                                                                                                               |\n * | call         | function,param1:param2:... |                         | Calling a callback function. The function can be defined in three places: either globally, in the context `addCallback` or in the passed object                                                                                                                                                                                                            |\n * | default      |                            |                         | If the value is undefined the first argument is returned, otherwise the value. (since 1.12.0)                                                                                                                                                                                                                                                              |\n * | empty        |                            |                         | Return empty String \"\"                                                                                                                                                                                                                                                                                                                                     |\n * | fromjson     |                            |                         | Type conversion from a JSON string (since 1.12.0)                                                                                                                                                                                                                                                                                                          |\n * | if           | statement1:statement2      | ?                       | Is the ternary operator, the first parameter is the valid statement, the second is the false part. To use the current value in the queue, you can set the value keyword. On the other hand, if you want to have the static string \"value\", you have to put one backslash \\\\ in front of it and write value. the follow values are true: 'on', true, 'true' |\n * | index        | key:default                | property, key           | Fetches a value from an object, an array, a map or a set                                                                                                                                                                                                                                                                                                   |\n * | length       |                            | count                   | Length of the string or entries of an array or object                                                                                                                                                                                                                                                                                                      |\n * | nop          |                            |                         | Do nothing                                                                                                                                                                                                                                                                                                                                                 |\n * | path         | path                       |                         | The access to an object is done via a Pathfinder object                                                                                                                                                                                                                                                                                                    |\n * | plaintext    |                            | plain                   | All HTML tags are removed (*)                                                                                                                                                                                                                                                                                                                              |\n * | prefix       | text                       |                         | Adds a prefix                                                                                                                                                                                                                                                                                                                                              |\n * | rawurlencode |                            |                         | URL coding                                                                                                                                                                                                                                                                                                                                                 |\n * | static       |                            | none                    | The Arguments value is used and passed to the value. Special characters \\ <space> and : can be quotet by a preceding \\.                                                                                                                                                                                                                                    |\n * | substring    | start:length               |                         | Returns a substring                                                                                                                                                                                                                                                                                                                                        |\n * | suffix       | text                       |                         | Adds a suffix                                                                                                                                                                                                                                                                                                                                              |\n * | tointeger    |                            |                         | Type conversion to an integer value                                                                                                                                                                                                                                                                                                                        |\n * | tojson       |                            |                         | Type conversion to a JSON string (since 1.8.0)                                                                                                                                                                                                                                                                                                             |\n * | tolower      |                            | strtolower, tolowercase | The input value is converted to lowercase letters                                                                                                                                                                                                                                                                                                          |\n * | tostring     |                            |                         | Type conversion to a string                                                                                                                                                                                                                                                                                                                                |\n * | toupper      |                            | strtoupper, touppercase | The input value is converted to uppercase letters                                                                                                                                                                                                                                                                                                          |\n * | trim         |                            |                         | Remove spaces at the beginning and end                                                                                                                                                                                                                                                                                                                     |\n * | ucfirst      |                            |                         | First character large                                                                                                                                                                                                                                                                                                                                      |\n * | ucwords      |                            |                         | Any word beginning large                                                                                                                                                                                                                                                                                                                                   |\n * | undefined    |                            |                         | Return undefined                                                                                                                                                                                                                                                                                                                                           |\n * | uniqid       |                            |                         | Creates a string with a unique value (**)                                                                                                                                                                                                                                                                                                                  |\n *\n *  (*) for this functionality the extension [jsdom](https://www.npmjs.com/package/jsdom) must be loaded in the nodejs context.\n *\n * ```\n *  // polyfill\n *  if (typeof window !== \"object\") {\n *     const {window} = new JSDOM('', {\n *         url: 'http://example.com/',\n *         pretendToBeVisual: true\n *     });\n * \n *     [\n *         'self',\n *         'document',\n *         'Node',\n *         'Element',\n *         'HTMLElement',\n *         'DocumentFragment',\n *         'DOMParser',\n *         'XMLSerializer',\n *         'NodeFilter',\n *         'InputEvent',\n *         'CustomEvent'\n *     ].forEach(key => (global[key] = window[key]));\n * }\n * ```\n *\n * (**) for this command the crypt library is necessary in the nodejs context.\n *\n * ```\n * import * as Crypto from \"@peculiar/webcrypto\";\n * global['crypto'] = new Crypto.Crypto();\n * ```\n *\n * @example\n *\n * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n *\n * const transformer = new Transformer(\"tolower\")\n *\n * console.log(transformer.run(\"HELLO\"))\n * // ↦ hello\n *\n * console.log(transformer.run(\"WORLD\"))\n * // ↦ world\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Transformer extends Base {\n    /**\n     *\n     * @param {string} definition\n     */\n    constructor(definition) {\n        super();\n        validateString(definition);\n\n        this.args = disassemble(definition);\n        this.command = this.args.shift()\n        this.callbacks = new Map();\n\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @param {object} context\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback, context) {\n        validateString(name)\n        validateFunction(callback)\n\n        if (context !== undefined) {\n            validateObject(context);\n        }\n\n        this.callbacks.set(name, {\n            callback: callback,\n            context: context,\n        });\n\n        return this;\n    }\n\n    /**\n     *\n     * @param {*} value\n     * @returns {*}\n     * @throws {Error} unknown command\n     * @throws {TypeError} unsupported type\n     * @throws {Error} type not supported\n     */\n    run(value) {\n        return transform.apply(this, [value])\n    }\n}\n\nassignToNamespace('Monster.Data', Transformer);\nexport {Monster, Transformer}\n\n/**\n *\n * @param {string} command\n * @returns {array}\n * @private\n */\nfunction disassemble(command) {\n\n    validateString(command);\n\n    let placeholder = new Map;\n    const regex = /((?<pattern>\\\\(?<char>.)){1})/mig;\n\n    // The separator for args must be quotable\n    // undefined string which should not occur normally and is also not a regex\n    let result = command.matchAll(regex)\n\n    for (let m of result) {\n        let g = m?.['groups'];\n        if (!isObject(g)) {\n            continue;\n        }\n\n        let p = g?.['pattern'];\n        let c = g?.['char'];\n\n        if (p && c) {\n            let r = '__' + new ID().toString() + '__';\n            placeholder.set(r, c);\n            command = command.replace(p, r);\n        }\n\n    }\n    let parts = command.split(':');\n\n    parts = parts.map(function (value) {\n        let v = value.trim();\n        for (let k of placeholder) {\n            v = v.replace(k[0], k[1]);\n        }\n        return v;\n\n\n    });\n\n    return parts\n}\n\n/**\n * tries to make a string out of value and if this succeeds to return it back\n *\n * @param {*} value\n * @returns {string}\n * @private\n */\nfunction convertToString(value) {\n\n    if (isObject(value) && value.hasOwnProperty('toString')) {\n        value = value.toString();\n    }\n\n    validateString(value)\n    return value;\n}\n\n/**\n *\n * @param {*} value\n * @returns {*}\n * @private\n * @throws {Error} unknown command\n * @throws {TypeError} unsupported type\n * @throws {Error} type not supported\n */\nfunction transform(value) {\n\n    let args = clone(this.args);\n    let key\n\n    switch (this.command) {\n\n        case 'static':\n            return this.args.join(':');\n\n        case 'tolower':\n        case 'strtolower':\n        case 'tolowercase':\n            validateString(value)\n            return value.toLowerCase();\n\n        case 'toupper':\n        case 'strtoupper':\n        case 'touppercase':\n            validateString(value)\n            return value.toUpperCase();\n\n        case 'tostring':\n            return \"\" + value;\n\n        case 'tointeger':\n            let n = parseInt(value);\n            validateInteger(n);\n            return n\n\n        case 'tojson':\n            return JSON.stringify(value);\n\n        case 'fromjson':\n            return JSON.parse(value);\n\n        case 'trim':\n            validateString(value)\n            return value.trim();\n\n        case 'rawurlencode':\n            validateString(value)\n            return encodeURIComponent(value)\n                .replace(/!/g, '%21')\n                .replace(/'/g, '%27')\n                .replace(/\\(/g, '%28')\n                .replace(/\\)/g, '%29')\n                .replace(/\\*/g, '%2A');\n\n\n        case  'call':\n\n            /**\n             * callback-definition\n             * function callback(value, ...args) {\n             *   return value;\n             * }\n             */\n\n            let callback;\n            let callbackName = args.shift();\n            let context = getGlobal();\n\n            if (isObject(value) && value.hasOwnProperty(callbackName)) {\n                callback = value[callbackName];\n            } else if (this.callbacks.has(callbackName)) {\n                let s = this.callbacks.get(callbackName);\n                callback = s?.['callback'];\n                context = s?.['context'];\n            } else if (typeof window === 'object' && window.hasOwnProperty(callbackName)) {\n                callback = window[callbackName];\n            }\n            validateFunction(callback);\n\n            args.unshift(value);\n            return callback.call(context, ...args);\n\n        case  'plain':\n        case  'plaintext':\n            validateString(value);\n            let doc = new DOMParser().parseFromString(value, 'text/html');\n            return doc.body.textContent || \"\";\n\n        case  'if':\n        case  '?':\n\n            validatePrimitive(value);\n\n            let trueStatement = (args.shift() || undefined);\n            let falseStatement = (args.shift() || undefined);\n\n            if (trueStatement === 'value') {\n                trueStatement = value;\n            }\n            if (trueStatement === '\\\\value') {\n                trueStatement = 'value';\n            }\n            if (falseStatement === 'value') {\n                falseStatement = value;\n            }\n            if (falseStatement === '\\\\value') {\n                falseStatement = 'value';\n            }\n\n            let condition = ((value !== undefined && value !== '' && value !== 'off' && value !== 'false' && value !== false) || value === 'on' || value === 'true' || value === true);\n            return condition ? trueStatement : falseStatement;\n\n\n        case 'ucfirst':\n            validateString(value);\n\n            let firstchar = value.charAt(0).toUpperCase();\n            return firstchar + value.substr(1);\n        case 'ucwords':\n            validateString(value);\n\n            return value.replace(/^([a-z\\u00E0-\\u00FC])|\\s+([a-z\\u00E0-\\u00FC])/g, function (v) {\n                return v.toUpperCase();\n            });\n\n        case  'count':\n        case  'length':\n\n            if ((isString(value) || isObject(value) || isArray(value)) && value.hasOwnProperty('length')) {\n                return value.length;\n            }\n\n            throw new TypeError(\"unsupported type \" + typeof value);\n\n        case 'base64':\n            convertToString(value);\n            return btoa(value);\n\n        case 'empty':\n            return '';\n\n        case 'undefined':\n            return undefined;\n\n        case 'prefix':\n            validateString(value);\n            let prefix = args?.[0];\n            return prefix + value;\n\n        case 'suffix':\n            validateString(value);\n            let suffix = args?.[0];\n            return value + suffix;\n\n        case 'uniqid':\n            return (new ID()).toString();\n\n        case 'key':\n        case 'property':\n        case 'index':\n\n            key = (args.shift() || 'undefined');\n            let defaultValue = (args.shift() || '');\n\n            if (value instanceof Map) {\n                if (!value.has(key)) {\n                    return defaultValue;\n                }\n                return value.get(key);\n            }\n\n            if (isObject(value) || isArray(value)) {\n\n                if (value?.[key]) {\n                    return value?.[key];\n                }\n\n                return defaultValue;\n            }\n\n            throw new Error(\"type not supported\")\n\n        case 'path':\n\n            key = (args.shift() || 'undefined');\n            return new Pathfinder(value).getVia(key);\n\n\n        case 'substring':\n\n            validateString(value);\n\n            let start = parseInt(args[0]) || 0;\n            let end = (parseInt(args[1]) || 0) + start;\n\n            return value.substring(start, end);\n\n        case 'nop':\n            return value;\n\n        case 'default':\n            if (value !== undefined) {\n                return value;\n            }\n            return args[0];\n\n        default:\n            throw new Error(\"unknown command \" + this.command)\n    }\n\n    return value;\n}\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {validateString} from \"./validate.js\";\n\n/**\n * @private\n * @type {Map<string, integer>}\n */\nlet internalCounter = new Map;\n\n/**\n * With the id class, sequences of ids can be created. for this purpose, an internal counter is incremented for each prefix.\n * thus, the first id with the prefix `myid` will be `myid1` and the second id `myid2`.\n * The ids are the same for every call, for example on a web page.\n *\n * So the ids can also be used for navigation. you just have to take care that the order stays the same.\n *\n * You can call the method via the monster namespace `new Monster.Types.ID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/id.js';\n * console.log(new Monster.Types.ID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/id.js';\n * console.log(new ID())\n * </script>\n * ```\n *\n * As of version 1.6.0 there is the new RandomID. this ID class is continuous from now on.\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ID extends Base {\n\n    /**\n     * create new object\n     */\n    constructor(prefix) {\n        super();\n\n        if (prefix === undefined) {\n            prefix = \"id\";\n        }\n\n        validateString(prefix);\n\n        if (!internalCounter.has(prefix)) {\n            internalCounter.set(prefix, 1);\n        }\n\n        let count = internalCounter.get(prefix);\n        this.id = prefix + count;\n\n        internalCounter.set(prefix, ++count);\n    }\n\n    /**\n     * @return {string}\n     */\n    toString() {\n        return this.id;\n    }\n\n}\n\nassignToNamespace('Monster.Types', ID);\nexport {Monster, ID}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalFunction} from \"../types/global.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateInstance, validateString} from \"../types/validate.js\";\n\n\n/**\n * attribute prefix\n *\n * @type {string}\n * @memberOf Monster.DOM\n */\nconst ATTRIBUTEPREFIX = \"data-monster-\";\n\n/**\n * you can call the method via the monster namespace `new Monster.DOM.Assembler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/assembler.js';\n * console.log(new Monster.DOM.Assembler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Assembler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/assembler.js';\n * console.log(new Assembler())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary Allows you to build an html fragment\n */\nclass Assembler extends Base {\n\n    /**\n     * @param {DocumentFragment} fragment\n     * @throws {TypeError} value is not an instance of\n     * @throws {TypeError} value is not a function\n     * @throws {Error} the function is not defined\n     */\n    constructor(fragment) {\n        super();\n        this.attributePrefix = ATTRIBUTEPREFIX;\n        validateInstance(fragment, getGlobalFunction('DocumentFragment'));\n        this.fragment = fragment;\n    }\n\n    /**\n     *\n     * @param {string} prefix\n     * @returns {Assembler}\n     * @throws {TypeError} value is not a string\n     */\n    setAttributePrefix(prefix) {\n        validateString(prefix);\n        this.attributePrefix = prefix;\n        return this;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getAttributePrefix() {\n        return this.attributePrefix;\n    }\n\n    /**\n     *\n     * @param {ProxyObserver|undefined} data\n     * @return {DocumentFragment}\n     * @throws {TypeError} value is not an instance of\n     */\n    createDocumentFragment(data) {\n\n        if (data === undefined) {\n            data = new ProxyObserver({});\n        }\n\n        validateInstance(data, ProxyObserver);\n        let fragment = this.fragment.cloneNode(true);\n        return fragment;\n    }\n\n}\n\nassignToNamespace('Monster.DOM', Assembler);\nexport {Monster, ATTRIBUTEPREFIX, Assembler}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {isArray, isObject, isPrimitive} from \"./is.js\";\nimport {Observer} from \"./observer.js\";\nimport {ObserverList} from \"./observerlist.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * An observer manages a callback function\n *\n * You can call create the class via the monster namespace `new Monster.Types.ProxyObserver()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * console.log(new Monster.Types.ProxyObserver())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * console.log(new ProxyObserver())\n * </script>\n * ```\n *\n * with the ProxyObserver you can attach observer for observation. with each change at the object to be observed an update takes place.\n *\n * this also applies to nested objects.\n *\n * @example\n *\n * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n *\n * const o = new Observer(function () { \n *   if (isObject(this) && this instanceof ProxyObserver) {\n *       // do something (this ist ProxyObserver)\n *       const subject = this.getSubject();\n *       console.log(subject);\n *   }\n * });\n *\n * let realSubject = {\n *   a: {\n *       b: {\n *           c: true\n *       },\n *       d: 9\n *   }\n * }\n *\n * const p = new ProxyObserver(realSubject);\n * p.attachObserver(o);\n * const s = p.getSubject();\n * s.a.b.c = false;\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ProxyObserver extends Base {\n\n    /**\n     *\n     * @param {object} object\n     * @throws {TypeError} value is not a object\n     */\n    constructor(object) {\n        super();\n\n        this.realSubject = validateObject(object);\n        this.subject = new Proxy(object, getHandler.call(this));\n\n        this.objectMap = new WeakMap();\n        this.objectMap.set(this.realSubject, this.subject);\n\n        this.proxyMap = new WeakMap();\n        this.proxyMap.set(this.subject, this.realSubject);\n\n        this.observers = new ObserverList;\n    }\n\n    /**\n     * get the real object\n     *\n     * changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.\n     *\n     * @returns {object}\n     */\n    getSubject() {\n        return this.subject\n    }\n\n    /**\n     * get the proxied object\n     *\n     * @returns {object}\n     */\n    getRealSubject() {\n        return this.realSubject\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    attachObserver(observer) {\n        this.observers.attach(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    detachObserver(observer) {\n        this.observers.detach(observer)\n        return this;\n    }\n\n    /**\n     * notify all observer\n     *\n     * @returns {Promise}\n     */\n    notifyObservers() {\n        return this.observers.notify(this);\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {boolean}\n     */\n    containsObserver(observer) {\n        return this.observers.contains(observer)\n    }\n\n}\n\nassignToNamespace('Monster.Types', ProxyObserver);\nexport {Monster, ProxyObserver}\n\n/**\n *\n * @returns {{defineProperty: (function(*=, *=, *=): *), setPrototypeOf: (function(*, *=): boolean), set: (function(*, *, *, *): boolean), get: ((function(*=, *=, *=): (undefined))|*), deleteProperty: ((function(*, *): (boolean))|*)}}\n * @private\n * @see {@link https://gitlab.schukai.com/-/snippets/49}\n */\nfunction getHandler() {\n\n    const proxy = this;\n\n    // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots\n    const handler = {\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n        get: function (target, key, receiver) {\n\n            const value = Reflect.get(target, key, receiver);\n\n            if (typeof key === \"symbol\") {\n                return value;\n            }\n\n            if (isPrimitive(value)) {\n                return value;\n            }\n\n            // set value as proxy if object or array\n            if ((isArray(value) || isObject(value))) {\n                if (proxy.objectMap.has(value)) {\n                    return proxy.objectMap.get(value);\n                } else if (proxy.proxyMap.has(value)) {\n                    return value;\n                } else {\n                    let p = new Proxy(value, handler);\n                    proxy.objectMap.set(value, p);\n                    proxy.proxyMap.set(p, value);\n                    return p;\n                }\n\n            }\n\n            return value;\n\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver \n        set: function (target, key, value, receiver) {\n\n            if (proxy.proxyMap.has(value)) {\n                value = proxy.proxyMap.get(value);\n            }\n\n            if (proxy.proxyMap.has(target)) {\n                target = proxy.proxyMap.get(target);\n            }\n\n            let current = Reflect.get(target, key, receiver);\n            if (proxy.proxyMap.has(current)) {\n                current = proxy.proxyMap.get(current);\n            }\n\n            if (current === value) {\n                return true;\n            }\n\n            let result;\n            let descriptor = Reflect.getOwnPropertyDescriptor(target, key);\n\n            if (descriptor === undefined) {\n                descriptor = {\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                }\n            }\n\n            descriptor['value'] = value;\n            result = Reflect.defineProperty(target, key, descriptor);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        },\n\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n        deleteProperty: function (target, key) {\n            if (key in target) {\n                delete target[key];\n\n                if (typeof key !== \"symbol\") {\n                    proxy.observers.notify(proxy);\n                }\n\n                return true;\n            }\n            return false;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n        defineProperty: function (target, key, descriptor) {\n\n            let result = Reflect.defineProperty(target, key, descriptor);\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n            return result;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n        setPrototypeOf: function (target, key) {\n            let result = Reflect.setPrototypeOf(object1, key);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        }\n\n    };\n\n\n    return handler;\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {isObject} from './is.js';\nimport {TokenList} from './tokenlist.js';\nimport {UniqueQueue} from './uniquequeue.js';\n\n/**\n * An observer manages a callback function\n *\n * You can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * console.log(new Monster.Types.Observer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * console.log(new Observer())\n * </script>\n * ```\n *\n * The update method is called with the subject object as this pointer. For this reason the callback should not\n * be an arrow function, because it gets the this pointer of its own context.\n *\n * ```\n * <script>\n * new Observer(()=>{\n *     // this is not subject\n * })\n *\n * new Observer(function() {\n *     // this is subject\n * })\n * </script>\n * ```\n *\n * Additional arguments can be passed to the callback. To do this, simply specify them.\n *\n * ```\n * <script>\n * Observer(function(a, b, c) {\n *     console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\n * </script>\n * ```\n *\n * The callback function must have as many parameters as arguments are given.\n *\n * @example\n *\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n *\n * const observer = new Observer(function(a, b, c) {\n *      console.log(this, a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true);\n *\n * observer.update({value:true}).then(()=>{});\n * // ↦ {value: true} \"a\" 2 true\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Observer extends Base {\n\n    /**\n     *\n     * @param {function} callback\n     * @param {*} args\n     */\n    constructor(callback, ...args) {\n        super();\n\n        if (typeof callback !== 'function') {\n            throw new Error(\"observer callback must be a function\")\n        }\n\n        this.callback = callback;\n        this.arguments = args;\n        this.tags = new TokenList;\n        this.queue = new UniqueQueue();\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    addTag(tag) {\n        this.tags.add(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    removeTag(tag) {\n        this.tags.remove(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @returns {Array}\n     */\n    getTags() {\n        return this.tags.entries()\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {boolean}\n     */\n    hasTag(tag) {\n        return this.tags.contains(tag)\n    }\n\n    /**\n     *\n     * @param {object} subject\n     * @returns {Promise}\n     */\n    update(subject) {\n        let self = this;\n\n        return new Promise(function (resolve, reject) {\n            if (!isObject(subject)) {\n                reject(\"subject must be an object\");\n                return;\n            }\n\n            self.queue.add(subject);\n\n            setTimeout(() => {\n\n                try {\n                    // the queue and the settimeout ensure that an object is not \n                    // informed of the same change more than once.\n                    if (self.queue.isEmpty()) {\n                        resolve();\n                        return;\n                    }\n\n                    let s = self.queue.poll();\n                    let result = self.callback.apply(s, self.arguments);\n\n                    if (isObject(result) && result instanceof Promise) {\n                        result.then(resolve).catch(reject);\n                        return;\n                    }\n\n                    resolve(result);\n\n                } catch (e) {\n                    reject(e);\n                }\n            }, 0)\n\n        });\n\n    };\n\n}\n\nassignToNamespace('Monster.Types', Observer);\nexport {Monster, Observer}\n\n\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isIterable, isString} from '../types/is.js';\nimport {validateFunction, validateString} from '../types/validate.js';\nimport {Base} from './base.js';\n\n/**\n * A tokenlist allows you to manage tokens (individual character strings such as css classes in an attribute string).\n *\n * The tokenlist offers various functions to manipulate values. For example, you can add, remove or replace a class in a CSS list.\n *\n * You can call the method via the monster namespace `new Monster.Types.TokenList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/tokenlist.js';\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/tokenlist.js';\n * console.log(new TokenList(\"myclass row\"))\n * console.log(new TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * This class implements the [iteration protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).\n *\n * ```\n * console.log(typeof new TokenList(\"myclass row\")[Symbol.iterator]); // \"function\"\n * ```\n *\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass TokenList extends Base {\n\n    /**\n     *\n     * @param {array|string|iteratable} init\n     */\n    constructor(init) {\n        super();\n        this.tokens = new Set();\n\n        if (typeof init !== \"undefined\") {\n            this.add(init);\n        }\n\n    }\n\n    /**\n     * Iterator protocol\n     *\n     * @returns {Symbol.iterator}\n     */\n    getIterator() {\n        return this[Symbol.iterator]();\n    }\n\n    /**\n     * Iterator\n     *\n     * @returns {{next: ((function(): ({value: *, done: boolean}))|*)}}\n     */\n    [Symbol.iterator]() {\n        // Use a new index for each iterator. This makes multiple\n        // iterations over the iterable safe for non-trivial cases,\n        // such as use of break or nested looping over the same iterable.\n        let index = 0;\n        let entries = this.entries()\n\n        return {\n            next: () => {\n                if (index < entries.length) {\n                    return {value: entries?.[index++], done: false}\n                } else {\n                    return {done: true}\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if it contains token, otherwise false\n     *\n     * ```\n     * new TokenList(\"start middle end\").contains('start')); // ↦ true\n     * new TokenList(\"start middle end\").contains('end')); // ↦ true\n     * new TokenList(\"start middle end\").contains('xyz')); // ↦ false\n     * new TokenList(\"start middle end\").contains(['end','start','middle'])); // ↦ true\n     * new TokenList(\"start middle end\").contains(['end','start','xyz'])); // ↦ false\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     */\n    contains(value) {\n        if (isString(value)) {\n            value = value.trim()\n            let counter = 0;\n            value.split(\" \").forEach(token => {\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            })\n            return counter > 0 ? true : false;\n        }\n\n        if (isIterable(value)) {\n            let counter = 0;\n            for (let token of value) {\n                validateString(token);\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            }\n            return counter > 0 ? true : false;\n        }\n\n        return false;\n    }\n\n    /**\n     * add tokens\n     *\n     * ```\n     * new TokenList().add(\"abc xyz\").toString(); // ↦ \"abc xyz\"\n     * new TokenList().add([\"abc\",\"xyz\"]).toString(); // ↦ \"abc xyz\"\n     * new TokenList().add(undefined); // ↦ add nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    add(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.add(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.add(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all tokens\n     *\n     * @returns {TokenList}\n     */\n    clear() {\n        this.tokens.clear();\n        return this;\n    }\n\n    /**\n     * Removes token\n     *\n     * ```\n     * new TokenList(\"abc xyz\").remove(\"xyz\").toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove([\"xyz\"]).toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove(undefined); // ↦ remove nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    remove(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.delete(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.delete(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * this method replaces a token with a new token.\n     *\n     * if the passed token exists, it is replaced with newToken and TokenList is returned.\n     * if the token does not exist, newToken is not set and TokenList is returned.\n     *\n     * @param {string} token\n     * @param {string} newToken\n     * @returns {TokenList}\n     */\n    replace(token, newToken) {\n        validateString(token);\n        validateString(newToken);\n        if (!this.contains(token)) {\n            return this;\n        }\n\n        let a = Array.from(this.tokens)\n        let i = a.indexOf(token);\n        if (i === -1) return this;\n\n        a.splice(i, 1, newToken);\n        this.tokens = new Set();\n        this.add(a);\n\n        return this;\n\n\n    }\n\n    /**\n     * Removes token from string. If token doesn't exist it's added.\n     *\n     * ```\n     * new TokenList(\"abc def ghi\").toggle(\"def xyz\").toString(); // ↦ \"abc ghi xyz\"\n     * new TokenList(\"abc def ghi\").toggle([\"abc\",\"xyz\"]).toString(); // ↦ \"def ghi xyz\"\n     * new TokenList().toggle(undefined); // ↦ nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     * @throws {TypeError} unsupported value\n     */\n    toggle(value) {\n\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                toggleValue.call(this, token);\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                toggleValue.call(this, token);\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n\n    }\n\n    /**\n     * returns an array with all tokens\n     *\n     * @returns {array}\n     */\n    entries() {\n        return Array.from(this.tokens)\n    }\n\n    /**\n     * executes the provided function with each value of the set\n     *\n     * @param {function} callback\n     * @returns {TokenList}\n     */\n    forEach(callback) {\n        validateFunction(callback);\n        this.tokens.forEach(callback);\n        return this;\n    }\n\n    /**\n     * returns the individual tokens separated by a blank character\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.entries().join(' ');\n    }\n\n}\n\n/**\n * @private\n * @param token\n * @returns {toggleValue}\n * @throws {Error} must be called with TokenList.call\n */\nfunction toggleValue(token) {\n    if (!(this instanceof TokenList)) throw Error(\"must be called with TokenList.call\")\n    validateString(token);\n    token = token.trim();\n    if (this.contains(token)) {\n        this.remove(token);\n        return this;\n    }\n    this.add(token);\n    return this;\n}\n\nassignToNamespace('Monster.Types', TokenList);\nexport {Monster, TokenList}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Queue} from \"./queue.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/uniquequeue.js';\n * console.log(new Monster.Types.UniqueQueue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {UniqueQueue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/uniquequeue.js';\n * console.log(new UniqueQueue())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary A queue for unique values\n */\nclass UniqueQueue extends Queue {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.unique = new WeakSet();\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {object} value\n     * @returns {Queue}\n     * @throws {TypeError} value is not a object\n     */\n    add(value) {\n\n        validateObject(value);\n\n        if (!this.unique.has(value)) {\n            this.unique.add(value);\n            super.add(value);\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        super.clear();\n        this.unique = new WeakSet;\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {object}\n     */\n    poll() {\n\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        let value = this.data.shift();\n        this.unique.delete(value);\n        return value;\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', UniqueQueue);\nexport {Monster, UniqueQueue}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n * console.log(new Monster.Types.Queue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n * console.log(new Queue())\n * </script>\n * ```\n *\n * @example\n *\n * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n *\n * const queue = new Queue;\n *\n * queue.add(2);\n * queue.add(true);\n * queue.add(\"Hello\");\n * queue.add(4.5);\n *\n * console.log(queue.poll());\n * // ↦ 2\n * console.log(queue.poll());\n * // ↦ true\n * console.log(queue.poll());\n * // ↦ \"Hello\"\n * console.log(queue.poll());\n * // ↦ 4.5\n * console.log(queue.poll());\n * // ↦ undefined\n *\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary A Queue (Fifo)\n */\nclass Queue extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.data = [];\n    }\n\n\n    /**\n     * @return {boolean}\n     */\n    isEmpty() {\n        return this.data.length === 0;\n    }\n\n    /**\n     * Read the element at the front of the queue without removing it.\n     *\n     * @return {*}\n     */\n    peek() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n\n        return this.data[0];\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {*} value\n     * @returns {Queue}\n     */\n    add(value) {\n        this.data.push(value)\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        this.data = [];\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {*}\n     */\n    poll() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        return this.data.shift();\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', Queue);\nexport {Monster, Queue}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {Observer} from \"./observer.js\";\nimport {validateInstance} from \"./validate.js\";\n\n/**\n * With the help of the ObserverList class, observer can be managed.\n *\n * You can call the method via the monster namespace `new Monster.Types.ObserverList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observerlist.js';\n * console.log(new Monster.Types.ObserverList())\n * console.log(new Monster.Types.ObserverList())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observerlist.js';\n * console.log(ObserverList())\n * console.log(ObserverList())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ObserverList extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.observers = [];\n    }\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {ObserverList}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    attach(observer) {\n        validateInstance(observer, Observer)\n\n        this.observers.push(observer);\n        return this;\n    };\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {ObserverList}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    detach(observer) {\n        validateInstance(observer, Observer)\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                this.observers.splice(i, 1);\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {boolean}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    contains(observer) {\n        validateInstance(observer, Observer)\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /**\n     *\n     * @param subject\n     * @return {Promise}\n     */\n    notify(subject) {\n\n        let pomises = []\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            pomises.push(this.observers[i].update(subject));\n        }\n\n        return Promise.all(pomises);\n    };\n\n}\n\nassignToNamespace('Monster.Types', ObserverList);\nexport {Monster, ObserverList}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobalFunction} from \"../types/global.js\";\nimport {TokenList} from \"../types/tokenlist.js\";\nimport {validateInstance, validateString, validateSymbol} from \"../types/validate.js\";\nimport {ATTRIBUTE_OBJECTLINK} from \"./constants.js\";\n\n/**\n * Get the closest object link of a node\n *\n * if a node is specified without a object link, a recursive search upwards is performed until the corresponding\n * object link is found, or undefined is returned.\n *\n * you can call the method via the monster namespace `Monster.DOM.getUpdaterFromNode()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(Monster.DOM.findClosestObjectLink())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(findClosestObjectLink())\n * </script>\n * ```\n *\n * @param {HTMLElement} element\n * @return {HTMLElement|undefined}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not an instance of HTMLElement\n */\nfunction findClosestObjectLink(element) {\n    return findClosestByAttribute(element, ATTRIBUTE_OBJECTLINK);\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.addToObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.addToObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * addToObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @param {Object} object\n * @return {boolean}\n */\nfunction addToObjectLink(element, symbol, object) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        element[symbol] = new Set;\n    }\n\n    addAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n    element[symbol].add(object);\n    return element;\n\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.removeObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.removeObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * removeObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {boolean}\n */\nfunction removeObjectLink(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        return element\n    }\n\n    removeAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n    delete element[symbol];\n    return element;\n\n}\n\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.hasObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.hasObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * hasObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {boolean}\n */\nfunction hasObjectLink(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        return false\n    }\n\n    return containsAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n\n}\n\n/**\n * The ObjectLink can be used to attach objects to HTMLElements. The elements are kept in a set under a unique\n * symbol and can be read via an iterator {@see {@link getLinkedObjects}}.\n *\n * In addition, elements with an objectLink receive the attribute `data-monster-objectlink`.\n *\n * With the method  {@see {@link addToObjectLink}} the objects can be added.\n *\n * You can call the method via the monster namespace `new Monster.DOM.getLinkedObjects()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.getLinkedObjects();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * getLinkedObjects();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {Iterator}\n * @throws {Error} there is no object link for symbol\n */\nfunction getLinkedObjects(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        throw new Error('there is no object link for ' + symbol.toString());\n    }\n\n    return element?.[symbol][Symbol.iterator]();\n\n}\n\n\n/**\n * With this method tokens in an attribute can be switched on or off. For example, classes can be switched on and off in the elements class attribute.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.toggleAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.toggleAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * toggleAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction toggleAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        element.setAttribute(key, token);\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).toggle(token).toString());\n\n    return element\n}\n\n/**\n * this method can be used to add a token to an attribute. Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.addAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.addAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * addAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction addAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        element.setAttribute(key, token);\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).add(token).toString());\n\n    return element\n}\n\n/**\n * This function can be used to remove tokens from an attribute.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.removeAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.removeAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * removeAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction removeAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).remove(token).toString());\n\n    return element\n}\n\n/**\n * This method can be used to determine whether an attribute has a token.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.containsAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.containsAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * containsAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {boolean}\n */\nfunction containsAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return false;\n    }\n\n    return new TokenList(element.getAttribute(key)).contains(token);\n\n}\n\n/**\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.replaceAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.replaceAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * replaceAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} from\n * @param {string} to\n * @return {HTMLElement}\n */\nfunction replaceAttributeToken(element, key, from, to) {\n    validateInstance(element, HTMLElement);\n    validateString(from)\n    validateString(to)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).replace(from, to).toString());\n\n    return element\n}\n\n/**\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.clearAttributeTokens()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.clearAttributeTokens();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * clearAttributeTokens();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @return {HTMLElement}\n */\nfunction clearAttributeTokens(element, key) {\n    validateInstance(element, HTMLElement);\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, \"\");\n\n    return element\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.findClosestByAttribute()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.findClosestByAttribute();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findClosestByAttribute} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * findClosestByAttribute();\n * </script>\n * ```\n *\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string|undefined} value\n * @return {HTMLElement|undefined}\n */\nfunction findClosestByAttribute(element, key, value) {\n    validateInstance(element, getGlobalFunction('HTMLElement'));\n\n    if (element.hasAttribute(key) && element.getAttribute(key) === value) {\n        return element;\n    }\n\n    let selector = validateString(key);\n    if (value !== undefined) selector += \"=\" + validateString(value);\n    let result = element.closest('[' + selector + ']');\n    if (result instanceof HTMLElement) {\n        return result;\n    }\n    return undefined;\n}\n\n// exports\nassignToNamespace('Monster.DOM', getLinkedObjects, addToObjectLink, removeObjectLink, findClosestByAttribute, hasObjectLink, clearAttributeTokens, replaceAttributeToken, containsAttributeToken, removeAttributeToken, addAttributeToken, toggleAttributeToken);\nexport {\n    Monster,\n    addToObjectLink,\n    removeObjectLink,\n    hasObjectLink,\n    findClosestByAttribute,\n    clearAttributeTokens,\n    replaceAttributeToken,\n    containsAttributeToken,\n    removeAttributeToken,\n    addAttributeToken,\n    toggleAttributeToken,\n    getLinkedObjects,\n    findClosestObjectLink\n}\n","'use strict';\n\nimport {Monster} from '../namespace.js';\n/**\n * @author schukai GmbH\n */\n\n/**\n * @memberOf Monster.DOM\n * @since 1.8.0\n * @type {string}\n */\nconst ATTRIBUTE_PREFIX = 'data-monster-';\n\n/**\n * This is the name of the attribute to pass options to a control\n * \n * @memberOf Monster.DOM\n * @since 1.8.0\n * @type {string}\n */\nconst ATTRIBUTE_OPTIONS = ATTRIBUTE_PREFIX + 'options';\n\n\n/**\n * default theme\n * @memberOf Monster.DOM\n * @type {string}\n */\nconst DEFAULT_THEME = 'monster';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_THEME_PREFIX = ATTRIBUTE_PREFIX + 'theme-';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n */\nconst ATTRIBUTE_THEME_NAME = ATTRIBUTE_THEME_PREFIX + 'name';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_ATTRIBUTES = ATTRIBUTE_PREFIX + 'attributes';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_REPLACE = ATTRIBUTE_PREFIX + 'replace';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_INSERT = ATTRIBUTE_PREFIX + 'insert';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_INSERT_REFERENCE = ATTRIBUTE_PREFIX + 'insert-reference';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_REMOVE = ATTRIBUTE_PREFIX + 'remove';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.9.0\n */\nconst ATTRIBUTE_UPDATER_BIND = ATTRIBUTE_PREFIX + 'bind';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.14.0\n */\nconst ATTRIBUTE_ROLE = ATTRIBUTE_PREFIX + 'role';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.9.0\n */\nconst ATTRIBUTE_OBJECTLINK = ATTRIBUTE_PREFIX + 'objectlink';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.10.0\n */\nconst OBJECTLINK_KEY_UPDATER = 'monsterUpdater';\n\n\nexport {\n    Monster,\n    ATTRIBUTE_PREFIX,\n    ATTRIBUTE_OPTIONS,\n    DEFAULT_THEME,\n    ATTRIBUTE_THEME_PREFIX,\n    ATTRIBUTE_ROLE,\n    ATTRIBUTE_THEME_NAME,\n    ATTRIBUTE_UPDATER_ATTRIBUTES,\n    ATTRIBUTE_UPDATER_REPLACE,\n    ATTRIBUTE_UPDATER_INSERT,\n    ATTRIBUTE_UPDATER_INSERT_REFERENCE,\n    ATTRIBUTE_UPDATER_REMOVE,\n    ATTRIBUTE_UPDATER_BIND,\n    ATTRIBUTE_OBJECTLINK,\n    OBJECTLINK_KEY_UPDATER\n}","'use strict';\n\nimport {extend} from \"../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {CustomElement} from \"./customelement.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalSymbol = Symbol('internalSymbol');\n\n/**\n * To define a new HTML control we need the power of CustomElement\n *\n * IMPORTANT: after defining a `CustomElement`, the `registerCustomElement` method must be called\n * with the new class name. only then will the tag defined via the `getTag` method be made known to the DOM.\n *\n * <img src=\"./images/customcontrol-class.png\">\n * \n * This control uses `attachInternals()` to integrate the control into a form.\n * If the target environment does not support this method, the [polyfill](https://www.npmjs.com/package/element-internals-polyfill ) can be used.\n *\n * You can create the object via the monster namespace `new Monster.DOM.CustomControl()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customcontrol.js';\n * console.log(new Monster.DOM.CustomControl())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {CustomControl} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customcontrol.js';\n * console.log(new CustomControl())\n * </script>\n * ```\n * \n * @startuml customcontrol-class.png\n * skinparam monochrome true\n * skinparam shadowing false\n * HTMLElement <|-- CustomElement\n * CustomElement <|-- CustomControl\n * @enduml\n * \n * @summary A base class for customcontrols based on CustomElement\n * @see {@link https://www.npmjs.com/package/element-internals-polyfill}\n * @see {@link https://github.com/WICG/webcomponents}\n * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements}\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n */\nclass CustomControl extends CustomElement {\n\n    /**\n     * IMPORTANT: CustomControls instances are not created via the constructor, but either via a tag in the HTML or via <code>document.createElement()</code>.\n     *\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @summary create new Instance\n     */\n    constructor() {\n        super();\n\n        if (typeof this['attachInternals'] === 'function') {\n            /**\n             * currently only supported by chrome\n             * @property {Object}\n             * @private\n             */\n            this[internalSymbol] = this.attachInternals();\n        }\n\n    }\n\n    /**\n     *\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals}\n     * @since 1.14.0\n     * @return {boolean}\n     */\n    static get formAssociated() {\n        return true;\n    }\n\n    /**\n     * Derived classes can override and extend this method as follows.\n     *\n     * ```\n     * get defaults() {\n     *    return extends{}, super.defaults, {\n     *        myValue:true\n     *    });\n     * }\n     * ```\n     *\n     * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals}\n     * @return {object}\n     * @since 1.14.0\n     */\n    get defaults() {\n        return extend({}, super.defaults);\n    }\n\n    /**\n     * Must be overridden by a derived class and return the value of the control.\n     *\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @since 1.14.0\n     * @throws {Error} the value getter must be overwritten by the derived class\n     */\n    get value() {\n        throw Error('the value getter must be overwritten by the derived class');\n    }\n\n    /**\n     * Must be overridden by a derived class and return the value of the control.\n     *\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @param {*} value\n     * @since 1.14.0\n     * @throws {Error} the value setter must be overwritten by the derived class\n     */\n    set value(value) {\n        throw Error('the value setter must be overwritten by the derived class');\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {NodeList}\n     * @since 1.14.0\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/labels}\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get labels() {\n        return getInternal.call(this)?.labels;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string|null}\n     */\n    get name() {\n        return this.getAttribute('name');\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string}\n     */\n    get type() {\n        return this.constructor.getTag();\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {ValidityState}\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ValidityState}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/validity}\n     */\n    get validity() {\n        return getInternal.call(this)?.validity;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/validationMessage\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get validationMessage() {\n        return getInternal.call(this)?.validationMessage;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {boolean}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/willValidate\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get willValidate() {\n        return getInternal.call(this)?.willValidate;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {CustomStateSet}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get states() {\n        return getInternal.call(this)?.states;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {HTMLFontElement|null}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/form\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get form() {\n        return getInternal.call(this)?.form;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * ```\n     * // Use the control's name as the base name for submitted data\n     * const n = this.getAttribute('name');\n     * const entries = new FormData();\n     * entries.append(n + '-first-name', this.firstName_);\n     * entries.append(n + '-last-name', this.lastName_);\n     * this.setFormValue(entries);\n     * ```\n     *\n     * @param {File|string|FormData} value\n     * @param {File|string|FormData} state\n     * @since 1.14.0\n     * @return {undefined}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/setFormValue\n     */\n    setFormValue(value, state) {\n        getInternal.call(this).setFormValue(value, state);\n    }\n\n    /**\n     *\n     * @param {object} flags\n     * @param {string|undefined} message\n     * @param {HTMLElement} anchor\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/setValidity\n     * @since 1.14.0\n     * @return {undefined}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    setValidity(flags, message, anchor) {\n        getInternal.call(this).setValidity(flags, message, anchor);\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/checkValidity\n     * @since 1.14.0\n     * @return {boolean}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    checkValidity() {\n        return getInternal.call(this)?.checkValidity();\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {boolean}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/reportValidity\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @throws {DOMException} NotSupportedError\n     */\n    reportValidity() {\n        return getInternal.call(this)?.reportValidity();\n    }\n\n}\n\n/**\n * @private\n * @return {object}\n * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n * @this CustomControl\n */\nfunction getInternal() {\n    const self = this;\n\n    if (!(internalSymbol in this)) {\n        throw new Error('ElementInternals is not supported and a polyfill is necessary');\n    }\n\n    return this[internalSymbol];\n}\n\nassignToNamespace('Monster.DOM', CustomControl);\nexport {Monster, CustomControl}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {parseDataURL} from \"../types/dataurl.js\";\nimport {getGlobalObject} from \"../types/global.js\";\nimport {isArray, isString} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateFunction, validateInstance, validateObject} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {addToObjectLink, getLinkedObjects, hasObjectLink} from \"./attributes.js\";\nimport {ATTRIBUTE_OPTIONS, OBJECTLINK_KEY_UPDATER} from \"./constants.js\";\nimport {findDocumentTemplate, Template} from \"./template.js\";\nimport {Updater} from \"./updater.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalDataSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * @private\n * @type {symbol}\n */\nconst objectLinkSymbol = Symbol.for(OBJECTLINK_KEY_UPDATER);\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst initMethodSymbol = Symbol('initMethodSymbol');\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst assembleMethodSymbol = Symbol('assembleMethodSymbol');\n\n\n/**\n * HTMLElement\n * @external HTMLElement\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement\n *\n * @startuml customelement-sequencediagram.png\n * skinparam monochrome true\n * skinparam shadowing false\n *\n * autonumber\n *\n * Script -> DOM: element = document.createElement('my-element')\n * DOM -> CustomElement: constructor()\n * CustomElement -> CustomElement: [initMethodSymbol]()\n *\n * CustomElement --> DOM: Element\n * DOM --> Script : element\n *\n *\n * Script -> DOM: document.querySelector('body').append(element)\n *\n * DOM -> CustomElement : connectedCallback()\n *\n * note right CustomElement: is only called at\\nthe first connection\n * CustomElement -> CustomElement : [assembleMethodSymbol]()\n *\n * ... ...\n *\n * autonumber\n *\n * Script -> DOM: document.querySelector('monster-confirm-button').parentNode.removeChild(element)\n * DOM -> CustomElement: disconnectedCallback()\n *\n *\n * @enduml\n *\n * @startuml customelement-class.png\n * skinparam monochrome true\n * skinparam shadowing false\n * HTMLElement <|-- CustomElement\n * @enduml\n */\n\n\n/**\n * To define a new HTML element we need the power of CustomElement\n *\n * IMPORTANT: after defining a `CustomElement`, the `registerCustomElement` method must be called\n * with the new class name. only then will the tag defined via the `getTag` method be made known to the DOM.\n *\n * <img src=\"./images/customelement-class.png\">\n *\n * You can create the object via the monster namespace `new Monster.DOM.CustomElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customelement.js';\n * console.log(new Monster.DOM.CustomElement())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customelement.js';\n * console.log(new CustomElement())\n * </script>\n * ```\n *\n * ## Interaction\n *\n * <img src=\"./images/customelement-sequencediagram.png\">\n *\n * ## Styling\n *\n * For optimal display of custom-elements the pseudo-class :defined can be used.\n *\n * To prevent the custom elements from being displayed and flickering until the control is registered, it is recommended to create a css directive.\n *\n * In the simplest case, you can simply hide the control.\n *\n * ```\n * <style>\n *\n * my-custom-element:not(:defined) {\n *     display: none;\n * }\n *\n * my-custom-element:defined {\n *     display: flex;\n * }\n *\n * </style>\n * ```\n *\n * Alternatively you can also display a loader\n *\n * ```\n * my-custom-element:not(:defined) {\n *            display: flex;\n *            box-shadow: 0 4px 10px 0 rgba(33, 33, 33, 0.15);\n *            border-radius: 4px;\n *            height: 200px;\n *            position: relative;\n *            overflow: hidden;\n *        }\n *\n * my-custom-element:not(:defined)::before {\n *            content: '';\n *            display: block;\n *            position: absolute;\n *            left: -150px;\n *            top: 0;\n *            height: 100%;\n *            width: 150px;\n *            background: linear-gradient(to right, transparent 0%, #E8E8E8 50%, transparent 100%);\n *            animation: load 1s cubic-bezier(0.4, 0.0, 0.2, 1) infinite;\n *        }\n *\n * @keyframes load {\n *            from {\n *                left: -150px;\n *            }\n *            to   {\n *                left: 100%;\n *            }\n *        }\n *\n * my-custom-element:defined {\n *           display: flex;\n *       }\n * ```\n *\n * @example\n *\n * // In the example the the user can use his own template by creating a template in the DOM with the ID `my-custom-element`.\n * // You can also specify a theme (for example `mytheme`), then it will search for the ID `my-custom-element-mytheme` and\n * // if not available for the ID `my-custom-element`.\n *\n * class MyCustomElement extends CustomElement {\n * \n *    static getTag() {\n *        return \"my-custom-element\"\n *    }\n *\n * }\n *\n * // ↦ <my-custom-element></my-custom-element>\n *\n * @see https://github.com/WICG/webcomponents\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @extends external:HTMLElement\n * @summary A base class for HTML5 customcontrols\n */\nclass CustomElement extends HTMLElement {\n\n    /**\n     * A new object is created. First the `initOptions` method is called. Here the\n     * options can be defined in derived classes. Subsequently, the shadowRoot is initialized.\n     *\n     * @throws {Error} the options attribute does not contain a valid json definition.\n     * @since 1.7.0\n     */\n    constructor() {\n        super();\n        this[internalDataSymbol] = new ProxyObserver({'options': extend({}, this.defaults, getOptionsFromAttributes.call(this))});\n        initOptionObserver.call(this);\n        this[initMethodSymbol]();\n    }\n\n    /**\n     * This method determines which attributes are to be monitored by `attributeChangedCallback()`.\n     *\n     * @return {string[]}\n     * @since 1.15.0\n     */\n    static get observedAttributes() {\n        return [ATTRIBUTE_OPTIONS];\n    }\n\n    /**\n     * Derived classes can override and extend this method as follows.\n     *\n     * ```\n     * get defaults() {\n     *    return Object.assign({}, super.defaults, {\n     *        myValue:true\n     *    });\n     * }\n     * ```\n     *\n     * to set the options via the html tag the attribute data-monster-options must be set.\n     * As value a JSON object with the desired values must be defined.\n     *\n     * Since 1.18.0 the JSON can be specified as a DataURI.\n     *\n     * ```\n     * new Monster.Types.DataUrl(btoa(JSON.stringify({\n     *        shadowMode: 'open',\n     *        delegatesFocus: true,\n     *        templates: {\n     *            main: undefined\n     *        }\n     *    })),'application/json',true).toString()\n     * ```\n     *\n     * @property {string} shadowMode=open `open` Elements of the shadow root are accessible from JavaScript outside the root, for example using. `close` Denies access to the node(s) of a closed shadow root from JavaScript outside it\n     * @property {Boolean} delegatesFocus=true A boolean that, when set to true, specifies behavior that mitigates custom element issues around focusability. When a non-focusable part of the shadow DOM is clicked, the first focusable part is given focus, and the shadow host is given any available :focus styling.\n     * @property {Object} templates Templates\n     * @property {string} templates.main=undefined Main template\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow\n     * @return {{shadowMode: string, delegatesFocus: boolean}}\n     * @since 1.8.0\n     */\n    get defaults() {\n        return {\n            shadowMode: 'open',\n            delegatesFocus: true,\n            templates: {\n                main: undefined\n            }\n        };\n    }\n\n    /**\n     * There is no check on the name by this class. the developer is responsible for assigning an appropriate tag.\n     * if the name is not valid, registerCustomElement() will issue an error\n     *\n     * @link https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * @return {string}\n     * @throws {Error} the method getTag must be overwritten by the derived class.\n     * @since 1.7.0\n     */\n    static getTag() {\n        throw new Error(\"the method getTag must be overwritten by the derived class.\");\n    }\n\n    /**\n     * At this point a `CSSStyleSheet` object can be returned. If the environment does not\n     * support a constructor, then an object can also be built using the following detour.\n     *\n     * If `undefined` is returned then the shadowRoot does not get a stylesheet.\n     *\n     * ```\n     * const doc = document.implementation.createHTMLDocument('title');\n     *\n     * let style = doc.createElement(\"style\");\n     * style.innerHTML=\"p{color:red;}\";\n     *\n     * // WebKit Hack\n     * style.appendChild(document.createTextNode(\"\"));\n     * // Add the <style> element to the page\n     * doc.head.appendChild(style);\n     * return doc.styleSheets[0];\n     * ;\n     * ```\n     *\n     * @return {CSSStyleSheet|CSSStyleSheet[]|string|undefined}\n     */\n    static getCSSStyleSheet() {\n        return undefined;\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {CustomElement}\n     */\n    attachObserver(observer) {\n        this[internalDataSymbol].attachObserver(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {CustomElement}\n     */\n    detachObserver(observer) {\n        this[internalDataSymbol].detachObserver(observer)\n        return this;\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    containsObserver(observer) {\n        return this[internalDataSymbol].containsObserver(observer)\n    }\n\n    /**\n     * nested options can be specified by path `a.b.c`\n     *\n     * @param {string} path\n     * @param {*} defaultValue\n     * @return {*}\n     * @since 1.10.0\n     */\n    getOption(path, defaultValue) {\n        let value;\n\n        try {\n            value = new Pathfinder(this[internalDataSymbol].getRealSubject()['options']).getVia(path);\n        } catch (e) {\n\n        }\n\n        if (value === undefined) return defaultValue;\n        return value;\n    }\n\n    /**\n     * Set option and inform elements\n     *\n     * @param {string} path\n     * @param {*} value\n     * @return {CustomElement}\n     * @since 1.14.0\n     */\n    setOption(path, value) {\n        new Pathfinder(this[internalDataSymbol].getSubject()['options']).setVia(path, value);\n        return this;\n    }\n\n    /**\n     * @since 1.15.0\n     * @param {string|object} options\n     * @return {CustomElement}\n     */\n    setOptions(options) {\n\n        if (isString(options)) {\n            options = parseOptionsJSON(options)\n        }\n\n        const self = this;\n        extend(self[internalDataSymbol].getSubject()['options'], self.defaults, options);\n\n        return self;\n    }\n\n    /**\n     *\n     * @return {CustomElement}\n     * @since 1.8.0\n     */\n    [initMethodSymbol]() {\n        return this;\n    }\n\n    /**\n     *\n     * @return {CustomElement}\n     * @since 1.8.0\n     */\n    [assembleMethodSymbol]() {\n\n        const self = this;\n        let elements;\n\n        if (this.getOption('shadowMode', false) !== false) {\n            try {\n                initShadowRoot.call(this);\n                elements = this.shadowRoot.childNodes;\n            } catch (e) {\n\n            }\n            try {\n                initCSSStylesheet.call(this);\n            } catch (e) {\n\n            }\n        }\n\n        if (!(elements instanceof NodeList)) {\n            initHtmlContent.call(this);\n            elements = this.childNodes;\n        }\n\n        const updater = new Set;\n        addToObjectLink(this, objectLinkSymbol, updater);\n\n        for (const [, element] of Object.entries(elements)) {\n\n            if (!(element instanceof HTMLElement)) continue;\n            if ((element instanceof HTMLTemplateElement)) continue;\n            const u = new Updater(element, clone(self[internalDataSymbol].getRealSubject()['options']))\n            updater.add(u);\n\n            u.run().then(() => {\n                u.enableEventProcessing();\n            });\n\n        }\n\n        return this;\n    }\n\n    /**\n     * Called every time the element is inserted into the DOM. Useful for running setup code, such as\n     * fetching resources or rendering. Generally, you should try to delay work until this time.\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    connectedCallback() {\n        let self = this;\n        if (!hasObjectLink(self, objectLinkSymbol)) {\n            self[assembleMethodSymbol]()\n        }\n    }\n\n    /**\n     * Called every time the element is removed from the DOM. Useful for running clean up code.\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    disconnectedCallback() {\n\n    }\n\n    /**\n     * The custom element has been moved into a new document (e.g. someone called document.adoptNode(el)).\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    adoptedCallback() {\n\n    }\n\n    /**\n     * Called when an observed attribute has been added, removed, updated, or replaced. Also called for initial\n     * values when an element is created by the parser, or upgraded. Note: only attributes listed in the observedAttributes\n     * property will receive this callback.\n     *\n     * @param {string} attrName\n     * @param {string} oldVal\n     * @param {string} newVal\n     * @return {void}\n     * @since 1.15.0\n     */\n    attributeChangedCallback(attrName, oldVal, newVal) {\n        const self = this;\n\n        if (attrName === ATTRIBUTE_OPTIONS) {\n            self.setOptions(newVal);\n        }\n\n    }\n\n    /**\n     * \n     * @param {Node} node\n     * @return {boolean}\n     * @throws {TypeError} value is not an instance of\n     * @since 1.19.0\n     */\n    hasNode(node) {\n        const self = this;\n\n\n        if (containChildNode.call(self, validateInstance(node, Node))) {\n            return true;\n        }\n\n        if (!(self.shadowRoot instanceof ShadowRoot)) {\n            return false;\n        }\n\n        return containChildNode.call(self.shadowRoot, node);\n\n    }\n\n}\n\n/**\n * @private\n * @param {Node} node\n * @return {boolean}\n */\nfunction containChildNode(node) {\n    const self = this;\n\n    if (self.contains(node)) {\n        return true;\n    }\n\n    for (const [, e] of Object.entries(self.childNodes)) {\n        if (e.contains(node)) {\n            return true;\n        }\n\n        containChildNode.call(e, node);\n    }\n\n\n    return false;\n}\n\n/**\n * @since 1.15.0\n * @private\n * @this CustomElement\n */\nfunction initOptionObserver() {\n    const self = this;\n\n    self.attachObserver(new Observer(function () {\n\n        // not initialised\n        if (!hasObjectLink(self, Symbol.for(OBJECTLINK_KEY_UPDATER))) {\n            return;\n        }\n        // inform every element\n        const updaters = getLinkedObjects(self, Symbol.for(OBJECTLINK_KEY_UPDATER));\n\n        for (const list of updaters) {\n            for (const updater of list) {\n                let d = clone(self[internalDataSymbol].getRealSubject()['options']);\n                Object.assign(updater.getSubject(), d);\n            }\n        }\n\n    }));\n\n}\n\n/**\n * @private\n * @return {object}\n * @throws {Error} the options attribute does not contain a valid json definition.\n */\nfunction getOptionsFromAttributes() {\n    if (this.hasAttribute(ATTRIBUTE_OPTIONS)) {\n        try {\n            return parseOptionsJSON(this.getAttribute(ATTRIBUTE_OPTIONS))\n        } catch (e) {\n            throw new Error('the options attribute ' + ATTRIBUTE_OPTIONS + ' does not contain a valid json definition (actual: ' + this.getAttribute(ATTRIBUTE_OPTIONS) + ').');\n        }\n    }\n\n    return {};\n}\n\n/**\n * @private\n * @param data\n * @return {Object}\n */\nfunction parseOptionsJSON(data) {\n    if (isString(data)) {\n\n        // the configuration can be specified as a data url.\n        try {\n            let dataUrl = parseDataURL(data);\n            data = dataUrl.content;\n        } catch (e) {\n\n        }\n\n\n        try {\n            let obj = JSON.parse(data);\n            validateObject(obj);\n            return obj;\n        } catch (e) {\n            throw new Error('the options does not contain a valid json definition (actual: ' + data + ').');\n        }\n    }\n\n    return {};\n}\n\n/**\n * @private\n * @return {initHtmlContent}\n */\nfunction initHtmlContent() {\n\n    try {\n        let template = findDocumentTemplate(this.constructor.getTag());\n        this.appendChild(template.createDocumentFragment());\n    } catch (e) {\n\n        let html = this.getOption('templates.main', '');\n        if (isString(html) && html.length > 0) {\n            this.innerHTML = html;\n        }\n\n    }\n\n    return this;\n\n}\n\n/**\n * @private\n * @return {CustomElement}\n * @memberOf Monster.DOM\n * @this CustomElement\n * @since 1.16.0\n */\nfunction initCSSStylesheet() {\n    const self = this;\n\n    if (!(this.shadowRoot instanceof ShadowRoot)) {\n        return self;\n    }\n\n    const styleSheet = this.constructor.getCSSStyleSheet();\n    if (styleSheet instanceof CSSStyleSheet) {\n        this.shadowRoot.adoptedStyleSheets = [styleSheet];\n    } else if (isArray(styleSheet)) {\n        this.shadowRoot.adoptedStyleSheets = styleSheet;\n    } else if (isString(styleSheet)) {\n        const style = self.shadowRoot.createElement('<style>')\n        style.innerText = styleSheet;\n        this.shadowRoot.adoptedStyleSheets = styleSheet;\n    }\n\n    return self;\n\n}\n\n/**\n * @private\n * @return {CustomElement}\n * @throws {Error} html is not set.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow\n * @memberOf Monster.DOM\n * @since 1.8.0\n */\nfunction initShadowRoot() {\n\n    let template, html;\n\n    try {\n        template = findDocumentTemplate(this.constructor.getTag());\n    } catch (e) {\n\n        html = this.getOption('templates.main', '');\n        if (!isString(html) || html === undefined || html === \"\") {\n            throw new Error(\"html is not set.\");\n        }\n\n    }\n\n    this.attachShadow({\n        mode: this.getOption('shadowMode', 'open'),\n        delegatesFocus: this.getOption('delegatesFocus', true)\n    });\n\n    if (template instanceof Template) {\n        this.shadowRoot.appendChild(template.createDocumentFragment());\n        return this;\n    }\n\n    this.shadowRoot.innerHTML = html;\n    return this;\n}\n\n/**\n * This method registers a new element. The string returned by `CustomElement.getTag()` is used as the tag.\n *\n * @param {CustomElement} element\n * @return {void}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {DOMException} Failed to execute 'define' on 'CustomElementRegistry': is not a valid custom element name\n */\nfunction registerCustomElement(element) {\n    validateFunction(element);\n    getGlobalObject('customElements').define(element.getTag(), element);\n}\n\nassignToNamespace('Monster.DOM', CustomElement, registerCustomElement);\nexport {Monster, registerCustomElement, CustomElement, initMethodSymbol, assembleMethodSymbol}\n","'use strict';\n\nimport {assignToNamespace} from \"../namespace.js\";\n/**\n * @author schukai GmbH\n */\nimport {Base, Monster} from \"./base.js\";\nimport {isString} from \"./is.js\";\nimport {MediaType, parseMediaType} from \"./mediatype.js\";\nimport {validateBoolean, validateInstance, validateString} from \"./validate.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst internal = Symbol('internal');\n\n/**\n * You can create an object via the monster namespace `new Monster.Types.DataUrl()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(new Monster.Types.DataUrl())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {DataUrl} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(new DataUrl())\n * </script>\n * ```\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * @see https://datatracker.ietf.org/doc/html/rfc2397\n */\nclass DataUrl extends Base {\n\n    /**\n     *\n     * @param {String} content\n     * @param {String|Monster.Types.MediaType} mediatype\n     * @param {boolean} base64=true\n     */\n    constructor(content, mediatype, base64) {\n        super();\n\n        if (isString(mediatype)) {\n            mediatype = parseMediaType(mediatype);\n        }\n\n        this[internal] = {\n            content: validateString(content),\n            mediatype: validateInstance(mediatype, MediaType),\n            base64: validateBoolean(base64 === undefined ? true : base64)\n        }\n\n\n    }\n\n    get content() {\n        return this[internal].base64 ? atob(this[internal].content) : this[internal].content;\n    }\n\n    get mediatype() {\n        return this[internal].mediatype;\n    }\n\n\n    /**\n     *\n     * @return {string}\n     * @see https://datatracker.ietf.org/doc/html/rfc2397\n     */\n    toString() {\n\n        let content = this[internal].content;\n\n        if (this[internal].base64 === true) {\n            content = ';base64,' + content;\n        } else {\n            content = ',' + encodeURIComponent(content);\n        }\n\n        return 'data:' + this[internal].mediatype.toString() + content;\n    }\n\n}\n\n/**\n * You can call the function via the monster namespace `Monster.Types.parseDataURL()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(Monster.Types.parseDataURL())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {parseDataURL} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(parseDataURL())\n * </script>\n * ```\n *\n * Specification:\n *\n * ```\n * dataurl    := \"data:\" [ mediatype ] [ \";base64\" ] \",\" data\n * mediatype  := [ type \"/\" subtype ] *( \";\" parameter )\n * data       := *urlchar\n * parameter  := attribute \"=\" value\n * ```\n *\n * @param {String} dataurl\n * @return {Monster.Types.DataUrl}\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * @see https://datatracker.ietf.org/doc/html/rfc2397\n * @throws {TypeError} incorrect or missing data protocol\n * @throws {TypeError} malformed data url\n * @memberOf Monster.Types\n */\nfunction parseDataURL(dataurl) {\n\n    validateString(dataurl);\n\n    dataurl = dataurl.trim();\n\n    if (dataurl.substring(0, 5) !== 'data:') {\n        throw new TypeError('incorrect or missing data protocol')\n    }\n\n    dataurl = dataurl.substring(5);\n\n    let p = dataurl.indexOf(',');\n    if (p === -1) {\n        throw new TypeError('malformed data url')\n    }\n\n    let content = dataurl.substring(p + 1);\n    let mediatypeAndBase64 = dataurl.substring(0, p).trim();\n    let mediatype = 'text/plain;charset=US-ASCII';\n    let base64Flag = false;\n\n    if (mediatypeAndBase64 !== \"\") {\n        mediatype = mediatypeAndBase64;\n        if (mediatypeAndBase64.endsWith('base64')) {\n            let i = mediatypeAndBase64.lastIndexOf(';');\n            mediatype = mediatypeAndBase64.substring(0, i);\n            base64Flag = true;\n        } else {\n            content = decodeURIComponent(content);\n        }\n\n        mediatype = parseMediaType(mediatype);\n    } else {\n        content = decodeURIComponent(content);\n    }\n\n    return new DataUrl(content, mediatype, base64Flag);\n\n\n}\n\n\nassignToNamespace('Monster.Types', parseDataURL, DataUrl);\nexport {Monster, parseDataURL, DataUrl};\n","'use strict';\n\nimport {assignToNamespace} from \"../namespace.js\";\n/**\n * @author schukai GmbH\n */\nimport {Base, Monster} from \"./base.js\";\nimport {isString} from \"./is.js\";\nimport {validateArray, validateString} from \"./validate.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internal = Symbol('internal');\n\n/**\n * @typedef {Object} Parameter\n * @property {string} key\n * @property {string} value\n * @memberOf Monster.Types\n */\n\n\n/**\n * You can create an object via the monster namespace `new Monster.Types.MediaType()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/mediatype.js';\n * console.log(new Monster.Types.MediaType())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {MediaType} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/mediatype.js';\n * console.log(new MediaType())\n * </script>\n * ```\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass MediaType extends Base {\n\n    /**\n     *\n     * @param {String} type\n     * @param {String} subtype\n     * @param {Monster.Types.Parameter[]} parameter\n     */\n    constructor(type, subtype, parameter) {\n        super();\n\n        this[internal] = {\n            type: validateString(type).toLowerCase(),\n            subtype: validateString(subtype).toLowerCase(),\n            parameter: []\n        }\n\n        if (parameter !== undefined) {\n            this[internal]['parameter'] = validateArray(parameter);\n        }\n\n\n    }\n\n    /**\n     * @return {String}\n     */\n    get type() {\n        return this[internal].type;\n    }\n\n    /**\n     * @return {String}\n     */\n    get subtype() {\n        return this[internal].subtype;\n    }\n\n    /**\n     * @return {Monster.Types.Parameter[]}\n     */\n    get parameter() {\n        return this[internal].parameter;\n    }\n\n    /**\n     *\n     *\n     * @return {Map}\n     */\n    get parameter() {\n\n        const result = new Map\n\n        this[internal]['parameter'].forEach(p => {\n\n            let value = p.value;\n\n            // internally special values are partly stored with quotes, this function removes them.\n            if (value.startsWith('\"') && value.endsWith('\"')) {\n                value = value.substring(1, value.length - 1);\n            }\n\n            result.set(p.key, value);\n        })\n\n\n        return result;\n    }\n\n    /**\n     *\n     * @return {string}\n     */\n    toString() {\n\n        let parameter = [];\n        for (let a of this[internal].parameter) {\n            parameter.push(a.key + '=' + a.value);\n        }\n\n        return this[internal].type + '/' + this[internal].subtype + (parameter.length > 0 ? ';' + parameter.join(';') : '');\n    }\n\n}\n\n/**\n * You can call the function via the monster namespace `Monster.Types.parseMediaType()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(Monster.Types.parseMediaType())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {parseMediaType} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(parseMediaType())\n * </script>\n * ```\n *\n * Specification:\n *\n * ```\n * dataurl    := \"data:\" [ mediatype ] [ \";base64\" ] \",\" data\n * mediatype  := [ type \"/\" subtype ] *( \";\" parameter )\n * data       := *urlchar\n * parameter  := attribute \"=\" value\n * ```\n *\n * @param {String} mediatype\n * @return {Monster.Types.MediaType}\n * @see https://datatracker.ietf.org/doc/html/rfc2045#section-5.1\n * @throws {TypeError} the mimetype can not be parsed\n * @throws {TypeError} blank value is not allowed\n * @throws {TypeError} malformed data url\n * @memberOf Monster.Types\n */\nfunction parseMediaType(mediatype) {\n\n    const regex = /(?<type>[A-Za-z]+|\\*)\\/(?<subtype>([a-zA-Z0-9.\\+_\\-]+)|\\*|)(?<parameter>\\s*;\\s*([a-zA-Z0-9]+)\\s*(=\\s*(\"?[A-Za-z0-9_\\-]+\"?))?)*/g;\n    const result = regex.exec(validateString(mediatype));\n\n    const groups = result?.['groups'];\n    if (groups === undefined) {\n        throw new TypeError('the mimetype can not be parsed')\n    }\n\n    const type = groups?.['type'];\n    const subtype = groups?.['subtype'];\n    const parameter = groups?.['parameter'];\n\n    if (subtype === \"\" || type === \"\") {\n        throw new TypeError('blank value is not allowed');\n    }\n\n    return new MediaType(type, subtype, parseParameter(parameter));\n\n\n}\n\n/**\n * @private\n * @since 1.18.0\n * @param {String} parameter\n * @return {Monster.Types.Parameter[]|undefined}\n * @memberOf Monster.Types\n */\nfunction parseParameter(parameter) {\n\n    if (!isString(parameter)) {\n        return undefined;\n    }\n\n    let result = [];\n\n    parameter.split(';').forEach((entry) => {\n\n        entry = entry.trim();\n        if (entry === \"\") {\n            return;\n        }\n\n        const kv = entry.split('=')\n\n        let key = validateString(kv?.[0]).trim();\n        let value = validateString(kv?.[1]).trim();\n\n        // if values are quoted, they remain so internally\n        result.push({\n            key: key,\n            value: value\n        })\n\n\n    })\n\n    return result;\n\n}\n\n\nassignToNamespace('Monster.Types', parseMediaType, MediaType);\nexport {Monster, parseMediaType, MediaType};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalFunction, getGlobalObject} from '../types/global.js';\nimport {validateInstance, validateString} from \"../types/validate.js\";\nimport {getDocumentTheme} from \"./theme.js\";\n\n/**\n * you can call the method via the monster namespace `new Monster.DOM.Template()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(new Monster.DOM.Template())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(new Template())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary A template class\n */\nclass Template extends Base {\n    /**\n     *\n     * @param {HTMLTemplateElement} template\n     * @throws {TypeError} value is not an instance of\n     * @throws {TypeError} value is not a function\n     * @throws {Error} the function is not defined\n     */\n    constructor(template) {\n        super();\n        const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n        validateInstance(template, HTMLTemplateElement);\n        this.template = template;\n    }\n\n    /**\n     *\n     * @returns {HTMLTemplateElement}\n     */\n    getTemplateElement() {\n        return this.template;\n    }\n\n    /**\n     *\n     * @return {DocumentFragment}\n     * @throws {TypeError} value is not an instance of\n     */\n    createDocumentFragment() {\n        return this.template.content.cloneNode(true);\n    }\n\n}\n\n/**\n * This method loads a template with the given ID and returns it.\n *\n * To do this, it first fetches the theme of the document and looks for the `data-monster-theme-name` attribute in the HTML tag.\n *\n * ```\n * <html data-monster-theme-name=\"my-theme\">\n * ```\n *\n * If no theme was specified, the default theme is `monster`.\n *\n * Now it is looked if there is a template with the given ID and theme `id-theme` and if yes it is returned. \n * If there is no template a search for a template with the given ID `id` is done. If this is also not found, an error is thrown.\n *\n * You can call the method via the monster namespace `Monster.DOM.findDocumentTemplate()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(Monster.DOM.findDocumentTemplate())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(findDocumentTemplate())\n * </script>\n * ```\n *\n * @param {string} id\n * @param {Node} currentNode\n * @return {Monster.DOM.Template}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} template id not found.\n * @throws {TypeError} value is not a string\n */\nfunction findDocumentTemplate(id, currentNode) {\n    validateString(id);\n\n    if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n\n        if (currentNode instanceof Node) {\n            currentNode = currentNode.getRootNode();\n\n            if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n                currentNode = currentNode.ownerDocument;\n            }\n\n        }\n\n        if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n            currentNode = getGlobalObject('document');\n        }\n    }\n\n    const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n\n    let theme = getDocumentTheme()\n    let themedID = id + '-' + theme.getName();\n\n    let template = currentNode.getElementById(themedID);\n    if (template instanceof HTMLTemplateElement) {\n        return new Template(template);\n    }\n\n    template = currentNode.getElementById(id);\n    if (template instanceof HTMLTemplateElement) {\n        return new Template(template);\n    }\n\n    if (currentNode !== getGlobalObject('document')) {\n        return findDocumentTemplate(id)\n    }\n\n    throw new Error(\"template \" + id + \" not found.\")\n}\n\n\nassignToNamespace('Monster.DOM', Template, findDocumentTemplate);\nexport {Monster, Template, findDocumentTemplate}\n\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalObject} from '../types/global.js';\nimport {validateString} from \"../types/validate.js\";\nimport {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from \"./constants.js\";\n\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.Theme()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n * console.log(new Monster.DOM.Theme())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n * console.log(new Theme())\n * </script>\n * ```\n *\n * @example\n *\n * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n *\n * const theme = getDocumentTheme();\n * console.log(theme.getName());\n * // ↦ monster\n *\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary A theme class\n */\nclass Theme extends Base {\n\n    /**\n     *\n     * @param name\n     * @throws {TypeError} value is not a string\n     */\n    constructor(name) {\n        super();\n        validateString(name);\n        this.name = name;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getName() {\n        return this.name;\n    }\n\n}\n\n/**\n * The theming used in the document can be defined via the html-tag.\n * The theming is specified via the attribute `data-monster-theme-name`.\n *\n * As name for a theme all characters are valid, which are also allowed for a HTMLElement-ID.\n *\n * ```\n * <html data-monster-theme-name=\"my-theme\">\n * ```\n *\n * the default theme name is `monster`.\n *\n * @return {Theme}\n * @memberOf Monster.DOM\n * @since 1.7.0\n */\nfunction getDocumentTheme() {\n    let document = getGlobalObject('document');\n    let name = DEFAULT_THEME;\n\n    let element = document.querySelector('html');\n    if (element instanceof HTMLElement) {\n        let theme = element.getAttribute(ATTRIBUTE_THEME_NAME);\n        if (theme) {\n            name = theme;\n        }\n    }\n\n    return new Theme(name);\n\n}\n\nassignToNamespace('Monster.DOM', Theme, getDocumentTheme);\nexport {Monster, Theme, getDocumentTheme}\n","'use strict';\n\nimport {Diff} from \"../data/diff.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {\n    ATTRIBUTE_UPDATER_ATTRIBUTES,\n    ATTRIBUTE_UPDATER_BIND,\n    ATTRIBUTE_UPDATER_INSERT,\n    ATTRIBUTE_UPDATER_INSERT_REFERENCE,\n    ATTRIBUTE_UPDATER_REMOVE,\n    ATTRIBUTE_UPDATER_REPLACE\n} from \"../dom/constants.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {isArray, isInstance, isIterable} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateArray, validateInstance} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {findDocumentTemplate} from \"./template.js\";\nimport {getDocument} from \"./util.js\";\n\n\n/**\n * The updater class connects an object with the dom. In this way, structures and contents in the DOM can be programmatically adapted via attributes.\n *\n * For example, to include a string from an object, the attribute `data-monster-replace` can be used. \n * a further explanation can be found under {@tutorial dom-based-templating-implementation}.\n *\n * you can call the method via the monster namespace `new Monster.DOM.Updater()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(new Monster.DOM.Updater())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(new Updater())\n * </script>\n * ```\n *\n * @example\n *\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n *\n * // First we prepare the html document.\n * // This is done here via script, but can also be inserted into the document as pure html.\n * // To do this, simply insert the tag <h1 data-monster-replace=\"path:headline\"></h1>.\n * const body = document.querySelector('body');\n * const headline = document.createElement('h1');\n * headline.setAttribute('data-monster-replace','path:headline')\n * body.appendChild(headline);\n *\n * // the data structure\n * let obj = {\n *    headline: \"Hello World\",\n * };\n *\n * // Now comes the real magic. we pass the updater the parent HTMLElement\n * // and the desired data structure.\n * const updater = new Updater(body, obj);\n * updater.run();\n *\n * // Now you can change the data structure and the HTML will follow these changes.\n * const subject = updater.getSubject();\n * subject['headline'] = \"Hello World!\"\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} the value is not iterable\n * @throws {Error} pipes are not allowed when cloning a node.\n * @throws {Error} no template was found with the specified key.\n * @throws {Error} the maximum depth for the recursion is reached.\n * @throws {TypeError} value is not a object\n * @throws {TypeError} value is not an instance of HTMLElement\n * @summary The updater class connects an object with the dom\n */\nclass Updater extends Base {\n\n    /**\n     * @since 1.8.0\n     * @param {HTMLElement} element\n     * @param {object|ProxyObserver|undefined} subject\n     * @throws {TypeError} value is not a object\n     * @throws {TypeError} value is not an instance of HTMLElement\n     * @see {@link Monster.DOM.findDocumentTemplate}\n     */\n    constructor(element, subject) {\n        super();\n\n        /**\n         * @type {HTMLElement}\n         */\n        this.element = validateInstance(element, HTMLElement);\n\n        if (subject === undefined) subject = {}\n        let a = subject;\n        if (!isInstance(subject, ProxyObserver)) {\n            subject = new ProxyObserver(subject);\n        }\n\n        this.last = {};\n        this.callbacks = new Map();\n        this.callbacks.set('checkstate', getCheckStateCallback.call(this));\n\n        /**\n         * @type {object}\n         */\n        this.subject = subject.attachObserver(new Observer(() => {\n\n            const s = this.subject.getRealSubject();\n\n            const diff = Diff(this.last, s)\n            this.last = clone(s);\n\n            for (const [, change] of Object.entries(diff)) {\n                removeElement.call(this, change);\n                insertElement.call(this, change);\n                updateContent.call(this, change);\n                updateAttributes.call(this, change);\n            }\n        }));\n\n        this.eventTypes = ['keyup', 'click', 'change', 'drop', 'touchend', 'input'];\n\n    }\n\n    /**\n     * Defaults: 'keyup', 'click', 'change', 'drop', 'touchend'\n     *\n     * @see {@link https://developer.mozilla.org/de/docs/Web/Events}\n     * @since 1.9.0\n     * @param {Array} types\n     * @return {Updater}\n     */\n    setEventTypes(types) {\n        this.eventTypes = validateArray(types);\n        return this;\n    }\n\n    /**\n     *\n     * @since 1.9.0\n     * @return {Updater}\n     */\n    enableEventProcessing() {\n        this.disableEventProcessing();\n\n        for (const type of this.eventTypes) {\n            this.element.addEventListener(type, getControlEventHandler.call(this));\n        }\n\n        return this;\n\n    }\n\n    /**\n     *\n     * @since 1.9.0\n     * @return {Updater}\n     */\n    disableEventProcessing() {\n\n        for (const type of this.eventTypes) {\n            this.element.removeEventListener(type, getControlEventHandler.call(this));\n        }\n\n        return this;\n\n    }\n\n    // /**\n    //  * \n    //  * @param {string} path\n    //  * @param {*} value\n    //  * @param {boolean} notifyAnyway\n    //  * @return {Updater}\n    //  * @since 1.15.0\n    //  */\n    // setVia(path, value, notifyAnyway) {\n    //     if(isBoolean(notifyAnyway)&&notifyAnyway===true) {\n    //         // the key __init__has no further meaning and is only \n    //         // used to create the diff for empty objects.\n    //         new Pathfinder(this.last).setVia(path, {'__init__': true});\n    //        \n    //     }\n    //\n    //     new Pathfinder(this.subject.getSubject()).setVia(path, value);\n    //     return this;\n    // }\n\n    /**\n     * Let the magic begin\n     *\n     * The run method must be called for the update to start working.\n     *\n     * @return {Promise}\n     */\n    run() {\n        // the key __init__has no further meaning and is only \n        // used to create the diff for empty objects.\n        this.last = {'__init__': true};\n        return this.subject.notifyObservers();\n    }\n\n    /**\n     * If you have passed a ProxyObserver in the constructor, you will get the same object here.\n     * However, if you have passed a simple object, you will get the ProxyObserver here.\n     *\n     * For changes the ProxyObserver must be used.\n     *\n     * @since 1.8.0\n     * @return {ProxyObserver}\n     */\n    getSubject() {\n        return this.subject.getSubject();\n    }\n\n    /**\n     * This method can be used to register commands that can be called via call: instruction.\n     * This can be used to provide a pipe with its own functionality.\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback) {\n        this.callbacks.set(name, callback);\n        return this;\n    }\n\n}\n\n/**\n * @private\n * @since 1.9.0\n * @return {function\n * @this Updater\n */\nfunction getCheckStateCallback() {\n    const self = this;\n\n    return function (current) {\n\n        if (this instanceof HTMLInputElement) {\n            if (['radio', 'checkbox'].indexOf(this.type) !== -1) {\n                return (this.value + \"\" === current + \"\") ? 'true' : undefined\n            }\n        } else if (this instanceof HTMLOptionElement) {\n\n            if (isArray(current) && current.indexOf(this.value) !== -1) {\n                return 'true'\n            }\n            return undefined;\n\n\n        }\n    }\n}\n\n/**\n * @private\n */\nconst symbol = Symbol('EventHandler');\n\n/**\n * @private\n * @return {function}\n * @this Updater\n */\nfunction getControlEventHandler() {\n\n    const self = this;\n\n    if (self[symbol]) {\n        return self[symbol];\n    }\n\n    const pathfinder = new Pathfinder(this.subject.getSubject());\n\n    /**\n     * @throws {Error} the bind argument must start as a value with a path.\n     * @throws {Error} unsupported object\n     * @param {Event} event\n     */\n    self[symbol] = (event) => {\n        const element = event.target;\n\n        if (!element.hasAttribute(ATTRIBUTE_UPDATER_BIND)) {\n            return;\n        }\n\n        let path = element.getAttribute(ATTRIBUTE_UPDATER_BIND);\n\n        if (path.indexOf('path:') !== 0) {\n            throw new Error('the bind argument must start as a value with a path.');\n        }\n\n        path = path.substr(5);\n\n        let value;\n\n        if (element instanceof HTMLInputElement) {\n            switch (element.type) {\n\n                case 'checkbox':\n                    value = element.checked ? element.value : undefined;\n                    break;\n                default:\n                    value = element.value;\n                    break;\n\n\n            }\n        } else if (element instanceof HTMLTextAreaElement) {\n            value = element.value;\n\n        } else if (element instanceof HTMLSelectElement) {\n\n            switch (element.type) {\n                case 'select-one':\n                    value = element.value;\n                    break;\n                case 'select-multiple':\n                    value = element.value;\n\n                    let options = element?.selectedOptions;\n                    if (options === undefined) options = element.querySelectorAll(\":scope option:checked\");\n                    value = Array.from(options).map(({value}) => value);\n\n                    break;\n            }\n\n\n            // values from customelements \n        } else if ((element?.constructor?.prototype && !!Object.getOwnPropertyDescriptor(element.constructor.prototype, 'value')?.['get']) || element.hasOwnProperty('value')) {\n            value = element?.['value'];\n        } else {\n            throw new Error(\"unsupported object\");\n        }\n\n        const copy = clone(self.subject.getRealSubject());\n        const pf = new Pathfinder(copy);\n        pf.setVia(path, value);\n\n        const diff = new Diff(copy, self.subject.getRealSubject());\n\n        if (diff.length > 0) {\n            pathfinder.setVia(path, value);\n        }\n\n    }\n\n    return self[symbol];\n\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n */\nfunction removeElement(change) {\n    for (const [, element] of this.element.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_REMOVE + ']').entries()) {\n        element.parentNode.removeChild(element);\n    }\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n * @throws {Error} the value is not iterable\n * @throws {Error} pipes are not allowed when cloning a node.\n * @throws {Error} no template was found with the specified key.\n * @throws {Error} the maximum depth for the recursion is reached.\n * @this Updater\n */\nfunction insertElement(change) {\n    const self = this;\n    const subject = self.subject.getRealSubject();\n    const document = getDocument();\n\n    let mem = new WeakSet;\n    let wd = 0;\n\n\n    while (true) {\n        let found = false;\n        wd++;\n\n        let p = clone(change?.['path']);\n        if (!isArray(p)) return this;\n\n        while (p.length > 0) {\n            const current = p.join('.');\n            const list = this.element.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_INSERT + '*=\"path:' + current + '\"]').entries()\n\n            for (const [, containerElement] of list) {\n\n                if (mem.has(containerElement)) continue;\n                mem.add(containerElement)\n\n                found = true;\n\n                const attributes = containerElement.getAttribute(ATTRIBUTE_UPDATER_INSERT);\n                let def = attributes.trim();\n                let i = def.indexOf(' ');\n                let key = def.substr(0, i).trim();\n                let refPrefix = key + '-';\n                let cmd = def.substr(i).trim();\n\n                // this case is actually excluded by the query but is nevertheless checked again here\n                if (cmd.indexOf('|') > 0) {\n                    throw new Error(\"pipes are not allowed when cloning a node.\");\n                }\n\n                let pipe = new Pipe(cmd);\n                this.callbacks.forEach((f, n) => {\n                    pipe.setCallback(n, f);\n                })\n\n                let value = pipe.run(subject)\n                let dataPath = cmd.split(':').pop();\n\n                let insertPoint;\n                if (containerElement.hasChildNodes()) {\n                    insertPoint = containerElement.lastChild;\n                }\n\n                if (!isIterable(value)) {\n                    throw new Error('the value is not iterable');\n                }\n\n                let available = new Set;\n\n                for (const [i, obj] of Object.entries(value)) {\n                    let ref = refPrefix + i;\n                    let currentPath = dataPath + \".\" + i;\n\n                    available.add(ref);\n                    let refElement = containerElement.querySelector('[' + ATTRIBUTE_UPDATER_INSERT_REFERENCE + '=\"' + ref + '\"]');\n\n                    if (refElement instanceof HTMLElement) {\n                        insertPoint = refElement;\n                        continue;\n                    }\n\n                    appendNewDocumentFragment(containerElement, key, ref, currentPath);\n                }\n\n                let nodes = containerElement.querySelectorAll('[' + ATTRIBUTE_UPDATER_INSERT_REFERENCE + '*=\"' + refPrefix + '\"]');\n                for (const [, node] of Object.entries(nodes)) {\n                    if (!available.has(node.getAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE))) {\n                        containerElement.removeChild(node);\n                    }\n                }\n            }\n\n            p.pop();\n        }\n\n        if (found === false) break;\n        if (wd++ > 200) {\n            throw new Error('the maximum depth for the recursion is reached.');\n        }\n\n    }\n\n\n}\n\n/**\n *\n * @private\n * @since 1.8.0\n * @param {HTMLElement} container\n * @param {string} key\n * @param {string} ref\n * @param {string} path\n * @throws {Error} no template was found with the specified key.\n */\nfunction appendNewDocumentFragment(container, key, ref, path) {\n\n    let template = findDocumentTemplate(key, container);\n\n    let nodes = template.createDocumentFragment();\n    for (const [, node] of Object.entries(nodes.childNodes)) {\n        if (node instanceof HTMLElement) {\n\n            applyRecursive(node, key, path);\n            node.setAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE, ref);\n        }\n\n        container.appendChild(node);\n    }\n}\n\n/**\n * @private\n * @since 1.10.0\n * @param {HTMLElement} node\n * @param {string} key\n * @param {string} path\n * @return {void}\n */\nfunction applyRecursive(node, key, path) {\n\n    if (node instanceof HTMLElement) {\n\n        if (node.hasAttribute(ATTRIBUTE_UPDATER_REPLACE)) {\n            let value = node.getAttribute(ATTRIBUTE_UPDATER_REPLACE);\n            node.setAttribute(ATTRIBUTE_UPDATER_REPLACE, value.replace(\"path:\" + key, \"path:\" + path));\n        }\n\n        if (node.hasAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)) {\n            let value = node.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);\n            node.setAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES, value.replace(\"path:\" + key, \"path:\" + path));\n        }\n\n        for (const [, child] of Object.entries(node.childNodes)) {\n            applyRecursive(child, key, path);\n        }\n    }\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n * @this Updater\n */\nfunction updateContent(change) {\n    const self = this;\n    const subject = self.subject.getRealSubject();\n\n    let p = clone(change?.['path']);\n    runUpdateContent.call(this, this.element, p, subject);\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {HTMLElement} container\n * @param {array} parts\n * @param {object} subject\n * @return {void}\n */\nfunction runUpdateContent(container, parts, subject) {\n    if (!isArray(parts)) return;\n    parts = clone(parts);\n\n    let mem = new WeakSet;\n\n    while (parts.length > 0) {\n        const current = parts.join('.');\n        parts.pop();\n\n        // Unfortunately, static data is always changed as well, since it is not possible to react to changes here.\n        for (const [, element] of container.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"static:\"]').entries()) {\n\n            if (mem.has(element)) continue;\n            mem.add(element)\n\n            const attributes = element.getAttribute(ATTRIBUTE_UPDATER_REPLACE)\n            let cmd = attributes.trim();\n\n            let pipe = new Pipe(cmd);\n            this.callbacks.forEach((f, n) => {\n                pipe.setCallback(n, f);\n            })\n\n            let value = pipe.run(subject)\n\n            if (value instanceof HTMLElement) {\n                while (element.firstChild) {\n                    element.removeChild(element.firstChild);\n                }\n                element.addNode(value);\n            } else {\n                element.innerHTML = value;\n            }\n\n        }\n    }\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {string} path\n * @param {object} change\n * @return {void}\n */\nfunction updateAttributes(change) {\n    const subject = this.subject.getRealSubject();\n    let p = clone(change?.['path']);\n    runUpdateAttributes.call(this, this.element, p, subject);\n}\n\n/**\n * @private\n * @param {HTMLElement} container\n * @param {array} parts\n * @param {object} subject\n * @return {void}\n * @this Updater\n */\nfunction runUpdateAttributes(container, parts, subject) {\n\n    const self = this;\n\n    if (!isArray(parts)) return;\n    parts = clone(parts);\n\n    let mem = new WeakSet;\n\n    while (parts.length > 0) {\n        const current = parts.join('.');\n        parts.pop();\n\n        for (const [, element] of container.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*=\"path:' + current + '\"]').entries()) {\n\n            if (mem.has(element)) continue;\n            mem.add(element)\n\n            const attributes = element.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)\n\n            for (let [, def] of Object.entries(attributes.split(','))) {\n                def = def.trim();\n                let i = def.indexOf(' ');\n                let name = def.substr(0, i).trim();\n                let cmd = def.substr(i).trim();\n\n                let pipe = new Pipe(cmd);\n\n                self.callbacks.forEach((f, n) => {\n                    pipe.setCallback(n, f, element);\n                })\n\n                let value = pipe.run(subject)\n\n                if (value === undefined) {\n                    element.removeAttribute(name)\n\n                } else if (element.getAttribute(name) !== value) {\n                    element.setAttribute(name, value);\n                }\n\n                handleInputControlAttributeUpdate.call(this, element, name, value);\n\n\n            }\n        }\n\n    }\n\n}\n\n/**\n * @private\n * @param {HTMLElement|*} element\n * @param {string} name\n * @param {string|number|undefined} value\n * @return {void}\n * @this Updater\n */\n\nfunction handleInputControlAttributeUpdate(element, name, value) {\n    const self = this;\n\n    if (element instanceof HTMLSelectElement) {\n\n\n        switch (element.type) {\n            case 'select-multiple':\n\n                for (const [index, opt] of Object.entries(element.options)) {\n                    if (value.indexOf(opt.value) !== -1) {\n                        opt.selected = true;\n                    } else {\n                        opt.selected = false;\n                    }\n                }\n\n                break;\n            case 'select-one':\n                // Only one value may be selected\n\n                for (const [index, opt] of Object.entries(element.options)) {\n                    if (opt.value === value) {\n                        element.selectedIndex = index;\n                        break;\n                    }\n                }\n\n                break;\n        }\n\n\n    } else if (element instanceof HTMLInputElement) {\n        switch (element.type) {\n\n            case 'radio':\n                if (name === 'checked' && value !== undefined) {\n                    element.checked = true;\n                } else {\n                    element.checked = false;\n                }\n\n                break;\n\n            case 'checkbox':\n                if (name === 'checked' && value !== undefined) {\n                    element.checked = true;\n                } else {\n                    element.checked = false;\n                }\n\n                break;\n            case 'text':\n            default:\n                if (name === 'value') {\n                    element.value = (value === undefined ? \"\" : value);\n                }\n\n                break;\n\n\n        }\n    } else if (element instanceof HTMLTextAreaElement) {\n        if (name === 'value') {\n            element.value = (value === undefined ? \"\" : value);\n        }\n    }\n\n}\n\nassignToNamespace('Monster.DOM', Updater);\nexport {Monster, Updater}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from \"../types/global.js\";\nimport {validateString} from \"../types/validate.js\";\n\n\n/**\n * this method fetches the document object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getDocument())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getDocument())\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {object}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n */\nfunction getDocument() {\n    let document = getGlobal()?.['document'];\n    if (typeof document !== 'object') {\n        throw new Error(\"not supported environment\")\n    }\n\n    return document;\n}\n\n/**\n * this method fetches the window object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getWindow())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getWindow(null))\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    getGlobal()['window']=window;\n * \n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {object}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n */\nfunction getWindow() {\n    let window = getGlobal()?.['window'];\n    if (typeof window !== 'object') {\n        throw new Error(\"not supported environment\")\n    }\n\n    return window;\n}\n\n\n/**\n *\n *\n * this method fetches the document object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getDocumentFragmentFromString())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getDocumentFragmentFromString('<div></div>'))\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {DocumentFragment}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n * @throws {TypeError} value is not a string\n */\nfunction getDocumentFragmentFromString(html) {\n    validateString(html);\n\n    const document = getDocument();\n    const template = document.createElement('template');\n    template.innerHTML = html;\n\n    return template.content;\n}\n\n\nassignToNamespace('Monster.DOM', getWindow, getDocument, getDocumentFragmentFromString);\nexport {Monster, getWindow, getDocument, getDocumentFragmentFromString}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {validateInstance, validateString} from \"../types/validate.js\";\nimport {findClosestByAttribute} from \"./attributes.js\";\nimport {getDocument} from \"./util.js\";\n\n/**\n * You can call the function via the monster namespace `new Monster.DOM.fireEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(new Monster.DOM.fireEvent())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(fireEvent())\n * </script>\n * ```\n *\n * @param {HTMLElement|HTMLCollection|NodeList} element\n * @param {string} type\n * @return {void}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not an instance of HTMLElement or HTMLCollection\n * @summary Construct and send and event \n */\nfunction fireEvent(element, type) {\n\n    const document = getDocument();\n\n    if (element instanceof HTMLElement) {\n\n        if (type === 'click') {\n            element.click();\n            return;\n        }\n\n        let event = new Event(validateString(type), {\n            bubbles: true,\n            cancelable: true,\n        });\n\n        element.dispatchEvent(event);\n\n    } else if (element instanceof HTMLCollection || element instanceof NodeList) {\n        for (let e of element) {\n            fireEvent(e, type);\n        }\n    } else {\n        throw new TypeError('value is not an instance of HTMLElement or HTMLCollection')\n    }\n\n}\n\n/**\n * This function gets the path `Event.composedPath()` from an event and tries to find the next element\n * up the tree `element.closest()` with the attribute and value. If no value is specified, only the attribute is searched.\n *\n * You can call the function via the monster namespace `new Monster.DOM.findTargetElementFromEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(new Monster.DOM.findTargetElementFromEvent())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(findTargetElementFromEvent())\n * </script>\n * ```\n *\n * @since 1.14.0\n * @param {Event} event\n * @param {string} attributeName\n * @param {string|null} attributeValue\n * @throws {Error} unsupported event\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not a string\n * @throws {TypeError} value is not an instance of HTMLElement\n * @summary Help function to find the appropriate control\n */\nfunction findTargetElementFromEvent(event, attributeName, attributeValue) {\n    validateInstance(event, Event);\n\n    if (typeof event.composedPath !== 'function') {\n        throw new Error('unsupported event');\n    }\n\n    const path = event.composedPath();\n    const element = path?.[0];\n\n    if (element instanceof HTMLElement) {\n        return findClosestByAttribute(element, attributeName, attributeValue);\n    }\n\n    return undefined;\n\n}\n\n\nassignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent);\nexport {Monster, findTargetElementFromEvent, fireEvent}\n","'use strict';\n\nimport {parseLocale} from \"../i18n/locale.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getDocument} from \"./util.js\";\n\n/**\n * @private\n * @type {string}\n */\nconst DEFAULT_LANGUAGE = 'en';\n\n/**\n * With this function you can read the language version set by the document.\n * For this the attribute `lang` in the html tag is read. If no attribute is set, `en` is used as default.\n *\n * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.\n *\n * ```\n * <script type=\"module\">\n * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/locale.js';\n * console.log(new Monster.DOM.getLocaleOfDocument())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/locale.js';\n * console.log(new getLocaleOfDocument())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not a string\n * @throws {Error} unsupported locale\n * @summary Tries to determine the locale used\n */\nfunction getLocaleOfDocument() {\n\n    const document = getDocument();\n\n    let html = document.querySelector('html')\n    if (html instanceof HTMLElement && html.hasAttribute('lang')) {\n        let locale = html.getAttribute('lang');\n        if (locale) {\n            return new parseLocale(locale)\n        }\n    }\n\n    return parseLocale(DEFAULT_LANGUAGE);\n}\n\nassignToNamespace('Monster.DOM', getLocaleOfDocument);\nexport {Monster, getLocaleOfDocument}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\n\n/**\n * @memberOf Monster.I18n\n * @type {symbol}\n */\nconst propertiesSymbol = Symbol('properties');\n\n/**\n * @type {symbol}\n * @memberOf Monster.I18n\n */\nconst localeStringSymbol = Symbol('localeString');\n\n/**\n * You can create an instance via the monster namespace `new Monster.I18n.Locale()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Monster.I18n.Locale())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Locale())\n * </script>\n * ```\n *\n * RFC\n *\n * ```\n * A Language-Tag consists of:\n * langtag                           ; generated tag\n *           -or- private-use        ; a private use tag\n *\n * langtag       = (language\n *                    [\"-\" script]\n *                    [\"-\" region]\n *                    *(\"-\" variant)\n *                    *(\"-\" extension)\n *                    [\"-\" privateuse])\n *\n * language      = \"en\", \"ale\", or a registered value\n *\n * script        = \"Latn\", \"Cyrl\", \"Hant\" ISO 15924 codes\n *\n * region        = \"US\", \"CS\", \"FR\" ISO 3166 codes\n *                 \"419\", \"019\",  or UN M.49 codes\n *\n * variant       = \"rozaj\", \"nedis\", \"1996\", multiple subtags can be used in a tag\n *\n * extension     = single letter followed by additional subtags; more than one extension\n *                 may be used in a language tag\n *\n * private-use   = \"x-\" followed by additional subtags, as many as are required\n *                 Note that these can start a tag or appear at the end (but not\n *                 in the middle)\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see https://datatracker.ietf.org/doc/html/rfc3066\n */\nclass Locale extends Base {\n\n    /**\n     * @param {string} language\n     * @param {string} [region]\n     * @param {string} [script]\n     * @param {string} [variants]\n     * @param {string} [extlang]\n     * @param {string} [privateUse]\n     * @throws {Error} unsupported locale\n     */\n    constructor(language, region, script, variants, extlang, privateUse) {\n        super();\n\n        this[propertiesSymbol] = {\n            language: (language === undefined) ? undefined : validateString(language),\n            script: (script === undefined) ? undefined : validateString(script),\n            region: (region === undefined) ? undefined : validateString(region),\n            variants: (variants === undefined) ? undefined : validateString(variants),\n            extlang: (extlang === undefined) ? undefined : validateString(extlang),\n            privateUse: (privateUse === undefined) ? undefined : validateString(privateUse),\n        };\n\n        let s = [];\n        if (language !== undefined) s.push(language);\n        if (script !== undefined) s.push(script);\n        if (region !== undefined) s.push(region);\n        if (variants !== undefined) s.push(variants);\n        if (extlang !== undefined) s.push(extlang);\n        if (privateUse !== undefined) s.push(privateUse);\n\n        if (s.length === 0) {\n            throw new Error('unsupported locale');\n        }\n\n        this[localeStringSymbol] = s.join('-');\n\n    }\n\n    /**\n     * @return {string}\n     */\n    get localeString() {\n        return this[localeStringSymbol];\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get language() {\n        return this[propertiesSymbol].language;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get region() {\n        return this[propertiesSymbol].region;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get script() {\n        return this[propertiesSymbol].script;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get variants() {\n        return this[propertiesSymbol].variants;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get extlang() {\n        return this[propertiesSymbol].extlang;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get privateUse() {\n        return this[propertiesSymbol].privateValue;\n    }\n\n\n    /**\n     * @return {string}\n     */\n    toString() {\n        return \"\" + this.localeString;\n    }\n\n    /**\n     * @return {Monster.I18n.LocaleMap}\n     */\n    getMap() {\n        return clone(this[propertiesSymbol])\n    }\n\n\n}\n\n/**\n * @typedef {Object} LocaleMap\n * @property {string} language\n * @property {string} script\n * @property {string} region\n * @property {string} variants\n * @property {string} extlang\n * @property {string} privateUse\n * @memberOf Monster.I18n\n */\n\n/**\n * Parse local according to rfc4646 standard\n *\n * Limitations: The regex cannot handle multiple variants or private.\n *\n * You can call the method via the monster namespace `Monster.I18n.createLocale()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Monster.I18n.createLocale())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(createLocale())\n * </script>\n * ```\n *\n * RFC\n *\n * ```\n *   The syntax of the language tag in ABNF [RFC4234] is:\n *\n *   Language-Tag  = langtag\n *                 / privateuse             ; private use tag\n *                 / grandfathered          ; grandfathered registrations\n *\n *   langtag       = (language\n *                    [\"-\" script]\n *                    [\"-\" region]\n *                    *(\"-\" variant)\n *                    *(\"-\" extension)\n *                    [\"-\" privateuse])\n *\n *   language      = (2*3ALPHA [ extlang ]) ; shortest ISO 639 code\n *                 / 4ALPHA                 ; reserved for future use\n *                 / 5*8ALPHA               ; registered language subtag\n *\n *   extlang       = *3(\"-\" 3ALPHA)         ; reserved for future use\n *\n *   script        = 4ALPHA                 ; ISO 15924 code\n *\n *   region        = 2ALPHA                 ; ISO 3166 code\n *                 / 3DIGIT                 ; UN M.49 code\n *\n *   variant       = 5*8alphanum            ; registered variants\n *                 / (DIGIT 3alphanum)\n *\n *   extension     = singleton 1*(\"-\" (2*8alphanum))\n *\n *   singleton     = %x41-57 / %x59-5A / %x61-77 / %x79-7A / DIGIT\n *                 ; \"a\"-\"w\" / \"y\"-\"z\" / \"A\"-\"W\" / \"Y\"-\"Z\" / \"0\"-\"9\"\n *                 ; Single letters: x/X is reserved for private use\n *\n *   privateuse    = (\"x\"/\"X\") 1*(\"-\" (1*8alphanum))\n *\n *   grandfathered = 1*3ALPHA 1*2(\"-\" (2*8alphanum))\n *                   ; grandfathered registration\n *                   ; Note: i is the only singleton\n *                   ; that starts a grandfathered tag\n *\n *   alphanum      = (ALPHA / DIGIT)       ; letters and numbers\n *\n *                        Figure 1: Language Tag ABNF\n * ```\n *\n * @param {string} locale\n * @returns {Locale}\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @throws {TypeError} value is not a string\n * @throws {Error} unsupported locale\n */\nfunction parseLocale(locale) {\n\n    locale = validateString(locale).replace(/_/g, \"-\");\n\n    let language, region, variants, parts, script, extlang,\n        regexRegular = \"(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\",\n        regexIrregular = \"(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\",\n        regexGrandfathered = \"(\" + regexIrregular + \"|\" + regexRegular + \")\",\n        regexPrivateUse = \"(x(-[A-Za-z0-9]{1,8})+)\",\n        regexSingleton = \"[0-9A-WY-Za-wy-z]\",\n        regexExtension = \"(\" + regexSingleton + \"(-[A-Za-z0-9]{2,8})+)\",\n        regexVariant = \"([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})\",\n        regexRegion = \"([A-Za-z]{2}|[0-9]{3})\",\n        regexScript = \"([A-Za-z]{4})\",\n        regexExtlang = \"([A-Za-z]{3}(-[A-Za-z]{3}){0,2})\",\n        regexLanguage = \"(([A-Za-z]{2,3}(-\" + regexExtlang + \")?)|[A-Za-z]{4}|[A-Za-z]{5,8})\",\n        regexLangtag = \"(\" + regexLanguage + \"(-\" + regexScript + \")?\" + \"(-\" + regexRegion + \")?\" + \"(-\" + regexVariant + \")*\" + \"(-\" + regexExtension + \")*\" + \"(-\" + regexPrivateUse + \")?\" + \")\",\n        regexLanguageTag = \"^(\" + regexGrandfathered + \"|\" + regexLangtag + \"|\" + regexPrivateUse + \")$\",\n        regex = new RegExp(regexLanguageTag), match;\n\n\n    if ((match = regex.exec(locale)) !== null) {\n        if (match.index === regex.lastIndex) {\n            regex.lastIndex++;\n        }\n    }\n\n    if (match === undefined || match === null) {\n        throw new Error('unsupported locale');\n    }\n\n    if (match[6] !== undefined) {\n        language = match[6];\n\n        parts = language.split('-');\n        if (parts.length > 1) {\n            language = parts[0];\n            extlang = parts[1];\n        }\n\n    }\n\n    if (match[14] !== undefined) {\n        region = match[14];\n    }\n\n    if (match[12] !== undefined) {\n        script = match[12];\n    }\n\n    if (match[16] !== undefined) {\n        variants = match[16];\n    }\n\n    return new Locale(language, region, script, variants, extlang);\n\n}\n\n\nassignToNamespace('Monster.I18n', Locale, parseLocale);\nexport {Monster, Locale, parseLocale}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {BaseWithOptions} from \"../types/basewithoptions.js\";\nimport {Locale} from \"./locale.js\"\nimport {Translations} from \"./translations.js\"\n\n/**\n * A provider makes a translation object available.\n *\n * You can call the method via the monster namespace `new Monster.I18n.Provider()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/provider.js';\n * console.log(new Monster.I18n.Provider())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/provider.js';\n * console.log(new Provider())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}\n */\nclass Provider extends BaseWithOptions {\n\n    /**\n     * @param {Locale|string} locale\n     * @return {Promise}\n     */\n    getTranslations(locale) {\n        return new Promise((resolve, reject) => {\n            try {\n                resolve(new Translations(locale));\n            } catch (e) {\n                reject(e);\n            }\n\n        });\n    }\n\n}\n\n\nassignToNamespace('Monster.I18n', Provider);\nexport {Monster, Provider}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"./base.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * This is the base class with options from which some monster classes are derived.\n *\n * You can call the method via the monster namespace `new Monster.Types.BaseWithOptions()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/basewithoptions.js';\n * console.log(new Monster.Types.BaseWithOptions())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {BaseWithOptions} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/basewithoptions.js';\n * console.log(new BaseWithOptions())\n * </script>\n * ```\n *\n * The class was formerly called Object.\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass BaseWithOptions extends Base {\n\n    /**\n     *\n     * @param {object} options\n     */\n    constructor(options) {\n        super();\n\n        if (options === undefined) {\n            options = {};\n        }\n\n        this[optionsSymbol] = extend({}, this.defaults, validateObject(options));\n\n    }\n\n    /**\n     * can be overridden by child class values\n     *\n     * @return {object}\n     */\n    get defaults() {\n        return {}\n    }\n\n    /**\n     * nested options can be specified by path `a.b.c`\n     *\n     * @param {string} path\n     * @param {*} defaultValue\n     * @return {*}\n     * @since 1.10.0\n     */\n    getOption(path, defaultValue) {\n        let value;\n\n        try {\n            value = new Pathfinder(this[optionsSymbol]).getVia(path);\n        } catch (e) {\n\n        }\n\n        if (value === undefined) return defaultValue;\n        return value;\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', BaseWithOptions);\nexport {Monster, BaseWithOptions}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {isObject, isString} from \"../types/is.js\";\nimport {validateInstance, validateInteger, validateObject, validateString} from \"../types/validate.js\";\nimport {Locale, parseLocale} from \"./locale.js\";\n\n\n/**\n * With this class you can manage translations and access the keys.\n *\n * You can call the method via the monster namespace `new Monster.I18n.Translations()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/translations.js';\n * console.log(new Monster.I18n.Translations())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/translations.js';\n * console.log(new Translations())\n * </script>\n * ```\n *\n * @example\n *\n * const translation = new Translations(parseLocale('en-GB'));\n *\n * translation.assignTranslations({\n *            text1: \"abc\",\n *            text2: {'other': 'xyz'}\n *         });\n *\n * translation.getText('text1);\n * translation.getPluralRuleText('text1',2);\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see https://datatracker.ietf.org/doc/html/rfc3066\n */\nclass Translations extends Base {\n\n    /**\n     *\n     * @param {Locale} locale\n     */\n    constructor(locale) {\n        super();\n\n        if (isString(locale)) {\n            locale = parseLocale(locale);\n        }\n\n        this.locale = validateInstance(locale, Locale);\n        this.storage = new Map();\n\n    }\n\n\n    /**\n     * Fetches a text using the specified key.\n     * If no suitable key is found, `defaultText` is taken.\n     *\n     * @param {string} key\n     * @param {string|undefined} defaultText\n     * @return {string}\n     * @throws {Error} key not found\n     */\n    getText(key, defaultText) {\n        if (!this.storage.has(key)) {\n            if (defaultText === undefined) {\n                throw new Error('key ' + key + ' not found');\n            }\n\n            return validateString(defaultText);\n        }\n\n        let r = this.storage.get(key);\n        if (isObject(r)) {\n            return this.getPluralRuleText(key, 'other', defaultText);\n        }\n\n        return this.storage.get(key);\n    }\n\n    /**\n     * A number `count` can be passed to this method. In addition to a number, one of the keywords can also be passed directly.\n     * \"zero\", \"one\", \"two\", \"few\", \"many\" and \"other\". Remember: not every language has all rules.\n     *\n     * The appropriate text for this number is then selected. If no suitable key is found, `defaultText` is taken.\n     *\n     * @param {string} key\n     * @param {integer|count} count\n     * @param {string|undefined} defaultText\n     * @return {string}\n     */\n    getPluralRuleText(key, count, defaultText) {\n        if (!this.storage.has(key)) {\n            return validateString(defaultText);\n        }\n\n        let r = validateObject(this.storage.get(key));\n\n        let keyword;\n        if (isString(count)) {\n            keyword = count.toLocaleString();\n        } else {\n            count = validateInteger(count);\n            if (count === 0) {\n                // special handlig for zero count\n                if (r.hasOwnProperty('zero')) {\n                    return validateString(r['zero']);\n                }\n            }\n\n            keyword = new Intl.PluralRules(this.locale.toString()).select(validateInteger(count));\n        }\n\n        if (r.hasOwnProperty(keyword)) {\n            return validateString(r[keyword]);\n        }\n\n        if (r.hasOwnProperty(DEFAULT_KEY)) {\n            return validateString(r[DEFAULT_KEY]);\n        }\n\n        return validateString(defaultText);\n    }\n\n    /**\n     * Set a text for a key\n     *\n     * ```\n     * translations.setText(\"text1\": \"Make my day!\");\n     * // plural rules\n     * translations.setText(\"text6\": {\n     *     \"zero\": \"There are no files on Disk.\",\n     *     \"one\": \"There is one file on Disk.\",\n     *     \"other\": \"There are files on Disk.\"\n     *     \"default\": \"There are files on Disk.\"\n     * });\n     * ```\n     *\n     * @param {string} key\n     * @param {string|object} text\n     * @return {Translations}\n     * @throws {TypeError} value is not a string or object\n     */\n    setText(key, text) {\n\n        if (isString(text) || isObject(text)) {\n            this.storage.set(validateString(key), text);\n            return this;\n        }\n\n        throw new TypeError('value is not a string or object');\n\n    }\n\n    /**\n     * This method can be used to transfer overlays from an object. The keys are transferred and the values are entered as text.\n     *\n     * The values can either be character strings or, in the case of texts with plural forms, objects. The plural forms must be stored as text via a standard key \"zero\", \"one\", \"two\", \"few\", \"many\" and \"other\".\n     *\n     * Additionally, the key default can be specified, which will be used if no other key fits.\n     *\n     * In some languages, like for example in german, there is no own more number at the value 0. In these languages the function applies additionally zero.\n     *\n     * ```\n     * translations.assignTranslations({\n     *   \"text1\": \"Make my day!\",\n     *   \"text2\": \"I'll be back!\",\n     *   \"text6\": {\n     *     \"zero\": \"There are no files on Disk.\",\n     *     \"one\": \"There is one file on Disk.\",\n     *     \"other\": \"There are files on Disk.\"\n     *     \"default\": \"There are files on Disk.\"\n     * });\n     * ```\n     *\n     * @param {object} translations\n     * @return {Translations}\n     */\n    assignTranslations(translations) {\n        validateObject(translations);\n\n        for (const [k, v] of Object.entries(translations)) {\n            this.setText(k, v);\n        }\n\n        return this;\n\n    }\n\n}\n\n\nassignToNamespace('Monster.I18n', Translations);\nexport {Monster, Translations}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../../constants.js\";\nimport {extend} from \"../../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../../namespace.js';\nimport {Formatter} from \"../../text/formatter.js\";\nimport {getGlobalFunction} from \"../../types/global.js\";\nimport {isInstance, isString} from \"../../types/is.js\";\nimport {validateObject, validateString} from \"../../types/validate.js\";\nimport {parseLocale} from \"../locale.js\";\nimport {Provider} from \"../provider.js\";\nimport {Translations} from \"../translations.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * The fetch provider retrieves a JSON file from the given URL and returns a translation object.\n *\n * You can create the object via the monster namespace `new Monster.I18n.Provider.Fetch()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/providers/fetch.js';\n * console.log(new Monster.I18n.Providers.Fetch())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/providers/fetch.js';\n * console.log(new Fetch())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n.Providers\n * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}\n */\nclass Fetch extends Provider {\n\n    /**\n     * As options the key `fetch` can be passed. This config object is passed to the fetch method as init.\n     *\n     * @param {string|URL} url\n     * @param {Object} options see {@link Monster.I18n.Providers.Fetch#defaults}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/fetch}\n     */\n    constructor(url, options) {\n        super(options);\n\n        if (isInstance(url, URL)) {\n            url = url.toString();\n        }\n\n        if (options === undefined) {\n            options = {};\n        }\n\n        validateString(url);\n\n        /**\n         * @property {string}\n         */\n        this.url = url;\n\n        /**\n         * @private\n         * @property {Object} options\n         */\n        this[optionsSymbol] = extend({}, super.defaults, this.defaults, validateObject(options));\n\n    }\n\n    /**\n     * Defaults\n     *\n     * @property {Object} fetch\n     * @property {String} fetch.method=GET\n     * @property {String} fetch.mode=cors\n     * @property {String} fetch.cache=no-cache\n     * @property {String} fetch.credentials=omit\n     * @property {String} fetch.redirect=follow\n     * @property {String} fetch.referrerPolicy=no-referrer\n     *\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API}\n     */\n    get defaults() {\n\n        return {\n            fetch: {\n                method: 'GET', // *GET, POST, PUT, DELETE, etc.\n                mode: 'cors', // no-cors, *cors, same-origin\n                cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\n                credentials: 'omit', // include, *same-origin, omit\n                redirect: 'follow', // manual, *follow, error\n                referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url\n            }\n        }\n\n    }\n\n    /**\n     *\n     * @param {Locale|string} locale\n     * @return {Promise}\n     */\n    getTranslations(locale) {\n\n        if (isString(locale)) {\n            locale = parseLocale(locale);\n        }\n\n        let formatter = new Formatter(locale.getMap())\n\n        return getGlobalFunction('fetch')(formatter.format(this.url), this.getOption('fetch', {}))\n            .then((response) => response.json()).then(data => {\n                return new Translations(locale).assignTranslations(data);\n            });\n\n    }\n\n\n}\n\n\nassignToNamespace('Monster.I18n.Providers', Fetch);\nexport {Monster, Fetch}\n","'use strict';\n\nimport {Pipe} from \"../data/pipe.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {validateObject, validateString} from \"../types/validate.js\";\n\n\n/**\n * Messages can be formatted with the formatter. To do this, an object with the values must be passed to the formatter. The message can then contain placeholders.\n *\n * Look at the example below. The placeholders use the logic of Pipe.\n *\n * You can call the method via the monster namespace `new Monster.Text.Formatter()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/text/formatter.js';\n * console.log(new Monster.Text.Formatter())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/text/formatter.js';\n * console.log(new Formatter())\n * </script>\n * ```\n *\n * @example\n *\n * new Formatter({\n *       a: {\n *           b: {\n *               c: \"Hello\"\n *           },\n *           d: \"world\",\n *       }\n *   }).format(\"${a.b.c} ${a.d | ucfirst}!\");\n *\n * // ↦ Hello World!\n *\n * @since 1.12.0\n * @copyright schukai GmbH\n * @memberOf Monster.Text\n */\nclass Formatter extends Base {\n\n    /**\n     * Default values for the markers are `${` and `}`\n     *\n     * @param {object} object\n     * @throws {TypeError} value is not a object\n     */\n    constructor(object) {\n        super();\n        this.object = validateObject(object);\n        this.openMarker = '${';\n        this.closeMarker = '}';\n    }\n\n    /**\n     * Set new Marker\n     *\n     * Default values for the markers are `${` and `}`\n     *\n     * ```\n     * formatter.setMarker('#'); // open and close are both #\n     * formatter.setMarker('[',']');\n     * formatter.setMarker('i18n{','}');\n     * ```\n     *\n     * @param {string} open\n     * @param {string} close\n     * @return {Formatter}\n     * @since 1.12.0\n     * @throws {TypeError} value is not a string\n     */\n    setMarker(open, close) {\n\n        if (close === undefined) {\n            close = open;\n        }\n\n        this.openMarker = validateString(open);\n        this.closeMarker = validateString(close);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} text\n     * @return {string}\n     * @throws {TypeError} value is not a string\n     */\n    format(text) {\n        return tokenizer.call(this, validateString(text))\n    }\n\n}\n\n/**\n * @private\n * @since 1.12.0\n * @param text\n * @return {string}\n */\nfunction tokenizer(text) {\n    const self = this;\n\n    let formatted = [];\n\n    while (true) {\n\n\n        let startIndex = text.indexOf(self.openMarker);\n        // no marker \n        if (startIndex === -1) {\n            formatted.push(text);\n            break;\n        } else if (startIndex > 0) {\n            formatted.push(text.substring(0, startIndex))\n            text = text.substring(startIndex)\n        }\n\n        let endIndex = text.substring(self.openMarker.length).indexOf(self.closeMarker) + self.openMarker.length;\n\n        if (endIndex === -1) {\n            throw new Error(\"syntax error in formatter template\")\n            return;\n        }\n\n        let command = \"path:\" + text.substring(self.openMarker.length, endIndex);\n\n        formatted.push(validateString(new Pipe(command).run(self.object)));\n\n        text = text.substring(endIndex + self.closeMarker.length);\n\n    }\n\n    return formatted.join('');\n}\n\nassignToNamespace('Monster.Text', Formatter);\nexport {Monster, Formatter}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInstance, validateInteger} from \"../types/validate.js\";\nimport {LogEntry} from \"./logentry.js\";\nimport {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from \"./logger.js\";\n\n/**\n * you can call the method via the monster namespace `new Monster.Logging.Handler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler.js';\n * console.log(new Monster.Logging.Handler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler.js';\n * console.log(new Handler())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass Handler extends Base {\n    constructor() {\n        super();\n\n        /**\n         * Loglevel\n         *\n         * @type {integer}\n         */\n        this.loglevel = OFF;\n    }\n\n    /**\n     * This is the central log function. this method must be\n     * overwritten by derived handlers with their own logic.\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {LogEntry} entry\n     * @returns {boolean}\n     */\n    log(entry) {\n        validateInstance(entry, LogEntry);\n\n        if (this.loglevel < entry.getLogLevel()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * set loglevel\n     *\n     * @param {integer} loglevel\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setLogLevel(loglevel) {\n        validateInteger(loglevel)\n        this.loglevel = loglevel;\n        return this;\n    }\n\n    /**\n     * get loglevel\n     *\n     * @returns {integer}\n     * @since 1.5.0\n     */\n    getLogLevel() {\n        return this.loglevel;\n    }\n\n    /**\n     *  Set log level to All\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setAll() {\n        this.setLogLevel(ALL);\n        return this;\n    };\n\n    /**\n     * Set log level to Trace\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setTrace() {\n        this.setLogLevel(TRACE);\n        return this;\n    };\n\n    /**\n     * Set log level to Debug\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setDebug() {\n        this.setLogLevel(DEBUG);\n        return this;\n    };\n\n    /**\n     * Set log level to Info\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setInfo() {\n        this.setLogLevel(INFO);\n        return this;\n    };\n\n    /**\n     * Set log level to Warn\n     *\n     * @returns {undefined}\n     * @since 1.5.0\n     */\n    setWarn() {\n        this.setLogLevel(WARN);\n        return this;\n    };\n\n    /**\n     * Set log level to Error\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setError() {\n        this.setLogLevel(ERROR);\n        return this;\n    };\n\n    /**\n     * Set log level to Fatal\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setFatal() {\n        this.setLogLevel(FATAL);\n        return this;\n    };\n\n\n    /**\n     * Set log level to Off\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setOff() {\n        this.setLogLevel(OFF);\n        return this;\n    };\n\n\n}\n\n\nassignToNamespace('Monster.Logging', Handler);\nexport {Monster, Handler};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInteger} from '../types/validate.js';\n\n\n/**\n * you can call the method via the monster namespace `new Monster.Logging.LogEntry()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logentry.js';\n * console.log(new Monster.Logging.LogEntry())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logentry.js';\n * console.log(new LogEntry())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass LogEntry extends Base {\n    /**\n     *\n     * @param {Integer} loglevel\n     * @param {...*} args\n     */\n    constructor(loglevel, ...args) {\n        super();\n        validateInteger(loglevel);\n\n        this.loglevel = loglevel\n        this.arguments = args\n    }\n\n    /**\n     *\n     * @returns {integerr}\n     */\n    getLogLevel() {\n        return this.loglevel\n    }\n\n    /**\n     *\n     * @returns {array}\n     */\n    getArguments() {\n        return this.arguments\n    }\n\n}\n\nassignToNamespace('Monster.Logging', LogEntry);\nexport {Monster, LogEntry}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Handler} from '../logging/handler.js';\nimport {LogEntry} from '../logging/logentry.js';\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInteger, validateObject, validateString} from '../types/validate.js';\n\n\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst ALL = 255;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst TRACE = 64;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst DEBUG = 32;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst INFO = 16;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst WARN = 8;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst ERROR = 4;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst FATAL = 2;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst OFF = 0;\n\n/**\n * You can create an object of the class simply by using the namespace `new Monster.Logging.Logger()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logger.js';\n * console.log(new Monster.Logging.Logger())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logger.js';\n * console.log(new Logger())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass Logger extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.handler = new Set;\n    }\n\n    /**\n     *\n     * @param {Handler} handler\n     * @returns {Logger}\n     * @throws {Error} the handler must be an instance of Handler\n     */\n    addHandler(handler) {\n        validateObject(handler)\n        if (!(handler instanceof Handler)) {\n            throw new Error(\"the handler must be an instance of Handler\")\n        }\n\n        this.handler.add(handler)\n        return this;\n    }\n\n    /**\n     *\n     * @param {Handler} handler\n     * @returns {Logger}\n     * @throws {Error} the handler must be an instance of Handler\n     */\n    removeHandler(handler) {\n        validateObject(handler)\n        if (!(handler instanceof Handler)) {\n            throw new Error(\"the handler must be an instance of Handler\")\n        }\n\n        this.handler.delete(handler);\n        return this;\n    }\n\n    /**\n     * log Trace message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logTrace() {\n        triggerLog.apply(this, [TRACE, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Debug message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logDebug() {\n        triggerLog.apply(this, [DEBUG, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Info message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logInfo() {\n        triggerLog.apply(this, [INFO, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Warn message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logWarn() {\n        triggerLog.apply(this, [WARN, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Error message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logError() {\n        triggerLog.apply(this, [ERROR, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Fatal message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logFatal() {\n        triggerLog.apply(this, [FATAL, ...arguments]);\n        return this;\n    };\n\n\n    /**\n     * Labels\n     *\n     * @param {integer} level\n     * @returns {string}\n     */\n    getLabel(level) {\n        validateInteger(level);\n\n        if (level === ALL) return 'ALL';\n        if (level === TRACE) return 'TRACE';\n        if (level === DEBUG) return 'DEBUG';\n        if (level === INFO) return 'INFO';\n        if (level === WARN) return 'WARN';\n        if (level === ERROR) return 'ERROR';\n        if (level === FATAL) return 'FATAL';\n        if (level === OFF) return 'OFF';\n\n        return 'unknown';\n    };\n\n    /**\n     * Level\n     *\n     * @param {string} label\n     * @returns {integer}\n     */\n    getLevel(label) {\n        validateString(label);\n\n        if (label === 'ALL') return ALL;\n        if (label === 'TRACE') return TRACE;\n        if (label === 'DEBUG') return DEBUG;\n        if (label === 'INFO') return INFO;\n        if (label === 'WARN') return WARN;\n        if (label === 'ERROR') return ERROR;\n        if (label === 'FATAL') return FATAL;\n        if (label === 'OFF') return OFF;\n\n        return 0;\n    };\n\n\n}\n\nassignToNamespace('Monster.Logging', Logger);\nexport {Monster, Logger, ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF};\n\n\n/**\n * Log triggern\n *\n * @param {integer} loglevel\n * @param {*} args\n * @returns {Logger}\n * @private\n */\nfunction triggerLog(loglevel, ...args) {\n    var logger = this;\n\n    for (let handler of logger.handler) {\n        handler.log(new LogEntry(loglevel, args))\n    }\n\n    return logger;\n\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../../namespace.js';\nimport {Base} from '../../types/base.js';\nimport {getGlobalObject} from \"../../types/global.js\";\nimport {Handler} from '../handler.js';\nimport {LogEntry} from \"../logentry.js\";\n\n/**\n * You can create an object of the class simply by using the namespace `new Monster.Logging.Handler.ConsoleHandler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler/console.js';\n * console.log(new Monster.Logging.Handler.ConsoleHandler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler/console.js';\n * console.log(new ConsoleHandler())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging.Handler\n */\nclass ConsoleHandler extends Handler {\n    constructor() {\n        super();\n    }\n\n\n    /**\n     * This is the central log function. this method must be\n     * overwritten by derived handlers with their own logic.\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {LogEntry} entry\n     * @returns {boolean}\n     */\n    log(entry) {\n        if (super.log(entry)) {\n            let console = getGlobalObject('console');\n            if (!console) return false;\n            console.log(entry.toString());\n            return true;\n        }\n\n        return false;\n    }\n\n}\n\n\nassignToNamespace('Monster.Logging.Handler', ConsoleHandler);\nexport {Monster, ConsoleHandler};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from '../types/global.js';\n\n\n/**\n * this function uses crypt and returns a random number.\n *\n * you can call the method via the monster namespace `Monster.Math.random()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/math/random.js';\n * console.log(Monster.Math.random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/math/random.js';\n * console.log(random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * @param {number} min starting value of the definition set (default is 0)\n * @param {number} max end value of the definition set (default is 1000000000)\n * @returns {number}\n * @memberOf Monster.Math\n * @throws {Error} missing crypt\n * @throws {Error} we cannot generate numbers larger than 53 bits.\n * @throws {Error} the distance is too small to create a random number.\n\n * @since 1.0.0\n * @copyright schukai GmbH\n */\nfunction random(min, max) {\n\n    if (min === undefined) {\n        min = 0;\n    }\n    if (max === undefined) {\n        max = MAX;\n    }\n\n    if (max < min) {\n        throw new Error(\"max must be greater than min\");\n    }\n\n    return Math.round(create(min, max));\n\n}\n\n/**\n * @private\n * @type {number}\n */\nvar MAX = 1000000000;\n\n\nMath.log2 = Math.log2 || function (n) {\n    return Math.log(n) / Math.log(2);\n};\n\n/**\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n * @private\n * @throws {Error} missing crypt\n * @throws {Error} we cannot generate numbers larger than 53 bits.\n * @throws {Error} the distance is too small to create a random number.\n */\nfunction create(min, max) {\n    let crypt;\n    let globalReference = getGlobal();\n\n    crypt = globalReference?.['crypto'] || globalReference?.['msCrypto'] || globalReference?.['crypto'] || undefined;\n\n    if (typeof crypt === \"undefined\") {\n        throw new Error(\"missing crypt\")\n    }\n\n    let rval = 0;\n    const range = max - min;\n    if (range < 2) {\n        throw  new Error('the distance is too small to create a random number.')\n    }\n\n    const bitsNeeded = Math.ceil(Math.log2(range));\n    if (bitsNeeded > 53) {\n        throw  new Error(\"we cannot generate numbers larger than 53 bits.\");\n    }\n    const bytesNeeded = Math.ceil(bitsNeeded / 8);\n    const mask = Math.pow(2, bitsNeeded) - 1;\n\n    const byteArray = new Uint8Array(bytesNeeded);\n    crypt.getRandomValues(byteArray);\n\n    let p = (bytesNeeded - 1) * 8;\n    for (var i = 0; i < bytesNeeded; i++) {\n        rval += byteArray[i] * Math.pow(2, p);\n        p -= 8;\n    }\n\n    rval = rval & mask;\n\n    if (rval >= range) {\n        return create(min, max);\n    }\n\n    return min + rval;\n\n}\n\nassignToNamespace('Monster.Math', random);\nexport {Monster, random}\n\n\n\n\n","'use strict';\n\nimport {random} from \"../math/random.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from \"./global.js\";\nimport {ID} from \"./id.js\";\n\n/**\n * @private\n * @type {number}\n */\nlet internalCounter = 0;\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.RandomID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/randomid.js';\n * console.log(new Monster.Types.RandomID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {RandomID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/randomid.js';\n * console.log(new RandomID())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary class to generate random numbers\n */\nclass RandomID extends ID {\n\n    /**\n     * create new object\n     */\n    constructor() {\n        super();\n\n        internalCounter += 1;\n\n        this.id = getGlobal().btoa(random(1, 10000))\n            .replace(/=/g, '')\n            /** No numbers at the beginning of the ID, because of possible problems with DOM */\n            .replace(/^[0-9]+/, 'X') + internalCounter;\n    }\n\n}\n\nassignToNamespace('Monster.Types', RandomID);\nexport {Monster, RandomID}\n","'use strict';\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * The version object contains a sematic version number\n *\n * You can create the object via the monster namespace `new Monster.Types.Version()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(new Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * @example\n *\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n *\n * new Version('1.0.0') // ↦ 1.0.0\n * new Version(1)  // ↦ 1.0.0\n * new Version(1, 0, 0) // ↦ 1.0.0\n * new Version('1.2.3', 4, 5) // ↦ 1.4.5\n *\n * @since 1.0.0\n * @author schukai GmbH\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary The version object contains a sematic version number\n */\nclass Version extends Base {\n\n    /**\n     *\n     * @param major\n     * @param minor\n     * @param patch\n     * @throws {Error} major is not a number\n     * @throws {Error} minor is not a number\n     * @throws {Error} patch is not a number\n     */\n    constructor(major, minor, patch) {\n        super();\n\n        if (typeof major === 'string' && minor === undefined && patch === undefined) {\n\n            let parts = major.toString().split('.');\n            major = parseInt(parts[0] || 0);\n            minor = parseInt(parts[1] || 0);\n            patch = parseInt(parts[2] || 0);\n        }\n\n        if (major === undefined) {\n            throw  new Error(\"major version is undefined\");\n        }\n\n        if (minor === undefined) {\n            minor = 0;\n        }\n\n        if (patch === undefined) {\n            patch = 0;\n        }\n\n        this.major = parseInt(major);\n        this.minor = parseInt(minor);\n        this.patch = parseInt(patch);\n\n        if (isNaN(this.major)) {\n            throw  new Error(\"major is not a number\");\n        }\n\n        if (isNaN(this.minor)) {\n            throw  new Error(\"minor is not a number\");\n        }\n\n        if (isNaN(this.patch)) {\n            throw  new Error(\"patch is not a number\");\n        }\n\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.major + '.' + this.minor + '.' + this.patch;\n    }\n\n    /**\n     * returns 0 if equal, -1 if the object version is less and 1 if greater\n     * then the compared version\n     *\n     * @param {string|Version} version Version to compare\n     * @returns {number}\n     */\n    compareTo(version) {\n\n        if (version instanceof Version) {\n            version = version.toString();\n        }\n\n        if (typeof version !== 'string') {\n            throw  new Error(\"type exception\");\n        }\n\n        if (version === this.toString()) {\n            return 0;\n        }\n\n        let a = [this.major, this.minor, this.patch];\n        let b = version.split('.');\n        let len = Math.max(a.length, b.length);\n\n        for (let i = 0; i < len; i += 1) {\n            if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {\n                return 1;\n            } else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {\n                return -1;\n            }\n        }\n\n        return 0;\n    };\n\n}\n\nassignToNamespace('Monster.Types', Version);\n\n\nlet monsterVersion;\n\n/**\n * Version of monster\n *\n * You can call the method via the monster namespace `Monster.getVersion()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(Monster.getVersion())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(getVersion())\n * </script>\n * ```\n *\n * @returns {Monster.Types.Version}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @author schukai GmbH\n * @memberOf Monster\n */\nfunction getVersion() {\n    if (monsterVersion instanceof Version) {\n        return monsterVersion;\n    }\n    /**#@+ dont touch, replaced by make with package.json version */\n    monsterVersion = new Version('1.19.0')\n    /**#@-*/\n\n    return monsterVersion;\n\n}\n\nassignToNamespace('Monster', getVersion);\nexport {Monster, Version, getVersion}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {isFunction} from '../types/is.js';\n\n/**\n * The comparator allows a comparison function to be abstracted.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n * console.log(new Monster.Util.Comparator())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n * console.log(new Comparator())\n * </script>\n * ```\n *\n * The following are some examples of the application of the class.\n *\n * ```\n * new Comparator().lessThanOrEqual(2, 5) // ↦ true\n * new Comparator().greaterThan(4, 2) // ↦ true\n * new Comparator().equal(4, 4) // ↦ true\n * new Comparator().equal(4, 5) // ↦ false\n * ```\n *\n * You can also pass your own comparison function, and thus define the comparison function.\n *\n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @example\n *\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n *\n * console.log(new Comparator().lessThanOrEqual(2, 5))\n * // ↦ true\n * console.log(new Comparator().greaterThan(4, 2))\n * // ↦ true\n * console.log(new Comparator().equal(4, 4))\n * // ↦ true\n * console.log(new Comparator().equal(4, 5))\n * // ↦ false\n *\n * @since 1.3.0\n * @memberOf Monster.Util\n */\nclass Comparator extends Base {\n\n    /**\n     * create new comparator\n     *\n     * @param {Monster.Util~exampleCallback} [callback] Comparator callback\n     * @throw {TypeError} unsupported type\n     * @throw {TypeError} impractical comparison\n     */\n    constructor(callback) {\n        super();\n\n        if (isFunction(callback)) {\n            this.compare = callback\n        } else if (callback !== undefined) {\n            throw new TypeError(\"unsupported type\")\n        } else {\n            // default compare function\n\n            /**\n             *\n             * @param {*} a\n             * @param {*} b\n             * @return {integer} -1, 0 or 1\n             */\n            this.compare = function (a, b) {\n\n                if (typeof a !== typeof b) {\n                    throw new TypeError(\"impractical comparison\")\n                }\n\n                if (a === b) {\n                    return 0;\n                }\n                return a < b ? -1 : 1;\n            };\n        }\n\n    }\n\n    /**\n     * changes the order of the operators\n     *\n     * @return {Comparator}\n     */\n    reverse() {\n        const original = this.compare;\n        this.compare = (a, b) => original(b, a);\n        return this;\n    }\n\n    /**\n     * Checks if two variables are equal.\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    equal(a, b) {\n        return this.compare(a, b) === 0;\n    }\n\n\n    /**\n     * Checks if variable `a` is greater than `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThan(a, b) {\n        return this.compare(a, b) > 0;\n    }\n\n    /**\n     * Checks if variable `a` is greater than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThanOrEqual(a, b) {\n        return this.greaterThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable `a` is less than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThanOrEqual(a, b) {\n        return this.lessThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable a is less than b\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThan(a, b) {\n        return this.compare(a, b) < 0;\n    }\n\n\n}\n\n\n/**\n * This is the description for the callback function used by the operator\n *\n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @callback Monster.Util~exampleCallback\n * @param {*} a\n * @param {*} b\n * @return {integer} -1, 0 or 1\n * @memberOf Monster.Util\n * @see Monster.Util.Comparator\n */\n\n\n/**\n *\n */\nassignToNamespace('Monster.Util', Comparator);\nexport {Monster, Comparator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {validateObject} from '../types/validate.js';\n\n/**\n * Deep freeze a object\n *\n * You can call the method via the monster namespace `Monster.Util.deepFreeze()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/freeze.js';\n * console.log(Monster.Util.deepFreeze({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/freeze.js';\n * console.log(deepFreeze({}))\n * </script>\n * ```\n *\n * @param {object} object object to be freeze\n * @since 1.0.0\n * @returns {object}\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @throws {TypeError} value is not a object\n */\nfunction deepFreeze(object) {\n\n    validateObject(object)\n\n    // Retrieve the defined property names of the object\n    var propNames = Object.getOwnPropertyNames(object);\n\n    // Freeze properties before freezing yourself\n    for (let name of propNames) {\n        let value = object[name];\n\n        object[name] = value && typeof value === \"object\" ?\n            deepFreeze(value) : value;\n    }\n\n    return Object.freeze(object);\n}\n\nassignToNamespace('Monster.Util', deepFreeze);\nexport {Monster, deepFreeze}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @license\n * Copyright 2021 schukai GmbH\n * SPDX-License-Identifier: AGPL-3.0-only or COMMERCIAL\n * @author schukai GmbH\n */\n\n'use strict';\n\nimport './constants.js';\nimport './constraints/abstract.js';\nimport './constraints/abstractoperator.js';\nimport './constraints/andoperator.js';\nimport './constraints/invalid.js';\nimport './constraints/isarray.js';\n\n// find packages/monster/source/ -type f -name \"*.js\" -not -name \"*namespace*\" -not -iname  \"monster.js\"\nimport './constraints/isobject.js';\nimport './constraints/oroperator.js';\nimport './constraints/valid.js';\nimport './data/buildmap.js';\nimport './data/diff.js';\nimport './data/extend.js';\nimport './data/pathfinder.js';\nimport './data/pipe.js';\nimport './data/transformer.js';\nimport './dom/assembler.js';\nimport './dom/attributes.js';\nimport './dom/constants.js';\nimport './dom/customcontrol.js';\nimport './dom/customelement.js';\nimport './dom/events.js';\nimport './dom/locale.js';\nimport './dom/template.js';\nimport './dom/theme.js';\nimport './dom/updater.js';\nimport './dom/util.js';\nimport './i18n/locale.js';\nimport './i18n/provider.js';\nimport './i18n/providers/fetch.js';\nimport './i18n/translations.js';\nimport './logging/handler.js';\nimport './logging/handler/console.js';\nimport './logging/logentry.js';\nimport './logging/logger.js';\nimport './math/random.js';\nimport {Monster} from './namespace.js';\nimport './text/formatter.js';\nimport './types/base.js';\nimport './types/basewithoptions.js';\nimport './types/global.js';\nimport './types/id.js';\nimport './types/is.js';\nimport './types/observer.js';\nimport './types/observerlist.js';\nimport './types/proxyobserver.js';\nimport './types/queue.js';\nimport './types/randomid.js';\nimport './types/stack.js';\nimport './types/tokenlist.js';\nimport './types/typeof.js';\nimport './types/uniquequeue.js';\nimport './types/validate.js';\nimport './types/version.js';\nimport './util/clone.js';\nimport './util/comparator.js';\nimport './util/freeze.js';\n\n\nlet rootName\ntry {\n    rootName = Monster.Types.getGlobalObject('__MonsterRootName__');\n} catch (e) {\n\n}\n\nif (!rootName) rootName = \"Monster\";\n\nMonster.Types.getGlobal()[rootName] = Monster\nexport {Monster};"],"names":["Monster","PROPERTY_KEY_INTERNALDATA","Namespace","namespace","undefined","Error","getNamespace","assignToNamespace","ns","current","namespaceFor","split","i","l","objectName","fn","hasOwnProperty","name","toString","s","f","match","Array","isArray","c","e","parts","space","length","Base","AbstractConstraint","value","Promise","reject","JSON","stringify","Object","AbstractOperator","operantA","operantB","TypeError","AndOperator","all","isValid","Invalid","IsArray","resolve","isIterable","Symbol","iterator","isPrimitive","type","isSymbol","isBoolean","isString","isObject","isInstance","instance","isFunction","isInteger","Number","IsObject","OrOperator","self","a","b","then","catch","Valid","validateString","clone","DELIMITER","Pathfinder","WILDCARD","buildMap","subject","selector","valueTemplate","keyTemplate","filter","result","Map","map","buildFlatMap","call","forEach","v","k","m","build","set","key","parentMap","currentMap","resultLength","size","currentPath","shift","push","finder","getVia","join","o","copyKey","kk","sub","definition","defaultValue","regexp","array","matchAll","groups","placeholder","path","replaceAll","validateIterable","validatePrimitive","validateBoolean","validateObject","validateInstance","n","validateArray","validateSymbol","validateFunction","validateInteger","getGlobal","obj","copy","len","Date","setTime","getTime","Element","HTMLDocument","DocumentFragment","globalContext","window","document","navigator","Proxy","cloneObject","getClone","constructor","Types","globalReference","globalThis","defineProperty","prototype","get","configurable","__monster__","Function","getGlobalObject","getGlobalFunction","Stack","object","wildCard","wildcard","getValueViaPath","setValueViaPath","deleteValueViaPath","iterate","check","entries","anchor","WeakMap","Set","WeakSet","parseInt","WeakRef","last","pop","subpath","stack","isEmpty","peek","append","assignProperty","delete","data","typeOf","Diff","first","second","doDiff","getKeys","keys","fill","_","concat","diff","typeA","typeB","currPath","currDiff","buildResult","getOperator","operator","getPrototypeOf","isNotEqual","results","exec","toLowerCase","extend","arguments","Transformer","Pipe","pipe","callback","context","t","setCallback","reduce","accumulator","transformer","currentIndex","run","ID","args","disassemble","command","callbacks","transform","apply","regex","g","p","r","replace","trim","convertToString","toUpperCase","parse","encodeURIComponent","callbackName","has","unshift","doc","DOMParser","parseFromString","body","textContent","trueStatement","falseStatement","condition","firstchar","charAt","substr","btoa","prefix","suffix","start","end","substring","internalCounter","count","id","ProxyObserver","ATTRIBUTEPREFIX","Assembler","fragment","attributePrefix","cloneNode","Observer","ObserverList","realSubject","getHandler","objectMap","proxyMap","observers","observer","attach","detach","notify","contains","proxy","handler","target","receiver","Reflect","descriptor","getOwnPropertyDescriptor","writable","enumerable","deleteProperty","setPrototypeOf","object1","TokenList","UniqueQueue","tags","queue","tag","add","remove","setTimeout","poll","init","tokens","index","next","done","counter","token","clear","newToken","from","indexOf","splice","toggleValue","Queue","unique","pomises","update","ATTRIBUTE_OBJECTLINK","findClosestObjectLink","element","findClosestByAttribute","addToObjectLink","symbol","HTMLElement","addAttributeToken","removeObjectLink","removeAttributeToken","hasObjectLink","containsAttributeToken","getLinkedObjects","toggleAttributeToken","hasAttribute","setAttribute","getAttribute","toggle","replaceAttributeToken","to","clearAttributeTokens","closest","ATTRIBUTE_PREFIX","ATTRIBUTE_OPTIONS","DEFAULT_THEME","ATTRIBUTE_THEME_PREFIX","ATTRIBUTE_THEME_NAME","ATTRIBUTE_UPDATER_ATTRIBUTES","ATTRIBUTE_UPDATER_REPLACE","ATTRIBUTE_UPDATER_INSERT","ATTRIBUTE_UPDATER_INSERT_REFERENCE","ATTRIBUTE_UPDATER_REMOVE","ATTRIBUTE_UPDATER_BIND","ATTRIBUTE_ROLE","OBJECTLINK_KEY_UPDATER","CustomElement","internalSymbol","CustomControl","attachInternals","getInternal","labels","getTag","validity","validationMessage","willValidate","states","form","state","setFormValue","flags","message","setValidity","checkValidity","reportValidity","parseDataURL","findDocumentTemplate","Template","Updater","internalDataSymbol","for","objectLinkSymbol","initMethodSymbol","assembleMethodSymbol","defaults","getOptionsFromAttributes","initOptionObserver","shadowMode","delegatesFocus","templates","main","attachObserver","detachObserver","containsObserver","getRealSubject","getSubject","setVia","options","parseOptionsJSON","elements","getOption","initShadowRoot","shadowRoot","childNodes","initCSSStylesheet","NodeList","initHtmlContent","updater","HTMLTemplateElement","u","enableEventProcessing","attrName","oldVal","newVal","setOptions","node","containChildNode","Node","ShadowRoot","updaters","list","d","assign","dataUrl","content","template","appendChild","createDocumentFragment","html","innerHTML","styleSheet","getCSSStyleSheet","CSSStyleSheet","adoptedStyleSheets","style","createElement","innerText","attachShadow","mode","registerCustomElement","define","MediaType","parseMediaType","internal","DataUrl","mediatype","base64","atob","dataurl","mediatypeAndBase64","base64Flag","endsWith","lastIndexOf","decodeURIComponent","subtype","parameter","startsWith","parseParameter","entry","kv","getDocumentTheme","currentNode","Document","getRootNode","ownerDocument","theme","themedID","getName","getElementById","Theme","querySelector","getDocument","getCheckStateCallback","change","removeElement","insertElement","updateContent","updateAttributes","eventTypes","types","disableEventProcessing","addEventListener","getControlEventHandler","removeEventListener","notifyObservers","HTMLInputElement","HTMLOptionElement","pathfinder","event","checked","HTMLTextAreaElement","HTMLSelectElement","selectedOptions","querySelectorAll","pf","parentNode","removeChild","mem","wd","found","containerElement","attributes","def","refPrefix","cmd","dataPath","insertPoint","hasChildNodes","lastChild","available","ref","refElement","appendNewDocumentFragment","nodes","container","applyRecursive","child","runUpdateContent","firstChild","addNode","runUpdateAttributes","removeAttribute","handleInputControlAttributeUpdate","opt","selected","selectedIndex","getWindow","getDocumentFragmentFromString","fireEvent","click","Event","bubbles","cancelable","dispatchEvent","HTMLCollection","findTargetElementFromEvent","attributeName","attributeValue","composedPath","parseLocale","DEFAULT_LANGUAGE","getLocaleOfDocument","locale","propertiesSymbol","localeStringSymbol","Locale","language","region","script","variants","extlang","privateUse","privateValue","localeString","regexRegular","regexIrregular","regexGrandfathered","regexPrivateUse","regexSingleton","regexExtension","regexVariant","regexRegion","regexScript","regexExtlang","regexLanguage","regexLangtag","regexLanguageTag","RegExp","lastIndex","BaseWithOptions","Translations","Provider","optionsSymbol","storage","defaultText","getPluralRuleText","keyword","toLocaleString","Intl","PluralRules","select","DEFAULT_KEY","text","translations","setText","Formatter","Fetch","url","URL","fetch","method","cache","credentials","redirect","referrerPolicy","formatter","getMap","format","response","json","assignTranslations","openMarker","closeMarker","open","close","tokenizer","formatted","startIndex","endIndex","LogEntry","ALL","DEBUG","ERROR","FATAL","INFO","OFF","TRACE","WARN","Handler","loglevel","getLogLevel","setLogLevel","Logger","triggerLog","level","label","logger","log","ConsoleHandler","console","random","min","max","MAX","Math","round","create","log2","crypt","rval","range","bitsNeeded","ceil","bytesNeeded","mask","pow","byteArray","Uint8Array","getRandomValues","RandomID","Version","major","minor","patch","isNaN","version","monsterVersion","getVersion","Comparator","compare","original","greaterThan","equal","lessThan","deepFreeze","propNames","getOwnPropertyNames","freeze","rootName"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"monster.dev.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;ACVa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,yBAAyB,GAAG,qBAAlC;;;;;;;;;;;;ACfa;AAEb;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;IACMC;AAEF;AACJ;AACA;AACA;AACA;AACI,qBAAYC,SAAZ,EAAuB;AAAA;;AACnB,QAAIA,SAAS,KAAKC,SAAd,IAA2B,OAAOD,SAAP,KAAqB,QAApD,EAA8D;AAC1D,YAAM,IAAIE,KAAJ,CAAU,2BAAV,CAAN;AACH;;AACD,SAAKF,SAAL,GAAiBA,SAAjB;AACH;AAED;AACJ;AACA;AACA;;;;;WACI,wBAAe;AACX,aAAO,KAAKA,SAAZ;AACH;AAED;AACJ;AACA;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAKG,YAAL,EAAP;AACH;;;;;AAGL;AACA;AACA;AACA;;;AACO,IAAMN,OAAO,GAAG,IAAIE,SAAJ,CAAc,SAAd,CAAhB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASK,iBAAT,CAA2BC,EAA3B,EAAuC;AACnC,MAAIC,OAAO,GAAGC,YAAY,CAACF,EAAE,CAACG,KAAH,CAAS,GAAT,CAAD,CAA1B;;AAEA,MAAI,uDAAe,CAAnB,EAAsB;AAClB,UAAM,IAAIN,KAAJ,CAAU,gCAAV,CAAN;AACH;;AAED,OAAK,IAAIO,CAAC,GAAG,CAAR,EAAWC,CAAC,mDAAjB,EAAgCD,CAAC,GAAGC,CAApC,EAAuCD,CAAC,EAAxC,EAA4C;AACxCH,IAAAA,OAAO,CAACK,UAAU,CAAKF,CAAL,gCAAKA,CAAL,6BAAKA,CAAL,MAAX,CAAP,GAAkCA,CAAlC,gCAAkCA,CAAlC,6BAAkCA,CAAlC;AACH;;AAED,SAAOH,OAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASK,UAAT,CAAoBC,EAApB,EAAwB;AACpB,MAAI;AAEA,QAAI,OAAOA,EAAP,KAAc,UAAlB,EAA8B;AAC1B,YAAO,IAAIV,KAAJ,CAAU,gDAAV,CAAP;AACH;;AAED,QAAIU,EAAE,CAACC,cAAH,CAAkB,MAAlB,CAAJ,EAA+B;AAC3B,aAAOD,EAAE,CAACE,IAAV;AACH;;AAED,QAAI,eAAe,OAAOF,EAAE,CAACG,QAA7B,EAAuC;AACnC,UAAIC,CAAC,GAAGJ,EAAE,CAACG,QAAH,EAAR;AACA,UAAIE,CAAC,GAAGD,CAAC,CAACE,KAAF,CAAQ,0BAAR,CAAR;;AACA,UAAIC,KAAK,CAACC,OAAN,CAAcH,CAAd,KAAoB,OAAOA,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAOA,CAAC,CAAC,CAAD,CAAR;AACH;;AACD,UAAII,CAAC,GAAGL,CAAC,CAACE,KAAF,CAAQ,uBAAR,CAAR;;AACA,UAAIC,KAAK,CAACC,OAAN,CAAcC,CAAd,KAAoB,OAAOA,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAOA,CAAC,CAAC,CAAD,CAAR;AACH;AACJ;AAEJ,GAtBD,CAsBE,OAAOC,CAAP,EAAU;AACR,UAAM,IAAIpB,KAAJ,CAAU,eAAeoB,CAAzB,CAAN;AACH;;AAED,QAAM,IAAIpB,KAAJ,CAAU,uDAAV,CAAN;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASK,YAAT,CAAsBgB,KAAtB,EAA6B;AACzB,MAAIC,KAAK,GAAG3B,OAAZ;AAAA,MAAqBQ,EAAE,GAAG,SAA1B;;AAEA,OAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGc,KAAK,CAACE,MAA1B,EAAkChB,CAAC,EAAnC,EAAuC;AAEnC,QAAI,cAAcc,KAAK,CAACd,CAAD,CAAvB,EAA4B;AACxB;AACH;;AAEDJ,IAAAA,EAAE,IAAI,MAAMkB,KAAK,CAACd,CAAD,CAAjB;;AAEA,QAAI,CAACe,KAAK,CAACX,cAAN,CAAqBU,KAAK,CAACd,CAAD,CAA1B,CAAL,EAAqC;AACjCe,MAAAA,KAAK,CAACD,KAAK,CAACd,CAAD,CAAN,CAAL,GAAkB,IAAIV,SAAJ,CAAcM,EAAd,CAAlB;AACH;;AAEDmB,IAAAA,KAAK,GAAGA,KAAK,CAACD,KAAK,CAACd,CAAD,CAAN,CAAb;AACH;;AAED,SAAOe,KAAP;AACH;;AAGDpB,iBAAiB,CAAC,SAAD,EAAYA,iBAAZ,EAA+BL,SAA/B,CAAjB;;;;;;;;;;;;;;ACxKa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM4B;;;;;AAEF;AACJ;AACA;AACI,gCAAc;AAAA;;AAAA;AAEb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;WACI,iBAAQC,KAAR,EAAe;AACX,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAjB4BF;;AAoBjCtB,gEAAiB,CAAC,qBAAD,EAAwBuB,kBAAxB,CAAjB;;;;;;;;;;;;;ACvCa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACI,wBAAW;AACP,aAAOK,IAAI,CAACC,SAAL,CAAe,IAAf,CAAP;AACH;;;;iCARcC;;AAanB7B,gEAAiB,CAAC,eAAD,EAAkBsB,IAAlB,CAAjB;;;;;;;;;;;;;;AChDa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMQ;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAYC,QAAZ,EAAsBC,QAAtB,EAAgC;AAAA;;AAAA;;AAC5B;;AAEA,QAAI,EAAED,QAAQ,YAAYR,4DAAtB,KAA6C,EAAES,QAAQ,YAAYT,4DAAtB,CAAjD,EAA4F;AACxF,YAAM,IAAIU,SAAJ,CAAc,iDAAd,CAAN;AACH;;AAED,UAAKF,QAAL,GAAgBA,QAAhB;AACA,UAAKC,QAAL,GAAgBA,QAAhB;AAR4B;AAU/B;;;EAlB0BT;;AAuB/BvB,gEAAiB,CAAC,qBAAD,EAAwB8B,gBAAxB,CAAjB;;;;;;;;;;;;;;ACtCa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMI;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQV,KAAR,EAAe;AACX,aAAOC,OAAO,CAACU,GAAR,CAAY,CAAC,KAAKJ,QAAL,CAAcK,OAAd,CAAsBZ,KAAtB,CAAD,EAA+B,KAAKQ,QAAL,CAAcI,OAAd,CAAsBZ,KAAtB,CAA/B,CAAZ,CAAP;AACH;;;;EAVqBM;;AAc1B9B,gEAAiB,CAAC,qBAAD,EAAwBkC,WAAxB,CAAjB;;;;;;;;;;;;;;AChEa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMG;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQb,KAAR,EAAe;AACX,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAViBD;;AActBvB,gEAAiB,CAAC,qBAAD,EAAwBqC,OAAxB,CAAjB;;;;;;;;;;;;;;;ACxDa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQd,KAAR,EAAe;AACX,UAAIR,qDAAO,CAACQ,KAAD,CAAX,EAAoB;AAChB,eAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;AAED,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAdiBD;;AAkBtBvB,gEAAiB,CAAC,qBAAD,EAAwBsC,OAAxB,CAAjB;;;;;;;;;;;;;;;;;;;;;;AChEa;AAEb;AACA;AACA;;;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASE,UAAT,CAAoBhB,KAApB,EAA2B;AACvB,MAAIA,KAAK,KAAK3B,SAAd,EAAyB,OAAO,KAAP;AACzB,MAAI2B,KAAK,KAAK,IAAd,EAAoB,OAAO,KAAP;AACpB,SAAO,QAAOA,KAAP,aAAOA,KAAP,uBAAOA,KAAK,CAAGiB,MAAM,CAACC,QAAV,CAAZ,MAAoC,UAA3C;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,WAAT,CAAqBnB,KAArB,EAA4B;AACxB,MAAIoB,IAAJ;;AAEA,MAAIpB,KAAK,KAAK3B,SAAV,IAAuB2B,KAAK,KAAK,IAArC,EAA2C;AACvC,WAAO,IAAP;AACH;;AAEDoB,EAAAA,IAAI,WAAUpB,KAAV,CAAJ;;AAEA,MAAIoB,IAAI,KAAK,QAAT,IAAqBA,IAAI,KAAK,QAA9B,IAA0CA,IAAI,KAAK,SAAnD,IAAgEA,IAAI,KAAK,QAA7E,EAAuF;AACnF,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,QAAT,CAAkBrB,KAAlB,EAAyB;AACrB,SAAQ,qBAAoBA,KAApB,CAAD,GAA8B,IAA9B,GAAqC,KAA5C;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsB,SAAT,CAAmBtB,KAAnB,EAA0B;AAEtB,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAhC,EAAuC;AACnC,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuB,QAAT,CAAkBvB,KAAlB,EAAyB;AACrB,MAAIA,KAAK,KAAK3B,SAAV,IAAuB,OAAO2B,KAAP,KAAiB,QAA5C,EAAsD;AAClD,WAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwB,QAAT,CAAkBxB,KAAlB,EAAyB;AAErB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAImB,WAAW,CAACnB,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,QAAOA,KAAP,MAAiB,QAArB,EAA+B;AAC3B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASyB,UAAT,CAAoBzB,KAApB,EAA2B0B,QAA3B,EAAqC;AAEjC,MAAI,CAACF,QAAQ,CAACxB,KAAD,CAAb,EAAsB,OAAO,KAAP;AACtB,MAAI,CAAC2B,UAAU,CAACD,QAAD,CAAf,EAA2B,OAAO,KAAP;AAC3B,MAAI,CAACA,QAAQ,CAACzC,cAAT,CAAwB,WAAxB,CAAL,EAA2C,OAAO,KAAP;AAC3C,SAAQe,KAAK,YAAY0B,QAAlB,GAA8B,IAA9B,GAAqC,KAA5C;AAEH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASlC,OAAT,CAAiBQ,KAAjB,EAAwB;AACpB,MAAIT,KAAK,CAACC,OAAN,CAAcQ,KAAd,CAAJ,EAA0B;AACtB,WAAO,IAAP;AACH;;AACD,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2B,UAAT,CAAoB3B,KAApB,EAA2B;AACvB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAImB,WAAW,CAACnB,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;AAC7B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AAEH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS4B,SAAT,CAAmB5B,KAAnB,EAA0B;AACtB,SAAO6B,MAAM,CAACD,SAAP,CAAiB5B,KAAjB,CAAP;AACH;;AAGDxB,gEAAiB,CAAC,eAAD,EAAkB2C,WAAlB,EAA+BG,SAA/B,EAA0CC,QAA1C,EAAoDC,QAApD,EAA8DhC,OAA9D,EAAuEmC,UAAvE,EAAmFX,UAAnF,EAA+FY,SAA/F,EAA0GP,QAA1G,CAAjB;;;;;;;;;;;;;;;AC7Ya;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMS;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ9B,KAAR,EAAe;AACX,UAAIwB,sDAAQ,CAACxB,KAAD,CAAZ,EAAqB;AACjB,eAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;AAED,aAAOC,OAAO,CAACC,MAAR,CAAeF,KAAf,CAAP;AACH;;;;EAdkBD;;AAkBvBvB,gEAAiB,CAAC,qBAAD,EAAwBsD,QAAxB,CAAjB;;;;;;;;;;;;;;ACjEa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ/B,KAAR,EAAe;AACX,UAAIgC,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI/B,OAAJ,CAAY,UAAUc,OAAV,EAAmBb,MAAnB,EAA2B;AAC1C,YAAI+B,CAAJ,EAAOC,CAAP;AAEAF,QAAAA,IAAI,CAACzB,QAAL,CAAcK,OAAd,CAAsBZ,KAAtB,EACKmC,IADL,CACU,YAAY;AACdpB,UAAAA,OAAO;AACV,SAHL,EAGOqB,KAHP,CAGa,YAAY;AACrBH,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAIC,CAAC,KAAK,KAAV,EAAiB;AACbhC,YAAAA,MAAM;AACT;AACJ,SATD;AAWA8B,QAAAA,IAAI,CAACxB,QAAL,CAAcI,OAAd,CAAsBZ,KAAtB,EACKmC,IADL,CACU,YAAY;AACdpB,UAAAA,OAAO;AACV,SAHL,EAGOqB,KAHP,CAGa,YAAY;AACrBF,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAID,CAAC,KAAK,KAAV,EAAiB;AACb/B,YAAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoBI;;AAyCzB9B,gEAAiB,CAAC,qBAAD,EAAwBuD,UAAxB,CAAjB;;;;;;;;;;;;;;AC1Fa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMM;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQrC,KAAR,EAAe;AACX,aAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;;;EAVeD;;AAcpBvB,gEAAiB,CAAC,qBAAD,EAAwB6D,KAAxB,CAAjB;;;;;;;;;;;;;;;;;ACxDa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASM,QAAT,CAAkBC,OAAlB,EAA2BC,QAA3B,EAAqCC,aAArC,EAAoDC,WAApD,EAAiEC,MAAjE,EAAyE;AAErE,MAAMC,MAAM,GAAG,IAAIC,GAAJ,EAAf;AAEA,MAAIC,GAAJ;;AACA,MAAIxB,wDAAU,CAACkB,QAAD,CAAd,EAA0B;AACtBM,IAAAA,GAAG,GAAGN,QAAQ,CAACD,OAAD,CAAd;;AACA,QAAI,EAAEO,GAAG,YAAYD,GAAjB,CAAJ,EAA2B;AACvB,YAAM,IAAIzC,SAAJ,CAAc,yCAAd,CAAN;AACH;AACJ,GALD,MAKO,IAAIc,sDAAQ,CAACsB,QAAD,CAAZ,EAAwB;AAC3BM,IAAAA,GAAG,GAAG,IAAID,GAAJ,EAAN;AACAE,IAAAA,YAAY,CAACC,IAAb,CAAkBF,GAAlB,EAAuBP,OAAvB,EAAgCC,QAAhC;AACH,GAHM,MAGA;AACH,UAAM,IAAIpC,SAAJ,CAAc,0CAAd,CA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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASc,KAAT,CAAed,OAAf,EAAwB+B,UAAxB,EAAoCC,YAApC,EAAkD;AAC9C,MAAID,UAAU,KAAKtG,SAAnB,EAA8B,OAAOuG,YAAY,GAAGA,YAAH,GAAkBhC,OAArC;AAC9BN,EAAAA,kEAAc,CAACqC,UAAD,CAAd;;AAEA,MAAME,MAAM,4BAAG,mCAAH;AAAA;AAAA;AAAA,IAAZ;;AACA,MAAMC,KAAK,sBAAOH,UAAU,CAACI,QAAX,CAAoBF,MAApB,CAAP,CAAX;;AAEA,MAAIT,MAAM,GAAG,IAAI3B,sDAAJ,CAAeG,OAAf,CAAb;;AAEA,MAAIkC,KAAK,CAACjF,MAAN,KAAiB,CAArB,EAAwB;AACpB,WAAOuE,MAAM,CAACC,MAAP,CAAcM,UAAd,CAAP;AACH;;AAEDG,EAAAA,KAAK,CAACxB,OAAN,CAAc,UAACrB,CAAD,EAAO;AACjB,QAAI+C,MAAM,GAAG/C,CAAH,aAAGA,CAAH,uBAAGA,CAAC,CAAG,QAAH,CAAd;AACA,QAAIgD,WAAW,GAAGD,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,aAAH,CAAxB;AACA,QAAIC,WAAW,KAAK5G,SAApB,EAA+B;AAE/B,QAAI6G,IAAI,GAAGF,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,MAAH,CAAjB;AAEA,QAAIzB,CAAC,GAAGa,MAAM,CAACC,MAAP,CAAca,IAAd,CAAR;AACA,QAAI3B,CAAC,KAAKlF,SAAV,EAAqBkF,CAAC,GAAGqB,YAAJ;AAErBD,IAAAA,UAAU,GAAGA,UAAU,CAACQ,UAAX,CAAsBF,WAAtB,EAAmC1B,CAAnC,CAAb;AAGH,GAbD;AAeA,SAAOoB,UAAP;AAEH;;AAGDnG,gEAAiB,CAAC,cAAD,EAAiBmE,QAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;ACzZa;AAEb;AACA;AACA;;AAEA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASyC,gBAAT,CAA0BpF,KAA1B,EAAiC;AAC7B,MAAI,CAACgB,kDAAU,CAAChB,KAAD,CAAf,EAAwB;AACpB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASqF,iBAAT,CAA2BrF,KAA3B,EAAkC;AAC9B,MAAI,CAACmB,mDAAW,CAACnB,KAAD,CAAhB,EAAyB;AACrB,UAAM,IAAIS,SAAJ,CAAc,0BAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsF,eAAT,CAAyBtF,KAAzB,EAAgC;AAC5B,MAAI,CAACsB,iDAAS,CAACtB,KAAD,CAAd,EAAuB;AACnB,UAAM,IAAIS,SAAJ,CAAc,wBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsC,cAAT,CAAwBtC,KAAxB,EAA+B;AAC3B,MAAI,CAACuB,gDAAQ,CAACvB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuF,cAAT,CAAwBvF,KAAxB,EAA+B;AAC3B,MAAI,CAACwB,gDAAQ,CAACxB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwF,gBAAT,CAA0BxF,KAA1B,EAAiC0B,QAAjC,EAA2C;AACvC,MAAI,CAACD,kDAAU,CAACzB,KAAD,EAAQ0B,QAAR,CAAf,EAAkC;AAC9B,QAAI+D,CAAC,GAAG,EAAR;;AACA,QAAIjE,gDAAQ,CAACE,QAAD,CAAR,IAAsBC,kDAAU,CAACD,QAAD,CAApC,EAAgD;AAC5C+D,MAAAA,CAAC,GAAG/D,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAG,MAAH,CAAZ;AACH;;AAED,QAAI+D,CAAJ,EAAO;AACHA,MAAAA,CAAC,GAAG,MAAMA,CAAV;AACH;;AAED,UAAM,IAAIhF,SAAJ,CAAc,gCAAgCgF,CAA9C,CAAN;AACH;;AACD,SAAOzF,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS0F,aAAT,CAAuB1F,KAAvB,EAA8B;AAC1B,MAAI,CAACR,+CAAO,CAACQ,KAAD,CAAZ,EAAqB;AACjB,UAAM,IAAIS,SAAJ,CAAc,uBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2F,cAAT,CAAwB3F,KAAxB,EAA+B;AAC3B,MAAI,CAACqB,gDAAQ,CAACrB,KAAD,CAAb,EAAsB;AAClB,UAAM,IAAIS,SAAJ,CAAc,wBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS4F,gBAAT,CAA0B5F,KAA1B,EAAiC;AAC7B,MAAI,CAAC2B,kDAAU,CAAC3B,KAAD,CAAf,EAAwB;AACpB,UAAM,IAAIS,SAAJ,CAAc,yBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AACvG,CAAD,CAAhB;AACA,SAAOA,CAAP;AACH;;AAGDb,gEAAiB,CAAC,eAAD,EAAkBsH,SAAlB,EAA6B2B,eAA7B,EAA8CC,iBAA9C,CAAjB;;;;;;;;;;;;;;;;;;;ACpJa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACO,IAAMlF,SAAS,GAAG,GAAlB;AACP;AACA;AACA;AACA;;AACO,IAAME,QAAQ,GAAG,GAAjB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,sBAAYmF,MAAZ,EAAoB;AAAA;;AAAA;;AAChB;;AAEA,QAAIzG,yDAAW,CAACyG,MAAD,CAAf,EAAyB;AACrB,YAAM,IAAItJ,KAAJ,CAAU,yCAAV,CAAN;AACH;;AAED,UAAKsJ,MAAL,GAAcA,MAAd;AACA,UAAKC,QAAL,GAAgBnF,QAAhB;AARgB;AASnB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYoF,QAAZ,EAAsB;AAClBxF,MAAAA,kEAAc,CAACwF,QAAD,CAAd;AACA,WAAKD,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,CAAUvJ,MAAV,GAAmB,CAA/B,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,cAAKG,KAAL,EAAY;AACR,WAAKoJ,IAAL,CAAUjF,IAAV,CAAenE,KAAf;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAKoJ,IAAL,GAAY,EAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAM;AACF,UAAI,KAAKL,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AACD,aAAO,KAAK+K,IAAL,CAAUR,GAAV,EAAP;AACH;;;;EAhEe9I;;AAqEpBtB,gEAAiB,CAAC,eAAD,EAAkBmJ,KAAlB,CAAjB;;;;;;;;;;;;;;;ACrGa;AAEb;AACA;AACA;;;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS2B,IAAT,CAAcC,KAAd,EAAqBC,MAArB,EAA6B;AACzB,SAAOC,MAAM,CAACF,KAAD,EAAQC,MAAR,CAAb;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,OAAT,CAAiBzH,CAAjB,EAAoBC,CAApB,EAAuBd,IAAvB,EAA6B;AACzB,MAAI5B,qDAAO,CAAC4B,IAAD,CAAX,EAAmB;AACf,QAAMuI,IAAI,GAAG1H,CAAC,CAACpC,MAAF,GAAWqC,CAAC,CAACrC,MAAb,GAAsB,IAAIN,KAAJ,CAAU0C,CAAC,CAACpC,MAAZ,CA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;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AACF;AACJ;AACA;AACA;AACI,uBAAYnG,UAAZ,EAAwB;AAAA;;AAAA;;AACpB;AACArC,IAAAA,kEAAc,CAACqC,UAAD,CAAd;AAEA,UAAKgH,IAAL,GAAYC,WAAW,CAACjH,UAAD,CAAvB;AACA,UAAKkH,OAAL,GAAe,MAAKF,IAAL,CAAUzH,KAAV,EAAf;AACA,UAAK4H,SAAL,GAAiB,IAAI5I,GAAJ,EAAjB;AANoB;AAQvB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYhE,IAAZ,EAAkB+L,QAAlB,EAA4BC,OAA5B,EAAqC;AACjC5I,MAAAA,kEAAc,CAACpD,IAAD,CAAd;AACA0G,MAAAA,oEAAgB,CAACqF,QAAD,CAAhB;;AAEA,UAAIC,OAAO,KAAK7M,SAAhB,EAA2B;AACvBkH,QAAAA,kEAAc,CAAC2F,OAAD,CAAd;AACH;;AAED,WAAKY,SAAL,CAAenI,GAAf,CAAmBzE,IAAnB,EAAyB;AACrB+L,QAAAA,QAAQ,EAAEA,QADW;AAEr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CA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMqB;;;;;AAEF;AACJ;AACA;AACI,mBAAc;AAAA;;AAAA;;AACV;AACA,UAAKlI,IAAL,GAAY,EAAZ;AAFU;AAGb;AAGD;AACJ;AACA;;;;;WACI,mBAAU;AACN,aAAO,KAAKA,IAAL,CAAUvJ,MAAV,KAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAKkJ,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AAED,aAAO,KAAK+K,IAAL,CAAU,CAAV,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,aAAIpJ,KAAJ,EAAW;AACP,WAAKoJ,IAAL,CAAUjF,IAAV,CAAenE,KAAf;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAKoJ,IAAL,GAAY,EAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAKL,OAAL,EAAJ,EAAoB;AAChB,eAAO1K,SAAP;AACH;;AACD,aAAO,KAAK+K,IAAL,CAAUlF,KAAV,EAAP;AACH;;;;EA/DepE;;AAoEpBtB,gEAAiB,CAAC,eAAD,EAAkB8S,KAAlB,CAAjB;;;;;;;;;;;;;;;;AC3Ha;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM7C;;;;;AAEF;AACJ;AACA;AACI,0B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;AACA,IAAME,aAAa,GAAG,SAAtB;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,sBAAsB,GAAGH,gBAAgB,GAAG,QAAlD;AAEA;AACA;AACA;AACA;;AACA,IAAMI,oBAAoB,GAAGD,sBAAsB,GAAG,MAAtD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAME,4BAA4B,GAAGL,gBAAgB,GAAG,YAAxD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMM,yBAAyB,GAAGN,gBAAgB,GAAG,SAArD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMO,wBAAwB,GAAGP,gBAAgB,GAAG,QAApD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMQ,kCAAkC,GAAGR,gBAAgB,GAAG,kBAA9D;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMS,wBAAwB,GAAGT,gBAAgB,GAAG,QAApD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMU,sBAAsB,GAAGV,gBAAgB,GAAG,MAAlD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMW,cAAc,GAAGX,gBAAgB,GAAG,MAA1C;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMtB,oBAAoB,GAAGsB,gBAAgB,GAAG,YAAhD;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMY,sBAAsB,GAAG,gBAA/B;;;;;;;;;;;;;;;ACzGa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA,IAAME,cAAc,GAAG7S,MAAM,CAAC,gBAAD,CAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM8S;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;;AAEA,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AO,KAAKwV,cAAL,CAAP;AACH;;AAEDtV,gEAAiB,CAAC,aAAD,EAAgBuV,aAAhB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtTa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAMqB,kBAAkB,GAAGnU,MAAM,CAACoU,GAAP,CAAWnX,oEAAX,CAA3B;AAEA;AACA;AACA;AACA;;AACA,IAAMoX,gBAAgB,GAAGrU,MAAM,CAACoU,GAAP,CAAWzB,kEAAX,CAAzB;AAEA;AACA;AACA;AACA;;AACA,IAAM2B,gBAAgB,GAAGtU,MAAM,CAAC,kBAAD,CAA/B;AAEA;AACA;AACA;AACA;;AACA,IAAMuU,oBAAoB,GAAGvU,MAAM,CAAC,sBAAD,CAAnC;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM4S;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;AACA,UAAKuB,kBAAL,IAA2B,IAAIlH,kEAAJ,CAAkB;AAAC,iBAAWtD,uDAAM,CAAC,EAAD,EAAK,MAAK6K,QAAV,EAAoBC,wBAAwB,CAACrS,IAAzB,+BAApB;AAAlB,KAAlB,CAA3B;AACAsS,IAAAA,kBAAkB,CAACtS,IAAnB;;AACA,UAAKkS,gBAAL;;AAJU;AAKb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;;AAKI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAe;AACX,aAAO;AACHK,QAAAA,UAAU,EAAE,MADT;AAEHC,QAAAA,cAAc,EAAE,IAFb;AAGHC,QAAAA,SAAS,EAAE;AACPC,UAAAA,IAAI,EAAE1X;AADC;AAHR,OAAP;AAOH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AA+BI;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAe0Q,QAAf,EAAyB;AACrB,WAAKqG,kBAAL,EAAyBY,cAAzB,CAAwCjH,QAAxC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAeA,QAAf,EAAyB;AACrB,WAAKqG,kBAAL,EAAyBa,cAAzB,CAAwClH,QAAxC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,0BAAiBA,QAAjB,EAA2B;AACvB,aAAO,KAAKqG,kBAAL,EAAyBc,gBAAzB,CAA0CnH,QAA1C,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;W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;AACA;AACA;AACA;;IACM6F;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,iBAAY5b,IAAZ,EAAkB;AAAA;;AAAA;;AACd;AACAoD,IAAAA,kEAAc,CAACpD,IAAD,CAAd;AACA,UAAKA,IAAL,GAAYA,IAAZ;AAHc;AAIjB;AAED;AACJ;AACA;AACA;;;;;WACI,mBAAU;AACN,aAAO,KAAKA,IAAZ;AACH;;;;EAnBeY;AAuBpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASua,gBAAT,GAA4B;AACxB,MAAI3T,QAAQ,GAAGe,iEAAe,CAAC,UAAD,CAA9B;AACA,MAAIvI,IAAI,GAAGgU,wDAAX;AAEA,MAAItB,OAAO,GAAGlL,QAAQ,CAACqU,aAAT,CAAuB,MAAvB,CAAd;;AACA,MAAInJ,OAAO,YAAYI,WAAvB,EAAoC;AAChC,QAAI0I,KAAK,GAAG9I,OAAO,CAACc,YAAR,CAAqBU,+DAArB,CAAZ;;AACA,QAAIsH,KAAJ,EAAW;AACPxb,MAAAA,IAAI,GAAGwb,KAAP;AACH;AACJ;;AAED,SAAO,IAAII,KAAJ,CAAU5b,IAAV,CAAP;AAEH;;AAEDV,gEAAiB,CAAC,aAAD,EAAgBsc,KAAhB,EAAuBT,gBAAvB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;ACnGa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;AAQA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMlF;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAYvD,OAAZ,EAAqBhP,OAArB,EAA8B;AAAA;;AAAA;;AAC1B;AAEA;AACR;AACA;;AACQ,UAAKgP,OAAL,GAAepM,oEAAgB,CAACoM,OAAD,EAAUI,WAAV,CAA/B;AAEA,QAAIpP,OAAO,KAAKvE,SAAhB,EAA2BuE,OAAO,GAAG,EAAV;AAC3B,QAAIX,CAAC,GAAGW,OAAR;;AACA,QAAI,CAACnB,wDAAU,CAACmB,OAAD,EAAUsL,kEAAV,CAAf,EAAyC;AACrCtL,MAAAA,OAAO,GAAG,IAAIsL,kEAAJ,CAAkBtL,OAAlB,CAAV;AACH;;AAED,UAAK+F,IAAL,GAAY,EAAZ;AACA,UAAKmD,SAAL,GAAiB,IAAI5I,GAAJ,EAAjB;;AACA,UAAK4I,SAAL,CAAenI,GAAf,CAAmB,YAAnB,EAAiCsX,qBAAqB,CAAC5X,IAAtB,+BAAjC;AAEA;AACR;AACA;;;AACQ,UAAKT,OAAL,GAAeA,OAAO,CAACoT,cAAR,CAAuB,IAAIxH,wDAAJ,CAAa,YAAM;AAErD,UAAMpP,CAAC,GAAG,MAAKwD,OAAL,CAAauT,cAAb,EAAV;;AAEA,UAAMpM,IAAI,GAAGT,mDAAI,CAAC,MAAKX,IAAN,EAAYvJ,CAAZ,CAAjB;AACA,YAAKuJ,IAAL,GAAYpG,sDAAK,CAACnD,CAAD,CAAjB;;AAEA,yCAAyBiB,MAAM,CAAC+H,OAAP,CAAe2B,IAAf,CAAzB,qCAA+C;AAA1C;AAAA,YAASmR,MAAT;;AACDC,QAAAA,aAAa,CAAC9X,IAAd,gCAAyB6X,MAAzB;AACAE,QAAAA,aAAa,CAAC/X,IAAd,gCAAyB6X,MAAzB;AACAG,QAAAA,aAAa,CAAChY,IAAd,gCAAyB6X,MAAzB;AACAI,QAAAA,gBAAgB,CAACjY,IAAjB,gCAA4B6X,MAA5B;AACH;AACJ,KAbqC,CAAvB,CAAf;AAeA,UAAKK,UAAL,GAAkB,CAAC,OAAD,EAAU,OAAV,EAAmB,QAAnB,EAA6B,MAA7B,EAAqC,UAArC,EAAiD,OAAjD,CAAlB;AApC0B;AAsC7B;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,uBAAcC,KAAd,EAAqB;AACjB,WAAKD,UAAL,GAAkB7V,iEAAa,CAAC8V,KAAD,CAA/B;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iCAAwB;AACpB,WAAKC,sBAAL;;AADoB,iDAGD,KAAKF,UAHJ;AAAA;;AAAA;AAGpB,4DAAoC;AAAA,cAAzBna,IAAyB;AAChC,eAAKwQ,OAAL,CAAa8J,gBAAb,CAA8Bta,IAA9B,EAAoCua,sBAAsB,CAACtY,IAAvB,CAA4B,IAA5B,CAApC;AACH;AALmB;AAAA;AAAA;AAAA;AAAA;;AAOpB,aAAO,IAAP;AAEH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,kCAAyB;AAAA,kDAEF,KAAKkY,UAFH;AAAA;;AAAA;AAErB,+DAAoC;AAAA,cAAzBna,IAAyB;AAChC,eAAKwQ,OAAL,CAAagK,mBAAb,CAAiCxa,IAAjC,EAAuCua,sBAAsB,CAACtY,IAAvB,CAA4B,IAA5B,CAAvC;AACH;AAJoB;AAAA;AAAA;AAAA;AAAA;;AAMrB,aAAO,IAAP;AAEH,MAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAM;AACF;AACA;AACA,WAAKsF,IAAL,GAAY;AAAC,oBAAY;AAAb,OAAZ;AACA,aAAO,KAAK/F,OAAL,CAAaiZ,eAAb,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,sBAAa;AACT,aAAO,KAAKjZ,OAAL,CAAawT,UAAb,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAYlX,IAAZ,EAAkB+L,QAAlB,EAA4B;AACxB,WAAKa,SAAL,CAAenI,GAAf,CAAmBzE,IAAnB,EAAyB+L,QAAzB;AACA,aAAO,IAAP;AACH;;;;EA1JiBnL;AA8JtB;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASmb,qBAAT,GAAiC;AAC7B,MAAMjZ,IAAI,GAAG,IAAb;AAEA,SAAO,UAAUtD,OAAV,EAAmB;AAEtB,QAAI,gBAAgBod,gBAApB,EAAsC;AAClC,UAAI,CAAC,OAAD,EAAU,UAAV,EAAsB3K,OAAtB,CAA8B,KAAK/P,IAAnC,MAA6C,CAAC,CAAlD,EAAqD;AACjD,eAAQ,KAAKpB,KAAL,GAAa,EAAb,KAAoBtB,OAAO,GAAG,EAA/B,GAAqC,MAArC,GAA8CL,SAArD;AACH;AACJ,KAJD,MAIO,IAAI,gBAAgB0d,iBAApB,EAAuC;AAE1C,UAAIvc,qDAAO,CAACd,OAAD,CAAP,IAAoBA,OAAO,CAACyS,OAAR,CAAgB,KAAKnR,KAArB,MAAgC,CAAC,CAAzD,EAA4D;AACxD,eAAO,MAAP;AACH;;AACD,aAAO3B,SAAP;AAGH;AACJ,GAfD;AAgBH;AAED;AACA;AACA;;;AACA,IAAM0T,MAAM,GAAG9Q,MAAM,CAAC,cAAD,CAArB;AAEA;AACA;AACA;AACA;AACA;;AACA,SAAS0a,sBAAT,GAAkC;AAE9B,MAAM3Z,IAAI,GAAG,IAAb;;AAEA,MAAIA,IAAI,CAAC+P,MAAD,CAAR,EAAkB;AACd,WAAO/P,IAAI,CAAC+P,MAAD,CAAX;AACH;;AAED,MAAMiK,UAAU,GAAG,IAAIvZ,2DAAJ,CAAe,KAAKG,OAAL,CAAawT,UAAb,EAAf,CAAnB;AAEA;AACJ;AACA;AACA;AACA;;AACIpU,EAAAA,IAAI,CAAC+P,MAAD,CAAJ,GAAe,UAACkK,KAAD,EAAW;AAAA;;AACtB,QAAMrK,OAAO,GAAGqK,KAAK,CAAC3M,MAAtB;;AAEA,QAAI,CAACsC,OAAO,CAACY,YAAR,CAAqBkB,qEAArB,CAAL,EAAmD;AAC/C;AACH;;AAED,QAAIxO,IAAI,GAAG0M,OAAO,CAACc,YAAR,CAAqBgB,qEAArB,CAAX;;AAEA,QAAIxO,IAAI,CAACiM,OAAL,CAAa,OAAb,MAA0B,CAA9B,EAAiC;AAC7B,YAAM,IAAI7S,KAAJ,CAAU,sDAAV,CAAN;AACH;;AAED4G,IAAAA,IAAI,GAAGA,IAAI,CAACsI,MAAL,CAAY,CAAZ,CAAP;AAEA,QAAIxN,KAAJ;;AAEA,QAAI4R,OAAO,YAAYkK,gBAAvB,EAAyC;AACrC,cAAQlK,OAAO,CAACxQ,IAAhB;AAEI,aAAK,UAAL;AACIpB,UAAAA,KAAK,GAAG4R,OAAO,CAACsK,OAAR,GAAkBtK,OAAO,CAAC5R,KAA1B,GAAkC3B,SAA1C;AACA;;AACJ;AACI2B,UAAAA,KAAK,GAAG4R,OAAO,CAAC5R,KAAhB;AACA;AAPR;AAWH,KAZD,MAYO,IAAI4R,OAAO,YAAYuK,mBAAvB,EAA4C;AAC/Cnc,MAAAA,KAAK,GAAG4R,OAAO,CAAC5R,KAAhB;AAEH,KAHM,MAGA,IAAI4R,OAAO,YAAYwK,iBAAvB,EAA0C;AAE7C,cAAQxK,OAAO,CAACxQ,IAAhB;AACI,aAAK,YAAL;AACIpB,UAAAA,KAAK,GAAG4R,OAAO,CAAC5R,KAAhB;AACA;;AACJ,aAAK,iBAAL;AACIA,UAAAA,KAAK,GAAG4R,OAAO,CAAC5R,KAAhB;AAEA,cAAIsW,OAAO,GAAG1E,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEyK,eAAvB;AACA,cAAI/F,OAAO,KAAKjY,SAAhB,EAA2BiY,OAAO,GAAG1E,OAAO,CAAC0K,gBAAR,CAAyB,uBAAzB,CAAV;AAC3Btc,UAAAA,KAAK,GAAGT,KAAK,CAAC2R,IAAN,CAAWoF,OAAX,EAAoBnT,GAApB,CAAwB;AAAA,gBAAEnD,KAAF,QAAEA,KAAF;AAAA,mBAAaA,KAAb;AAAA,WAAxB,CAAR;AAEA;AAXR,OAF6C,CAiB7C;;AACH,KAlBM,MAkBA,IAAK4R,OAAO,SAAP,IAAAA,OAAO,WAAP,4BAAAA,OAAO,CAAE7K,WAAT,sEAAsBK,SAAtB,IAAmC,CAAC,2BAAC/G,MAAM,CAACqP,wBAAP,CAAgCkC,OAAO,CAAC7K,WAAR,CAAoBK,SAApD,EAA+D,OAA/D,CAAD,kDAAC,sBAA0E,KAA1E,CAAD,CAArC,IAA2HwK,OAAO,CAAC3S,cAAR,CAAuB,OAAvB,CAA/H,EAAgK;AACnKe,MAAAA,KAAK,GAAG4R,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAG,OAAH,CAAf;AACH,KAFM,MAEA;AACH,YAAM,IAAItT,KAAJ,CAAU,oBAAV,CAAN;AACH;;AAED,QAAM0H,IAAI,GAAGzD,sDAAK,CAACP,IAAI,CAACY,OAAL,CAAauT,cAAb,EAAD,CAAlB;AACA,QAAMoG,EAAE,GAAG,IAAI9Z,2DAAJ,CAAeuD,IAAf,CAAX;AACAuW,IAAAA,EAAE,CAAClG,MAAH,CAAUnR,IAAV,EAAgBlF,KAAhB;AAEA,QAAM+J,IAAI,GAAG,IAAIT,+CAAJ,CAAStD,IAAT,EAAehE,IAAI,CAACY,OAAL,CAAauT,cAAb,EAAf,CAAb;;AAEA,QAAIpM,IAAI,CAAClK,MAAL,GAAc,CAAlB,EAAqB;AACjBmc,MAAAA,UAAU,CAAC3F,MAAX,CAAkBnR,IAAlB,EAAwBlF,KAAxB;AACH;AAEJ,GAlED;;AAoEA,SAAOgC,IAAI,CAAC+P,MAAD,CAAX;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASoJ,aAAT,CAAuBD,MAAvB,EAA+B;AAAA,8CACD,KAAKtJ,OAAL,CAAa0K,gBAAb,CAA8B,aAAa7I,uEAAb,GAAwC,GAAtE,EAA2ErL,OAA3E,EADC;AAAA;;AAAA;AAC3B,2DAAgH;AAAA;AAAA,UAAlGwJ,OAAkG;;AAC5GA,MAAAA,OAAO,CAAC4K,UAAR,CAAmBC,WAAnB,CAA+B7K,OAA/B;AACH;AAH0B;AAAA;AAAA;AAAA;AAAA;AAI9B;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwJ,aAAT,CAAuBF,MAAvB,EAA+B;AAAA;;AAC3B,MAAMlZ,IAAI,GAAG,IAAb;AACA,MAAMY,OAAO,GAAGZ,IAAI,CAACY,OAAL,CAAauT,cAAb,EAAhB;AACA,MAAMzP,QAAQ,GAAGsU,sDAAW,EAA5B;AAEA,MAAI0B,GAAG,GAAG,IAAIlU,OAAJ,EAAV;AACA,MAAImU,EAAE,GAAG,CAAT;;AAGA,SAAO,IAAP,EAAa;AACT,QAAIC,KAAK,GAAG,KAAZ;AACAD,IAAAA,EAAE;AAEF,QAAIxQ,CAAC,GAAG5J,sDAAK,CAAC2Y,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAG,MAAH,CAAP,CAAb;AACA,QAAI,CAAC1b,qDAAO,CAAC2M,CAAD,CAAZ,EAAiB,OAAO,IAAP;;AAEjB,WAAOA,CAAC,CAACtM,MAAF,GAAW,CAAlB,EAAqB;AACjB,UAAMnB,OAAO,GAAGyN,CAAC,CAAC7H,IAAF,CAAO,GAAP,CAAhB;AACA,UAAMuT,IAAI,GAAG,KAAKjG,OAAL,CAAa0K,gBAAb,CAA8B,aAAa/I,uEAAb,GAAwC,UAAxC,GAAqD7U,OAArD,GAA+D,IAA7F,EAAmG0J,OAAnG,EAAb;;AAFiB,kDAIkByP,IAJlB;AAAA;;AAAA;AAAA;AAAA;AAAA,cAIHgF,gBAJG;;AAMb,cAAIH,GAAG,CAAC9P,GAAJ,CAAQiQ,gBAAR,CAAJ,EAA+B;AAC/BH,UAAAA,GAAG,CAACrM,GAAJ,CAAQwM,gBAAR;AAEAD,UAAAA,KAAK,GAAG,IAAR;AAEA,cAAME,UAAU,GAAGD,gBAAgB,CAACnK,YAAjB,CAA8Ba,uEAA9B,CAAnB;AACA,cAAIwJ,GAAG,GAAGD,UAAU,CAACxQ,IAAX,EAAV;AACA,cAAIzN,CAAC,GAAGke,GAAG,CAAC5L,OAAJ,CAAY,GAAZ,CAAR;AACA,cAAIvN,GAAG,GAAGmZ,GAAG,CAACvP,MAAJ,CAAW,CAAX,EAAc3O,CAAd,EAAiByN,IAAjB,EAAV;AACA,cAAI0Q,SAAS,GAAGpZ,GAAG,GAAG,GAAtB;AACA,cAAIqZ,GAAG,GAAGF,GAAG,CAACvP,MAAJ,CAAW3O,CAAX,EAAcyN,IAAd,EAAV,CAhBa,CAkBb;;AACA,cAAI2Q,GAAG,CAAC9L,OAAJ,CAAY,GAAZ,IAAmB,CAAvB,EAA0B;AACtB,kBAAM,IAAI7S,KAAJ,CAAU,4CAAV,CAAN;AACH;;AAED,cAAI0M,IAAI,GAAG,IAAID,+CAAJ,CAASkS,GAAT,CAAX;;AACA,gBAAI,CAACnR,SAAL,CAAexI,OAAf,CAAuB,UAACjE,CAAD,EAAIoG,CAAJ,EAAU;AAC7BuF,YAAAA,IAAI,CAACI,WAAL,CAAiB3F,CAAjB,EAAoBpG,CAApB;AACH,WAFD;;AAIA,cAAIW,KAAK,GAAGgL,IAAI,CAACS,GAAL,CAAS7I,OAAT,CAAZ;AACA,cAAIsa,QAAQ,GAAGD,GAAG,CAACre,KAAJ,CAAU,GAAV,EAAegK,GAAf,EAAf;AAEA,cAAIuU,WAAW,SAAf;;AACA,cAAIN,gBAAgB,CAACO,aAAjB,EAAJ,EAAsC;AAClCD,YAAAA,WAAW,GAAGN,gBAAgB,CAACQ,SAA/B;AACH;;AAED,cAAI,CAACrc,wDAAU,CAAChB,KAAD,CAAf,EAAwB;AACpB,kBAAM,IAAI1B,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,cAAIgf,SAAS,GAAG,IAAI/U,GAAJ,EAAhB;;AAEA,+CAAuBlI,MAAM,CAAC+H,OAAP,CAAepI,KAAf,CAAvB,wCAA8C;AAAzC;AAAA,gBAAOnB,GAAP;AAAA,gBAAUkH,GAAV;;AACD,gBAAIwX,GAAG,GAAGP,SAAS,GAAGne,GAAtB;AACA,gBAAIoF,WAAW,GAAGiZ,QAAQ,GAAG,GAAX,GAAiBre,GAAnC;AAEAye,YAAAA,SAAS,CAACjN,GAAV,CAAckN,GAAd;AACA,gBAAIC,UAAU,GAAGX,gBAAgB,CAAC9B,aAAjB,CAA+B,MAAMvH,iFAAN,GAA2C,IAA3C,GAAkD+J,GAAlD,GAAwD,IAAvF,CAAjB;;AAEA,gBAAIC,UAAU,YAAYxL,WAA1B,EAAuC;AACnCmL,cAAAA,WAAW,GAAGK,UAAd;AACA;AACH;;AAEDC,YAAAA,yBAAyB,CAACZ,gBAAD,EAAmBjZ,GAAnB,EAAwB2Z,GAAxB,EAA6BtZ,WAA7B,CAAzB;AACH;;AAED,cAAIyZ,KAAK,GAAGb,gBAAgB,CAACP,gBAAjB,CAAkC,MAAM9I,iFAAN,GAA2C,KAA3C,GAAmDwJ,SAAnD,GAA+D,IAAjG,CAAZ;;AACA,+CAAuB3c,MAAM,CAAC+H,OAAP,CAAesV,KAAf,CAAvB,wCAA8C;AAAzC;AAAA,gBAASlG,IAAT;;AACD,gBAAI,CAAC8F,SAAS,CAAC1Q,GAAV,CAAc4K,IAAI,CAAC9E,YAAL,CAAkBc,iFAAlB,CAAd,CAAL,EAA2E;AACvEqJ,cAAAA,gBAAgB,CAACJ,WAAjB,CAA6BjF,IAA7B;AACH;AACJ;AA9DY;;AAIjB,+DAAyC;AAAA;;AAAA,mCAEN;AAyDlC;AA/DgB;AAAA;AAAA;AAAA;AAAA;;AAiEjBrL,MAAAA,CAAC,CAACvD,GAAF;AACH;;AAED,QAAIgU,KAAK,KAAK,KAAd,EAAqB;;AACrB,QAAID,EAAE,KAAK,GAAX,EAAgB;AACZ,YAAM,IAAIre,KAAJ,CAAU,iDAAV,CAAN;AACH;AAEJ;AAGJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASmf,yBAAT,CAAmCE,SAAnC,EAA8C/Z,GAA9C,EAAmD2Z,GAAnD,EAAwDrY,IAAxD,EAA8D;AAE1D,MAAIgT,QAAQ,GAAGjD,mEAAoB,CAACrR,GAAD,EAAM+Z,SAAN,CAAnC;AAEA,MAAID,KAAK,GAAGxF,QAAQ,CAACE,sBAAT,EAAZ;;AACA,uCAAuB/X,MAAM,CAAC+H,OAAP,CAAesV,KAAK,CAAC9G,UAArB,CAAvB,wCAAyD;AAApD;AAAA,QAASY,IAAT;;AACD,QAAIA,IAAI,YAAYxF,WAApB,EAAiC;AAE7B4L,MAAAA,cAAc,CAACpG,IAAD,EAAO5T,GAAP,EAAYsB,IAAZ,CAAd;AACAsS,MAAAA,IAAI,CAAC/E,YAAL,CAAkBe,iFAAlB,EAAsD+J,GAAtD;AACH;;AAEDI,IAAAA,SAAS,CAACxF,WAAV,CAAsBX,IAAtB;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASoG,cAAT,CAAwBpG,IAAxB,EAA8B5T,GAA9B,EAAmCsB,IAAnC,EAAyC;AAErC,MAAIsS,IAAI,YAAYxF,WAApB,EAAiC;AAE7B,QAAIwF,IAAI,CAAChF,YAAL,CAAkBc,wEAAlB,CAAJ,EAAkD;AAC9C,UAAItT,KAAK,GAAGwX,IAAI,CAAC9E,YAAL,CAAkBY,wEAAlB,CAAZ;AACAkE,MAAAA,IAAI,CAAC/E,YAAL,CAAkBa,wEAAlB,EAA6CtT,KAAK,CAACqM,OAAN,CAAc,UAAUzI,GAAxB,EAA6B,UAAUsB,IAAvC,CAA7C;AACH;;AAED,QAAIsS,IAAI,CAAChF,YAAL,CAAkBa,2EAAlB,CAAJ,EAAqD;AACjD,UAAIrT,MAAK,GAAGwX,IAAI,CAAC9E,YAAL,CAAkBW,2EAAlB,CAAZ;;AACAmE,MAAAA,IAAI,CAAC/E,YAAL,CAAkBY,2EAAlB,EAAgDrT,MAAK,CAACqM,OAAN,CAAc,UAAUzI,GAAxB,EAA6B,UAAUsB,IAAvC,CAAhD;AACH;;AAED,yCAAwB7E,MAAM,CAAC+H,OAAP,CAAeoP,IAAI,CAACZ,UAApB,CAAxB,wCAAyD;AAApD;AAAA,UAASiH,KAAT;;AACDD,MAAAA,cAAc,CAACC,KAAD,EAAQja,GAAR,EAAasB,IAAb,CAAd;AACH;AACJ;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASmW,aAAT,CAAuBH,MAAvB,EAA+B;AAC3B,MAAMlZ,IAAI,GAAG,IAAb;AACA,MAAMY,OAAO,GAAGZ,IAAI,CAACY,OAAL,CAAauT,cAAb,EAAhB;AAEA,MAAIhK,CAAC,GAAG5J,sDAAK,CAAC2Y,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAG,MAAH,CAAP,CAAb;AACA4C,EAAAA,gBAAgB,CAACza,IAAjB,CAAsB,IAAtB,EAA4B,KAAKuO,OAAjC,EAA0CzF,CAA1C,EAA6CvJ,OAA7C;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASkb,gBAAT,CAA0BH,SAA1B,EAAqChe,KAArC,EAA4CiD,OAA5C,EAAqD;AAAA;;AACjD,MAAI,CAACpD,qDAAO,CAACG,KAAD,CAAZ,EAAqB;AACrBA,EAAAA,KAAK,GAAG4C,sDAAK,CAAC5C,KAAD,CAAb;AAEA,MAAI+c,GAAG,GAAG,IAAIlU,OAAJ,EAAV;;AAEA,SAAO7I,KAAK,CAACE,MAAN,GAAe,CAAtB,EAAyB;AACrB,QAAMnB,OAAO,GAAGiB,KAAK,CAAC2E,IAAN,CAAW,GAAX,CAAhB;AACA3E,IAAAA,KAAK,CAACiJ,GAAN,GAFqB,CAIrB;;AAJqB,gDAKK+U,SAAS,CAACrB,gBAAV,CAA2B,aAAahJ,wEAAb,GAAyC,UAAzC,GAAsD5U,OAAtD,GAAgE,OAAhE,GAA0E4U,wEAA1E,GAAsG,cAAjI,EAAiJlL,OAAjJ,EALL;AAAA;;AAAA;AAAA;AAAA;AAAA,YAKPwJ,OALO;;AAOjB,YAAI8K,GAAG,CAAC9P,GAAJ,CAAQgF,OAAR,CAAJ,EAAsB;AACtB8K,QAAAA,GAAG,CAACrM,GAAJ,CAAQuB,OAAR;AAEA,YAAMkL,UAAU,GAAGlL,OAAO,CAACc,YAAR,CAAqBY,wEAArB,CAAnB;AACA,YAAI2J,GAAG,GAAGH,UAAU,CAACxQ,IAAX,EAAV;AAEA,YAAItB,IAAI,GAAG,IAAID,+CAAJ,CAASkS,GAAT,CAAX;;AACA,cAAI,CAACnR,SAAL,CAAexI,OAAf,CAAuB,UAACjE,CAAD,EAAIoG,CAAJ,EAAU;AAC7BuF,UAAAA,IAAI,CAACI,WAAL,CAAiB3F,CAAjB,EAAoBpG,CAApB;AACH,SAFD;;AAIA,YAAIW,KAAK,GAAGgL,IAAI,CAACS,GAAL,CAAS7I,OAAT,CAAZ;;AAEA,YAAI5C,KAAK,YAAYgS,WAArB,EAAkC;AAC9B,iBAAOJ,OAAO,CAACmM,UAAf,EAA2B;AACvBnM,YAAAA,OAAO,CAAC6K,WAAR,CAAoB7K,OAAO,CAACmM,UAA5B;AACH;;AACDnM,UAAAA,OAAO,CAACoM,OAAR,CAAgBhe,KAAhB;AACH,SALD,MAKO;AACH4R,UAAAA,OAAO,CAAC0G,SAAR,GAAoBtY,KAApB;AACH;AA3BgB;;AAKrB,6DAAsL;AAAA;;AAAA,kCAE5J;AAsBzB;AA7BoB;AAAA;AAAA;AAAA;AAAA;AA8BxB;AAEJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsb,gBAAT,CAA0BJ,MAA1B,EAAkC;AAC9B,MAAMtY,OAAO,GAAG,KAAKA,OAAL,CAAauT,cAAb,EAAhB;AACA,MAAIhK,CAAC,GAAG5J,sDAAK,CAAC2Y,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAG,MAAH,CAAP,CAAb;AACA+C,EAAAA,mBAAmB,CAAC5a,IAApB,CAAyB,IAAzB,EAA+B,KAAKuO,OAApC,EAA6CzF,CAA7C,EAAgDvJ,OAAhD;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASqb,mBAAT,CAA6BN,SAA7B,EAAwChe,KAAxC,EAA+CiD,OAA/C,EAAwD;AAAA;;AAEpD,MAAMZ,IAAI,GAAG,IAAb;AAEA,MAAI,CAACxC,qDAAO,CAACG,KAAD,CAAZ,EAAqB;AACrBA,EAAAA,KAAK,GAAG4C,sDAAK,CAAC5C,KAAD,CAAb;AAEA,MAAI+c,GAAG,GAAG,IAAIlU,OAAJ,EAAV;;AAEA,SAAO7I,KAAK,CAACE,MAAN,GAAe,CAAtB,EAAyB;AACrB,QAAMnB,OAAO,GAAGiB,KAAK,CAAC2E,IAAN,CAAW,GAAX,CAAhB;AACA3E,IAAAA,KAAK,CAACiJ,GAAN;;AAFqB,gDAIK+U,SAAS,CAACrB,gBAAV,CAA2B,aAAajJ,2EAAb,GAA4C,UAA5C,GAAyD3U,OAAzD,GAAmE,IAA9F,EAAoG0J,OAApG,EAJL;AAAA;;AAAA;AAAA;AAAA;AAAA,YAIPwJ,OAJO;;AAMjB,YAAI8K,GAAG,CAAC9P,GAAJ,CAAQgF,OAAR,CAAJ,EAAsB;AACtB8K,QAAAA,GAAG,CAACrM,GAAJ,CAAQuB,OAAR;AAEA,YAAMkL,UAAU,GAAGlL,OAAO,CAACc,YAAR,CAAqBW,2EAArB,CAAnB;;AATiB;AAWZ;AAAA,cAAO0J,GAAP;;AACDA,UAAAA,GAAG,GAAGA,GAAG,CAACzQ,IAAJ,EAAN;AACA,cAAIzN,CAAC,GAAGke,GAAG,CAAC5L,OAAJ,CAAY,GAAZ,CAAR;AACA,cAAIjS,IAAI,GAAG6d,GAAG,CAACvP,MAAJ,CAAW,CAAX,EAAc3O,CAAd,EAAiByN,IAAjB,EAAX;AACA,cAAI2Q,GAAG,GAAGF,GAAG,CAACvP,MAAJ,CAAW3O,CAAX,EAAcyN,IAAd,EAAV;AAEA,cAAItB,IAAI,GAAG,IAAID,+CAAJ,CAASkS,GAAT,CAAX;AAEAjb,UAAAA,IAAI,CAAC8J,SAAL,CAAexI,OAAf,CAAuB,UAACjE,CAAD,EAAIoG,CAAJ,EAAU;AAC7BuF,YAAAA,IAAI,CAACI,WAAL,CAAiB3F,CAAjB,EAAoBpG,CAApB,EAAuBuS,OAAvB;AACH,WAFD;AAIA,cAAI5R,KAAK,GAAGgL,IAAI,CAACS,GAAL,CAAS7I,OAAT,CAAZ;;AAEA,cAAI5C,KAAK,KAAK3B,SAAd,EAAyB;AACrBuT,YAAAA,OAAO,CAACsM,eAAR,CAAwBhf,IAAxB;AAEH,WAHD,MAGO,IAAI0S,OAAO,CAACc,YAAR,CAAqBxT,IAArB,MAA+Bc,KAAnC,EAA0C;AAC7C4R,YAAAA,OAAO,CAACa,YAAR,CAAqBvT,IAArB,EAA2Bc,KAA3B;AACH;;AAEDme,UAAAA,iCAAiC,CAAC9a,IAAlC,CAAuC,MAAvC,EAA6CuO,OAA7C,EAAsD1S,IAAtD,EAA4Dc,KAA5D;AAhCa;;AAWjB,6CAAoBK,MAAM,CAAC+H,OAAP,CAAe0U,UAAU,CAACle,KAAX,CAAiB,GAAjB,CAAf,CAApB,wCAA2D;AAAA;AAwB1D;AAnCgB;;AAIrB,6DAAyI;AAAA;;AAAA,kCAE/G;AA8BzB;AApCoB;AAAA;AAAA;AAAA;AAAA;AAsCxB;AAEJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASuf,iCAAT,CAA2CvM,OAA3C,EAAoD1S,IAApD,EAA0Dc,KAA1D,EAAiE;AAC7D,MAAMgC,IAAI,GAAG,IAAb;;AAEA,MAAI4P,OAAO,YAAYwK,iBAAvB,EAA0C;AAGtC,YAAQxK,OAAO,CAACxQ,IAAhB;AACI,WAAK,iBAAL;AAEI,6CAA2Bf,MAAM,CAAC+H,OAAP,CAAewJ,OAAO,CAAC0E,OAAvB,CAA3B,wCAA4D;AAAvD;AAAA,cAAO3F,KAAP;AAAA,cAAcyN,GAAd;;AACD,cAAIpe,KAAK,CAACmR,OAAN,CAAciN,GAAG,CAACpe,KAAlB,MAA6B,CAAC,CAAlC,EAAqC;AACjCoe,YAAAA,GAAG,CAACC,QAAJ,GAAe,IAAf;AACH,WAFD,MAEO;AACHD,YAAAA,GAAG,CAACC,QAAJ,GAAe,KAAf;AACH;AACJ;;AAED;;AACJ,WAAK,YAAL;AACI;AAEA,6CAA2Bhe,MAAM,CAAC+H,OAAP,CAAewJ,OAAO,CAAC0E,OAAvB,CAA3B,wCAA4D;AAAvD;AAAA,cAAO3F,MAAP;AAAA,cAAcyN,IAAd;;AACD,cAAIA,IAAG,CAACpe,KAAJ,KAAcA,KAAlB,EAAyB;AACrB4R,YAAAA,OAAO,CAAC0M,aAAR,GAAwB3N,MAAxB;AACA;AACH;AACJ;;AAED;AAtBR;AA0BH,GA7BD,MA6BO,IAAIiB,OAAO,YAAYkK,gBAAvB,EAAyC;AAC5C,YAAQlK,OAAO,CAACxQ,IAAhB;AAEI,WAAK,OAAL;AACI,YAAIlC,IAAI,KAAK,SAAT,IAAsBc,KAAK,KAAK3B,SAApC,EAA+C;AAC3CuT,UAAAA,OAAO,CAACsK,OAAR,GAAkB,IAAlB;AACH,SAFD,MAEO;AACHtK,UAAAA,OAAO,CAACsK,OAAR,GAAkB,KAAlB;AACH;;AAED;;AAEJ,WAAK,UAAL;AACI,YAAIhd,IAAI,KAAK,SAAT,IAAsBc,KAAK,KAAK3B,SAApC,EAA+C;AAC3CuT,UAAAA,OAAO,CAACsK,OAAR,GAAkB,IAAlB;AACH,SAFD,MAEO;AACHtK,UAAAA,OAAO,CAACsK,OAAR,GAAkB,KAAlB;AACH;;AAED;;AACJ,WAAK,MAAL;AACA;AACI,YAAIhd,IAAI,KAAK,OAAb,EAAsB;AAClB0S,UAAAA,OAAO,CAAC5R,KAAR,GAAiBA,KAAK,KAAK3B,SAAV,GAAsB,EAAtB,GAA2B2B,KAA5C;AACH;;AAED;AAzBR;AA6BH,GA9BM,MA8BA,IAAI4R,OAAO,YAAYuK,mBAAvB,EAA4C;AAC/C,QAAIjd,IAAI,KAAK,OAAb,EAAsB;AAClB0S,MAAAA,OAAO,CAAC5R,KAAR,GAAiBA,KAAK,KAAK3B,SAAV,GAAsB,EAAtB,GAA2B2B,KAA5C;AACH;AACJ;AAEJ;;AAEDxB,gEAAiB,CAAC,aAAD,EAAgB2W,OAAhB,CAAjB;;;;;;;;;;;;;;;;;ACpvBa;AAEb;AACA;AACA;;;;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS6F,WAAT,GAAuB;AAAA;;AACnB,MAAItU,QAAQ,iBAAGZ,2DAAS,EAAZ,+CAAG,WAAc,UAAd,CAAf;;AACA,MAAI,QAAOY,QAAP,MAAoB,QAAxB,EAAkC;AAC9B,UAAM,IAAIpI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOoI,QAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS6X,SAAT,GAAqB;AAAA;;AACjB,MAAI9X,MAAM,kBAAGX,2DAAS,EAAZ,gDAAG,YAAc,QAAd,CAAb;;AACA,MAAI,QAAOW,MAAP,MAAkB,QAAtB,EAAgC;AAC5B,UAAM,IAAInI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOmI,MAAP;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS+X,6BAAT,CAAuCnG,IAAvC,EAA6C;AACzC/V,EAAAA,kEAAc,CAAC+V,IAAD,CAAd;AAEA,MAAM3R,QAAQ,GAAGsU,WAAW,EAA5B;AACA,MAAM9C,QAAQ,GAAGxR,QAAQ,CAACkS,aAAT,CAAuB,UAAvB,CAAjB;AACAV,EAAAA,QAAQ,CAACI,SAAT,GAAqBD,IAArB;AAEA,SAAOH,QAAQ,CAACD,OAAhB;AACH;;AAGDzZ,gEAAiB,CAAC,aAAD,EAAgB+f,SAAhB,EAA2BvD,WAA3B,EAAwCwD,6BAAxC,CAAjB;;;;;;;;;;;;;;;;;ACzM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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///../../../../packages/monster/source/constants.js","webpack:///../../../../packages/monster/source/namespace.js","webpack:///../../../../packages/monster/source/constraints/abstract.js","webpack:///../../../../packages/monster/source/types/base.js","webpack:///../../../../packages/monster/source/constraints/abstractoperator.js","webpack:///../../../../packages/monster/source/constraints/andoperator.js","webpack:///../../../../packages/monster/source/constraints/invalid.js","webpack:///../../../../packages/monster/source/constraints/isarray.js","webpack:///../../../../packages/monster/source/types/is.js","webpack:///../../../../packages/monster/source/constraints/isobject.js","webpack:///../../../../packages/monster/source/constraints/oroperator.js","webpack:///../../../../packages/monster/source/constraints/valid.js","webpack:///../../../../packages/monster/source/data/buildmap.js","webpack:///../../../../packages/monster/source/types/validate.js","webpack:///../../../../packages/monster/source/util/clone.js","webpack:///../../../../packages/monster/source/types/global.js","webpack:///../../../../packages/monster/source/data/pathfinder.js","webpack:///../../../../packages/monster/source/types/stack.js","webpack:///../../../../packages/monster/source/data/diff.js","webpack:///../../../../packages/monster/source/types/typeof.js","webpack:///../../../../packages/monster/source/data/extend.js","webpack:///../../../../packages/monster/source/data/pipe.js","webpack:///../../../../packages/monster/source/data/transformer.js","webpack:///../../../../packages/monster/source/types/id.js","webpack:///../../../../packages/monster/source/dom/assembler.js","webpack:///../../../../packages/monster/source/types/proxyobserver.js","webpack:///../../../../packages/monster/source/types/observer.js","webpack:///../../../../packages/monster/source/types/tokenlist.js","webpack:///../../../../packages/monster/source/types/uniquequeue.js","webpack:///../../../../packages/monster/source/types/queue.js","webpack:///../../../../packages/monster/source/types/observerlist.js","webpack:///../../../../packages/monster/source/dom/attributes.js","webpack:///../../../../packages/monster/source/dom/constants.js","webpack:///../../../../packages/monster/source/dom/customcontrol.js","webpack:///../../../../packages/monster/source/dom/customelement.js","webpack:///../../../../packages/monster/source/types/dataurl.js","webpack:///../../../../packages/monster/source/types/mediatype.js","webpack:///../../../../packages/monster/source/dom/template.js","webpack:///../../../../packages/monster/source/dom/theme.js","webpack:///../../../../packages/monster/source/dom/updater.js","webpack:///../../../../packages/monster/source/dom/util.js","webpack:///../../../../packages/monster/source/dom/events.js","webpack:///../../../../packages/monster/source/dom/locale.js","webpack:///../../../../packages/monster/source/i18n/locale.js","webpack:///../../../../packages/monster/source/i18n/provider.js","webpack:///../../../../packages/monster/source/types/basewithoptions.js","webpack:///../../../../packages/monster/source/i18n/translations.js","webpack:///../../../../packages/monster/source/i18n/providers/fetch.js","webpack:///../../../../packages/monster/source/text/formatter.js","webpack:///../../../../packages/monster/source/logging/handler.js","webpack:///../../../../packages/monster/source/logging/logentry.js","webpack:///../../../../packages/monster/source/logging/logger.js","webpack:///../../../../packages/monster/source/logging/handler/console.js","webpack:///../../../../packages/monster/source/math/random.js","webpack:///../../../../packages/monster/source/types/randomid.js","webpack:///../../../../packages/monster/source/types/version.js","webpack:///../../../../packages/monster/source/util/comparator.js","webpack:///../../../../packages/monster/source/util/freeze.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///../../../../packages/monster/source/monster.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"window\"] = factory();\n\telse\n\t\troot[\"window\"] = factory();\n})(self, function() {\nreturn ","'use strict';\n\nimport {Monster} from './namespace.js';\n/**\n * Property-Keys\n * @author schukai GmbH\n */\n\n/**\n * formerly known as PROPERTY_KEY_OPTIONS\n *\n * @memberOf Monster\n * @type {string}\n * @since 1.15.0\n */\nconst PROPERTY_KEY_INTERNALDATA = 'monsterInternalData';\n\n\nexport {\n    Monster,\n    PROPERTY_KEY_INTERNALDATA\n}","'use strict';\n\n/**\n * Main namespace for Monster.\n *\n * @namespace Monster\n * @author schukai GmbH\n */\n\n\n/**\n * namespace class objects form the basic framework of the namespace administration.\n *\n * all functions, classes and objects of the library hang within the namespace tree.\n *\n * via `obj instanceof Monster.Namespace` it is also easy to check whether it is an object or a namespace.\n *\n * @memberOf Monster\n * @copyright schukai GmbH\n * @since 1.0.0\n */\nclass Namespace {\n\n    /**\n     *\n     * @param namespace\n     * @param obj\n     */\n    constructor(namespace) {\n        if (namespace === undefined || typeof namespace !== 'string') {\n            throw new Error(\"namespace is not a string\")\n        }\n        this.namespace = namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getNamespace() {\n        return this.namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.getNamespace();\n    }\n}\n\n/**\n * @type {Namespace}\n * @global\n */\nexport const Monster = new Namespace(\"Monster\");\n\n/**\n * To expand monster, the `Monster.assignToNamespace()` method can be used.\n *\n * you must call the method in the monster namespace. this allows you to mount your own classes, objects and functions into the namespace.\n *\n * To avoid confusion and so that you do not accidentally overwrite existing functions, you should use the custom namespace `X`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/namespace.js';\n * function hello() {\n *            console.log('Hello World!');\n *        }\n * Monster.assignToNamespace(\"Monster.X\", hello)\n * Monster.X.hello(); // ↦ Hello World!\n * </script>\n *\n * ```\n *\n * @param {string} ns\n * @param {function} obj\n * @return {current}\n * @memberOf Monster\n * @throws {Error} no functions have been passed.\n * @throws {Error} the name of the class or function cannot be resolved.\n * @throws {Error} the first argument is not a function or class.\n * @throws {Error} exception\n * @since 1.0.0\n */\nfunction assignToNamespace(ns, ...obj) {\n    let current = namespaceFor(ns.split(\".\"));\n\n    if (obj.length === 0) {\n        throw new Error('no functions have been passed.');\n    }\n\n    for (let i = 0, l = obj.length; i < l; i++) {\n        current[objectName(obj[i])] = obj[i];\n    }\n\n    return current\n}\n\n/**\n *\n * @param {class|function} fn\n * @returns {string}\n * @private\n * @throws {Error} the name of the class or function cannot be resolved.\n * @throws {Error} the first argument is not a function or class.\n * @throws {Error} exception\n */\nfunction objectName(fn) {\n    try {\n\n        if (typeof fn !== 'function') {\n            throw  new Error(\"the first argument is not a function or class.\");\n        }\n\n        if (fn.hasOwnProperty('name')) {\n            return fn.name;\n        }\n\n        if (\"function\" === typeof fn.toString) {\n            let s = fn.toString();\n            let f = s.match(/^\\s*function\\s+([^\\s(]+)/);\n            if (Array.isArray(f) && typeof f[1] === 'string') {\n                return f[1];\n            }\n            let c = s.match(/^\\s*class\\s+([^\\s(]+)/);\n            if (Array.isArray(c) && typeof c[1] === 'string') {\n                return c[1];\n            }\n        }\n\n    } catch (e) {\n        throw new Error(\"exception \" + e);\n    }\n\n    throw new Error(\"the name of the class or function cannot be resolved.\");\n}\n\n/**\n *\n * @param parts\n * @returns {Namespace}\n * @private\n */\nfunction namespaceFor(parts) {\n    let space = Monster, ns = 'Monster';\n\n    for (let i = 0; i < parts.length; i++) {\n\n        if (\"Monster\" === parts[i]) {\n            continue;\n        }\n\n        ns += '.' + parts[i];\n\n        if (!space.hasOwnProperty(parts[i])) {\n            space[parts[i]] = new Namespace(ns);\n        }\n\n        space = space[parts[i]];\n    }\n\n    return space;\n}\n\n\nassignToNamespace('Monster', assignToNamespace, Namespace);\nexport {assignToNamespace}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\n\n\n/**\n * The abstract constraint defines the api for all constraints. mainly the method isValid() is defined.\n *\n * derived classes must implement the method isValid().\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AbstractConstraint extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n    }\n\n    /**\n     * this method must return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n}\n\nassignToNamespace('Monster.Constraints', AbstractConstraint);\nexport {Monster, AbstractConstraint}","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * This is the base class from which all monster classes are derived.\n *\n * You can call the method via the monster namespace `new Monster.Types.Base()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/base.js';\n * console.log(new Monster.Types.Base())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Base} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/base.js';\n * console.log(new Base())\n * </script>\n * ```\n *\n * The class was formerly called Object.\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Base extends Object {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return JSON.stringify(this);\n    };\n\n\n}\n\nassignToNamespace('Monster.Types', Base);\nexport {Monster, Base}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * Operators allow you to link constraints together. for example, you can check whether a value is an object or an array. each operator has two operands that are linked together.\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AbstractOperator extends AbstractConstraint {\n\n    /**\n     *\n     * @param {AbstractConstraint} operantA\n     * @param {AbstractConstraint} operantB\n     * @throws {TypeError} \"parameters must be from type AbstractConstraint\"\n     */\n    constructor(operantA, operantB) {\n        super();\n\n        if (!(operantA instanceof AbstractConstraint) || !(operantB instanceof AbstractConstraint)) {\n            throw new TypeError(\"parameters must be from type AbstractConstraint\")\n        }\n\n        this.operantA = operantA;\n        this.operantB = operantB;\n\n    }\n\n\n}\n\nassignToNamespace('Monster.Constraints', AbstractOperator);\nexport {Monster, AbstractOperator}","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n * new Monster.Constraint.AndOperator();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n * new AndOperator();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/andoperator.js';\n *\n * new AndOperator(\n * new Valid(), new Valid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * new AndOperator(\n * new Invalid(), new Valid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass AndOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.all([this.operantA.isValid(value), this.operantB.isValid(value)]);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', AndOperator);\nexport {Monster, AndOperator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * The invalid constraint allows an always invalid query to be performed. this constraint is mainly intended for testing.\n *\n * You can call the method via the monster namespace `new Monster.Constraint.Invalid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * new Monster.Constraint.Invalid();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * new Invalid();\n * </script>\n * ```\n *\n * @example\n *\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n *\n * new Invalid().isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass Invalid extends AbstractConstraint {\n\n    /**\n     * this method return a rejected promise\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', Invalid);\nexport {Monster, Invalid}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray} from \"../types/is.js\";\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n * console.log(new Monster.Constraint.IsArray())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n * console.log(new IsArray())\n * </script>\n * ```\n *\n * @example\n *\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isarray.js';\n *\n * new IsArray()\n * .isValid([])\n * .then(()=>console.log(true));\n * // ↦ true\n *\n * new IsArray()\n * .isValid(99)\n * .catch(e=>console.log(e));\n * // ↦ 99\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass IsArray extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isArray(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', IsArray);\nexport {Monster, IsArray}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * With this function you can check if a value is iterable\n *\n * You can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isIterable(null)) // ↦ false\n * console.log(Monster.Types.isIterable('hello')) // ↦ true\n * console.log(Monster.Types.isIterable([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isIterable(null))  // ↦ false\n * console.log(isIterable('hello'))  // ↦ true\n * console.log(isIterable([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isIterable(value) {\n    if (value === undefined) return false;\n    if (value === null) return false;\n    return typeof value?.[Symbol.iterator] === 'function';\n}\n\n\n/**\n * Checks whether the value passed is a primitive (string, number, boolean, NaN, undefined, null or symbol)\n *\n * You can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isPrimitive('2')) // ↦ false\n * console.log(Monster.Types.isPrimitive([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isPrimitive('2'))  // ↦ true\n * console.log(isPrimitive([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isPrimitive(value) {\n    var type;\n\n    if (value === undefined || value === null) {\n        return true;\n    }\n\n    type = typeof value;\n\n    if (type === 'string' || type === 'number' || type === 'boolean' || type === 'symbol') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Checks whether the value passed is a symbol\n *\n * You can call the method via the monster namespace `Monster.Types.isSymbol()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isSymbol('2')) // ↦ false\n * console.log(Monster.Types.isSymbol(Symbol('test')) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isSymbol} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isSymbol(Symbol('a')))  // ↦ true\n * console.log(isSymbol([])  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isSymbol(value) {\n    return ('symbol' === typeof value) ? true : false;\n}\n\n/**\n * Checks whether the value passed is a boolean\n *\n * You can call the method via the monster namespace `Monster.Types.isBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isBoolean('2')) // ↦ false\n * console.log(Monster.Types.isBoolean([])) // ↦ false\n * console.log(Monster.Types.isBoolean(true)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isBoolean('2'))  // ↦ false\n * console.log(isBoolean([]))  // ↦ false\n * console.log(isBoolean(2>4))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isBoolean(value) {\n\n    if (value === true || value === false) {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a string\n *\n * you can call the method via the monster namespace `Monster.Types.isString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isString('2')) // ↦ true\n * console.log(Monster.Types.isString([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isString('2'))  // ↦ true\n * console.log(isString([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isString(value) {\n    if (value === undefined || typeof value !== 'string') {\n        return false;\n    }\n    return true;\n}\n\n/**\n * checks whether the value passed is a object\n *\n * you can call the method via the monster namespace `Monster.Types.isObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isObject('2')) // ↦ false\n * console.log(Monster.Types.isObject([])) // ↦ false\n * console.log(Monster.Types.isObject({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isObject('2'))  // ↦ false\n * console.log(isObject([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isObject(value) {\n\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'object') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a object and instance of instance\n *\n * you can call the method via the monster namespace `Monster.Types.isInstance()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isInstance('2')) // ↦ false\n * console.log(Monster.Types.isInstance([])) // ↦ false\n * console.log(Monster.Types.isInstance({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isInstance} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isInstance('2'))  // ↦ false\n * console.log(isInstance([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @param {*} instance\n * @returns {boolean}\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isInstance(value, instance) {\n\n    if (!isObject(value)) return false;\n    if (!isFunction(instance)) return false;\n    if (!instance.hasOwnProperty('prototype')) return false;\n    return (value instanceof instance) ? true : false;\n\n}\n\n/**\n * checks whether the value passed is a array\n *\n * you can call the method via the monster namespace `Monster.Types.isArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isArray('2')) // ↦ false\n * console.log(Monster.Types.isArray([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isArray('2'))  // ↦ false\n * console.log(isArray([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isArray(value) {\n    if (Array.isArray(value)) {\n        return true;\n    }\n    return false;\n}\n\n/**\n * checks whether the value passed is a function\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isFunction(()=>{})) // ↦ true\n * console.log(Monster.Types.isFunction('2')) // ↦ false\n * console.log(Monster.Types.isFunction([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isFunction(()=>{})) // ↦ true\n * console.log(isFunction('2'))  // ↦ false\n * console.log(isFunction([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isFunction(value) {\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'function') {\n        return true;\n    }\n\n    return false;\n\n}\n\n/**\n * checks whether the value passed is an integer\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isInteger(()=>{})) // ↦ true\n * console.log(Monster.Types.isInteger('2')) // ↦ false\n * console.log(Monster.Types.isInteger(2)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n * console.log(isInteger(()=>{})) // ↦ true\n * console.log(isInteger('2'))  // ↦ false\n * console.log(isInteger(2))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nfunction isInteger(value) {\n    return Number.isInteger(value);\n}\n\n\nassignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger, isSymbol);\nexport {\n    Monster,\n    isPrimitive,\n    isBoolean,\n    isString,\n    isObject,\n    isInstance,\n    isArray,\n    isFunction,\n    isIterable,\n    isInteger,\n    isSymbol\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isObject} from \"../types/is.js\";\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n * console.log(new Monster.Constraint.IsObject())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n * console.log(new IsObject())\n * </script>\n * ```\n *\n * @example\n *\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/isobject.js';\n *\n * new IsObject()\n * .isValid({})\n * .then(()=>console.log(true));\n * // ↦ true\n *\n *\n * new IsObject()\n * .isValid(99)\n * .catch(e=>console.log(e));\n * // ↦ 99\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass IsObject extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isObject(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', IsObject);\nexport {Monster, IsObject}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraint/oroperator.js';\n * new Monster.Constraint.OrOperator();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraint/oroperator.js';\n * new OrOperator();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/invalid.js';\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/oroperator.js';\n *\n * new OrOperator(\n * new Valid(), new Invalid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * new OrOperator(\n * new Invalid(), new Invalid()).isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ false\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass OrOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            let a, b;\n\n            self.operantA.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                a = false;\n                /** b has already been evaluated and was not true */\n                if (b === false) {\n                    reject();\n                }\n            });\n\n            self.operantB.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                b = false;\n                /** b has already been evaluated and was not true */\n                if (a === false) {\n                    reject();\n                }\n            });\n        });\n    }\n\n\n}\n\nassignToNamespace('Monster.Constraints', OrOperator);\nexport {Monster, OrOperator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {AbstractConstraint} from \"./abstract.js\";\n\n/**\n * The valid constraint allows an always valid query to be performed. this constraint is mainly intended for testing.\n *\n * You can call the method via the monster namespace `new Monster.Constraint.Valid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * new Monster.Constraint.Valid();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n * new Valid();\n * </script>\n * ```\n *\n * @example\n *\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/constraints/valid.js';\n *\n * new Valid().isValid()\n * .then(()=>console.log(true))\n * .catch(()=>console.log(false));\n * // ↦ true\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster.Constraints\n */\nclass Valid extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.resolve(value);\n    }\n\n}\n\nassignToNamespace('Monster.Constraints', Valid);\nexport {Monster, Valid}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isFunction, isObject, isString} from \"../types/is.js\";\nimport {validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {DELIMITER, Pathfinder, WILDCARD} from \"./pathfinder.js\";\n\n/**\n * With the help of the function `buildMap()`, maps can be easily created from data objects.\n *\n * Either a simple definition `a.b.c` or a template `${a.b.c}` can be specified as the path.\n * Key and value can be either a definition or a template. The key does not have to be defined.\n *\n * You can call the method via the monster namespace `Monster.Data.buildMap()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * console.log(Monster.Data.buildMap())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * console.log(buildMap())\n * </script>\n * ```\n * \n * The templates determine the appearance of the keys and the value of the map. Either a single value `id` can be taken or a composite key `${id} ${name}` can be used.\n * \n * If you want to access values of the parent data set, you have to use the `^` character `${id} ${^.name}`.\n *\n * @example\n *\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n * // a typical data structure as reported by an api\n *\n * let map;\n * let obj = {\n *     \"data\": [\n *         {\n *             \"id\": 10,\n *             \"name\": \"Cassandra\",\n *             \"address\": {\n *                 \"street\": \"493-4105 Vulputate Street\",\n *                 \"city\": \"Saumur\",\n *                 \"zip\": \"52628\"\n *             }\n *         },\n *         {\n *             \"id\": 20,\n *             \"name\": \"Holly\",\n *             \"address\": {\n *                 \"street\": \"1762 Eget Rd.\",\n *                 \"city\": \"Schwalbach\",\n *                 \"zip\": \"952340\"\n *             }\n *         },\n *         {\n *             \"id\": 30,\n *             \"name\": \"Guy\",\n *             \"address\": {\n *                 \"street\": \"957-388 Sollicitudin Avenue\",\n *                 \"city\": \"Panchià\",\n *                 \"zip\": \"420729\"\n *             }\n *         }\n *     ]\n * };\n *\n * // The function is passed this data structure and with the help of the selector `'data.*'` the data to be considered are selected.\n * // The key is given by a simple definition `'id'` and the value is given by a template `'${name} (${address.zip} ${address.city})'`.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id');\n * console.log(map);\n *\n * // ↦ Map(3) {\n * //  '10' => 'Cassandra (52628 Saumur)',\n * //  '20' => 'Holly (952340 Schwalbach)',\n * //  '30' => 'Guy (420729 Panchià)'\n * // }\n *\n * // If no key is specified, the key from the selection, here the array index, is taken.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})');\n * console.log(map);\n *\n * // ↦ Map(3) {\n * //  '0' => 'Cassandra (52628 Saumur)',\n * //  '1' => 'Holly (952340 Schwalbach)',\n * //  '2' => 'Guy (420729 Panchià)'\n * // }\n *\n * // a filter (function(value, key) {}) can be specified to accept only defined entries.\n * map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id', function (value, key) {\n *                return (value['id'] >= 20) ? true : false\n *            });\n * console.log(map);\n *\n * // ↦ Map(2) {\n * //  20 => 'Holly (952340 Schwalbach)',\n * //  30 => 'Guy (420729 Panchià)'\n * // }\n *\n * @param {*} subject\n * @param {string|Monster.Data~exampleSelectorCallback} selector\n * @param {string} [valueTemplate]\n * @param {string} [keyTemplate]\n * @param {Monster.Data~exampleFilterCallback} [filter]\n * @return {*}\n * @memberOf Monster.Data\n * @throws {TypeError} value is neither a string nor a function\n * @throws {TypeError} the selector callback must return a map\n */\nfunction buildMap(subject, selector, valueTemplate, keyTemplate, filter) {\n\n    const result = new Map\n\n    let map;\n    if (isFunction(selector)) {\n        map = selector(subject)\n        if (!(map instanceof Map)) {\n            throw new TypeError('the selector callback must return a map');\n        }\n    } else if (isString(selector)) {\n        map = new Map;\n        buildFlatMap.call(map, subject, selector);\n    } else {\n        throw new TypeError('value is neither a string nor a function')\n    }\n\n    if (!(map instanceof Map)) {\n        return result;\n    }\n\n\n    map.forEach((v, k, m) => {\n        if (isFunction(filter)) {\n            if (filter.call(m, v, k) !== true) return;\n        }\n\n        k = build(v, keyTemplate, k);\n        v = build(v, valueTemplate);\n\n        result.set(k, v);\n    });\n\n    return result;\n}\n\n/**\n * @private\n * @param subject\n * @param selector\n * @param key\n * @param parentMap\n * @return {*}\n */\nfunction buildFlatMap(subject, selector, key, parentMap) {\n\n    const result = this;\n    const currentMap = new Map;\n\n    const resultLength = result.size;\n\n    if (key === undefined) key = [];\n\n    let parts = selector.split(DELIMITER);\n    let current = \"\", currentPath = [];\n    do {\n\n        current = parts.shift();\n        currentPath.push(current);\n\n        if (current === WILDCARD) {\n\n            let finder = new Pathfinder(subject);\n            let map\n            try {\n                map = finder.getVia(currentPath.join(DELIMITER));\n            } catch (e) {\n                let a = e;\n                map = new Map();\n            }\n\n\n            for (const [k, o] of map) {\n\n                let copyKey = clone(key);\n\n                currentPath.map((a) => {\n                    copyKey.push((a === WILDCARD) ? k : a)\n                })\n\n                let kk = copyKey.join(DELIMITER);\n                let sub = buildFlatMap.call(result, o, parts.join(DELIMITER), copyKey, o);\n\n                if (isObject(sub)) {\n                    sub['^'] = parentMap;\n                }\n\n                currentMap.set(kk, sub);\n            }\n\n        }\n\n\n    } while (parts.length > 0);\n\n    // no set in child run\n    if (resultLength === result.size) {\n        for (const [k, o] of currentMap) {\n            result.set(k, o);\n        }\n    }\n\n    return subject;\n\n}\n\n\n/**\n * With the help of this filter callback, values can be filtered out. Only if the filter function returns true, the value is taken for the map.\n *\n * @callback Monster.Data~exampleFilterCallback\n * @param {*} value Value\n * @param {string} key  Key\n * @memberOf Monster.Data\n * @see {@link Monster.Data.buildMap}\n */\n\n/**\n * Alternatively to a string selector a callback can be specified. this must return a map.\n *\n * @example\n * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/buildmap.js';\n *\n * let obj = {\n *                \"data\": [\n *                    {\n *                        \"id\": 10,\n *                        \"name\": \"Cassandra\",\n *                        \"enrichment\": {\n *                            variants: [\n *                                {\n *                                    sku: 1, label: \"XXS\", price: [\n *                                        {vk: '12.12 €'},\n *                                        {vk: '12.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 2, label: \"XS\", price: [\n *                                        {vk: '22.12 €'},\n *                                        {vk: '22.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 3, label: \"S\", price: [\n *                                        {vk: '32.12 €'},\n *                                        {vk: '32.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 4, label: \"L\", price: [\n *                                        {vk: '42.12 €'},\n *                                        {vk: '42.12 €'}\n *                                    ]\n *                                }\n *                            ]\n *\n *                        }\n *                    },\n *                    {\n *                        \"id\": 20,\n *                        \"name\": \"Yessey!\",\n *                        \"enrichment\": {\n *                            variants: [\n *                                {\n *                                    sku: 1, label: \"XXS\", price: [\n *                                        {vk: '12.12 €'},\n *                                        {vk: '12.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 2, label: \"XS\", price: [\n *                                        {vk: '22.12 €'},\n *                                        {vk: '22.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 3, label: \"S\", price: [\n *                                        {vk: '32.12 €'},\n *                                        {vk: '32.12 €'}\n *                                    ]\n *                                },\n *                                {\n *                                    sku: 4, label: \"L\", price: [\n *                                        {vk: '42.12 €'},\n *                                        {vk: '42.12 €'}\n *                                    ]\n *                                }\n *                            ]\n *\n *                        }\n *                    }\n *                ]\n *            };\n *\n * let callback = function (subject) {\n *                let m = new Map;\n *\n *                for (const [i, b] of Object.entries(subject.data)) {\n *\n *                    let key1 = i;\n *\n *                    for (const [j, c] of Object.entries(b.enrichment.variants)) {\n *                        let key2 = j;\n *\n *                        for (const [k, d] of Object.entries(c.price)) {\n *\n *                            let key3 = k;\n *\n *                            d.name = b.name;\n *                            d.label = c.label;\n *                            d.id = [key1, key2, key3].join('.');\n *\n *                            m.set(d.id, d);\n *                        }\n *\n *                    }\n *                }\n *                return m;\n *            }\n *\n * let map = buildMap(obj, callback, '${name} ${vk}', '${id}')\n *\n * // ↦ Map(3) {\n * //  \"0.0.0\":\"Cassandra 12.12 €\",\n * //  \"0.0.1\":\"Cassandra 12.12 €\",\n * //  \"0.1.0\":\"Cassandra 22.12 €\",\n * //  \"0.1.1\":\"Cassandra 22.12 €\",\n * //  \"0.2.0\":\"Cassandra 32.12 €\",\n * //  \"0.2.1\":\"Cassandra 32.12 €\",\n * //  \"0.3.0\":\"Cassandra 42.12 €\",\n * //  \"0.3.1\":\"Cassandra 42.12 €\",\n * //  \"1.0.0\":\"Yessey! 12.12 €\",\n * //  \"1.0.1\":\"Yessey! 12.12 €\",\n * //  \"1.1.0\":\"Yessey! 22.12 €\",\n * //  \"1.1.1\":\"Yessey! 22.12 €\",\n * //  \"1.2.0\":\"Yessey! 32.12 €\",\n * //  \"1.2.1\":\"Yessey! 32.12 €\",\n * //  \"1.3.0\":\"Yessey! 42.12 €\",\n * //  \"1.3.1\":\"Yessey! 42.12 €\"\n * // }\n *\n * @callback Monster.Data~exampleSelectorCallback\n * @param {*} subject subject\n * @return Map\n * @since 1.17.0\n * @memberOf Monster.Data\n * @see {@link Monster.Data.buildMap}\n */\n\n/**\n * @private\n * @param {*} subject\n * @param {string|undefined} definition\n * @param {*} defaultValue\n * @return {*}\n */\nfunction build(subject, definition, defaultValue) {\n    if (definition === undefined) return defaultValue ? defaultValue : subject;\n    validateString(definition);\n\n    const regexp = /(?<placeholder>\\${(?<path>[a-z\\^A-Z.\\-_0-9]*)})/gm\n    const array = [...definition.matchAll(regexp)];\n\n    let finder = new Pathfinder(subject);\n\n    if (array.length === 0) {\n        return finder.getVia(definition);\n    }\n\n    array.forEach((a) => {\n        let groups = a?.['groups'];\n        let placeholder = groups?.['placeholder']\n        if (placeholder === undefined) return;\n\n        let path = groups?.['path']\n\n        let v = finder.getVia(path);\n        if (v === undefined) v = defaultValue;\n\n        definition = definition.replaceAll(placeholder, v);\n\n\n    })\n\n    return definition;\n\n}\n\n\nassignToNamespace('Monster.Data', buildMap);\nexport {Monster, buildMap}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {\n    isArray,\n    isBoolean,\n    isFunction,\n    isInstance,\n    isInteger,\n    isIterable,\n    isObject,\n    isPrimitive,\n    isString,\n    isSymbol\n} from './is.js';\n\n/**\n * This method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError\n * console.log(Monster.Types.validateIterable([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateIterable('2'))  // ↦ TypeError\n * console.log(validateIterable([]))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster.Types.isPrimitive}\n * @see {@link Monster.Types#isPrimitive}\n */\nfunction validateIterable(value) {\n    if (!isIterable(value)) {\n        throw new TypeError('value is not iterable')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validatePrimitive('2')) // ↦ value\n * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validatePrimitive('2'))  // ↦ value\n * console.log(validatePrimitive([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster.Types.isPrimitive}\n * @see {@link Monster.Types#isPrimitive}\n */\nfunction validatePrimitive(value) {\n    if (!isPrimitive(value)) {\n        throw new TypeError('value is not a primitive')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the boolean type. this function is identical to isBoolean() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateBoolean(true)) // ↦ value\n * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError\n * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateBoolean(false))  // ↦ value\n * console.log(validateBoolean('2'))  // ↦ TypeError\n * console.log(validateBoolean([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n\n * @throws {TypeError}  value is not primitive\n */\nfunction validateBoolean(value) {\n    if (!isBoolean(value)) {\n        throw new TypeError('value is not a boolean')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the string type. this function is identical to isString() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateString('2')) // ↦ value\n * console.log(Monster.Types.validateString([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateString('2'))  // ↦ value\n * console.log(validateString([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a string\n */\nfunction validateString(value) {\n    if (!isString(value)) {\n        throw new TypeError('value is not a string')\n    }\n    return value\n}\n\n\n/**\n * This method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateObject({})) // ↦ value\n * console.log(Monster.Types.validateObject('2')) // ↦ TypeError\n * console.log(Monster.Types.validateObject([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateObject({}))  // ↦ value\n * console.log(validateObject('2'))  // ↦ TypeError\n * console.log(validateObject([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a object\n */\nfunction validateObject(value) {\n    if (!isObject(value)) {\n        throw new TypeError('value is not a object')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the object instance.\n *\n * You can call the method via the monster namespace `Monster.Types.validateInstance()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateInstance({}, Object)) // ↦ value\n * console.log(Monster.Types.validateInstance('2', Object)) // ↦ TypeError\n * console.log(Monster.Types.validateInstance([], Object)) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateInstance} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateInstance({}, Object)) // ↦ value\n * console.log(validateInstance('2', Object)) // ↦ TypeError\n * console.log(validateInstance([], Object)) // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an instance of\n */\nfunction validateInstance(value, instance) {\n    if (!isInstance(value, instance)) {\n        let n = \"\";\n        if (isObject(instance) || isFunction(instance)) {\n            n = instance?.['name']\n        }\n\n        if (n) {\n            n = \" \" + n;\n        }\n\n        throw new TypeError('value is not an instance of' + n)\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the array type. this function is identical to isArray() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateArray('2')) // ↦ TypeError\n * console.log(Monster.Types.validateArray([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateArray('2'))  // ↦ TypeError\n * console.log(validateArray([]))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an array\n */\nfunction validateArray(value) {\n    if (!isArray(value)) {\n        throw new TypeError('value is not an array')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the symbol type. this function is identical to isSymbol() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateSymbol()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateSymbol('2')) // ↦ TypeError\n * console.log(Monster.Types.validateSymbol([])) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateSymbol} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateSymbol('2'))  // ↦ TypeError\n * console.log(validateSymbol())  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an symbol\n */\nfunction validateSymbol(value) {\n    if (!isSymbol(value)) {\n        throw new TypeError('value is not an symbol')\n    }\n    return value\n}\n\n/**\n * This method checks if the type matches the function type. this function is identical to isFunction() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateFunction(()=>{})) // ↦ value\n * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError\n * console.log(Monster.Types.validateFunction([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateFunction(()=>{})) // ↦ value\n * console.log(validateFunction('2'))  // ↦ TypeError\n * console.log(validateFunction([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a function\n */\nfunction validateFunction(value) {\n    if (!isFunction(value)) {\n        throw new TypeError('value is not a function')\n    }\n    return value\n}\n\n/**\n * This method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.\n *\n * You can call the method via the monster namespace `Monster.Types.validateInteger()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError\n * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError\n * console.log(Monster.Types.validateInteger(2)) // ↦ value\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/validate.js';\n * console.log(validateInteger(true)) // ↦ TypeError\n * console.log(validateInteger('2'))  // ↦ TypeError\n * console.log(validateInteger(2))  // ↦ value\n * </script>\n * ```\n *\n * @param {*} value\n * @return {*}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not an integer\n */\nfunction validateInteger(value) {\n    if (!isInteger(value)) {\n        throw new TypeError('value is not an integer')\n    }\n    return value\n}\n\nassignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);\nexport {\n    Monster,\n    validatePrimitive,\n    validateBoolean,\n    validateString,\n    validateObject,\n    validateInstance,\n    validateArray,\n    validateFunction,\n    validateIterable,\n    validateInteger,\n    validateSymbol\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from '../types/global.js';\nimport {isArray, isFunction, isObject, isPrimitive} from '../types/is.js';\n\n\n/**\n * With this function, objects can be cloned.\n * The entire object tree is run through.\n *\n * Proxy, Element, HTMLDocument and DocumentFragment instances are not cloned.\n * Global objects such as windows are also not cloned,\n *\n * If an object has a method `getClone()`, this method is used to create the clone.\n *\n * You can call the method via the monster namespace `Monster.Util.clone()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/clone.js';\n * console.log(Monster.Util.clone({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/clone.js';\n * console.log(clone({}))\n * </script>\n * ```\n *\n * @param {*} obj object to be cloned\n * @returns {*}\n *\n * @since 1.0.0\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @throws {Error} unable to clone obj! its type isn't supported.\n */\nfunction clone(obj) {\n\n    // typeof null results in 'object'.  https://2ality.com/2013/10/typeof-null.html\n    if (null === obj) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isPrimitive(obj)) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isFunction(obj)) {\n        return obj;\n    }\n\n    // Handle Array\n    if (isArray(obj)) {\n        let copy = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            copy[i] = clone(obj[i]);\n        }\n\n        return copy;\n    }\n\n    if (isObject(obj)) {\n\n\n        // Handle Date\n        if (obj instanceof Date) {\n            let copy = new Date();\n            copy.setTime(obj.getTime());\n            return copy;\n        }\n\n        /** Do not clone DOM nodes */\n        if (typeof Element !== 'undefined' && obj instanceof Element) return obj;\n        if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;\n        if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;\n\n        /** Do not clone global objects */\n        if (obj === getGlobal()) return obj;\n        if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;\n        if (typeof window !== 'undefined' && obj === window) return obj;\n        if (typeof document !== 'undefined' && obj === document) return obj;\n        if (typeof navigator !== 'undefined' && obj === navigator) return obj;\n        if (typeof JSON !== 'undefined' && obj === JSON) return obj;\n\n        // Handle Proxy-Object\n        try {\n            // try/catch because possible: TypeError: Function has non-object prototype 'undefined' in instanceof check\n            if (obj instanceof Proxy) {\n                return obj;\n            }\n        } catch (e) {\n        }\n\n        return cloneObject(obj)\n\n    }\n\n    throw new Error(\"unable to clone obj! its type isn't supported.\");\n}\n\n/**\n *\n * @param {object} obj\n * @returns {object}\n * @private\n */\nfunction cloneObject(obj) {\n    var copy;\n\n    /** Object has clone method */\n    if (typeof obj.hasOwnProperty('getClone') && obj.getClone === 'function') {\n        return obj.getClone();\n    }\n\n    copy = {};\n    if (typeof obj.constructor === 'function' &&\n        typeof obj.constructor.call === 'function') {\n        copy = new obj.constructor();\n    }\n\n    for (let key in obj) {\n\n        if (!obj.hasOwnProperty(key)) {\n            continue;\n        }\n\n        if (Monster.Types.isPrimitive(obj[key])) {\n            copy[key] = obj[key];\n            continue;\n        }\n\n        copy[key] = clone(obj[key]);\n    }\n\n    return copy;\n}\n\nassignToNamespace('Monster.Util', clone);\nexport {Monster, clone}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {validateFunction, validateObject, validateString} from \"./validate.js\";\n\n/**\n * @type {objec}\n * @private\n */\nlet globalReference;\n\n/**\n * @private\n * @throws {Error} unsupported environment.\n */\n(function () {\n\n    if (typeof globalThis === 'object') {\n        globalReference = globalThis;\n        return;\n    }\n\n    if (typeof self !== 'undefined') {\n        globalReference = self;\n        return;\n    } else if (typeof window !== 'undefined') {\n        globalReference = window;\n        return;\n    }\n\n    Object.defineProperty(Object.prototype, '__monster__', {\n        get: function () {\n            return this;\n        },\n        configurable: true\n    });\n\n    if (typeof __monster__ === 'object') {\n        __monster__.globalThis = __monster__;\n        delete Object.prototype.__monster__;\n\n        globalReference = globalThis;\n        return;\n    }\n\n    try {\n        globalReference = Function('return this')();\n    } catch (e) {\n\n    }\n\n    throw new Error(\"unsupported environment.\")\n\n\n}());\n\n/**\n * Return globalThis\n *\n * If globalThis is not available, it will be polyfilled\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @returns {objec} globalThis\n */\nfunction getGlobal() {\n    return globalReference;\n}\n\n/**\n * Return global object or throw Error\n *\n * You can call the method via the monster namespace `Monster.Types.getGlobalObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(Monster.Types.getGlobalObject('document')) // ↦ { }\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getGlobalObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(getGlobalObject('document')) // ↦ { }\n * </script>\n * ```\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @param {string} name\n * @returns {objec}\n * @throws {Error} the object is not defined\n * @throws {TypeError} value is not a object\n * @throws {TypeError} value is not a string\n */\nfunction getGlobalObject(name) {\n    validateString(name);\n    let o = globalReference?.[name];\n    if (typeof o === 'undefined') throw new Error('the object ' + name + ' is not defined');\n    validateObject(o);\n    return o;\n}\n\n/**\n * Return global function or throw Error\n *\n * You can call the method via the monster namespace `Monster.Types.getGlobalFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(Monster.Types.getGlobalFunction('parseInt')) // ↦ f parseInt() { }\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getGlobalFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/global.js';\n * console.log(getGlobalFunction('parseInt')) // ↦ f parseInt() { }\n * </script>\n * ```\n *\n * @since 1.6.0\n * @memberOf Monster.Types\n * @param {string} name\n * @returns {objec}\n * @throws {TypeError} value is not a function\n * @throws {Error} the function is not defined\n * @throws {TypeError} value is not a string\n */\nfunction getGlobalFunction(name) {\n    validateString(name);\n    let f = globalReference?.[name];\n    if (typeof f === 'undefined') throw new Error('the function ' + name + ' is not defined');\n    validateFunction(f);\n    return f;\n}\n\n\nassignToNamespace('Monster.Types', getGlobal, getGlobalObject, getGlobalFunction);\nexport {Monster, getGlobal, getGlobalObject, getGlobalFunction}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {isArray, isInteger, isObject, isPrimitive} from '../types/is.js';\nimport {Stack} from \"../types/stack.js\";\nimport {validateInteger, validateString} from '../types/validate.js';\n\n/**\n * path separator\n *\n * @private\n * @type {string}\n */\nexport const DELIMITER = '.';\n/**\n * @private\n * @type {string}\n */\nexport const WILDCARD = '*';\n\n/**\n * You can call the method via the monster namespace `new Monster.Data.Pathfinder()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n * console.log(new Monster.Data.Pathfinder())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n * console.log(new Pathfinder())\n * </script>\n * ```\n *\n * With the help of the pathfinder, values can be read and written from an object construct.\n *\n * ```\n * new Pathfinder({\n * a: {\n *     b: {\n *         f: [\n *             {\n *                 g: false,\n *             }\n *         ],\n *     }\n * }\n * }).getVia(\"a.b.f.0.g\"); // ↦ false\n * ```\n *\n * if a value is not present or has the wrong type, a corresponding exception is thrown.\n *\n * ```\n * new Pathfinder({}).getVia(\"a.b.f.0.g\"); // ↦ Error\n * ```\n *\n * The `Pathfinder.exists()` method can be used to check whether access to the path is possible.\n *\n * ```\n * new Pathfinder({}).exists(\"a.b.f.0.g\"); // ↦ false\n * ```\n *\n * pathfinder can also be used to build object structures. to do this, the `Pathfinder.setVia()` method must be used.\n *\n * ```\n * obj = {};\n * new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}\n * ```\n *\n * @example\n *\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n *\n * let value = new Pathfinder({\n * a: {\n *     b: {\n *         f: [\n *             {\n *                 g: false,\n *             }\n *         ],\n *     }\n * }\n * }).getVia(\"a.b.f.0.g\");\n *\n *  console.log(value);\n *  // ↦ false\n *\n * try {\n *   new Pathfinder({}).getVia(\"a.b.f.0.g\");  \n * } catch(e) {\n *   console.log(e.toString());\n *   // ↦ Error: the journey is not at its end (b.f.0.g)\n * }\n *\n * @example\n *\n * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pathfinder.js';\n *\n * let p = new Pathfinder({\n *                a: {\n *                    x: [\n *                        {c: 1}, {c: 2}\n *                    ],\n *                    y: true\n *                },\n *                b: {\n *                    x: [\n *                        {c: 1, d: false}, {c: 2}\n *                    ],\n *                    y: true\n *                },\n *            });\n *\n * let r = p.getVia(\"*.x.*.c\");\n * console.log(r);\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Pathfinder extends Base {\n\n    /**\n     * @param {array|object|Map|Set} value\n     * @since 1.4.0\n     * @throws  {Error} the parameter must not be a simple type\n     **/\n    constructor(object) {\n        super();\n\n        if (isPrimitive(object)) {\n            throw new Error('the parameter must not be a simple type');\n        }\n\n        this.object = object;\n        this.wildCard = WILDCARD;\n    }\n\n    /**\n     * set wildcard\n     *\n     * @param {string} wildcard\n     * @return {Pathfinder}\n     * @since 1.7.0\n     */\n    setWildCard(wildcard) {\n        validateString(wildcard);\n        this.wildCard = wildcard;\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @since 1.4.0\n     * @returns {*}\n     * @throws {TypeError} unsupported type\n     * @throws {Error} the journey is not at its end\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    getVia(path) {\n        return getValueViaPath.call(this, this.object, validateString(path));\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @param {*} value\n     * @returns {Pathfinder}\n     * @since 1.4.0\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    setVia(path, value) {\n        validateString(path);\n        setValueViaPath.call(this, this.object, path, value);\n        return this;\n    }\n\n    /**\n     * Delete Via Path\n     *\n     * @param {string} path\n     * @returns {Pathfinder}\n     * @since 1.6.0\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @throws {Error} unsupported action for this data type\n     */\n    deleteVia(path) {\n        validateString(path);\n        deleteValueViaPath.call(this, this.object, path);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} path\n     * @return {bool}\n     * @throws {TypeError} unsupported type\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not an integer\n     * @since 1.4.0\n     */\n    exists(path) {\n        validateString(path);\n        try {\n            getValueViaPath.call(this, this.object, path, true);\n            return true;\n        } catch (e) {\n\n        }\n\n        return false;\n    }\n\n}\n\nassignToNamespace('Monster.Data', Pathfinder);\nexport {Monster, Pathfinder}\n\n/**\n *\n * @param {*} subject\n * @param {string} path\n * @param {string} check\n * @return {Map}\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction iterate(subject, path, check) {\n\n    const result = new Map;\n\n    if (isObject(subject) || isArray(subject)) {\n        for (const [key, value] of Object.entries(subject)) {\n            result.set(key, getValueViaPath.call(this, value, path, check))\n        }\n    } else {\n        let key = path.split(DELIMITER).shift();\n        result.set(key, getValueViaPath.call(this, subject, path, check));\n    }\n\n    return result;\n\n\n}\n\n/**\n *\n * @param {*} subject\n * @param [string} path\n * @param [boolean} check \n * @returns {*}\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction getValueViaPath(subject, path, check) {\n\n    if (path === \"\") {\n        return subject;\n    }\n\n    let parts = path.split(DELIMITER)\n    let current = parts.shift();\n\n    if (current === this.wildCard) {\n        return iterate.call(this, subject, parts.join(DELIMITER), check);\n    }\n\n    if (isObject(subject) || isArray(subject)) {\n\n        let anchor;\n        if (subject instanceof Map || subject instanceof WeakMap) {\n            anchor = subject.get(current);\n\n        } else if (subject instanceof Set || subject instanceof WeakSet) {\n            current = parseInt(current);\n            validateInteger(current)\n            anchor = [...subject]?.[current];\n\n        } else if (typeof WeakRef === 'function' && subject instanceof WeakRef) {\n            throw Error('unsupported action for this data type');\n\n        } else if (isArray(subject)) {\n            current = parseInt(current);\n            validateInteger(current)\n            anchor = subject?.[current];\n        } else {\n            anchor = subject?.[current];\n        }\n\n        if (isObject(anchor) || isArray(anchor)) {\n            return getValueViaPath.call(this, anchor, parts.join(DELIMITER), check)\n        }\n\n        if (parts.length > 0) {\n            throw Error(\"the journey is not at its end (\" + parts.join(DELIMITER) + \")\");\n        }\n\n        if (check === true && !subject.hasOwnProperty(current)) {\n            throw Error('unknown value');\n        }\n\n        return anchor;\n\n    }\n\n    throw TypeError(\"unsupported type \" + typeof subject)\n\n}\n\n/**\n *\n * @param object\n * @param path\n * @param value\n * @returns {void}\n * @throws {TypeError} unsupported type\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @private\n */\nfunction setValueViaPath(object, path, value) {\n\n    validateString(path);\n\n    let parts = path.split(DELIMITER)\n    let last = parts.pop();\n    let subpath = parts.join(DELIMITER);\n\n    let stack = new Stack()\n    let current = subpath;\n    while (true) {\n\n        try {\n            getValueViaPath.call(this, object, current, true)\n            break;\n        } catch (e) {\n\n        }\n\n        stack.push(current);\n        parts.pop();\n        current = parts.join(DELIMITER);\n\n        if (current === \"\") break;\n    }\n\n    while (!stack.isEmpty()) {\n        current = stack.pop();\n        let obj = {};\n\n        if (!stack.isEmpty()) {\n            let n = stack.peek().split(DELIMITER).pop();\n            if (isInteger(parseInt(n))) {\n                obj = [];\n            }\n\n        }\n\n        setValueViaPath.call(this, object, current, obj);\n    }\n\n    let anchor = getValueViaPath.call(this, object, subpath);\n\n    if (!isObject(object) && !isArray(object)) {\n        throw TypeError(\"unsupported type: \" + typeof object);\n    }\n\n    if (anchor instanceof Map || anchor instanceof WeakMap) {\n        anchor.set(last, value);\n    } else if (anchor instanceof Set || anchor instanceof WeakSet) {\n        anchor.append(value)\n\n    } else if (typeof WeakRef === 'function' && anchor instanceof WeakRef) {\n        throw Error('unsupported action for this data type');\n\n    } else if (isArray(anchor)) {\n        last = parseInt(last);\n        validateInteger(last)\n        assignProperty(anchor, last, value);\n    } else {\n        assignProperty(anchor, last, value);\n    }\n\n\n}\n\n/**\n * @private\n * @param {object} object\n * @param {string} key\n * @param {*} value\n */\nfunction assignProperty(object, key, value) {\n\n    if (!object.hasOwnProperty(key)) {\n        object[key] = value;\n        return;\n    }\n\n    if (value === undefined) {\n        delete object[key];\n    }\n\n    object[key] = value;\n\n}\n\n/**\n *\n * @param object\n * @param path\n * @returns {void}\n * @throws {TypeError} unsupported type\n * @throws {TypeError} unsupported type\n * @throws {Error} the journey is not at its end\n * @throws {Error} unsupported action for this data type\n * @since 1.6.0\n * @private\n */\nfunction deleteValueViaPath(object, path) {\n\n    const parts = path.split(DELIMITER)\n    let last = parts.pop();\n    const subpath = parts.join(DELIMITER);\n\n    const anchor = getValueViaPath.call(this, object, subpath);\n\n    if (anchor instanceof Map) {\n        anchor.delete(last);\n    } else if (anchor instanceof Set || anchor instanceof WeakMap || anchor instanceof WeakSet || (typeof WeakRef === 'function' && anchor instanceof WeakRef)) {\n        throw Error('unsupported action for this data type');\n\n    } else if (isArray(anchor)) {\n        last = parseInt(last);\n        validateInteger(last)\n        delete anchor[last];\n    } else {\n        delete anchor[last];\n    }\n\n\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/stack.js';\n * console.log(new Monster.Types.Stack())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/stack.js';\n * console.log(new Stack())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Stack extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.data = [];\n    }\n\n\n    /**\n     * @return {boolean}\n     */\n    isEmpty() {\n        return this.data.length === 0;\n    }\n\n    /**\n     * looks at the object at the top of this stack without removing it from the stack.\n     *\n     * @return {*}\n     */\n    peek() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n\n        return this.data?.[this.data.length - 1];\n    }\n\n    /**\n     * pushes an item onto the top of this stack.\n     *\n     * @param {*} value\n     * @returns {Queue}\n     */\n    push(value) {\n        this.data.push(value)\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        this.data = [];\n        return this;\n    }\n\n    /**\n     * removes the object at the top of this stack and returns\n     * that object as the value of this function. is the stack empty\n     * the return value is undefined.\n     *\n     * @return {*}\n     */\n    pop() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        return this.data.pop();\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', Stack);\nexport {Monster, Stack}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray, isObject} from \"../types/is.js\";\nimport {typeOf} from \"../types/typeof.js\";\n\n/**\n * With the diff function you can perform the change of one object to another. The result shows the changes of the second object to the first object.\n *\n * The operator `add` means that something has been added to the second object. `delete` means that something has been deleted from the second object compared to the first object.\n *\n * You can call the method via the monster namespace `Monster.Data.Diff()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n * console.log(Monster.Data.Diff(a, b))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n * console.log(Diff(a, b))\n * </script>\n * ```\n *\n * @example\n *\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/diff.js';\n *\n * // given are two objects x and y.\n *\n * let x = {\n *     a: 1,\n *     b: \"Hello!\"\n * }\n *\n *  let y = {\n *     a: 2,\n *     c: true\n * }\n *\n * // These two objects can be compared with each other.\n *\n * console.log(Diff(x, y));\n *\n * // the result is then the following\n *\n * //\n * // [\n * // {\n * //        operator: 'update',\n * //        path: [ 'a' ],\n * //        first: { value: 1, type: 'number' },\n * //        second: { value: 2, type: 'number' }\n * //    },\n * // {\n * //        operator: 'delete',\n * //        path: [ 'b' ],\n * //        first: { value: 'Hello!', type: 'string' }\n * //    },\n * // {\n * //        operator: 'add',\n * //        path: [ 'c' ],\n * //        second: { value: true, type: 'boolean' }\n * //    }\n * // ]\n *\n * @param {*} first\n * @param {*} second\n * @return {array}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nfunction Diff(first, second) {\n    return doDiff(first, second)\n}\n\n/**\n * @private\n * @param a\n * @param b\n * @param type\n * @return {Set<string>|Set<number>}\n */\nfunction getKeys(a, b, type) {\n    if (isArray(type)) {\n        const keys = a.length > b.length ? new Array(a.length) : new Array(b.length);\n        keys.fill(0);\n        return new Set(keys.map((_, i) => i));\n    }\n\n    return new Set(Object.keys(a).concat(Object.keys(b)));\n}\n\n/**\n * @private\n * @param a\n * @param b\n * @param path\n * @param diff\n * @return {array}\n */\nfunction doDiff(a, b, path, diff) {\n\n    let typeA = typeOf(a)\n    let typeB = typeOf(b)\n\n    const currPath = path || [];\n    const currDiff = diff || [];\n\n    if (typeA === typeB && (typeA === 'object' || typeA ==='array')) { \n\n        getKeys(a, b, typeA).forEach((v) => {\n\n            if (!(Object.prototype.hasOwnProperty.call(a, v))) {\n                currDiff.push(buildResult(a[v], b[v], 'add', currPath.concat(v)));\n            } else if (!(Object.prototype.hasOwnProperty.call(b, v))) {\n                currDiff.push(buildResult(a[v], b[v], 'delete', currPath.concat(v)));\n            } else {\n                doDiff(a[v], b[v], currPath.concat(v), currDiff);\n            }\n        });\n\n    } else {\n\n        const o = getOperator(a, b, typeA, typeB);\n        if (o !== undefined) {\n            currDiff.push(buildResult(a, b, o, path));\n        }\n\n    }\n\n    return currDiff;\n\n}\n\n/**\n *\n * @param {*} a\n * @param {*} b\n * @param {string} operator\n * @param {array} path\n * @return {{path: array, operator: string}}\n * @private\n */\nfunction buildResult(a, b, operator, path) {\n\n    const result = {\n        operator,\n        path,\n    };\n\n    if (operator !== 'add') {\n        result.first = {\n            value: a,\n            type: typeof a\n        };\n\n        if (isObject(a)) {\n            const name = Object.getPrototypeOf(a)?.constructor?.name;\n            if (name !== undefined) {\n                result.first.instance = name;\n            }\n        }\n    }\n\n    if (operator === 'add' || operator === 'update') {\n        result.second = {\n            value: b,\n            type: typeof b\n        };\n\n        if (isObject(b)) {\n            const name = Object.getPrototypeOf(b)?.constructor?.name;\n            if (name !== undefined) {\n                result.second.instance = name;\n            }\n        }\n\n    }\n\n    return result;\n}\n\n/**\n * @private\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n */\nfunction isNotEqual(a, b) {\n\n    if (typeof a !== typeof b) {\n        return true;\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n        return a.getTime() !== b.getTime();\n    }\n\n    return a !== b;\n}\n\n/**\n * @private\n * @param {*} a\n * @param {*} b\n * @return {string|undefined}\n */\nfunction getOperator(a, b) {\n\n    /**\n     * @type {string|undefined}\n     */\n    let operator;\n\n    /**\n     * @type {string}\n     */\n    let typeA = typeof a;\n\n    /**\n     * @type {string}\n     */\n    let typeB = typeof b;\n\n    if (typeA === 'undefined' && typeB !== 'undefined') {\n        operator = 'add';\n    } else if (typeA !== 'undefined' && typeB === 'undefined') {\n        operator = 'delete';\n    } else if (isNotEqual(a, b)) {\n        operator = 'update';\n    }\n\n    return operator;\n\n}\n\nassignToNamespace('Monster.Data', Diff);\nexport {Monster, Diff}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\n\nimport {assignToNamespace, Monster} from '../namespace.js';\n\n/**\n * The built-in typeof method is known to have some historical weaknesses. This function tries to provide a better and more accurate result.\n *\n * You can call the method via the monster namespace `Monster.Types.typeOf()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n * console.log(Monster.Types.typeOf())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n * console.log(typeOf())\n * </script>\n * ```\n *\n * @example\n *\n * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/typeof.js';\n *\n * console.log(typeOf(undefined)); // ↦ undefined\n * console.log(typeOf(\"\")); // ↦ string\n * console.log(typeOf(5)); // ↦ number\n * console.log(typeOf({})); // ↦ object\n * console.log(typeOf([])); // ↦ array\n * console.log(typeOf(new Map)); // ↦ map\n * console.log(typeOf(true)); // ↦ boolean\n *\n * @param {*} value\n * @return {string}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @throws {TypeError} value is not a primitive\n */\nfunction typeOf(value) {\n    let type = ({}).toString.call(value).match(/\\s([a-zA-Z]+)/)[1];\n    if ('Object' === type) {\n        const results = (/^(class|function)\\s+(\\w+)/).exec(value.constructor.toString());\n        type = (results && results.length > 2) ? results[2] : '';\n    }\n    return type.toLowerCase();\n}\n\nassignToNamespace('Monster.Types', typeOf);\nexport {\n    Monster,\n    typeOf\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray, isObject} from \"../types/is.js\";\nimport {typeOf} from \"../types/typeof.js\";\n\n/**\n * extend copies all enumerable own properties from one or\n * more source objects to a target object. It returns the modified target object.\n *\n * You can call the method via the monster namespace `Monster.Data.extend()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/extend.js';\n * console.log(Monster.Data.extend(a, b))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/extend.js';\n * console.log(extend(a, b))\n * </script>\n * ```\n *\n * @param {object} target\n * @param {object}\n * @return {object}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n * @throws {Error} unsuported argument\n * @throws {Error} type mismatch\n */\nfunction extend() {\n    let o, i;\n\n    for (i = 0; i < arguments.length; i++) {\n        let a = arguments[i];\n\n        if (!(isObject(a) || isArray(a))) {\n            throw new Error('unsuported argument ' + JSON.stringify(a));\n        }\n\n        if (o === undefined) {\n            o = a;\n            continue;\n        }\n\n        for (let k in a) {\n\n            let v = a?.[k];\n\n            if (v === o?.[k]) {\n                continue;\n            }\n\n            if ((isObject(v) || isArray(v))) {\n\n                if (o[k] === undefined) {\n                    if (isArray(v)) {\n                        o[k] = [];\n                    } else {\n                        o[k] = {};\n                    }\n                }\n\n                if (typeOf(o[k]) !== typeOf(v)) {\n                    throw new Error(\"type mismatch: \" + JSON.stringify(o[k]) + \" != \" + JSON.stringify(v));\n                }\n\n                o[k] = extend(o[k], v);\n\n            } else {\n                o[k] = v;\n            }\n\n        }\n    }\n\n    return o;\n}\n\n\nassignToNamespace('Monster.Data', extend);\nexport {Monster, extend}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateString} from '../types/validate.js';\nimport {Transformer} from './transformer.js';\n\n\nconst DELIMITER = '|';\n\n/**\n * The pipe class makes it possible to combine several processing steps.\n *\n * You can call the method via the monster namespace `new Monster.Data.Pipe()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n * console.log(new Monster.Data.Pipe())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n * console.log(new Pipe())\n * </script>\n * ```\n *\n * A pipe consists of commands whose input and output are connected with the pipe symbol `|`.\n *\n * With the Pipe, processing steps can be combined. Here, the value of an object is accessed via the pathfinder (path command).\n * the word is then converted to uppercase letters and a prefix Hello is added. the two backslash safe the space char.\n *\n * @example\n * import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/pipe.js';\n *\n * let obj = {\n *    a: {\n *        b: {\n *            c: {\n *                d: \"world\"\n *            }\n *        }\n *    }\n * }\n *\n * console.log(new Pipe('path:a.b.c.d | toupper | prefix:Hello\\\\ ').run(obj));\n * // ↦ Hello WORLD\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Pipe extends Base {\n\n    /**\n     *\n     * @param {string} pipe a pipe consists of commands whose input and output are connected with the pipe symbol `|`.\n     * @throws {TypeError}\n     */\n    constructor(pipe) {\n        super();\n        validateString(pipe);\n        this.pipe = pipe.split(DELIMITER).map((v) => {\n            return new Transformer(v);\n        });\n\n\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @param {object} context\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback, context) {\n\n        for (const [, t] of Object.entries(this.pipe)) {\n            t.setCallback(name, callback, context);\n        }\n\n        return this;\n    }\n\n    /**\n     * run a pipe\n     *\n     * @param {*} value\n     * @returns {*}\n     */\n    run(value) {\n        return this.pipe.reduce((accumulator, transformer, currentIndex, array) => {\n            return transformer.run(accumulator);\n        }, value);\n    }\n}\n\nassignToNamespace('Monster.Data', Pipe);\nexport {Monster, Pipe}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobal} from \"../types/global.js\";\nimport {ID} from '../types/id.js';\nimport {isArray, isObject, isString} from '../types/is.js';\nimport {\n    validateFunction,\n    validateInteger,\n    validateObject,\n    validatePrimitive,\n    validateString\n} from '../types/validate.js';\nimport {clone} from \"../util/clone.js\";\nimport {Pathfinder} from \"./pathfinder.js\";\n\n/**\n * The transformer class is a swiss army knife for manipulating values. especially in combination with the pipe, processing chains can be built up.\n *\n * You can call the method via the monster namespace `new Monster.Data.Transformer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n * console.log(new Monster.Data.Transformer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n * console.log(new Transformer())\n * </script>\n * ```\n *\n * A simple example is the conversion of all characters to lowercase. for this purpose the command tolower must be used.\n *\n * ```\n * let t = new Transformer('tolower').run('ABC'); // ↦ abc\n * ```\n *\n * **all commands**\n *\n * in the following table all commands, parameters and existing aliases are described.\n *\n * | command      | parameter                  | alias                   | description                                                                                                                                                                                                                                                                                                                                                |\n * |:-------------|:---------------------------|:------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n * | base64       |                            |                         | Converts the value to base64                                                                                                                                                                                                                                                                                                                               |\n * | call         | function,param1:param2:... |                         | Calling a callback function. The function can be defined in three places: either globally, in the context `addCallback` or in the passed object                                                                                                                                                                                                            |\n * | default      |                            |                         | If the value is undefined the first argument is returned, otherwise the value. (since 1.12.0)                                                                                                                                                                                                                                                              |\n * | empty        |                            |                         | Return empty String \"\"                                                                                                                                                                                                                                                                                                                                     |\n * | fromjson     |                            |                         | Type conversion from a JSON string (since 1.12.0)                                                                                                                                                                                                                                                                                                          |\n * | if           | statement1:statement2      | ?                       | Is the ternary operator, the first parameter is the valid statement, the second is the false part. To use the current value in the queue, you can set the value keyword. On the other hand, if you want to have the static string \"value\", you have to put one backslash \\\\ in front of it and write value. the follow values are true: 'on', true, 'true' |\n * | index        | key:default                | property, key           | Fetches a value from an object, an array, a map or a set                                                                                                                                                                                                                                                                                                   |\n * | length       |                            | count                   | Length of the string or entries of an array or object                                                                                                                                                                                                                                                                                                      |\n * | nop          |                            |                         | Do nothing                                                                                                                                                                                                                                                                                                                                                 |\n * | path         | path                       |                         | The access to an object is done via a Pathfinder object                                                                                                                                                                                                                                                                                                    |\n * | plaintext    |                            | plain                   | All HTML tags are removed (*)                                                                                                                                                                                                                                                                                                                              |\n * | prefix       | text                       |                         | Adds a prefix                                                                                                                                                                                                                                                                                                                                              |\n * | rawurlencode |                            |                         | URL coding                                                                                                                                                                                                                                                                                                                                                 |\n * | static       |                            | none                    | The Arguments value is used and passed to the value. Special characters \\ <space> and : can be quotet by a preceding \\.                                                                                                                                                                                                                                    |\n * | substring    | start:length               |                         | Returns a substring                                                                                                                                                                                                                                                                                                                                        |\n * | suffix       | text                       |                         | Adds a suffix                                                                                                                                                                                                                                                                                                                                              |\n * | tointeger    |                            |                         | Type conversion to an integer value                                                                                                                                                                                                                                                                                                                        |\n * | tojson       |                            |                         | Type conversion to a JSON string (since 1.8.0)                                                                                                                                                                                                                                                                                                             |\n * | tolower      |                            | strtolower, tolowercase | The input value is converted to lowercase letters                                                                                                                                                                                                                                                                                                          |\n * | tostring     |                            |                         | Type conversion to a string                                                                                                                                                                                                                                                                                                                                |\n * | toupper      |                            | strtoupper, touppercase | The input value is converted to uppercase letters                                                                                                                                                                                                                                                                                                          |\n * | trim         |                            |                         | Remove spaces at the beginning and end                                                                                                                                                                                                                                                                                                                     |\n * | ucfirst      |                            |                         | First character large                                                                                                                                                                                                                                                                                                                                      |\n * | ucwords      |                            |                         | Any word beginning large                                                                                                                                                                                                                                                                                                                                   |\n * | undefined    |                            |                         | Return undefined                                                                                                                                                                                                                                                                                                                                           |\n * | uniqid       |                            |                         | Creates a string with a unique value (**)                                                                                                                                                                                                                                                                                                                  |\n *\n *  (*) for this functionality the extension [jsdom](https://www.npmjs.com/package/jsdom) must be loaded in the nodejs context.\n *\n * ```\n *  // polyfill\n *  if (typeof window !== \"object\") {\n *     const {window} = new JSDOM('', {\n *         url: 'http://example.com/',\n *         pretendToBeVisual: true\n *     });\n * \n *     [\n *         'self',\n *         'document',\n *         'Node',\n *         'Element',\n *         'HTMLElement',\n *         'DocumentFragment',\n *         'DOMParser',\n *         'XMLSerializer',\n *         'NodeFilter',\n *         'InputEvent',\n *         'CustomEvent'\n *     ].forEach(key => (global[key] = window[key]));\n * }\n * ```\n *\n * (**) for this command the crypt library is necessary in the nodejs context.\n *\n * ```\n * import * as Crypto from \"@peculiar/webcrypto\";\n * global['crypto'] = new Crypto.Crypto();\n * ```\n *\n * @example\n *\n * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/data/transformer.js';\n *\n * const transformer = new Transformer(\"tolower\")\n *\n * console.log(transformer.run(\"HELLO\"))\n * // ↦ hello\n *\n * console.log(transformer.run(\"WORLD\"))\n * // ↦ world\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Data\n */\nclass Transformer extends Base {\n    /**\n     *\n     * @param {string} definition\n     */\n    constructor(definition) {\n        super();\n        validateString(definition);\n\n        this.args = disassemble(definition);\n        this.command = this.args.shift()\n        this.callbacks = new Map();\n\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @param {object} context\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback, context) {\n        validateString(name)\n        validateFunction(callback)\n\n        if (context !== undefined) {\n            validateObject(context);\n        }\n\n        this.callbacks.set(name, {\n            callback: callback,\n            context: context,\n        });\n\n        return this;\n    }\n\n    /**\n     *\n     * @param {*} value\n     * @returns {*}\n     * @throws {Error} unknown command\n     * @throws {TypeError} unsupported type\n     * @throws {Error} type not supported\n     */\n    run(value) {\n        return transform.apply(this, [value])\n    }\n}\n\nassignToNamespace('Monster.Data', Transformer);\nexport {Monster, Transformer}\n\n/**\n *\n * @param {string} command\n * @returns {array}\n * @private\n */\nfunction disassemble(command) {\n\n    validateString(command);\n\n    let placeholder = new Map;\n    const regex = /((?<pattern>\\\\(?<char>.)){1})/mig;\n\n    // The separator for args must be quotable\n    // undefined string which should not occur normally and is also not a regex\n    let result = command.matchAll(regex)\n\n    for (let m of result) {\n        let g = m?.['groups'];\n        if (!isObject(g)) {\n            continue;\n        }\n\n        let p = g?.['pattern'];\n        let c = g?.['char'];\n\n        if (p && c) {\n            let r = '__' + new ID().toString() + '__';\n            placeholder.set(r, c);\n            command = command.replace(p, r);\n        }\n\n    }\n    let parts = command.split(':');\n\n    parts = parts.map(function (value) {\n        let v = value.trim();\n        for (let k of placeholder) {\n            v = v.replace(k[0], k[1]);\n        }\n        return v;\n\n\n    });\n\n    return parts\n}\n\n/**\n * tries to make a string out of value and if this succeeds to return it back\n *\n * @param {*} value\n * @returns {string}\n * @private\n */\nfunction convertToString(value) {\n\n    if (isObject(value) && value.hasOwnProperty('toString')) {\n        value = value.toString();\n    }\n\n    validateString(value)\n    return value;\n}\n\n/**\n *\n * @param {*} value\n * @returns {*}\n * @private\n * @throws {Error} unknown command\n * @throws {TypeError} unsupported type\n * @throws {Error} type not supported\n */\nfunction transform(value) {\n\n    let args = clone(this.args);\n    let key\n\n    switch (this.command) {\n\n        case 'static':\n            return this.args.join(':');\n\n        case 'tolower':\n        case 'strtolower':\n        case 'tolowercase':\n            validateString(value)\n            return value.toLowerCase();\n\n        case 'toupper':\n        case 'strtoupper':\n        case 'touppercase':\n            validateString(value)\n            return value.toUpperCase();\n\n        case 'tostring':\n            return \"\" + value;\n\n        case 'tointeger':\n            let n = parseInt(value);\n            validateInteger(n);\n            return n\n\n        case 'tojson':\n            return JSON.stringify(value);\n\n        case 'fromjson':\n            return JSON.parse(value);\n\n        case 'trim':\n            validateString(value)\n            return value.trim();\n\n        case 'rawurlencode':\n            validateString(value)\n            return encodeURIComponent(value)\n                .replace(/!/g, '%21')\n                .replace(/'/g, '%27')\n                .replace(/\\(/g, '%28')\n                .replace(/\\)/g, '%29')\n                .replace(/\\*/g, '%2A');\n\n\n        case  'call':\n\n            /**\n             * callback-definition\n             * function callback(value, ...args) {\n             *   return value;\n             * }\n             */\n\n            let callback;\n            let callbackName = args.shift();\n            let context = getGlobal();\n\n            if (isObject(value) && value.hasOwnProperty(callbackName)) {\n                callback = value[callbackName];\n            } else if (this.callbacks.has(callbackName)) {\n                let s = this.callbacks.get(callbackName);\n                callback = s?.['callback'];\n                context = s?.['context'];\n            } else if (typeof window === 'object' && window.hasOwnProperty(callbackName)) {\n                callback = window[callbackName];\n            }\n            validateFunction(callback);\n\n            args.unshift(value);\n            return callback.call(context, ...args);\n\n        case  'plain':\n        case  'plaintext':\n            validateString(value);\n            let doc = new DOMParser().parseFromString(value, 'text/html');\n            return doc.body.textContent || \"\";\n\n        case  'if':\n        case  '?':\n\n            validatePrimitive(value);\n\n            let trueStatement = (args.shift() || undefined);\n            let falseStatement = (args.shift() || undefined);\n\n            if (trueStatement === 'value') {\n                trueStatement = value;\n            }\n            if (trueStatement === '\\\\value') {\n                trueStatement = 'value';\n            }\n            if (falseStatement === 'value') {\n                falseStatement = value;\n            }\n            if (falseStatement === '\\\\value') {\n                falseStatement = 'value';\n            }\n\n            let condition = ((value !== undefined && value !== '' && value !== 'off' && value !== 'false' && value !== false) || value === 'on' || value === 'true' || value === true);\n            return condition ? trueStatement : falseStatement;\n\n\n        case 'ucfirst':\n            validateString(value);\n\n            let firstchar = value.charAt(0).toUpperCase();\n            return firstchar + value.substr(1);\n        case 'ucwords':\n            validateString(value);\n\n            return value.replace(/^([a-z\\u00E0-\\u00FC])|\\s+([a-z\\u00E0-\\u00FC])/g, function (v) {\n                return v.toUpperCase();\n            });\n\n        case  'count':\n        case  'length':\n\n            if ((isString(value) || isObject(value) || isArray(value)) && value.hasOwnProperty('length')) {\n                return value.length;\n            }\n\n            throw new TypeError(\"unsupported type \" + typeof value);\n\n        case 'base64':\n            convertToString(value);\n            return btoa(value);\n\n        case 'empty':\n            return '';\n\n        case 'undefined':\n            return undefined;\n\n        case 'prefix':\n            validateString(value);\n            let prefix = args?.[0];\n            return prefix + value;\n\n        case 'suffix':\n            validateString(value);\n            let suffix = args?.[0];\n            return value + suffix;\n\n        case 'uniqid':\n            return (new ID()).toString();\n\n        case 'key':\n        case 'property':\n        case 'index':\n\n            key = (args.shift() || 'undefined');\n            let defaultValue = (args.shift() || '');\n\n            if (value instanceof Map) {\n                if (!value.has(key)) {\n                    return defaultValue;\n                }\n                return value.get(key);\n            }\n\n            if (isObject(value) || isArray(value)) {\n\n                if (value?.[key]) {\n                    return value?.[key];\n                }\n\n                return defaultValue;\n            }\n\n            throw new Error(\"type not supported\")\n\n        case 'path':\n\n            key = (args.shift() || 'undefined');\n            return new Pathfinder(value).getVia(key);\n\n\n        case 'substring':\n\n            validateString(value);\n\n            let start = parseInt(args[0]) || 0;\n            let end = (parseInt(args[1]) || 0) + start;\n\n            return value.substring(start, end);\n\n        case 'nop':\n            return value;\n\n        case 'default':\n            if (value !== undefined) {\n                return value;\n            }\n            return args[0];\n\n        default:\n            throw new Error(\"unknown command \" + this.command)\n    }\n\n    return value;\n}\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {validateString} from \"./validate.js\";\n\n/**\n * @private\n * @type {Map<string, integer>}\n */\nlet internalCounter = new Map;\n\n/**\n * With the id class, sequences of ids can be created. for this purpose, an internal counter is incremented for each prefix.\n * thus, the first id with the prefix `myid` will be `myid1` and the second id `myid2`.\n * The ids are the same for every call, for example on a web page.\n *\n * So the ids can also be used for navigation. you just have to take care that the order stays the same.\n *\n * You can call the method via the monster namespace `new Monster.Types.ID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/id.js';\n * console.log(new Monster.Types.ID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/id.js';\n * console.log(new ID())\n * </script>\n * ```\n *\n * As of version 1.6.0 there is the new RandomID. this ID class is continuous from now on.\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ID extends Base {\n\n    /**\n     * create new object\n     */\n    constructor(prefix) {\n        super();\n\n        if (prefix === undefined) {\n            prefix = \"id\";\n        }\n\n        validateString(prefix);\n\n        if (!internalCounter.has(prefix)) {\n            internalCounter.set(prefix, 1);\n        }\n\n        let count = internalCounter.get(prefix);\n        this.id = prefix + count;\n\n        internalCounter.set(prefix, ++count);\n    }\n\n    /**\n     * @return {string}\n     */\n    toString() {\n        return this.id;\n    }\n\n}\n\nassignToNamespace('Monster.Types', ID);\nexport {Monster, ID}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalFunction} from \"../types/global.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateInstance, validateString} from \"../types/validate.js\";\n\n\n/**\n * attribute prefix\n *\n * @type {string}\n * @memberOf Monster.DOM\n */\nconst ATTRIBUTEPREFIX = \"data-monster-\";\n\n/**\n * you can call the method via the monster namespace `new Monster.DOM.Assembler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/assembler.js';\n * console.log(new Monster.DOM.Assembler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Assembler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/assembler.js';\n * console.log(new Assembler())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary Allows you to build an html fragment\n */\nclass Assembler extends Base {\n\n    /**\n     * @param {DocumentFragment} fragment\n     * @throws {TypeError} value is not an instance of\n     * @throws {TypeError} value is not a function\n     * @throws {Error} the function is not defined\n     */\n    constructor(fragment) {\n        super();\n        this.attributePrefix = ATTRIBUTEPREFIX;\n        validateInstance(fragment, getGlobalFunction('DocumentFragment'));\n        this.fragment = fragment;\n    }\n\n    /**\n     *\n     * @param {string} prefix\n     * @returns {Assembler}\n     * @throws {TypeError} value is not a string\n     */\n    setAttributePrefix(prefix) {\n        validateString(prefix);\n        this.attributePrefix = prefix;\n        return this;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getAttributePrefix() {\n        return this.attributePrefix;\n    }\n\n    /**\n     *\n     * @param {ProxyObserver|undefined} data\n     * @return {DocumentFragment}\n     * @throws {TypeError} value is not an instance of\n     */\n    createDocumentFragment(data) {\n\n        if (data === undefined) {\n            data = new ProxyObserver({});\n        }\n\n        validateInstance(data, ProxyObserver);\n        let fragment = this.fragment.cloneNode(true);\n        return fragment;\n    }\n\n}\n\nassignToNamespace('Monster.DOM', Assembler);\nexport {Monster, ATTRIBUTEPREFIX, Assembler}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {isArray, isObject, isPrimitive} from \"./is.js\";\nimport {Observer} from \"./observer.js\";\nimport {ObserverList} from \"./observerlist.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * An observer manages a callback function\n *\n * You can call create the class via the monster namespace `new Monster.Types.ProxyObserver()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * console.log(new Monster.Types.ProxyObserver())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * console.log(new ProxyObserver())\n * </script>\n * ```\n *\n * with the ProxyObserver you can attach observer for observation. with each change at the object to be observed an update takes place.\n *\n * this also applies to nested objects.\n *\n * @example\n *\n * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/proxyobserver.js';\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/is.js';\n *\n * const o = new Observer(function () { \n *   if (isObject(this) && this instanceof ProxyObserver) {\n *       // do something (this ist ProxyObserver)\n *       const subject = this.getSubject();\n *       console.log(subject);\n *   }\n * });\n *\n * let realSubject = {\n *   a: {\n *       b: {\n *           c: true\n *       },\n *       d: 9\n *   }\n * }\n *\n * const p = new ProxyObserver(realSubject);\n * p.attachObserver(o);\n * const s = p.getSubject();\n * s.a.b.c = false;\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ProxyObserver extends Base {\n\n    /**\n     *\n     * @param {object} object\n     * @throws {TypeError} value is not a object\n     */\n    constructor(object) {\n        super();\n\n        this.realSubject = validateObject(object);\n        this.subject = new Proxy(object, getHandler.call(this));\n\n        this.objectMap = new WeakMap();\n        this.objectMap.set(this.realSubject, this.subject);\n\n        this.proxyMap = new WeakMap();\n        this.proxyMap.set(this.subject, this.realSubject);\n\n        this.observers = new ObserverList;\n    }\n\n    /**\n     * get the real object\n     *\n     * changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.\n     *\n     * @returns {object}\n     */\n    getSubject() {\n        return this.subject\n    }\n\n    /**\n     * get the proxied object\n     *\n     * @returns {object}\n     */\n    getRealSubject() {\n        return this.realSubject\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    attachObserver(observer) {\n        this.observers.attach(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    detachObserver(observer) {\n        this.observers.detach(observer)\n        return this;\n    }\n\n    /**\n     * notify all observer\n     *\n     * @returns {Promise}\n     */\n    notifyObservers() {\n        return this.observers.notify(this);\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {boolean}\n     */\n    containsObserver(observer) {\n        return this.observers.contains(observer)\n    }\n\n}\n\nassignToNamespace('Monster.Types', ProxyObserver);\nexport {Monster, ProxyObserver}\n\n/**\n *\n * @returns {{defineProperty: (function(*=, *=, *=): *), setPrototypeOf: (function(*, *=): boolean), set: (function(*, *, *, *): boolean), get: ((function(*=, *=, *=): (undefined))|*), deleteProperty: ((function(*, *): (boolean))|*)}}\n * @private\n * @see {@link https://gitlab.schukai.com/-/snippets/49}\n */\nfunction getHandler() {\n\n    const proxy = this;\n\n    // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots\n    const handler = {\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n        get: function (target, key, receiver) {\n\n            const value = Reflect.get(target, key, receiver);\n\n            if (typeof key === \"symbol\") {\n                return value;\n            }\n\n            if (isPrimitive(value)) {\n                return value;\n            }\n\n            // set value as proxy if object or array\n            if ((isArray(value) || isObject(value))) {\n                if (proxy.objectMap.has(value)) {\n                    return proxy.objectMap.get(value);\n                } else if (proxy.proxyMap.has(value)) {\n                    return value;\n                } else {\n                    let p = new Proxy(value, handler);\n                    proxy.objectMap.set(value, p);\n                    proxy.proxyMap.set(p, value);\n                    return p;\n                }\n\n            }\n\n            return value;\n\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver \n        set: function (target, key, value, receiver) {\n\n            if (proxy.proxyMap.has(value)) {\n                value = proxy.proxyMap.get(value);\n            }\n\n            if (proxy.proxyMap.has(target)) {\n                target = proxy.proxyMap.get(target);\n            }\n\n            let current = Reflect.get(target, key, receiver);\n            if (proxy.proxyMap.has(current)) {\n                current = proxy.proxyMap.get(current);\n            }\n\n            if (current === value) {\n                return true;\n            }\n\n            let result;\n            let descriptor = Reflect.getOwnPropertyDescriptor(target, key);\n\n            if (descriptor === undefined) {\n                descriptor = {\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                }\n            }\n\n            descriptor['value'] = value;\n            result = Reflect.defineProperty(target, key, descriptor);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        },\n\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n        deleteProperty: function (target, key) {\n            if (key in target) {\n                delete target[key];\n\n                if (typeof key !== \"symbol\") {\n                    proxy.observers.notify(proxy);\n                }\n\n                return true;\n            }\n            return false;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n        defineProperty: function (target, key, descriptor) {\n\n            let result = Reflect.defineProperty(target, key, descriptor);\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n            return result;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n        setPrototypeOf: function (target, key) {\n            let result = Reflect.setPrototypeOf(object1, key);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        }\n\n    };\n\n\n    return handler;\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {isObject} from './is.js';\nimport {TokenList} from './tokenlist.js';\nimport {UniqueQueue} from './uniquequeue.js';\n\n/**\n * An observer manages a callback function\n *\n * You can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * console.log(new Monster.Types.Observer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n * console.log(new Observer())\n * </script>\n * ```\n *\n * The update method is called with the subject object as this pointer. For this reason the callback should not\n * be an arrow function, because it gets the this pointer of its own context.\n *\n * ```\n * <script>\n * new Observer(()=>{\n *     // this is not subject\n * })\n *\n * new Observer(function() {\n *     // this is subject\n * })\n * </script>\n * ```\n *\n * Additional arguments can be passed to the callback. To do this, simply specify them.\n *\n * ```\n * <script>\n * Observer(function(a, b, c) {\n *     console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\n * </script>\n * ```\n *\n * The callback function must have as many parameters as arguments are given.\n *\n * @example\n *\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observer.js';\n *\n * const observer = new Observer(function(a, b, c) {\n *      console.log(this, a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true);\n *\n * observer.update({value:true}).then(()=>{});\n * // ↦ {value: true} \"a\" 2 true\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass Observer extends Base {\n\n    /**\n     *\n     * @param {function} callback\n     * @param {*} args\n     */\n    constructor(callback, ...args) {\n        super();\n\n        if (typeof callback !== 'function') {\n            throw new Error(\"observer callback must be a function\")\n        }\n\n        this.callback = callback;\n        this.arguments = args;\n        this.tags = new TokenList;\n        this.queue = new UniqueQueue();\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    addTag(tag) {\n        this.tags.add(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    removeTag(tag) {\n        this.tags.remove(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @returns {Array}\n     */\n    getTags() {\n        return this.tags.entries()\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {boolean}\n     */\n    hasTag(tag) {\n        return this.tags.contains(tag)\n    }\n\n    /**\n     *\n     * @param {object} subject\n     * @returns {Promise}\n     */\n    update(subject) {\n        let self = this;\n\n        return new Promise(function (resolve, reject) {\n            if (!isObject(subject)) {\n                reject(\"subject must be an object\");\n                return;\n            }\n\n            self.queue.add(subject);\n\n            setTimeout(() => {\n\n                try {\n                    // the queue and the settimeout ensure that an object is not \n                    // informed of the same change more than once.\n                    if (self.queue.isEmpty()) {\n                        resolve();\n                        return;\n                    }\n\n                    let s = self.queue.poll();\n                    let result = self.callback.apply(s, self.arguments);\n\n                    if (isObject(result) && result instanceof Promise) {\n                        result.then(resolve).catch(reject);\n                        return;\n                    }\n\n                    resolve(result);\n\n                } catch (e) {\n                    reject(e);\n                }\n            }, 0)\n\n        });\n\n    };\n\n}\n\nassignToNamespace('Monster.Types', Observer);\nexport {Monster, Observer}\n\n\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isIterable, isString} from '../types/is.js';\nimport {validateFunction, validateString} from '../types/validate.js';\nimport {Base} from './base.js';\n\n/**\n * A tokenlist allows you to manage tokens (individual character strings such as css classes in an attribute string).\n *\n * The tokenlist offers various functions to manipulate values. For example, you can add, remove or replace a class in a CSS list.\n *\n * You can call the method via the monster namespace `new Monster.Types.TokenList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/tokenlist.js';\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/tokenlist.js';\n * console.log(new TokenList(\"myclass row\"))\n * console.log(new TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * This class implements the [iteration protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).\n *\n * ```\n * console.log(typeof new TokenList(\"myclass row\")[Symbol.iterator]); // \"function\"\n * ```\n *\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass TokenList extends Base {\n\n    /**\n     *\n     * @param {array|string|iteratable} init\n     */\n    constructor(init) {\n        super();\n        this.tokens = new Set();\n\n        if (typeof init !== \"undefined\") {\n            this.add(init);\n        }\n\n    }\n\n    /**\n     * Iterator protocol\n     *\n     * @returns {Symbol.iterator}\n     */\n    getIterator() {\n        return this[Symbol.iterator]();\n    }\n\n    /**\n     * Iterator\n     *\n     * @returns {{next: ((function(): ({value: *, done: boolean}))|*)}}\n     */\n    [Symbol.iterator]() {\n        // Use a new index for each iterator. This makes multiple\n        // iterations over the iterable safe for non-trivial cases,\n        // such as use of break or nested looping over the same iterable.\n        let index = 0;\n        let entries = this.entries()\n\n        return {\n            next: () => {\n                if (index < entries.length) {\n                    return {value: entries?.[index++], done: false}\n                } else {\n                    return {done: true}\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if it contains token, otherwise false\n     *\n     * ```\n     * new TokenList(\"start middle end\").contains('start')); // ↦ true\n     * new TokenList(\"start middle end\").contains('end')); // ↦ true\n     * new TokenList(\"start middle end\").contains('xyz')); // ↦ false\n     * new TokenList(\"start middle end\").contains(['end','start','middle'])); // ↦ true\n     * new TokenList(\"start middle end\").contains(['end','start','xyz'])); // ↦ false\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     */\n    contains(value) {\n        if (isString(value)) {\n            value = value.trim()\n            let counter = 0;\n            value.split(\" \").forEach(token => {\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            })\n            return counter > 0 ? true : false;\n        }\n\n        if (isIterable(value)) {\n            let counter = 0;\n            for (let token of value) {\n                validateString(token);\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            }\n            return counter > 0 ? true : false;\n        }\n\n        return false;\n    }\n\n    /**\n     * add tokens\n     *\n     * ```\n     * new TokenList().add(\"abc xyz\").toString(); // ↦ \"abc xyz\"\n     * new TokenList().add([\"abc\",\"xyz\"]).toString(); // ↦ \"abc xyz\"\n     * new TokenList().add(undefined); // ↦ add nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    add(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.add(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.add(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all tokens\n     *\n     * @returns {TokenList}\n     */\n    clear() {\n        this.tokens.clear();\n        return this;\n    }\n\n    /**\n     * Removes token\n     *\n     * ```\n     * new TokenList(\"abc xyz\").remove(\"xyz\").toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove([\"xyz\"]).toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove(undefined); // ↦ remove nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    remove(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.delete(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.delete(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * this method replaces a token with a new token.\n     *\n     * if the passed token exists, it is replaced with newToken and TokenList is returned.\n     * if the token does not exist, newToken is not set and TokenList is returned.\n     *\n     * @param {string} token\n     * @param {string} newToken\n     * @returns {TokenList}\n     */\n    replace(token, newToken) {\n        validateString(token);\n        validateString(newToken);\n        if (!this.contains(token)) {\n            return this;\n        }\n\n        let a = Array.from(this.tokens)\n        let i = a.indexOf(token);\n        if (i === -1) return this;\n\n        a.splice(i, 1, newToken);\n        this.tokens = new Set();\n        this.add(a);\n\n        return this;\n\n\n    }\n\n    /**\n     * Removes token from string. If token doesn't exist it's added.\n     *\n     * ```\n     * new TokenList(\"abc def ghi\").toggle(\"def xyz\").toString(); // ↦ \"abc ghi xyz\"\n     * new TokenList(\"abc def ghi\").toggle([\"abc\",\"xyz\"]).toString(); // ↦ \"def ghi xyz\"\n     * new TokenList().toggle(undefined); // ↦ nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     * @throws {TypeError} unsupported value\n     */\n    toggle(value) {\n\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                toggleValue.call(this, token);\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                toggleValue.call(this, token);\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n\n    }\n\n    /**\n     * returns an array with all tokens\n     *\n     * @returns {array}\n     */\n    entries() {\n        return Array.from(this.tokens)\n    }\n\n    /**\n     * executes the provided function with each value of the set\n     *\n     * @param {function} callback\n     * @returns {TokenList}\n     */\n    forEach(callback) {\n        validateFunction(callback);\n        this.tokens.forEach(callback);\n        return this;\n    }\n\n    /**\n     * returns the individual tokens separated by a blank character\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.entries().join(' ');\n    }\n\n}\n\n/**\n * @private\n * @param token\n * @returns {toggleValue}\n * @throws {Error} must be called with TokenList.call\n */\nfunction toggleValue(token) {\n    if (!(this instanceof TokenList)) throw Error(\"must be called with TokenList.call\")\n    validateString(token);\n    token = token.trim();\n    if (this.contains(token)) {\n        this.remove(token);\n        return this;\n    }\n    this.add(token);\n    return this;\n}\n\nassignToNamespace('Monster.Types', TokenList);\nexport {Monster, TokenList}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Queue} from \"./queue.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/uniquequeue.js';\n * console.log(new Monster.Types.UniqueQueue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {UniqueQueue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/uniquequeue.js';\n * console.log(new UniqueQueue())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary A queue for unique values\n */\nclass UniqueQueue extends Queue {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.unique = new WeakSet();\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {object} value\n     * @returns {Queue}\n     * @throws {TypeError} value is not a object\n     */\n    add(value) {\n\n        validateObject(value);\n\n        if (!this.unique.has(value)) {\n            this.unique.add(value);\n            super.add(value);\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        super.clear();\n        this.unique = new WeakSet;\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {object}\n     */\n    poll() {\n\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        let value = this.data.shift();\n        this.unique.delete(value);\n        return value;\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', UniqueQueue);\nexport {Monster, UniqueQueue}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n * console.log(new Monster.Types.Queue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n * console.log(new Queue())\n * </script>\n * ```\n *\n * @example\n *\n * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/queue.js';\n *\n * const queue = new Queue;\n *\n * queue.add(2);\n * queue.add(true);\n * queue.add(\"Hello\");\n * queue.add(4.5);\n *\n * console.log(queue.poll());\n * // ↦ 2\n * console.log(queue.poll());\n * // ↦ true\n * console.log(queue.poll());\n * // ↦ \"Hello\"\n * console.log(queue.poll());\n * // ↦ 4.5\n * console.log(queue.poll());\n * // ↦ undefined\n *\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary A Queue (Fifo)\n */\nclass Queue extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.data = [];\n    }\n\n\n    /**\n     * @return {boolean}\n     */\n    isEmpty() {\n        return this.data.length === 0;\n    }\n\n    /**\n     * Read the element at the front of the queue without removing it.\n     *\n     * @return {*}\n     */\n    peek() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n\n        return this.data[0];\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {*} value\n     * @returns {Queue}\n     */\n    add(value) {\n        this.data.push(value)\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        this.data = [];\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {*}\n     */\n    poll() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        return this.data.shift();\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', Queue);\nexport {Monster, Queue}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\nimport {Observer} from \"./observer.js\";\nimport {validateInstance} from \"./validate.js\";\n\n/**\n * With the help of the ObserverList class, observer can be managed.\n *\n * You can call the method via the monster namespace `new Monster.Types.ObserverList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observerlist.js';\n * console.log(new Monster.Types.ObserverList())\n * console.log(new Monster.Types.ObserverList())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/observerlist.js';\n * console.log(ObserverList())\n * console.log(ObserverList())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass ObserverList extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.observers = [];\n    }\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {ObserverList}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    attach(observer) {\n        validateInstance(observer, Observer)\n\n        this.observers.push(observer);\n        return this;\n    };\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {ObserverList}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    detach(observer) {\n        validateInstance(observer, Observer)\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                this.observers.splice(i, 1);\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     *\n     * @param {Observer} observer\n     * @return {boolean}\n     * @throws {TypeError} value is not an instance of Observer\n     */\n    contains(observer) {\n        validateInstance(observer, Observer)\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /**\n     *\n     * @param subject\n     * @return {Promise}\n     */\n    notify(subject) {\n\n        let pomises = []\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            pomises.push(this.observers[i].update(subject));\n        }\n\n        return Promise.all(pomises);\n    };\n\n}\n\nassignToNamespace('Monster.Types', ObserverList);\nexport {Monster, ObserverList}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobalFunction} from \"../types/global.js\";\nimport {TokenList} from \"../types/tokenlist.js\";\nimport {validateInstance, validateString, validateSymbol} from \"../types/validate.js\";\nimport {ATTRIBUTE_OBJECTLINK} from \"./constants.js\";\n\n/**\n * Get the closest object link of a node\n *\n * if a node is specified without a object link, a recursive search upwards is performed until the corresponding\n * object link is found, or undefined is returned.\n *\n * you can call the method via the monster namespace `Monster.DOM.getUpdaterFromNode()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(Monster.DOM.findClosestObjectLink())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(findClosestObjectLink())\n * </script>\n * ```\n *\n * @param {HTMLElement} element\n * @return {HTMLElement|undefined}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not an instance of HTMLElement\n */\nfunction findClosestObjectLink(element) {\n    return findClosestByAttribute(element, ATTRIBUTE_OBJECTLINK);\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.addToObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.addToObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * addToObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @param {Object} object\n * @return {boolean}\n */\nfunction addToObjectLink(element, symbol, object) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        element[symbol] = new Set;\n    }\n\n    addAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n    element[symbol].add(object);\n    return element;\n\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.removeObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.removeObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * removeObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {boolean}\n */\nfunction removeObjectLink(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        return element\n    }\n\n    removeAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n    delete element[symbol];\n    return element;\n\n}\n\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.hasObjectLink()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.hasObjectLink();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * hasObjectLink();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {boolean}\n */\nfunction hasObjectLink(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        return false\n    }\n\n    return containsAttributeToken(element, ATTRIBUTE_OBJECTLINK, symbol.toString());\n\n}\n\n/**\n * The ObjectLink can be used to attach objects to HTMLElements. The elements are kept in a set under a unique\n * symbol and can be read via an iterator {@see {@link getLinkedObjects}}.\n *\n * In addition, elements with an objectLink receive the attribute `data-monster-objectlink`.\n *\n * With the method  {@see {@link addToObjectLink}} the objects can be added.\n *\n * You can call the method via the monster namespace `new Monster.DOM.getLinkedObjects()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.getLinkedObjects();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * getLinkedObjects();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {Symbol} symbol\n * @return {Iterator}\n * @throws {Error} there is no object link for symbol\n */\nfunction getLinkedObjects(element, symbol) {\n\n    validateInstance(element, HTMLElement);\n    validateSymbol(symbol)\n\n    if (element?.[symbol] === undefined) {\n        throw new Error('there is no object link for ' + symbol.toString());\n    }\n\n    return element?.[symbol][Symbol.iterator]();\n\n}\n\n\n/**\n * With this method tokens in an attribute can be switched on or off. For example, classes can be switched on and off in the elements class attribute.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.toggleAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.toggleAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * toggleAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction toggleAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        element.setAttribute(key, token);\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).toggle(token).toString());\n\n    return element\n}\n\n/**\n * this method can be used to add a token to an attribute. Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.addAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.addAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * addAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction addAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        element.setAttribute(key, token);\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).add(token).toString());\n\n    return element\n}\n\n/**\n * This function can be used to remove tokens from an attribute.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.removeAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.removeAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * removeAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {HTMLElement}\n */\nfunction removeAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).remove(token).toString());\n\n    return element\n}\n\n/**\n * This method can be used to determine whether an attribute has a token.\n *\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.containsAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.containsAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * containsAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} token\n * @return {boolean}\n */\nfunction containsAttributeToken(element, key, token) {\n    validateInstance(element, HTMLElement);\n    validateString(token)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return false;\n    }\n\n    return new TokenList(element.getAttribute(key)).contains(token);\n\n}\n\n/**\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.replaceAttributeToken()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.replaceAttributeToken();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * replaceAttributeToken();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string} from\n * @param {string} to\n * @return {HTMLElement}\n */\nfunction replaceAttributeToken(element, key, from, to) {\n    validateInstance(element, HTMLElement);\n    validateString(from)\n    validateString(to)\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, new TokenList(element.getAttribute(key)).replace(from, to).toString());\n\n    return element\n}\n\n/**\n * Tokens are always separated by a space.\n *\n * You can call the method via the monster namespace `new Monster.DOM.clearAttributeTokens()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.clearAttributeTokens();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * clearAttributeTokens();\n * </script>\n * ```\n *\n * @since 1.9.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @return {HTMLElement}\n */\nfunction clearAttributeTokens(element, key) {\n    validateInstance(element, HTMLElement);\n    validateString(key)\n\n    if (!element.hasAttribute(key)) {\n        return element;\n    }\n\n    element.setAttribute(key, \"\");\n\n    return element\n}\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.findClosestByAttribute()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * Monster.DOM.findClosestByAttribute();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findClosestByAttribute} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/attributes.js';\n * findClosestByAttribute();\n * </script>\n * ```\n *\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} key\n * @param {string|undefined} value\n * @return {HTMLElement|undefined}\n */\nfunction findClosestByAttribute(element, key, value) {\n    validateInstance(element, getGlobalFunction('HTMLElement'));\n\n    if (element.hasAttribute(key) && element.getAttribute(key) === value) {\n        return element;\n    }\n\n    let selector = validateString(key);\n    if (value !== undefined) selector += \"=\" + validateString(value);\n    let result = element.closest('[' + selector + ']');\n    if (result instanceof HTMLElement) {\n        return result;\n    }\n    return undefined;\n}\n\n// exports\nassignToNamespace('Monster.DOM', getLinkedObjects, addToObjectLink, removeObjectLink, findClosestByAttribute, hasObjectLink, clearAttributeTokens, replaceAttributeToken, containsAttributeToken, removeAttributeToken, addAttributeToken, toggleAttributeToken);\nexport {\n    Monster,\n    addToObjectLink,\n    removeObjectLink,\n    hasObjectLink,\n    findClosestByAttribute,\n    clearAttributeTokens,\n    replaceAttributeToken,\n    containsAttributeToken,\n    removeAttributeToken,\n    addAttributeToken,\n    toggleAttributeToken,\n    getLinkedObjects,\n    findClosestObjectLink\n}\n","'use strict';\n\nimport {Monster} from '../namespace.js';\n/**\n * @author schukai GmbH\n */\n\n/**\n * @memberOf Monster.DOM\n * @since 1.8.0\n * @type {string}\n */\nconst ATTRIBUTE_PREFIX = 'data-monster-';\n\n/**\n * This is the name of the attribute to pass options to a control\n * \n * @memberOf Monster.DOM\n * @since 1.8.0\n * @type {string}\n */\nconst ATTRIBUTE_OPTIONS = ATTRIBUTE_PREFIX + 'options';\n\n\n/**\n * default theme\n * @memberOf Monster.DOM\n * @type {string}\n */\nconst DEFAULT_THEME = 'monster';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_THEME_PREFIX = ATTRIBUTE_PREFIX + 'theme-';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n */\nconst ATTRIBUTE_THEME_NAME = ATTRIBUTE_THEME_PREFIX + 'name';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_ATTRIBUTES = ATTRIBUTE_PREFIX + 'attributes';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_REPLACE = ATTRIBUTE_PREFIX + 'replace';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_INSERT = ATTRIBUTE_PREFIX + 'insert';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_INSERT_REFERENCE = ATTRIBUTE_PREFIX + 'insert-reference';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.8.0\n */\nconst ATTRIBUTE_UPDATER_REMOVE = ATTRIBUTE_PREFIX + 'remove';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.9.0\n */\nconst ATTRIBUTE_UPDATER_BIND = ATTRIBUTE_PREFIX + 'bind';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.14.0\n */\nconst ATTRIBUTE_ROLE = ATTRIBUTE_PREFIX + 'role';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.9.0\n */\nconst ATTRIBUTE_OBJECTLINK = ATTRIBUTE_PREFIX + 'objectlink';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.10.0\n */\nconst OBJECTLINK_KEY_UPDATER = 'monsterUpdater';\n\n\nexport {\n    Monster,\n    ATTRIBUTE_PREFIX,\n    ATTRIBUTE_OPTIONS,\n    DEFAULT_THEME,\n    ATTRIBUTE_THEME_PREFIX,\n    ATTRIBUTE_ROLE,\n    ATTRIBUTE_THEME_NAME,\n    ATTRIBUTE_UPDATER_ATTRIBUTES,\n    ATTRIBUTE_UPDATER_REPLACE,\n    ATTRIBUTE_UPDATER_INSERT,\n    ATTRIBUTE_UPDATER_INSERT_REFERENCE,\n    ATTRIBUTE_UPDATER_REMOVE,\n    ATTRIBUTE_UPDATER_BIND,\n    ATTRIBUTE_OBJECTLINK,\n    OBJECTLINK_KEY_UPDATER\n}","'use strict';\n\nimport {extend} from \"../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {CustomElement} from \"./customelement.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalSymbol = Symbol('internalSymbol');\n\n/**\n * To define a new HTML control we need the power of CustomElement\n *\n * IMPORTANT: after defining a `CustomElement`, the `registerCustomElement` method must be called\n * with the new class name. only then will the tag defined via the `getTag` method be made known to the DOM.\n *\n * <img src=\"./images/customcontrol-class.png\">\n * \n * This control uses `attachInternals()` to integrate the control into a form.\n * If the target environment does not support this method, the [polyfill](https://www.npmjs.com/package/element-internals-polyfill ) can be used.\n *\n * You can create the object via the monster namespace `new Monster.DOM.CustomControl()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customcontrol.js';\n * console.log(new Monster.DOM.CustomControl())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {CustomControl} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customcontrol.js';\n * console.log(new CustomControl())\n * </script>\n * ```\n * \n * @startuml customcontrol-class.png\n * skinparam monochrome true\n * skinparam shadowing false\n * HTMLElement <|-- CustomElement\n * CustomElement <|-- CustomControl\n * @enduml\n * \n * @summary A base class for customcontrols based on CustomElement\n * @see {@link https://www.npmjs.com/package/element-internals-polyfill}\n * @see {@link https://github.com/WICG/webcomponents}\n * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements}\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n */\nclass CustomControl extends CustomElement {\n\n    /**\n     * IMPORTANT: CustomControls instances are not created via the constructor, but either via a tag in the HTML or via <code>document.createElement()</code>.\n     *\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @summary create new Instance\n     */\n    constructor() {\n        super();\n\n        if (typeof this['attachInternals'] === 'function') {\n            /**\n             * currently only supported by chrome\n             * @property {Object}\n             * @private\n             */\n            this[internalSymbol] = this.attachInternals();\n        }\n\n    }\n\n    /**\n     *\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals}\n     * @since 1.14.0\n     * @return {boolean}\n     */\n    static get formAssociated() {\n        return true;\n    }\n\n    /**\n     * Derived classes can override and extend this method as follows.\n     *\n     * ```\n     * get defaults() {\n     *    return extends{}, super.defaults, {\n     *        myValue:true\n     *    });\n     * }\n     * ```\n     *\n     * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals}\n     * @return {object}\n     * @since 1.14.0\n     */\n    get defaults() {\n        return extend({}, super.defaults);\n    }\n\n    /**\n     * Must be overridden by a derived class and return the value of the control.\n     *\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @since 1.14.0\n     * @throws {Error} the value getter must be overwritten by the derived class\n     */\n    get value() {\n        throw Error('the value getter must be overwritten by the derived class');\n    }\n\n    /**\n     * Must be overridden by a derived class and return the value of the control.\n     *\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @param {*} value\n     * @since 1.14.0\n     * @throws {Error} the value setter must be overwritten by the derived class\n     */\n    set value(value) {\n        throw Error('the value setter must be overwritten by the derived class');\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {NodeList}\n     * @since 1.14.0\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/labels}\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get labels() {\n        return getInternal.call(this)?.labels;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string|null}\n     */\n    get name() {\n        return this.getAttribute('name');\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string}\n     */\n    get type() {\n        return this.constructor.getTag();\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {ValidityState}\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ValidityState}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/validity}\n     */\n    get validity() {\n        return getInternal.call(this)?.validity;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {string}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/validationMessage\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get validationMessage() {\n        return getInternal.call(this)?.validationMessage;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {boolean}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/willValidate\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get willValidate() {\n        return getInternal.call(this)?.willValidate;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {CustomStateSet}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get states() {\n        return getInternal.call(this)?.states;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {HTMLFontElement|null}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/form\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    get form() {\n        return getInternal.call(this)?.form;\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * ```\n     * // Use the control's name as the base name for submitted data\n     * const n = this.getAttribute('name');\n     * const entries = new FormData();\n     * entries.append(n + '-first-name', this.firstName_);\n     * entries.append(n + '-last-name', this.lastName_);\n     * this.setFormValue(entries);\n     * ```\n     *\n     * @param {File|string|FormData} value\n     * @param {File|string|FormData} state\n     * @since 1.14.0\n     * @return {undefined}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/setFormValue\n     */\n    setFormValue(value, state) {\n        getInternal.call(this).setFormValue(value, state);\n    }\n\n    /**\n     *\n     * @param {object} flags\n     * @param {string|undefined} message\n     * @param {HTMLElement} anchor\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/setValidity\n     * @since 1.14.0\n     * @return {undefined}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    setValidity(flags, message, anchor) {\n        getInternal.call(this).setValidity(flags, message, anchor);\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/checkValidity\n     * @since 1.14.0\n     * @return {boolean}\n     * @throws {DOMException} NotSupportedError\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     */\n    checkValidity() {\n        return getInternal.call(this)?.checkValidity();\n    }\n\n    /**\n     * This is a method of [internal api](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals)\n     *\n     * @return {boolean}\n     * @since 1.14.0\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/reportValidity\n     * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n     * @throws {DOMException} NotSupportedError\n     */\n    reportValidity() {\n        return getInternal.call(this)?.reportValidity();\n    }\n\n}\n\n/**\n * @private\n * @return {object}\n * @throws {Error} the ElementInternals is not supported and a polyfill is necessary\n * @this CustomControl\n */\nfunction getInternal() {\n    const self = this;\n\n    if (!(internalSymbol in this)) {\n        throw new Error('ElementInternals is not supported and a polyfill is necessary');\n    }\n\n    return this[internalSymbol];\n}\n\nassignToNamespace('Monster.DOM', CustomControl);\nexport {Monster, CustomControl}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {parseDataURL} from \"../types/dataurl.js\";\nimport {getGlobalObject} from \"../types/global.js\";\nimport {isArray, isString} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateFunction, validateInstance, validateObject} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {addToObjectLink, getLinkedObjects, hasObjectLink} from \"./attributes.js\";\nimport {ATTRIBUTE_OPTIONS, OBJECTLINK_KEY_UPDATER} from \"./constants.js\";\nimport {findDocumentTemplate, Template} from \"./template.js\";\nimport {Updater} from \"./updater.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalDataSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * @private\n * @type {symbol}\n */\nconst objectLinkSymbol = Symbol.for(OBJECTLINK_KEY_UPDATER);\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst initMethodSymbol = Symbol('initMethodSymbol');\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst assembleMethodSymbol = Symbol('assembleMethodSymbol');\n\n\n/**\n * HTMLElement\n * @external HTMLElement\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement\n *\n * @startuml customelement-sequencediagram.png\n * skinparam monochrome true\n * skinparam shadowing false\n *\n * autonumber\n *\n * Script -> DOM: element = document.createElement('my-element')\n * DOM -> CustomElement: constructor()\n * CustomElement -> CustomElement: [initMethodSymbol]()\n *\n * CustomElement --> DOM: Element\n * DOM --> Script : element\n *\n *\n * Script -> DOM: document.querySelector('body').append(element)\n *\n * DOM -> CustomElement : connectedCallback()\n *\n * note right CustomElement: is only called at\\nthe first connection\n * CustomElement -> CustomElement : [assembleMethodSymbol]()\n *\n * ... ...\n *\n * autonumber\n *\n * Script -> DOM: document.querySelector('monster-confirm-button').parentNode.removeChild(element)\n * DOM -> CustomElement: disconnectedCallback()\n *\n *\n * @enduml\n *\n * @startuml customelement-class.png\n * skinparam monochrome true\n * skinparam shadowing false\n * HTMLElement <|-- CustomElement\n * @enduml\n */\n\n\n/**\n * To define a new HTML element we need the power of CustomElement\n *\n * IMPORTANT: after defining a `CustomElement`, the `registerCustomElement` method must be called\n * with the new class name. only then will the tag defined via the `getTag` method be made known to the DOM.\n *\n * <img src=\"./images/customelement-class.png\">\n *\n * You can create the object via the monster namespace `new Monster.DOM.CustomElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customelement.js';\n * console.log(new Monster.DOM.CustomElement())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/customelement.js';\n * console.log(new CustomElement())\n * </script>\n * ```\n *\n * ## Interaction\n *\n * <img src=\"./images/customelement-sequencediagram.png\">\n *\n * ## Styling\n *\n * For optimal display of custom-elements the pseudo-class :defined can be used.\n *\n * To prevent the custom elements from being displayed and flickering until the control is registered, it is recommended to create a css directive.\n *\n * In the simplest case, you can simply hide the control.\n *\n * ```\n * <style>\n *\n * my-custom-element:not(:defined) {\n *     display: none;\n * }\n *\n * my-custom-element:defined {\n *     display: flex;\n * }\n *\n * </style>\n * ```\n *\n * Alternatively you can also display a loader\n *\n * ```\n * my-custom-element:not(:defined) {\n *            display: flex;\n *            box-shadow: 0 4px 10px 0 rgba(33, 33, 33, 0.15);\n *            border-radius: 4px;\n *            height: 200px;\n *            position: relative;\n *            overflow: hidden;\n *        }\n *\n * my-custom-element:not(:defined)::before {\n *            content: '';\n *            display: block;\n *            position: absolute;\n *            left: -150px;\n *            top: 0;\n *            height: 100%;\n *            width: 150px;\n *            background: linear-gradient(to right, transparent 0%, #E8E8E8 50%, transparent 100%);\n *            animation: load 1s cubic-bezier(0.4, 0.0, 0.2, 1) infinite;\n *        }\n *\n * @keyframes load {\n *            from {\n *                left: -150px;\n *            }\n *            to   {\n *                left: 100%;\n *            }\n *        }\n *\n * my-custom-element:defined {\n *           display: flex;\n *       }\n * ```\n *\n * @example\n *\n * // In the example the the user can use his own template by creating a template in the DOM with the ID `my-custom-element`.\n * // You can also specify a theme (for example `mytheme`), then it will search for the ID `my-custom-element-mytheme` and\n * // if not available for the ID `my-custom-element`.\n *\n * class MyCustomElement extends CustomElement {\n * \n *    static getTag() {\n *        return \"my-custom-element\"\n *    }\n *\n * }\n *\n * // ↦ <my-custom-element></my-custom-element>\n *\n * @see https://github.com/WICG/webcomponents\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @extends external:HTMLElement\n * @summary A base class for HTML5 customcontrols\n */\nclass CustomElement extends HTMLElement {\n\n    /**\n     * A new object is created. First the `initOptions` method is called. Here the\n     * options can be defined in derived classes. Subsequently, the shadowRoot is initialized.\n     *\n     * @throws {Error} the options attribute does not contain a valid json definition.\n     * @since 1.7.0\n     */\n    constructor() {\n        super();\n        this[internalDataSymbol] = new ProxyObserver({'options': extend({}, this.defaults, getOptionsFromAttributes.call(this))});\n        initOptionObserver.call(this);\n        this[initMethodSymbol]();\n    }\n\n    /**\n     * This method determines which attributes are to be monitored by `attributeChangedCallback()`.\n     *\n     * @return {string[]}\n     * @since 1.15.0\n     */\n    static get observedAttributes() {\n        return [ATTRIBUTE_OPTIONS];\n    }\n\n    /**\n     * Derived classes can override and extend this method as follows.\n     *\n     * ```\n     * get defaults() {\n     *    return Object.assign({}, super.defaults, {\n     *        myValue:true\n     *    });\n     * }\n     * ```\n     *\n     * to set the options via the html tag the attribute data-monster-options must be set.\n     * As value a JSON object with the desired values must be defined.\n     *\n     * Since 1.18.0 the JSON can be specified as a DataURI.\n     *\n     * ```\n     * new Monster.Types.DataUrl(btoa(JSON.stringify({\n     *        shadowMode: 'open',\n     *        delegatesFocus: true,\n     *        templates: {\n     *            main: undefined\n     *        }\n     *    })),'application/json',true).toString()\n     * ```\n     *\n     * @property {string} shadowMode=open `open` Elements of the shadow root are accessible from JavaScript outside the root, for example using. `close` Denies access to the node(s) of a closed shadow root from JavaScript outside it\n     * @property {Boolean} delegatesFocus=true A boolean that, when set to true, specifies behavior that mitigates custom element issues around focusability. When a non-focusable part of the shadow DOM is clicked, the first focusable part is given focus, and the shadow host is given any available :focus styling.\n     * @property {Object} templates Templates\n     * @property {string} templates.main=undefined Main template\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow\n     * @return {{shadowMode: string, delegatesFocus: boolean}}\n     * @since 1.8.0\n     */\n    get defaults() {\n        return {\n            shadowMode: 'open',\n            delegatesFocus: true,\n            templates: {\n                main: undefined\n            }\n        };\n    }\n\n    /**\n     * There is no check on the name by this class. the developer is responsible for assigning an appropriate tag.\n     * if the name is not valid, registerCustomElement() will issue an error\n     *\n     * @link https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * @return {string}\n     * @throws {Error} the method getTag must be overwritten by the derived class.\n     * @since 1.7.0\n     */\n    static getTag() {\n        throw new Error(\"the method getTag must be overwritten by the derived class.\");\n    }\n\n    /**\n     * At this point a `CSSStyleSheet` object can be returned. If the environment does not\n     * support a constructor, then an object can also be built using the following detour.\n     *\n     * If `undefined` is returned then the shadowRoot does not get a stylesheet.\n     *\n     * ```\n     * const doc = document.implementation.createHTMLDocument('title');\n     *\n     * let style = doc.createElement(\"style\");\n     * style.innerHTML=\"p{color:red;}\";\n     *\n     * // WebKit Hack\n     * style.appendChild(document.createTextNode(\"\"));\n     * // Add the <style> element to the page\n     * doc.head.appendChild(style);\n     * return doc.styleSheets[0];\n     * ;\n     * ```\n     *\n     * @return {CSSStyleSheet|CSSStyleSheet[]|string|undefined}\n     */\n    static getCSSStyleSheet() {\n        return undefined;\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {CustomElement}\n     */\n    attachObserver(observer) {\n        this[internalDataSymbol].attachObserver(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {CustomElement}\n     */\n    detachObserver(observer) {\n        this[internalDataSymbol].detachObserver(observer)\n        return this;\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    containsObserver(observer) {\n        return this[internalDataSymbol].containsObserver(observer)\n    }\n\n    /**\n     * nested options can be specified by path `a.b.c`\n     *\n     * @param {string} path\n     * @param {*} defaultValue\n     * @return {*}\n     * @since 1.10.0\n     */\n    getOption(path, defaultValue) {\n        let value;\n\n        try {\n            value = new Pathfinder(this[internalDataSymbol].getRealSubject()['options']).getVia(path);\n        } catch (e) {\n\n        }\n\n        if (value === undefined) return defaultValue;\n        return value;\n    }\n\n    /**\n     * Set option and inform elements\n     *\n     * @param {string} path\n     * @param {*} value\n     * @return {CustomElement}\n     * @since 1.14.0\n     */\n    setOption(path, value) {\n        new Pathfinder(this[internalDataSymbol].getSubject()['options']).setVia(path, value);\n        return this;\n    }\n\n    /**\n     * @since 1.15.0\n     * @param {string|object} options\n     * @return {CustomElement}\n     */\n    setOptions(options) {\n\n        if (isString(options)) {\n            options = parseOptionsJSON(options)\n        }\n\n        const self = this;\n        extend(self[internalDataSymbol].getSubject()['options'], self.defaults, options);\n\n        return self;\n    }\n\n    /**\n     *\n     * @return {CustomElement}\n     * @since 1.8.0\n     */\n    [initMethodSymbol]() {\n        return this;\n    }\n\n    /**\n     *\n     * @return {CustomElement}\n     * @since 1.8.0\n     */\n    [assembleMethodSymbol]() {\n\n        const self = this;\n        let elements;\n\n        if (this.getOption('shadowMode', false) !== false) {\n            try {\n                initShadowRoot.call(this);\n                elements = this.shadowRoot.childNodes;\n            } catch (e) {\n\n            }\n            try {\n                initCSSStylesheet.call(this);\n            } catch (e) {\n\n            }\n        }\n\n        if (!(elements instanceof NodeList)) {\n            initHtmlContent.call(this);\n            elements = this.childNodes;\n        }\n\n        const updater = new Set;\n        addToObjectLink(this, objectLinkSymbol, updater);\n\n        for (const [, element] of Object.entries(elements)) {\n\n            if (!(element instanceof HTMLElement)) continue;\n            if ((element instanceof HTMLTemplateElement)) continue;\n            const u = new Updater(element, clone(self[internalDataSymbol].getRealSubject()['options']))\n            updater.add(u);\n\n            u.run().then(() => {\n                u.enableEventProcessing();\n            });\n\n        }\n\n        return this;\n    }\n\n    /**\n     * Called every time the element is inserted into the DOM. Useful for running setup code, such as\n     * fetching resources or rendering. Generally, you should try to delay work until this time.\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    connectedCallback() {\n        let self = this;\n        if (!hasObjectLink(self, objectLinkSymbol)) {\n            self[assembleMethodSymbol]()\n        }\n    }\n\n    /**\n     * Called every time the element is removed from the DOM. Useful for running clean up code.\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    disconnectedCallback() {\n\n    }\n\n    /**\n     * The custom element has been moved into a new document (e.g. someone called document.adoptNode(el)).\n     *\n     * @return {void}\n     * @since 1.7.0\n     */\n    adoptedCallback() {\n\n    }\n\n    /**\n     * Called when an observed attribute has been added, removed, updated, or replaced. Also called for initial\n     * values when an element is created by the parser, or upgraded. Note: only attributes listed in the observedAttributes\n     * property will receive this callback.\n     *\n     * @param {string} attrName\n     * @param {string} oldVal\n     * @param {string} newVal\n     * @return {void}\n     * @since 1.15.0\n     */\n    attributeChangedCallback(attrName, oldVal, newVal) {\n        const self = this;\n\n        if (attrName === ATTRIBUTE_OPTIONS) {\n            self.setOptions(newVal);\n        }\n\n    }\n\n    /**\n     * \n     * @param {Node} node\n     * @return {boolean}\n     * @throws {TypeError} value is not an instance of\n     * @since 1.19.0\n     */\n    hasNode(node) {\n        const self = this;\n\n\n        if (containChildNode.call(self, validateInstance(node, Node))) {\n            return true;\n        }\n\n        if (!(self.shadowRoot instanceof ShadowRoot)) {\n            return false;\n        }\n\n        return containChildNode.call(self.shadowRoot, node);\n\n    }\n\n}\n\n/**\n * @private\n * @param {Node} node\n * @return {boolean}\n */\nfunction containChildNode(node) {\n    const self = this;\n\n    if (self.contains(node)) {\n        return true;\n    }\n\n    for (const [, e] of Object.entries(self.childNodes)) {\n        if (e.contains(node)) {\n            return true;\n        }\n\n        containChildNode.call(e, node);\n    }\n\n\n    return false;\n}\n\n/**\n * @since 1.15.0\n * @private\n * @this CustomElement\n */\nfunction initOptionObserver() {\n    const self = this;\n\n    self.attachObserver(new Observer(function () {\n\n        // not initialised\n        if (!hasObjectLink(self, Symbol.for(OBJECTLINK_KEY_UPDATER))) {\n            return;\n        }\n        // inform every element\n        const updaters = getLinkedObjects(self, Symbol.for(OBJECTLINK_KEY_UPDATER));\n\n        for (const list of updaters) {\n            for (const updater of list) {\n                let d = clone(self[internalDataSymbol].getRealSubject()['options']);\n                Object.assign(updater.getSubject(), d);\n            }\n        }\n\n    }));\n\n}\n\n/**\n * @private\n * @return {object}\n * @throws {Error} the options attribute does not contain a valid json definition.\n */\nfunction getOptionsFromAttributes() {\n    if (this.hasAttribute(ATTRIBUTE_OPTIONS)) {\n        try {\n            return parseOptionsJSON(this.getAttribute(ATTRIBUTE_OPTIONS))\n        } catch (e) {\n            throw new Error('the options attribute ' + ATTRIBUTE_OPTIONS + ' does not contain a valid json definition (actual: ' + this.getAttribute(ATTRIBUTE_OPTIONS) + ').');\n        }\n    }\n\n    return {};\n}\n\n/**\n * @private\n * @param data\n * @return {Object}\n */\nfunction parseOptionsJSON(data) {\n    if (isString(data)) {\n\n        // the configuration can be specified as a data url.\n        try {\n            let dataUrl = parseDataURL(data);\n            data = dataUrl.content;\n        } catch (e) {\n\n        }\n\n\n        try {\n            let obj = JSON.parse(data);\n            validateObject(obj);\n            return obj;\n        } catch (e) {\n            throw new Error('the options does not contain a valid json definition (actual: ' + data + ').');\n        }\n    }\n\n    return {};\n}\n\n/**\n * @private\n * @return {initHtmlContent}\n */\nfunction initHtmlContent() {\n\n    try {\n        let template = findDocumentTemplate(this.constructor.getTag());\n        this.appendChild(template.createDocumentFragment());\n    } catch (e) {\n\n        let html = this.getOption('templates.main', '');\n        if (isString(html) && html.length > 0) {\n            this.innerHTML = html;\n        }\n\n    }\n\n    return this;\n\n}\n\n/**\n * @private\n * @return {CustomElement}\n * @memberOf Monster.DOM\n * @this CustomElement\n * @since 1.16.0\n */\nfunction initCSSStylesheet() {\n    const self = this;\n\n    if (!(this.shadowRoot instanceof ShadowRoot)) {\n        return self;\n    }\n\n    const styleSheet = this.constructor.getCSSStyleSheet();\n    if (styleSheet instanceof CSSStyleSheet) {\n        this.shadowRoot.adoptedStyleSheets = [styleSheet];\n    } else if (isArray(styleSheet)) {\n        this.shadowRoot.adoptedStyleSheets = styleSheet;\n    } else if (isString(styleSheet)) {\n        const style = self.shadowRoot.createElement('<style>')\n        style.innerText = styleSheet;\n        this.shadowRoot.adoptedStyleSheets = styleSheet;\n    }\n\n    return self;\n\n}\n\n/**\n * @private\n * @return {CustomElement}\n * @throws {Error} html is not set.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow\n * @memberOf Monster.DOM\n * @since 1.8.0\n */\nfunction initShadowRoot() {\n\n    let template, html;\n\n    try {\n        template = findDocumentTemplate(this.constructor.getTag());\n    } catch (e) {\n\n        html = this.getOption('templates.main', '');\n        if (!isString(html) || html === undefined || html === \"\") {\n            throw new Error(\"html is not set.\");\n        }\n\n    }\n\n    this.attachShadow({\n        mode: this.getOption('shadowMode', 'open'),\n        delegatesFocus: this.getOption('delegatesFocus', true)\n    });\n\n    if (template instanceof Template) {\n        this.shadowRoot.appendChild(template.createDocumentFragment());\n        return this;\n    }\n\n    this.shadowRoot.innerHTML = html;\n    return this;\n}\n\n/**\n * This method registers a new element. The string returned by `CustomElement.getTag()` is used as the tag.\n *\n * @param {CustomElement} element\n * @return {void}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {DOMException} Failed to execute 'define' on 'CustomElementRegistry': is not a valid custom element name\n */\nfunction registerCustomElement(element) {\n    validateFunction(element);\n    getGlobalObject('customElements').define(element.getTag(), element);\n}\n\nassignToNamespace('Monster.DOM', CustomElement, registerCustomElement);\nexport {Monster, registerCustomElement, CustomElement, initMethodSymbol, assembleMethodSymbol}\n","'use strict';\n\nimport {assignToNamespace} from \"../namespace.js\";\n/**\n * @author schukai GmbH\n */\nimport {Base, Monster} from \"./base.js\";\nimport {isString} from \"./is.js\";\nimport {MediaType, parseMediaType} from \"./mediatype.js\";\nimport {validateBoolean, validateInstance, validateString} from \"./validate.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst internal = Symbol('internal');\n\n/**\n * You can create an object via the monster namespace `new Monster.Types.DataUrl()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(new Monster.Types.DataUrl())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {DataUrl} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(new DataUrl())\n * </script>\n * ```\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * @see https://datatracker.ietf.org/doc/html/rfc2397\n */\nclass DataUrl extends Base {\n\n    /**\n     *\n     * @param {String} content\n     * @param {String|Monster.Types.MediaType} mediatype\n     * @param {boolean} base64=true\n     */\n    constructor(content, mediatype, base64) {\n        super();\n\n        if (isString(mediatype)) {\n            mediatype = parseMediaType(mediatype);\n        }\n\n        this[internal] = {\n            content: validateString(content),\n            mediatype: validateInstance(mediatype, MediaType),\n            base64: validateBoolean(base64 === undefined ? true : base64)\n        }\n\n\n    }\n\n    get content() {\n        return this[internal].base64 ? atob(this[internal].content) : this[internal].content;\n    }\n\n    get mediatype() {\n        return this[internal].mediatype;\n    }\n\n\n    /**\n     *\n     * @return {string}\n     * @see https://datatracker.ietf.org/doc/html/rfc2397\n     */\n    toString() {\n\n        let content = this[internal].content;\n\n        if (this[internal].base64 === true) {\n            content = ';base64,' + content;\n        } else {\n            content = ',' + encodeURIComponent(content);\n        }\n\n        return 'data:' + this[internal].mediatype.toString() + content;\n    }\n\n}\n\n/**\n * You can call the function via the monster namespace `Monster.Types.parseDataURL()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(Monster.Types.parseDataURL())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {parseDataURL} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(parseDataURL())\n * </script>\n * ```\n *\n * Specification:\n *\n * ```\n * dataurl    := \"data:\" [ mediatype ] [ \";base64\" ] \",\" data\n * mediatype  := [ type \"/\" subtype ] *( \";\" parameter )\n * data       := *urlchar\n * parameter  := attribute \"=\" value\n * ```\n *\n * @param {String} dataurl\n * @return {Monster.Types.DataUrl}\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * @see https://datatracker.ietf.org/doc/html/rfc2397\n * @throws {TypeError} incorrect or missing data protocol\n * @throws {TypeError} malformed data url\n * @memberOf Monster.Types\n */\nfunction parseDataURL(dataurl) {\n\n    validateString(dataurl);\n\n    dataurl = dataurl.trim();\n\n    if (dataurl.substring(0, 5) !== 'data:') {\n        throw new TypeError('incorrect or missing data protocol')\n    }\n\n    dataurl = dataurl.substring(5);\n\n    let p = dataurl.indexOf(',');\n    if (p === -1) {\n        throw new TypeError('malformed data url')\n    }\n\n    let content = dataurl.substring(p + 1);\n    let mediatypeAndBase64 = dataurl.substring(0, p).trim();\n    let mediatype = 'text/plain;charset=US-ASCII';\n    let base64Flag = false;\n\n    if (mediatypeAndBase64 !== \"\") {\n        mediatype = mediatypeAndBase64;\n        if (mediatypeAndBase64.endsWith('base64')) {\n            let i = mediatypeAndBase64.lastIndexOf(';');\n            mediatype = mediatypeAndBase64.substring(0, i);\n            base64Flag = true;\n        } else {\n            content = decodeURIComponent(content);\n        }\n\n        mediatype = parseMediaType(mediatype);\n    } else {\n        content = decodeURIComponent(content);\n    }\n\n    return new DataUrl(content, mediatype, base64Flag);\n\n\n}\n\n\nassignToNamespace('Monster.Types', parseDataURL, DataUrl);\nexport {Monster, parseDataURL, DataUrl};\n","'use strict';\n\nimport {assignToNamespace} from \"../namespace.js\";\n/**\n * @author schukai GmbH\n */\nimport {Base, Monster} from \"./base.js\";\nimport {isString} from \"./is.js\";\nimport {validateArray, validateString} from \"./validate.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internal = Symbol('internal');\n\n/**\n * @typedef {Object} Parameter\n * @property {string} key\n * @property {string} value\n * @memberOf Monster.Types\n */\n\n\n/**\n * You can create an object via the monster namespace `new Monster.Types.MediaType()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/mediatype.js';\n * console.log(new Monster.Types.MediaType())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {MediaType} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/mediatype.js';\n * console.log(new MediaType())\n * </script>\n * ```\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass MediaType extends Base {\n\n    /**\n     *\n     * @param {String} type\n     * @param {String} subtype\n     * @param {Monster.Types.Parameter[]} parameter\n     */\n    constructor(type, subtype, parameter) {\n        super();\n\n        this[internal] = {\n            type: validateString(type).toLowerCase(),\n            subtype: validateString(subtype).toLowerCase(),\n            parameter: []\n        }\n\n        if (parameter !== undefined) {\n            this[internal]['parameter'] = validateArray(parameter);\n        }\n\n\n    }\n\n    /**\n     * @return {String}\n     */\n    get type() {\n        return this[internal].type;\n    }\n\n    /**\n     * @return {String}\n     */\n    get subtype() {\n        return this[internal].subtype;\n    }\n\n    /**\n     * @return {Monster.Types.Parameter[]}\n     */\n    get parameter() {\n        return this[internal].parameter;\n    }\n\n    /**\n     *\n     *\n     * @return {Map}\n     */\n    get parameter() {\n\n        const result = new Map\n\n        this[internal]['parameter'].forEach(p => {\n\n            let value = p.value;\n\n            // internally special values are partly stored with quotes, this function removes them.\n            if (value.startsWith('\"') && value.endsWith('\"')) {\n                value = value.substring(1, value.length - 1);\n            }\n\n            result.set(p.key, value);\n        })\n\n\n        return result;\n    }\n\n    /**\n     *\n     * @return {string}\n     */\n    toString() {\n\n        let parameter = [];\n        for (let a of this[internal].parameter) {\n            parameter.push(a.key + '=' + a.value);\n        }\n\n        return this[internal].type + '/' + this[internal].subtype + (parameter.length > 0 ? ';' + parameter.join(';') : '');\n    }\n\n}\n\n/**\n * You can call the function via the monster namespace `Monster.Types.parseMediaType()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(Monster.Types.parseMediaType())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {parseMediaType} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/dataurl.js';\n * console.log(parseMediaType())\n * </script>\n * ```\n *\n * Specification:\n *\n * ```\n * dataurl    := \"data:\" [ mediatype ] [ \";base64\" ] \",\" data\n * mediatype  := [ type \"/\" subtype ] *( \";\" parameter )\n * data       := *urlchar\n * parameter  := attribute \"=\" value\n * ```\n *\n * @param {String} mediatype\n * @return {Monster.Types.MediaType}\n * @see https://datatracker.ietf.org/doc/html/rfc2045#section-5.1\n * @throws {TypeError} the mimetype can not be parsed\n * @throws {TypeError} blank value is not allowed\n * @throws {TypeError} malformed data url\n * @memberOf Monster.Types\n */\nfunction parseMediaType(mediatype) {\n\n    const regex = /(?<type>[A-Za-z]+|\\*)\\/(?<subtype>([a-zA-Z0-9.\\+_\\-]+)|\\*|)(?<parameter>\\s*;\\s*([a-zA-Z0-9]+)\\s*(=\\s*(\"?[A-Za-z0-9_\\-]+\"?))?)*/g;\n    const result = regex.exec(validateString(mediatype));\n\n    const groups = result?.['groups'];\n    if (groups === undefined) {\n        throw new TypeError('the mimetype can not be parsed')\n    }\n\n    const type = groups?.['type'];\n    const subtype = groups?.['subtype'];\n    const parameter = groups?.['parameter'];\n\n    if (subtype === \"\" || type === \"\") {\n        throw new TypeError('blank value is not allowed');\n    }\n\n    return new MediaType(type, subtype, parseParameter(parameter));\n\n\n}\n\n/**\n * @private\n * @since 1.18.0\n * @param {String} parameter\n * @return {Monster.Types.Parameter[]|undefined}\n * @memberOf Monster.Types\n */\nfunction parseParameter(parameter) {\n\n    if (!isString(parameter)) {\n        return undefined;\n    }\n\n    let result = [];\n\n    parameter.split(';').forEach((entry) => {\n\n        entry = entry.trim();\n        if (entry === \"\") {\n            return;\n        }\n\n        const kv = entry.split('=')\n\n        let key = validateString(kv?.[0]).trim();\n        let value = validateString(kv?.[1]).trim();\n\n        // if values are quoted, they remain so internally\n        result.push({\n            key: key,\n            value: value\n        })\n\n\n    })\n\n    return result;\n\n}\n\n\nassignToNamespace('Monster.Types', parseMediaType, MediaType);\nexport {Monster, parseMediaType, MediaType};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalFunction, getGlobalObject} from '../types/global.js';\nimport {validateInstance, validateString} from \"../types/validate.js\";\nimport {getDocumentTheme} from \"./theme.js\";\n\n/**\n * you can call the method via the monster namespace `new Monster.DOM.Template()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(new Monster.DOM.Template())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(new Template())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary A template class\n */\nclass Template extends Base {\n    /**\n     *\n     * @param {HTMLTemplateElement} template\n     * @throws {TypeError} value is not an instance of\n     * @throws {TypeError} value is not a function\n     * @throws {Error} the function is not defined\n     */\n    constructor(template) {\n        super();\n        const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n        validateInstance(template, HTMLTemplateElement);\n        this.template = template;\n    }\n\n    /**\n     *\n     * @returns {HTMLTemplateElement}\n     */\n    getTemplateElement() {\n        return this.template;\n    }\n\n    /**\n     *\n     * @return {DocumentFragment}\n     * @throws {TypeError} value is not an instance of\n     */\n    createDocumentFragment() {\n        return this.template.content.cloneNode(true);\n    }\n\n}\n\n/**\n * This method loads a template with the given ID and returns it.\n *\n * To do this, it first fetches the theme of the document and looks for the `data-monster-theme-name` attribute in the HTML tag.\n *\n * ```\n * <html data-monster-theme-name=\"my-theme\">\n * ```\n *\n * If no theme was specified, the default theme is `monster`.\n *\n * Now it is looked if there is a template with the given ID and theme `id-theme` and if yes it is returned. \n * If there is no template a search for a template with the given ID `id` is done. If this is also not found, an error is thrown.\n *\n * You can call the method via the monster namespace `Monster.DOM.findDocumentTemplate()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(Monster.DOM.findDocumentTemplate())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/template.js';\n * console.log(findDocumentTemplate())\n * </script>\n * ```\n *\n * @param {string} id\n * @param {Node} currentNode\n * @return {Monster.DOM.Template}\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} template id not found.\n * @throws {TypeError} value is not a string\n */\nfunction findDocumentTemplate(id, currentNode) {\n    validateString(id);\n\n    if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n\n        if (currentNode instanceof Node) {\n            currentNode = currentNode.getRootNode();\n\n            if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n                currentNode = currentNode.ownerDocument;\n            }\n\n        }\n\n        if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n            currentNode = getGlobalObject('document');\n        }\n    }\n\n    const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n\n    let theme = getDocumentTheme()\n    let themedID = id + '-' + theme.getName();\n\n    let template = currentNode.getElementById(themedID);\n    if (template instanceof HTMLTemplateElement) {\n        return new Template(template);\n    }\n\n    template = currentNode.getElementById(id);\n    if (template instanceof HTMLTemplateElement) {\n        return new Template(template);\n    }\n\n    if (currentNode !== getGlobalObject('document')) {\n        return findDocumentTemplate(id)\n    }\n\n    throw new Error(\"template \" + id + \" not found.\")\n}\n\n\nassignToNamespace('Monster.DOM', Template, findDocumentTemplate);\nexport {Monster, Template, findDocumentTemplate}\n\n\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {getGlobalObject} from '../types/global.js';\nimport {validateString} from \"../types/validate.js\";\nimport {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from \"./constants.js\";\n\n\n/**\n * You can call the method via the monster namespace `new Monster.DOM.Theme()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n * console.log(new Monster.DOM.Theme())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n * console.log(new Theme())\n * </script>\n * ```\n *\n * @example\n *\n * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/theme.js';\n *\n * const theme = getDocumentTheme();\n * console.log(theme.getName());\n * // ↦ monster\n *\n * @since 1.7.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @summary A theme class\n */\nclass Theme extends Base {\n\n    /**\n     *\n     * @param name\n     * @throws {TypeError} value is not a string\n     */\n    constructor(name) {\n        super();\n        validateString(name);\n        this.name = name;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getName() {\n        return this.name;\n    }\n\n}\n\n/**\n * The theming used in the document can be defined via the html-tag.\n * The theming is specified via the attribute `data-monster-theme-name`.\n *\n * As name for a theme all characters are valid, which are also allowed for a HTMLElement-ID.\n *\n * ```\n * <html data-monster-theme-name=\"my-theme\">\n * ```\n *\n * the default theme name is `monster`.\n *\n * @return {Theme}\n * @memberOf Monster.DOM\n * @since 1.7.0\n */\nfunction getDocumentTheme() {\n    let document = getGlobalObject('document');\n    let name = DEFAULT_THEME;\n\n    let element = document.querySelector('html');\n    if (element instanceof HTMLElement) {\n        let theme = element.getAttribute(ATTRIBUTE_THEME_NAME);\n        if (theme) {\n            name = theme;\n        }\n    }\n\n    return new Theme(name);\n\n}\n\nassignToNamespace('Monster.DOM', Theme, getDocumentTheme);\nexport {Monster, Theme, getDocumentTheme}\n","'use strict';\n\nimport {Diff} from \"../data/diff.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {\n    ATTRIBUTE_UPDATER_ATTRIBUTES,\n    ATTRIBUTE_UPDATER_BIND,\n    ATTRIBUTE_UPDATER_INSERT,\n    ATTRIBUTE_UPDATER_INSERT_REFERENCE,\n    ATTRIBUTE_UPDATER_REMOVE,\n    ATTRIBUTE_UPDATER_REPLACE\n} from \"../dom/constants.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {isArray, isInstance, isIterable} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateArray, validateInstance} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {findDocumentTemplate} from \"./template.js\";\nimport {getDocument} from \"./util.js\";\n\n\n/**\n * The updater class connects an object with the dom. In this way, structures and contents in the DOM can be programmatically adapted via attributes.\n *\n * For example, to include a string from an object, the attribute `data-monster-replace` can be used. \n * a further explanation can be found under {@tutorial dom-based-templating-implementation}.\n *\n * you can call the method via the monster namespace `new Monster.DOM.Updater()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(new Monster.DOM.Updater())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n * console.log(new Updater())\n * </script>\n * ```\n *\n * @example\n *\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/updater.js';\n *\n * // First we prepare the html document.\n * // This is done here via script, but can also be inserted into the document as pure html.\n * // To do this, simply insert the tag <h1 data-monster-replace=\"path:headline\"></h1>.\n * const body = document.querySelector('body');\n * const headline = document.createElement('h1');\n * headline.setAttribute('data-monster-replace','path:headline')\n * body.appendChild(headline);\n *\n * // the data structure\n * let obj = {\n *    headline: \"Hello World\",\n * };\n *\n * // Now comes the real magic. we pass the updater the parent HTMLElement\n * // and the desired data structure.\n * const updater = new Updater(body, obj);\n * updater.run();\n *\n * // Now you can change the data structure and the HTML will follow these changes.\n * const subject = updater.getSubject();\n * subject['headline'] = \"Hello World!\"\n *\n * @since 1.8.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} the value is not iterable\n * @throws {Error} pipes are not allowed when cloning a node.\n * @throws {Error} no template was found with the specified key.\n * @throws {Error} the maximum depth for the recursion is reached.\n * @throws {TypeError} value is not a object\n * @throws {TypeError} value is not an instance of HTMLElement\n * @summary The updater class connects an object with the dom\n */\nclass Updater extends Base {\n\n    /**\n     * @since 1.8.0\n     * @param {HTMLElement} element\n     * @param {object|ProxyObserver|undefined} subject\n     * @throws {TypeError} value is not a object\n     * @throws {TypeError} value is not an instance of HTMLElement\n     * @see {@link Monster.DOM.findDocumentTemplate}\n     */\n    constructor(element, subject) {\n        super();\n\n        /**\n         * @type {HTMLElement}\n         */\n        this.element = validateInstance(element, HTMLElement);\n\n        if (subject === undefined) subject = {}\n        let a = subject;\n        if (!isInstance(subject, ProxyObserver)) {\n            subject = new ProxyObserver(subject);\n        }\n\n        this.last = {};\n        this.callbacks = new Map();\n        this.callbacks.set('checkstate', getCheckStateCallback.call(this));\n\n        /**\n         * @type {object}\n         */\n        this.subject = subject.attachObserver(new Observer(() => {\n\n            const s = this.subject.getRealSubject();\n\n            const diff = Diff(this.last, s)\n            this.last = clone(s);\n\n            for (const [, change] of Object.entries(diff)) {\n                removeElement.call(this, change);\n                insertElement.call(this, change);\n                updateContent.call(this, change);\n                updateAttributes.call(this, change);\n            }\n        }));\n\n        this.eventTypes = ['keyup', 'click', 'change', 'drop', 'touchend', 'input'];\n\n    }\n\n    /**\n     * Defaults: 'keyup', 'click', 'change', 'drop', 'touchend'\n     *\n     * @see {@link https://developer.mozilla.org/de/docs/Web/Events}\n     * @since 1.9.0\n     * @param {Array} types\n     * @return {Updater}\n     */\n    setEventTypes(types) {\n        this.eventTypes = validateArray(types);\n        return this;\n    }\n\n    /**\n     *\n     * @since 1.9.0\n     * @return {Updater}\n     */\n    enableEventProcessing() {\n        this.disableEventProcessing();\n\n        for (const type of this.eventTypes) {\n            this.element.addEventListener(type, getControlEventHandler.call(this));\n        }\n\n        return this;\n\n    }\n\n    /**\n     *\n     * @since 1.9.0\n     * @return {Updater}\n     */\n    disableEventProcessing() {\n\n        for (const type of this.eventTypes) {\n            this.element.removeEventListener(type, getControlEventHandler.call(this));\n        }\n\n        return this;\n\n    }\n\n    // /**\n    //  * \n    //  * @param {string} path\n    //  * @param {*} value\n    //  * @param {boolean} notifyAnyway\n    //  * @return {Updater}\n    //  * @since 1.15.0\n    //  */\n    // setVia(path, value, notifyAnyway) {\n    //     if(isBoolean(notifyAnyway)&&notifyAnyway===true) {\n    //         // the key __init__has no further meaning and is only \n    //         // used to create the diff for empty objects.\n    //         new Pathfinder(this.last).setVia(path, {'__init__': true});\n    //        \n    //     }\n    //\n    //     new Pathfinder(this.subject.getSubject()).setVia(path, value);\n    //     return this;\n    // }\n\n    /**\n     * Let the magic begin\n     *\n     * The run method must be called for the update to start working.\n     *\n     * @return {Promise}\n     */\n    run() {\n        // the key __init__has no further meaning and is only \n        // used to create the diff for empty objects.\n        this.last = {'__init__': true};\n        return this.subject.notifyObservers();\n    }\n\n    /**\n     * If you have passed a ProxyObserver in the constructor, you will get the same object here.\n     * However, if you have passed a simple object, you will get the ProxyObserver here.\n     *\n     * For changes the ProxyObserver must be used.\n     *\n     * @since 1.8.0\n     * @return {ProxyObserver}\n     */\n    getSubject() {\n        return this.subject.getSubject();\n    }\n\n    /**\n     * This method can be used to register commands that can be called via call: instruction.\n     * This can be used to provide a pipe with its own functionality.\n     *\n     * @param {string} name\n     * @param {function} callback\n     * @returns {Transformer}\n     * @throws {TypeError} value is not a string\n     * @throws {TypeError} value is not a function\n     */\n    setCallback(name, callback) {\n        this.callbacks.set(name, callback);\n        return this;\n    }\n\n}\n\n/**\n * @private\n * @since 1.9.0\n * @return {function\n * @this Updater\n */\nfunction getCheckStateCallback() {\n    const self = this;\n\n    return function (current) {\n\n        if (this instanceof HTMLInputElement) {\n            if (['radio', 'checkbox'].indexOf(this.type) !== -1) {\n                return (this.value + \"\" === current + \"\") ? 'true' : undefined\n            }\n        } else if (this instanceof HTMLOptionElement) {\n\n            if (isArray(current) && current.indexOf(this.value) !== -1) {\n                return 'true'\n            }\n            return undefined;\n\n\n        }\n    }\n}\n\n/**\n * @private\n */\nconst symbol = Symbol('EventHandler');\n\n/**\n * @private\n * @return {function}\n * @this Updater\n */\nfunction getControlEventHandler() {\n\n    const self = this;\n\n    if (self[symbol]) {\n        return self[symbol];\n    }\n\n    const pathfinder = new Pathfinder(this.subject.getSubject());\n\n    /**\n     * @throws {Error} the bind argument must start as a value with a path.\n     * @throws {Error} unsupported object\n     * @param {Event} event\n     */\n    self[symbol] = (event) => {\n        const element = event.target;\n\n        if (!element.hasAttribute(ATTRIBUTE_UPDATER_BIND)) {\n            return;\n        }\n\n        let path = element.getAttribute(ATTRIBUTE_UPDATER_BIND);\n\n        if (path.indexOf('path:') !== 0) {\n            throw new Error('the bind argument must start as a value with a path.');\n        }\n\n        path = path.substr(5);\n\n        let value;\n\n        if (element instanceof HTMLInputElement) {\n            switch (element.type) {\n\n                case 'checkbox':\n                    value = element.checked ? element.value : undefined;\n                    break;\n                default:\n                    value = element.value;\n                    break;\n\n\n            }\n        } else if (element instanceof HTMLTextAreaElement) {\n            value = element.value;\n\n        } else if (element instanceof HTMLSelectElement) {\n\n            switch (element.type) {\n                case 'select-one':\n                    value = element.value;\n                    break;\n                case 'select-multiple':\n                    value = element.value;\n\n                    let options = element?.selectedOptions;\n                    if (options === undefined) options = element.querySelectorAll(\":scope option:checked\");\n                    value = Array.from(options).map(({value}) => value);\n\n                    break;\n            }\n\n\n            // values from customelements \n        } else if ((element?.constructor?.prototype && !!Object.getOwnPropertyDescriptor(element.constructor.prototype, 'value')?.['get']) || element.hasOwnProperty('value')) {\n            value = element?.['value'];\n        } else {\n            throw new Error(\"unsupported object\");\n        }\n\n        const copy = clone(self.subject.getRealSubject());\n        const pf = new Pathfinder(copy);\n        pf.setVia(path, value);\n\n        const diff = new Diff(copy, self.subject.getRealSubject());\n\n        if (diff.length > 0) {\n            pathfinder.setVia(path, value);\n        }\n\n    }\n\n    return self[symbol];\n\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n */\nfunction removeElement(change) {\n    for (const [, element] of this.element.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_REMOVE + ']').entries()) {\n        element.parentNode.removeChild(element);\n    }\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n * @throws {Error} the value is not iterable\n * @throws {Error} pipes are not allowed when cloning a node.\n * @throws {Error} no template was found with the specified key.\n * @throws {Error} the maximum depth for the recursion is reached.\n * @this Updater\n */\nfunction insertElement(change) {\n    const self = this;\n    const subject = self.subject.getRealSubject();\n    const document = getDocument();\n\n    let mem = new WeakSet;\n    let wd = 0;\n\n\n    while (true) {\n        let found = false;\n        wd++;\n\n        let p = clone(change?.['path']);\n        if (!isArray(p)) return this;\n\n        while (p.length > 0) {\n            const current = p.join('.');\n            const list = this.element.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_INSERT + '*=\"path:' + current + '\"]').entries()\n\n            for (const [, containerElement] of list) {\n\n                if (mem.has(containerElement)) continue;\n                mem.add(containerElement)\n\n                found = true;\n\n                const attributes = containerElement.getAttribute(ATTRIBUTE_UPDATER_INSERT);\n                let def = attributes.trim();\n                let i = def.indexOf(' ');\n                let key = def.substr(0, i).trim();\n                let refPrefix = key + '-';\n                let cmd = def.substr(i).trim();\n\n                // this case is actually excluded by the query but is nevertheless checked again here\n                if (cmd.indexOf('|') > 0) {\n                    throw new Error(\"pipes are not allowed when cloning a node.\");\n                }\n\n                let pipe = new Pipe(cmd);\n                this.callbacks.forEach((f, n) => {\n                    pipe.setCallback(n, f);\n                })\n\n                let value = pipe.run(subject)\n                let dataPath = cmd.split(':').pop();\n\n                let insertPoint;\n                if (containerElement.hasChildNodes()) {\n                    insertPoint = containerElement.lastChild;\n                }\n\n                if (!isIterable(value)) {\n                    throw new Error('the value is not iterable');\n                }\n\n                let available = new Set;\n\n                for (const [i, obj] of Object.entries(value)) {\n                    let ref = refPrefix + i;\n                    let currentPath = dataPath + \".\" + i;\n\n                    available.add(ref);\n                    let refElement = containerElement.querySelector('[' + ATTRIBUTE_UPDATER_INSERT_REFERENCE + '=\"' + ref + '\"]');\n\n                    if (refElement instanceof HTMLElement) {\n                        insertPoint = refElement;\n                        continue;\n                    }\n\n                    appendNewDocumentFragment(containerElement, key, ref, currentPath);\n                }\n\n                let nodes = containerElement.querySelectorAll('[' + ATTRIBUTE_UPDATER_INSERT_REFERENCE + '*=\"' + refPrefix + '\"]');\n                for (const [, node] of Object.entries(nodes)) {\n                    if (!available.has(node.getAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE))) {\n                        containerElement.removeChild(node);\n                    }\n                }\n            }\n\n            p.pop();\n        }\n\n        if (found === false) break;\n        if (wd++ > 200) {\n            throw new Error('the maximum depth for the recursion is reached.');\n        }\n\n    }\n\n\n}\n\n/**\n *\n * @private\n * @since 1.8.0\n * @param {HTMLElement} container\n * @param {string} key\n * @param {string} ref\n * @param {string} path\n * @throws {Error} no template was found with the specified key.\n */\nfunction appendNewDocumentFragment(container, key, ref, path) {\n\n    let template = findDocumentTemplate(key, container);\n\n    let nodes = template.createDocumentFragment();\n    for (const [, node] of Object.entries(nodes.childNodes)) {\n        if (node instanceof HTMLElement) {\n\n            applyRecursive(node, key, path);\n            node.setAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE, ref);\n        }\n\n        container.appendChild(node);\n    }\n}\n\n/**\n * @private\n * @since 1.10.0\n * @param {HTMLElement} node\n * @param {string} key\n * @param {string} path\n * @return {void}\n */\nfunction applyRecursive(node, key, path) {\n\n    if (node instanceof HTMLElement) {\n\n        if (node.hasAttribute(ATTRIBUTE_UPDATER_REPLACE)) {\n            let value = node.getAttribute(ATTRIBUTE_UPDATER_REPLACE);\n            node.setAttribute(ATTRIBUTE_UPDATER_REPLACE, value.replace(\"path:\" + key, \"path:\" + path));\n        }\n\n        if (node.hasAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)) {\n            let value = node.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES);\n            node.setAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES, value.replace(\"path:\" + key, \"path:\" + path));\n        }\n\n        for (const [, child] of Object.entries(node.childNodes)) {\n            applyRecursive(child, key, path);\n        }\n    }\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n * @this Updater\n */\nfunction updateContent(change) {\n    const self = this;\n    const subject = self.subject.getRealSubject();\n\n    let p = clone(change?.['path']);\n    runUpdateContent.call(this, this.element, p, subject);\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {HTMLElement} container\n * @param {array} parts\n * @param {object} subject\n * @return {void}\n */\nfunction runUpdateContent(container, parts, subject) {\n    if (!isArray(parts)) return;\n    parts = clone(parts);\n\n    let mem = new WeakSet;\n\n    while (parts.length > 0) {\n        const current = parts.join('.');\n        parts.pop();\n\n        // Unfortunately, static data is always changed as well, since it is not possible to react to changes here.\n        for (const [, element] of container.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"static:\"]').entries()) {\n\n            if (mem.has(element)) continue;\n            mem.add(element)\n\n            const attributes = element.getAttribute(ATTRIBUTE_UPDATER_REPLACE)\n            let cmd = attributes.trim();\n\n            let pipe = new Pipe(cmd);\n            this.callbacks.forEach((f, n) => {\n                pipe.setCallback(n, f);\n            })\n\n            let value = pipe.run(subject)\n\n            if (value instanceof HTMLElement) {\n                while (element.firstChild) {\n                    element.removeChild(element.firstChild);\n                }\n                element.addNode(value);\n            } else {\n                element.innerHTML = value;\n            }\n\n        }\n    }\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {string} path\n * @param {object} change\n * @return {void}\n */\nfunction updateAttributes(change) {\n    const subject = this.subject.getRealSubject();\n    let p = clone(change?.['path']);\n    runUpdateAttributes.call(this, this.element, p, subject);\n}\n\n/**\n * @private\n * @param {HTMLElement} container\n * @param {array} parts\n * @param {object} subject\n * @return {void}\n * @this Updater\n */\nfunction runUpdateAttributes(container, parts, subject) {\n\n    const self = this;\n\n    if (!isArray(parts)) return;\n    parts = clone(parts);\n\n    let mem = new WeakSet;\n\n    while (parts.length > 0) {\n        const current = parts.join('.');\n        parts.pop();\n\n        for (const [, element] of container.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*=\"path:' + current + '\"]').entries()) {\n\n            if (mem.has(element)) continue;\n            mem.add(element)\n\n            const attributes = element.getAttribute(ATTRIBUTE_UPDATER_ATTRIBUTES)\n\n            for (let [, def] of Object.entries(attributes.split(','))) {\n                def = def.trim();\n                let i = def.indexOf(' ');\n                let name = def.substr(0, i).trim();\n                let cmd = def.substr(i).trim();\n\n                let pipe = new Pipe(cmd);\n\n                self.callbacks.forEach((f, n) => {\n                    pipe.setCallback(n, f, element);\n                })\n\n                let value = pipe.run(subject)\n\n                if (value === undefined) {\n                    element.removeAttribute(name)\n\n                } else if (element.getAttribute(name) !== value) {\n                    element.setAttribute(name, value);\n                }\n\n                handleInputControlAttributeUpdate.call(this, element, name, value);\n\n\n            }\n        }\n\n    }\n\n}\n\n/**\n * @private\n * @param {HTMLElement|*} element\n * @param {string} name\n * @param {string|number|undefined} value\n * @return {void}\n * @this Updater\n */\n\nfunction handleInputControlAttributeUpdate(element, name, value) {\n    const self = this;\n\n    if (element instanceof HTMLSelectElement) {\n\n\n        switch (element.type) {\n            case 'select-multiple':\n\n                for (const [index, opt] of Object.entries(element.options)) {\n                    if (value.indexOf(opt.value) !== -1) {\n                        opt.selected = true;\n                    } else {\n                        opt.selected = false;\n                    }\n                }\n\n                break;\n            case 'select-one':\n                // Only one value may be selected\n\n                for (const [index, opt] of Object.entries(element.options)) {\n                    if (opt.value === value) {\n                        element.selectedIndex = index;\n                        break;\n                    }\n                }\n\n                break;\n        }\n\n\n    } else if (element instanceof HTMLInputElement) {\n        switch (element.type) {\n\n            case 'radio':\n                if (name === 'checked' && value !== undefined) {\n                    element.checked = true;\n                } else {\n                    element.checked = false;\n                }\n\n                break;\n\n            case 'checkbox':\n                if (name === 'checked' && value !== undefined) {\n                    element.checked = true;\n                } else {\n                    element.checked = false;\n                }\n\n                break;\n            case 'text':\n            default:\n                if (name === 'value') {\n                    element.value = (value === undefined ? \"\" : value);\n                }\n\n                break;\n\n\n        }\n    } else if (element instanceof HTMLTextAreaElement) {\n        if (name === 'value') {\n            element.value = (value === undefined ? \"\" : value);\n        }\n    }\n\n}\n\nassignToNamespace('Monster.DOM', Updater);\nexport {Monster, Updater}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from \"../types/global.js\";\nimport {validateString} from \"../types/validate.js\";\n\n\n/**\n * this method fetches the document object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getDocument())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getDocument())\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {object}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n */\nfunction getDocument() {\n    let document = getGlobal()?.['document'];\n    if (typeof document !== 'object') {\n        throw new Error(\"not supported environment\")\n    }\n\n    return document;\n}\n\n/**\n * this method fetches the window object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getWindow())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getWindow(null))\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    getGlobal()['window']=window;\n * \n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {object}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n */\nfunction getWindow() {\n    let window = getGlobal()?.['window'];\n    if (typeof window !== 'object') {\n        throw new Error(\"not supported environment\")\n    }\n\n    return window;\n}\n\n\n/**\n *\n *\n * this method fetches the document object\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(Monster.DOM.getDocumentFragmentFromString())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/util.js';\n * console.log(getDocumentFragmentFromString('<div></div>'))\n * </script>\n * ```\n *\n * in nodejs this functionality can be performed with [jsdom](https://www.npmjs.com/package/jsdom).\n *\n * ```\n * import {JSDOM} from \"jsdom\"\n * if (typeof window !== \"object\") {\n *    const {window} = new JSDOM('', {\n *        url: 'http://example.com/',\n *        pretendToBeVisual: true\n *    });\n *\n *    [\n *        'self',\n *        'document',\n *        'Document',\n *        'Node',\n *        'Element',\n *        'HTMLElement',\n *        'DocumentFragment',\n *        'DOMParser',\n *        'XMLSerializer',\n *        'NodeFilter',\n *        'InputEvent',\n *        'CustomEvent'\n *    ].forEach(key => (getGlobal()[key] = window[key]));\n * }\n * ```\n *\n * @returns {DocumentFragment}\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {Error} not supported environment\n * @throws {TypeError} value is not a string\n */\nfunction getDocumentFragmentFromString(html) {\n    validateString(html);\n\n    const document = getDocument();\n    const template = document.createElement('template');\n    template.innerHTML = html;\n\n    return template.content;\n}\n\n\nassignToNamespace('Monster.DOM', getWindow, getDocument, getDocumentFragmentFromString);\nexport {Monster, getWindow, getDocument, getDocumentFragmentFromString}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray} from \"../types/is.js\";\nimport {validateInstance, validateString} from \"../types/validate.js\";\nimport {getDocument} from \"./util.js\";\n\n/**\n * You can call the function via the monster namespace `new Monster.DOM.fireEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(new Monster.DOM.fireEvent())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(fireEvent())\n * </script>\n * ```\n *\n * @param {HTMLElement|HTMLCollection|NodeList} element\n * @param {string} type\n * @return {void}\n * @since 1.10.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not an instance of HTMLElement or HTMLCollection\n * @summary Construct and send and event\n */\nfunction fireEvent(element, type) {\n\n    const document = getDocument();\n\n    if (element instanceof HTMLElement) {\n\n        if (type === 'click') {\n            element.click();\n            return;\n        }\n\n        let event = new Event(validateString(type), {\n            bubbles: true,\n            cancelable: true,\n        });\n\n        element.dispatchEvent(event);\n\n    } else if (element instanceof HTMLCollection || element instanceof NodeList) {\n        for (let e of element) {\n            fireEvent(e, type);\n        }\n    } else {\n        throw new TypeError('value is not an instance of HTMLElement or HTMLCollection')\n    }\n\n}\n\n/**\n * This function gets the path `Event.composedPath()` from an event and tries to find the next element\n * up the tree `element.closest()` with the attribute and value. If no value, or a value that is undefined or null, \n * is specified, only the attribute is searched.\n *\n * You can call the function via the monster namespace `new Monster.DOM.findTargetElementFromEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(new Monster.DOM.findTargetElementFromEvent())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/events.js';\n * console.log(findTargetElementFromEvent())\n * </script>\n * ```\n *\n * @since 1.14.0\n * @param {Event} event\n * @param {string} attributeName\n * @param {string|null|undefined} attributeValue\n * @throws {Error} unsupported event\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not a string\n * @throws {TypeError} value is not an instance of HTMLElement\n * @summary Help function to find the appropriate control\n */\nfunction findTargetElementFromEvent(event, attributeName, attributeValue) {\n    validateInstance(event, Event);\n\n    if (typeof event.composedPath !== 'function') {\n        throw new Error('unsupported event');\n    }\n\n    const path = event.composedPath();\n    const element = path?.[0];\n\n    // closest cannot be used here, because closest is not correct for slotted elements\n    if (isArray(path)) {\n        for (let i = 0; i < path.length; i++) {\n            const o = path[i];\n\n            if (o instanceof HTMLElement &&\n                o.hasAttribute(attributeName)\n                && (attributeValue===undefined || o.getAttribute(attributeName) === attributeValue)) {\n                return o;\n            }\n        }\n    }\n\n    return undefined;\n\n}\n\n\nassignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent);\nexport {Monster, findTargetElementFromEvent, fireEvent}\n","'use strict';\n\nimport {parseLocale} from \"../i18n/locale.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getDocument} from \"./util.js\";\n\n/**\n * @private\n * @type {string}\n */\nconst DEFAULT_LANGUAGE = 'en';\n\n/**\n * With this function you can read the language version set by the document.\n * For this the attribute `lang` in the html tag is read. If no attribute is set, `en` is used as default.\n *\n * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.\n *\n * ```\n * <script type=\"module\">\n * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/locale.js';\n * console.log(new Monster.DOM.getLocaleOfDocument())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/dom/locale.js';\n * console.log(new getLocaleOfDocument())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @throws {TypeError} value is not a string\n * @throws {Error} unsupported locale\n * @summary Tries to determine the locale used\n */\nfunction getLocaleOfDocument() {\n\n    const document = getDocument();\n\n    let html = document.querySelector('html')\n    if (html instanceof HTMLElement && html.hasAttribute('lang')) {\n        let locale = html.getAttribute('lang');\n        if (locale) {\n            return new parseLocale(locale)\n        }\n    }\n\n    return parseLocale(DEFAULT_LANGUAGE);\n}\n\nassignToNamespace('Monster.DOM', getLocaleOfDocument);\nexport {Monster, getLocaleOfDocument}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\n\n/**\n * @memberOf Monster.I18n\n * @type {symbol}\n */\nconst propertiesSymbol = Symbol('properties');\n\n/**\n * @type {symbol}\n * @memberOf Monster.I18n\n */\nconst localeStringSymbol = Symbol('localeString');\n\n/**\n * You can create an instance via the monster namespace `new Monster.I18n.Locale()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Monster.I18n.Locale())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Locale())\n * </script>\n * ```\n *\n * RFC\n *\n * ```\n * A Language-Tag consists of:\n * langtag                           ; generated tag\n *           -or- private-use        ; a private use tag\n *\n * langtag       = (language\n *                    [\"-\" script]\n *                    [\"-\" region]\n *                    *(\"-\" variant)\n *                    *(\"-\" extension)\n *                    [\"-\" privateuse])\n *\n * language      = \"en\", \"ale\", or a registered value\n *\n * script        = \"Latn\", \"Cyrl\", \"Hant\" ISO 15924 codes\n *\n * region        = \"US\", \"CS\", \"FR\" ISO 3166 codes\n *                 \"419\", \"019\",  or UN M.49 codes\n *\n * variant       = \"rozaj\", \"nedis\", \"1996\", multiple subtags can be used in a tag\n *\n * extension     = single letter followed by additional subtags; more than one extension\n *                 may be used in a language tag\n *\n * private-use   = \"x-\" followed by additional subtags, as many as are required\n *                 Note that these can start a tag or appear at the end (but not\n *                 in the middle)\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see https://datatracker.ietf.org/doc/html/rfc3066\n */\nclass Locale extends Base {\n\n    /**\n     * @param {string} language\n     * @param {string} [region]\n     * @param {string} [script]\n     * @param {string} [variants]\n     * @param {string} [extlang]\n     * @param {string} [privateUse]\n     * @throws {Error} unsupported locale\n     */\n    constructor(language, region, script, variants, extlang, privateUse) {\n        super();\n\n        this[propertiesSymbol] = {\n            language: (language === undefined) ? undefined : validateString(language),\n            script: (script === undefined) ? undefined : validateString(script),\n            region: (region === undefined) ? undefined : validateString(region),\n            variants: (variants === undefined) ? undefined : validateString(variants),\n            extlang: (extlang === undefined) ? undefined : validateString(extlang),\n            privateUse: (privateUse === undefined) ? undefined : validateString(privateUse),\n        };\n\n        let s = [];\n        if (language !== undefined) s.push(language);\n        if (script !== undefined) s.push(script);\n        if (region !== undefined) s.push(region);\n        if (variants !== undefined) s.push(variants);\n        if (extlang !== undefined) s.push(extlang);\n        if (privateUse !== undefined) s.push(privateUse);\n\n        if (s.length === 0) {\n            throw new Error('unsupported locale');\n        }\n\n        this[localeStringSymbol] = s.join('-');\n\n    }\n\n    /**\n     * @return {string}\n     */\n    get localeString() {\n        return this[localeStringSymbol];\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get language() {\n        return this[propertiesSymbol].language;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get region() {\n        return this[propertiesSymbol].region;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get script() {\n        return this[propertiesSymbol].script;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get variants() {\n        return this[propertiesSymbol].variants;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get extlang() {\n        return this[propertiesSymbol].extlang;\n    }\n\n    /**\n     * @return {string|undefined}\n     */\n    get privateUse() {\n        return this[propertiesSymbol].privateValue;\n    }\n\n\n    /**\n     * @return {string}\n     */\n    toString() {\n        return \"\" + this.localeString;\n    }\n\n    /**\n     * @return {Monster.I18n.LocaleMap}\n     */\n    getMap() {\n        return clone(this[propertiesSymbol])\n    }\n\n\n}\n\n/**\n * @typedef {Object} LocaleMap\n * @property {string} language\n * @property {string} script\n * @property {string} region\n * @property {string} variants\n * @property {string} extlang\n * @property {string} privateUse\n * @memberOf Monster.I18n\n */\n\n/**\n * Parse local according to rfc4646 standard\n *\n * Limitations: The regex cannot handle multiple variants or private.\n *\n * You can call the method via the monster namespace `Monster.I18n.createLocale()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(new Monster.I18n.createLocale())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/locale.js';\n * console.log(createLocale())\n * </script>\n * ```\n *\n * RFC\n *\n * ```\n *   The syntax of the language tag in ABNF [RFC4234] is:\n *\n *   Language-Tag  = langtag\n *                 / privateuse             ; private use tag\n *                 / grandfathered          ; grandfathered registrations\n *\n *   langtag       = (language\n *                    [\"-\" script]\n *                    [\"-\" region]\n *                    *(\"-\" variant)\n *                    *(\"-\" extension)\n *                    [\"-\" privateuse])\n *\n *   language      = (2*3ALPHA [ extlang ]) ; shortest ISO 639 code\n *                 / 4ALPHA                 ; reserved for future use\n *                 / 5*8ALPHA               ; registered language subtag\n *\n *   extlang       = *3(\"-\" 3ALPHA)         ; reserved for future use\n *\n *   script        = 4ALPHA                 ; ISO 15924 code\n *\n *   region        = 2ALPHA                 ; ISO 3166 code\n *                 / 3DIGIT                 ; UN M.49 code\n *\n *   variant       = 5*8alphanum            ; registered variants\n *                 / (DIGIT 3alphanum)\n *\n *   extension     = singleton 1*(\"-\" (2*8alphanum))\n *\n *   singleton     = %x41-57 / %x59-5A / %x61-77 / %x79-7A / DIGIT\n *                 ; \"a\"-\"w\" / \"y\"-\"z\" / \"A\"-\"W\" / \"Y\"-\"Z\" / \"0\"-\"9\"\n *                 ; Single letters: x/X is reserved for private use\n *\n *   privateuse    = (\"x\"/\"X\") 1*(\"-\" (1*8alphanum))\n *\n *   grandfathered = 1*3ALPHA 1*2(\"-\" (2*8alphanum))\n *                   ; grandfathered registration\n *                   ; Note: i is the only singleton\n *                   ; that starts a grandfathered tag\n *\n *   alphanum      = (ALPHA / DIGIT)       ; letters and numbers\n *\n *                        Figure 1: Language Tag ABNF\n * ```\n *\n * @param {string} locale\n * @returns {Locale}\n * @since 1.14.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @throws {TypeError} value is not a string\n * @throws {Error} unsupported locale\n */\nfunction parseLocale(locale) {\n\n    locale = validateString(locale).replace(/_/g, \"-\");\n\n    let language, region, variants, parts, script, extlang,\n        regexRegular = \"(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\",\n        regexIrregular = \"(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\",\n        regexGrandfathered = \"(\" + regexIrregular + \"|\" + regexRegular + \")\",\n        regexPrivateUse = \"(x(-[A-Za-z0-9]{1,8})+)\",\n        regexSingleton = \"[0-9A-WY-Za-wy-z]\",\n        regexExtension = \"(\" + regexSingleton + \"(-[A-Za-z0-9]{2,8})+)\",\n        regexVariant = \"([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})\",\n        regexRegion = \"([A-Za-z]{2}|[0-9]{3})\",\n        regexScript = \"([A-Za-z]{4})\",\n        regexExtlang = \"([A-Za-z]{3}(-[A-Za-z]{3}){0,2})\",\n        regexLanguage = \"(([A-Za-z]{2,3}(-\" + regexExtlang + \")?)|[A-Za-z]{4}|[A-Za-z]{5,8})\",\n        regexLangtag = \"(\" + regexLanguage + \"(-\" + regexScript + \")?\" + \"(-\" + regexRegion + \")?\" + \"(-\" + regexVariant + \")*\" + \"(-\" + regexExtension + \")*\" + \"(-\" + regexPrivateUse + \")?\" + \")\",\n        regexLanguageTag = \"^(\" + regexGrandfathered + \"|\" + regexLangtag + \"|\" + regexPrivateUse + \")$\",\n        regex = new RegExp(regexLanguageTag), match;\n\n\n    if ((match = regex.exec(locale)) !== null) {\n        if (match.index === regex.lastIndex) {\n            regex.lastIndex++;\n        }\n    }\n\n    if (match === undefined || match === null) {\n        throw new Error('unsupported locale');\n    }\n\n    if (match[6] !== undefined) {\n        language = match[6];\n\n        parts = language.split('-');\n        if (parts.length > 1) {\n            language = parts[0];\n            extlang = parts[1];\n        }\n\n    }\n\n    if (match[14] !== undefined) {\n        region = match[14];\n    }\n\n    if (match[12] !== undefined) {\n        script = match[12];\n    }\n\n    if (match[16] !== undefined) {\n        variants = match[16];\n    }\n\n    return new Locale(language, region, script, variants, extlang);\n\n}\n\n\nassignToNamespace('Monster.I18n', Locale, parseLocale);\nexport {Monster, Locale, parseLocale}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {BaseWithOptions} from \"../types/basewithoptions.js\";\nimport {Locale} from \"./locale.js\"\nimport {Translations} from \"./translations.js\"\n\n/**\n * A provider makes a translation object available.\n *\n * You can call the method via the monster namespace `new Monster.I18n.Provider()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/provider.js';\n * console.log(new Monster.I18n.Provider())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/provider.js';\n * console.log(new Provider())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}\n */\nclass Provider extends BaseWithOptions {\n\n    /**\n     * @param {Locale|string} locale\n     * @return {Promise}\n     */\n    getTranslations(locale) {\n        return new Promise((resolve, reject) => {\n            try {\n                resolve(new Translations(locale));\n            } catch (e) {\n                reject(e);\n            }\n\n        });\n    }\n\n}\n\n\nassignToNamespace('Monster.I18n', Provider);\nexport {Monster, Provider}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"./base.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * This is the base class with options from which some monster classes are derived.\n *\n * You can call the method via the monster namespace `new Monster.Types.BaseWithOptions()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/basewithoptions.js';\n * console.log(new Monster.Types.BaseWithOptions())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {BaseWithOptions} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/basewithoptions.js';\n * console.log(new BaseWithOptions())\n * </script>\n * ```\n *\n * The class was formerly called Object.\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n */\nclass BaseWithOptions extends Base {\n\n    /**\n     *\n     * @param {object} options\n     */\n    constructor(options) {\n        super();\n\n        if (options === undefined) {\n            options = {};\n        }\n\n        this[optionsSymbol] = extend({}, this.defaults, validateObject(options));\n\n    }\n\n    /**\n     * can be overridden by child class values\n     *\n     * @return {object}\n     */\n    get defaults() {\n        return {}\n    }\n\n    /**\n     * nested options can be specified by path `a.b.c`\n     *\n     * @param {string} path\n     * @param {*} defaultValue\n     * @return {*}\n     * @since 1.10.0\n     */\n    getOption(path, defaultValue) {\n        let value;\n\n        try {\n            value = new Pathfinder(this[optionsSymbol]).getVia(path);\n        } catch (e) {\n\n        }\n\n        if (value === undefined) return defaultValue;\n        return value;\n    }\n\n\n}\n\nassignToNamespace('Monster.Types', BaseWithOptions);\nexport {Monster, BaseWithOptions}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {isObject, isString} from \"../types/is.js\";\nimport {validateInstance, validateInteger, validateObject, validateString} from \"../types/validate.js\";\nimport {Locale, parseLocale} from \"./locale.js\";\n\n\n/**\n * With this class you can manage translations and access the keys.\n *\n * You can call the method via the monster namespace `new Monster.I18n.Translations()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/translations.js';\n * console.log(new Monster.I18n.Translations())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/translations.js';\n * console.log(new Translations())\n * </script>\n * ```\n *\n * @example\n *\n * const translation = new Translations(parseLocale('en-GB'));\n *\n * translation.assignTranslations({\n *            text1: \"abc\",\n *            text2: {'other': 'xyz'}\n *         });\n *\n * translation.getText('text1);\n * translation.getPluralRuleText('text1',2);\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n\n * @see https://datatracker.ietf.org/doc/html/rfc3066\n */\nclass Translations extends Base {\n\n    /**\n     *\n     * @param {Locale} locale\n     */\n    constructor(locale) {\n        super();\n\n        if (isString(locale)) {\n            locale = parseLocale(locale);\n        }\n\n        this.locale = validateInstance(locale, Locale);\n        this.storage = new Map();\n\n    }\n\n\n    /**\n     * Fetches a text using the specified key.\n     * If no suitable key is found, `defaultText` is taken.\n     *\n     * @param {string} key\n     * @param {string|undefined} defaultText\n     * @return {string}\n     * @throws {Error} key not found\n     */\n    getText(key, defaultText) {\n        if (!this.storage.has(key)) {\n            if (defaultText === undefined) {\n                throw new Error('key ' + key + ' not found');\n            }\n\n            return validateString(defaultText);\n        }\n\n        let r = this.storage.get(key);\n        if (isObject(r)) {\n            return this.getPluralRuleText(key, 'other', defaultText);\n        }\n\n        return this.storage.get(key);\n    }\n\n    /**\n     * A number `count` can be passed to this method. In addition to a number, one of the keywords can also be passed directly.\n     * \"zero\", \"one\", \"two\", \"few\", \"many\" and \"other\". Remember: not every language has all rules.\n     *\n     * The appropriate text for this number is then selected. If no suitable key is found, `defaultText` is taken.\n     *\n     * @param {string} key\n     * @param {integer|count} count\n     * @param {string|undefined} defaultText\n     * @return {string}\n     */\n    getPluralRuleText(key, count, defaultText) {\n        if (!this.storage.has(key)) {\n            return validateString(defaultText);\n        }\n\n        let r = validateObject(this.storage.get(key));\n\n        let keyword;\n        if (isString(count)) {\n            keyword = count.toLocaleString();\n        } else {\n            count = validateInteger(count);\n            if (count === 0) {\n                // special handlig for zero count\n                if (r.hasOwnProperty('zero')) {\n                    return validateString(r['zero']);\n                }\n            }\n\n            keyword = new Intl.PluralRules(this.locale.toString()).select(validateInteger(count));\n        }\n\n        if (r.hasOwnProperty(keyword)) {\n            return validateString(r[keyword]);\n        }\n\n        if (r.hasOwnProperty(DEFAULT_KEY)) {\n            return validateString(r[DEFAULT_KEY]);\n        }\n\n        return validateString(defaultText);\n    }\n\n    /**\n     * Set a text for a key\n     *\n     * ```\n     * translations.setText(\"text1\": \"Make my day!\");\n     * // plural rules\n     * translations.setText(\"text6\": {\n     *     \"zero\": \"There are no files on Disk.\",\n     *     \"one\": \"There is one file on Disk.\",\n     *     \"other\": \"There are files on Disk.\"\n     *     \"default\": \"There are files on Disk.\"\n     * });\n     * ```\n     *\n     * @param {string} key\n     * @param {string|object} text\n     * @return {Translations}\n     * @throws {TypeError} value is not a string or object\n     */\n    setText(key, text) {\n\n        if (isString(text) || isObject(text)) {\n            this.storage.set(validateString(key), text);\n            return this;\n        }\n\n        throw new TypeError('value is not a string or object');\n\n    }\n\n    /**\n     * This method can be used to transfer overlays from an object. The keys are transferred and the values are entered as text.\n     *\n     * The values can either be character strings or, in the case of texts with plural forms, objects. The plural forms must be stored as text via a standard key \"zero\", \"one\", \"two\", \"few\", \"many\" and \"other\".\n     *\n     * Additionally, the key default can be specified, which will be used if no other key fits.\n     *\n     * In some languages, like for example in german, there is no own more number at the value 0. In these languages the function applies additionally zero.\n     *\n     * ```\n     * translations.assignTranslations({\n     *   \"text1\": \"Make my day!\",\n     *   \"text2\": \"I'll be back!\",\n     *   \"text6\": {\n     *     \"zero\": \"There are no files on Disk.\",\n     *     \"one\": \"There is one file on Disk.\",\n     *     \"other\": \"There are files on Disk.\"\n     *     \"default\": \"There are files on Disk.\"\n     * });\n     * ```\n     *\n     * @param {object} translations\n     * @return {Translations}\n     */\n    assignTranslations(translations) {\n        validateObject(translations);\n\n        for (const [k, v] of Object.entries(translations)) {\n            this.setText(k, v);\n        }\n\n        return this;\n\n    }\n\n}\n\n\nassignToNamespace('Monster.I18n', Translations);\nexport {Monster, Translations}\n","'use strict';\n\nimport {PROPERTY_KEY_INTERNALDATA} from \"../../constants.js\";\nimport {extend} from \"../../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../../namespace.js';\nimport {Formatter} from \"../../text/formatter.js\";\nimport {getGlobalFunction} from \"../../types/global.js\";\nimport {isInstance, isString} from \"../../types/is.js\";\nimport {validateObject, validateString} from \"../../types/validate.js\";\nimport {parseLocale} from \"../locale.js\";\nimport {Provider} from \"../provider.js\";\nimport {Translations} from \"../translations.js\";\n\n/**\n * @private\n * @type {symbol}\n */\nconst optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);\n\n/**\n * The fetch provider retrieves a JSON file from the given URL and returns a translation object.\n *\n * You can create the object via the monster namespace `new Monster.I18n.Provider.Fetch()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/providers/fetch.js';\n * console.log(new Monster.I18n.Providers.Fetch())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/i18n/providers/fetch.js';\n * console.log(new Fetch())\n * </script>\n * ```\n *\n * @since 1.13.0\n * @copyright schukai GmbH\n * @memberOf Monster.I18n.Providers\n * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}\n */\nclass Fetch extends Provider {\n\n    /**\n     * As options the key `fetch` can be passed. This config object is passed to the fetch method as init.\n     *\n     * @param {string|URL} url\n     * @param {Object} options see {@link Monster.I18n.Providers.Fetch#defaults}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/fetch}\n     */\n    constructor(url, options) {\n        super(options);\n\n        if (isInstance(url, URL)) {\n            url = url.toString();\n        }\n\n        if (options === undefined) {\n            options = {};\n        }\n\n        validateString(url);\n\n        /**\n         * @property {string}\n         */\n        this.url = url;\n\n        /**\n         * @private\n         * @property {Object} options\n         */\n        this[optionsSymbol] = extend({}, super.defaults, this.defaults, validateObject(options));\n\n    }\n\n    /**\n     * Defaults\n     *\n     * @property {Object} fetch\n     * @property {String} fetch.method=GET\n     * @property {String} fetch.mode=cors\n     * @property {String} fetch.cache=no-cache\n     * @property {String} fetch.credentials=omit\n     * @property {String} fetch.redirect=follow\n     * @property {String} fetch.referrerPolicy=no-referrer\n     *\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API}\n     */\n    get defaults() {\n\n        return {\n            fetch: {\n                method: 'GET', // *GET, POST, PUT, DELETE, etc.\n                mode: 'cors', // no-cors, *cors, same-origin\n                cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\n                credentials: 'omit', // include, *same-origin, omit\n                redirect: 'follow', // manual, *follow, error\n                referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url\n            }\n        }\n\n    }\n\n    /**\n     *\n     * @param {Locale|string} locale\n     * @return {Promise}\n     */\n    getTranslations(locale) {\n\n        if (isString(locale)) {\n            locale = parseLocale(locale);\n        }\n\n        let formatter = new Formatter(locale.getMap())\n\n        return getGlobalFunction('fetch')(formatter.format(this.url), this.getOption('fetch', {}))\n            .then((response) => response.json()).then(data => {\n                return new Translations(locale).assignTranslations(data);\n            });\n\n    }\n\n\n}\n\n\nassignToNamespace('Monster.I18n.Providers', Fetch);\nexport {Monster, Fetch}\n","'use strict';\n\nimport {Pipe} from \"../data/pipe.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"../types/base.js\";\nimport {validateObject, validateString} from \"../types/validate.js\";\n\n\n/**\n * Messages can be formatted with the formatter. To do this, an object with the values must be passed to the formatter. The message can then contain placeholders.\n *\n * Look at the example below. The placeholders use the logic of Pipe.\n *\n * You can call the method via the monster namespace `new Monster.Text.Formatter()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/text/formatter.js';\n * console.log(new Monster.Text.Formatter())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/text/formatter.js';\n * console.log(new Formatter())\n * </script>\n * ```\n *\n * @example\n *\n * new Formatter({\n *       a: {\n *           b: {\n *               c: \"Hello\"\n *           },\n *           d: \"world\",\n *       }\n *   }).format(\"${a.b.c} ${a.d | ucfirst}!\");\n *\n * // ↦ Hello World!\n *\n * @since 1.12.0\n * @copyright schukai GmbH\n * @memberOf Monster.Text\n */\nclass Formatter extends Base {\n\n    /**\n     * Default values for the markers are `${` and `}`\n     *\n     * @param {object} object\n     * @throws {TypeError} value is not a object\n     */\n    constructor(object) {\n        super();\n        this.object = validateObject(object);\n        this.openMarker = '${';\n        this.closeMarker = '}';\n    }\n\n    /**\n     * Set new Marker\n     *\n     * Default values for the markers are `${` and `}`\n     *\n     * ```\n     * formatter.setMarker('#'); // open and close are both #\n     * formatter.setMarker('[',']');\n     * formatter.setMarker('i18n{','}');\n     * ```\n     *\n     * @param {string} open\n     * @param {string} close\n     * @return {Formatter}\n     * @since 1.12.0\n     * @throws {TypeError} value is not a string\n     */\n    setMarker(open, close) {\n\n        if (close === undefined) {\n            close = open;\n        }\n\n        this.openMarker = validateString(open);\n        this.closeMarker = validateString(close);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} text\n     * @return {string}\n     * @throws {TypeError} value is not a string\n     */\n    format(text) {\n        return tokenizer.call(this, validateString(text))\n    }\n\n}\n\n/**\n * @private\n * @since 1.12.0\n * @param text\n * @return {string}\n */\nfunction tokenizer(text) {\n    const self = this;\n\n    let formatted = [];\n\n    while (true) {\n\n\n        let startIndex = text.indexOf(self.openMarker);\n        // no marker \n        if (startIndex === -1) {\n            formatted.push(text);\n            break;\n        } else if (startIndex > 0) {\n            formatted.push(text.substring(0, startIndex))\n            text = text.substring(startIndex)\n        }\n\n        let endIndex = text.substring(self.openMarker.length).indexOf(self.closeMarker) + self.openMarker.length;\n\n        if (endIndex === -1) {\n            throw new Error(\"syntax error in formatter template\")\n            return;\n        }\n\n        let command = \"path:\" + text.substring(self.openMarker.length, endIndex);\n\n        formatted.push(validateString(new Pipe(command).run(self.object)));\n\n        text = text.substring(endIndex + self.closeMarker.length);\n\n    }\n\n    return formatted.join('');\n}\n\nassignToNamespace('Monster.Text', Formatter);\nexport {Monster, Formatter}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInstance, validateInteger} from \"../types/validate.js\";\nimport {LogEntry} from \"./logentry.js\";\nimport {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from \"./logger.js\";\n\n/**\n * you can call the method via the monster namespace `new Monster.Logging.Handler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler.js';\n * console.log(new Monster.Logging.Handler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler.js';\n * console.log(new Handler())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass Handler extends Base {\n    constructor() {\n        super();\n\n        /**\n         * Loglevel\n         *\n         * @type {integer}\n         */\n        this.loglevel = OFF;\n    }\n\n    /**\n     * This is the central log function. this method must be\n     * overwritten by derived handlers with their own logic.\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {LogEntry} entry\n     * @returns {boolean}\n     */\n    log(entry) {\n        validateInstance(entry, LogEntry);\n\n        if (this.loglevel < entry.getLogLevel()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * set loglevel\n     *\n     * @param {integer} loglevel\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setLogLevel(loglevel) {\n        validateInteger(loglevel)\n        this.loglevel = loglevel;\n        return this;\n    }\n\n    /**\n     * get loglevel\n     *\n     * @returns {integer}\n     * @since 1.5.0\n     */\n    getLogLevel() {\n        return this.loglevel;\n    }\n\n    /**\n     *  Set log level to All\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setAll() {\n        this.setLogLevel(ALL);\n        return this;\n    };\n\n    /**\n     * Set log level to Trace\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setTrace() {\n        this.setLogLevel(TRACE);\n        return this;\n    };\n\n    /**\n     * Set log level to Debug\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setDebug() {\n        this.setLogLevel(DEBUG);\n        return this;\n    };\n\n    /**\n     * Set log level to Info\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setInfo() {\n        this.setLogLevel(INFO);\n        return this;\n    };\n\n    /**\n     * Set log level to Warn\n     *\n     * @returns {undefined}\n     * @since 1.5.0\n     */\n    setWarn() {\n        this.setLogLevel(WARN);\n        return this;\n    };\n\n    /**\n     * Set log level to Error\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setError() {\n        this.setLogLevel(ERROR);\n        return this;\n    };\n\n    /**\n     * Set log level to Fatal\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setFatal() {\n        this.setLogLevel(FATAL);\n        return this;\n    };\n\n\n    /**\n     * Set log level to Off\n     *\n     * @returns {Handler}\n     * @since 1.5.0\n     */\n    setOff() {\n        this.setLogLevel(OFF);\n        return this;\n    };\n\n\n}\n\n\nassignToNamespace('Monster.Logging', Handler);\nexport {Monster, Handler};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInteger} from '../types/validate.js';\n\n\n/**\n * you can call the method via the monster namespace `new Monster.Logging.LogEntry()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logentry.js';\n * console.log(new Monster.Logging.LogEntry())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logentry.js';\n * console.log(new LogEntry())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass LogEntry extends Base {\n    /**\n     *\n     * @param {Integer} loglevel\n     * @param {...*} args\n     */\n    constructor(loglevel, ...args) {\n        super();\n        validateInteger(loglevel);\n\n        this.loglevel = loglevel\n        this.arguments = args\n    }\n\n    /**\n     *\n     * @returns {integerr}\n     */\n    getLogLevel() {\n        return this.loglevel\n    }\n\n    /**\n     *\n     * @returns {array}\n     */\n    getArguments() {\n        return this.arguments\n    }\n\n}\n\nassignToNamespace('Monster.Logging', LogEntry);\nexport {Monster, LogEntry}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Handler} from '../logging/handler.js';\nimport {LogEntry} from '../logging/logentry.js';\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {validateInteger, validateObject, validateString} from '../types/validate.js';\n\n\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst ALL = 255;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst TRACE = 64;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst DEBUG = 32;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst INFO = 16;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst WARN = 8;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst ERROR = 4;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst FATAL = 2;\n/**\n * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF\n * @type {number}\n * @memberOf Monster.Logging\n */\nconst OFF = 0;\n\n/**\n * You can create an object of the class simply by using the namespace `new Monster.Logging.Logger()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logger.js';\n * console.log(new Monster.Logging.Logger())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/logger.js';\n * console.log(new Logger())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging\n */\nclass Logger extends Base {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.handler = new Set;\n    }\n\n    /**\n     *\n     * @param {Handler} handler\n     * @returns {Logger}\n     * @throws {Error} the handler must be an instance of Handler\n     */\n    addHandler(handler) {\n        validateObject(handler)\n        if (!(handler instanceof Handler)) {\n            throw new Error(\"the handler must be an instance of Handler\")\n        }\n\n        this.handler.add(handler)\n        return this;\n    }\n\n    /**\n     *\n     * @param {Handler} handler\n     * @returns {Logger}\n     * @throws {Error} the handler must be an instance of Handler\n     */\n    removeHandler(handler) {\n        validateObject(handler)\n        if (!(handler instanceof Handler)) {\n            throw new Error(\"the handler must be an instance of Handler\")\n        }\n\n        this.handler.delete(handler);\n        return this;\n    }\n\n    /**\n     * log Trace message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logTrace() {\n        triggerLog.apply(this, [TRACE, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Debug message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logDebug() {\n        triggerLog.apply(this, [DEBUG, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Info message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logInfo() {\n        triggerLog.apply(this, [INFO, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Warn message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logWarn() {\n        triggerLog.apply(this, [WARN, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Error message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logError() {\n        triggerLog.apply(this, [ERROR, ...arguments]);\n        return this;\n    };\n\n    /**\n     * log Fatal message\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {*} arguments\n     * @returns {Logger}\n     * @since 1.5.0\n     */\n    logFatal() {\n        triggerLog.apply(this, [FATAL, ...arguments]);\n        return this;\n    };\n\n\n    /**\n     * Labels\n     *\n     * @param {integer} level\n     * @returns {string}\n     */\n    getLabel(level) {\n        validateInteger(level);\n\n        if (level === ALL) return 'ALL';\n        if (level === TRACE) return 'TRACE';\n        if (level === DEBUG) return 'DEBUG';\n        if (level === INFO) return 'INFO';\n        if (level === WARN) return 'WARN';\n        if (level === ERROR) return 'ERROR';\n        if (level === FATAL) return 'FATAL';\n        if (level === OFF) return 'OFF';\n\n        return 'unknown';\n    };\n\n    /**\n     * Level\n     *\n     * @param {string} label\n     * @returns {integer}\n     */\n    getLevel(label) {\n        validateString(label);\n\n        if (label === 'ALL') return ALL;\n        if (label === 'TRACE') return TRACE;\n        if (label === 'DEBUG') return DEBUG;\n        if (label === 'INFO') return INFO;\n        if (label === 'WARN') return WARN;\n        if (label === 'ERROR') return ERROR;\n        if (label === 'FATAL') return FATAL;\n        if (label === 'OFF') return OFF;\n\n        return 0;\n    };\n\n\n}\n\nassignToNamespace('Monster.Logging', Logger);\nexport {Monster, Logger, ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF};\n\n\n/**\n * Log triggern\n *\n * @param {integer} loglevel\n * @param {*} args\n * @returns {Logger}\n * @private\n */\nfunction triggerLog(loglevel, ...args) {\n    var logger = this;\n\n    for (let handler of logger.handler) {\n        handler.log(new LogEntry(loglevel, args))\n    }\n\n    return logger;\n\n}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../../namespace.js';\nimport {Base} from '../../types/base.js';\nimport {getGlobalObject} from \"../../types/global.js\";\nimport {Handler} from '../handler.js';\nimport {LogEntry} from \"../logentry.js\";\n\n/**\n * You can create an object of the class simply by using the namespace `new Monster.Logging.Handler.ConsoleHandler()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler/console.js';\n * console.log(new Monster.Logging.Handler.ConsoleHandler())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/logging/handler/console.js';\n * console.log(new ConsoleHandler())\n * </script>\n * ```\n *\n * @since 1.5.0\n * @copyright schukai GmbH\n * @memberOf Monster.Logging.Handler\n */\nclass ConsoleHandler extends Handler {\n    constructor() {\n        super();\n    }\n\n\n    /**\n     * This is the central log function. this method must be\n     * overwritten by derived handlers with their own logic.\n     *\n     * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF  (ALL = 0xff;OFF = 0x00;\n     *\n     * @param {LogEntry} entry\n     * @returns {boolean}\n     */\n    log(entry) {\n        if (super.log(entry)) {\n            let console = getGlobalObject('console');\n            if (!console) return false;\n            console.log(entry.toString());\n            return true;\n        }\n\n        return false;\n    }\n\n}\n\n\nassignToNamespace('Monster.Logging.Handler', ConsoleHandler);\nexport {Monster, ConsoleHandler};\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from '../types/global.js';\n\n\n/**\n * this function uses crypt and returns a random number.\n *\n * you can call the method via the monster namespace `Monster.Math.random()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/math/random.js';\n * console.log(Monster.Math.random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/math/random.js';\n * console.log(random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * @param {number} min starting value of the definition set (default is 0)\n * @param {number} max end value of the definition set (default is 1000000000)\n * @returns {number}\n * @memberOf Monster.Math\n * @throws {Error} missing crypt\n * @throws {Error} we cannot generate numbers larger than 53 bits.\n * @throws {Error} the distance is too small to create a random number.\n\n * @since 1.0.0\n * @copyright schukai GmbH\n */\nfunction random(min, max) {\n\n    if (min === undefined) {\n        min = 0;\n    }\n    if (max === undefined) {\n        max = MAX;\n    }\n\n    if (max < min) {\n        throw new Error(\"max must be greater than min\");\n    }\n\n    return Math.round(create(min, max));\n\n}\n\n/**\n * @private\n * @type {number}\n */\nvar MAX = 1000000000;\n\n\nMath.log2 = Math.log2 || function (n) {\n    return Math.log(n) / Math.log(2);\n};\n\n/**\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n * @private\n * @throws {Error} missing crypt\n * @throws {Error} we cannot generate numbers larger than 53 bits.\n * @throws {Error} the distance is too small to create a random number.\n */\nfunction create(min, max) {\n    let crypt;\n    let globalReference = getGlobal();\n\n    crypt = globalReference?.['crypto'] || globalReference?.['msCrypto'] || globalReference?.['crypto'] || undefined;\n\n    if (typeof crypt === \"undefined\") {\n        throw new Error(\"missing crypt\")\n    }\n\n    let rval = 0;\n    const range = max - min;\n    if (range < 2) {\n        throw  new Error('the distance is too small to create a random number.')\n    }\n\n    const bitsNeeded = Math.ceil(Math.log2(range));\n    if (bitsNeeded > 53) {\n        throw  new Error(\"we cannot generate numbers larger than 53 bits.\");\n    }\n    const bytesNeeded = Math.ceil(bitsNeeded / 8);\n    const mask = Math.pow(2, bitsNeeded) - 1;\n\n    const byteArray = new Uint8Array(bytesNeeded);\n    crypt.getRandomValues(byteArray);\n\n    let p = (bytesNeeded - 1) * 8;\n    for (var i = 0; i < bytesNeeded; i++) {\n        rval += byteArray[i] * Math.pow(2, p);\n        p -= 8;\n    }\n\n    rval = rval & mask;\n\n    if (rval >= range) {\n        return create(min, max);\n    }\n\n    return min + rval;\n\n}\n\nassignToNamespace('Monster.Math', random);\nexport {Monster, random}\n\n\n\n\n","'use strict';\n\nimport {random} from \"../math/random.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {getGlobal} from \"./global.js\";\nimport {ID} from \"./id.js\";\n\n/**\n * @private\n * @type {number}\n */\nlet internalCounter = 0;\n\n/**\n * You can call the method via the monster namespace `new Monster.Types.RandomID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/randomid.js';\n * console.log(new Monster.Types.RandomID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {RandomID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/randomid.js';\n * console.log(new RandomID())\n * </script>\n * ```\n *\n * @since 1.6.0\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary class to generate random numbers\n */\nclass RandomID extends ID {\n\n    /**\n     * create new object\n     */\n    constructor() {\n        super();\n\n        internalCounter += 1;\n\n        this.id = getGlobal().btoa(random(1, 10000))\n            .replace(/=/g, '')\n            /** No numbers at the beginning of the ID, because of possible problems with DOM */\n            .replace(/^[0-9]+/, 'X') + internalCounter;\n    }\n\n}\n\nassignToNamespace('Monster.Types', RandomID);\nexport {Monster, RandomID}\n","'use strict';\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from './base.js';\n\n/**\n * The version object contains a sematic version number\n *\n * You can create the object via the monster namespace `new Monster.Types.Version()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(new Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * @example\n *\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n *\n * new Version('1.0.0') // ↦ 1.0.0\n * new Version(1)  // ↦ 1.0.0\n * new Version(1, 0, 0) // ↦ 1.0.0\n * new Version('1.2.3', 4, 5) // ↦ 1.4.5\n *\n * @since 1.0.0\n * @author schukai GmbH\n * @copyright schukai GmbH\n * @memberOf Monster.Types\n * @summary The version object contains a sematic version number\n */\nclass Version extends Base {\n\n    /**\n     *\n     * @param major\n     * @param minor\n     * @param patch\n     * @throws {Error} major is not a number\n     * @throws {Error} minor is not a number\n     * @throws {Error} patch is not a number\n     */\n    constructor(major, minor, patch) {\n        super();\n\n        if (typeof major === 'string' && minor === undefined && patch === undefined) {\n\n            let parts = major.toString().split('.');\n            major = parseInt(parts[0] || 0);\n            minor = parseInt(parts[1] || 0);\n            patch = parseInt(parts[2] || 0);\n        }\n\n        if (major === undefined) {\n            throw  new Error(\"major version is undefined\");\n        }\n\n        if (minor === undefined) {\n            minor = 0;\n        }\n\n        if (patch === undefined) {\n            patch = 0;\n        }\n\n        this.major = parseInt(major);\n        this.minor = parseInt(minor);\n        this.patch = parseInt(patch);\n\n        if (isNaN(this.major)) {\n            throw  new Error(\"major is not a number\");\n        }\n\n        if (isNaN(this.minor)) {\n            throw  new Error(\"minor is not a number\");\n        }\n\n        if (isNaN(this.patch)) {\n            throw  new Error(\"patch is not a number\");\n        }\n\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.major + '.' + this.minor + '.' + this.patch;\n    }\n\n    /**\n     * returns 0 if equal, -1 if the object version is less and 1 if greater\n     * then the compared version\n     *\n     * @param {string|Version} version Version to compare\n     * @returns {number}\n     */\n    compareTo(version) {\n\n        if (version instanceof Version) {\n            version = version.toString();\n        }\n\n        if (typeof version !== 'string') {\n            throw  new Error(\"type exception\");\n        }\n\n        if (version === this.toString()) {\n            return 0;\n        }\n\n        let a = [this.major, this.minor, this.patch];\n        let b = version.split('.');\n        let len = Math.max(a.length, b.length);\n\n        for (let i = 0; i < len; i += 1) {\n            if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {\n                return 1;\n            } else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {\n                return -1;\n            }\n        }\n\n        return 0;\n    };\n\n}\n\nassignToNamespace('Monster.Types', Version);\n\n\nlet monsterVersion;\n\n/**\n * Version of monster\n *\n * You can call the method via the monster namespace `Monster.getVersion()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(Monster.getVersion())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/types/version.js';\n * console.log(getVersion())\n * </script>\n * ```\n *\n * @returns {Monster.Types.Version}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @author schukai GmbH\n * @memberOf Monster\n */\nfunction getVersion() {\n    if (monsterVersion instanceof Version) {\n        return monsterVersion;\n    }\n    /**#@+ dont touch, replaced by make with package.json version */\n    monsterVersion = new Version('1.19.0')\n    /**#@-*/\n\n    return monsterVersion;\n\n}\n\nassignToNamespace('Monster', getVersion);\nexport {Monster, Version, getVersion}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from '../types/base.js';\nimport {isFunction} from '../types/is.js';\n\n/**\n * The comparator allows a comparison function to be abstracted.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n * console.log(new Monster.Util.Comparator())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n * console.log(new Comparator())\n * </script>\n * ```\n *\n * The following are some examples of the application of the class.\n *\n * ```\n * new Comparator().lessThanOrEqual(2, 5) // ↦ true\n * new Comparator().greaterThan(4, 2) // ↦ true\n * new Comparator().equal(4, 4) // ↦ true\n * new Comparator().equal(4, 5) // ↦ false\n * ```\n *\n * You can also pass your own comparison function, and thus define the comparison function.\n *\n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @example\n *\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/comparator.js';\n *\n * console.log(new Comparator().lessThanOrEqual(2, 5))\n * // ↦ true\n * console.log(new Comparator().greaterThan(4, 2))\n * // ↦ true\n * console.log(new Comparator().equal(4, 4))\n * // ↦ true\n * console.log(new Comparator().equal(4, 5))\n * // ↦ false\n *\n * @since 1.3.0\n * @memberOf Monster.Util\n */\nclass Comparator extends Base {\n\n    /**\n     * create new comparator\n     *\n     * @param {Monster.Util~exampleCallback} [callback] Comparator callback\n     * @throw {TypeError} unsupported type\n     * @throw {TypeError} impractical comparison\n     */\n    constructor(callback) {\n        super();\n\n        if (isFunction(callback)) {\n            this.compare = callback\n        } else if (callback !== undefined) {\n            throw new TypeError(\"unsupported type\")\n        } else {\n            // default compare function\n\n            /**\n             *\n             * @param {*} a\n             * @param {*} b\n             * @return {integer} -1, 0 or 1\n             */\n            this.compare = function (a, b) {\n\n                if (typeof a !== typeof b) {\n                    throw new TypeError(\"impractical comparison\")\n                }\n\n                if (a === b) {\n                    return 0;\n                }\n                return a < b ? -1 : 1;\n            };\n        }\n\n    }\n\n    /**\n     * changes the order of the operators\n     *\n     * @return {Comparator}\n     */\n    reverse() {\n        const original = this.compare;\n        this.compare = (a, b) => original(b, a);\n        return this;\n    }\n\n    /**\n     * Checks if two variables are equal.\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    equal(a, b) {\n        return this.compare(a, b) === 0;\n    }\n\n\n    /**\n     * Checks if variable `a` is greater than `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThan(a, b) {\n        return this.compare(a, b) > 0;\n    }\n\n    /**\n     * Checks if variable `a` is greater than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThanOrEqual(a, b) {\n        return this.greaterThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable `a` is less than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThanOrEqual(a, b) {\n        return this.lessThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable a is less than b\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThan(a, b) {\n        return this.compare(a, b) < 0;\n    }\n\n\n}\n\n\n/**\n * This is the description for the callback function used by the operator\n *\n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @callback Monster.Util~exampleCallback\n * @param {*} a\n * @param {*} b\n * @return {integer} -1, 0 or 1\n * @memberOf Monster.Util\n * @see Monster.Util.Comparator\n */\n\n\n/**\n *\n */\nassignToNamespace('Monster.Util', Comparator);\nexport {Monster, Comparator}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {validateObject} from '../types/validate.js';\n\n/**\n * Deep freeze a object\n *\n * You can call the method via the monster namespace `Monster.Util.deepFreeze()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/freeze.js';\n * console.log(Monster.Util.deepFreeze({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.19.0/dist/modules/util/freeze.js';\n * console.log(deepFreeze({}))\n * </script>\n * ```\n *\n * @param {object} object object to be freeze\n * @since 1.0.0\n * @returns {object}\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @throws {TypeError} value is not a object\n */\nfunction deepFreeze(object) {\n\n    validateObject(object)\n\n    // Retrieve the defined property names of the object\n    var propNames = Object.getOwnPropertyNames(object);\n\n    // Freeze properties before freezing yourself\n    for (let name of propNames) {\n        let value = object[name];\n\n        object[name] = value && typeof value === \"object\" ?\n            deepFreeze(value) : value;\n    }\n\n    return Object.freeze(object);\n}\n\nassignToNamespace('Monster.Util', deepFreeze);\nexport {Monster, deepFreeze}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @license\n * Copyright 2021 schukai GmbH\n * SPDX-License-Identifier: AGPL-3.0-only or COMMERCIAL\n * @author schukai GmbH\n */\n\n'use strict';\n\nimport './constants.js';\nimport './constraints/abstract.js';\nimport './constraints/abstractoperator.js';\nimport './constraints/andoperator.js';\nimport './constraints/invalid.js';\nimport './constraints/isarray.js';\n\n// find packages/monster/source/ -type f -name \"*.js\" -not -name \"*namespace*\" -not -iname  \"monster.js\"\nimport './constraints/isobject.js';\nimport './constraints/oroperator.js';\nimport './constraints/valid.js';\nimport './data/buildmap.js';\nimport './data/diff.js';\nimport './data/extend.js';\nimport './data/pathfinder.js';\nimport './data/pipe.js';\nimport './data/transformer.js';\nimport './dom/assembler.js';\nimport './dom/attributes.js';\nimport './dom/constants.js';\nimport './dom/customcontrol.js';\nimport './dom/customelement.js';\nimport './dom/events.js';\nimport './dom/locale.js';\nimport './dom/template.js';\nimport './dom/theme.js';\nimport './dom/updater.js';\nimport './dom/util.js';\nimport './i18n/locale.js';\nimport './i18n/provider.js';\nimport './i18n/providers/fetch.js';\nimport './i18n/translations.js';\nimport './logging/handler.js';\nimport './logging/handler/console.js';\nimport './logging/logentry.js';\nimport './logging/logger.js';\nimport './math/random.js';\nimport {Monster} from './namespace.js';\nimport './text/formatter.js';\nimport './types/base.js';\nimport './types/basewithoptions.js';\nimport './types/global.js';\nimport './types/id.js';\nimport './types/is.js';\nimport './types/observer.js';\nimport './types/observerlist.js';\nimport './types/proxyobserver.js';\nimport './types/queue.js';\nimport './types/randomid.js';\nimport './types/stack.js';\nimport './types/tokenlist.js';\nimport './types/typeof.js';\nimport './types/uniquequeue.js';\nimport './types/validate.js';\nimport './types/version.js';\nimport './util/clone.js';\nimport './util/comparator.js';\nimport './util/freeze.js';\n\n\nlet rootName\ntry {\n    rootName = Monster.Types.getGlobalObject('__MonsterRootName__');\n} catch (e) {\n\n}\n\nif (!rootName) rootName = \"Monster\";\n\nMonster.Types.getGlobal()[rootName] = Monster\nexport {Monster};"],"names":["Monster","PROPERTY_KEY_INTERNALDATA","Namespace","namespace","undefined","Error","getNamespace","assignToNamespace","ns","current","namespaceFor","split","i","l","objectName","fn","hasOwnProperty","name","toString","s","f","match","Array","isArray","c","e","parts","space","length","Base","AbstractConstraint","value","Promise","reject","JSON","stringify","Object","AbstractOperator","operantA","operantB","TypeError","AndOperator","all","isValid","Invalid","IsArray","resolve","isIterable","Symbol","iterator","isPrimitive","type","isSymbol","isBoolean","isString","isObject","isInstance","instance","isFunction","isInteger","Number","IsObject","OrOperator","self","a","b","then","catch","Valid","validateString","clone","DELIMITER","Pathfinder","WILDCARD","buildMap","subject","selector","valueTemplate","keyTemplate","filter","result","Map","map","buildFlatMap","call","forEach","v","k","m","build","set","key","parentMap","currentMap","resultLength","size","currentPath","shift","push","finder","getVia","join","o","copyKey","kk","sub","definition","defaultValue","regexp","array","matchAll","groups","placeholder","path","replaceAll","validateIterable","validatePrimitive","validateBoolean","validateObject","validateInstance","n","validateArray","validateSymbol","validateFunction","validateInteger","getGlobal","obj","copy","len","Date","setTime","getTime","Element","HTMLDocument","DocumentFragment","globalContext","window","document","navigator","Proxy","cloneObject","getClone","constructor","Types","globalReference","globalThis","defineProperty","prototype","get","configurable","__monster__","Function","getGlobalObject","getGlobalFunction","Stack","object","wildCard","wildcard","getValueViaPath","setValueViaPath","deleteValueViaPath","iterate","check","entries","anchor","WeakMap","Set","WeakSet","parseInt","WeakRef","last","pop","subpath","stack","isEmpty","peek","append","assignProperty","delete","data","typeOf","Diff","first","second","doDiff","getKeys","keys","fill","_","concat","diff","typeA","typeB","currPath","currDiff","buildResult","getOperator","operator","getPrototypeOf","isNotEqual","results","exec","toLowerCase","extend","arguments","Transformer","Pipe","pipe","callback","context","t","setCallback","reduce","accumulator","transformer","currentIndex","run","ID","args","disassemble","command","callbacks","transform","apply","regex","g","p","r","replace","trim","convertToString","toUpperCase","parse","encodeURIComponent","callbackName","has","unshift","doc","DOMParser","parseFromString","body","textContent","trueStatement","falseStatement","condition","firstchar","charAt","substr","btoa","prefix","suffix","start","end","substring","internalCounter","count","id","ProxyObserver","ATTRIBUTEPREFIX","Assembler","fragment","attributePrefix","cloneNode","Observer","ObserverList","realSubject","getHandler","objectMap","proxyMap","observers","observer","attach","detach","notify","contains","proxy","handler","target","receiver","Reflect","descriptor","getOwnPropertyDescriptor","writable","enumerable","deleteProperty","setPrototypeOf","object1","TokenList","UniqueQueue","tags","queue","tag","add","remove","setTimeout","poll","init","tokens","index","next","done","counter","token","clear","newToken","from","indexOf","splice","toggleValue","Queue","unique","pomises","update","ATTRIBUTE_OBJECTLINK","findClosestObjectLink","element","findClosestByAttribute","addToObjectLink","symbol","HTMLElement","addAttributeToken","removeObjectLink","removeAttributeToken","hasObjectLink","containsAttributeToken","getLinkedObjects","toggleAttributeToken","hasAttribute","setAttribute","getAttribute","toggle","replaceAttributeToken","to","clearAttributeTokens","closest","ATTRIBUTE_PREFIX","ATTRIBUTE_OPTIONS","DEFAULT_THEME","ATTRIBUTE_THEME_PREFIX","ATTRIBUTE_THEME_NAME","ATTRIBUTE_UPDATER_ATTRIBUTES","ATTRIBUTE_UPDATER_REPLACE","ATTRIBUTE_UPDATER_INSERT","ATTRIBUTE_UPDATER_INSERT_REFERENCE","ATTRIBUTE_UPDATER_REMOVE","ATTRIBUTE_UPDATER_BIND","ATTRIBUTE_ROLE","OBJECTLINK_KEY_UPDATER","CustomElement","internalSymbol","CustomControl","attachInternals","getInternal","labels","getTag","validity","validationMessage","willValidate","states","form","state","setFormValue","flags","message","setValidity","checkValidity","reportValidity","parseDataURL","findDocumentTemplate","Template","Updater","internalDataSymbol","for","objectLinkSymbol","initMethodSymbol","assembleMethodSymbol","defaults","getOptionsFromAttributes","initOptionObserver","shadowMode","delegatesFocus","templates","main","attachObserver","detachObserver","containsObserver","getRealSubject","getSubject","setVia","options","parseOptionsJSON","elements","getOption","initShadowRoot","shadowRoot","childNodes","initCSSStylesheet","NodeList","initHtmlContent","updater","HTMLTemplateElement","u","enableEventProcessing","attrName","oldVal","newVal","setOptions","node","containChildNode","Node","ShadowRoot","updaters","list","d","assign","dataUrl","content","template","appendChild","createDocumentFragment","html","innerHTML","styleSheet","getCSSStyleSheet","CSSStyleSheet","adoptedStyleSheets","style","createElement","innerText","attachShadow","mode","registerCustomElement","define","MediaType","parseMediaType","internal","DataUrl","mediatype","base64","atob","dataurl","mediatypeAndBase64","base64Flag","endsWith","lastIndexOf","decodeURIComponent","subtype","parameter","startsWith","parseParameter","entry","kv","getDocumentTheme","currentNode","Document","getRootNode","ownerDocument","theme","themedID","getName","getElementById","Theme","querySelector","getDocument","getCheckStateCallback","change","removeElement","insertElement","updateContent","updateAttributes","eventTypes","types","disableEventProcessing","addEventListener","getControlEventHandler","removeEventListener","notifyObservers","HTMLInputElement","HTMLOptionElement","pathfinder","event","checked","HTMLTextAreaElement","HTMLSelectElement","selectedOptions","querySelectorAll","pf","parentNode","removeChild","mem","wd","found","containerElement","attributes","def","refPrefix","cmd","dataPath","insertPoint","hasChildNodes","lastChild","available","ref","refElement","appendNewDocumentFragment","nodes","container","applyRecursive","child","runUpdateContent","firstChild","addNode","runUpdateAttributes","removeAttribute","handleInputControlAttributeUpdate","opt","selected","selectedIndex","getWindow","getDocumentFragmentFromString","fireEvent","click","Event","bubbles","cancelable","dispatchEvent","HTMLCollection","findTargetElementFromEvent","attributeName","attributeValue","composedPath","parseLocale","DEFAULT_LANGUAGE","getLocaleOfDocument","locale","propertiesSymbol","localeStringSymbol","Locale","language","region","script","variants","extlang","privateUse","privateValue","localeString","regexRegular","regexIrregular","regexGrandfathered","regexPrivateUse","regexSingleton","regexExtension","regexVariant","regexRegion","regexScript","regexExtlang","regexLanguage","regexLangtag","regexLanguageTag","RegExp","lastIndex","BaseWithOptions","Translations","Provider","optionsSymbol","storage","defaultText","getPluralRuleText","keyword","toLocaleString","Intl","PluralRules","select","DEFAULT_KEY","text","translations","setText","Formatter","Fetch","url","URL","fetch","method","cache","credentials","redirect","referrerPolicy","formatter","getMap","format","response","json","assignTranslations","openMarker","closeMarker","open","close","tokenizer","formatted","startIndex","endIndex","LogEntry","ALL","DEBUG","ERROR","FATAL","INFO","OFF","TRACE","WARN","Handler","loglevel","getLogLevel","setLogLevel","Logger","triggerLog","level","label","logger","log","ConsoleHandler","console","random","min","max","MAX","Math","round","create","log2","crypt","rval","range","bitsNeeded","ceil","bytesNeeded","mask","pow","byteArray","Uint8Array","getRandomValues","RandomID","Version","major","minor","patch","isNaN","version","monsterVersion","getVersion","Comparator","compare","original","greaterThan","equal","lessThan","deepFreeze","propNames","getOwnPropertyNames","freeze","rootName"],"sourceRoot":""}
\ No newline at end of file
diff --git a/packages/monster/dist/monster.js b/packages/monster/dist/monster.js
index 8d000103905822806d1e75b839f7055ca9c5cc48..20c0b3939d96a704ff83a45c1f4e60c1c6b31755 100644
--- a/packages/monster/dist/monster.js
+++ b/packages/monster/dist/monster.js
@@ -1,2 +1,2 @@
 /** Monster 1.19.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?exports.window=factory():root.window=factory()}(self,(function(){return function(){var __webpack_require__={d:function(exports,definition){for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},o:function(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)},r:function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})}},__webpack_exports__={};function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Monster:function(){return Monster}});var Namespace=function(){function Namespace(namespace){if(function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Namespace),void 0===namespace||"string"!=typeof namespace)throw new Error("namespace is not a string");this.namespace=namespace}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(Namespace,[{key:"getNamespace",value:function getNamespace(){return this.namespace}},{key:"toString",value:function toString(){return this.getNamespace()}}]),Namespace}(),Monster=new Namespace("Monster");function assignToNamespace(ns){var current=namespaceFor(ns.split("."));if(0==(arguments.length<=1?0:arguments.length-1))throw new Error("no functions have been passed.");for(var i=0,l=arguments.length<=1?0:arguments.length-1;i<l;i++)current[objectName(i+1<1||arguments.length<=i+1?void 0:arguments[i+1])]=i+1<1||arguments.length<=i+1?void 0:arguments[i+1];return current}function objectName(fn){try{if("function"!=typeof fn)throw new Error("the first argument is not a function or class.");if(fn.hasOwnProperty("name"))return fn.name;if("function"==typeof fn.toString){var s=fn.toString(),f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&"string"==typeof f[1])return f[1];var c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&"string"==typeof c[1])return c[1]}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){for(var space=Monster,ns="Monster",i=0;i<parts.length;i++)"Monster"!==parts[i]&&(ns+="."+parts[i],space.hasOwnProperty(parts[i])||(space[parts[i]]=new Namespace(ns)),space=space[parts[i]]);return space}assignToNamespace("Monster",assignToNamespace,Namespace);function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function base_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function base_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function _possibleConstructorReturn(self,call){if(call&&("object"===_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function _assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function _wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!function _isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if(void 0!==_cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(Wrapper,Class)})(Class)}function _construct(Parent,args,Class){return(_construct=_isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function _setPrototypeOf(o,p){return(_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function _getPrototypeOf(o){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}var Base=function(_Object){!function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&_setPrototypeOf(subClass,superClass)}(Base,_Object);var _super=function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var result,Super=_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return _possibleConstructorReturn(this,result)}}(Base);function Base(){return base_classCallCheck(this,Base),_super.apply(this,arguments)}return function base_createClass(Constructor,protoProps,staticProps){return protoProps&&base_defineProperties(Constructor.prototype,protoProps),staticProps&&base_defineProperties(Constructor,staticProps),Constructor}(Base,[{key:"toString",value:function toString(){return JSON.stringify(this)}}]),Base}(_wrapNativeSuper(Object));function abstract_typeof(obj){return(abstract_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function abstract_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function abstract_setPrototypeOf(o,p){return(abstract_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function abstract_createSuper(Derived){var hasNativeReflectConstruct=function abstract_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=abstract_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=abstract_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return abstract_possibleConstructorReturn(this,result)}}function abstract_possibleConstructorReturn(self,call){if(call&&("object"===abstract_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function abstract_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function abstract_getPrototypeOf(o){return(abstract_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Base);var AbstractConstraint=function(_Base){!function abstract_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&abstract_setPrototypeOf(subClass,superClass)}(AbstractConstraint,_Base);var _super=abstract_createSuper(AbstractConstraint);function AbstractConstraint(){return function abstract_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AbstractConstraint),_super.call(this)}return function abstract_createClass(Constructor,protoProps,staticProps){return protoProps&&abstract_defineProperties(Constructor.prototype,protoProps),staticProps&&abstract_defineProperties(Constructor,staticProps),Constructor}(AbstractConstraint,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]),AbstractConstraint}(Base);function abstractoperator_typeof(obj){return(abstractoperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function abstractoperator_setPrototypeOf(o,p){return(abstractoperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function abstractoperator_createSuper(Derived){var hasNativeReflectConstruct=function abstractoperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=abstractoperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=abstractoperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return abstractoperator_possibleConstructorReturn(this,result)}}function abstractoperator_possibleConstructorReturn(self,call){if(call&&("object"===abstractoperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function abstractoperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function abstractoperator_getPrototypeOf(o){return(abstractoperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Constraints",AbstractConstraint);var globalReference,AbstractOperator=function(_AbstractConstraint){!function abstractoperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&abstractoperator_setPrototypeOf(subClass,superClass)}(AbstractOperator,_AbstractConstraint);var _super=abstractoperator_createSuper(AbstractOperator);function AbstractOperator(operantA,operantB){var _this;if(function abstractoperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AbstractOperator),_this=_super.call(this),!(operantA instanceof AbstractConstraint&&operantB instanceof AbstractConstraint))throw new TypeError("parameters must be from type AbstractConstraint");return _this.operantA=operantA,_this.operantB=operantB,_this}return AbstractOperator}(AbstractConstraint);function andoperator_typeof(obj){return(andoperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function andoperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function andoperator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function andoperator_setPrototypeOf(o,p){return(andoperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function andoperator_createSuper(Derived){var hasNativeReflectConstruct=function andoperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=andoperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=andoperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return andoperator_possibleConstructorReturn(this,result)}}function andoperator_possibleConstructorReturn(self,call){if(call&&("object"===andoperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function andoperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function andoperator_getPrototypeOf(o){return(andoperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function invalid_typeof(obj){return(invalid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function invalid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function invalid_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function invalid_setPrototypeOf(o,p){return(invalid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function invalid_createSuper(Derived){var hasNativeReflectConstruct=function invalid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=invalid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=invalid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return invalid_possibleConstructorReturn(this,result)}}function invalid_possibleConstructorReturn(self,call){if(call&&("object"===invalid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function invalid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function invalid_getPrototypeOf(o){return(invalid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function is_typeof(obj){return(is_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isIterable(value){return void 0!==value&&(null!==value&&"function"==typeof(null==value?void 0:value[Symbol.iterator]))}function isPrimitive(value){var type;return null==value||("string"===(type=is_typeof(value))||"number"===type||"boolean"===type||"symbol"===type)}function isSymbol(value){return"symbol"===is_typeof(value)}function isBoolean(value){return!0===value||!1===value}function isString(value){return void 0!==value&&"string"==typeof value}function isObject(value){return!isArray(value)&&(!isPrimitive(value)&&"object"===is_typeof(value))}function isInstance(value,instance){return!!isObject(value)&&(!!isFunction(instance)&&(!!instance.hasOwnProperty("prototype")&&value instanceof instance))}function isArray(value){return!!Array.isArray(value)}function isFunction(value){return!isArray(value)&&(!isPrimitive(value)&&"function"==typeof value)}function isInteger(value){return Number.isInteger(value)}function isarray_typeof(obj){return(isarray_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isarray_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function isarray_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function isarray_setPrototypeOf(o,p){return(isarray_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function isarray_createSuper(Derived){var hasNativeReflectConstruct=function isarray_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=isarray_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=isarray_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return isarray_possibleConstructorReturn(this,result)}}function isarray_possibleConstructorReturn(self,call){if(call&&("object"===isarray_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function isarray_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function isarray_getPrototypeOf(o){return(isarray_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function isobject_typeof(obj){return(isobject_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isobject_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function isobject_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function isobject_setPrototypeOf(o,p){return(isobject_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function isobject_createSuper(Derived){var hasNativeReflectConstruct=function isobject_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=isobject_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=isobject_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return isobject_possibleConstructorReturn(this,result)}}function isobject_possibleConstructorReturn(self,call){if(call&&("object"===isobject_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function isobject_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function isobject_getPrototypeOf(o){return(isobject_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function oroperator_typeof(obj){return(oroperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function oroperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function oroperator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function oroperator_setPrototypeOf(o,p){return(oroperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function oroperator_createSuper(Derived){var hasNativeReflectConstruct=function oroperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=oroperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=oroperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return oroperator_possibleConstructorReturn(this,result)}}function oroperator_possibleConstructorReturn(self,call){if(call&&("object"===oroperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function oroperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function oroperator_getPrototypeOf(o){return(oroperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function valid_typeof(obj){return(valid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function valid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function valid_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function valid_setPrototypeOf(o,p){return(valid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function valid_createSuper(Derived){var hasNativeReflectConstruct=function valid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=valid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=valid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return valid_possibleConstructorReturn(this,result)}}function valid_possibleConstructorReturn(self,call){if(call&&("object"===valid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function valid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function valid_getPrototypeOf(o){return(valid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function validatePrimitive(value){if(!isPrimitive(value))throw new TypeError("value is not a primitive");return value}function validateBoolean(value){if(!isBoolean(value))throw new TypeError("value is not a boolean");return value}function validateString(value){if(!isString(value))throw new TypeError("value is not a string");return value}function validateObject(value){if(!isObject(value))throw new TypeError("value is not a object");return value}function validateInstance(value,instance){if(!isInstance(value,instance)){var n="";throw(isObject(instance)||isFunction(instance))&&(n=null==instance?void 0:instance.name),n&&(n=" "+n),new TypeError("value is not an instance of"+n)}return value}function validateArray(value){if(!isArray(value))throw new TypeError("value is not an array");return value}function validateSymbol(value){if(!isSymbol(value))throw new TypeError("value is not an symbol");return value}function validateFunction(value){if(!isFunction(value))throw new TypeError("value is not a function");return value}function validateInteger(value){if(!isInteger(value))throw new TypeError("value is not an integer");return value}function global_typeof(obj){return(global_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function getGlobal(){return globalReference}function getGlobalObject(name){var _globalReference;validateString(name);var o=null===(_globalReference=globalReference)||void 0===_globalReference?void 0:_globalReference[name];if(void 0===o)throw new Error("the object "+name+" is not defined");return validateObject(o),o}function getGlobalFunction(name){var _globalReference2;validateString(name);var f=null===(_globalReference2=globalReference)||void 0===_globalReference2?void 0:_globalReference2[name];if(void 0===f)throw new Error("the function "+name+" is not defined");return validateFunction(f),f}function clone_typeof(obj){return(clone_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function clone(obj){if(null===obj)return obj;if(isPrimitive(obj))return obj;if(isFunction(obj))return obj;if(isArray(obj)){for(var copy=[],i=0,len=obj.length;i<len;i++)copy[i]=clone(obj[i]);return copy}if(isObject(obj)){if(obj instanceof Date){var _copy=new Date;return _copy.setTime(obj.getTime()),_copy}if("undefined"!=typeof Element&&obj instanceof Element)return obj;if("undefined"!=typeof HTMLDocument&&obj instanceof HTMLDocument)return obj;if("undefined"!=typeof DocumentFragment&&obj instanceof DocumentFragment)return obj;if(obj===getGlobal())return obj;if("undefined"!=typeof globalContext&&obj===globalContext)return obj;if("undefined"!=typeof window&&obj===window)return obj;if("undefined"!=typeof document&&obj===document)return obj;if("undefined"!=typeof navigator&&obj===navigator)return obj;if("undefined"!=typeof JSON&&obj===JSON)return obj;try{if(obj instanceof Proxy)return obj}catch(e){}return function cloneObject(obj){var copy;if(clone_typeof(obj.hasOwnProperty("getClone"))&&"function"===obj.getClone)return obj.getClone();copy={},"function"==typeof obj.constructor&&"function"==typeof obj.constructor.call&&(copy=new obj.constructor);for(var key in obj)obj.hasOwnProperty(key)&&(Monster.Types.isPrimitive(obj[key])?copy[key]=obj[key]:copy[key]=clone(obj[key]));return copy}(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function stack_typeof(obj){return(stack_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function stack_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function stack_setPrototypeOf(o,p){return(stack_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function stack_createSuper(Derived){var hasNativeReflectConstruct=function stack_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=stack_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=stack_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return stack_possibleConstructorReturn(this,result)}}function stack_possibleConstructorReturn(self,call){if(call&&("object"===stack_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function stack_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function stack_getPrototypeOf(o){return(stack_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Constraints",AbstractOperator),assignToNamespace("Monster.Constraints",function(_AbstractOperator){!function andoperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&andoperator_setPrototypeOf(subClass,superClass)}(AndOperator,_AbstractOperator);var _super=andoperator_createSuper(AndOperator);function AndOperator(){return andoperator_classCallCheck(this,AndOperator),_super.apply(this,arguments)}return function andoperator_createClass(Constructor,protoProps,staticProps){return protoProps&&andoperator_defineProperties(Constructor.prototype,protoProps),staticProps&&andoperator_defineProperties(Constructor,staticProps),Constructor}(AndOperator,[{key:"isValid",value:function isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}]),AndOperator}(AbstractOperator)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function invalid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&invalid_setPrototypeOf(subClass,superClass)}(Invalid,_AbstractConstraint);var _super=invalid_createSuper(Invalid);function Invalid(){return invalid_classCallCheck(this,Invalid),_super.apply(this,arguments)}return function invalid_createClass(Constructor,protoProps,staticProps){return protoProps&&invalid_defineProperties(Constructor.prototype,protoProps),staticProps&&invalid_defineProperties(Constructor,staticProps),Constructor}(Invalid,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]),Invalid}(AbstractConstraint)),assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger,isSymbol),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function isarray_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&isarray_setPrototypeOf(subClass,superClass)}(IsArray,_AbstractConstraint);var _super=isarray_createSuper(IsArray);function IsArray(){return isarray_classCallCheck(this,IsArray),_super.apply(this,arguments)}return function isarray_createClass(Constructor,protoProps,staticProps){return protoProps&&isarray_defineProperties(Constructor.prototype,protoProps),staticProps&&isarray_defineProperties(Constructor,staticProps),Constructor}(IsArray,[{key:"isValid",value:function isValid(value){return isArray(value)?Promise.resolve(value):Promise.reject(value)}}]),IsArray}(AbstractConstraint)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function isobject_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&isobject_setPrototypeOf(subClass,superClass)}(IsObject,_AbstractConstraint);var _super=isobject_createSuper(IsObject);function IsObject(){return isobject_classCallCheck(this,IsObject),_super.apply(this,arguments)}return function isobject_createClass(Constructor,protoProps,staticProps){return protoProps&&isobject_defineProperties(Constructor.prototype,protoProps),staticProps&&isobject_defineProperties(Constructor,staticProps),Constructor}(IsObject,[{key:"isValid",value:function isValid(value){return isObject(value)?Promise.resolve(value):Promise.reject(value)}}]),IsObject}(AbstractConstraint)),assignToNamespace("Monster.Constraints",function(_AbstractOperator){!function oroperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&oroperator_setPrototypeOf(subClass,superClass)}(OrOperator,_AbstractOperator);var _super=oroperator_createSuper(OrOperator);function OrOperator(){return oroperator_classCallCheck(this,OrOperator),_super.apply(this,arguments)}return function oroperator_createClass(Constructor,protoProps,staticProps){return protoProps&&oroperator_defineProperties(Constructor.prototype,protoProps),staticProps&&oroperator_defineProperties(Constructor,staticProps),Constructor}(OrOperator,[{key:"isValid",value:function isValid(value){var self=this;return new Promise((function(resolve,reject){var a,b;self.operantA.isValid(value).then((function(){resolve()})).catch((function(){a=!1,!1===b&&reject()})),self.operantB.isValid(value).then((function(){resolve()})).catch((function(){b=!1,!1===a&&reject()}))}))}}]),OrOperator}(AbstractOperator)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function valid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&valid_setPrototypeOf(subClass,superClass)}(Valid,_AbstractConstraint);var _super=valid_createSuper(Valid);function Valid(){return valid_classCallCheck(this,Valid),_super.apply(this,arguments)}return function valid_createClass(Constructor,protoProps,staticProps){return protoProps&&valid_defineProperties(Constructor.prototype,protoProps),staticProps&&valid_defineProperties(Constructor,staticProps),Constructor}(Valid,[{key:"isValid",value:function isValid(value){return Promise.resolve(value)}}]),Valid}(AbstractConstraint)),assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,(function validateIterable(value){if(!isIterable(value))throw new TypeError("value is not iterable");return value}),validateInteger),function(){if("object"!==("undefined"==typeof globalThis?"undefined":global_typeof(globalThis)))if("undefined"==typeof self){if("undefined"==typeof window){if(Object.defineProperty(Object.prototype,"__monster__",{get:function get(){return this},configurable:!0}),"object"===("undefined"==typeof __monster__?"undefined":global_typeof(__monster__)))return __monster__.globalThis=__monster__,delete Object.prototype.__monster__,void(globalReference=globalThis);try{globalReference=Function("return this")()}catch(e){}throw new Error("unsupported environment.")}globalReference=window}else globalReference=self;else globalReference=globalThis}(),assignToNamespace("Monster.Types",getGlobal,getGlobalObject,getGlobalFunction),assignToNamespace("Monster.Util",clone);var Stack=function(_Base){!function stack_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&stack_setPrototypeOf(subClass,superClass)}(Stack,_Base);var _super=stack_createSuper(Stack);function Stack(){var _this;return function stack_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Stack),(_this=_super.call(this)).data=[],_this}return function stack_createClass(Constructor,protoProps,staticProps){return protoProps&&stack_defineProperties(Constructor.prototype,protoProps),staticProps&&stack_defineProperties(Constructor,staticProps),Constructor}(Stack,[{key:"isEmpty",value:function isEmpty(){return 0===this.data.length}},{key:"peek",value:function peek(){var _this$data;if(!this.isEmpty())return null===(_this$data=this.data)||void 0===_this$data?void 0:_this$data[this.data.length-1]}},{key:"push",value:function push(value){return this.data.push(value),this}},{key:"clear",value:function clear(){return this.data=[],this}},{key:"pop",value:function pop(){if(!this.isEmpty())return this.data.pop()}}]),Stack}(Base);function pathfinder_typeof(obj){return(pathfinder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function pathfinder_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function pathfinder_setPrototypeOf(o,p){return(pathfinder_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function pathfinder_createSuper(Derived){var hasNativeReflectConstruct=function pathfinder_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=pathfinder_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=pathfinder_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return pathfinder_possibleConstructorReturn(this,result)}}function pathfinder_possibleConstructorReturn(self,call){if(call&&("object"===pathfinder_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function pathfinder_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function pathfinder_getPrototypeOf(o){return(pathfinder_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Stack);var Pathfinder=function(_Base){!function pathfinder_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&pathfinder_setPrototypeOf(subClass,superClass)}(Pathfinder,_Base);var _super=pathfinder_createSuper(Pathfinder);function Pathfinder(object){var _this;if(function pathfinder_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Pathfinder),_this=_super.call(this),isPrimitive(object))throw new Error("the parameter must not be a simple type");return _this.object=object,_this.wildCard="*",_this}return function pathfinder_createClass(Constructor,protoProps,staticProps){return protoProps&&pathfinder_defineProperties(Constructor.prototype,protoProps),staticProps&&pathfinder_defineProperties(Constructor,staticProps),Constructor}(Pathfinder,[{key:"setWildCard",value:function setWildCard(wildcard){return validateString(wildcard),this.wildCard=wildcard,this}},{key:"getVia",value:function getVia(path){return getValueViaPath.call(this,this.object,validateString(path))}},{key:"setVia",value:function setVia(path,value){return validateString(path),setValueViaPath.call(this,this.object,path,value),this}},{key:"deleteVia",value:function deleteVia(path){return validateString(path),deleteValueViaPath.call(this,this.object,path),this}},{key:"exists",value:function exists(path){validateString(path);try{return getValueViaPath.call(this,this.object,path,!0),!0}catch(e){}return!1}}]),Pathfinder}(Base);function iterate(subject,path,check){var result=new Map;if(isObject(subject)||isArray(subject))for(var _i=0,_Object$entries=Object.entries(subject);_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],value=_Object$entries$_i[1];result.set(key,getValueViaPath.call(this,value,path,check))}else{var _key=path.split(".").shift();result.set(_key,getValueViaPath.call(this,subject,path,check))}return result}function getValueViaPath(subject,path,check){if(""===path)return subject;var parts=path.split("."),current=parts.shift();if(current===this.wildCard)return iterate.call(this,subject,parts.join("."),check);if(isObject(subject)||isArray(subject)){var anchor;if(subject instanceof Map||subject instanceof WeakMap)anchor=subject.get(current);else if(subject instanceof Set||subject instanceof WeakSet){var _ref;validateInteger(current=parseInt(current)),anchor=null===(_ref=_toConsumableArray(subject))||void 0===_ref?void 0:_ref[current]}else{if("function"==typeof WeakRef&&subject instanceof WeakRef)throw Error("unsupported action for this data type");isArray(subject)?(validateInteger(current=parseInt(current)),anchor=null==subject?void 0:subject[current]):anchor=null==subject?void 0:subject[current]}if(isObject(anchor)||isArray(anchor))return getValueViaPath.call(this,anchor,parts.join("."),check);if(parts.length>0)throw Error("the journey is not at its end ("+parts.join(".")+")");if(!0===check&&!subject.hasOwnProperty(current))throw Error("unknown value");return anchor}throw TypeError("unsupported type "+pathfinder_typeof(subject))}function setValueViaPath(object,path,value){validateString(path);for(var parts=path.split("."),last=parts.pop(),subpath=parts.join("."),stack=new Stack,current=subpath;;){try{getValueViaPath.call(this,object,current,!0);break}catch(e){}if(stack.push(current),parts.pop(),""===(current=parts.join(".")))break}for(;!stack.isEmpty();){current=stack.pop();var obj={};if(!stack.isEmpty()){var n=stack.peek().split(".").pop();isInteger(parseInt(n))&&(obj=[])}setValueViaPath.call(this,object,current,obj)}var anchor=getValueViaPath.call(this,object,subpath);if(!isObject(object)&&!isArray(object))throw TypeError("unsupported type: "+pathfinder_typeof(object));if(anchor instanceof Map||anchor instanceof WeakMap)anchor.set(last,value);else if(anchor instanceof Set||anchor instanceof WeakSet)anchor.append(value);else{if("function"==typeof WeakRef&&anchor instanceof WeakRef)throw Error("unsupported action for this data type");isArray(anchor)?(validateInteger(last=parseInt(last)),assignProperty(anchor,last,value)):assignProperty(anchor,last,value)}}function assignProperty(object,key,value){object.hasOwnProperty(key)?(void 0===value&&delete object[key],object[key]=value):object[key]=value}function deleteValueViaPath(object,path){var parts=path.split("."),last=parts.pop(),subpath=parts.join("."),anchor=getValueViaPath.call(this,object,subpath);if(anchor instanceof Map)anchor.delete(last);else{if(anchor instanceof Set||anchor instanceof WeakMap||anchor instanceof WeakSet||"function"==typeof WeakRef&&anchor instanceof WeakRef)throw Error("unsupported action for this data type");isArray(anchor)?(validateInteger(last=parseInt(last)),delete anchor[last]):delete anchor[last]}}function buildmap_typeof(obj){return(buildmap_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function buildmap_toConsumableArray(arr){return function buildmap_arrayWithoutHoles(arr){if(Array.isArray(arr))return buildmap_arrayLikeToArray(arr)}(arr)||function buildmap_iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||buildmap_unsupportedIterableToArray(arr)||function buildmap_nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _wrapRegExp(){_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),buildmap_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return buildmap_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==buildmap_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}function buildmap_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&buildmap_setPrototypeOf(subClass,superClass)}function buildmap_setPrototypeOf(o,p){return(buildmap_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function buildmap_slicedToArray(arr,i){return function buildmap_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function buildmap_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||buildmap_unsupportedIterableToArray(arr,i)||function buildmap_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=buildmap_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function buildmap_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return buildmap_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?buildmap_arrayLikeToArray(o,minLen):void 0}}function buildmap_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function buildFlatMap(subject,selector,key,parentMap){var result=this,currentMap=new Map,resultLength=result.size;void 0===key&&(key=[]);var parts=selector.split("."),current="",currentPath=[];do{if(current=parts.shift(),currentPath.push(current),"*"===current){var finder=new Pathfinder(subject),map=void 0;try{map=finder.getVia(currentPath.join("."))}catch(e){map=new Map}var _step,_iterator=_createForOfIteratorHelper(map);try{var _loop=function _loop(){var _step$value=buildmap_slicedToArray(_step.value,2),k=_step$value[0],o=_step$value[1],copyKey=clone(key);currentPath.map((function(a){copyKey.push("*"===a?k:a)}));var kk=copyKey.join("."),sub=buildFlatMap.call(result,o,parts.join("."),copyKey,o);isObject(sub)&&(sub["^"]=parentMap),currentMap.set(kk,sub)};for(_iterator.s();!(_step=_iterator.n()).done;)_loop()}catch(err){_iterator.e(err)}finally{_iterator.f()}}}while(parts.length>0);if(resultLength===result.size){var _step2,_iterator2=_createForOfIteratorHelper(currentMap);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _step2$value=buildmap_slicedToArray(_step2.value,2),k=_step2$value[0],o=_step2$value[1];result.set(k,o)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}return subject}function build(subject,definition,defaultValue){if(void 0===definition)return defaultValue||subject;validateString(definition);var regexp=_wrapRegExp(/(\$\{([\x2D\.0-9A-Z\^_a-z]*)\})/gm,{placeholder:1,path:2}),array=buildmap_toConsumableArray(definition.matchAll(regexp)),finder=new Pathfinder(subject);return 0===array.length?finder.getVia(definition):(array.forEach((function(a){var groups=null==a?void 0:a.groups,placeholder=null==groups?void 0:groups.placeholder;if(void 0!==placeholder){var path=null==groups?void 0:groups.path,v=finder.getVia(path);void 0===v&&(v=defaultValue),definition=definition.replaceAll(placeholder,v)}})),definition)}function typeOf(value){var type={}.toString.call(value).match(/\s([a-zA-Z]+)/)[1];if("Object"===type){var results=/^(class|function)\s+(\w+)/.exec(value.constructor.toString());type=results&&results.length>2?results[2]:""}return type.toLowerCase()}function diff_typeof(obj){return(diff_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function Diff(first,second){return doDiff(first,second)}function doDiff(a,b,path,diff){var typeA=typeOf(a),typeB=typeOf(b),currPath=path||[],currDiff=diff||[];if(typeA!==typeB||"object"!==typeA&&"array"!==typeA){var o=function getOperator(a,b){var operator,typeA=diff_typeof(a),typeB=diff_typeof(b);"undefined"===typeA&&"undefined"!==typeB?operator="add":"undefined"!==typeA&&"undefined"===typeB?operator="delete":function isNotEqual(a,b){if(diff_typeof(a)!==diff_typeof(b))return!0;if(a instanceof Date&&b instanceof Date)return a.getTime()!==b.getTime();return a!==b}(a,b)&&(operator="update");return operator}(a,b);void 0!==o&&currDiff.push(buildResult(a,b,o,path))}else(function getKeys(a,b,type){if(isArray(type)){var keys=a.length>b.length?new Array(a.length):new Array(b.length);return keys.fill(0),new Set(keys.map((function(_,i){return i})))}return new Set(Object.keys(a).concat(Object.keys(b)))})(a,b,typeA).forEach((function(v){Object.prototype.hasOwnProperty.call(a,v)?Object.prototype.hasOwnProperty.call(b,v)?doDiff(a[v],b[v],currPath.concat(v),currDiff):currDiff.push(buildResult(a[v],b[v],"delete",currPath.concat(v))):currDiff.push(buildResult(a[v],b[v],"add",currPath.concat(v)))}));return currDiff}function buildResult(a,b,operator,path){var result={operator:operator,path:path};if("add"!==operator&&(result.first={value:a,type:diff_typeof(a)},isObject(a))){var _Object$getPrototypeO,_Object$getPrototypeO2,name=null===(_Object$getPrototypeO=Object.getPrototypeOf(a))||void 0===_Object$getPrototypeO||null===(_Object$getPrototypeO2=_Object$getPrototypeO.constructor)||void 0===_Object$getPrototypeO2?void 0:_Object$getPrototypeO2.name;void 0!==name&&(result.first.instance=name)}if(("add"===operator||"update"===operator)&&(result.second={value:b,type:diff_typeof(b)},isObject(b))){var _Object$getPrototypeO3,_Object$getPrototypeO4,_name=null===(_Object$getPrototypeO3=Object.getPrototypeOf(b))||void 0===_Object$getPrototypeO3||null===(_Object$getPrototypeO4=_Object$getPrototypeO3.constructor)||void 0===_Object$getPrototypeO4?void 0:_Object$getPrototypeO4.name;void 0!==_name&&(result.second.instance=_name)}return result}function extend(){var o,i;for(i=0;i<arguments.length;i++){var a=arguments[i];if(!isObject(a)&&!isArray(a))throw new Error("unsuported argument "+JSON.stringify(a));if(void 0!==o)for(var k in a){var _o,v=null==a?void 0:a[k];if(v!==(null===(_o=o)||void 0===_o?void 0:_o[k]))if(isObject(v)||isArray(v)){if(void 0===o[k]&&(isArray(v)?o[k]=[]:o[k]={}),typeOf(o[k])!==typeOf(v))throw new Error("type mismatch: "+JSON.stringify(o[k])+" != "+JSON.stringify(v));o[k]=extend(o[k],v)}else o[k]=v}else o=a}return o}function id_typeof(obj){return(id_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function id_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function id_setPrototypeOf(o,p){return(id_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function id_createSuper(Derived){var hasNativeReflectConstruct=function id_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=id_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=id_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return id_possibleConstructorReturn(this,result)}}function id_possibleConstructorReturn(self,call){if(call&&("object"===id_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function id_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function id_getPrototypeOf(o){return(id_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Pathfinder),assignToNamespace("Monster.Data",(function buildMap(subject,selector,valueTemplate,keyTemplate,filter){var map,result=new Map;if(isFunction(selector)){if(!((map=selector(subject))instanceof Map))throw new TypeError("the selector callback must return a map")}else{if(!isString(selector))throw new TypeError("value is neither a string nor a function");map=new Map,buildFlatMap.call(map,subject,selector)}return map instanceof Map?(map.forEach((function(v,k,m){isFunction(filter)&&!0!==filter.call(m,v,k)||(k=build(v,keyTemplate,k),v=build(v,valueTemplate),result.set(k,v))})),result):result})),assignToNamespace("Monster.Types",typeOf),assignToNamespace("Monster.Data",Diff),assignToNamespace("Monster.Data",extend);var internalCounter=new Map,ID=function(_Base){!function id_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&id_setPrototypeOf(subClass,superClass)}(ID,_Base);var _super=id_createSuper(ID);function ID(prefix){var _this;!function id_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ID),_this=_super.call(this),void 0===prefix&&(prefix="id"),validateString(prefix),internalCounter.has(prefix)||internalCounter.set(prefix,1);var count=internalCounter.get(prefix);return _this.id=prefix+count,internalCounter.set(prefix,++count),_this}return function id_createClass(Constructor,protoProps,staticProps){return protoProps&&id_defineProperties(Constructor.prototype,protoProps),staticProps&&id_defineProperties(Constructor,staticProps),Constructor}(ID,[{key:"toString",value:function toString(){return this.id}}]),ID}(Base);function transformer_toConsumableArray(arr){return function transformer_arrayWithoutHoles(arr){if(Array.isArray(arr))return transformer_arrayLikeToArray(arr)}(arr)||function transformer_iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||transformer_unsupportedIterableToArray(arr)||function transformer_nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function transformer_typeof(obj){return(transformer_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function transformer_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=transformer_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function transformer_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return transformer_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?transformer_arrayLikeToArray(o,minLen):void 0}}function transformer_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function transformer_wrapRegExp(){transformer_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),transformer_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return transformer_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==transformer_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},transformer_wrapRegExp.apply(this,arguments)}function transformer_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function transformer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&transformer_setPrototypeOf(subClass,superClass)}function transformer_setPrototypeOf(o,p){return(transformer_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function transformer_createSuper(Derived){var hasNativeReflectConstruct=function transformer_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=transformer_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=transformer_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return transformer_possibleConstructorReturn(this,result)}}function transformer_possibleConstructorReturn(self,call){if(call&&("object"===transformer_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function transformer_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function transformer_getPrototypeOf(o){return(transformer_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ID);var Transformer=function(_Base){transformer_inherits(Transformer,_Base);var _super=transformer_createSuper(Transformer);function Transformer(definition){var _this;return function transformer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Transformer),_this=_super.call(this),validateString(definition),_this.args=function disassemble(command){validateString(command);var _step,placeholder=new Map,regex=transformer_wrapRegExp(/((\\(.)){1})/gim,{pattern:2,char:3}),_iterator=transformer_createForOfIteratorHelper(command.matchAll(regex));try{for(_iterator.s();!(_step=_iterator.n()).done;){var m=_step.value,g=null==m?void 0:m.groups;if(isObject(g)){var p=null==g?void 0:g.pattern,c=null==g?void 0:g.char;if(p&&c){var r="__"+(new ID).toString()+"__";placeholder.set(r,c),command=command.replace(p,r)}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var parts=command.split(":");return parts=parts.map((function(value){var _step2,v=value.trim(),_iterator2=transformer_createForOfIteratorHelper(placeholder);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var k=_step2.value;v=v.replace(k[0],k[1])}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return v}))}(definition),_this.command=_this.args.shift(),_this.callbacks=new Map,_this}return function transformer_createClass(Constructor,protoProps,staticProps){return protoProps&&transformer_defineProperties(Constructor.prototype,protoProps),staticProps&&transformer_defineProperties(Constructor,staticProps),Constructor}(Transformer,[{key:"setCallback",value:function setCallback(name,callback,context){return validateString(name),validateFunction(callback),void 0!==context&&validateObject(context),this.callbacks.set(name,{callback:callback,context:context}),this}},{key:"run",value:function run(value){return transform.apply(this,[value])}}]),Transformer}(Base);function transform(value){var _callback,key,args=clone(this.args);switch(this.command){case"static":return this.args.join(":");case"tolower":case"strtolower":case"tolowercase":return validateString(value),value.toLowerCase();case"toupper":case"strtoupper":case"touppercase":return validateString(value),value.toUpperCase();case"tostring":return""+value;case"tointeger":var n=parseInt(value);return validateInteger(n),n;case"tojson":return JSON.stringify(value);case"fromjson":return JSON.parse(value);case"trim":return validateString(value),value.trim();case"rawurlencode":return validateString(value),encodeURIComponent(value).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A");case"call":var callback,callbackName=args.shift(),context=getGlobal();if(isObject(value)&&value.hasOwnProperty(callbackName))callback=value[callbackName];else if(this.callbacks.has(callbackName)){var s=this.callbacks.get(callbackName);callback=null==s?void 0:s.callback,context=null==s?void 0:s.context}else"object"===("undefined"==typeof window?"undefined":transformer_typeof(window))&&window.hasOwnProperty(callbackName)&&(callback=window[callbackName]);return validateFunction(callback),args.unshift(value),(_callback=callback).call.apply(_callback,[context].concat(transformer_toConsumableArray(args)));case"plain":case"plaintext":return validateString(value),(new DOMParser).parseFromString(value,"text/html").body.textContent||"";case"if":case"?":validatePrimitive(value);var trueStatement=args.shift()||void 0,falseStatement=args.shift()||void 0;return"value"===trueStatement&&(trueStatement=value),"\\value"===trueStatement&&(trueStatement="value"),"value"===falseStatement&&(falseStatement=value),"\\value"===falseStatement&&(falseStatement="value"),void 0!==value&&""!==value&&"off"!==value&&"false"!==value&&!1!==value||"on"===value||"true"===value||!0===value?trueStatement:falseStatement;case"ucfirst":return validateString(value),value.charAt(0).toUpperCase()+value.substr(1);case"ucwords":return validateString(value),value.replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,(function(v){return v.toUpperCase()}));case"count":case"length":if((isString(value)||isObject(value)||isArray(value))&&value.hasOwnProperty("length"))return value.length;throw new TypeError("unsupported type "+transformer_typeof(value));case"base64":return function convertToString(value){return isObject(value)&&value.hasOwnProperty("toString")&&(value=value.toString()),validateString(value),value}(value),btoa(value);case"empty":return"";case"undefined":return;case"prefix":return validateString(value),(null==args?void 0:args[0])+value;case"suffix":return validateString(value),value+(null==args?void 0:args[0]);case"uniqid":return(new ID).toString();case"key":case"property":case"index":key=args.shift()||"undefined";var defaultValue=args.shift()||"";if(value instanceof Map)return value.has(key)?value.get(key):defaultValue;if(isObject(value)||isArray(value))return null!=value&&value[key]?null==value?void 0:value[key]:defaultValue;throw new Error("type not supported");case"path":return key=args.shift()||"undefined",new Pathfinder(value).getVia(key);case"substring":validateString(value);var start=parseInt(args[0])||0,end=(parseInt(args[1])||0)+start;return value.substring(start,end);case"nop":return value;case"default":return void 0!==value?value:args[0];default:throw new Error("unknown command "+this.command)}return value}function pipe_typeof(obj){return(pipe_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function pipe_slicedToArray(arr,i){return function pipe_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function pipe_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function pipe_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return pipe_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pipe_arrayLikeToArray(o,minLen)}(arr,i)||function pipe_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pipe_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function pipe_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function pipe_setPrototypeOf(o,p){return(pipe_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function pipe_createSuper(Derived){var hasNativeReflectConstruct=function pipe_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=pipe_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=pipe_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return pipe_possibleConstructorReturn(this,result)}}function pipe_possibleConstructorReturn(self,call){if(call&&("object"===pipe_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function pipe_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function pipe_getPrototypeOf(o){return(pipe_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Transformer);var Pipe=function(_Base){!function pipe_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&pipe_setPrototypeOf(subClass,superClass)}(Pipe,_Base);var _super=pipe_createSuper(Pipe);function Pipe(pipe){var _this;return function pipe_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Pipe),_this=_super.call(this),validateString(pipe),_this.pipe=pipe.split("|").map((function(v){return new Transformer(v)})),_this}return function pipe_createClass(Constructor,protoProps,staticProps){return protoProps&&pipe_defineProperties(Constructor.prototype,protoProps),staticProps&&pipe_defineProperties(Constructor,staticProps),Constructor}(Pipe,[{key:"setCallback",value:function setCallback(name,callback,context){for(var _i=0,_Object$entries=Object.entries(this.pipe);_i<_Object$entries.length;_i++){pipe_slicedToArray(_Object$entries[_i],2)[1].setCallback(name,callback,context)}return this}},{key:"run",value:function run(value){return this.pipe.reduce((function(accumulator,transformer,currentIndex,array){return transformer.run(accumulator)}),value)}}]),Pipe}(Base);function tokenlist_typeof(obj){return(tokenlist_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tokenlist_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function tokenlist_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return tokenlist_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tokenlist_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function tokenlist_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function tokenlist_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function tokenlist_setPrototypeOf(o,p){return(tokenlist_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function tokenlist_createSuper(Derived){var hasNativeReflectConstruct=function tokenlist_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=tokenlist_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=tokenlist_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return tokenlist_possibleConstructorReturn(this,result)}}function tokenlist_possibleConstructorReturn(self,call){if(call&&("object"===tokenlist_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function tokenlist_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function tokenlist_getPrototypeOf(o){return(tokenlist_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Pipe);var TokenList=function(_Base,_Symbol$iterator){!function tokenlist_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&tokenlist_setPrototypeOf(subClass,superClass)}(TokenList,_Base);var _super=tokenlist_createSuper(TokenList);function TokenList(init){var _this;return function tokenlist_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,TokenList),(_this=_super.call(this)).tokens=new Set,void 0!==init&&_this.add(init),_this}return function tokenlist_createClass(Constructor,protoProps,staticProps){return protoProps&&tokenlist_defineProperties(Constructor.prototype,protoProps),staticProps&&tokenlist_defineProperties(Constructor,staticProps),Constructor}(TokenList,[{key:"getIterator",value:function getIterator(){return this[Symbol.iterator]()}},{key:_Symbol$iterator,value:function value(){var index=0,entries=this.entries();return{next:function next(){return index<entries.length?{value:null==entries?void 0:entries[index++],done:!1}:{done:!0}}}}},{key:"contains",value:function contains(value){var _this2=this;if(isString(value)){value=value.trim();var counter=0;return value.split(" ").forEach((function(token){if(!1===_this2.tokens.has(token.trim()))return!1;counter++})),counter>0}if(isIterable(value)){var _step,_counter=0,_iterator=tokenlist_createForOfIteratorHelper(value);try{for(_iterator.s();!(_step=_iterator.n()).done;){var token=_step.value;if(validateString(token),!1===this.tokens.has(token.trim()))return!1;_counter++}}catch(err){_iterator.e(err)}finally{_iterator.f()}return _counter>0}return!1}},{key:"add",value:function add(value){var _this3=this;if(isString(value))value.split(" ").forEach((function(token){_this3.tokens.add(token.trim())}));else if(isIterable(value)){var _step2,_iterator2=tokenlist_createForOfIteratorHelper(value);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var token=_step2.value;validateString(token),this.tokens.add(token.trim())}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"clear",value:function clear(){return this.tokens.clear(),this}},{key:"remove",value:function remove(value){var _this4=this;if(isString(value))value.split(" ").forEach((function(token){_this4.tokens.delete(token.trim())}));else if(isIterable(value)){var _step3,_iterator3=tokenlist_createForOfIteratorHelper(value);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var token=_step3.value;validateString(token),this.tokens.delete(token.trim())}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"replace",value:function replace(token,newToken){if(validateString(token),validateString(newToken),!this.contains(token))return this;var a=Array.from(this.tokens),i=a.indexOf(token);return-1===i||(a.splice(i,1,newToken),this.tokens=new Set,this.add(a)),this}},{key:"toggle",value:function toggle(value){var _this5=this;if(isString(value))value.split(" ").forEach((function(token){toggleValue.call(_this5,token)}));else if(isIterable(value)){var _step4,_iterator4=tokenlist_createForOfIteratorHelper(value);try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var token=_step4.value;toggleValue.call(this,token)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"entries",value:function entries(){return Array.from(this.tokens)}},{key:"forEach",value:function forEach(callback){return validateFunction(callback),this.tokens.forEach(callback),this}},{key:"toString",value:function toString(){return this.entries().join(" ")}}]),TokenList}(Base,Symbol.iterator);function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");return validateString(token),token=token.trim(),this.contains(token)?(this.remove(token),this):(this.add(token),this)}function queue_typeof(obj){return(queue_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function queue_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function queue_setPrototypeOf(o,p){return(queue_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function queue_createSuper(Derived){var hasNativeReflectConstruct=function queue_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=queue_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=queue_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return queue_possibleConstructorReturn(this,result)}}function queue_possibleConstructorReturn(self,call){if(call&&("object"===queue_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function queue_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function queue_getPrototypeOf(o){return(queue_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",TokenList);var Queue=function(_Base){!function queue_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&queue_setPrototypeOf(subClass,superClass)}(Queue,_Base);var _super=queue_createSuper(Queue);function Queue(){var _this;return function queue_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Queue),(_this=_super.call(this)).data=[],_this}return function queue_createClass(Constructor,protoProps,staticProps){return protoProps&&queue_defineProperties(Constructor.prototype,protoProps),staticProps&&queue_defineProperties(Constructor,staticProps),Constructor}(Queue,[{key:"isEmpty",value:function isEmpty(){return 0===this.data.length}},{key:"peek",value:function peek(){if(!this.isEmpty())return this.data[0]}},{key:"add",value:function add(value){return this.data.push(value),this}},{key:"clear",value:function clear(){return this.data=[],this}},{key:"poll",value:function poll(){if(!this.isEmpty())return this.data.shift()}}]),Queue}(Base);function uniquequeue_typeof(obj){return(uniquequeue_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function uniquequeue_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function _get(target,property,receiver){return(_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function _superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=uniquequeue_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function uniquequeue_setPrototypeOf(o,p){return(uniquequeue_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function uniquequeue_createSuper(Derived){var hasNativeReflectConstruct=function uniquequeue_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=uniquequeue_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=uniquequeue_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return uniquequeue_possibleConstructorReturn(this,result)}}function uniquequeue_possibleConstructorReturn(self,call){if(call&&("object"===uniquequeue_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function uniquequeue_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function uniquequeue_getPrototypeOf(o){return(uniquequeue_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Queue);var UniqueQueue=function(_Queue){!function uniquequeue_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&uniquequeue_setPrototypeOf(subClass,superClass)}(UniqueQueue,_Queue);var _super=uniquequeue_createSuper(UniqueQueue);function UniqueQueue(){var _this;return function uniquequeue_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,UniqueQueue),(_this=_super.call(this)).unique=new WeakSet,_this}return function uniquequeue_createClass(Constructor,protoProps,staticProps){return protoProps&&uniquequeue_defineProperties(Constructor.prototype,protoProps),staticProps&&uniquequeue_defineProperties(Constructor,staticProps),Constructor}(UniqueQueue,[{key:"add",value:function add(value){return validateObject(value),this.unique.has(value)||(this.unique.add(value),_get(uniquequeue_getPrototypeOf(UniqueQueue.prototype),"add",this).call(this,value)),this}},{key:"clear",value:function clear(){return _get(uniquequeue_getPrototypeOf(UniqueQueue.prototype),"clear",this).call(this),this.unique=new WeakSet,this}},{key:"poll",value:function poll(){if(!this.isEmpty()){var value=this.data.shift();return this.unique.delete(value),value}}}]),UniqueQueue}(Queue);function observer_typeof(obj){return(observer_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function observer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function observer_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function observer_setPrototypeOf(o,p){return(observer_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function observer_createSuper(Derived){var hasNativeReflectConstruct=function observer_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=observer_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=observer_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return observer_possibleConstructorReturn(this,result)}}function observer_possibleConstructorReturn(self,call){if(call&&("object"===observer_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function observer_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function observer_getPrototypeOf(o){return(observer_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",UniqueQueue);var Observer=function(_Base){!function observer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&observer_setPrototypeOf(subClass,superClass)}(Observer,_Base);var _super=observer_createSuper(Observer);function Observer(callback){var _this;if(observer_classCallCheck(this,Observer),_this=_super.call(this),"function"!=typeof callback)throw new Error("observer callback must be a function");_this.callback=callback;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return _this.arguments=args,_this.tags=new TokenList,_this.queue=new UniqueQueue,_this}return function observer_createClass(Constructor,protoProps,staticProps){return protoProps&&observer_defineProperties(Constructor.prototype,protoProps),staticProps&&observer_defineProperties(Constructor,staticProps),Constructor}(Observer,[{key:"addTag",value:function addTag(tag){return this.tags.add(tag),this}},{key:"removeTag",value:function removeTag(tag){return this.tags.remove(tag),this}},{key:"getTags",value:function getTags(){return this.tags.entries()}},{key:"hasTag",value:function hasTag(tag){return this.tags.contains(tag)}},{key:"update",value:function update(subject){var self=this;return new Promise((function(resolve,reject){isObject(subject)?(self.queue.add(subject),setTimeout((function(){try{if(self.queue.isEmpty())return void resolve();var s=self.queue.poll(),result=self.callback.apply(s,self.arguments);if(isObject(result)&&result instanceof Promise)return void result.then(resolve).catch(reject);resolve(result)}catch(e){reject(e)}}),0)):reject("subject must be an object")}))}}]),Observer}(Base);function observerlist_typeof(obj){return(observerlist_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function observerlist_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function observerlist_setPrototypeOf(o,p){return(observerlist_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function observerlist_createSuper(Derived){var hasNativeReflectConstruct=function observerlist_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=observerlist_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=observerlist_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return observerlist_possibleConstructorReturn(this,result)}}function observerlist_possibleConstructorReturn(self,call){if(call&&("object"===observerlist_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function observerlist_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function observerlist_getPrototypeOf(o){return(observerlist_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Observer);var ObserverList=function(_Base){!function observerlist_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&observerlist_setPrototypeOf(subClass,superClass)}(ObserverList,_Base);var _super=observerlist_createSuper(ObserverList);function ObserverList(){var _this;return function observerlist_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ObserverList),(_this=_super.call(this)).observers=[],_this}return function observerlist_createClass(Constructor,protoProps,staticProps){return protoProps&&observerlist_defineProperties(Constructor.prototype,protoProps),staticProps&&observerlist_defineProperties(Constructor,staticProps),Constructor}(ObserverList,[{key:"attach",value:function attach(observer){return validateInstance(observer,Observer),this.observers.push(observer),this}},{key:"detach",value:function detach(observer){validateInstance(observer,Observer);for(var i=0,l=this.observers.length;i<l;i++)this.observers[i]===observer&&this.observers.splice(i,1);return this}},{key:"contains",value:function contains(observer){validateInstance(observer,Observer);for(var i=0,l=this.observers.length;i<l;i++)if(this.observers[i]===observer)return!0;return!1}},{key:"notify",value:function notify(subject){for(var pomises=[],i=0,l=this.observers.length;i<l;i++)pomises.push(this.observers[i].update(subject));return Promise.all(pomises)}}]),ObserverList}(Base);function proxyobserver_typeof(obj){return(proxyobserver_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function proxyobserver_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function proxyobserver_setPrototypeOf(o,p){return(proxyobserver_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function proxyobserver_createSuper(Derived){var hasNativeReflectConstruct=function proxyobserver_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=proxyobserver_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=proxyobserver_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return proxyobserver_possibleConstructorReturn(this,result)}}function proxyobserver_possibleConstructorReturn(self,call){if(call&&("object"===proxyobserver_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return proxyobserver_assertThisInitialized(self)}function proxyobserver_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function proxyobserver_getPrototypeOf(o){return(proxyobserver_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ObserverList);var ProxyObserver=function(_Base){!function proxyobserver_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&proxyobserver_setPrototypeOf(subClass,superClass)}(ProxyObserver,_Base);var _super=proxyobserver_createSuper(ProxyObserver);function ProxyObserver(object){var _this;return function proxyobserver_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ProxyObserver),(_this=_super.call(this)).realSubject=validateObject(object),_this.subject=new Proxy(object,getHandler.call(proxyobserver_assertThisInitialized(_this))),_this.objectMap=new WeakMap,_this.objectMap.set(_this.realSubject,_this.subject),_this.proxyMap=new WeakMap,_this.proxyMap.set(_this.subject,_this.realSubject),_this.observers=new ObserverList,_this}return function proxyobserver_createClass(Constructor,protoProps,staticProps){return protoProps&&proxyobserver_defineProperties(Constructor.prototype,protoProps),staticProps&&proxyobserver_defineProperties(Constructor,staticProps),Constructor}(ProxyObserver,[{key:"getSubject",value:function getSubject(){return this.subject}},{key:"getRealSubject",value:function getRealSubject(){return this.realSubject}},{key:"attachObserver",value:function attachObserver(observer){return this.observers.attach(observer),this}},{key:"detachObserver",value:function detachObserver(observer){return this.observers.detach(observer),this}},{key:"notifyObservers",value:function notifyObservers(){return this.observers.notify(this)}},{key:"containsObserver",value:function containsObserver(observer){return this.observers.contains(observer)}}]),ProxyObserver}(Base);function getHandler(){var proxy=this,handler={get:function get(target,key,receiver){var value=Reflect.get(target,key,receiver);if("symbol"===proxyobserver_typeof(key))return value;if(isPrimitive(value))return value;if(isArray(value)||isObject(value)){if(proxy.objectMap.has(value))return proxy.objectMap.get(value);if(proxy.proxyMap.has(value))return value;var p=new Proxy(value,handler);return proxy.objectMap.set(value,p),proxy.proxyMap.set(p,value),p}return value},set:function set(target,key,value,receiver){proxy.proxyMap.has(value)&&(value=proxy.proxyMap.get(value)),proxy.proxyMap.has(target)&&(target=proxy.proxyMap.get(target));var result,current=Reflect.get(target,key,receiver);if(proxy.proxyMap.has(current)&&(current=proxy.proxyMap.get(current)),current===value)return!0;var descriptor=Reflect.getOwnPropertyDescriptor(target,key);return void 0===descriptor&&(descriptor={writable:!0,enumerable:!0,configurable:!0}),descriptor.value=value,result=Reflect.defineProperty(target,key,descriptor),"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result},deleteProperty:function deleteProperty(target,key){return key in target&&(delete target[key],"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),!0)},defineProperty:function defineProperty(target,key,descriptor){var result=Reflect.defineProperty(target,key,descriptor);return"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result},setPrototypeOf:function setPrototypeOf(target,key){var result=Reflect.setPrototypeOf(object1,key);return"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result}};return handler}function assembler_typeof(obj){return(assembler_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function assembler_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function assembler_setPrototypeOf(o,p){return(assembler_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function assembler_createSuper(Derived){var hasNativeReflectConstruct=function assembler_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=assembler_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=assembler_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return assembler_possibleConstructorReturn(this,result)}}function assembler_possibleConstructorReturn(self,call){if(call&&("object"===assembler_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function assembler_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function assembler_getPrototypeOf(o){return(assembler_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ProxyObserver);assignToNamespace("Monster.DOM",function(_Base){!function assembler_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&assembler_setPrototypeOf(subClass,superClass)}(Assembler,_Base);var _super=assembler_createSuper(Assembler);function Assembler(fragment){var _this;return function assembler_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Assembler),(_this=_super.call(this)).attributePrefix="data-monster-",validateInstance(fragment,getGlobalFunction("DocumentFragment")),_this.fragment=fragment,_this}return function assembler_createClass(Constructor,protoProps,staticProps){return protoProps&&assembler_defineProperties(Constructor.prototype,protoProps),staticProps&&assembler_defineProperties(Constructor,staticProps),Constructor}(Assembler,[{key:"setAttributePrefix",value:function setAttributePrefix(prefix){return validateString(prefix),this.attributePrefix=prefix,this}},{key:"getAttributePrefix",value:function getAttributePrefix(){return this.attributePrefix}},{key:"createDocumentFragment",value:function createDocumentFragment(data){return void 0===data&&(data=new ProxyObserver({})),validateInstance(data,ProxyObserver),this.fragment.cloneNode(!0)}}]),Assembler}(Base));function addToObjectLink(element,symbol,object){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol])&&(element[symbol]=new Set),addAttributeToken(element,"data-monster-objectlink",symbol.toString()),element[symbol].add(object),element}function hasObjectLink(element,symbol){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0!==(null==element?void 0:element[symbol])&&containsAttributeToken(element,"data-monster-objectlink",symbol.toString())}function getLinkedObjects(element,symbol){if(validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol]))throw new Error("there is no object link for "+symbol.toString());return null==element?void 0:element[symbol][Symbol.iterator]()}function addAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).add(token).toString()),element):(element.setAttribute(key,token),element)}function removeAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).remove(token).toString()),element):element}function containsAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),!!element.hasAttribute(key)&&new TokenList(element.getAttribute(key)).contains(token)}function findClosestByAttribute(element,key,value){if(validateInstance(element,getGlobalFunction("HTMLElement")),element.hasAttribute(key)&&element.getAttribute(key)===value)return element;var selector=validateString(key);void 0!==value&&(selector+="="+validateString(value));var result=element.closest("["+selector+"]");return result instanceof HTMLElement?result:void 0}function mediatype_typeof(obj){return(mediatype_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function mediatype_wrapRegExp(){mediatype_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),mediatype_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return mediatype_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==mediatype_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},mediatype_wrapRegExp.apply(this,arguments)}function mediatype_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function mediatype_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return mediatype_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mediatype_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function mediatype_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function mediatype_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function mediatype_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&mediatype_setPrototypeOf(subClass,superClass)}function mediatype_setPrototypeOf(o,p){return(mediatype_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function mediatype_createSuper(Derived){var hasNativeReflectConstruct=function mediatype_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=mediatype_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=mediatype_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return mediatype_possibleConstructorReturn(this,result)}}function mediatype_possibleConstructorReturn(self,call){if(call&&("object"===mediatype_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function mediatype_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function mediatype_getPrototypeOf(o){return(mediatype_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",getLinkedObjects,addToObjectLink,(function removeObjectLink(element,symbol){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol])||(removeAttributeToken(element,"data-monster-objectlink",symbol.toString()),delete element[symbol]),element}),findClosestByAttribute,hasObjectLink,(function clearAttributeTokens(element,key){return validateInstance(element,HTMLElement),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,""),element):element}),(function replaceAttributeToken(element,key,from,to){return validateInstance(element,HTMLElement),validateString(from),validateString(to),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).replace(from,to).toString()),element):element}),containsAttributeToken,removeAttributeToken,addAttributeToken,(function toggleAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).toggle(token).toString()),element):(element.setAttribute(key,token),element)}));var internal=Symbol("internal"),MediaType=function(_Base){mediatype_inherits(MediaType,_Base);var _super=mediatype_createSuper(MediaType);function MediaType(type,subtype,parameter){var _this;return function mediatype_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,MediaType),(_this=_super.call(this))[internal]={type:validateString(type).toLowerCase(),subtype:validateString(subtype).toLowerCase(),parameter:[]},void 0!==parameter&&(_this[internal].parameter=validateArray(parameter)),_this}return function mediatype_createClass(Constructor,protoProps,staticProps){return protoProps&&mediatype_defineProperties(Constructor.prototype,protoProps),staticProps&&mediatype_defineProperties(Constructor,staticProps),Constructor}(MediaType,[{key:"type",get:function get(){return this[internal].type}},{key:"subtype",get:function get(){return this[internal].subtype}},{key:"parameter",get:function get(){var result=new Map;return this[internal].parameter.forEach((function(p){var value=p.value;value.startsWith('"')&&value.endsWith('"')&&(value=value.substring(1,value.length-1)),result.set(p.key,value)})),result}},{key:"toString",value:function toString(){var _step,parameter=[],_iterator=mediatype_createForOfIteratorHelper(this[internal].parameter);try{for(_iterator.s();!(_step=_iterator.n()).done;){var a=_step.value;parameter.push(a.key+"="+a.value)}}catch(err){_iterator.e(err)}finally{_iterator.f()}return this[internal].type+"/"+this[internal].subtype+(parameter.length>0?";"+parameter.join(";"):"")}}]),MediaType}(Base);function parseMediaType(mediatype){var result=mediatype_wrapRegExp(/([A-Za-z]+|\*)\/(([\+\x2D\.0-9A-Z_a-z]+)|\*|)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*;[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*([0-9A-Za-z]+)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*("?[\x2D0-9A-Z_a-z]+"?))?)*/g,{type:1,subtype:2,parameter:4}).exec(validateString(mediatype)),groups=null==result?void 0:result.groups;if(void 0===groups)throw new TypeError("the mimetype can not be parsed");var type=null==groups?void 0:groups.type,subtype=null==groups?void 0:groups.subtype,parameter=null==groups?void 0:groups.parameter;if(""===subtype||""===type)throw new TypeError("blank value is not allowed");return new MediaType(type,subtype,function parseParameter(parameter){if(!isString(parameter))return;var result=[];return parameter.split(";").forEach((function(entry){if(""!==(entry=entry.trim())){var kv=entry.split("="),key=validateString(null==kv?void 0:kv[0]).trim(),value=validateString(null==kv?void 0:kv[1]).trim();result.push({key:key,value:value})}})),result}(parameter))}function dataurl_typeof(obj){return(dataurl_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function dataurl_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function dataurl_setPrototypeOf(o,p){return(dataurl_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function dataurl_createSuper(Derived){var hasNativeReflectConstruct=function dataurl_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=dataurl_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=dataurl_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return dataurl_possibleConstructorReturn(this,result)}}function dataurl_possibleConstructorReturn(self,call){if(call&&("object"===dataurl_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function dataurl_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function dataurl_getPrototypeOf(o){return(dataurl_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",parseMediaType,MediaType);var dataurl_internal=Symbol("internal"),DataUrl=function(_Base){!function dataurl_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&dataurl_setPrototypeOf(subClass,superClass)}(DataUrl,_Base);var _super=dataurl_createSuper(DataUrl);function DataUrl(content,mediatype,base64){var _this;return function dataurl_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,DataUrl),_this=_super.call(this),isString(mediatype)&&(mediatype=parseMediaType(mediatype)),_this[dataurl_internal]={content:validateString(content),mediatype:validateInstance(mediatype,MediaType),base64:validateBoolean(void 0===base64||base64)},_this}return function dataurl_createClass(Constructor,protoProps,staticProps){return protoProps&&dataurl_defineProperties(Constructor.prototype,protoProps),staticProps&&dataurl_defineProperties(Constructor,staticProps),Constructor}(DataUrl,[{key:"content",get:function get(){return this[dataurl_internal].base64?atob(this[dataurl_internal].content):this[dataurl_internal].content}},{key:"mediatype",get:function get(){return this[dataurl_internal].mediatype}},{key:"toString",value:function toString(){var content=this[dataurl_internal].content;return content=!0===this[dataurl_internal].base64?";base64,"+content:","+encodeURIComponent(content),"data:"+this[dataurl_internal].mediatype.toString()+content}}]),DataUrl}(Base);function parseDataURL(dataurl){if(validateString(dataurl),"data:"!==(dataurl=dataurl.trim()).substring(0,5))throw new TypeError("incorrect or missing data protocol");var p=(dataurl=dataurl.substring(5)).indexOf(",");if(-1===p)throw new TypeError("malformed data url");var content=dataurl.substring(p+1),mediatypeAndBase64=dataurl.substring(0,p).trim(),mediatype="text/plain;charset=US-ASCII",base64Flag=!1;if(""!==mediatypeAndBase64){if(mediatype=mediatypeAndBase64,mediatypeAndBase64.endsWith("base64")){var i=mediatypeAndBase64.lastIndexOf(";");mediatype=mediatypeAndBase64.substring(0,i),base64Flag=!0}else content=decodeURIComponent(content);mediatype=parseMediaType(mediatype)}else content=decodeURIComponent(content);return new DataUrl(content,mediatype,base64Flag)}function theme_typeof(obj){return(theme_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function theme_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function theme_setPrototypeOf(o,p){return(theme_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function theme_createSuper(Derived){var hasNativeReflectConstruct=function theme_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=theme_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=theme_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return theme_possibleConstructorReturn(this,result)}}function theme_possibleConstructorReturn(self,call){if(call&&("object"===theme_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function theme_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function theme_getPrototypeOf(o){return(theme_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",parseDataURL,DataUrl);var Theme=function(_Base){!function theme_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&theme_setPrototypeOf(subClass,superClass)}(Theme,_Base);var _super=theme_createSuper(Theme);function Theme(name){var _this;return function theme_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Theme),_this=_super.call(this),validateString(name),_this.name=name,_this}return function theme_createClass(Constructor,protoProps,staticProps){return protoProps&&theme_defineProperties(Constructor.prototype,protoProps),staticProps&&theme_defineProperties(Constructor,staticProps),Constructor}(Theme,[{key:"getName",value:function getName(){return this.name}}]),Theme}(Base);function getDocumentTheme(){var name="monster",element=getGlobalObject("document").querySelector("html");if(element instanceof HTMLElement){var theme=element.getAttribute("data-monster-theme-name");theme&&(name=theme)}return new Theme(name)}function template_typeof(obj){return(template_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function template_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function template_setPrototypeOf(o,p){return(template_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function template_createSuper(Derived){var hasNativeReflectConstruct=function template_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=template_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=template_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return template_possibleConstructorReturn(this,result)}}function template_possibleConstructorReturn(self,call){if(call&&("object"===template_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function template_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function template_getPrototypeOf(o){return(template_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Theme,getDocumentTheme);var Template=function(_Base){!function template_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&template_setPrototypeOf(subClass,superClass)}(Template,_Base);var _super=template_createSuper(Template);function Template(template){var _this;return function template_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Template),_this=_super.call(this),validateInstance(template,getGlobalFunction("HTMLTemplateElement")),_this.template=template,_this}return function template_createClass(Constructor,protoProps,staticProps){return protoProps&&template_defineProperties(Constructor.prototype,protoProps),staticProps&&template_defineProperties(Constructor,staticProps),Constructor}(Template,[{key:"getTemplateElement",value:function getTemplateElement(){return this.template}},{key:"createDocumentFragment",value:function createDocumentFragment(){return this.template.content.cloneNode(!0)}}]),Template}(Base);function findDocumentTemplate(id,currentNode){validateString(id),currentNode instanceof Document||currentNode instanceof DocumentFragment||(currentNode instanceof Node&&((currentNode=currentNode.getRootNode())instanceof Document||currentNode instanceof DocumentFragment||(currentNode=currentNode.ownerDocument)),currentNode instanceof Document||currentNode instanceof DocumentFragment||(currentNode=getGlobalObject("document")));var HTMLTemplateElement=getGlobalFunction("HTMLTemplateElement"),themedID=id+"-"+getDocumentTheme().getName(),template=currentNode.getElementById(themedID);if(template instanceof HTMLTemplateElement)return new Template(template);if((template=currentNode.getElementById(id))instanceof HTMLTemplateElement)return new Template(template);if(currentNode!==getGlobalObject("document"))return findDocumentTemplate(id);throw new Error("template "+id+" not found.")}function util_typeof(obj){return(util_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function getDocument(){var _getGlobal,document=null===(_getGlobal=getGlobal())||void 0===_getGlobal?void 0:_getGlobal.document;if("object"!==util_typeof(document))throw new Error("not supported environment");return document}function updater_typeof(obj){return(updater_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function updater_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=updater_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function updater_slicedToArray(arr,i){return function updater_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function updater_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||updater_unsupportedIterableToArray(arr,i)||function updater_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function updater_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return updater_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?updater_arrayLikeToArray(o,minLen):void 0}}function updater_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function updater_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function updater_setPrototypeOf(o,p){return(updater_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function updater_createSuper(Derived){var hasNativeReflectConstruct=function updater_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=updater_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=updater_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return updater_possibleConstructorReturn(this,result)}}function updater_possibleConstructorReturn(self,call){if(call&&("object"===updater_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return updater_assertThisInitialized(self)}function updater_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function updater_getPrototypeOf(o){return(updater_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Template,findDocumentTemplate),assignToNamespace("Monster.DOM",(function getWindow(){var _getGlobal2,window=null===(_getGlobal2=getGlobal())||void 0===_getGlobal2?void 0:_getGlobal2.window;if("object"!==util_typeof(window))throw new Error("not supported environment");return window}),getDocument,(function getDocumentFragmentFromString(html){validateString(html);var template=getDocument().createElement("template");return template.innerHTML=html,template.content}));var Updater=function(_Base){!function updater_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&updater_setPrototypeOf(subClass,superClass)}(Updater,_Base);var _super=updater_createSuper(Updater);function Updater(element,subject){var _this;!function updater_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Updater),(_this=_super.call(this)).element=validateInstance(element,HTMLElement),void 0===subject&&(subject={});return isInstance(subject,ProxyObserver)||(subject=new ProxyObserver(subject)),_this.last={},_this.callbacks=new Map,_this.callbacks.set("checkstate",getCheckStateCallback.call(updater_assertThisInitialized(_this))),_this.subject=subject.attachObserver(new Observer((function(){var s=_this.subject.getRealSubject(),diff=Diff(_this.last,s);_this.last=clone(s);for(var _i=0,_Object$entries=Object.entries(diff);_i<_Object$entries.length;_i++){var change=updater_slicedToArray(_Object$entries[_i],2)[1];removeElement.call(updater_assertThisInitialized(_this),change),insertElement.call(updater_assertThisInitialized(_this),change),updateContent.call(updater_assertThisInitialized(_this),change),updateAttributes.call(updater_assertThisInitialized(_this),change)}}))),_this.eventTypes=["keyup","click","change","drop","touchend","input"],_this}return function updater_createClass(Constructor,protoProps,staticProps){return protoProps&&updater_defineProperties(Constructor.prototype,protoProps),staticProps&&updater_defineProperties(Constructor,staticProps),Constructor}(Updater,[{key:"setEventTypes",value:function setEventTypes(types){return this.eventTypes=validateArray(types),this}},{key:"enableEventProcessing",value:function enableEventProcessing(){this.disableEventProcessing();var _step,_iterator=updater_createForOfIteratorHelper(this.eventTypes);try{for(_iterator.s();!(_step=_iterator.n()).done;){var type=_step.value;this.element.addEventListener(type,getControlEventHandler.call(this))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return this}},{key:"disableEventProcessing",value:function disableEventProcessing(){var _step2,_iterator2=updater_createForOfIteratorHelper(this.eventTypes);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var type=_step2.value;this.element.removeEventListener(type,getControlEventHandler.call(this))}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return this}},{key:"run",value:function run(){return this.last={__init__:!0},this.subject.notifyObservers()}},{key:"getSubject",value:function getSubject(){return this.subject.getSubject()}},{key:"setCallback",value:function setCallback(name,callback){return this.callbacks.set(name,callback),this}}]),Updater}(Base);function getCheckStateCallback(){return function(current){if(this instanceof HTMLInputElement){if(-1!==["radio","checkbox"].indexOf(this.type))return this.value+""==current+""?"true":void 0}else if(this instanceof HTMLOptionElement)return isArray(current)&&-1!==current.indexOf(this.value)?"true":void 0}}var symbol=Symbol("EventHandler");function getControlEventHandler(){var self=this;if(self[symbol])return self[symbol];var pathfinder=new Pathfinder(this.subject.getSubject());return self[symbol]=function(event){var _element$constructor,_Object$getOwnPropert,element=event.target;if(element.hasAttribute("data-monster-bind")){var value,path=element.getAttribute("data-monster-bind");if(0!==path.indexOf("path:"))throw new Error("the bind argument must start as a value with a path.");if(path=path.substr(5),element instanceof HTMLInputElement)switch(element.type){case"checkbox":value=element.checked?element.value:void 0;break;default:value=element.value}else if(element instanceof HTMLTextAreaElement)value=element.value;else if(element instanceof HTMLSelectElement)switch(element.type){case"select-one":value=element.value;break;case"select-multiple":value=element.value;var options=null==element?void 0:element.selectedOptions;void 0===options&&(options=element.querySelectorAll(":scope option:checked")),value=Array.from(options).map((function(_ref){return _ref.value}))}else{if(!(null!=element&&null!==(_element$constructor=element.constructor)&&void 0!==_element$constructor&&_element$constructor.prototype&&null!==(_Object$getOwnPropert=Object.getOwnPropertyDescriptor(element.constructor.prototype,"value"))&&void 0!==_Object$getOwnPropert&&_Object$getOwnPropert.get||element.hasOwnProperty("value")))throw new Error("unsupported object");value=null==element?void 0:element.value}var copy=clone(self.subject.getRealSubject());new Pathfinder(copy).setVia(path,value),new Diff(copy,self.subject.getRealSubject()).length>0&&pathfinder.setVia(path,value)}},self[symbol]}function removeElement(change){var _step3,_iterator3=updater_createForOfIteratorHelper(this.element.querySelectorAll(":scope [data-monster-remove]").entries());try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var element=updater_slicedToArray(_step3.value,2)[1];element.parentNode.removeChild(element)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}function insertElement(change){for(var _this2=this,subject=this.subject.getRealSubject(),mem=(getDocument(),new WeakSet),wd=0;;){var found=!1;wd++;var p=clone(null==change?void 0:change.path);if(!isArray(p))return this;for(;p.length>0;){var _step4,current=p.join("."),_iterator4=updater_createForOfIteratorHelper(this.element.querySelectorAll(':scope [data-monster-insert*="path:'+current+'"]').entries());try{var _loop=function _loop(){var containerElement=updater_slicedToArray(_step4.value,2)[1];if(mem.has(containerElement))return"continue";mem.add(containerElement),found=!0;var def=containerElement.getAttribute("data-monster-insert").trim(),i=def.indexOf(" "),key=def.substr(0,i).trim(),refPrefix=key+"-",cmd=def.substr(i).trim();if(cmd.indexOf("|")>0)throw new Error("pipes are not allowed when cloning a node.");var pipe=new Pipe(cmd);_this2.callbacks.forEach((function(f,n){pipe.setCallback(n,f)}));var value=pipe.run(subject),dataPath=cmd.split(":").pop();if(containerElement.hasChildNodes()&&containerElement.lastChild,!isIterable(value))throw new Error("the value is not iterable");for(var available=new Set,_i2=0,_Object$entries2=Object.entries(value);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=updater_slicedToArray(_Object$entries2[_i2],2),_i3=_Object$entries2$_i[0],ref=(_Object$entries2$_i[1],refPrefix+_i3),currentPath=dataPath+"."+_i3;available.add(ref);var refElement=containerElement.querySelector('[data-monster-insert-reference="'+ref+'"]');refElement instanceof HTMLElement?refElement:appendNewDocumentFragment(containerElement,key,ref,currentPath)}for(var nodes=containerElement.querySelectorAll('[data-monster-insert-reference*="'+refPrefix+'"]'),_i4=0,_Object$entries3=Object.entries(nodes);_i4<_Object$entries3.length;_i4++){var node=updater_slicedToArray(_Object$entries3[_i4],2)[1];available.has(node.getAttribute("data-monster-insert-reference"))||containerElement.removeChild(node)}};for(_iterator4.s();!(_step4=_iterator4.n()).done;)_loop()}catch(err){_iterator4.e(err)}finally{_iterator4.f()}p.pop()}if(!1===found)break;if(wd++>200)throw new Error("the maximum depth for the recursion is reached.")}}function appendNewDocumentFragment(container,key,ref,path){for(var nodes=findDocumentTemplate(key,container).createDocumentFragment(),_i5=0,_Object$entries4=Object.entries(nodes.childNodes);_i5<_Object$entries4.length;_i5++){var node=updater_slicedToArray(_Object$entries4[_i5],2)[1];node instanceof HTMLElement&&(applyRecursive(node,key,path),node.setAttribute("data-monster-insert-reference",ref)),container.appendChild(node)}}function applyRecursive(node,key,path){if(node instanceof HTMLElement){if(node.hasAttribute("data-monster-replace")){var value=node.getAttribute("data-monster-replace");node.setAttribute("data-monster-replace",value.replace("path:"+key,"path:"+path))}if(node.hasAttribute("data-monster-attributes")){var _value=node.getAttribute("data-monster-attributes");node.setAttribute("data-monster-attributes",_value.replace("path:"+key,"path:"+path))}for(var _i6=0,_Object$entries5=Object.entries(node.childNodes);_i6<_Object$entries5.length;_i6++){applyRecursive(updater_slicedToArray(_Object$entries5[_i6],2)[1],key,path)}}}function updateContent(change){var subject=this.subject.getRealSubject(),p=clone(null==change?void 0:change.path);runUpdateContent.call(this,this.element,p,subject)}function runUpdateContent(container,parts,subject){var _this3=this;if(isArray(parts)){parts=clone(parts);for(var mem=new WeakSet;parts.length>0;){var current=parts.join(".");parts.pop();var _step5,_iterator5=updater_createForOfIteratorHelper(container.querySelectorAll(':scope [data-monster-replace^="path:'+current+'"], [data-monster-replace^="static:"]').entries());try{var _loop2=function _loop2(){var element=updater_slicedToArray(_step5.value,2)[1];if(mem.has(element))return"continue";mem.add(element);var cmd=element.getAttribute("data-monster-replace").trim(),pipe=new Pipe(cmd);_this3.callbacks.forEach((function(f,n){pipe.setCallback(n,f)}));var value=pipe.run(subject);if(value instanceof HTMLElement){for(;element.firstChild;)element.removeChild(element.firstChild);element.addNode(value)}else element.innerHTML=value};for(_iterator5.s();!(_step5=_iterator5.n()).done;)_loop2()}catch(err){_iterator5.e(err)}finally{_iterator5.f()}}}}function updateAttributes(change){var subject=this.subject.getRealSubject(),p=clone(null==change?void 0:change.path);runUpdateAttributes.call(this,this.element,p,subject)}function runUpdateAttributes(container,parts,subject){var _this4=this,self=this;if(isArray(parts)){parts=clone(parts);for(var mem=new WeakSet;parts.length>0;){var current=parts.join(".");parts.pop();var _step6,_iterator6=updater_createForOfIteratorHelper(container.querySelectorAll(':scope [data-monster-attributes*="path:'+current+'"]').entries());try{var _loop3=function _loop3(){var element=updater_slicedToArray(_step6.value,2)[1];if(mem.has(element))return"continue";mem.add(element);for(var attributes=element.getAttribute("data-monster-attributes"),_loop4=function _loop4(){var def=updater_slicedToArray(_Object$entries6[_i7],2)[1],i=(def=def.trim()).indexOf(" "),name=def.substr(0,i).trim(),cmd=def.substr(i).trim(),pipe=new Pipe(cmd);self.callbacks.forEach((function(f,n){pipe.setCallback(n,f,element)}));var value=pipe.run(subject);void 0===value?element.removeAttribute(name):element.getAttribute(name)!==value&&element.setAttribute(name,value),handleInputControlAttributeUpdate.call(_this4,element,name,value)},_i7=0,_Object$entries6=Object.entries(attributes.split(","));_i7<_Object$entries6.length;_i7++)_loop4()};for(_iterator6.s();!(_step6=_iterator6.n()).done;)_loop3()}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}}}function handleInputControlAttributeUpdate(element,name,value){if(element instanceof HTMLSelectElement)switch(element.type){case"select-multiple":for(var _i8=0,_Object$entries7=Object.entries(element.options);_i8<_Object$entries7.length;_i8++){var _Object$entries7$_i=updater_slicedToArray(_Object$entries7[_i8],2),opt=(_Object$entries7$_i[0],_Object$entries7$_i[1]);-1!==value.indexOf(opt.value)?opt.selected=!0:opt.selected=!1}break;case"select-one":for(var _i9=0,_Object$entries8=Object.entries(element.options);_i9<_Object$entries8.length;_i9++){var _Object$entries8$_i=updater_slicedToArray(_Object$entries8[_i9],2),_index=_Object$entries8$_i[0];if(_Object$entries8$_i[1].value===value){element.selectedIndex=_index;break}}}else if(element instanceof HTMLInputElement)switch(element.type){case"radio":case"checkbox":element.checked="checked"===name&&void 0!==value;break;case"text":default:"value"===name&&(element.value=void 0===value?"":value)}else element instanceof HTMLTextAreaElement&&"value"===name&&(element.value=void 0===value?"":value)}function customelement_typeof(obj){return(customelement_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function customelement_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=customelement_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function customelement_slicedToArray(arr,i){return function customelement_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function customelement_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||customelement_unsupportedIterableToArray(arr,i)||function customelement_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function customelement_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return customelement_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?customelement_arrayLikeToArray(o,minLen):void 0}}function customelement_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function customelement_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function customelement_possibleConstructorReturn(self,call){if(call&&("object"===customelement_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return customelement_assertThisInitialized(self)}function customelement_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function customelement_wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return(customelement_wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!function customelement_isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if(void 0!==_cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return customelement_construct(Class,arguments,customelement_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),customelement_setPrototypeOf(Wrapper,Class)})(Class)}function customelement_construct(Parent,args,Class){return(customelement_construct=customelement_isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&customelement_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function customelement_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function customelement_setPrototypeOf(o,p){return(customelement_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function customelement_getPrototypeOf(o){return(customelement_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Updater);var internalDataSymbol=Symbol.for("monsterInternalData"),objectLinkSymbol=Symbol.for("monsterUpdater"),initMethodSymbol=Symbol("initMethodSymbol"),assembleMethodSymbol=Symbol("assembleMethodSymbol"),CustomElement=function(_HTMLElement){!function customelement_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&customelement_setPrototypeOf(subClass,superClass)}(CustomElement,_HTMLElement);var _super=function customelement_createSuper(Derived){var hasNativeReflectConstruct=customelement_isNativeReflectConstruct();return function _createSuperInternal(){var result,Super=customelement_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=customelement_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return customelement_possibleConstructorReturn(this,result)}}(CustomElement);function CustomElement(){var _this;return function customelement_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CustomElement),(_this=_super.call(this))[internalDataSymbol]=new ProxyObserver({options:extend({},_this.defaults,getOptionsFromAttributes.call(customelement_assertThisInitialized(_this)))}),initOptionObserver.call(customelement_assertThisInitialized(_this)),_this[initMethodSymbol](),_this}return function customelement_createClass(Constructor,protoProps,staticProps){return protoProps&&customelement_defineProperties(Constructor.prototype,protoProps),staticProps&&customelement_defineProperties(Constructor,staticProps),Constructor}(CustomElement,[{key:"defaults",get:function get(){return{shadowMode:"open",delegatesFocus:!0,templates:{main:void 0}}}},{key:"attachObserver",value:function attachObserver(observer){return this[internalDataSymbol].attachObserver(observer),this}},{key:"detachObserver",value:function detachObserver(observer){return this[internalDataSymbol].detachObserver(observer),this}},{key:"containsObserver",value:function containsObserver(observer){return this[internalDataSymbol].containsObserver(observer)}},{key:"getOption",value:function getOption(path,defaultValue){var value;try{value=new Pathfinder(this[internalDataSymbol].getRealSubject().options).getVia(path)}catch(e){}return void 0===value?defaultValue:value}},{key:"setOption",value:function setOption(path,value){return new Pathfinder(this[internalDataSymbol].getSubject().options).setVia(path,value),this}},{key:"setOptions",value:function setOptions(options){isString(options)&&(options=parseOptionsJSON(options));return extend(this[internalDataSymbol].getSubject().options,this.defaults,options),this}},{key:initMethodSymbol,value:function value(){return this}},{key:assembleMethodSymbol,value:function value(){var elements,self=this;if(!1!==this.getOption("shadowMode",!1)){try{initShadowRoot.call(this),elements=this.shadowRoot.childNodes}catch(e){}try{initCSSStylesheet.call(this)}catch(e){}}elements instanceof NodeList||(initHtmlContent.call(this),elements=this.childNodes);var updater=new Set;addToObjectLink(this,objectLinkSymbol,updater);for(var _loop=function _loop(){var element=customelement_slicedToArray(_Object$entries[_i],2)[1];if(!(element instanceof HTMLElement))return"continue";if(element instanceof HTMLTemplateElement)return"continue";var u=new Updater(element,clone(self[internalDataSymbol].getRealSubject().options));updater.add(u),u.run().then((function(){u.enableEventProcessing()}))},_i=0,_Object$entries=Object.entries(elements);_i<_Object$entries.length;_i++)_loop();return this}},{key:"connectedCallback",value:function connectedCallback(){hasObjectLink(this,objectLinkSymbol)||this[assembleMethodSymbol]()}},{key:"disconnectedCallback",value:function disconnectedCallback(){}},{key:"adoptedCallback",value:function adoptedCallback(){}},{key:"attributeChangedCallback",value:function attributeChangedCallback(attrName,oldVal,newVal){"data-monster-options"===attrName&&this.setOptions(newVal)}},{key:"hasNode",value:function hasNode(node){return!!containChildNode.call(this,validateInstance(node,Node))||this.shadowRoot instanceof ShadowRoot&&containChildNode.call(this.shadowRoot,node)}}],[{key:"observedAttributes",get:function get(){return["data-monster-options"]}},{key:"getTag",value:function getTag(){throw new Error("the method getTag must be overwritten by the derived class.")}},{key:"getCSSStyleSheet",value:function getCSSStyleSheet(){}}]),CustomElement}(customelement_wrapNativeSuper(HTMLElement));function containChildNode(node){if(this.contains(node))return!0;for(var _i2=0,_Object$entries2=Object.entries(this.childNodes);_i2<_Object$entries2.length;_i2++){var e=customelement_slicedToArray(_Object$entries2[_i2],2)[1];if(e.contains(node))return!0;containChildNode.call(e,node)}return!1}function initOptionObserver(){var self=this;self.attachObserver(new Observer((function(){if(hasObjectLink(self,Symbol.for("monsterUpdater"))){var _step,_iterator=customelement_createForOfIteratorHelper(getLinkedObjects(self,Symbol.for("monsterUpdater")));try{for(_iterator.s();!(_step=_iterator.n()).done;){var _step2,_iterator2=customelement_createForOfIteratorHelper(_step.value);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var updater=_step2.value,d=clone(self[internalDataSymbol].getRealSubject().options);Object.assign(updater.getSubject(),d)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}}})))}function getOptionsFromAttributes(){if(this.hasAttribute("data-monster-options"))try{return parseOptionsJSON(this.getAttribute("data-monster-options"))}catch(e){throw new Error("the options attribute data-monster-options does not contain a valid json definition (actual: "+this.getAttribute("data-monster-options")+").")}return{}}function parseOptionsJSON(data){if(isString(data)){try{data=parseDataURL(data).content}catch(e){}try{var obj=JSON.parse(data);return validateObject(obj),obj}catch(e){throw new Error("the options does not contain a valid json definition (actual: "+data+").")}}return{}}function initHtmlContent(){try{var template=findDocumentTemplate(this.constructor.getTag());this.appendChild(template.createDocumentFragment())}catch(e){var html=this.getOption("templates.main","");isString(html)&&html.length>0&&(this.innerHTML=html)}return this}function initCSSStylesheet(){if(!(this.shadowRoot instanceof ShadowRoot))return this;var styleSheet=this.constructor.getCSSStyleSheet();if(styleSheet instanceof CSSStyleSheet)this.shadowRoot.adoptedStyleSheets=[styleSheet];else if(isArray(styleSheet))this.shadowRoot.adoptedStyleSheets=styleSheet;else if(isString(styleSheet)){this.shadowRoot.createElement("<style>").innerText=styleSheet,this.shadowRoot.adoptedStyleSheets=styleSheet}return this}function initShadowRoot(){var template,html;try{template=findDocumentTemplate(this.constructor.getTag())}catch(e){if(!isString(html=this.getOption("templates.main",""))||void 0===html||""===html)throw new Error("html is not set.")}return this.attachShadow({mode:this.getOption("shadowMode","open"),delegatesFocus:this.getOption("delegatesFocus",!0)}),template instanceof Template?(this.shadowRoot.appendChild(template.createDocumentFragment()),this):(this.shadowRoot.innerHTML=html,this)}function customcontrol_typeof(obj){return(customcontrol_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function customcontrol_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function customcontrol_get(target,property,receiver){return(customcontrol_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function customcontrol_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=customcontrol_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function customcontrol_setPrototypeOf(o,p){return(customcontrol_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function customcontrol_createSuper(Derived){var hasNativeReflectConstruct=function customcontrol_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=customcontrol_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=customcontrol_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return customcontrol_possibleConstructorReturn(this,result)}}function customcontrol_possibleConstructorReturn(self,call){if(call&&("object"===customcontrol_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function customcontrol_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function customcontrol_getPrototypeOf(o){return(customcontrol_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",CustomElement,(function registerCustomElement(element){validateFunction(element),getGlobalObject("customElements").define(element.getTag(),element)}));var internalSymbol=Symbol("internalSymbol");function getInternal(){if(!(internalSymbol in this))throw new Error("ElementInternals is not supported and a polyfill is necessary");return this[internalSymbol]}function events_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function events_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return events_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return events_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function events_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function locale_typeof(obj){return(locale_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function locale_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function locale_setPrototypeOf(o,p){return(locale_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function locale_createSuper(Derived){var hasNativeReflectConstruct=function locale_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=locale_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=locale_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return locale_possibleConstructorReturn(this,result)}}function locale_possibleConstructorReturn(self,call){if(call&&("object"===locale_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function locale_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function locale_getPrototypeOf(o){return(locale_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",function(_CustomElement){!function customcontrol_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&customcontrol_setPrototypeOf(subClass,superClass)}(CustomControl,_CustomElement);var _super=customcontrol_createSuper(CustomControl);function CustomControl(){var _this;return function customcontrol_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CustomControl),"function"==typeof(_this=_super.call(this)).attachInternals&&(_this[internalSymbol]=_this.attachInternals()),_this}return function customcontrol_createClass(Constructor,protoProps,staticProps){return protoProps&&customcontrol_defineProperties(Constructor.prototype,protoProps),staticProps&&customcontrol_defineProperties(Constructor,staticProps),Constructor}(CustomControl,[{key:"defaults",get:function get(){return extend({},customcontrol_get(customcontrol_getPrototypeOf(CustomControl.prototype),"defaults",this))}},{key:"value",get:function get(){throw Error("the value getter must be overwritten by the derived class")},set:function set(value){throw Error("the value setter must be overwritten by the derived class")}},{key:"labels",get:function get(){var _getInternal$call;return null===(_getInternal$call=getInternal.call(this))||void 0===_getInternal$call?void 0:_getInternal$call.labels}},{key:"name",get:function get(){return this.getAttribute("name")}},{key:"type",get:function get(){return this.constructor.getTag()}},{key:"validity",get:function get(){var _getInternal$call2;return null===(_getInternal$call2=getInternal.call(this))||void 0===_getInternal$call2?void 0:_getInternal$call2.validity}},{key:"validationMessage",get:function get(){var _getInternal$call3;return null===(_getInternal$call3=getInternal.call(this))||void 0===_getInternal$call3?void 0:_getInternal$call3.validationMessage}},{key:"willValidate",get:function get(){var _getInternal$call4;return null===(_getInternal$call4=getInternal.call(this))||void 0===_getInternal$call4?void 0:_getInternal$call4.willValidate}},{key:"states",get:function get(){var _getInternal$call5;return null===(_getInternal$call5=getInternal.call(this))||void 0===_getInternal$call5?void 0:_getInternal$call5.states}},{key:"form",get:function get(){var _getInternal$call6;return null===(_getInternal$call6=getInternal.call(this))||void 0===_getInternal$call6?void 0:_getInternal$call6.form}},{key:"setFormValue",value:function setFormValue(value,state){getInternal.call(this).setFormValue(value,state)}},{key:"setValidity",value:function setValidity(flags,message,anchor){getInternal.call(this).setValidity(flags,message,anchor)}},{key:"checkValidity",value:function checkValidity(){var _getInternal$call7;return null===(_getInternal$call7=getInternal.call(this))||void 0===_getInternal$call7?void 0:_getInternal$call7.checkValidity()}},{key:"reportValidity",value:function reportValidity(){var _getInternal$call8;return null===(_getInternal$call8=getInternal.call(this))||void 0===_getInternal$call8?void 0:_getInternal$call8.reportValidity()}}],[{key:"formAssociated",get:function get(){return!0}}]),CustomControl}(CustomElement)),assignToNamespace("Monster.DOM",(function findTargetElementFromEvent(event,attributeName,attributeValue){if(validateInstance(event,Event),"function"!=typeof event.composedPath)throw new Error("unsupported event");var path=event.composedPath(),element=null==path?void 0:path[0];if(element instanceof HTMLElement)return findClosestByAttribute(element,attributeName,attributeValue)}),(function fireEvent(element,type){if(getDocument(),element instanceof HTMLElement){if("click"===type)return void element.click();var event=new Event(validateString(type),{bubbles:!0,cancelable:!0});element.dispatchEvent(event)}else{if(!(element instanceof HTMLCollection||element instanceof NodeList))throw new TypeError("value is not an instance of HTMLElement or HTMLCollection");var _step,_iterator=events_createForOfIteratorHelper(element);try{for(_iterator.s();!(_step=_iterator.n()).done;){fireEvent(_step.value,type)}}catch(err){_iterator.e(err)}finally{_iterator.f()}}}));var propertiesSymbol=Symbol("properties"),localeStringSymbol=Symbol("localeString"),Locale=function(_Base){!function locale_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&locale_setPrototypeOf(subClass,superClass)}(Locale,_Base);var _super=locale_createSuper(Locale);function Locale(language,region,script,variants,extlang,privateUse){var _this;!function locale_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Locale),(_this=_super.call(this))[propertiesSymbol]={language:void 0===language?void 0:validateString(language),script:void 0===script?void 0:validateString(script),region:void 0===region?void 0:validateString(region),variants:void 0===variants?void 0:validateString(variants),extlang:void 0===extlang?void 0:validateString(extlang),privateUse:void 0===privateUse?void 0:validateString(privateUse)};var s=[];if(void 0!==language&&s.push(language),void 0!==script&&s.push(script),void 0!==region&&s.push(region),void 0!==variants&&s.push(variants),void 0!==extlang&&s.push(extlang),void 0!==privateUse&&s.push(privateUse),0===s.length)throw new Error("unsupported locale");return _this[localeStringSymbol]=s.join("-"),_this}return function locale_createClass(Constructor,protoProps,staticProps){return protoProps&&locale_defineProperties(Constructor.prototype,protoProps),staticProps&&locale_defineProperties(Constructor,staticProps),Constructor}(Locale,[{key:"localeString",get:function get(){return this[localeStringSymbol]}},{key:"language",get:function get(){return this[propertiesSymbol].language}},{key:"region",get:function get(){return this[propertiesSymbol].region}},{key:"script",get:function get(){return this[propertiesSymbol].script}},{key:"variants",get:function get(){return this[propertiesSymbol].variants}},{key:"extlang",get:function get(){return this[propertiesSymbol].extlang}},{key:"privateUse",get:function get(){return this[propertiesSymbol].privateValue}},{key:"toString",value:function toString(){return""+this.localeString}},{key:"getMap",value:function getMap(){return clone(this[propertiesSymbol])}}]),Locale}(Base);function parseLocale(locale){locale=validateString(locale).replace(/_/g,"-");var language,region,variants,parts,script,extlang,match,regex=new RegExp("^(((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+))$");if(null!==(match=regex.exec(locale))&&match.index===regex.lastIndex&&regex.lastIndex++,null==match)throw new Error("unsupported locale");return void 0!==match[6]&&(parts=(language=match[6]).split("-")).length>1&&(language=parts[0],extlang=parts[1]),void 0!==match[14]&&(region=match[14]),void 0!==match[12]&&(script=match[12]),void 0!==match[16]&&(variants=match[16]),new Locale(language,region,script,variants,extlang)}assignToNamespace("Monster.I18n",Locale,parseLocale);function basewithoptions_typeof(obj){return(basewithoptions_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function basewithoptions_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function basewithoptions_setPrototypeOf(o,p){return(basewithoptions_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function basewithoptions_createSuper(Derived){var hasNativeReflectConstruct=function basewithoptions_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=basewithoptions_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=basewithoptions_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return basewithoptions_possibleConstructorReturn(this,result)}}function basewithoptions_possibleConstructorReturn(self,call){if(call&&("object"===basewithoptions_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function basewithoptions_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function basewithoptions_getPrototypeOf(o){return(basewithoptions_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",(function getLocaleOfDocument(){var html=getDocument().querySelector("html");if(html instanceof HTMLElement&&html.hasAttribute("lang")){var locale=html.getAttribute("lang");if(locale)return new parseLocale(locale)}return parseLocale("en")}));var optionsSymbol=Symbol.for("monsterInternalData"),BaseWithOptions=function(_Base){!function basewithoptions_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&basewithoptions_setPrototypeOf(subClass,superClass)}(BaseWithOptions,_Base);var _super=basewithoptions_createSuper(BaseWithOptions);function BaseWithOptions(options){var _this;return function basewithoptions_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseWithOptions),void 0===options&&(options={}),(_this=_super.call(this))[optionsSymbol]=extend({},_this.defaults,validateObject(options)),_this}return function basewithoptions_createClass(Constructor,protoProps,staticProps){return protoProps&&basewithoptions_defineProperties(Constructor.prototype,protoProps),staticProps&&basewithoptions_defineProperties(Constructor,staticProps),Constructor}(BaseWithOptions,[{key:"defaults",get:function get(){return{}}},{key:"getOption",value:function getOption(path,defaultValue){var value;try{value=new Pathfinder(this[optionsSymbol]).getVia(path)}catch(e){}return void 0===value?defaultValue:value}}]),BaseWithOptions}(Base);function translations_typeof(obj){return(translations_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function translations_slicedToArray(arr,i){return function translations_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function translations_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function translations_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return translations_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return translations_arrayLikeToArray(o,minLen)}(arr,i)||function translations_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function translations_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function translations_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function translations_setPrototypeOf(o,p){return(translations_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function translations_createSuper(Derived){var hasNativeReflectConstruct=function translations_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=translations_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=translations_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return translations_possibleConstructorReturn(this,result)}}function translations_possibleConstructorReturn(self,call){if(call&&("object"===translations_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function translations_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function translations_getPrototypeOf(o){return(translations_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",BaseWithOptions);var Translations=function(_Base){!function translations_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&translations_setPrototypeOf(subClass,superClass)}(Translations,_Base);var _super=translations_createSuper(Translations);function Translations(locale){var _this;return function translations_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Translations),_this=_super.call(this),isString(locale)&&(locale=parseLocale(locale)),_this.locale=validateInstance(locale,Locale),_this.storage=new Map,_this}return function translations_createClass(Constructor,protoProps,staticProps){return protoProps&&translations_defineProperties(Constructor.prototype,protoProps),staticProps&&translations_defineProperties(Constructor,staticProps),Constructor}(Translations,[{key:"getText",value:function getText(key,defaultText){if(!this.storage.has(key)){if(void 0===defaultText)throw new Error("key "+key+" not found");return validateString(defaultText)}return isObject(this.storage.get(key))?this.getPluralRuleText(key,"other",defaultText):this.storage.get(key)}},{key:"getPluralRuleText",value:function getPluralRuleText(key,count,defaultText){if(!this.storage.has(key))return validateString(defaultText);var keyword,r=validateObject(this.storage.get(key));if(isString(count))keyword=count.toLocaleString();else{if(0===(count=validateInteger(count))&&r.hasOwnProperty("zero"))return validateString(r.zero);keyword=new Intl.PluralRules(this.locale.toString()).select(validateInteger(count))}return r.hasOwnProperty(keyword)?validateString(r[keyword]):r.hasOwnProperty(DEFAULT_KEY)?validateString(r[DEFAULT_KEY]):validateString(defaultText)}},{key:"setText",value:function setText(key,text){if(isString(text)||isObject(text))return this.storage.set(validateString(key),text),this;throw new TypeError("value is not a string or object")}},{key:"assignTranslations",value:function assignTranslations(translations){validateObject(translations);for(var _i=0,_Object$entries=Object.entries(translations);_i<_Object$entries.length;_i++){var _Object$entries$_i=translations_slicedToArray(_Object$entries[_i],2),k=_Object$entries$_i[0],v=_Object$entries$_i[1];this.setText(k,v)}return this}}]),Translations}(Base);function provider_typeof(obj){return(provider_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function provider_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function provider_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function provider_setPrototypeOf(o,p){return(provider_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function provider_createSuper(Derived){var hasNativeReflectConstruct=function provider_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=provider_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=provider_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return provider_possibleConstructorReturn(this,result)}}function provider_possibleConstructorReturn(self,call){if(call&&("object"===provider_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function provider_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function provider_getPrototypeOf(o){return(provider_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n",Translations);var Provider=function(_BaseWithOptions){!function provider_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&provider_setPrototypeOf(subClass,superClass)}(Provider,_BaseWithOptions);var _super=provider_createSuper(Provider);function Provider(){return provider_classCallCheck(this,Provider),_super.apply(this,arguments)}return function provider_createClass(Constructor,protoProps,staticProps){return protoProps&&provider_defineProperties(Constructor.prototype,protoProps),staticProps&&provider_defineProperties(Constructor,staticProps),Constructor}(Provider,[{key:"getTranslations",value:function getTranslations(locale){return new Promise((function(resolve,reject){try{resolve(new Translations(locale))}catch(e){reject(e)}}))}}]),Provider}(BaseWithOptions);function formatter_typeof(obj){return(formatter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function formatter_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function formatter_setPrototypeOf(o,p){return(formatter_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function formatter_createSuper(Derived){var hasNativeReflectConstruct=function formatter_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=formatter_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=formatter_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return formatter_possibleConstructorReturn(this,result)}}function formatter_possibleConstructorReturn(self,call){if(call&&("object"===formatter_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function formatter_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function formatter_getPrototypeOf(o){return(formatter_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n",Provider);var Formatter=function(_Base){!function formatter_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&formatter_setPrototypeOf(subClass,superClass)}(Formatter,_Base);var _super=formatter_createSuper(Formatter);function Formatter(object){var _this;return function formatter_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Formatter),(_this=_super.call(this)).object=validateObject(object),_this.openMarker="${",_this.closeMarker="}",_this}return function formatter_createClass(Constructor,protoProps,staticProps){return protoProps&&formatter_defineProperties(Constructor.prototype,protoProps),staticProps&&formatter_defineProperties(Constructor,staticProps),Constructor}(Formatter,[{key:"setMarker",value:function setMarker(open,close){return void 0===close&&(close=open),this.openMarker=validateString(open),this.closeMarker=validateString(close),this}},{key:"format",value:function format(text){return tokenizer.call(this,validateString(text))}}]),Formatter}(Base);function tokenizer(text){for(var formatted=[];;){var startIndex=text.indexOf(this.openMarker);if(-1===startIndex){formatted.push(text);break}startIndex>0&&(formatted.push(text.substring(0,startIndex)),text=text.substring(startIndex));var endIndex=text.substring(this.openMarker.length).indexOf(this.closeMarker)+this.openMarker.length;if(-1===endIndex)throw new Error("syntax error in formatter template");var command="path:"+text.substring(this.openMarker.length,endIndex);formatted.push(validateString(new Pipe(command).run(this.object))),text=text.substring(endIndex+this.closeMarker.length)}return formatted.join("")}function fetch_typeof(obj){return(fetch_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fetch_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function fetch_setPrototypeOf(o,p){return(fetch_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function fetch_createSuper(Derived){var hasNativeReflectConstruct=function fetch_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=fetch_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=fetch_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return fetch_possibleConstructorReturn(this,result)}}function fetch_possibleConstructorReturn(self,call){if(call&&("object"===fetch_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return fetch_assertThisInitialized(self)}function fetch_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function fetch_get(target,property,receiver){return(fetch_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function fetch_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=fetch_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function fetch_getPrototypeOf(o){return(fetch_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Text",Formatter);var fetch_optionsSymbol=Symbol.for("monsterInternalData");function logentry_typeof(obj){return(logentry_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function logentry_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function logentry_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function logentry_setPrototypeOf(o,p){return(logentry_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function logentry_createSuper(Derived){var hasNativeReflectConstruct=function logentry_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=logentry_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=logentry_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return logentry_possibleConstructorReturn(this,result)}}function logentry_possibleConstructorReturn(self,call){if(call&&("object"===logentry_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function logentry_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function logentry_getPrototypeOf(o){return(logentry_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n.Providers",function(_Provider){!function fetch_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&fetch_setPrototypeOf(subClass,superClass)}(Fetch,_Provider);var _super=fetch_createSuper(Fetch);function Fetch(url,options){var _thisSuper,_this;return function fetch_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Fetch),_this=_super.call(this,options),isInstance(url,URL)&&(url=url.toString()),void 0===options&&(options={}),validateString(url),_this.url=url,_this[fetch_optionsSymbol]=extend({},fetch_get((_thisSuper=fetch_assertThisInitialized(_this),fetch_getPrototypeOf(Fetch.prototype)),"defaults",_thisSuper),_this.defaults,validateObject(options)),_this}return function fetch_createClass(Constructor,protoProps,staticProps){return protoProps&&fetch_defineProperties(Constructor.prototype,protoProps),staticProps&&fetch_defineProperties(Constructor,staticProps),Constructor}(Fetch,[{key:"defaults",get:function get(){return{fetch:{method:"GET",mode:"cors",cache:"no-cache",credentials:"omit",redirect:"follow",referrerPolicy:"no-referrer"}}}},{key:"getTranslations",value:function getTranslations(locale){isString(locale)&&(locale=parseLocale(locale));var formatter=new Formatter(locale.getMap());return getGlobalFunction("fetch")(formatter.format(this.url),this.getOption("fetch",{})).then((function(response){return response.json()})).then((function(data){return new Translations(locale).assignTranslations(data)}))}}]),Fetch}(Provider));var LogEntry=function(_Base){!function logentry_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&logentry_setPrototypeOf(subClass,superClass)}(LogEntry,_Base);var _super=logentry_createSuper(LogEntry);function LogEntry(loglevel){var _this;logentry_classCallCheck(this,LogEntry),_this=_super.call(this),validateInteger(loglevel),_this.loglevel=loglevel;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return _this.arguments=args,_this}return function logentry_createClass(Constructor,protoProps,staticProps){return protoProps&&logentry_defineProperties(Constructor.prototype,protoProps),staticProps&&logentry_defineProperties(Constructor,staticProps),Constructor}(LogEntry,[{key:"getLogLevel",value:function getLogLevel(){return this.loglevel}},{key:"getArguments",value:function getArguments(){return this.arguments}}]),LogEntry}(Base);function logger_typeof(obj){return(logger_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function logger_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function logger_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return logger_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return logger_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function logger_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function logger_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function logger_setPrototypeOf(o,p){return(logger_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function logger_createSuper(Derived){var hasNativeReflectConstruct=function logger_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=logger_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=logger_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return logger_possibleConstructorReturn(this,result)}}function logger_possibleConstructorReturn(self,call){if(call&&("object"===logger_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function logger_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function logger_getPrototypeOf(o){return(logger_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Logging",LogEntry);var TRACE=64,DEBUG=32,INFO=16,WARN=8,ERROR=4,FATAL=2;function triggerLog(loglevel){for(var logger=this,_len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var _step,_iterator=logger_createForOfIteratorHelper(logger.handler);try{for(_iterator.s();!(_step=_iterator.n()).done;){var handler=_step.value;handler.log(new LogEntry(loglevel,args))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return logger}function handler_typeof(obj){return(handler_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function handler_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function handler_setPrototypeOf(o,p){return(handler_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function handler_createSuper(Derived){var hasNativeReflectConstruct=function handler_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=handler_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=handler_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return handler_possibleConstructorReturn(this,result)}}function handler_possibleConstructorReturn(self,call){if(call&&("object"===handler_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function handler_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function handler_getPrototypeOf(o){return(handler_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Logging",function(_Base){!function logger_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&logger_setPrototypeOf(subClass,superClass)}(Logger,_Base);var _super=logger_createSuper(Logger);function Logger(){var _this;return function logger_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Logger),(_this=_super.call(this)).handler=new Set,_this}return function logger_createClass(Constructor,protoProps,staticProps){return protoProps&&logger_defineProperties(Constructor.prototype,protoProps),staticProps&&logger_defineProperties(Constructor,staticProps),Constructor}(Logger,[{key:"addHandler",value:function addHandler(handler){if(validateObject(handler),!(handler instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.add(handler),this}},{key:"removeHandler",value:function removeHandler(handler){if(validateObject(handler),!(handler instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.delete(handler),this}},{key:"logTrace",value:function logTrace(){return triggerLog.apply(this,[TRACE].concat(Array.prototype.slice.call(arguments))),this}},{key:"logDebug",value:function logDebug(){return triggerLog.apply(this,[DEBUG].concat(Array.prototype.slice.call(arguments))),this}},{key:"logInfo",value:function logInfo(){return triggerLog.apply(this,[INFO].concat(Array.prototype.slice.call(arguments))),this}},{key:"logWarn",value:function logWarn(){return triggerLog.apply(this,[WARN].concat(Array.prototype.slice.call(arguments))),this}},{key:"logError",value:function logError(){return triggerLog.apply(this,[ERROR].concat(Array.prototype.slice.call(arguments))),this}},{key:"logFatal",value:function logFatal(){return triggerLog.apply(this,[FATAL].concat(Array.prototype.slice.call(arguments))),this}},{key:"getLabel",value:function getLabel(level){return validateInteger(level),255===level?"ALL":level===TRACE?"TRACE":level===DEBUG?"DEBUG":level===INFO?"INFO":level===WARN?"WARN":level===ERROR?"ERROR":level===FATAL?"FATAL":0===level?"OFF":"unknown"}},{key:"getLevel",value:function getLevel(label){return validateString(label),"ALL"===label?255:"TRACE"===label?TRACE:"DEBUG"===label?DEBUG:"INFO"===label?INFO:"WARN"===label?WARN:"ERROR"===label?ERROR:"FATAL"===label?FATAL:0}}]),Logger}(Base));var Handler=function(_Base){!function handler_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&handler_setPrototypeOf(subClass,superClass)}(Handler,_Base);var _super=handler_createSuper(Handler);function Handler(){var _this;return function handler_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Handler),(_this=_super.call(this)).loglevel=0,_this}return function handler_createClass(Constructor,protoProps,staticProps){return protoProps&&handler_defineProperties(Constructor.prototype,protoProps),staticProps&&handler_defineProperties(Constructor,staticProps),Constructor}(Handler,[{key:"log",value:function log(entry){return validateInstance(entry,LogEntry),!(this.loglevel<entry.getLogLevel())}},{key:"setLogLevel",value:function setLogLevel(loglevel){return validateInteger(loglevel),this.loglevel=loglevel,this}},{key:"getLogLevel",value:function getLogLevel(){return this.loglevel}},{key:"setAll",value:function setAll(){return this.setLogLevel(255),this}},{key:"setTrace",value:function setTrace(){return this.setLogLevel(TRACE),this}},{key:"setDebug",value:function setDebug(){return this.setLogLevel(DEBUG),this}},{key:"setInfo",value:function setInfo(){return this.setLogLevel(INFO),this}},{key:"setWarn",value:function setWarn(){return this.setLogLevel(WARN),this}},{key:"setError",value:function setError(){return this.setLogLevel(ERROR),this}},{key:"setFatal",value:function setFatal(){return this.setLogLevel(FATAL),this}},{key:"setOff",value:function setOff(){return this.setLogLevel(0),this}}]),Handler}(Base);function console_typeof(obj){return(console_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function console_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function console_get(target,property,receiver){return(console_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function console_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=console_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function console_setPrototypeOf(o,p){return(console_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function console_createSuper(Derived){var hasNativeReflectConstruct=function console_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=console_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=console_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return console_possibleConstructorReturn(this,result)}}function console_possibleConstructorReturn(self,call){if(call&&("object"===console_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function console_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function console_getPrototypeOf(o){return(console_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function random(min,max){if(void 0===min&&(min=0),void 0===max&&(max=MAX),max<min)throw new Error("max must be greater than min");return Math.round(create(min,max))}assignToNamespace("Monster.Logging",Handler),assignToNamespace("Monster.Logging.Handler",function(_Handler){!function console_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&console_setPrototypeOf(subClass,superClass)}(ConsoleHandler,_Handler);var _super=console_createSuper(ConsoleHandler);function ConsoleHandler(){return function console_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ConsoleHandler),_super.call(this)}return function console_createClass(Constructor,protoProps,staticProps){return protoProps&&console_defineProperties(Constructor.prototype,protoProps),staticProps&&console_defineProperties(Constructor,staticProps),Constructor}(ConsoleHandler,[{key:"log",value:function log(entry){if(console_get(console_getPrototypeOf(ConsoleHandler.prototype),"log",this).call(this,entry)){var console=getGlobalObject("console");return!!console&&(console.log(entry.toString()),!0)}return!1}}]),ConsoleHandler}(Handler));var MAX=1e9;function create(min,max){var crypt,globalReference=getGlobal();if(void 0===(crypt=(null==globalReference?void 0:globalReference.crypto)||(null==globalReference?void 0:globalReference.msCrypto)||(null==globalReference?void 0:globalReference.crypto)||void 0))throw new Error("missing crypt");var rval=0,range=max-min;if(range<2)throw new Error("the distance is too small to create a random number.");var bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53)throw new Error("we cannot generate numbers larger than 53 bits.");var bytesNeeded=Math.ceil(bitsNeeded/8),mask=Math.pow(2,bitsNeeded)-1,byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);for(var p=8*(bytesNeeded-1),i=0;i<bytesNeeded;i++)rval+=byteArray[i]*Math.pow(2,p),p-=8;return(rval&=mask)>=range?create(min,max):min+rval}function randomid_typeof(obj){return(randomid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function randomid_setPrototypeOf(o,p){return(randomid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function randomid_createSuper(Derived){var hasNativeReflectConstruct=function randomid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=randomid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=randomid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return randomid_possibleConstructorReturn(this,result)}}function randomid_possibleConstructorReturn(self,call){if(call&&("object"===randomid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function randomid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function randomid_getPrototypeOf(o){return(randomid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)},assignToNamespace("Monster.Math",random);var randomid_internalCounter=0;function version_typeof(obj){return(version_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function version_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function version_setPrototypeOf(o,p){return(version_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function version_createSuper(Derived){var hasNativeReflectConstruct=function version_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=version_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=version_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return version_possibleConstructorReturn(this,result)}}function version_possibleConstructorReturn(self,call){if(call&&("object"===version_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function version_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function version_getPrototypeOf(o){return(version_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",function(_ID){!function randomid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&randomid_setPrototypeOf(subClass,superClass)}(RandomID,_ID);var _super=randomid_createSuper(RandomID);function RandomID(){var _this;return function randomid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RandomID),_this=_super.call(this),randomid_internalCounter+=1,_this.id=getGlobal().btoa(random(1,1e4)).replace(/=/g,"").replace(/^[0-9]+/,"X")+randomid_internalCounter,_this}return RandomID}(ID));var monsterVersion,rootName,Version=function(_Base){!function version_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&version_setPrototypeOf(subClass,superClass)}(Version,_Base);var _super=version_createSuper(Version);function Version(major,minor,patch){var _this;if(function version_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Version),_this=_super.call(this),"string"==typeof major&&void 0===minor&&void 0===patch){var parts=major.toString().split(".");major=parseInt(parts[0]||0),minor=parseInt(parts[1]||0),patch=parseInt(parts[2]||0)}if(void 0===major)throw new Error("major version is undefined");if(void 0===minor&&(minor=0),void 0===patch&&(patch=0),_this.major=parseInt(major),_this.minor=parseInt(minor),_this.patch=parseInt(patch),isNaN(_this.major))throw new Error("major is not a number");if(isNaN(_this.minor))throw new Error("minor is not a number");if(isNaN(_this.patch))throw new Error("patch is not a number");return _this}return function version_createClass(Constructor,protoProps,staticProps){return protoProps&&version_defineProperties(Constructor.prototype,protoProps),staticProps&&version_defineProperties(Constructor,staticProps),Constructor}(Version,[{key:"toString",value:function toString(){return this.major+"."+this.minor+"."+this.patch}},{key:"compareTo",value:function compareTo(version){if(version instanceof Version&&(version=version.toString()),"string"!=typeof version)throw new Error("type exception");if(version===this.toString())return 0;for(var a=[this.major,this.minor,this.patch],b=version.split("."),len=Math.max(a.length,b.length),i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i]))return 1;if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i]))return-1}return 0}}]),Version}(Base);function comparator_typeof(obj){return(comparator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function comparator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function comparator_setPrototypeOf(o,p){return(comparator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function comparator_createSuper(Derived){var hasNativeReflectConstruct=function comparator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=comparator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=comparator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return comparator_possibleConstructorReturn(this,result)}}function comparator_possibleConstructorReturn(self,call){if(call&&("object"===comparator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function comparator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function comparator_getPrototypeOf(o){return(comparator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function freeze_typeof(obj){return(freeze_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function freeze_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function freeze_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return freeze_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return freeze_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function freeze_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}assignToNamespace("Monster.Types",Version),assignToNamespace("Monster",(function getVersion(){return monsterVersion instanceof Version?monsterVersion:monsterVersion=new Version("1.19.0")})),assignToNamespace("Monster.Util",function(_Base){!function comparator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&comparator_setPrototypeOf(subClass,superClass)}(Comparator,_Base);var _super=comparator_createSuper(Comparator);function Comparator(callback){var _this;if(function comparator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Comparator),_this=_super.call(this),isFunction(callback))_this.compare=callback;else{if(void 0!==callback)throw new TypeError("unsupported type");_this.compare=function(a,b){if(comparator_typeof(a)!==comparator_typeof(b))throw new TypeError("impractical comparison");return a===b?0:a<b?-1:1}}return _this}return function comparator_createClass(Constructor,protoProps,staticProps){return protoProps&&comparator_defineProperties(Constructor.prototype,protoProps),staticProps&&comparator_defineProperties(Constructor,staticProps),Constructor}(Comparator,[{key:"reverse",value:function reverse(){var original=this.compare;return this.compare=function(a,b){return original(b,a)},this}},{key:"equal",value:function equal(a,b){return 0===this.compare(a,b)}},{key:"greaterThan",value:function greaterThan(a,b){return this.compare(a,b)>0}},{key:"greaterThanOrEqual",value:function greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}},{key:"lessThanOrEqual",value:function lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}},{key:"lessThan",value:function lessThan(a,b){return this.compare(a,b)<0}}]),Comparator}(Base)),assignToNamespace("Monster.Util",(function deepFreeze(object){validateObject(object);var _step,_iterator=freeze_createForOfIteratorHelper(Object.getOwnPropertyNames(object));try{for(_iterator.s();!(_step=_iterator.n()).done;){var name=_step.value,value=object[name];object[name]=value&&"object"===freeze_typeof(value)?deepFreeze(value):value}}catch(err){_iterator.e(err)}finally{_iterator.f()}return Object.freeze(object)}));try{rootName=Monster.Types.getGlobalObject("__MonsterRootName__")}catch(e){}return rootName||(rootName="Monster"),Monster.Types.getGlobal()[rootName]=Monster,__webpack_exports__}()}));
\ No newline at end of file
+!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?exports.window=factory():root.window=factory()}(self,(function(){return function(){var __webpack_require__={d:function(exports,definition){for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},o:function(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)},r:function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})}},__webpack_exports__={};function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Monster:function(){return Monster}});var Namespace=function(){function Namespace(namespace){if(function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Namespace),void 0===namespace||"string"!=typeof namespace)throw new Error("namespace is not a string");this.namespace=namespace}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(Namespace,[{key:"getNamespace",value:function getNamespace(){return this.namespace}},{key:"toString",value:function toString(){return this.getNamespace()}}]),Namespace}(),Monster=new Namespace("Monster");function assignToNamespace(ns){var current=namespaceFor(ns.split("."));if(0==(arguments.length<=1?0:arguments.length-1))throw new Error("no functions have been passed.");for(var i=0,l=arguments.length<=1?0:arguments.length-1;i<l;i++)current[objectName(i+1<1||arguments.length<=i+1?void 0:arguments[i+1])]=i+1<1||arguments.length<=i+1?void 0:arguments[i+1];return current}function objectName(fn){try{if("function"!=typeof fn)throw new Error("the first argument is not a function or class.");if(fn.hasOwnProperty("name"))return fn.name;if("function"==typeof fn.toString){var s=fn.toString(),f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&"string"==typeof f[1])return f[1];var c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&"string"==typeof c[1])return c[1]}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){for(var space=Monster,ns="Monster",i=0;i<parts.length;i++)"Monster"!==parts[i]&&(ns+="."+parts[i],space.hasOwnProperty(parts[i])||(space[parts[i]]=new Namespace(ns)),space=space[parts[i]]);return space}assignToNamespace("Monster",assignToNamespace,Namespace);function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function base_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function base_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function _possibleConstructorReturn(self,call){if(call&&("object"===_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function _assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function _wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!function _isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if(void 0!==_cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(Wrapper,Class)})(Class)}function _construct(Parent,args,Class){return(_construct=_isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function _setPrototypeOf(o,p){return(_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function _getPrototypeOf(o){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}var Base=function(_Object){!function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&_setPrototypeOf(subClass,superClass)}(Base,_Object);var _super=function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var result,Super=_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return _possibleConstructorReturn(this,result)}}(Base);function Base(){return base_classCallCheck(this,Base),_super.apply(this,arguments)}return function base_createClass(Constructor,protoProps,staticProps){return protoProps&&base_defineProperties(Constructor.prototype,protoProps),staticProps&&base_defineProperties(Constructor,staticProps),Constructor}(Base,[{key:"toString",value:function toString(){return JSON.stringify(this)}}]),Base}(_wrapNativeSuper(Object));function abstract_typeof(obj){return(abstract_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function abstract_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function abstract_setPrototypeOf(o,p){return(abstract_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function abstract_createSuper(Derived){var hasNativeReflectConstruct=function abstract_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=abstract_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=abstract_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return abstract_possibleConstructorReturn(this,result)}}function abstract_possibleConstructorReturn(self,call){if(call&&("object"===abstract_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function abstract_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function abstract_getPrototypeOf(o){return(abstract_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Base);var AbstractConstraint=function(_Base){!function abstract_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&abstract_setPrototypeOf(subClass,superClass)}(AbstractConstraint,_Base);var _super=abstract_createSuper(AbstractConstraint);function AbstractConstraint(){return function abstract_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AbstractConstraint),_super.call(this)}return function abstract_createClass(Constructor,protoProps,staticProps){return protoProps&&abstract_defineProperties(Constructor.prototype,protoProps),staticProps&&abstract_defineProperties(Constructor,staticProps),Constructor}(AbstractConstraint,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]),AbstractConstraint}(Base);function abstractoperator_typeof(obj){return(abstractoperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function abstractoperator_setPrototypeOf(o,p){return(abstractoperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function abstractoperator_createSuper(Derived){var hasNativeReflectConstruct=function abstractoperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=abstractoperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=abstractoperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return abstractoperator_possibleConstructorReturn(this,result)}}function abstractoperator_possibleConstructorReturn(self,call){if(call&&("object"===abstractoperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function abstractoperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function abstractoperator_getPrototypeOf(o){return(abstractoperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Constraints",AbstractConstraint);var globalReference,AbstractOperator=function(_AbstractConstraint){!function abstractoperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&abstractoperator_setPrototypeOf(subClass,superClass)}(AbstractOperator,_AbstractConstraint);var _super=abstractoperator_createSuper(AbstractOperator);function AbstractOperator(operantA,operantB){var _this;if(function abstractoperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AbstractOperator),_this=_super.call(this),!(operantA instanceof AbstractConstraint&&operantB instanceof AbstractConstraint))throw new TypeError("parameters must be from type AbstractConstraint");return _this.operantA=operantA,_this.operantB=operantB,_this}return AbstractOperator}(AbstractConstraint);function andoperator_typeof(obj){return(andoperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function andoperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function andoperator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function andoperator_setPrototypeOf(o,p){return(andoperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function andoperator_createSuper(Derived){var hasNativeReflectConstruct=function andoperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=andoperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=andoperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return andoperator_possibleConstructorReturn(this,result)}}function andoperator_possibleConstructorReturn(self,call){if(call&&("object"===andoperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function andoperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function andoperator_getPrototypeOf(o){return(andoperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function invalid_typeof(obj){return(invalid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function invalid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function invalid_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function invalid_setPrototypeOf(o,p){return(invalid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function invalid_createSuper(Derived){var hasNativeReflectConstruct=function invalid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=invalid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=invalid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return invalid_possibleConstructorReturn(this,result)}}function invalid_possibleConstructorReturn(self,call){if(call&&("object"===invalid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function invalid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function invalid_getPrototypeOf(o){return(invalid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function is_typeof(obj){return(is_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isIterable(value){return void 0!==value&&(null!==value&&"function"==typeof(null==value?void 0:value[Symbol.iterator]))}function isPrimitive(value){var type;return null==value||("string"===(type=is_typeof(value))||"number"===type||"boolean"===type||"symbol"===type)}function isSymbol(value){return"symbol"===is_typeof(value)}function isBoolean(value){return!0===value||!1===value}function isString(value){return void 0!==value&&"string"==typeof value}function isObject(value){return!isArray(value)&&(!isPrimitive(value)&&"object"===is_typeof(value))}function isInstance(value,instance){return!!isObject(value)&&(!!isFunction(instance)&&(!!instance.hasOwnProperty("prototype")&&value instanceof instance))}function isArray(value){return!!Array.isArray(value)}function isFunction(value){return!isArray(value)&&(!isPrimitive(value)&&"function"==typeof value)}function isInteger(value){return Number.isInteger(value)}function isarray_typeof(obj){return(isarray_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isarray_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function isarray_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function isarray_setPrototypeOf(o,p){return(isarray_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function isarray_createSuper(Derived){var hasNativeReflectConstruct=function isarray_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=isarray_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=isarray_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return isarray_possibleConstructorReturn(this,result)}}function isarray_possibleConstructorReturn(self,call){if(call&&("object"===isarray_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function isarray_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function isarray_getPrototypeOf(o){return(isarray_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function isobject_typeof(obj){return(isobject_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function isobject_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function isobject_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function isobject_setPrototypeOf(o,p){return(isobject_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function isobject_createSuper(Derived){var hasNativeReflectConstruct=function isobject_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=isobject_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=isobject_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return isobject_possibleConstructorReturn(this,result)}}function isobject_possibleConstructorReturn(self,call){if(call&&("object"===isobject_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function isobject_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function isobject_getPrototypeOf(o){return(isobject_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function oroperator_typeof(obj){return(oroperator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function oroperator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function oroperator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function oroperator_setPrototypeOf(o,p){return(oroperator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function oroperator_createSuper(Derived){var hasNativeReflectConstruct=function oroperator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=oroperator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=oroperator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return oroperator_possibleConstructorReturn(this,result)}}function oroperator_possibleConstructorReturn(self,call){if(call&&("object"===oroperator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function oroperator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function oroperator_getPrototypeOf(o){return(oroperator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function valid_typeof(obj){return(valid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function valid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function valid_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function valid_setPrototypeOf(o,p){return(valid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function valid_createSuper(Derived){var hasNativeReflectConstruct=function valid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=valid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=valid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return valid_possibleConstructorReturn(this,result)}}function valid_possibleConstructorReturn(self,call){if(call&&("object"===valid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function valid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function valid_getPrototypeOf(o){return(valid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function validatePrimitive(value){if(!isPrimitive(value))throw new TypeError("value is not a primitive");return value}function validateBoolean(value){if(!isBoolean(value))throw new TypeError("value is not a boolean");return value}function validateString(value){if(!isString(value))throw new TypeError("value is not a string");return value}function validateObject(value){if(!isObject(value))throw new TypeError("value is not a object");return value}function validateInstance(value,instance){if(!isInstance(value,instance)){var n="";throw(isObject(instance)||isFunction(instance))&&(n=null==instance?void 0:instance.name),n&&(n=" "+n),new TypeError("value is not an instance of"+n)}return value}function validateArray(value){if(!isArray(value))throw new TypeError("value is not an array");return value}function validateSymbol(value){if(!isSymbol(value))throw new TypeError("value is not an symbol");return value}function validateFunction(value){if(!isFunction(value))throw new TypeError("value is not a function");return value}function validateInteger(value){if(!isInteger(value))throw new TypeError("value is not an integer");return value}function global_typeof(obj){return(global_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function getGlobal(){return globalReference}function getGlobalObject(name){var _globalReference;validateString(name);var o=null===(_globalReference=globalReference)||void 0===_globalReference?void 0:_globalReference[name];if(void 0===o)throw new Error("the object "+name+" is not defined");return validateObject(o),o}function getGlobalFunction(name){var _globalReference2;validateString(name);var f=null===(_globalReference2=globalReference)||void 0===_globalReference2?void 0:_globalReference2[name];if(void 0===f)throw new Error("the function "+name+" is not defined");return validateFunction(f),f}function clone_typeof(obj){return(clone_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function clone(obj){if(null===obj)return obj;if(isPrimitive(obj))return obj;if(isFunction(obj))return obj;if(isArray(obj)){for(var copy=[],i=0,len=obj.length;i<len;i++)copy[i]=clone(obj[i]);return copy}if(isObject(obj)){if(obj instanceof Date){var _copy=new Date;return _copy.setTime(obj.getTime()),_copy}if("undefined"!=typeof Element&&obj instanceof Element)return obj;if("undefined"!=typeof HTMLDocument&&obj instanceof HTMLDocument)return obj;if("undefined"!=typeof DocumentFragment&&obj instanceof DocumentFragment)return obj;if(obj===getGlobal())return obj;if("undefined"!=typeof globalContext&&obj===globalContext)return obj;if("undefined"!=typeof window&&obj===window)return obj;if("undefined"!=typeof document&&obj===document)return obj;if("undefined"!=typeof navigator&&obj===navigator)return obj;if("undefined"!=typeof JSON&&obj===JSON)return obj;try{if(obj instanceof Proxy)return obj}catch(e){}return function cloneObject(obj){var copy;if(clone_typeof(obj.hasOwnProperty("getClone"))&&"function"===obj.getClone)return obj.getClone();copy={},"function"==typeof obj.constructor&&"function"==typeof obj.constructor.call&&(copy=new obj.constructor);for(var key in obj)obj.hasOwnProperty(key)&&(Monster.Types.isPrimitive(obj[key])?copy[key]=obj[key]:copy[key]=clone(obj[key]));return copy}(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function stack_typeof(obj){return(stack_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function stack_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function stack_setPrototypeOf(o,p){return(stack_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function stack_createSuper(Derived){var hasNativeReflectConstruct=function stack_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=stack_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=stack_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return stack_possibleConstructorReturn(this,result)}}function stack_possibleConstructorReturn(self,call){if(call&&("object"===stack_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function stack_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function stack_getPrototypeOf(o){return(stack_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Constraints",AbstractOperator),assignToNamespace("Monster.Constraints",function(_AbstractOperator){!function andoperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&andoperator_setPrototypeOf(subClass,superClass)}(AndOperator,_AbstractOperator);var _super=andoperator_createSuper(AndOperator);function AndOperator(){return andoperator_classCallCheck(this,AndOperator),_super.apply(this,arguments)}return function andoperator_createClass(Constructor,protoProps,staticProps){return protoProps&&andoperator_defineProperties(Constructor.prototype,protoProps),staticProps&&andoperator_defineProperties(Constructor,staticProps),Constructor}(AndOperator,[{key:"isValid",value:function isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}]),AndOperator}(AbstractOperator)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function invalid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&invalid_setPrototypeOf(subClass,superClass)}(Invalid,_AbstractConstraint);var _super=invalid_createSuper(Invalid);function Invalid(){return invalid_classCallCheck(this,Invalid),_super.apply(this,arguments)}return function invalid_createClass(Constructor,protoProps,staticProps){return protoProps&&invalid_defineProperties(Constructor.prototype,protoProps),staticProps&&invalid_defineProperties(Constructor,staticProps),Constructor}(Invalid,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]),Invalid}(AbstractConstraint)),assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger,isSymbol),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function isarray_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&isarray_setPrototypeOf(subClass,superClass)}(IsArray,_AbstractConstraint);var _super=isarray_createSuper(IsArray);function IsArray(){return isarray_classCallCheck(this,IsArray),_super.apply(this,arguments)}return function isarray_createClass(Constructor,protoProps,staticProps){return protoProps&&isarray_defineProperties(Constructor.prototype,protoProps),staticProps&&isarray_defineProperties(Constructor,staticProps),Constructor}(IsArray,[{key:"isValid",value:function isValid(value){return isArray(value)?Promise.resolve(value):Promise.reject(value)}}]),IsArray}(AbstractConstraint)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function isobject_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&isobject_setPrototypeOf(subClass,superClass)}(IsObject,_AbstractConstraint);var _super=isobject_createSuper(IsObject);function IsObject(){return isobject_classCallCheck(this,IsObject),_super.apply(this,arguments)}return function isobject_createClass(Constructor,protoProps,staticProps){return protoProps&&isobject_defineProperties(Constructor.prototype,protoProps),staticProps&&isobject_defineProperties(Constructor,staticProps),Constructor}(IsObject,[{key:"isValid",value:function isValid(value){return isObject(value)?Promise.resolve(value):Promise.reject(value)}}]),IsObject}(AbstractConstraint)),assignToNamespace("Monster.Constraints",function(_AbstractOperator){!function oroperator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&oroperator_setPrototypeOf(subClass,superClass)}(OrOperator,_AbstractOperator);var _super=oroperator_createSuper(OrOperator);function OrOperator(){return oroperator_classCallCheck(this,OrOperator),_super.apply(this,arguments)}return function oroperator_createClass(Constructor,protoProps,staticProps){return protoProps&&oroperator_defineProperties(Constructor.prototype,protoProps),staticProps&&oroperator_defineProperties(Constructor,staticProps),Constructor}(OrOperator,[{key:"isValid",value:function isValid(value){var self=this;return new Promise((function(resolve,reject){var a,b;self.operantA.isValid(value).then((function(){resolve()})).catch((function(){a=!1,!1===b&&reject()})),self.operantB.isValid(value).then((function(){resolve()})).catch((function(){b=!1,!1===a&&reject()}))}))}}]),OrOperator}(AbstractOperator)),assignToNamespace("Monster.Constraints",function(_AbstractConstraint){!function valid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&valid_setPrototypeOf(subClass,superClass)}(Valid,_AbstractConstraint);var _super=valid_createSuper(Valid);function Valid(){return valid_classCallCheck(this,Valid),_super.apply(this,arguments)}return function valid_createClass(Constructor,protoProps,staticProps){return protoProps&&valid_defineProperties(Constructor.prototype,protoProps),staticProps&&valid_defineProperties(Constructor,staticProps),Constructor}(Valid,[{key:"isValid",value:function isValid(value){return Promise.resolve(value)}}]),Valid}(AbstractConstraint)),assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,(function validateIterable(value){if(!isIterable(value))throw new TypeError("value is not iterable");return value}),validateInteger),function(){if("object"!==("undefined"==typeof globalThis?"undefined":global_typeof(globalThis)))if("undefined"==typeof self){if("undefined"==typeof window){if(Object.defineProperty(Object.prototype,"__monster__",{get:function get(){return this},configurable:!0}),"object"===("undefined"==typeof __monster__?"undefined":global_typeof(__monster__)))return __monster__.globalThis=__monster__,delete Object.prototype.__monster__,void(globalReference=globalThis);try{globalReference=Function("return this")()}catch(e){}throw new Error("unsupported environment.")}globalReference=window}else globalReference=self;else globalReference=globalThis}(),assignToNamespace("Monster.Types",getGlobal,getGlobalObject,getGlobalFunction),assignToNamespace("Monster.Util",clone);var Stack=function(_Base){!function stack_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&stack_setPrototypeOf(subClass,superClass)}(Stack,_Base);var _super=stack_createSuper(Stack);function Stack(){var _this;return function stack_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Stack),(_this=_super.call(this)).data=[],_this}return function stack_createClass(Constructor,protoProps,staticProps){return protoProps&&stack_defineProperties(Constructor.prototype,protoProps),staticProps&&stack_defineProperties(Constructor,staticProps),Constructor}(Stack,[{key:"isEmpty",value:function isEmpty(){return 0===this.data.length}},{key:"peek",value:function peek(){var _this$data;if(!this.isEmpty())return null===(_this$data=this.data)||void 0===_this$data?void 0:_this$data[this.data.length-1]}},{key:"push",value:function push(value){return this.data.push(value),this}},{key:"clear",value:function clear(){return this.data=[],this}},{key:"pop",value:function pop(){if(!this.isEmpty())return this.data.pop()}}]),Stack}(Base);function pathfinder_typeof(obj){return(pathfinder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function pathfinder_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function pathfinder_setPrototypeOf(o,p){return(pathfinder_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function pathfinder_createSuper(Derived){var hasNativeReflectConstruct=function pathfinder_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=pathfinder_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=pathfinder_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return pathfinder_possibleConstructorReturn(this,result)}}function pathfinder_possibleConstructorReturn(self,call){if(call&&("object"===pathfinder_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function pathfinder_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function pathfinder_getPrototypeOf(o){return(pathfinder_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Stack);var Pathfinder=function(_Base){!function pathfinder_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&pathfinder_setPrototypeOf(subClass,superClass)}(Pathfinder,_Base);var _super=pathfinder_createSuper(Pathfinder);function Pathfinder(object){var _this;if(function pathfinder_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Pathfinder),_this=_super.call(this),isPrimitive(object))throw new Error("the parameter must not be a simple type");return _this.object=object,_this.wildCard="*",_this}return function pathfinder_createClass(Constructor,protoProps,staticProps){return protoProps&&pathfinder_defineProperties(Constructor.prototype,protoProps),staticProps&&pathfinder_defineProperties(Constructor,staticProps),Constructor}(Pathfinder,[{key:"setWildCard",value:function setWildCard(wildcard){return validateString(wildcard),this.wildCard=wildcard,this}},{key:"getVia",value:function getVia(path){return getValueViaPath.call(this,this.object,validateString(path))}},{key:"setVia",value:function setVia(path,value){return validateString(path),setValueViaPath.call(this,this.object,path,value),this}},{key:"deleteVia",value:function deleteVia(path){return validateString(path),deleteValueViaPath.call(this,this.object,path),this}},{key:"exists",value:function exists(path){validateString(path);try{return getValueViaPath.call(this,this.object,path,!0),!0}catch(e){}return!1}}]),Pathfinder}(Base);function iterate(subject,path,check){var result=new Map;if(isObject(subject)||isArray(subject))for(var _i=0,_Object$entries=Object.entries(subject);_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],value=_Object$entries$_i[1];result.set(key,getValueViaPath.call(this,value,path,check))}else{var _key=path.split(".").shift();result.set(_key,getValueViaPath.call(this,subject,path,check))}return result}function getValueViaPath(subject,path,check){if(""===path)return subject;var parts=path.split("."),current=parts.shift();if(current===this.wildCard)return iterate.call(this,subject,parts.join("."),check);if(isObject(subject)||isArray(subject)){var anchor;if(subject instanceof Map||subject instanceof WeakMap)anchor=subject.get(current);else if(subject instanceof Set||subject instanceof WeakSet){var _ref;validateInteger(current=parseInt(current)),anchor=null===(_ref=_toConsumableArray(subject))||void 0===_ref?void 0:_ref[current]}else{if("function"==typeof WeakRef&&subject instanceof WeakRef)throw Error("unsupported action for this data type");isArray(subject)?(validateInteger(current=parseInt(current)),anchor=null==subject?void 0:subject[current]):anchor=null==subject?void 0:subject[current]}if(isObject(anchor)||isArray(anchor))return getValueViaPath.call(this,anchor,parts.join("."),check);if(parts.length>0)throw Error("the journey is not at its end ("+parts.join(".")+")");if(!0===check&&!subject.hasOwnProperty(current))throw Error("unknown value");return anchor}throw TypeError("unsupported type "+pathfinder_typeof(subject))}function setValueViaPath(object,path,value){validateString(path);for(var parts=path.split("."),last=parts.pop(),subpath=parts.join("."),stack=new Stack,current=subpath;;){try{getValueViaPath.call(this,object,current,!0);break}catch(e){}if(stack.push(current),parts.pop(),""===(current=parts.join(".")))break}for(;!stack.isEmpty();){current=stack.pop();var obj={};if(!stack.isEmpty()){var n=stack.peek().split(".").pop();isInteger(parseInt(n))&&(obj=[])}setValueViaPath.call(this,object,current,obj)}var anchor=getValueViaPath.call(this,object,subpath);if(!isObject(object)&&!isArray(object))throw TypeError("unsupported type: "+pathfinder_typeof(object));if(anchor instanceof Map||anchor instanceof WeakMap)anchor.set(last,value);else if(anchor instanceof Set||anchor instanceof WeakSet)anchor.append(value);else{if("function"==typeof WeakRef&&anchor instanceof WeakRef)throw Error("unsupported action for this data type");isArray(anchor)?(validateInteger(last=parseInt(last)),assignProperty(anchor,last,value)):assignProperty(anchor,last,value)}}function assignProperty(object,key,value){object.hasOwnProperty(key)?(void 0===value&&delete object[key],object[key]=value):object[key]=value}function deleteValueViaPath(object,path){var parts=path.split("."),last=parts.pop(),subpath=parts.join("."),anchor=getValueViaPath.call(this,object,subpath);if(anchor instanceof Map)anchor.delete(last);else{if(anchor instanceof Set||anchor instanceof WeakMap||anchor instanceof WeakSet||"function"==typeof WeakRef&&anchor instanceof WeakRef)throw Error("unsupported action for this data type");isArray(anchor)?(validateInteger(last=parseInt(last)),delete anchor[last]):delete anchor[last]}}function buildmap_typeof(obj){return(buildmap_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function buildmap_toConsumableArray(arr){return function buildmap_arrayWithoutHoles(arr){if(Array.isArray(arr))return buildmap_arrayLikeToArray(arr)}(arr)||function buildmap_iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||buildmap_unsupportedIterableToArray(arr)||function buildmap_nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _wrapRegExp(){_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),buildmap_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return buildmap_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==buildmap_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}function buildmap_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&buildmap_setPrototypeOf(subClass,superClass)}function buildmap_setPrototypeOf(o,p){return(buildmap_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function buildmap_slicedToArray(arr,i){return function buildmap_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function buildmap_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||buildmap_unsupportedIterableToArray(arr,i)||function buildmap_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=buildmap_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function buildmap_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return buildmap_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?buildmap_arrayLikeToArray(o,minLen):void 0}}function buildmap_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function buildFlatMap(subject,selector,key,parentMap){var result=this,currentMap=new Map,resultLength=result.size;void 0===key&&(key=[]);var parts=selector.split("."),current="",currentPath=[];do{if(current=parts.shift(),currentPath.push(current),"*"===current){var finder=new Pathfinder(subject),map=void 0;try{map=finder.getVia(currentPath.join("."))}catch(e){map=new Map}var _step,_iterator=_createForOfIteratorHelper(map);try{var _loop=function _loop(){var _step$value=buildmap_slicedToArray(_step.value,2),k=_step$value[0],o=_step$value[1],copyKey=clone(key);currentPath.map((function(a){copyKey.push("*"===a?k:a)}));var kk=copyKey.join("."),sub=buildFlatMap.call(result,o,parts.join("."),copyKey,o);isObject(sub)&&(sub["^"]=parentMap),currentMap.set(kk,sub)};for(_iterator.s();!(_step=_iterator.n()).done;)_loop()}catch(err){_iterator.e(err)}finally{_iterator.f()}}}while(parts.length>0);if(resultLength===result.size){var _step2,_iterator2=_createForOfIteratorHelper(currentMap);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _step2$value=buildmap_slicedToArray(_step2.value,2),k=_step2$value[0],o=_step2$value[1];result.set(k,o)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}return subject}function build(subject,definition,defaultValue){if(void 0===definition)return defaultValue||subject;validateString(definition);var regexp=_wrapRegExp(/(\$\{([\x2D\.0-9A-Z\^_a-z]*)\})/gm,{placeholder:1,path:2}),array=buildmap_toConsumableArray(definition.matchAll(regexp)),finder=new Pathfinder(subject);return 0===array.length?finder.getVia(definition):(array.forEach((function(a){var groups=null==a?void 0:a.groups,placeholder=null==groups?void 0:groups.placeholder;if(void 0!==placeholder){var path=null==groups?void 0:groups.path,v=finder.getVia(path);void 0===v&&(v=defaultValue),definition=definition.replaceAll(placeholder,v)}})),definition)}function typeOf(value){var type={}.toString.call(value).match(/\s([a-zA-Z]+)/)[1];if("Object"===type){var results=/^(class|function)\s+(\w+)/.exec(value.constructor.toString());type=results&&results.length>2?results[2]:""}return type.toLowerCase()}function diff_typeof(obj){return(diff_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function Diff(first,second){return doDiff(first,second)}function doDiff(a,b,path,diff){var typeA=typeOf(a),typeB=typeOf(b),currPath=path||[],currDiff=diff||[];if(typeA!==typeB||"object"!==typeA&&"array"!==typeA){var o=function getOperator(a,b){var operator,typeA=diff_typeof(a),typeB=diff_typeof(b);"undefined"===typeA&&"undefined"!==typeB?operator="add":"undefined"!==typeA&&"undefined"===typeB?operator="delete":function isNotEqual(a,b){if(diff_typeof(a)!==diff_typeof(b))return!0;if(a instanceof Date&&b instanceof Date)return a.getTime()!==b.getTime();return a!==b}(a,b)&&(operator="update");return operator}(a,b);void 0!==o&&currDiff.push(buildResult(a,b,o,path))}else(function getKeys(a,b,type){if(isArray(type)){var keys=a.length>b.length?new Array(a.length):new Array(b.length);return keys.fill(0),new Set(keys.map((function(_,i){return i})))}return new Set(Object.keys(a).concat(Object.keys(b)))})(a,b,typeA).forEach((function(v){Object.prototype.hasOwnProperty.call(a,v)?Object.prototype.hasOwnProperty.call(b,v)?doDiff(a[v],b[v],currPath.concat(v),currDiff):currDiff.push(buildResult(a[v],b[v],"delete",currPath.concat(v))):currDiff.push(buildResult(a[v],b[v],"add",currPath.concat(v)))}));return currDiff}function buildResult(a,b,operator,path){var result={operator:operator,path:path};if("add"!==operator&&(result.first={value:a,type:diff_typeof(a)},isObject(a))){var _Object$getPrototypeO,_Object$getPrototypeO2,name=null===(_Object$getPrototypeO=Object.getPrototypeOf(a))||void 0===_Object$getPrototypeO||null===(_Object$getPrototypeO2=_Object$getPrototypeO.constructor)||void 0===_Object$getPrototypeO2?void 0:_Object$getPrototypeO2.name;void 0!==name&&(result.first.instance=name)}if(("add"===operator||"update"===operator)&&(result.second={value:b,type:diff_typeof(b)},isObject(b))){var _Object$getPrototypeO3,_Object$getPrototypeO4,_name=null===(_Object$getPrototypeO3=Object.getPrototypeOf(b))||void 0===_Object$getPrototypeO3||null===(_Object$getPrototypeO4=_Object$getPrototypeO3.constructor)||void 0===_Object$getPrototypeO4?void 0:_Object$getPrototypeO4.name;void 0!==_name&&(result.second.instance=_name)}return result}function extend(){var o,i;for(i=0;i<arguments.length;i++){var a=arguments[i];if(!isObject(a)&&!isArray(a))throw new Error("unsuported argument "+JSON.stringify(a));if(void 0!==o)for(var k in a){var _o,v=null==a?void 0:a[k];if(v!==(null===(_o=o)||void 0===_o?void 0:_o[k]))if(isObject(v)||isArray(v)){if(void 0===o[k]&&(isArray(v)?o[k]=[]:o[k]={}),typeOf(o[k])!==typeOf(v))throw new Error("type mismatch: "+JSON.stringify(o[k])+" != "+JSON.stringify(v));o[k]=extend(o[k],v)}else o[k]=v}else o=a}return o}function id_typeof(obj){return(id_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function id_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function id_setPrototypeOf(o,p){return(id_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function id_createSuper(Derived){var hasNativeReflectConstruct=function id_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=id_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=id_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return id_possibleConstructorReturn(this,result)}}function id_possibleConstructorReturn(self,call){if(call&&("object"===id_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function id_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function id_getPrototypeOf(o){return(id_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Pathfinder),assignToNamespace("Monster.Data",(function buildMap(subject,selector,valueTemplate,keyTemplate,filter){var map,result=new Map;if(isFunction(selector)){if(!((map=selector(subject))instanceof Map))throw new TypeError("the selector callback must return a map")}else{if(!isString(selector))throw new TypeError("value is neither a string nor a function");map=new Map,buildFlatMap.call(map,subject,selector)}return map instanceof Map?(map.forEach((function(v,k,m){isFunction(filter)&&!0!==filter.call(m,v,k)||(k=build(v,keyTemplate,k),v=build(v,valueTemplate),result.set(k,v))})),result):result})),assignToNamespace("Monster.Types",typeOf),assignToNamespace("Monster.Data",Diff),assignToNamespace("Monster.Data",extend);var internalCounter=new Map,ID=function(_Base){!function id_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&id_setPrototypeOf(subClass,superClass)}(ID,_Base);var _super=id_createSuper(ID);function ID(prefix){var _this;!function id_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ID),_this=_super.call(this),void 0===prefix&&(prefix="id"),validateString(prefix),internalCounter.has(prefix)||internalCounter.set(prefix,1);var count=internalCounter.get(prefix);return _this.id=prefix+count,internalCounter.set(prefix,++count),_this}return function id_createClass(Constructor,protoProps,staticProps){return protoProps&&id_defineProperties(Constructor.prototype,protoProps),staticProps&&id_defineProperties(Constructor,staticProps),Constructor}(ID,[{key:"toString",value:function toString(){return this.id}}]),ID}(Base);function transformer_toConsumableArray(arr){return function transformer_arrayWithoutHoles(arr){if(Array.isArray(arr))return transformer_arrayLikeToArray(arr)}(arr)||function transformer_iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||transformer_unsupportedIterableToArray(arr)||function transformer_nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function transformer_typeof(obj){return(transformer_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function transformer_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=transformer_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function transformer_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return transformer_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?transformer_arrayLikeToArray(o,minLen):void 0}}function transformer_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function transformer_wrapRegExp(){transformer_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),transformer_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return transformer_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==transformer_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},transformer_wrapRegExp.apply(this,arguments)}function transformer_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function transformer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&transformer_setPrototypeOf(subClass,superClass)}function transformer_setPrototypeOf(o,p){return(transformer_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function transformer_createSuper(Derived){var hasNativeReflectConstruct=function transformer_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=transformer_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=transformer_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return transformer_possibleConstructorReturn(this,result)}}function transformer_possibleConstructorReturn(self,call){if(call&&("object"===transformer_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function transformer_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function transformer_getPrototypeOf(o){return(transformer_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ID);var Transformer=function(_Base){transformer_inherits(Transformer,_Base);var _super=transformer_createSuper(Transformer);function Transformer(definition){var _this;return function transformer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Transformer),_this=_super.call(this),validateString(definition),_this.args=function disassemble(command){validateString(command);var _step,placeholder=new Map,regex=transformer_wrapRegExp(/((\\(.)){1})/gim,{pattern:2,char:3}),_iterator=transformer_createForOfIteratorHelper(command.matchAll(regex));try{for(_iterator.s();!(_step=_iterator.n()).done;){var m=_step.value,g=null==m?void 0:m.groups;if(isObject(g)){var p=null==g?void 0:g.pattern,c=null==g?void 0:g.char;if(p&&c){var r="__"+(new ID).toString()+"__";placeholder.set(r,c),command=command.replace(p,r)}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var parts=command.split(":");return parts=parts.map((function(value){var _step2,v=value.trim(),_iterator2=transformer_createForOfIteratorHelper(placeholder);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var k=_step2.value;v=v.replace(k[0],k[1])}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return v}))}(definition),_this.command=_this.args.shift(),_this.callbacks=new Map,_this}return function transformer_createClass(Constructor,protoProps,staticProps){return protoProps&&transformer_defineProperties(Constructor.prototype,protoProps),staticProps&&transformer_defineProperties(Constructor,staticProps),Constructor}(Transformer,[{key:"setCallback",value:function setCallback(name,callback,context){return validateString(name),validateFunction(callback),void 0!==context&&validateObject(context),this.callbacks.set(name,{callback:callback,context:context}),this}},{key:"run",value:function run(value){return transform.apply(this,[value])}}]),Transformer}(Base);function transform(value){var _callback,key,args=clone(this.args);switch(this.command){case"static":return this.args.join(":");case"tolower":case"strtolower":case"tolowercase":return validateString(value),value.toLowerCase();case"toupper":case"strtoupper":case"touppercase":return validateString(value),value.toUpperCase();case"tostring":return""+value;case"tointeger":var n=parseInt(value);return validateInteger(n),n;case"tojson":return JSON.stringify(value);case"fromjson":return JSON.parse(value);case"trim":return validateString(value),value.trim();case"rawurlencode":return validateString(value),encodeURIComponent(value).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A");case"call":var callback,callbackName=args.shift(),context=getGlobal();if(isObject(value)&&value.hasOwnProperty(callbackName))callback=value[callbackName];else if(this.callbacks.has(callbackName)){var s=this.callbacks.get(callbackName);callback=null==s?void 0:s.callback,context=null==s?void 0:s.context}else"object"===("undefined"==typeof window?"undefined":transformer_typeof(window))&&window.hasOwnProperty(callbackName)&&(callback=window[callbackName]);return validateFunction(callback),args.unshift(value),(_callback=callback).call.apply(_callback,[context].concat(transformer_toConsumableArray(args)));case"plain":case"plaintext":return validateString(value),(new DOMParser).parseFromString(value,"text/html").body.textContent||"";case"if":case"?":validatePrimitive(value);var trueStatement=args.shift()||void 0,falseStatement=args.shift()||void 0;return"value"===trueStatement&&(trueStatement=value),"\\value"===trueStatement&&(trueStatement="value"),"value"===falseStatement&&(falseStatement=value),"\\value"===falseStatement&&(falseStatement="value"),void 0!==value&&""!==value&&"off"!==value&&"false"!==value&&!1!==value||"on"===value||"true"===value||!0===value?trueStatement:falseStatement;case"ucfirst":return validateString(value),value.charAt(0).toUpperCase()+value.substr(1);case"ucwords":return validateString(value),value.replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,(function(v){return v.toUpperCase()}));case"count":case"length":if((isString(value)||isObject(value)||isArray(value))&&value.hasOwnProperty("length"))return value.length;throw new TypeError("unsupported type "+transformer_typeof(value));case"base64":return function convertToString(value){return isObject(value)&&value.hasOwnProperty("toString")&&(value=value.toString()),validateString(value),value}(value),btoa(value);case"empty":return"";case"undefined":return;case"prefix":return validateString(value),(null==args?void 0:args[0])+value;case"suffix":return validateString(value),value+(null==args?void 0:args[0]);case"uniqid":return(new ID).toString();case"key":case"property":case"index":key=args.shift()||"undefined";var defaultValue=args.shift()||"";if(value instanceof Map)return value.has(key)?value.get(key):defaultValue;if(isObject(value)||isArray(value))return null!=value&&value[key]?null==value?void 0:value[key]:defaultValue;throw new Error("type not supported");case"path":return key=args.shift()||"undefined",new Pathfinder(value).getVia(key);case"substring":validateString(value);var start=parseInt(args[0])||0,end=(parseInt(args[1])||0)+start;return value.substring(start,end);case"nop":return value;case"default":return void 0!==value?value:args[0];default:throw new Error("unknown command "+this.command)}return value}function pipe_typeof(obj){return(pipe_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function pipe_slicedToArray(arr,i){return function pipe_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function pipe_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function pipe_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return pipe_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pipe_arrayLikeToArray(o,minLen)}(arr,i)||function pipe_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pipe_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function pipe_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function pipe_setPrototypeOf(o,p){return(pipe_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function pipe_createSuper(Derived){var hasNativeReflectConstruct=function pipe_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=pipe_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=pipe_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return pipe_possibleConstructorReturn(this,result)}}function pipe_possibleConstructorReturn(self,call){if(call&&("object"===pipe_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function pipe_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function pipe_getPrototypeOf(o){return(pipe_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Transformer);var Pipe=function(_Base){!function pipe_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&pipe_setPrototypeOf(subClass,superClass)}(Pipe,_Base);var _super=pipe_createSuper(Pipe);function Pipe(pipe){var _this;return function pipe_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Pipe),_this=_super.call(this),validateString(pipe),_this.pipe=pipe.split("|").map((function(v){return new Transformer(v)})),_this}return function pipe_createClass(Constructor,protoProps,staticProps){return protoProps&&pipe_defineProperties(Constructor.prototype,protoProps),staticProps&&pipe_defineProperties(Constructor,staticProps),Constructor}(Pipe,[{key:"setCallback",value:function setCallback(name,callback,context){for(var _i=0,_Object$entries=Object.entries(this.pipe);_i<_Object$entries.length;_i++){pipe_slicedToArray(_Object$entries[_i],2)[1].setCallback(name,callback,context)}return this}},{key:"run",value:function run(value){return this.pipe.reduce((function(accumulator,transformer,currentIndex,array){return transformer.run(accumulator)}),value)}}]),Pipe}(Base);function tokenlist_typeof(obj){return(tokenlist_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tokenlist_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function tokenlist_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return tokenlist_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tokenlist_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function tokenlist_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function tokenlist_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function tokenlist_setPrototypeOf(o,p){return(tokenlist_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function tokenlist_createSuper(Derived){var hasNativeReflectConstruct=function tokenlist_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=tokenlist_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=tokenlist_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return tokenlist_possibleConstructorReturn(this,result)}}function tokenlist_possibleConstructorReturn(self,call){if(call&&("object"===tokenlist_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function tokenlist_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function tokenlist_getPrototypeOf(o){return(tokenlist_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Data",Pipe);var TokenList=function(_Base,_Symbol$iterator){!function tokenlist_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&tokenlist_setPrototypeOf(subClass,superClass)}(TokenList,_Base);var _super=tokenlist_createSuper(TokenList);function TokenList(init){var _this;return function tokenlist_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,TokenList),(_this=_super.call(this)).tokens=new Set,void 0!==init&&_this.add(init),_this}return function tokenlist_createClass(Constructor,protoProps,staticProps){return protoProps&&tokenlist_defineProperties(Constructor.prototype,protoProps),staticProps&&tokenlist_defineProperties(Constructor,staticProps),Constructor}(TokenList,[{key:"getIterator",value:function getIterator(){return this[Symbol.iterator]()}},{key:_Symbol$iterator,value:function value(){var index=0,entries=this.entries();return{next:function next(){return index<entries.length?{value:null==entries?void 0:entries[index++],done:!1}:{done:!0}}}}},{key:"contains",value:function contains(value){var _this2=this;if(isString(value)){value=value.trim();var counter=0;return value.split(" ").forEach((function(token){if(!1===_this2.tokens.has(token.trim()))return!1;counter++})),counter>0}if(isIterable(value)){var _step,_counter=0,_iterator=tokenlist_createForOfIteratorHelper(value);try{for(_iterator.s();!(_step=_iterator.n()).done;){var token=_step.value;if(validateString(token),!1===this.tokens.has(token.trim()))return!1;_counter++}}catch(err){_iterator.e(err)}finally{_iterator.f()}return _counter>0}return!1}},{key:"add",value:function add(value){var _this3=this;if(isString(value))value.split(" ").forEach((function(token){_this3.tokens.add(token.trim())}));else if(isIterable(value)){var _step2,_iterator2=tokenlist_createForOfIteratorHelper(value);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var token=_step2.value;validateString(token),this.tokens.add(token.trim())}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"clear",value:function clear(){return this.tokens.clear(),this}},{key:"remove",value:function remove(value){var _this4=this;if(isString(value))value.split(" ").forEach((function(token){_this4.tokens.delete(token.trim())}));else if(isIterable(value)){var _step3,_iterator3=tokenlist_createForOfIteratorHelper(value);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var token=_step3.value;validateString(token),this.tokens.delete(token.trim())}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"replace",value:function replace(token,newToken){if(validateString(token),validateString(newToken),!this.contains(token))return this;var a=Array.from(this.tokens),i=a.indexOf(token);return-1===i||(a.splice(i,1,newToken),this.tokens=new Set,this.add(a)),this}},{key:"toggle",value:function toggle(value){var _this5=this;if(isString(value))value.split(" ").forEach((function(token){toggleValue.call(_this5,token)}));else if(isIterable(value)){var _step4,_iterator4=tokenlist_createForOfIteratorHelper(value);try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var token=_step4.value;toggleValue.call(this,token)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}else if(void 0!==value)throw new TypeError("unsupported value");return this}},{key:"entries",value:function entries(){return Array.from(this.tokens)}},{key:"forEach",value:function forEach(callback){return validateFunction(callback),this.tokens.forEach(callback),this}},{key:"toString",value:function toString(){return this.entries().join(" ")}}]),TokenList}(Base,Symbol.iterator);function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");return validateString(token),token=token.trim(),this.contains(token)?(this.remove(token),this):(this.add(token),this)}function queue_typeof(obj){return(queue_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function queue_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function queue_setPrototypeOf(o,p){return(queue_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function queue_createSuper(Derived){var hasNativeReflectConstruct=function queue_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=queue_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=queue_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return queue_possibleConstructorReturn(this,result)}}function queue_possibleConstructorReturn(self,call){if(call&&("object"===queue_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function queue_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function queue_getPrototypeOf(o){return(queue_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",TokenList);var Queue=function(_Base){!function queue_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&queue_setPrototypeOf(subClass,superClass)}(Queue,_Base);var _super=queue_createSuper(Queue);function Queue(){var _this;return function queue_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Queue),(_this=_super.call(this)).data=[],_this}return function queue_createClass(Constructor,protoProps,staticProps){return protoProps&&queue_defineProperties(Constructor.prototype,protoProps),staticProps&&queue_defineProperties(Constructor,staticProps),Constructor}(Queue,[{key:"isEmpty",value:function isEmpty(){return 0===this.data.length}},{key:"peek",value:function peek(){if(!this.isEmpty())return this.data[0]}},{key:"add",value:function add(value){return this.data.push(value),this}},{key:"clear",value:function clear(){return this.data=[],this}},{key:"poll",value:function poll(){if(!this.isEmpty())return this.data.shift()}}]),Queue}(Base);function uniquequeue_typeof(obj){return(uniquequeue_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function uniquequeue_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function _get(target,property,receiver){return(_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function _superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=uniquequeue_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function uniquequeue_setPrototypeOf(o,p){return(uniquequeue_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function uniquequeue_createSuper(Derived){var hasNativeReflectConstruct=function uniquequeue_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=uniquequeue_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=uniquequeue_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return uniquequeue_possibleConstructorReturn(this,result)}}function uniquequeue_possibleConstructorReturn(self,call){if(call&&("object"===uniquequeue_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function uniquequeue_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function uniquequeue_getPrototypeOf(o){return(uniquequeue_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Queue);var UniqueQueue=function(_Queue){!function uniquequeue_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&uniquequeue_setPrototypeOf(subClass,superClass)}(UniqueQueue,_Queue);var _super=uniquequeue_createSuper(UniqueQueue);function UniqueQueue(){var _this;return function uniquequeue_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,UniqueQueue),(_this=_super.call(this)).unique=new WeakSet,_this}return function uniquequeue_createClass(Constructor,protoProps,staticProps){return protoProps&&uniquequeue_defineProperties(Constructor.prototype,protoProps),staticProps&&uniquequeue_defineProperties(Constructor,staticProps),Constructor}(UniqueQueue,[{key:"add",value:function add(value){return validateObject(value),this.unique.has(value)||(this.unique.add(value),_get(uniquequeue_getPrototypeOf(UniqueQueue.prototype),"add",this).call(this,value)),this}},{key:"clear",value:function clear(){return _get(uniquequeue_getPrototypeOf(UniqueQueue.prototype),"clear",this).call(this),this.unique=new WeakSet,this}},{key:"poll",value:function poll(){if(!this.isEmpty()){var value=this.data.shift();return this.unique.delete(value),value}}}]),UniqueQueue}(Queue);function observer_typeof(obj){return(observer_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function observer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function observer_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function observer_setPrototypeOf(o,p){return(observer_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function observer_createSuper(Derived){var hasNativeReflectConstruct=function observer_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=observer_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=observer_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return observer_possibleConstructorReturn(this,result)}}function observer_possibleConstructorReturn(self,call){if(call&&("object"===observer_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function observer_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function observer_getPrototypeOf(o){return(observer_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",UniqueQueue);var Observer=function(_Base){!function observer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&observer_setPrototypeOf(subClass,superClass)}(Observer,_Base);var _super=observer_createSuper(Observer);function Observer(callback){var _this;if(observer_classCallCheck(this,Observer),_this=_super.call(this),"function"!=typeof callback)throw new Error("observer callback must be a function");_this.callback=callback;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return _this.arguments=args,_this.tags=new TokenList,_this.queue=new UniqueQueue,_this}return function observer_createClass(Constructor,protoProps,staticProps){return protoProps&&observer_defineProperties(Constructor.prototype,protoProps),staticProps&&observer_defineProperties(Constructor,staticProps),Constructor}(Observer,[{key:"addTag",value:function addTag(tag){return this.tags.add(tag),this}},{key:"removeTag",value:function removeTag(tag){return this.tags.remove(tag),this}},{key:"getTags",value:function getTags(){return this.tags.entries()}},{key:"hasTag",value:function hasTag(tag){return this.tags.contains(tag)}},{key:"update",value:function update(subject){var self=this;return new Promise((function(resolve,reject){isObject(subject)?(self.queue.add(subject),setTimeout((function(){try{if(self.queue.isEmpty())return void resolve();var s=self.queue.poll(),result=self.callback.apply(s,self.arguments);if(isObject(result)&&result instanceof Promise)return void result.then(resolve).catch(reject);resolve(result)}catch(e){reject(e)}}),0)):reject("subject must be an object")}))}}]),Observer}(Base);function observerlist_typeof(obj){return(observerlist_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function observerlist_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function observerlist_setPrototypeOf(o,p){return(observerlist_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function observerlist_createSuper(Derived){var hasNativeReflectConstruct=function observerlist_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=observerlist_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=observerlist_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return observerlist_possibleConstructorReturn(this,result)}}function observerlist_possibleConstructorReturn(self,call){if(call&&("object"===observerlist_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function observerlist_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function observerlist_getPrototypeOf(o){return(observerlist_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",Observer);var ObserverList=function(_Base){!function observerlist_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&observerlist_setPrototypeOf(subClass,superClass)}(ObserverList,_Base);var _super=observerlist_createSuper(ObserverList);function ObserverList(){var _this;return function observerlist_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ObserverList),(_this=_super.call(this)).observers=[],_this}return function observerlist_createClass(Constructor,protoProps,staticProps){return protoProps&&observerlist_defineProperties(Constructor.prototype,protoProps),staticProps&&observerlist_defineProperties(Constructor,staticProps),Constructor}(ObserverList,[{key:"attach",value:function attach(observer){return validateInstance(observer,Observer),this.observers.push(observer),this}},{key:"detach",value:function detach(observer){validateInstance(observer,Observer);for(var i=0,l=this.observers.length;i<l;i++)this.observers[i]===observer&&this.observers.splice(i,1);return this}},{key:"contains",value:function contains(observer){validateInstance(observer,Observer);for(var i=0,l=this.observers.length;i<l;i++)if(this.observers[i]===observer)return!0;return!1}},{key:"notify",value:function notify(subject){for(var pomises=[],i=0,l=this.observers.length;i<l;i++)pomises.push(this.observers[i].update(subject));return Promise.all(pomises)}}]),ObserverList}(Base);function proxyobserver_typeof(obj){return(proxyobserver_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function proxyobserver_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function proxyobserver_setPrototypeOf(o,p){return(proxyobserver_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function proxyobserver_createSuper(Derived){var hasNativeReflectConstruct=function proxyobserver_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=proxyobserver_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=proxyobserver_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return proxyobserver_possibleConstructorReturn(this,result)}}function proxyobserver_possibleConstructorReturn(self,call){if(call&&("object"===proxyobserver_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return proxyobserver_assertThisInitialized(self)}function proxyobserver_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function proxyobserver_getPrototypeOf(o){return(proxyobserver_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ObserverList);var ProxyObserver=function(_Base){!function proxyobserver_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&proxyobserver_setPrototypeOf(subClass,superClass)}(ProxyObserver,_Base);var _super=proxyobserver_createSuper(ProxyObserver);function ProxyObserver(object){var _this;return function proxyobserver_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ProxyObserver),(_this=_super.call(this)).realSubject=validateObject(object),_this.subject=new Proxy(object,getHandler.call(proxyobserver_assertThisInitialized(_this))),_this.objectMap=new WeakMap,_this.objectMap.set(_this.realSubject,_this.subject),_this.proxyMap=new WeakMap,_this.proxyMap.set(_this.subject,_this.realSubject),_this.observers=new ObserverList,_this}return function proxyobserver_createClass(Constructor,protoProps,staticProps){return protoProps&&proxyobserver_defineProperties(Constructor.prototype,protoProps),staticProps&&proxyobserver_defineProperties(Constructor,staticProps),Constructor}(ProxyObserver,[{key:"getSubject",value:function getSubject(){return this.subject}},{key:"getRealSubject",value:function getRealSubject(){return this.realSubject}},{key:"attachObserver",value:function attachObserver(observer){return this.observers.attach(observer),this}},{key:"detachObserver",value:function detachObserver(observer){return this.observers.detach(observer),this}},{key:"notifyObservers",value:function notifyObservers(){return this.observers.notify(this)}},{key:"containsObserver",value:function containsObserver(observer){return this.observers.contains(observer)}}]),ProxyObserver}(Base);function getHandler(){var proxy=this,handler={get:function get(target,key,receiver){var value=Reflect.get(target,key,receiver);if("symbol"===proxyobserver_typeof(key))return value;if(isPrimitive(value))return value;if(isArray(value)||isObject(value)){if(proxy.objectMap.has(value))return proxy.objectMap.get(value);if(proxy.proxyMap.has(value))return value;var p=new Proxy(value,handler);return proxy.objectMap.set(value,p),proxy.proxyMap.set(p,value),p}return value},set:function set(target,key,value,receiver){proxy.proxyMap.has(value)&&(value=proxy.proxyMap.get(value)),proxy.proxyMap.has(target)&&(target=proxy.proxyMap.get(target));var result,current=Reflect.get(target,key,receiver);if(proxy.proxyMap.has(current)&&(current=proxy.proxyMap.get(current)),current===value)return!0;var descriptor=Reflect.getOwnPropertyDescriptor(target,key);return void 0===descriptor&&(descriptor={writable:!0,enumerable:!0,configurable:!0}),descriptor.value=value,result=Reflect.defineProperty(target,key,descriptor),"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result},deleteProperty:function deleteProperty(target,key){return key in target&&(delete target[key],"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),!0)},defineProperty:function defineProperty(target,key,descriptor){var result=Reflect.defineProperty(target,key,descriptor);return"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result},setPrototypeOf:function setPrototypeOf(target,key){var result=Reflect.setPrototypeOf(object1,key);return"symbol"!==proxyobserver_typeof(key)&&proxy.observers.notify(proxy),result}};return handler}function assembler_typeof(obj){return(assembler_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function assembler_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function assembler_setPrototypeOf(o,p){return(assembler_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function assembler_createSuper(Derived){var hasNativeReflectConstruct=function assembler_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=assembler_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=assembler_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return assembler_possibleConstructorReturn(this,result)}}function assembler_possibleConstructorReturn(self,call){if(call&&("object"===assembler_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function assembler_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function assembler_getPrototypeOf(o){return(assembler_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",ProxyObserver);assignToNamespace("Monster.DOM",function(_Base){!function assembler_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&assembler_setPrototypeOf(subClass,superClass)}(Assembler,_Base);var _super=assembler_createSuper(Assembler);function Assembler(fragment){var _this;return function assembler_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Assembler),(_this=_super.call(this)).attributePrefix="data-monster-",validateInstance(fragment,getGlobalFunction("DocumentFragment")),_this.fragment=fragment,_this}return function assembler_createClass(Constructor,protoProps,staticProps){return protoProps&&assembler_defineProperties(Constructor.prototype,protoProps),staticProps&&assembler_defineProperties(Constructor,staticProps),Constructor}(Assembler,[{key:"setAttributePrefix",value:function setAttributePrefix(prefix){return validateString(prefix),this.attributePrefix=prefix,this}},{key:"getAttributePrefix",value:function getAttributePrefix(){return this.attributePrefix}},{key:"createDocumentFragment",value:function createDocumentFragment(data){return void 0===data&&(data=new ProxyObserver({})),validateInstance(data,ProxyObserver),this.fragment.cloneNode(!0)}}]),Assembler}(Base));function addToObjectLink(element,symbol,object){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol])&&(element[symbol]=new Set),addAttributeToken(element,"data-monster-objectlink",symbol.toString()),element[symbol].add(object),element}function hasObjectLink(element,symbol){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0!==(null==element?void 0:element[symbol])&&containsAttributeToken(element,"data-monster-objectlink",symbol.toString())}function getLinkedObjects(element,symbol){if(validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol]))throw new Error("there is no object link for "+symbol.toString());return null==element?void 0:element[symbol][Symbol.iterator]()}function addAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).add(token).toString()),element):(element.setAttribute(key,token),element)}function removeAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).remove(token).toString()),element):element}function containsAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),!!element.hasAttribute(key)&&new TokenList(element.getAttribute(key)).contains(token)}function findClosestByAttribute(element,key,value){if(validateInstance(element,getGlobalFunction("HTMLElement")),element.hasAttribute(key)&&element.getAttribute(key)===value)return element;var selector=validateString(key);void 0!==value&&(selector+="="+validateString(value));var result=element.closest("["+selector+"]");return result instanceof HTMLElement?result:void 0}function mediatype_typeof(obj){return(mediatype_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function mediatype_wrapRegExp(){mediatype_wrapRegExp=function _wrapRegExp(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),mediatype_setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return mediatype_inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!==mediatype_typeof(args[args.length-1])&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},mediatype_wrapRegExp.apply(this,arguments)}function mediatype_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function mediatype_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return mediatype_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mediatype_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function mediatype_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function mediatype_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function mediatype_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&mediatype_setPrototypeOf(subClass,superClass)}function mediatype_setPrototypeOf(o,p){return(mediatype_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function mediatype_createSuper(Derived){var hasNativeReflectConstruct=function mediatype_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=mediatype_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=mediatype_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return mediatype_possibleConstructorReturn(this,result)}}function mediatype_possibleConstructorReturn(self,call){if(call&&("object"===mediatype_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function mediatype_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function mediatype_getPrototypeOf(o){return(mediatype_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",getLinkedObjects,addToObjectLink,(function removeObjectLink(element,symbol){return validateInstance(element,HTMLElement),validateSymbol(symbol),void 0===(null==element?void 0:element[symbol])||(removeAttributeToken(element,"data-monster-objectlink",symbol.toString()),delete element[symbol]),element}),findClosestByAttribute,hasObjectLink,(function clearAttributeTokens(element,key){return validateInstance(element,HTMLElement),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,""),element):element}),(function replaceAttributeToken(element,key,from,to){return validateInstance(element,HTMLElement),validateString(from),validateString(to),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).replace(from,to).toString()),element):element}),containsAttributeToken,removeAttributeToken,addAttributeToken,(function toggleAttributeToken(element,key,token){return validateInstance(element,HTMLElement),validateString(token),validateString(key),element.hasAttribute(key)?(element.setAttribute(key,new TokenList(element.getAttribute(key)).toggle(token).toString()),element):(element.setAttribute(key,token),element)}));var internal=Symbol("internal"),MediaType=function(_Base){mediatype_inherits(MediaType,_Base);var _super=mediatype_createSuper(MediaType);function MediaType(type,subtype,parameter){var _this;return function mediatype_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,MediaType),(_this=_super.call(this))[internal]={type:validateString(type).toLowerCase(),subtype:validateString(subtype).toLowerCase(),parameter:[]},void 0!==parameter&&(_this[internal].parameter=validateArray(parameter)),_this}return function mediatype_createClass(Constructor,protoProps,staticProps){return protoProps&&mediatype_defineProperties(Constructor.prototype,protoProps),staticProps&&mediatype_defineProperties(Constructor,staticProps),Constructor}(MediaType,[{key:"type",get:function get(){return this[internal].type}},{key:"subtype",get:function get(){return this[internal].subtype}},{key:"parameter",get:function get(){var result=new Map;return this[internal].parameter.forEach((function(p){var value=p.value;value.startsWith('"')&&value.endsWith('"')&&(value=value.substring(1,value.length-1)),result.set(p.key,value)})),result}},{key:"toString",value:function toString(){var _step,parameter=[],_iterator=mediatype_createForOfIteratorHelper(this[internal].parameter);try{for(_iterator.s();!(_step=_iterator.n()).done;){var a=_step.value;parameter.push(a.key+"="+a.value)}}catch(err){_iterator.e(err)}finally{_iterator.f()}return this[internal].type+"/"+this[internal].subtype+(parameter.length>0?";"+parameter.join(";"):"")}}]),MediaType}(Base);function parseMediaType(mediatype){var result=mediatype_wrapRegExp(/([A-Za-z]+|\*)\/(([\+\x2D\.0-9A-Z_a-z]+)|\*|)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*;[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*([0-9A-Za-z]+)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*("?[\x2D0-9A-Z_a-z]+"?))?)*/g,{type:1,subtype:2,parameter:4}).exec(validateString(mediatype)),groups=null==result?void 0:result.groups;if(void 0===groups)throw new TypeError("the mimetype can not be parsed");var type=null==groups?void 0:groups.type,subtype=null==groups?void 0:groups.subtype,parameter=null==groups?void 0:groups.parameter;if(""===subtype||""===type)throw new TypeError("blank value is not allowed");return new MediaType(type,subtype,function parseParameter(parameter){if(!isString(parameter))return;var result=[];return parameter.split(";").forEach((function(entry){if(""!==(entry=entry.trim())){var kv=entry.split("="),key=validateString(null==kv?void 0:kv[0]).trim(),value=validateString(null==kv?void 0:kv[1]).trim();result.push({key:key,value:value})}})),result}(parameter))}function dataurl_typeof(obj){return(dataurl_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function dataurl_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function dataurl_setPrototypeOf(o,p){return(dataurl_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function dataurl_createSuper(Derived){var hasNativeReflectConstruct=function dataurl_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=dataurl_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=dataurl_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return dataurl_possibleConstructorReturn(this,result)}}function dataurl_possibleConstructorReturn(self,call){if(call&&("object"===dataurl_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function dataurl_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function dataurl_getPrototypeOf(o){return(dataurl_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",parseMediaType,MediaType);var dataurl_internal=Symbol("internal"),DataUrl=function(_Base){!function dataurl_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&dataurl_setPrototypeOf(subClass,superClass)}(DataUrl,_Base);var _super=dataurl_createSuper(DataUrl);function DataUrl(content,mediatype,base64){var _this;return function dataurl_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,DataUrl),_this=_super.call(this),isString(mediatype)&&(mediatype=parseMediaType(mediatype)),_this[dataurl_internal]={content:validateString(content),mediatype:validateInstance(mediatype,MediaType),base64:validateBoolean(void 0===base64||base64)},_this}return function dataurl_createClass(Constructor,protoProps,staticProps){return protoProps&&dataurl_defineProperties(Constructor.prototype,protoProps),staticProps&&dataurl_defineProperties(Constructor,staticProps),Constructor}(DataUrl,[{key:"content",get:function get(){return this[dataurl_internal].base64?atob(this[dataurl_internal].content):this[dataurl_internal].content}},{key:"mediatype",get:function get(){return this[dataurl_internal].mediatype}},{key:"toString",value:function toString(){var content=this[dataurl_internal].content;return content=!0===this[dataurl_internal].base64?";base64,"+content:","+encodeURIComponent(content),"data:"+this[dataurl_internal].mediatype.toString()+content}}]),DataUrl}(Base);function parseDataURL(dataurl){if(validateString(dataurl),"data:"!==(dataurl=dataurl.trim()).substring(0,5))throw new TypeError("incorrect or missing data protocol");var p=(dataurl=dataurl.substring(5)).indexOf(",");if(-1===p)throw new TypeError("malformed data url");var content=dataurl.substring(p+1),mediatypeAndBase64=dataurl.substring(0,p).trim(),mediatype="text/plain;charset=US-ASCII",base64Flag=!1;if(""!==mediatypeAndBase64){if(mediatype=mediatypeAndBase64,mediatypeAndBase64.endsWith("base64")){var i=mediatypeAndBase64.lastIndexOf(";");mediatype=mediatypeAndBase64.substring(0,i),base64Flag=!0}else content=decodeURIComponent(content);mediatype=parseMediaType(mediatype)}else content=decodeURIComponent(content);return new DataUrl(content,mediatype,base64Flag)}function theme_typeof(obj){return(theme_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function theme_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function theme_setPrototypeOf(o,p){return(theme_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function theme_createSuper(Derived){var hasNativeReflectConstruct=function theme_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=theme_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=theme_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return theme_possibleConstructorReturn(this,result)}}function theme_possibleConstructorReturn(self,call){if(call&&("object"===theme_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function theme_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function theme_getPrototypeOf(o){return(theme_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",parseDataURL,DataUrl);var Theme=function(_Base){!function theme_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&theme_setPrototypeOf(subClass,superClass)}(Theme,_Base);var _super=theme_createSuper(Theme);function Theme(name){var _this;return function theme_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Theme),_this=_super.call(this),validateString(name),_this.name=name,_this}return function theme_createClass(Constructor,protoProps,staticProps){return protoProps&&theme_defineProperties(Constructor.prototype,protoProps),staticProps&&theme_defineProperties(Constructor,staticProps),Constructor}(Theme,[{key:"getName",value:function getName(){return this.name}}]),Theme}(Base);function getDocumentTheme(){var name="monster",element=getGlobalObject("document").querySelector("html");if(element instanceof HTMLElement){var theme=element.getAttribute("data-monster-theme-name");theme&&(name=theme)}return new Theme(name)}function template_typeof(obj){return(template_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function template_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function template_setPrototypeOf(o,p){return(template_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function template_createSuper(Derived){var hasNativeReflectConstruct=function template_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=template_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=template_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return template_possibleConstructorReturn(this,result)}}function template_possibleConstructorReturn(self,call){if(call&&("object"===template_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function template_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function template_getPrototypeOf(o){return(template_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Theme,getDocumentTheme);var Template=function(_Base){!function template_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&template_setPrototypeOf(subClass,superClass)}(Template,_Base);var _super=template_createSuper(Template);function Template(template){var _this;return function template_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Template),_this=_super.call(this),validateInstance(template,getGlobalFunction("HTMLTemplateElement")),_this.template=template,_this}return function template_createClass(Constructor,protoProps,staticProps){return protoProps&&template_defineProperties(Constructor.prototype,protoProps),staticProps&&template_defineProperties(Constructor,staticProps),Constructor}(Template,[{key:"getTemplateElement",value:function getTemplateElement(){return this.template}},{key:"createDocumentFragment",value:function createDocumentFragment(){return this.template.content.cloneNode(!0)}}]),Template}(Base);function findDocumentTemplate(id,currentNode){validateString(id),currentNode instanceof Document||currentNode instanceof DocumentFragment||(currentNode instanceof Node&&((currentNode=currentNode.getRootNode())instanceof Document||currentNode instanceof DocumentFragment||(currentNode=currentNode.ownerDocument)),currentNode instanceof Document||currentNode instanceof DocumentFragment||(currentNode=getGlobalObject("document")));var HTMLTemplateElement=getGlobalFunction("HTMLTemplateElement"),themedID=id+"-"+getDocumentTheme().getName(),template=currentNode.getElementById(themedID);if(template instanceof HTMLTemplateElement)return new Template(template);if((template=currentNode.getElementById(id))instanceof HTMLTemplateElement)return new Template(template);if(currentNode!==getGlobalObject("document"))return findDocumentTemplate(id);throw new Error("template "+id+" not found.")}function util_typeof(obj){return(util_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function getDocument(){var _getGlobal,document=null===(_getGlobal=getGlobal())||void 0===_getGlobal?void 0:_getGlobal.document;if("object"!==util_typeof(document))throw new Error("not supported environment");return document}function updater_typeof(obj){return(updater_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function updater_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=updater_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function updater_slicedToArray(arr,i){return function updater_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function updater_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||updater_unsupportedIterableToArray(arr,i)||function updater_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function updater_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return updater_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?updater_arrayLikeToArray(o,minLen):void 0}}function updater_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function updater_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function updater_setPrototypeOf(o,p){return(updater_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function updater_createSuper(Derived){var hasNativeReflectConstruct=function updater_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=updater_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=updater_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return updater_possibleConstructorReturn(this,result)}}function updater_possibleConstructorReturn(self,call){if(call&&("object"===updater_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return updater_assertThisInitialized(self)}function updater_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function updater_getPrototypeOf(o){return(updater_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Template,findDocumentTemplate),assignToNamespace("Monster.DOM",(function getWindow(){var _getGlobal2,window=null===(_getGlobal2=getGlobal())||void 0===_getGlobal2?void 0:_getGlobal2.window;if("object"!==util_typeof(window))throw new Error("not supported environment");return window}),getDocument,(function getDocumentFragmentFromString(html){validateString(html);var template=getDocument().createElement("template");return template.innerHTML=html,template.content}));var Updater=function(_Base){!function updater_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&updater_setPrototypeOf(subClass,superClass)}(Updater,_Base);var _super=updater_createSuper(Updater);function Updater(element,subject){var _this;!function updater_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Updater),(_this=_super.call(this)).element=validateInstance(element,HTMLElement),void 0===subject&&(subject={});return isInstance(subject,ProxyObserver)||(subject=new ProxyObserver(subject)),_this.last={},_this.callbacks=new Map,_this.callbacks.set("checkstate",getCheckStateCallback.call(updater_assertThisInitialized(_this))),_this.subject=subject.attachObserver(new Observer((function(){var s=_this.subject.getRealSubject(),diff=Diff(_this.last,s);_this.last=clone(s);for(var _i=0,_Object$entries=Object.entries(diff);_i<_Object$entries.length;_i++){var change=updater_slicedToArray(_Object$entries[_i],2)[1];removeElement.call(updater_assertThisInitialized(_this),change),insertElement.call(updater_assertThisInitialized(_this),change),updateContent.call(updater_assertThisInitialized(_this),change),updateAttributes.call(updater_assertThisInitialized(_this),change)}}))),_this.eventTypes=["keyup","click","change","drop","touchend","input"],_this}return function updater_createClass(Constructor,protoProps,staticProps){return protoProps&&updater_defineProperties(Constructor.prototype,protoProps),staticProps&&updater_defineProperties(Constructor,staticProps),Constructor}(Updater,[{key:"setEventTypes",value:function setEventTypes(types){return this.eventTypes=validateArray(types),this}},{key:"enableEventProcessing",value:function enableEventProcessing(){this.disableEventProcessing();var _step,_iterator=updater_createForOfIteratorHelper(this.eventTypes);try{for(_iterator.s();!(_step=_iterator.n()).done;){var type=_step.value;this.element.addEventListener(type,getControlEventHandler.call(this))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return this}},{key:"disableEventProcessing",value:function disableEventProcessing(){var _step2,_iterator2=updater_createForOfIteratorHelper(this.eventTypes);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var type=_step2.value;this.element.removeEventListener(type,getControlEventHandler.call(this))}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return this}},{key:"run",value:function run(){return this.last={__init__:!0},this.subject.notifyObservers()}},{key:"getSubject",value:function getSubject(){return this.subject.getSubject()}},{key:"setCallback",value:function setCallback(name,callback){return this.callbacks.set(name,callback),this}}]),Updater}(Base);function getCheckStateCallback(){return function(current){if(this instanceof HTMLInputElement){if(-1!==["radio","checkbox"].indexOf(this.type))return this.value+""==current+""?"true":void 0}else if(this instanceof HTMLOptionElement)return isArray(current)&&-1!==current.indexOf(this.value)?"true":void 0}}var symbol=Symbol("EventHandler");function getControlEventHandler(){var self=this;if(self[symbol])return self[symbol];var pathfinder=new Pathfinder(this.subject.getSubject());return self[symbol]=function(event){var _element$constructor,_Object$getOwnPropert,element=event.target;if(element.hasAttribute("data-monster-bind")){var value,path=element.getAttribute("data-monster-bind");if(0!==path.indexOf("path:"))throw new Error("the bind argument must start as a value with a path.");if(path=path.substr(5),element instanceof HTMLInputElement)switch(element.type){case"checkbox":value=element.checked?element.value:void 0;break;default:value=element.value}else if(element instanceof HTMLTextAreaElement)value=element.value;else if(element instanceof HTMLSelectElement)switch(element.type){case"select-one":value=element.value;break;case"select-multiple":value=element.value;var options=null==element?void 0:element.selectedOptions;void 0===options&&(options=element.querySelectorAll(":scope option:checked")),value=Array.from(options).map((function(_ref){return _ref.value}))}else{if(!(null!=element&&null!==(_element$constructor=element.constructor)&&void 0!==_element$constructor&&_element$constructor.prototype&&null!==(_Object$getOwnPropert=Object.getOwnPropertyDescriptor(element.constructor.prototype,"value"))&&void 0!==_Object$getOwnPropert&&_Object$getOwnPropert.get||element.hasOwnProperty("value")))throw new Error("unsupported object");value=null==element?void 0:element.value}var copy=clone(self.subject.getRealSubject());new Pathfinder(copy).setVia(path,value),new Diff(copy,self.subject.getRealSubject()).length>0&&pathfinder.setVia(path,value)}},self[symbol]}function removeElement(change){var _step3,_iterator3=updater_createForOfIteratorHelper(this.element.querySelectorAll(":scope [data-monster-remove]").entries());try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var element=updater_slicedToArray(_step3.value,2)[1];element.parentNode.removeChild(element)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}function insertElement(change){for(var _this2=this,subject=this.subject.getRealSubject(),mem=(getDocument(),new WeakSet),wd=0;;){var found=!1;wd++;var p=clone(null==change?void 0:change.path);if(!isArray(p))return this;for(;p.length>0;){var _step4,current=p.join("."),_iterator4=updater_createForOfIteratorHelper(this.element.querySelectorAll(':scope [data-monster-insert*="path:'+current+'"]').entries());try{var _loop=function _loop(){var containerElement=updater_slicedToArray(_step4.value,2)[1];if(mem.has(containerElement))return"continue";mem.add(containerElement),found=!0;var def=containerElement.getAttribute("data-monster-insert").trim(),i=def.indexOf(" "),key=def.substr(0,i).trim(),refPrefix=key+"-",cmd=def.substr(i).trim();if(cmd.indexOf("|")>0)throw new Error("pipes are not allowed when cloning a node.");var pipe=new Pipe(cmd);_this2.callbacks.forEach((function(f,n){pipe.setCallback(n,f)}));var value=pipe.run(subject),dataPath=cmd.split(":").pop();if(containerElement.hasChildNodes()&&containerElement.lastChild,!isIterable(value))throw new Error("the value is not iterable");for(var available=new Set,_i2=0,_Object$entries2=Object.entries(value);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=updater_slicedToArray(_Object$entries2[_i2],2),_i3=_Object$entries2$_i[0],ref=(_Object$entries2$_i[1],refPrefix+_i3),currentPath=dataPath+"."+_i3;available.add(ref);var refElement=containerElement.querySelector('[data-monster-insert-reference="'+ref+'"]');refElement instanceof HTMLElement?refElement:appendNewDocumentFragment(containerElement,key,ref,currentPath)}for(var nodes=containerElement.querySelectorAll('[data-monster-insert-reference*="'+refPrefix+'"]'),_i4=0,_Object$entries3=Object.entries(nodes);_i4<_Object$entries3.length;_i4++){var node=updater_slicedToArray(_Object$entries3[_i4],2)[1];available.has(node.getAttribute("data-monster-insert-reference"))||containerElement.removeChild(node)}};for(_iterator4.s();!(_step4=_iterator4.n()).done;)_loop()}catch(err){_iterator4.e(err)}finally{_iterator4.f()}p.pop()}if(!1===found)break;if(wd++>200)throw new Error("the maximum depth for the recursion is reached.")}}function appendNewDocumentFragment(container,key,ref,path){for(var nodes=findDocumentTemplate(key,container).createDocumentFragment(),_i5=0,_Object$entries4=Object.entries(nodes.childNodes);_i5<_Object$entries4.length;_i5++){var node=updater_slicedToArray(_Object$entries4[_i5],2)[1];node instanceof HTMLElement&&(applyRecursive(node,key,path),node.setAttribute("data-monster-insert-reference",ref)),container.appendChild(node)}}function applyRecursive(node,key,path){if(node instanceof HTMLElement){if(node.hasAttribute("data-monster-replace")){var value=node.getAttribute("data-monster-replace");node.setAttribute("data-monster-replace",value.replace("path:"+key,"path:"+path))}if(node.hasAttribute("data-monster-attributes")){var _value=node.getAttribute("data-monster-attributes");node.setAttribute("data-monster-attributes",_value.replace("path:"+key,"path:"+path))}for(var _i6=0,_Object$entries5=Object.entries(node.childNodes);_i6<_Object$entries5.length;_i6++){applyRecursive(updater_slicedToArray(_Object$entries5[_i6],2)[1],key,path)}}}function updateContent(change){var subject=this.subject.getRealSubject(),p=clone(null==change?void 0:change.path);runUpdateContent.call(this,this.element,p,subject)}function runUpdateContent(container,parts,subject){var _this3=this;if(isArray(parts)){parts=clone(parts);for(var mem=new WeakSet;parts.length>0;){var current=parts.join(".");parts.pop();var _step5,_iterator5=updater_createForOfIteratorHelper(container.querySelectorAll(':scope [data-monster-replace^="path:'+current+'"], [data-monster-replace^="static:"]').entries());try{var _loop2=function _loop2(){var element=updater_slicedToArray(_step5.value,2)[1];if(mem.has(element))return"continue";mem.add(element);var cmd=element.getAttribute("data-monster-replace").trim(),pipe=new Pipe(cmd);_this3.callbacks.forEach((function(f,n){pipe.setCallback(n,f)}));var value=pipe.run(subject);if(value instanceof HTMLElement){for(;element.firstChild;)element.removeChild(element.firstChild);element.addNode(value)}else element.innerHTML=value};for(_iterator5.s();!(_step5=_iterator5.n()).done;)_loop2()}catch(err){_iterator5.e(err)}finally{_iterator5.f()}}}}function updateAttributes(change){var subject=this.subject.getRealSubject(),p=clone(null==change?void 0:change.path);runUpdateAttributes.call(this,this.element,p,subject)}function runUpdateAttributes(container,parts,subject){var _this4=this,self=this;if(isArray(parts)){parts=clone(parts);for(var mem=new WeakSet;parts.length>0;){var current=parts.join(".");parts.pop();var _step6,_iterator6=updater_createForOfIteratorHelper(container.querySelectorAll(':scope [data-monster-attributes*="path:'+current+'"]').entries());try{var _loop3=function _loop3(){var element=updater_slicedToArray(_step6.value,2)[1];if(mem.has(element))return"continue";mem.add(element);for(var attributes=element.getAttribute("data-monster-attributes"),_loop4=function _loop4(){var def=updater_slicedToArray(_Object$entries6[_i7],2)[1],i=(def=def.trim()).indexOf(" "),name=def.substr(0,i).trim(),cmd=def.substr(i).trim(),pipe=new Pipe(cmd);self.callbacks.forEach((function(f,n){pipe.setCallback(n,f,element)}));var value=pipe.run(subject);void 0===value?element.removeAttribute(name):element.getAttribute(name)!==value&&element.setAttribute(name,value),handleInputControlAttributeUpdate.call(_this4,element,name,value)},_i7=0,_Object$entries6=Object.entries(attributes.split(","));_i7<_Object$entries6.length;_i7++)_loop4()};for(_iterator6.s();!(_step6=_iterator6.n()).done;)_loop3()}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}}}function handleInputControlAttributeUpdate(element,name,value){if(element instanceof HTMLSelectElement)switch(element.type){case"select-multiple":for(var _i8=0,_Object$entries7=Object.entries(element.options);_i8<_Object$entries7.length;_i8++){var _Object$entries7$_i=updater_slicedToArray(_Object$entries7[_i8],2),opt=(_Object$entries7$_i[0],_Object$entries7$_i[1]);-1!==value.indexOf(opt.value)?opt.selected=!0:opt.selected=!1}break;case"select-one":for(var _i9=0,_Object$entries8=Object.entries(element.options);_i9<_Object$entries8.length;_i9++){var _Object$entries8$_i=updater_slicedToArray(_Object$entries8[_i9],2),_index=_Object$entries8$_i[0];if(_Object$entries8$_i[1].value===value){element.selectedIndex=_index;break}}}else if(element instanceof HTMLInputElement)switch(element.type){case"radio":case"checkbox":element.checked="checked"===name&&void 0!==value;break;case"text":default:"value"===name&&(element.value=void 0===value?"":value)}else element instanceof HTMLTextAreaElement&&"value"===name&&(element.value=void 0===value?"":value)}function customelement_typeof(obj){return(customelement_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function customelement_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=customelement_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function customelement_slicedToArray(arr,i){return function customelement_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function customelement_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||customelement_unsupportedIterableToArray(arr,i)||function customelement_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function customelement_unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return customelement_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?customelement_arrayLikeToArray(o,minLen):void 0}}function customelement_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function customelement_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function customelement_possibleConstructorReturn(self,call){if(call&&("object"===customelement_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return customelement_assertThisInitialized(self)}function customelement_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function customelement_wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return(customelement_wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!function customelement_isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if(void 0!==_cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return customelement_construct(Class,arguments,customelement_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),customelement_setPrototypeOf(Wrapper,Class)})(Class)}function customelement_construct(Parent,args,Class){return(customelement_construct=customelement_isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&customelement_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function customelement_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function customelement_setPrototypeOf(o,p){return(customelement_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function customelement_getPrototypeOf(o){return(customelement_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",Updater);var internalDataSymbol=Symbol.for("monsterInternalData"),objectLinkSymbol=Symbol.for("monsterUpdater"),initMethodSymbol=Symbol("initMethodSymbol"),assembleMethodSymbol=Symbol("assembleMethodSymbol"),CustomElement=function(_HTMLElement){!function customelement_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&customelement_setPrototypeOf(subClass,superClass)}(CustomElement,_HTMLElement);var _super=function customelement_createSuper(Derived){var hasNativeReflectConstruct=customelement_isNativeReflectConstruct();return function _createSuperInternal(){var result,Super=customelement_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=customelement_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return customelement_possibleConstructorReturn(this,result)}}(CustomElement);function CustomElement(){var _this;return function customelement_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CustomElement),(_this=_super.call(this))[internalDataSymbol]=new ProxyObserver({options:extend({},_this.defaults,getOptionsFromAttributes.call(customelement_assertThisInitialized(_this)))}),initOptionObserver.call(customelement_assertThisInitialized(_this)),_this[initMethodSymbol](),_this}return function customelement_createClass(Constructor,protoProps,staticProps){return protoProps&&customelement_defineProperties(Constructor.prototype,protoProps),staticProps&&customelement_defineProperties(Constructor,staticProps),Constructor}(CustomElement,[{key:"defaults",get:function get(){return{shadowMode:"open",delegatesFocus:!0,templates:{main:void 0}}}},{key:"attachObserver",value:function attachObserver(observer){return this[internalDataSymbol].attachObserver(observer),this}},{key:"detachObserver",value:function detachObserver(observer){return this[internalDataSymbol].detachObserver(observer),this}},{key:"containsObserver",value:function containsObserver(observer){return this[internalDataSymbol].containsObserver(observer)}},{key:"getOption",value:function getOption(path,defaultValue){var value;try{value=new Pathfinder(this[internalDataSymbol].getRealSubject().options).getVia(path)}catch(e){}return void 0===value?defaultValue:value}},{key:"setOption",value:function setOption(path,value){return new Pathfinder(this[internalDataSymbol].getSubject().options).setVia(path,value),this}},{key:"setOptions",value:function setOptions(options){isString(options)&&(options=parseOptionsJSON(options));return extend(this[internalDataSymbol].getSubject().options,this.defaults,options),this}},{key:initMethodSymbol,value:function value(){return this}},{key:assembleMethodSymbol,value:function value(){var elements,self=this;if(!1!==this.getOption("shadowMode",!1)){try{initShadowRoot.call(this),elements=this.shadowRoot.childNodes}catch(e){}try{initCSSStylesheet.call(this)}catch(e){}}elements instanceof NodeList||(initHtmlContent.call(this),elements=this.childNodes);var updater=new Set;addToObjectLink(this,objectLinkSymbol,updater);for(var _loop=function _loop(){var element=customelement_slicedToArray(_Object$entries[_i],2)[1];if(!(element instanceof HTMLElement))return"continue";if(element instanceof HTMLTemplateElement)return"continue";var u=new Updater(element,clone(self[internalDataSymbol].getRealSubject().options));updater.add(u),u.run().then((function(){u.enableEventProcessing()}))},_i=0,_Object$entries=Object.entries(elements);_i<_Object$entries.length;_i++)_loop();return this}},{key:"connectedCallback",value:function connectedCallback(){hasObjectLink(this,objectLinkSymbol)||this[assembleMethodSymbol]()}},{key:"disconnectedCallback",value:function disconnectedCallback(){}},{key:"adoptedCallback",value:function adoptedCallback(){}},{key:"attributeChangedCallback",value:function attributeChangedCallback(attrName,oldVal,newVal){"data-monster-options"===attrName&&this.setOptions(newVal)}},{key:"hasNode",value:function hasNode(node){return!!containChildNode.call(this,validateInstance(node,Node))||this.shadowRoot instanceof ShadowRoot&&containChildNode.call(this.shadowRoot,node)}}],[{key:"observedAttributes",get:function get(){return["data-monster-options"]}},{key:"getTag",value:function getTag(){throw new Error("the method getTag must be overwritten by the derived class.")}},{key:"getCSSStyleSheet",value:function getCSSStyleSheet(){}}]),CustomElement}(customelement_wrapNativeSuper(HTMLElement));function containChildNode(node){if(this.contains(node))return!0;for(var _i2=0,_Object$entries2=Object.entries(this.childNodes);_i2<_Object$entries2.length;_i2++){var e=customelement_slicedToArray(_Object$entries2[_i2],2)[1];if(e.contains(node))return!0;containChildNode.call(e,node)}return!1}function initOptionObserver(){var self=this;self.attachObserver(new Observer((function(){if(hasObjectLink(self,Symbol.for("monsterUpdater"))){var _step,_iterator=customelement_createForOfIteratorHelper(getLinkedObjects(self,Symbol.for("monsterUpdater")));try{for(_iterator.s();!(_step=_iterator.n()).done;){var _step2,_iterator2=customelement_createForOfIteratorHelper(_step.value);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var updater=_step2.value,d=clone(self[internalDataSymbol].getRealSubject().options);Object.assign(updater.getSubject(),d)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}}})))}function getOptionsFromAttributes(){if(this.hasAttribute("data-monster-options"))try{return parseOptionsJSON(this.getAttribute("data-monster-options"))}catch(e){throw new Error("the options attribute data-monster-options does not contain a valid json definition (actual: "+this.getAttribute("data-monster-options")+").")}return{}}function parseOptionsJSON(data){if(isString(data)){try{data=parseDataURL(data).content}catch(e){}try{var obj=JSON.parse(data);return validateObject(obj),obj}catch(e){throw new Error("the options does not contain a valid json definition (actual: "+data+").")}}return{}}function initHtmlContent(){try{var template=findDocumentTemplate(this.constructor.getTag());this.appendChild(template.createDocumentFragment())}catch(e){var html=this.getOption("templates.main","");isString(html)&&html.length>0&&(this.innerHTML=html)}return this}function initCSSStylesheet(){if(!(this.shadowRoot instanceof ShadowRoot))return this;var styleSheet=this.constructor.getCSSStyleSheet();if(styleSheet instanceof CSSStyleSheet)this.shadowRoot.adoptedStyleSheets=[styleSheet];else if(isArray(styleSheet))this.shadowRoot.adoptedStyleSheets=styleSheet;else if(isString(styleSheet)){this.shadowRoot.createElement("<style>").innerText=styleSheet,this.shadowRoot.adoptedStyleSheets=styleSheet}return this}function initShadowRoot(){var template,html;try{template=findDocumentTemplate(this.constructor.getTag())}catch(e){if(!isString(html=this.getOption("templates.main",""))||void 0===html||""===html)throw new Error("html is not set.")}return this.attachShadow({mode:this.getOption("shadowMode","open"),delegatesFocus:this.getOption("delegatesFocus",!0)}),template instanceof Template?(this.shadowRoot.appendChild(template.createDocumentFragment()),this):(this.shadowRoot.innerHTML=html,this)}function customcontrol_typeof(obj){return(customcontrol_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function customcontrol_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function customcontrol_get(target,property,receiver){return(customcontrol_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function customcontrol_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=customcontrol_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function customcontrol_setPrototypeOf(o,p){return(customcontrol_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function customcontrol_createSuper(Derived){var hasNativeReflectConstruct=function customcontrol_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=customcontrol_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=customcontrol_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return customcontrol_possibleConstructorReturn(this,result)}}function customcontrol_possibleConstructorReturn(self,call){if(call&&("object"===customcontrol_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function customcontrol_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function customcontrol_getPrototypeOf(o){return(customcontrol_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",CustomElement,(function registerCustomElement(element){validateFunction(element),getGlobalObject("customElements").define(element.getTag(),element)}));var internalSymbol=Symbol("internalSymbol");function getInternal(){if(!(internalSymbol in this))throw new Error("ElementInternals is not supported and a polyfill is necessary");return this[internalSymbol]}function events_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function events_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return events_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return events_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function events_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function locale_typeof(obj){return(locale_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function locale_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function locale_setPrototypeOf(o,p){return(locale_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function locale_createSuper(Derived){var hasNativeReflectConstruct=function locale_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=locale_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=locale_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return locale_possibleConstructorReturn(this,result)}}function locale_possibleConstructorReturn(self,call){if(call&&("object"===locale_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function locale_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function locale_getPrototypeOf(o){return(locale_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",function(_CustomElement){!function customcontrol_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&customcontrol_setPrototypeOf(subClass,superClass)}(CustomControl,_CustomElement);var _super=customcontrol_createSuper(CustomControl);function CustomControl(){var _this;return function customcontrol_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CustomControl),"function"==typeof(_this=_super.call(this)).attachInternals&&(_this[internalSymbol]=_this.attachInternals()),_this}return function customcontrol_createClass(Constructor,protoProps,staticProps){return protoProps&&customcontrol_defineProperties(Constructor.prototype,protoProps),staticProps&&customcontrol_defineProperties(Constructor,staticProps),Constructor}(CustomControl,[{key:"defaults",get:function get(){return extend({},customcontrol_get(customcontrol_getPrototypeOf(CustomControl.prototype),"defaults",this))}},{key:"value",get:function get(){throw Error("the value getter must be overwritten by the derived class")},set:function set(value){throw Error("the value setter must be overwritten by the derived class")}},{key:"labels",get:function get(){var _getInternal$call;return null===(_getInternal$call=getInternal.call(this))||void 0===_getInternal$call?void 0:_getInternal$call.labels}},{key:"name",get:function get(){return this.getAttribute("name")}},{key:"type",get:function get(){return this.constructor.getTag()}},{key:"validity",get:function get(){var _getInternal$call2;return null===(_getInternal$call2=getInternal.call(this))||void 0===_getInternal$call2?void 0:_getInternal$call2.validity}},{key:"validationMessage",get:function get(){var _getInternal$call3;return null===(_getInternal$call3=getInternal.call(this))||void 0===_getInternal$call3?void 0:_getInternal$call3.validationMessage}},{key:"willValidate",get:function get(){var _getInternal$call4;return null===(_getInternal$call4=getInternal.call(this))||void 0===_getInternal$call4?void 0:_getInternal$call4.willValidate}},{key:"states",get:function get(){var _getInternal$call5;return null===(_getInternal$call5=getInternal.call(this))||void 0===_getInternal$call5?void 0:_getInternal$call5.states}},{key:"form",get:function get(){var _getInternal$call6;return null===(_getInternal$call6=getInternal.call(this))||void 0===_getInternal$call6?void 0:_getInternal$call6.form}},{key:"setFormValue",value:function setFormValue(value,state){getInternal.call(this).setFormValue(value,state)}},{key:"setValidity",value:function setValidity(flags,message,anchor){getInternal.call(this).setValidity(flags,message,anchor)}},{key:"checkValidity",value:function checkValidity(){var _getInternal$call7;return null===(_getInternal$call7=getInternal.call(this))||void 0===_getInternal$call7?void 0:_getInternal$call7.checkValidity()}},{key:"reportValidity",value:function reportValidity(){var _getInternal$call8;return null===(_getInternal$call8=getInternal.call(this))||void 0===_getInternal$call8?void 0:_getInternal$call8.reportValidity()}}],[{key:"formAssociated",get:function get(){return!0}}]),CustomControl}(CustomElement)),assignToNamespace("Monster.DOM",(function findTargetElementFromEvent(event,attributeName,attributeValue){if(validateInstance(event,Event),"function"!=typeof event.composedPath)throw new Error("unsupported event");var path=event.composedPath();if(null==path||path[0],isArray(path))for(var i=0;i<path.length;i++){var o=path[i];if(o instanceof HTMLElement&&o.hasAttribute(attributeName)&&(void 0===attributeValue||o.getAttribute(attributeName)===attributeValue))return o}}),(function fireEvent(element,type){if(getDocument(),element instanceof HTMLElement){if("click"===type)return void element.click();var event=new Event(validateString(type),{bubbles:!0,cancelable:!0});element.dispatchEvent(event)}else{if(!(element instanceof HTMLCollection||element instanceof NodeList))throw new TypeError("value is not an instance of HTMLElement or HTMLCollection");var _step,_iterator=events_createForOfIteratorHelper(element);try{for(_iterator.s();!(_step=_iterator.n()).done;){fireEvent(_step.value,type)}}catch(err){_iterator.e(err)}finally{_iterator.f()}}}));var propertiesSymbol=Symbol("properties"),localeStringSymbol=Symbol("localeString"),Locale=function(_Base){!function locale_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&locale_setPrototypeOf(subClass,superClass)}(Locale,_Base);var _super=locale_createSuper(Locale);function Locale(language,region,script,variants,extlang,privateUse){var _this;!function locale_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Locale),(_this=_super.call(this))[propertiesSymbol]={language:void 0===language?void 0:validateString(language),script:void 0===script?void 0:validateString(script),region:void 0===region?void 0:validateString(region),variants:void 0===variants?void 0:validateString(variants),extlang:void 0===extlang?void 0:validateString(extlang),privateUse:void 0===privateUse?void 0:validateString(privateUse)};var s=[];if(void 0!==language&&s.push(language),void 0!==script&&s.push(script),void 0!==region&&s.push(region),void 0!==variants&&s.push(variants),void 0!==extlang&&s.push(extlang),void 0!==privateUse&&s.push(privateUse),0===s.length)throw new Error("unsupported locale");return _this[localeStringSymbol]=s.join("-"),_this}return function locale_createClass(Constructor,protoProps,staticProps){return protoProps&&locale_defineProperties(Constructor.prototype,protoProps),staticProps&&locale_defineProperties(Constructor,staticProps),Constructor}(Locale,[{key:"localeString",get:function get(){return this[localeStringSymbol]}},{key:"language",get:function get(){return this[propertiesSymbol].language}},{key:"region",get:function get(){return this[propertiesSymbol].region}},{key:"script",get:function get(){return this[propertiesSymbol].script}},{key:"variants",get:function get(){return this[propertiesSymbol].variants}},{key:"extlang",get:function get(){return this[propertiesSymbol].extlang}},{key:"privateUse",get:function get(){return this[propertiesSymbol].privateValue}},{key:"toString",value:function toString(){return""+this.localeString}},{key:"getMap",value:function getMap(){return clone(this[propertiesSymbol])}}]),Locale}(Base);function parseLocale(locale){locale=validateString(locale).replace(/_/g,"-");var language,region,variants,parts,script,extlang,match,regex=new RegExp("^(((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+))$");if(null!==(match=regex.exec(locale))&&match.index===regex.lastIndex&&regex.lastIndex++,null==match)throw new Error("unsupported locale");return void 0!==match[6]&&(parts=(language=match[6]).split("-")).length>1&&(language=parts[0],extlang=parts[1]),void 0!==match[14]&&(region=match[14]),void 0!==match[12]&&(script=match[12]),void 0!==match[16]&&(variants=match[16]),new Locale(language,region,script,variants,extlang)}assignToNamespace("Monster.I18n",Locale,parseLocale);function basewithoptions_typeof(obj){return(basewithoptions_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function basewithoptions_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function basewithoptions_setPrototypeOf(o,p){return(basewithoptions_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function basewithoptions_createSuper(Derived){var hasNativeReflectConstruct=function basewithoptions_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=basewithoptions_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=basewithoptions_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return basewithoptions_possibleConstructorReturn(this,result)}}function basewithoptions_possibleConstructorReturn(self,call){if(call&&("object"===basewithoptions_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function basewithoptions_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function basewithoptions_getPrototypeOf(o){return(basewithoptions_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.DOM",(function getLocaleOfDocument(){var html=getDocument().querySelector("html");if(html instanceof HTMLElement&&html.hasAttribute("lang")){var locale=html.getAttribute("lang");if(locale)return new parseLocale(locale)}return parseLocale("en")}));var optionsSymbol=Symbol.for("monsterInternalData"),BaseWithOptions=function(_Base){!function basewithoptions_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&basewithoptions_setPrototypeOf(subClass,superClass)}(BaseWithOptions,_Base);var _super=basewithoptions_createSuper(BaseWithOptions);function BaseWithOptions(options){var _this;return function basewithoptions_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseWithOptions),void 0===options&&(options={}),(_this=_super.call(this))[optionsSymbol]=extend({},_this.defaults,validateObject(options)),_this}return function basewithoptions_createClass(Constructor,protoProps,staticProps){return protoProps&&basewithoptions_defineProperties(Constructor.prototype,protoProps),staticProps&&basewithoptions_defineProperties(Constructor,staticProps),Constructor}(BaseWithOptions,[{key:"defaults",get:function get(){return{}}},{key:"getOption",value:function getOption(path,defaultValue){var value;try{value=new Pathfinder(this[optionsSymbol]).getVia(path)}catch(e){}return void 0===value?defaultValue:value}}]),BaseWithOptions}(Base);function translations_typeof(obj){return(translations_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function translations_slicedToArray(arr,i){return function translations_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function translations_iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function translations_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return translations_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return translations_arrayLikeToArray(o,minLen)}(arr,i)||function translations_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function translations_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function translations_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function translations_setPrototypeOf(o,p){return(translations_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function translations_createSuper(Derived){var hasNativeReflectConstruct=function translations_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=translations_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=translations_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return translations_possibleConstructorReturn(this,result)}}function translations_possibleConstructorReturn(self,call){if(call&&("object"===translations_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function translations_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function translations_getPrototypeOf(o){return(translations_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",BaseWithOptions);var Translations=function(_Base){!function translations_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&translations_setPrototypeOf(subClass,superClass)}(Translations,_Base);var _super=translations_createSuper(Translations);function Translations(locale){var _this;return function translations_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Translations),_this=_super.call(this),isString(locale)&&(locale=parseLocale(locale)),_this.locale=validateInstance(locale,Locale),_this.storage=new Map,_this}return function translations_createClass(Constructor,protoProps,staticProps){return protoProps&&translations_defineProperties(Constructor.prototype,protoProps),staticProps&&translations_defineProperties(Constructor,staticProps),Constructor}(Translations,[{key:"getText",value:function getText(key,defaultText){if(!this.storage.has(key)){if(void 0===defaultText)throw new Error("key "+key+" not found");return validateString(defaultText)}return isObject(this.storage.get(key))?this.getPluralRuleText(key,"other",defaultText):this.storage.get(key)}},{key:"getPluralRuleText",value:function getPluralRuleText(key,count,defaultText){if(!this.storage.has(key))return validateString(defaultText);var keyword,r=validateObject(this.storage.get(key));if(isString(count))keyword=count.toLocaleString();else{if(0===(count=validateInteger(count))&&r.hasOwnProperty("zero"))return validateString(r.zero);keyword=new Intl.PluralRules(this.locale.toString()).select(validateInteger(count))}return r.hasOwnProperty(keyword)?validateString(r[keyword]):r.hasOwnProperty(DEFAULT_KEY)?validateString(r[DEFAULT_KEY]):validateString(defaultText)}},{key:"setText",value:function setText(key,text){if(isString(text)||isObject(text))return this.storage.set(validateString(key),text),this;throw new TypeError("value is not a string or object")}},{key:"assignTranslations",value:function assignTranslations(translations){validateObject(translations);for(var _i=0,_Object$entries=Object.entries(translations);_i<_Object$entries.length;_i++){var _Object$entries$_i=translations_slicedToArray(_Object$entries[_i],2),k=_Object$entries$_i[0],v=_Object$entries$_i[1];this.setText(k,v)}return this}}]),Translations}(Base);function provider_typeof(obj){return(provider_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function provider_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function provider_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function provider_setPrototypeOf(o,p){return(provider_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function provider_createSuper(Derived){var hasNativeReflectConstruct=function provider_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=provider_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=provider_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return provider_possibleConstructorReturn(this,result)}}function provider_possibleConstructorReturn(self,call){if(call&&("object"===provider_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function provider_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function provider_getPrototypeOf(o){return(provider_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n",Translations);var Provider=function(_BaseWithOptions){!function provider_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&provider_setPrototypeOf(subClass,superClass)}(Provider,_BaseWithOptions);var _super=provider_createSuper(Provider);function Provider(){return provider_classCallCheck(this,Provider),_super.apply(this,arguments)}return function provider_createClass(Constructor,protoProps,staticProps){return protoProps&&provider_defineProperties(Constructor.prototype,protoProps),staticProps&&provider_defineProperties(Constructor,staticProps),Constructor}(Provider,[{key:"getTranslations",value:function getTranslations(locale){return new Promise((function(resolve,reject){try{resolve(new Translations(locale))}catch(e){reject(e)}}))}}]),Provider}(BaseWithOptions);function formatter_typeof(obj){return(formatter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function formatter_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function formatter_setPrototypeOf(o,p){return(formatter_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function formatter_createSuper(Derived){var hasNativeReflectConstruct=function formatter_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=formatter_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=formatter_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return formatter_possibleConstructorReturn(this,result)}}function formatter_possibleConstructorReturn(self,call){if(call&&("object"===formatter_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function formatter_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function formatter_getPrototypeOf(o){return(formatter_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n",Provider);var Formatter=function(_Base){!function formatter_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&formatter_setPrototypeOf(subClass,superClass)}(Formatter,_Base);var _super=formatter_createSuper(Formatter);function Formatter(object){var _this;return function formatter_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Formatter),(_this=_super.call(this)).object=validateObject(object),_this.openMarker="${",_this.closeMarker="}",_this}return function formatter_createClass(Constructor,protoProps,staticProps){return protoProps&&formatter_defineProperties(Constructor.prototype,protoProps),staticProps&&formatter_defineProperties(Constructor,staticProps),Constructor}(Formatter,[{key:"setMarker",value:function setMarker(open,close){return void 0===close&&(close=open),this.openMarker=validateString(open),this.closeMarker=validateString(close),this}},{key:"format",value:function format(text){return tokenizer.call(this,validateString(text))}}]),Formatter}(Base);function tokenizer(text){for(var formatted=[];;){var startIndex=text.indexOf(this.openMarker);if(-1===startIndex){formatted.push(text);break}startIndex>0&&(formatted.push(text.substring(0,startIndex)),text=text.substring(startIndex));var endIndex=text.substring(this.openMarker.length).indexOf(this.closeMarker)+this.openMarker.length;if(-1===endIndex)throw new Error("syntax error in formatter template");var command="path:"+text.substring(this.openMarker.length,endIndex);formatted.push(validateString(new Pipe(command).run(this.object))),text=text.substring(endIndex+this.closeMarker.length)}return formatted.join("")}function fetch_typeof(obj){return(fetch_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fetch_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function fetch_setPrototypeOf(o,p){return(fetch_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function fetch_createSuper(Derived){var hasNativeReflectConstruct=function fetch_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=fetch_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=fetch_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return fetch_possibleConstructorReturn(this,result)}}function fetch_possibleConstructorReturn(self,call){if(call&&("object"===fetch_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return fetch_assertThisInitialized(self)}function fetch_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function fetch_get(target,property,receiver){return(fetch_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function fetch_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=fetch_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function fetch_getPrototypeOf(o){return(fetch_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Text",Formatter);var fetch_optionsSymbol=Symbol.for("monsterInternalData");function logentry_typeof(obj){return(logentry_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function logentry_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function logentry_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function logentry_setPrototypeOf(o,p){return(logentry_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function logentry_createSuper(Derived){var hasNativeReflectConstruct=function logentry_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=logentry_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=logentry_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return logentry_possibleConstructorReturn(this,result)}}function logentry_possibleConstructorReturn(self,call){if(call&&("object"===logentry_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function logentry_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function logentry_getPrototypeOf(o){return(logentry_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.I18n.Providers",function(_Provider){!function fetch_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&fetch_setPrototypeOf(subClass,superClass)}(Fetch,_Provider);var _super=fetch_createSuper(Fetch);function Fetch(url,options){var _thisSuper,_this;return function fetch_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Fetch),_this=_super.call(this,options),isInstance(url,URL)&&(url=url.toString()),void 0===options&&(options={}),validateString(url),_this.url=url,_this[fetch_optionsSymbol]=extend({},fetch_get((_thisSuper=fetch_assertThisInitialized(_this),fetch_getPrototypeOf(Fetch.prototype)),"defaults",_thisSuper),_this.defaults,validateObject(options)),_this}return function fetch_createClass(Constructor,protoProps,staticProps){return protoProps&&fetch_defineProperties(Constructor.prototype,protoProps),staticProps&&fetch_defineProperties(Constructor,staticProps),Constructor}(Fetch,[{key:"defaults",get:function get(){return{fetch:{method:"GET",mode:"cors",cache:"no-cache",credentials:"omit",redirect:"follow",referrerPolicy:"no-referrer"}}}},{key:"getTranslations",value:function getTranslations(locale){isString(locale)&&(locale=parseLocale(locale));var formatter=new Formatter(locale.getMap());return getGlobalFunction("fetch")(formatter.format(this.url),this.getOption("fetch",{})).then((function(response){return response.json()})).then((function(data){return new Translations(locale).assignTranslations(data)}))}}]),Fetch}(Provider));var LogEntry=function(_Base){!function logentry_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&logentry_setPrototypeOf(subClass,superClass)}(LogEntry,_Base);var _super=logentry_createSuper(LogEntry);function LogEntry(loglevel){var _this;logentry_classCallCheck(this,LogEntry),_this=_super.call(this),validateInteger(loglevel),_this.loglevel=loglevel;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return _this.arguments=args,_this}return function logentry_createClass(Constructor,protoProps,staticProps){return protoProps&&logentry_defineProperties(Constructor.prototype,protoProps),staticProps&&logentry_defineProperties(Constructor,staticProps),Constructor}(LogEntry,[{key:"getLogLevel",value:function getLogLevel(){return this.loglevel}},{key:"getArguments",value:function getArguments(){return this.arguments}}]),LogEntry}(Base);function logger_typeof(obj){return(logger_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function logger_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function logger_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return logger_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return logger_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function logger_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function logger_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function logger_setPrototypeOf(o,p){return(logger_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function logger_createSuper(Derived){var hasNativeReflectConstruct=function logger_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=logger_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=logger_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return logger_possibleConstructorReturn(this,result)}}function logger_possibleConstructorReturn(self,call){if(call&&("object"===logger_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function logger_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function logger_getPrototypeOf(o){return(logger_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Logging",LogEntry);var TRACE=64,DEBUG=32,INFO=16,WARN=8,ERROR=4,FATAL=2;function triggerLog(loglevel){for(var logger=this,_len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var _step,_iterator=logger_createForOfIteratorHelper(logger.handler);try{for(_iterator.s();!(_step=_iterator.n()).done;){var handler=_step.value;handler.log(new LogEntry(loglevel,args))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return logger}function handler_typeof(obj){return(handler_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function handler_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function handler_setPrototypeOf(o,p){return(handler_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function handler_createSuper(Derived){var hasNativeReflectConstruct=function handler_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=handler_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=handler_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return handler_possibleConstructorReturn(this,result)}}function handler_possibleConstructorReturn(self,call){if(call&&("object"===handler_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function handler_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function handler_getPrototypeOf(o){return(handler_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Logging",function(_Base){!function logger_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&logger_setPrototypeOf(subClass,superClass)}(Logger,_Base);var _super=logger_createSuper(Logger);function Logger(){var _this;return function logger_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Logger),(_this=_super.call(this)).handler=new Set,_this}return function logger_createClass(Constructor,protoProps,staticProps){return protoProps&&logger_defineProperties(Constructor.prototype,protoProps),staticProps&&logger_defineProperties(Constructor,staticProps),Constructor}(Logger,[{key:"addHandler",value:function addHandler(handler){if(validateObject(handler),!(handler instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.add(handler),this}},{key:"removeHandler",value:function removeHandler(handler){if(validateObject(handler),!(handler instanceof Handler))throw new Error("the handler must be an instance of Handler");return this.handler.delete(handler),this}},{key:"logTrace",value:function logTrace(){return triggerLog.apply(this,[TRACE].concat(Array.prototype.slice.call(arguments))),this}},{key:"logDebug",value:function logDebug(){return triggerLog.apply(this,[DEBUG].concat(Array.prototype.slice.call(arguments))),this}},{key:"logInfo",value:function logInfo(){return triggerLog.apply(this,[INFO].concat(Array.prototype.slice.call(arguments))),this}},{key:"logWarn",value:function logWarn(){return triggerLog.apply(this,[WARN].concat(Array.prototype.slice.call(arguments))),this}},{key:"logError",value:function logError(){return triggerLog.apply(this,[ERROR].concat(Array.prototype.slice.call(arguments))),this}},{key:"logFatal",value:function logFatal(){return triggerLog.apply(this,[FATAL].concat(Array.prototype.slice.call(arguments))),this}},{key:"getLabel",value:function getLabel(level){return validateInteger(level),255===level?"ALL":level===TRACE?"TRACE":level===DEBUG?"DEBUG":level===INFO?"INFO":level===WARN?"WARN":level===ERROR?"ERROR":level===FATAL?"FATAL":0===level?"OFF":"unknown"}},{key:"getLevel",value:function getLevel(label){return validateString(label),"ALL"===label?255:"TRACE"===label?TRACE:"DEBUG"===label?DEBUG:"INFO"===label?INFO:"WARN"===label?WARN:"ERROR"===label?ERROR:"FATAL"===label?FATAL:0}}]),Logger}(Base));var Handler=function(_Base){!function handler_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&handler_setPrototypeOf(subClass,superClass)}(Handler,_Base);var _super=handler_createSuper(Handler);function Handler(){var _this;return function handler_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Handler),(_this=_super.call(this)).loglevel=0,_this}return function handler_createClass(Constructor,protoProps,staticProps){return protoProps&&handler_defineProperties(Constructor.prototype,protoProps),staticProps&&handler_defineProperties(Constructor,staticProps),Constructor}(Handler,[{key:"log",value:function log(entry){return validateInstance(entry,LogEntry),!(this.loglevel<entry.getLogLevel())}},{key:"setLogLevel",value:function setLogLevel(loglevel){return validateInteger(loglevel),this.loglevel=loglevel,this}},{key:"getLogLevel",value:function getLogLevel(){return this.loglevel}},{key:"setAll",value:function setAll(){return this.setLogLevel(255),this}},{key:"setTrace",value:function setTrace(){return this.setLogLevel(TRACE),this}},{key:"setDebug",value:function setDebug(){return this.setLogLevel(DEBUG),this}},{key:"setInfo",value:function setInfo(){return this.setLogLevel(INFO),this}},{key:"setWarn",value:function setWarn(){return this.setLogLevel(WARN),this}},{key:"setError",value:function setError(){return this.setLogLevel(ERROR),this}},{key:"setFatal",value:function setFatal(){return this.setLogLevel(FATAL),this}},{key:"setOff",value:function setOff(){return this.setLogLevel(0),this}}]),Handler}(Base);function console_typeof(obj){return(console_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function console_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function console_get(target,property,receiver){return(console_get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function _get(target,property,receiver){var base=function console_superPropBase(object,property){for(;!Object.prototype.hasOwnProperty.call(object,property)&&null!==(object=console_getPrototypeOf(object)););return object}(target,property);if(base){var desc=Object.getOwnPropertyDescriptor(base,property);return desc.get?desc.get.call(receiver):desc.value}})(target,property,receiver||target)}function console_setPrototypeOf(o,p){return(console_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function console_createSuper(Derived){var hasNativeReflectConstruct=function console_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=console_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=console_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return console_possibleConstructorReturn(this,result)}}function console_possibleConstructorReturn(self,call){if(call&&("object"===console_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function console_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function console_getPrototypeOf(o){return(console_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function random(min,max){if(void 0===min&&(min=0),void 0===max&&(max=MAX),max<min)throw new Error("max must be greater than min");return Math.round(create(min,max))}assignToNamespace("Monster.Logging",Handler),assignToNamespace("Monster.Logging.Handler",function(_Handler){!function console_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&console_setPrototypeOf(subClass,superClass)}(ConsoleHandler,_Handler);var _super=console_createSuper(ConsoleHandler);function ConsoleHandler(){return function console_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ConsoleHandler),_super.call(this)}return function console_createClass(Constructor,protoProps,staticProps){return protoProps&&console_defineProperties(Constructor.prototype,protoProps),staticProps&&console_defineProperties(Constructor,staticProps),Constructor}(ConsoleHandler,[{key:"log",value:function log(entry){if(console_get(console_getPrototypeOf(ConsoleHandler.prototype),"log",this).call(this,entry)){var console=getGlobalObject("console");return!!console&&(console.log(entry.toString()),!0)}return!1}}]),ConsoleHandler}(Handler));var MAX=1e9;function create(min,max){var crypt,globalReference=getGlobal();if(void 0===(crypt=(null==globalReference?void 0:globalReference.crypto)||(null==globalReference?void 0:globalReference.msCrypto)||(null==globalReference?void 0:globalReference.crypto)||void 0))throw new Error("missing crypt");var rval=0,range=max-min;if(range<2)throw new Error("the distance is too small to create a random number.");var bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53)throw new Error("we cannot generate numbers larger than 53 bits.");var bytesNeeded=Math.ceil(bitsNeeded/8),mask=Math.pow(2,bitsNeeded)-1,byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);for(var p=8*(bytesNeeded-1),i=0;i<bytesNeeded;i++)rval+=byteArray[i]*Math.pow(2,p),p-=8;return(rval&=mask)>=range?create(min,max):min+rval}function randomid_typeof(obj){return(randomid_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function randomid_setPrototypeOf(o,p){return(randomid_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function randomid_createSuper(Derived){var hasNativeReflectConstruct=function randomid_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=randomid_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=randomid_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return randomid_possibleConstructorReturn(this,result)}}function randomid_possibleConstructorReturn(self,call){if(call&&("object"===randomid_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function randomid_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function randomid_getPrototypeOf(o){return(randomid_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)},assignToNamespace("Monster.Math",random);var randomid_internalCounter=0;function version_typeof(obj){return(version_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function version_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function version_setPrototypeOf(o,p){return(version_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function version_createSuper(Derived){var hasNativeReflectConstruct=function version_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=version_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=version_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return version_possibleConstructorReturn(this,result)}}function version_possibleConstructorReturn(self,call){if(call&&("object"===version_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function version_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function version_getPrototypeOf(o){return(version_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}assignToNamespace("Monster.Types",function(_ID){!function randomid_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&randomid_setPrototypeOf(subClass,superClass)}(RandomID,_ID);var _super=randomid_createSuper(RandomID);function RandomID(){var _this;return function randomid_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RandomID),_this=_super.call(this),randomid_internalCounter+=1,_this.id=getGlobal().btoa(random(1,1e4)).replace(/=/g,"").replace(/^[0-9]+/,"X")+randomid_internalCounter,_this}return RandomID}(ID));var monsterVersion,rootName,Version=function(_Base){!function version_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&version_setPrototypeOf(subClass,superClass)}(Version,_Base);var _super=version_createSuper(Version);function Version(major,minor,patch){var _this;if(function version_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Version),_this=_super.call(this),"string"==typeof major&&void 0===minor&&void 0===patch){var parts=major.toString().split(".");major=parseInt(parts[0]||0),minor=parseInt(parts[1]||0),patch=parseInt(parts[2]||0)}if(void 0===major)throw new Error("major version is undefined");if(void 0===minor&&(minor=0),void 0===patch&&(patch=0),_this.major=parseInt(major),_this.minor=parseInt(minor),_this.patch=parseInt(patch),isNaN(_this.major))throw new Error("major is not a number");if(isNaN(_this.minor))throw new Error("minor is not a number");if(isNaN(_this.patch))throw new Error("patch is not a number");return _this}return function version_createClass(Constructor,protoProps,staticProps){return protoProps&&version_defineProperties(Constructor.prototype,protoProps),staticProps&&version_defineProperties(Constructor,staticProps),Constructor}(Version,[{key:"toString",value:function toString(){return this.major+"."+this.minor+"."+this.patch}},{key:"compareTo",value:function compareTo(version){if(version instanceof Version&&(version=version.toString()),"string"!=typeof version)throw new Error("type exception");if(version===this.toString())return 0;for(var a=[this.major,this.minor,this.patch],b=version.split("."),len=Math.max(a.length,b.length),i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i]))return 1;if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i]))return-1}return 0}}]),Version}(Base);function comparator_typeof(obj){return(comparator_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function comparator_defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function comparator_setPrototypeOf(o,p){return(comparator_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function comparator_createSuper(Derived){var hasNativeReflectConstruct=function comparator_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var result,Super=comparator_getPrototypeOf(Derived);if(hasNativeReflectConstruct){var NewTarget=comparator_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return comparator_possibleConstructorReturn(this,result)}}function comparator_possibleConstructorReturn(self,call){if(call&&("object"===comparator_typeof(call)||"function"==typeof call))return call;if(void 0!==call)throw new TypeError("Derived constructors may only return object or undefined");return function comparator_assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}(self)}function comparator_getPrototypeOf(o){return(comparator_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)})(o)}function freeze_typeof(obj){return(freeze_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function freeze_createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function freeze_unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return freeze_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return freeze_arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e2){didErr=!0,err=_e2},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function freeze_arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}assignToNamespace("Monster.Types",Version),assignToNamespace("Monster",(function getVersion(){return monsterVersion instanceof Version?monsterVersion:monsterVersion=new Version("1.19.0")})),assignToNamespace("Monster.Util",function(_Base){!function comparator_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&comparator_setPrototypeOf(subClass,superClass)}(Comparator,_Base);var _super=comparator_createSuper(Comparator);function Comparator(callback){var _this;if(function comparator_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Comparator),_this=_super.call(this),isFunction(callback))_this.compare=callback;else{if(void 0!==callback)throw new TypeError("unsupported type");_this.compare=function(a,b){if(comparator_typeof(a)!==comparator_typeof(b))throw new TypeError("impractical comparison");return a===b?0:a<b?-1:1}}return _this}return function comparator_createClass(Constructor,protoProps,staticProps){return protoProps&&comparator_defineProperties(Constructor.prototype,protoProps),staticProps&&comparator_defineProperties(Constructor,staticProps),Constructor}(Comparator,[{key:"reverse",value:function reverse(){var original=this.compare;return this.compare=function(a,b){return original(b,a)},this}},{key:"equal",value:function equal(a,b){return 0===this.compare(a,b)}},{key:"greaterThan",value:function greaterThan(a,b){return this.compare(a,b)>0}},{key:"greaterThanOrEqual",value:function greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}},{key:"lessThanOrEqual",value:function lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}},{key:"lessThan",value:function lessThan(a,b){return this.compare(a,b)<0}}]),Comparator}(Base)),assignToNamespace("Monster.Util",(function deepFreeze(object){validateObject(object);var _step,_iterator=freeze_createForOfIteratorHelper(Object.getOwnPropertyNames(object));try{for(_iterator.s();!(_step=_iterator.n()).done;){var name=_step.value,value=object[name];object[name]=value&&"object"===freeze_typeof(value)?deepFreeze(value):value}}catch(err){_iterator.e(err)}finally{_iterator.f()}return Object.freeze(object)}));try{rootName=Monster.Types.getGlobalObject("__MonsterRootName__")}catch(e){}return rootName||(rootName="Monster"),Monster.Types.getGlobal()[rootName]=Monster,__webpack_exports__}()}));
\ No newline at end of file
diff --git a/packages/monster/package.json b/packages/monster/package.json
index 3b5b2d0846bdee004a49aa5c39038cc3e0df2dc3..ed333c0483733b79a43941271669861e661be7b9 100644
--- a/packages/monster/package.json
+++ b/packages/monster/package.json
@@ -1,6 +1,7 @@
 {
   "name": "@schukai/monster",
   "version": "1.19.0",
+  "types": "./source/types/package.d.ts",
   "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
   "keywords": [
     "framework",
@@ -19,6 +20,10 @@
     "monster"
   ],
   "type": "module",
+  "exports": {
+    "import": "./dist/monster.js",
+    "default": "./dist/monster.js"
+  },         
   "homepage": "https://monsterjs.org",
   "repository": {
     "type": "git",
@@ -33,6 +38,7 @@
     "> 1%",
     "IE 10"
   ],
+  
   "browserify": {
     "transform": [
       [
diff --git a/packages/monster/source/dom/events.js b/packages/monster/source/dom/events.js
index f91a60c7914ea917ae612d0445f0e6c820653787..f60e42242974544788ab1b125d851cf3a2030733 100644
--- a/packages/monster/source/dom/events.js
+++ b/packages/monster/source/dom/events.js
@@ -4,8 +4,8 @@
  * @author schukai GmbH
  */
 import {assignToNamespace, Monster} from '../namespace.js';
+import {isArray} from "../types/is.js";
 import {validateInstance, validateString} from "../types/validate.js";
-import {findClosestByAttribute} from "./attributes.js";
 import {getDocument} from "./util.js";
 
 /**
@@ -34,7 +34,7 @@ import {getDocument} from "./util.js";
  * @copyright schukai GmbH
  * @memberOf Monster.DOM
  * @throws {TypeError} value is not an instance of HTMLElement or HTMLCollection
- * @summary Construct and send and event 
+ * @summary Construct and send and event
  */
 function fireEvent(element, type) {
 
@@ -66,7 +66,8 @@ function fireEvent(element, type) {
 
 /**
  * This function gets the path `Event.composedPath()` from an event and tries to find the next element
- * up the tree `element.closest()` with the attribute and value. If no value is specified, only the attribute is searched.
+ * up the tree `element.closest()` with the attribute and value. If no value, or a value that is undefined or null, 
+ * is specified, only the attribute is searched.
  *
  * You can call the function via the monster namespace `new Monster.DOM.findTargetElementFromEvent()`.
  *
@@ -89,7 +90,7 @@ function fireEvent(element, type) {
  * @since 1.14.0
  * @param {Event} event
  * @param {string} attributeName
- * @param {string|null} attributeValue
+ * @param {string|null|undefined} attributeValue
  * @throws {Error} unsupported event
  * @memberOf Monster.DOM
  * @throws {TypeError} value is not a string
@@ -106,8 +107,17 @@ function findTargetElementFromEvent(event, attributeName, attributeValue) {
     const path = event.composedPath();
     const element = path?.[0];
 
-    if (element instanceof HTMLElement) {
-        return findClosestByAttribute(element, attributeName, attributeValue);
+    // closest cannot be used here, because closest is not correct for slotted elements
+    if (isArray(path)) {
+        for (let i = 0; i < path.length; i++) {
+            const o = path[i];
+
+            if (o instanceof HTMLElement &&
+                o.hasAttribute(attributeName)
+                && (attributeValue===undefined || o.getAttribute(attributeName) === attributeValue)) {
+                return o;
+            }
+        }
     }
 
     return undefined;
diff --git a/packages/monster/source/types/package.d.ts b/packages/monster/source/types/package.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2202f177583ba752d92030c12cf2e66e014de840
--- /dev/null
+++ b/packages/monster/source/types/package.d.ts
@@ -0,0 +1 @@
+export declare let Monster: Object;
\ No newline at end of file
diff --git a/packages/monster/test/cases/dom/events.js b/packages/monster/test/cases/dom/events.js
index ae72ff4d913230f18870ca8f8087b20081c76fb5..82b04913bcb6f6550b1fc0514d7c99a9bf51aca7 100644
--- a/packages/monster/test/cases/dom/events.js
+++ b/packages/monster/test/cases/dom/events.js
@@ -19,12 +19,14 @@ describe('Events', function () {
             let div = document.createElement('div');
             container.appendChild(div);
             div.addEventListener('click', (event) => {
-
                 let e = findTargetElementFromEvent(event, 'data-monster');
                 expect(e.getAttribute('data-monster')).to.be.equal('hello')
                 done();
             })
-            fireEvent(div, 'click');
+            setTimeout(()=>{
+                fireEvent(div, 'click');
+            },0)
+            
         });
 
     });
@@ -74,7 +76,7 @@ describe('Events', function () {
 
         it('should throw error', function () {
             expect(() => fireEvent({}, 'touch')).to.throw(Error);
-            ;
+            
         });
     });