@schukai/monster 1.29.0 → 1.29.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (187) hide show
  1. package/CHANGELOG +7 -2
  2. package/README.md +3 -3
  3. package/dist/modules/constants.js +1 -1
  4. package/dist/modules/constraints/abstract.js +1 -1
  5. package/dist/modules/constraints/abstractoperator.js +1 -1
  6. package/dist/modules/constraints/andoperator.js +1 -1
  7. package/dist/modules/constraints/invalid.js +1 -1
  8. package/dist/modules/constraints/isarray.js +1 -1
  9. package/dist/modules/constraints/isobject.js +1 -1
  10. package/dist/modules/constraints/namespace.js +1 -1
  11. package/dist/modules/constraints/oroperator.js +1 -1
  12. package/dist/modules/constraints/valid.js +1 -1
  13. package/dist/modules/data/buildmap.js +1 -1
  14. package/dist/modules/data/buildtree.js +1 -1
  15. package/dist/modules/data/datasource/namespace.js +1 -1
  16. package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
  17. package/dist/modules/data/datasource/restapi.js +1 -1
  18. package/dist/modules/data/datasource/storage/localstorage.js +1 -1
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
  21. package/dist/modules/data/datasource/storage.js +1 -1
  22. package/dist/modules/data/datasource.js +1 -1
  23. package/dist/modules/data/diff.js +1 -1
  24. package/dist/modules/data/extend.js +1 -1
  25. package/dist/modules/data/namespace.js +1 -1
  26. package/dist/modules/data/pathfinder.js +1 -1
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +1 -1
  29. package/dist/modules/dom/assembler.js +1 -1
  30. package/dist/modules/dom/attributes.js +1 -1
  31. package/dist/modules/dom/constants.js +1 -1
  32. package/dist/modules/dom/customcontrol.js +1 -1
  33. package/dist/modules/dom/customelement.js +1 -1
  34. package/dist/modules/dom/events.js +1 -1
  35. package/dist/modules/dom/focusmanager.js +1 -1
  36. package/dist/modules/dom/locale.js +1 -1
  37. package/dist/modules/dom/namespace.js +1 -1
  38. package/dist/modules/dom/resource/data.js +1 -1
  39. package/dist/modules/dom/resource/link/stylesheet.js +1 -1
  40. package/dist/modules/dom/resource/link.js +1 -1
  41. package/dist/modules/dom/resource/script.js +1 -1
  42. package/dist/modules/dom/resource.js +1 -1
  43. package/dist/modules/dom/resourcemanager.js +1 -1
  44. package/dist/modules/dom/template.js +1 -1
  45. package/dist/modules/dom/theme.js +1 -1
  46. package/dist/modules/dom/updater.js +2 -2
  47. package/dist/modules/dom/util.js +1 -1
  48. package/dist/modules/dom/worker/factory.js +1 -1
  49. package/dist/modules/i18n/formatter.js +1 -1
  50. package/dist/modules/i18n/locale.js +1 -1
  51. package/dist/modules/i18n/namespace.js +1 -1
  52. package/dist/modules/i18n/provider.js +1 -1
  53. package/dist/modules/i18n/providers/fetch.js +1 -1
  54. package/dist/modules/i18n/providers/namespace.js +1 -1
  55. package/dist/modules/i18n/translations.js +1 -1
  56. package/dist/modules/logging/handler/console.js +1 -1
  57. package/dist/modules/logging/handler/namespace.js +1 -1
  58. package/dist/modules/logging/handler.js +1 -1
  59. package/dist/modules/logging/logentry.js +1 -1
  60. package/dist/modules/logging/logger.js +1 -1
  61. package/dist/modules/logging/namespace.js +1 -1
  62. package/dist/modules/math/namespace.js +1 -1
  63. package/dist/modules/math/random.js +1 -1
  64. package/dist/modules/monster.js +1 -1
  65. package/dist/modules/namespace.js +1 -1
  66. package/dist/modules/text/formatter.js +1 -1
  67. package/dist/modules/text/namespace.js +1 -1
  68. package/dist/modules/types/base.js +1 -1
  69. package/dist/modules/types/basewithoptions.js +1 -1
  70. package/dist/modules/types/binary.js +1 -1
  71. package/dist/modules/types/dataurl.js +1 -1
  72. package/dist/modules/types/global.js +1 -1
  73. package/dist/modules/types/id.js +1 -1
  74. package/dist/modules/types/is.js +1 -1
  75. package/dist/modules/types/mediatype.js +1 -1
  76. package/dist/modules/types/namespace.js +1 -1
  77. package/dist/modules/types/node.js +1 -1
  78. package/dist/modules/types/nodelist.js +1 -1
  79. package/dist/modules/types/noderecursiveiterator.js +1 -1
  80. package/dist/modules/types/observer.js +1 -1
  81. package/dist/modules/types/observerlist.js +1 -1
  82. package/dist/modules/types/proxyobserver.js +1 -1
  83. package/dist/modules/types/queue.js +1 -1
  84. package/dist/modules/types/randomid.js +1 -1
  85. package/dist/modules/types/regex.js +1 -1
  86. package/dist/modules/types/stack.js +1 -1
  87. package/dist/modules/types/tokenlist.js +1 -1
  88. package/dist/modules/types/typeof.js +1 -1
  89. package/dist/modules/types/uniquequeue.js +1 -1
  90. package/dist/modules/types/uuid.js +1 -1
  91. package/dist/modules/types/validate.js +1 -1
  92. package/dist/modules/types/version.js +2 -2
  93. package/dist/modules/util/clone.js +1 -1
  94. package/dist/modules/util/comparator.js +1 -1
  95. package/dist/modules/util/deadmansswitch.js +1 -1
  96. package/dist/modules/util/freeze.js +1 -1
  97. package/dist/modules/util/namespace.js +1 -1
  98. package/dist/modules/util/processing.js +1 -1
  99. package/dist/modules/util/trimspaces.js +1 -1
  100. package/dist/monster.dev.js +356 -280
  101. package/dist/monster.dev.js.map +1 -1
  102. package/dist/monster.js +2 -2
  103. package/package.json +1 -1
  104. package/source/constraints/andoperator.js +5 -5
  105. package/source/constraints/invalid.js +3 -3
  106. package/source/constraints/isarray.js +3 -3
  107. package/source/constraints/isobject.js +3 -3
  108. package/source/constraints/oroperator.js +5 -5
  109. package/source/constraints/valid.js +3 -3
  110. package/source/data/buildmap.js +4 -4
  111. package/source/data/buildtree.js +2 -2
  112. package/source/data/datasource/restapi.js +3 -3
  113. package/source/data/datasource/storage/localstorage.js +2 -2
  114. package/source/data/datasource/storage/sessionstorage.js +2 -2
  115. package/source/data/datasource/storage.js +3 -3
  116. package/source/data/datasource.js +3 -3
  117. package/source/data/diff.js +3 -3
  118. package/source/data/extend.js +2 -2
  119. package/source/data/pathfinder.js +4 -4
  120. package/source/data/pipe.js +3 -3
  121. package/source/data/transformer.js +3 -3
  122. package/source/dom/assembler.js +2 -2
  123. package/source/dom/attributes.js +26 -26
  124. package/source/dom/customcontrol.js +1 -1
  125. package/source/dom/customelement.js +1 -1
  126. package/source/dom/events.js +6 -6
  127. package/source/dom/focusmanager.js +2 -2
  128. package/source/dom/locale.js +2 -2
  129. package/source/dom/resource/data.js +2 -2
  130. package/source/dom/resource/link/stylesheet.js +2 -2
  131. package/source/dom/resource/link.js +2 -2
  132. package/source/dom/resource/script.js +2 -2
  133. package/source/dom/resource.js +2 -2
  134. package/source/dom/resourcemanager.js +2 -2
  135. package/source/dom/template.js +5 -5
  136. package/source/dom/theme.js +3 -3
  137. package/source/dom/updater.js +25 -17
  138. package/source/dom/util.js +6 -6
  139. package/source/dom/worker/factory.js +2 -2
  140. package/source/i18n/formatter.js +4 -4
  141. package/source/i18n/locale.js +4 -4
  142. package/source/i18n/provider.js +2 -2
  143. package/source/i18n/providers/fetch.js +3 -3
  144. package/source/i18n/translations.js +4 -4
  145. package/source/logging/handler/console.js +2 -2
  146. package/source/logging/handler.js +2 -2
  147. package/source/logging/logentry.js +2 -2
  148. package/source/logging/logger.js +2 -2
  149. package/source/math/random.js +2 -2
  150. package/source/namespace.js +1 -1
  151. package/source/text/formatter.js +3 -3
  152. package/source/types/base.js +2 -2
  153. package/source/types/basewithoptions.js +32 -6
  154. package/source/types/binary.js +4 -4
  155. package/source/types/dataurl.js +4 -4
  156. package/source/types/global.js +4 -4
  157. package/source/types/id.js +2 -2
  158. package/source/types/is.js +20 -20
  159. package/source/types/mediatype.js +4 -4
  160. package/source/types/node.js +2 -2
  161. package/source/types/nodelist.js +2 -2
  162. package/source/types/noderecursiveiterator.js +4 -4
  163. package/source/types/observer.js +3 -3
  164. package/source/types/observerlist.js +2 -2
  165. package/source/types/proxyobserver.js +5 -5
  166. package/source/types/queue.js +3 -3
  167. package/source/types/randomid.js +2 -2
  168. package/source/types/regex.js +2 -2
  169. package/source/types/stack.js +2 -2
  170. package/source/types/tokenlist.js +2 -2
  171. package/source/types/typeof.js +3 -3
  172. package/source/types/uniquequeue.js +2 -2
  173. package/source/types/uuid.js +2 -2
  174. package/source/types/validate.js +20 -20
  175. package/source/types/version.js +6 -6
  176. package/source/util/clone.js +2 -2
  177. package/source/util/comparator.js +3 -3
  178. package/source/util/deadmansswitch.js +3 -3
  179. package/source/util/freeze.js +2 -2
  180. package/source/util/processing.js +3 -3
  181. package/source/util/trimspaces.js +2 -2
  182. package/test/cases/dom/updater.js +76 -3
  183. package/test/cases/monster.js +1 -1
  184. package/test/web/monster-dev.html +3 -3
  185. package/test/web/monster.html +2 -2
  186. package/test/web/test.html +2 -2
  187. package/test/web/tests.js +2 -2
@@ -1 +1 @@
1
- {"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,IAAMC,cAAc,GAAGC,MAAM,CAAC,cAAD,CAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAGD,MAAM,CAAC,OAAD,CAAlC;;;;;;;;;;;;ACtBa;AAEb;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;IACME;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,IAAMR,OAAO,GAAG,IAAII,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,GAAG7B,OAAZ;AAAA,MAAqBU,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;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;;;;;;;;;;;;;AC5Ca;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;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;;;;;;;;;;;;;;AC3Ca;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;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;;;;;;;;;;;;;;ACrEa;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;;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;;;;;;;;;;;;;;;AC7Da;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;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;;;;;;;;;;;;;;;;;;;;;;ACrEa;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;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,CAAG/B,MAAM,CAACgD,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;AACA;;;AACA,SAASC,WAAT,CAAqBlB,KAArB,EAA4B;AACxB,MAAImB,IAAJ;;AAEA,MAAInB,KAAK,KAAK3B,SAAV,IAAuB2B,KAAK,KAAK,IAArC,EAA2C;AACvC,WAAO,IAAP;AACH;;AAEDmB,EAAAA,IAAI,WAAUnB,KAAV,CAAJ;;AAEA,MAAImB,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;AACA;;;AACA,SAASC,QAAT,CAAkBpB,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;AACA;;;AACA,SAASqB,SAAT,CAAmBrB,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;AACA;;;AACA,SAASsB,QAAT,CAAkBtB,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;AACA;;;AACA,SAASuB,QAAT,CAAkBvB,KAAlB,EAAyB;AAErB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAIkB,WAAW,CAAClB,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;AACA;;;AACA,SAASwB,UAAT,CAAoBxB,KAApB,EAA2ByB,QAA3B,EAAqC;AAEjC,MAAI,CAACF,QAAQ,CAACvB,KAAD,CAAb,EAAsB,OAAO,KAAP;AACtB,MAAI,CAAC0B,UAAU,CAACD,QAAD,CAAf,EAA2B,OAAO,KAAP;AAC3B,MAAI,CAACA,QAAQ,CAACxC,cAAT,CAAwB,WAAxB,CAAL,EAA2C,OAAO,KAAP;AAC3C,SAAQe,KAAK,YAAYyB,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;AACA;AACA;;;AACA,SAASjC,OAAT,CAAiBQ,KAAjB,EAAwB;AACpB,SAAOT,KAAK,CAACC,OAAN,CAAcQ,KAAd,CAAP;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,SAAS0B,UAAT,CAAoB1B,KAApB,EAA2B;AACvB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAIkB,WAAW,CAAClB,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;AACA;;;AACA,SAAS2B,SAAT,CAAmB3B,KAAnB,EAA0B;AACtB,SAAO4B,MAAM,CAACD,SAAP,CAAiB3B,KAAjB,CAAP;AACH;;AAGDxB,gEAAiB,CAAC,eAAD,EAAkB0C,WAAlB,EAA+BG,SAA/B,EAA0CC,QAA1C,EAAoDC,QAApD,EAA8D/B,OAA9D,EAAuEkC,UAAvE,EAAmFV,UAAnF,EAA+FW,SAA/F,EAA0GP,QAA1G,CAAjB;;;;;;;;;;;;;;;AC/Za;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;AACA;AACA;AACA;AACA;AACA;;IACMS;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ7B,KAAR,EAAe;AACX,UAAIuB,sDAAQ,CAACvB,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,EAAwBqD,QAAxB,CAAjB;;;;;;;;;;;;;;ACtEa;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;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ9B,KAAR,EAAe;AACX,UAAI+B,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI9B,OAAJ,CAAY,UAAUc,OAAV,EAAmBb,MAAnB,EAA2B;AAC1C,YAAI8B,CAAJ,EAAOC,CAAP;AAEAF,QAAAA,IAAI,CAACxB,QAAL,CAAcK,OAAd,CAAsBZ,KAAtB,EACKkC,IADL,CACU,YAAY;AACdnB,UAAAA,OAAO;AACV,SAHL,EAGOoB,KAHP,CAGa,YAAY;AACrBH,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAIC,CAAC,KAAK,KAAV,EAAiB;AACb/B,YAAAA,MAAM;AACT;AACJ,SATD;AAWA6B,QAAAA,IAAI,CAACvB,QAAL,CAAcI,OAAd,CAAsBZ,KAAtB,EACKkC,IADL,CACU,YAAY;AACdnB,UAAAA,OAAO;AACV,SAHL,EAGOoB,KAHP,CAGa,YAAY;AACrBF,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAID,CAAC,KAAK,KAAV,EAAiB;AACb9B,YAAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoBI;;AAyCzB9B,gEAAiB,CAAC,qBAAD,EAAwBsD,UAAxB,CAAjB;;;;;;;;;;;;;;AC/Fa;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;;IACMM;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQpC,KAAR,EAAe;AACX,aAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;;;EAVeD;;AAcpBvB,gEAAiB,CAAC,qBAAD,EAAwB4D,KAAxB,CAAjB;;;;;;;;;;;;;;;;;;AC7Da;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;AACrE,SAAOC,aAAa,CAACL,OAAD,EAAUC,QAAV,EAAoBG,MAApB,EAA4B,UAAUE,CAAV,EAAaC,CAAb,EAAgBC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CAAV;;AAEA,cAAIjD,sDAAQ,CAACoD,GAAD,CAAR,IAAiBb,SAAS,KAAKzF,SAAnC,EAA8C;AAC1CsG,YAAAA,GAAG,CAAC,GAAD,CAAH,GAAWb,SAAX;AACH;;AAEDC,UAAAA,UAAU,CAACV,GAAX,CAAeqB,EAAf,EAAmBC,GAAnB;AA3BkB;;AAYtB,4DAA0B;AAAA;AAgBzB;AA5BqB;AAAA;AAAA;AAAA;AAAA;AA8BzB;AAGJ,GAtCD,QAsCShF,KAAK,CAACE,MAAN,GAAe,CAtCxB,EAXqD,CAmDrD;;;AACA,MAAImE,YAAY,KAAKT,MAAM,CAACU,IAA5B,EAAkC;AAAA,gDACTF,UADS;AAAA;;AAAA;AAC9B,6DAAiC;AAAA;AAAA,YAArBb,CAAqB;AAAA,YAAlBsB,CAAkB;;AAC7BjB,QAAAA,MAAM,CAACF,GAAP,CAAWH,CAAX,EAAcsB,CAAd;AACH;AAH6B;AAAA;AAAA;AAAA;AAAA;AAIjC;;AAED,SAAO7B,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,SAASS,KAAT,CAAeT,OAAf,EAAwBiC,UAAxB,EAAoCC,YAApC,EAAkD;AAC9C,MAAID,UAAU,KAAKvG,SAAnB,EAA8B,OAAOwG,YAAY,GAAGA,YAAH,GAAkBlC,OAArC;AAC9BN,EAAAA,kEAAc,CAACuC,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,IAAI7B,sDAAJ,CAAeG,OAAf,CAAb;;AAEA,MAAIoC,KAAK,CAAClF,MAAN,KAAiB,CAArB,EAAwB;AACpB,WAAOwE,MAAM,CAACC,MAAP,CAAcM,UAAd,CAAP;AACH;;AAEDG,EAAAA,KAAK,CAACnB,OAAN,CAAc,UAAC5B,CAAD,EAAO;AACjB,QAAIiD,MAAM,GAAGjD,CAAH,aAAGA,CAAH,uBAAGA,CAAC,CAAG,QAAH,CAAd;AACA,QAAIkD,WAAW,GAAGD,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,aAAH,CAAxB;AACA,QAAIC,WAAW,KAAK7G,SAApB,EAA+B;AAE/B,QAAI8G,IAAI,GAAGF,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,MAAH,CAAjB;AAEA,QAAIhC,CAAC,GAAGoB,MAAM,CAACC,MAAP,CAAca,IAAd,CAAR;AACA,QAAIlC,CAAC,KAAK5E,SAAV,EAAqB4E,CAAC,GAAG4B,YAAJ;AAErBD,IAAAA,UAAU,GAAGA,UAAU,CAACQ,UAAX,CAAsBF,WAAtB,EAAmCjC,CAAnC,CAAb;AAGH,GAbD;AAeA,SAAO2B,UAAP;AAEH;;AAGDpG,gEAAiB,CAAC,cAAD,EAAiBkE,QAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;ACxaa;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,SAAS2C,gBAAT,CAA0BrF,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,SAASsF,iBAAT,CAA2BtF,KAA3B,EAAkC;AAC9B,MAAI,CAACkB,mDAAW,CAAClB,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,SAASuF,eAAT,CAAyBvF,KAAzB,EAAgC;AAC5B,MAAI,CAACqB,iDAAS,CAACrB,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,SAASqC,cAAT,CAAwBrC,KAAxB,EAA+B;AAC3B,MAAI,CAACsB,gDAAQ,CAACtB,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,SAASwF,cAAT,CAAwBxF,KAAxB,EAA+B;AAC3B,MAAI,CAACuB,gDAAQ,CAACvB,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,SAASyF,gBAAT,CAA0BzF,KAA1B,EAAiCyB,QAAjC,EAA2C;AACvC,MAAI,CAACD,kDAAU,CAACxB,KAAD,EAAQyB,QAAR,CAAf,EAAkC;AAC9B,QAAIiE,CAAC,GAAG,EAAR;;AACA,QAAInE,gDAAQ,CAACE,QAAD,CAAR,IAAsBC,kDAAU,CAACD,QAAD,CAApC,EAAgD;AAC5CiE,MAAAA,CAAC,GAAGjE,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAG,MAAH,CAAZ;AACH;;AAED,QAAIiE,CAAJ,EAAO;AACHA,MAAAA,CAAC,GAAG,MAAMA,CAAV;AACH;;AAED,UAAM,IAAIjF,SAAJ,CAAc,gCAAgCiF,CAA9C,CAAN;AACH;;AACD,SAAO1F,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,aAAT,CAAuB3F,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,SAAS4F,cAAT,CAAwB5F,KAAxB,EAA+B;AAC3B,MAAI,CAACoB,gDAAQ,CAACpB,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,SAAS6F,gBAAT,CAA0B7F,KAA1B,EAAiC;AAC7B,MAAI,CAAC0B,kDAAU,CAAC1B,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS8F,eAAT,CAAyB9F,KAAzB,EAAgC;AAC5B,MAAI,CAAC2B,iDAAS,CAAC3B,KAAD,CAAd,EAAuB;AACnB,UAAM,IAAIS,SAAJ,CAAc,yBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;;AAEDxB,gEAAiB,CAAC,eAAD,EAAkB8G,iBAAlB,EAAqCC,eAArC,EAAsDlD,cAAtD,EAAsEmD,cAAtE,EAAsFG,aAAtF,EAAqGE,gBAArG,EAAuHR,gBAAvH,EAAyIS,eAAzI,CAAjB;;;;;;;;;;;;;;;;;ACjaa;AAEb;AACA;AACA;;;;AAEA;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;AA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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;;AACA,SAAS3B,MAAT,CAAgBhG,KAAhB,EAAuB;AACnB,MAAImB,IAAI,GAAI,EAAD,CAAKhC,QAAL,CAAcwE,IAAd,CAAmB3D,KAAnB,EAA0BV,KAA1B,CAAgC,eAAhC,EAAiD,CAAjD,CAAX;;AACA,MAAI,aAAa6B,IAAjB,EAAuB;AACnB,QAAMyG,OAAO,GAAI,2BAAD,CAA8BC,IAA9B,CAAmC7H,KAAK,CAACgH,WAAN,CAAkB7H,QAAlB,EAAnC,CAAhB;AACAgC,IAAAA,IAAI,GAAIyG,OAAO,IAAIA,OAAO,CAAC/H,MAAR,GAAiB,CAA7B,GAAkC+H,OAAO,CAAC,CAAD,CAAzC,GAA+C,EAAtD;AACH;;AACD,SAAOzG,IAAI,CAAC2G,WAAL,EAAP;AACH;;AAEDtJ,gEAAiB,CAAC,eAAD,EAAkBwH,MAAlB,CAAjB;;;;;;;;;;;;;;;;;;;AC1Da;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACO,IAAMzD,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;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AAiDnBtB,gEAAiB,CAAC,cAAD,EAAiBwM,IAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;AC7Ga;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AACF;AACJ;AACA;AACA;AACI,uBAAYnG,UAAZ,EAAwB;AAAA;;AAAA;;AACpB;AACA,UAAK+G,IAAL,GAAYC,WAAW,CAAChH,UAAD,CAAvB;AACA,UAAKiH,OAAL,GAAe,MAAKF,IAAL,CAAUxH,KAAV,EAAf;AACA,UAAK2H,SAAL,GAAiB,IAAItI,GAAJ,EAAjB;AAJoB;AAMvB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYtE,IAAZ,EAAkBoE,QAAlB,EAA4B4H,OAA5B,EAAqC;AACjC7I,MAAAA,kEAAc,CAACnD,IAAD,CAAd;AACA2G,MAAAA,oEAAgB,CAACvC,QAAD,CAAhB;;AAEA,UAAI4H,OAAO,KAAK7M,SAAhB,EAA2B;AACvBmH,QAAAA,kEAAc,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IAAMC,YAAY,GAAG,IAArB;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,wBAAwB,GAAG,gBAAjC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,yBAAyB,GAAG,iBAAlC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,aAAa,GAAG,KAAtB;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,sBAAsB,GAAG,cAA/B;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,qBAAqB,GAAG,aAA9B;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,gBAAgB,GAAG,QAAzB;;;;;;;;;;;;;;;;ACzXa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA,IAAMG,sBAAsB,GAAG7Y,MAAM,CAAC,kBAAD,CAArC;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;;IACM8Y;;;;;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,sBAAL,IAA+B,MAAKE,eAAL,EAA/B;AACH;;AAEDC,IAAAA,YAAY,CAACtT,IAAb;AAZU;AAcb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;;AAiBI;AACJ;AACA;AACA;AACA;AACA;AACA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ASG,YAAT,GAAwB;AACpB,MAAMlV,IAAI,GAAG,IAAb,CADoB,CAGpB;;AACAA,EAAAA,IAAI,CAAC8U,sEAAD,CAAJ,CAA8B,OAA9B,IAAyC,YAAM;AAC3C9U,IAAAA,IAAI,CAACmW,SAAL,CAAe,OAAf,EAAwBnW,IAAI,CAACkR,YAAL,CAAkB,OAAlB,CAAxB;AACH,GAFD;AAIH;;AAEDzU,gEAAiB,CAAC,aAAD,EAAgBuY,aAAhB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Ua;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAMwB,gBAAgB,GAAGta,MAAM,CAAC,kBAAD,CAA/B;AAEA;AACA;AACA;AACA;;AACA,IAAMua,oBAAoB,GAAGva,MAAM,CAAC,sBAAD,CAAnC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAM4Y,uBAAuB,GAAG5Y,MAAM,CAAC,mBAAD,CAAtC;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;;IACM2Y;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;AACA,UAAK5Y,yDAAL,IAAuB,IAAI2Q,kEAAJ,CAAkB;AAAC,iBAAW9D,uDAAM,CAAC,EAAD,EAAK,MAAK4N,QAAV,EAAoBC,wBAAwB,CAAC/U,IAAzB,+BAApB;AAAlB,KAAlB,CAAvB;AACA,UAAKkT,uBAAL,IAAgC,EAAhC;AACA8B,IAAAA,kBAAkB,CAAChV,IAAnB;;AACA,UAAK4U,gBAAL;;AALU;AAMb;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;AACH/D,QAAAA,kBAAkB,EAAE,KAAKvB,YAAL,CAAkBuB,8DAAlB,CADjB;AAEHoE,QAAAA,UAAU,EAAE,MAFT;AAGHC,QAAAA,cAAc,EAAE,IAHb;AAIHC,QAAAA,SAAS,EAAE;AACPC,UAAAA,IAAI,EAAE1a;AADC;AAJR,OAAP;AAQH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AA+BI;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAemR,QAAf,EAAyB;AACrB,WAAKxR,yDAAL,EAAqBgb,cAArB,CAAoCxJ,QAApC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAeA,QAAf,EAAyB;AACrB,WAAKxR,yDAAL,EAAqBib,cAArB,CAAoCzJ,QAApC;AACA,aAAO,IAAP;AACH;AA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;;;;;;;;;;;;;AC1Oa;AAEb;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;;IACMxE;;;;;AACF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,oBAAYqD,QAAZ,EAAsB;AAAA;;AAAA;;AAClB;AACA,QAAMgB,mBAAmB,GAAG/U,mEAAiB,CAAC,qBAAD,CAA7C;AACAlC,IAAAA,oEAAgB,CAACiW,QAAD,EAAWgB,mBAAX,CAAhB;AACA,UAAKhB,QAAL,GAAgBA,QAAhB;AAJkB;AAKrB;AAED;AACJ;AACA;AACA;;;;;WACI,8BAAqB;AACjB,aAAO,KAAKA,QAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,kCAAyB;AACrB,aAAO,KAAKA,QAAL,CAAcD,OAAd,CAAsBzM,SAAtB,CAAgC,IAAhC,CAAP;AACH;;;;EA9BkBlP;AAkCvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsY,oBAAT,CAA8B1J,EAA9B,EAAkCsP,WAAlC,EAA+C;AAC3C3b,EAAAA,kEAAc,CAACqM,EAAD,CAAd;AAEA,MAAM9H,QAAQ,GAAGc,iEAAe,CAAC,UAAD,CAAhC;AACA,MAAMgV,mBAAmB,GAAG/U,mEAAiB,CAAC,qBAAD,CAA7C;AACA,MAAMlB,gBAAgB,GAAGkB,mEAAiB,C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B,UAAM,IAAItI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOsI,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,SAASyc,SAAT,GAAqB;AAAA;;AACjB,MAAI1c,MAAM,kBAAGZ,2DAAS,EAAZ,gDAAG,YAAc,QAAd,CAAb;;AACA,MAAI,QAAOY,MAAP,MAAkB,QAAtB,EAAgC;AAC5B,UAAM,IAAIrI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOqI,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,SAAS2c,6BAAT,CAAuCzH,IAAvC,EAA6C;AACzCxZ,EAAAA,kEAAc,CAACwZ,IAAD,CAAd;AAEA,MAAMjV,QAAQ,GAAGkY,WAAW,EAA5B;AACA,MAAMpD,QAAQ,GAAG9U,QAAQ,CAACwV,aAAT,CAAuB,UAAvB,CAAjB;AACAV,EAAAA,QAAQ,CAACI,SAAT,GAAqBD,IAArB;AAEA,SAAOH,QAAQ,CAACD,OAAhB;AACH;;AAGDjd,gEAAiB,CAAC,aAAD,EAAgB6kB,SAAhB,EAA2BvE,WAA3B,EAAwCwE,6BAAxC,CAAjB;;;;;;;;;;;;;;;ACzMa;AAEb;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAME,gBAAgB,GAAG,IAAzB;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,SAASC,mBAAT,GAA+B;AAE3B,MAAM7c,QAAQ,GAAGkY,qDAAW,EAA5B;AAEA,MAAIjD,IAAI,GAAGjV,QAAQ,CAAC+X,aAAT,CAAuB,MAAvB,CAAX;;AACA,MAAI9C,IAAI,YAAYtJ,WAAhB,IAA+BsJ,IAAI,CAAC9I,YAAL,CAAkB,MAAlB,CAAnC,EAA8D;AAC1D,QAAI2Q,MAAM,GAAG7H,IAAI,CAAC5I,YAAL,CAAkB,MAAlB,CAAb;;AACA,QAAIyQ,MAAJ,EAAY;AACR,aAAO,IAAIH,wDAAJ,CAAgBG,MAAhB,CAAP;AACH;AACJ;;AAED,SAAOH,4DAAW,CAACC,gBAAD,CAAlB;AACH;;AAEDhlB,gEAAiB,CAAC,aAAD,EAAgBilB,mBAAhB,CAAjB;;;;;;;;;;;;;;;;;AChEa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAME,gBAAgB,GAAG1lB,MAAM,CAAC,YAAD,CAA/B;AAEA;AACA;AACA;AACA;;AACA,IAAM2lB,kBAAkB,GAAG3lB,MAAM,CAAC,cAAD,CAAjC;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;;IACM4lB;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,kBAAYC,QAAZ,EAAsBC,MAAtB,EAA8BC,MAA9B,EAAsCC,QAAtC,EAAgDC,OAAhD,EAAyDC,UAAzD,EAAqE;AAAA;;AAAA;;AACjE;AAEA,UAAKR,gBAAL,IAAyB;AACrBG,MAAAA,QAAQ,EAAGA,QAAQ,KAAKzlB,SAAd,GAA2BA,SAA3B,GAAuCgE,kEAAc,CAACyhB,QAAD,CAD1C;AAErBE,MAAAA,MAAM,EAAGA,MAAM,KAAK3lB,SAAZ,GAAyBA,SAAzB,GAAqCgE,kEAAc,CAAC2hB,MAAD,CAFtC;AAGrBD,MAAAA,MAAM,EAAGA,MAAM,KAAK1lB,SAAZ,GAAyBA,SAAzB,GAAqCgE,kEAAc,CAAC0hB,MAAD,CAHtC;AAIrBE,MAAAA,QAAQ,EAAGA,QAAQ,KAAK5lB,SAAd,GAA2BA,SAA3B,GAAuCgE,kEAAc,CAAC4hB,QAAD,CAJ1C;AAKrBC,MAAAA,OAAO,EAAGA,OAAO,KAAK7lB,SAAb,GAA0BA,SAA1B,GAAsCgE,kEAAc,CAAC6hB,OAAD,CALxC;AAMrBC,MAAAA,UAAU,EAAGA,UAAU,KAAK9lB,SAAhB,GAA6BA,SAA7B,GAAyCgE,kEAAc,CAAC8hB,UAAD;AAN9C,KAAzB;AASA,QAAI/kB,CAAC,GAAG,EAAR;AACA,QAAI0kB,QAAQ,KAAKzlB,SAAjB,EAA4Be,CAAC,CAACgF,IAAF,CAAO0f,QAAP;AAC5B,QAAIE,MAAM,KAAK3lB,SAAf,EAA0Be,CAAC,CAACgF,IAAF,CAAO4f,MAAP;AAC1B,QAAID,MAAM,KAAK1lB,SAAf,EAA0Be,CAAC,CAACgF,IAAF,CAAO2f,MAAP;AAC1B,QAAIE,QAAQ,KAAK5lB,SAAjB,EAA4Be,CAAC,CAACgF,IAAF,CAAO6f,QAAP;AAC5B,QAAIC,OAAO,KAAK7lB,SAAhB,EAA2Be,CAAC,CAACgF,IAAF,CAAO8f,OAAP;AAC3B,QAAIC,UAAU,KAAK9lB,SAAnB,EAA8Be,CAAC,CAACgF,IAAF,CAAO+f,UAAP;;AAE9B,QAAI/kB,CAAC,CAACS,MAAF,KAAa,CAAjB,EAAoB;AAChB,YAAM,IAAIvB,KAAJ,CAAU,oBAAV,CAAN;AACH;;AAED,UAAKslB,kBAAL,IAA2BxkB,CAAC,CAACmF,IAAF,CAAO,GAAP,CAA3B;AAxBiE;AA0BpE;AAED;AACJ;AACA;;;;;SACI,eAAmB;AACf,aAAO,KAAKqf,kBAAL,CAAP;AACH;AAED;AACJ;AACA;;;;SACI,eAAe;AACX,aAAO,KAAKD,gBAAL,EAAuBG,QAA9B;AACH;AAED;AACJ;AACA;;;;SACI,eAAa;AACT,aAAO,KAAKH,gBAAL,EAAuBI,MAA9B;AACH;AAED;AACJ;AACA;;;;SACI,eAAa;AACT,aAAO,KAAKJ,gBAAL,EAAuBK,MAA9B;AACH;AAED;AACJ;AACA;;;;SACI,eAAe;AACX,aAAO,KAAKL,gBAAL,EAAuBM,QAA9B;AACH;AAED;AACJ;AACA;;;;SACI,eAAc;AACV,aAAO,KAAKN,gBAAL,EAAuBO,OAA9B;AACH;AAED;AACJ;AACA;;;;SACI,eAAiB;AACb,aAAO,KAAKP,gBAAL,EAAuBS,YAA9B;AACH;AAGD;AACJ;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAK,KAAKC,YAAjB;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,kBAAS;AACL,aAAO/hB,qDAAK,CAAC,KAAKqhB,gBAAL,CAAD,CAAZ;AACH;;;;EAvGgB7jB;AA4GrB;AACA;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,SAASyjB,WAAT,CAAqBG,MAArB,EAA6B;AAEzBA,EAAAA,MAAM,GAAGrhB,kEAAc,CAACqhB,MAAD,CAAd,CAAu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;AAEA;AACA;AACA;AACA;;AACA,IAAMopB,cAAc,GAAGppB,MAAM,CAAC,UAAD,CAA7B;AAEA;AACA;AACA;AACA;;AACA,IAAMqpB,qBAAqB,GAAGrpB,MAAM,CAAC,iBAAD,CAApC;AAEA;AACA;AACA;AACA;;AACA,IAAMspB,sBAAsB,GAAGtpB,MAAM,CAAC,kBAAD,CAArC;AAEA;AACA;AACA;AACA;;AACA,IAAMupB,iBAAiB,GAAGvpB,MAAM,CAAC,aAAD,CAAhC;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;;IACMmoB;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAYpe,MAAZ,EAAoBsR,OAApB,EAA6B;AAAA;;AAAA;;AACzB,8BAAMA,OAAN;AACA,UAAK8N,oBAAL,IAA6Bpf,MAAM,IAAI,EAAvC;AACA,UAAKsf,qBAAL,IAA8B,CAA9B;AACA,UAAKC,sBAAL,IAA+B,CAA/B;AAJyB;AAK5B;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;SACI,eAAe;AACX,aAAO1c,uDAAM,CAAC,EAAD,gEAAqB;AAC9B4c,QAAAA,MAAM,EAAE;AACJC,UAAAA,IAAI,EAAE,CAAC,IAAD,CADF;AAEJC,UAAAA,KAAK,EAAE,CAAC,GAAD;AAFH,SADsB;AAK9BjK,QAAAA,SAAS,EAAE;AACPkK,UAAAA,SAAS,EAAE,IADJ;AAEPC,UAAAA,UAAU,EAAE;AAFL,SALmB;AAS9B/b,QAAAA,SAAS,EAAE;AATmB,OAArB,CAAb;AAWH;AAGD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,2BAAkB8b,SAAlB,EAA6BC,UAA7B,EAAyC;AAErC,UAAID,SAAS,KAAKvpB,SAAlB,EAA6B;AACzB,aAAKL,yDAAL,EAAqB,WAArB,EAAkC,WAAlC,IAAiDqE,kEAAc,CAACulB,SAAD,CAA/D;AACH;;AAED,UAAIC,UAAU,KAAKxpB,SAAnB,EAA8B;AAC1B,aAAKL,yDAAL,EAAqB,WAArB,EAAkC,YAAlC,IAAkDqE,kEAAc,CAACwlB,UAAD,CAAhE;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,mBAAUH,IAAV,EAAgBC,KAAhB,EAAuB;AAEnB,UAAIA,KAAK,KAAKtpB,SAAd,EAAyB;AACrBspB,QAAAA,KAAK,GAAGD,IAAR;AACH;;AAED,UAAIpmB,sDAAQ,CAAComB,IAAD,CAAZ,EAAoBA,IAAI,GAAG,CAACA,IAAD,CAAP;AACpB,UAAIpmB,sDAAQ,CAACqmB,KAAD,CAAZ,EAAqBA,KAAK,GAAG,CAACA,KAAD,CAAR;AAErB,WAAK3pB,yDAAL,EAAqB,QAArB,EAA+B,MAA/B,IAAyC2H,iEAAa,CAAC+hB,IAAD,CAAtD;AACA,WAAK1pB,yDAAL,EAAqB,QAArB,EAA+B,OAA/B,IAA0C2H,iEAAa,CAACgiB,KAAD,CAAvD;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,gBAAO1B,IAAP,EAAa;AACT,WAAKoB,cAAL,IAAuB,CAAvB;AACA,WAAKC,qBAAL,IAA8B,CAA9B;AACA,WAAKC,sBAAL,IAA+B,CAA/B;AACA,WAAKC,iBAAL,IAA0B,EAA1B;AACA,aAAOR,OAAM,CAACrjB,IAAP,CAAY,IAAZ,EAAkBsiB,IAAlB,CAAP;AACH;;;;EAjHmBZ;AAqHxB;AACA;AACA;AACA;;;AACA,SAAS2B,OAAT,CAAgBf,IAAhB,EAAsB;AAAA;;AAClB,MAAMlkB,IAAI,GAAG,IAAb;AAEAA,EAAAA,IAAI,CAACslB,cAAD,CAAJ;;AACA,MAAI,KAAKA,cAAL,IAAuB,EAA3B,EAA+B;AAC3B,UAAM,IAAI/oB,KAAJ,CAAU,kBAAV,CAAN;AACH;;AAED,MAAIwpB,UAAU,4BAAG/lB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,QAArB,EAA+B,MAA/B,CAAH,0DAAG,sBAAyC,KAAKspB,qBAAL,CAAzC,CAAjB;AACA,MAAIS,WAAW,6BAAGhmB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,QAArB,EAA+B,OAA/B,CAAH,2DAAG,uBAA0C,KAAKupB,sBAAL,CAA1C,CAAlB,CATkB,CAWlB;;AACA,MAAItB,IAAI,CAACvU,OAAL,CAAaoW,UAAb,MAA6B,CAAC,CAA9B,IAAmC7B,IAAI,CAACvU,OAAL,CAAaqW,WAAb,MAA8B,CAAC,CAAtE,EAAyE;AACrE,WAAO9B,IAAP;AACH;;AAED,MAAI1iB,MAAM,GAAGykB,QAAQ,CAACrkB,IAAT,CAAc,IAAd,EAAoBtB,kEAAc,CAAC4jB,IAAD,CAAlC,EAA0C6B,UAA1C,EAAsDC,WAAtD,CAAb;;AAEA,gCAAIhmB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,QAArB,EAA+B,MAA/B,CAAJ,mDAAI,uBAAyC,KAAKspB,qBAAL,IAA8B,CAAvE,CAAJ,EAA+E;AAC3E,SAAKA,qBAAL;AACH;;AAED,gCAAIvlB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,QAArB,EAA+B,OAA/B,CAAJ,mDAAI,uBAA0C,KAAKupB,sBAAL,IAA+B,CAAzE,CAAJ,EAAiF;AAC7E,SAAKA,sBAAL;AACH;;AAEDhkB,EAAAA,MAAM,GAAGyjB,OAAM,CAACrjB,IAAP,CAAY5B,IAAZ,EAAkBwB,MAAlB,CAAT;AAEA,SAAOA,MAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASykB,QAAT,CAAkB/B,IAAlB,EAAwB6B,UAAxB,EAAoCC,WAApC,EAAiD;AAC7C,MAAMhmB,IAAI,GAAG,IAAb;AAEA,MAAIkmB,SAAS,GAAG,EAAhB;AAEA,MAAMC,mBAAmB,GAAGnmB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,WAArB,EAAkC,YAAlC,CAA5B;AACA,MAAMmqB,kBAAkB,GAAGpmB,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,WAArB,EAAkC,WAAlC,CAA3B;AACA,MAAM8N,SAAS,GAAG/J,IAAI,CAAC/D,yDAAD,CAAJ,CAAqB,WAArB,CAAlB;;AAEA,SAAO,IAAP,EAAa;AAAA;;AAET,QAAIoqB,UAAU,GAAGnC,IAAI,CAACvU,OAAL,CAAaoW,UAAb,CAAjB,CAFS,CAGT;;AACA,QAAIM,UAAU,KAAK,CAAC,CAApB,EAAuB;AACnBH,MAAAA,SAAS,CAAC7jB,IAAV,CAAe6hB,IAAf;AACA;AACH,KAHD,MAGO,IAAImC,UAAU,GAAG,CAAjB,EAAoB;AACvBH,MAAAA,SAAS,CAAC7jB,IAAV,CAAe6hB,IAAI,CAAC5X,SAAL,CAAe,CAAf,EAAkB+Z,UAAlB,CAAf;AACAnC,MAAAA,IAAI,GAAGA,IAAI,CAAC5X,SAAL,CAAe+Z,UAAf,CAAP;AACH;;AAED,QAAIC,QAAQ,GAAGpC,IAAI,CAAC5X,SAAL,CAAeyZ,UAAU,CAACjoB,MAA1B,EAAkC6R,OAAlC,CAA0CqW,WAA1C,CAAf;AACA,QAAIM,QAAQ,KAAK,CAAC,CAAlB,EAAqBA,QAAQ,IAAIP,UAAU,CAACjoB,MAAvB;AACrB,QAAIyoB,gBAAgB,GAAGrC,IAAI,CAAC5X,SAAL,CAAeyZ,UAAU,CAACjoB,MAA1B,EAAkC6R,OAAlC,CAA0CoW,UAA1C,CAAvB;;AACA,QAAIQ,gBAAgB,KAAK,CAAC,CAA1B,EAA6B;AACzBA,MAAAA,gBAAgB,IAAIR,UAAU,CAACjoB,MAA/B;;AACA,UAAIyoB,gBAAgB,GAAGD,QAAvB,EAAiC;AAC7B,YAAI9kB,MAAM,GAAGykB,QAAQ,CAACrkB,IAAT,CAAc5B,IAAd,EAAoBkkB,IAAI,CAAC5X,SAAL,CAAeia,gBAAf,CAApB,EAAsDR,UAAtD,EAAkEC,WAAlE,CAAb;AACA9B,QAAAA,IAAI,GAAGA,IAAI,CAAC5X,SAAL,CAAe,CAAf,EAAkBia,gBAAlB,IAAsC/kB,MAA7C;AACA8kB,QAAAA,QAAQ,GAAGpC,IAAI,CAAC5X,SAAL,CAAeyZ,UAAU,CAACjoB,MAA1B,EAAkC6R,OAAlC,CAA0CqW,WAA1C,CAAX;AACA,YAAIM,QAAQ,KAAK,CAAC,CAAlB,EAAqBA,QAAQ,IAAIP,UAAU,CAACjoB,MAAvB;AACxB;AACJ;;AAED,QAAIwoB,QAAQ,KAAK,CAAC,CAAlB,EAAqB;AACjB,YAAM,IAAI/pB,KAAJ,CAAU,oCAAV,CAAN;AACA;AACH;;AAED,QAAIuF,GAAG,GAAGoiB,IAAI,CAAC5X,SAAL,CAAeyZ,UAAU,CAACjoB,MAA1B,EAAkCwoB,QAAlC,CAAV;AACA,QAAI1oB,KAAK,GAAGkE,GAAG,CAACjF,KAAJ,CAAUupB,kBAAV,CAAZ;AACA,QAAII,WAAW,GAAG5oB,KAAK,CAACwE,KAAN,EAAlB;AAEApC,IAAAA,IAAI,CAACylB,iBAAD,CAAJ,GAA0B3c,uDAAM,CAAC,EAAD,EAAK9I,IAAI,CAACqlB,oBAAD,CAAT,EAAiCrlB,IAAI,CAACylB,iBAAD,CAArC,CAAhC;;AAlCS,+CAoCQ7nB,KApCR;AAAA;;AAAA;AAoCT,0DAAwB;AAAA,YAAbme,EAAa;;AACpB,wBAAeA,EAAE,CAAClf,KAAH,CAASspB,mBAAT,CAAf;AAAA;AAAA,YAAOhlB,CAAP;AAAA,YAAUD,CAAV;;AACAlB,QAAAA,IAAI,CAACylB,iBAAD,CAAJ,CAAwBtkB,CAAxB,IAA6BD,CAA7B;AACH;AAvCQ;AAAA;AAAA;AAAA;AAAA;;AAyCT,QAAMulB,EAAE,GAAG3kB,GAAG,CAACjF,KAAJ,CAAU,GAAV,EAAeuF,KAAf,GAAuBmI,IAAvB,EAAX,CAzCS,CAyCiC;;AAC1C,QAAMmc,EAAE,GAAGD,EAAE,CAAC5pB,KAAH,CAAS,IAAT,EAAeuF,KAAf,GAAuBmI,IAAvB,EAAX,CA1CS,CA0CiC;;AAC1C,QAAMoc,EAAE,GAAGD,EAAE,CAAC7pB,KAAH,CAAS,GAAT,EAAcuF,KAAd,GAAsBmI,IAAtB,EAAX,CA3CS,CA2CgC;;AACzC,QAAIuB,MAAM,GAAG,yBAAA9L,IAAI,CAACylB,iBAAD,CAAJ,wEAA0BkB,EAA1B,IAAgC,OAAhC,GAA0C,SAAvD;AAEA,QAAI7c,OAAO,GAAG,EAAd;;AACA,QAAIgC,MAAM,IAAIhK,GAAG,CAAC6N,OAAJ,CAAY7D,MAAZ,MAAwB,CAAlC,IACGhK,GAAG,CAAC6N,OAAJ,CAAY,OAAZ,MAAyB,CAD5B,IAEG7N,GAAG,CAAC6N,OAAJ,CAAY,SAAZ,MAA2B,CAFlC,EAEqC;AACjC7F,MAAAA,OAAO,GAAGgC,MAAV;AACH;;AAEDhC,IAAAA,OAAO,IAAI0c,WAAX;AAEA,QAAMtd,IAAI,GAAG,IAAID,+CAAJ,CAASa,OAAT,CAAb;;AAEA,QAAItK,sDAAQ,CAACuK,SAAD,CAAZ,EAAyB;AACrB,yCAA+BzL,MAAM,CAACmI,OAAP,CAAesD,SAAf,CAA/B,qCAA0D;AAArD;AAAA,YAAO5M,IAAP;AAAA,YAAaoE,QAAb;;AACD2H,QAAAA,IAAI,CAACG,WAAL,CAAiBlM,IAAjB,EAAuBoE,QAAvB;AACH;AACJ;;AAED2kB,IAAAA,SAAS,CAAC7jB,IAAV,CAAe/B,kEAAc,CAAC4I,IAAI,CAACQ,GAAL,CAAS1J,IAAI,CAACylB,iBAAD,CAAb,CAAD,CAA7B;AAEAvB,IAAAA,IAAI,GAAGA,IAAI,CAAC5X,SAAL,CAAega,QAAQ,GAAGN,WAAW,CAACloB,MAAtC,CAAP;AAEH;;AAED,SAAOooB,SAAS,CAAC1jB,IAAV,CAAe,EAAf,CAAP;AACH;;AAED/F,gEAAiB,CAAC,cAAD,EAAiB4nB,SAAjB,CAAjB;;;;;;;;;;;;;;;;;AC7Wa;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;;IACMgD;;;;;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,aAAIpL,KAAJ,EAAW;AACPpY,MAAAA,oEAAgB,CAACoY,KAAD,EAAQ8K,kDAAR,CAAhB;;AAEA,UAAI,KAAKU,QAAL,GAAgBxL,KAAK,CAACyL,WAAN,EAApB,EAAyC;AACrC,eAAO,KAAP;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAYD,QAAZ,EAAsB;AAClBvjB,MAAAA,mEAAe,CAACujB,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;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP,WAAKS,WAAL,CAAiBR,6CAAjB;AACA,aAAO,IAAP;AACH;;;;AAGD;AACJ;AACA;AACA;AACA;AACA;AACI,sBAAS;AACL,WAAKQ,WAAL,CAAiBN,2CAAjB;AACA,aAAO,IAAP;AACH;;;;EA7IiBnpB;;AAmJtBtB,gEAAiB,CAAC,iBAAD,EAAoB4qB,OAApB,CAAjB;;;;;;;;;;;;;;;ACtLa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;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;;IACMT;;;;;AACF;AACJ;AACA;AACA;AACA;AACI,oBAAYU,QAAZ,EAA+B;AAAA;;AAAA;;AAC3B;AACAvjB,IAAAA,mEAAe,CAACujB,QAAD,CAAf;AAEA,UAAKA,QAAL,GAAgBA,QAAhB;;AAJ2B,sCAAN1d,IAAM;AAANA,MAAAA,IAAM;AAAA;;AAK3B,UAAKb,SAAL,GAAiBa,IAAjB;AAL2B;AAM9B;AAED;AACJ;AACA;AACA;;;;;WACI,uBAAc;AACV,aAAO,KAAK0d,QAAZ;AACH;AAED;AACJ;AACA;AACA;;;;WACI,wBAAe;AACX,aAAO,KAAKve,SAAZ;AACH;;;;EA5BkBhL;;AAgCvBtB,gEAAiB,CAAC,iBAAD,EAAoBmqB,QAApB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;AClEa;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,GAAG,GAAG,GAAZ;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMM,KAAK,GAAG,EAAd;AACA;AACA;AACA;AACA;AACA;;AACA,IAAML,KAAK,GAAG,EAAd;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMG,IAAI,GAAG,EAAb;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMG,IAAI,GAAG,CAAb;AACA;AACA;AACA;AACA;AACA;;AACA,IAAML,KAAK,GAAG,CAAd;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,KAAK,GAAG,CAAd;AACA;AACA;AACA;AACA;AACA;;AACA,IAAME,GAAG,GAAG,CAAZ;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMO;;;;;AAEF;AACJ;AACA;AACI,oBAAc;AAAA;;AAAA;;AACV;AACA,UAAK1Z,OAAL,GAAe,IAAInH,GAAJ,EAAf;AAFU;AAGb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;WACI,oBAAWmH,OAAX,EAAoB;AAChBtK,MAAAA,kEAAc,CAACsK,OAAD,CAAd;;AACA,UAAI,EAAEA,OAAO,YAAYsZ,wDAArB,CAAJ,EAAmC;AAC/B,cAAM,IAAI9qB,KAAJ,CAAU,4CAAV,CAAN;AACH;;AAED,WAAKwR,OAAL,CAAac,GAAb,CAAiBd,OAAjB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,uBAAcA,OAAd,EAAuB;AACnBtK,MAAAA,kEAAc,CAACsK,OAAD,CAAd;;AACA,UAAI,EAAEA,OAAO,YAAYsZ,wDAArB,CAAJ,EAAmC;AAC/B,cAAM,IAAI9qB,KAAJ,CAAU,4CAAV,CAAN;AACH;;AAED,WAAKwR,OAAL,CAAapG,MAAb,CAAoBoG,OAApB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,oBAAW;AACP2Z,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwBkd,KAAxB,oCAAkCpe,SAAlC;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP2e,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwB6c,KAAxB,oCAAkC/d,SAAlC;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,uBAAU;AACN2e,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwBgd,IAAxB,oCAAiCle,SAAjC;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,uBAAU;AACN2e,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwBmd,IAAxB,oCAAiCre,SAAjC;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP2e,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwB8c,KAAxB,oCAAkChe,SAAlC;AACA,aAAO,IAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,wBAAW;AACP2e,MAAAA,UAAU,CAACzd,KAAX,CAAiB,IAAjB,GAAwB+c,KAAxB,oCAAkCje,SAAlC;AACA,aAAO,IAAP;AACH;;;;AAGD;AACJ;AACA;AACA;AACA;AACA;AACI,sBAAS4e,KAAT,EAAgB;AACZ5jB,MAAAA,mEAAe,CAAC4jB,KAAD,CAAf;AAEA,UAAIA,KAAK,KAAKd,GAAd,EAAmB,OAAO,KAAP;AACnB,UAAIc,KAAK,KAAKR,KAAd,EAAqB,OAAO,OAAP;AACrB,UAAIQ,KAAK,KAAKb,KAAd,EAAqB,OAAO,OAAP;AACrB,UAAIa,KAAK,KAAKV,IAAd,EAAoB,OAAO,MAAP;AACpB,UAAIU,KAAK,KAAKP,IAAd,EAAoB,OAAO,MAAP;AACpB,UAAIO,KAAK,KAAKZ,KAAd,EAAqB,OAAO,OAAP;AACrB,UAAIY,KAAK,KAAKX,KAAd,EAAqB,OAAO,OAAP;AACrB,UAAIW,KAAK,KAAKT,GAAd,EAAmB,OAAO,KAAP;AAEnB,aAAO,SAAP;AACH;;;;AAED;AACJ;AACA;AACA;AACA;AACA;AACI,sBAASU,KAAT,EAAgB;AACZtnB,MAAAA,kEAAc,CAACsnB,KAAD,CAAd;AAEA,UAAIA,KAAK,KAAK,KAAd,EAAqB,OAAOf,GAAP;AACrB,UAAIe,KAAK,KAAK,OAAd,EAAuB,OAAOT,KAAP;AACvB,UAAIS,KAAK,KAAK,OAAd,EAAuB,OAAOd,KAAP;AACvB,UAAIc,KAAK,KAAK,MAAd,EAAsB,OAAOX,IAAP;AACtB,UAAIW,KAAK,KAAK,MAAd,EAAsB,OAAOR,IAAP;AACtB,UAAIQ,KAAK,KAAK,OAAd,EAAuB,OAAOb,KAAP;AACvB,UAAIa,KAAK,KAAK,OAAd,EAAuB,OAAOZ,KAAP;AACvB,UAAIY,KAAK,KAAK,KAAd,EAAqB,OAAOV,GAAP;AAErB,aAAO,CAAP;AACH;;;;EAxKgBnpB;;AA6KrBtB,gEAAiB,CAAC,iBAAD,EAAoBgrB,MAApB,CAAjB;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,UAAT,CAAoBJ,QAApB,EAAuC;AACnC,MAAIO,MAAM,GAAG,IAAb;;AADmC,oCAANje,IAAM;AAANA,IAAAA,IAAM;AAAA;;AAAA,6CAGfie,MAAM,CAAC9Z,OAHQ;AAAA;;AAAA;AAGnC,wDAAoC;AAAA,UAA3BA,OAA2B;AAChCA,MAAAA,OAAO,CAAClC,GAAR,CAAY,IAAI+a,0DAAJ,CAAaU,QAAb,EAAuB1d,IAAvB,CAAZ;AACH;AALkC;AAAA;AAAA;AAAA;AAAA;;AAOnC,SAAOie,MAAP;AAEH;;;;;;;;;;;;;;;;ACvRY;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;;IACMC;;;;;AACF,4BAAc;AAAA;;AAAA;AAEb;AAGD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,aAAIhM,KAAJ,EAAW;AACP,kFAAcA,KAAd,GAAsB;AAClB,YAAIrR,OAAO,GAAG9E,iEAAe,CAAC,SAAD,CAA7B;AACA,YAAI,CAAC8E,OAAL,EAAc,OAAO,KAAP;AACdA,QAAAA,OAAO,CAACoB,GAAR,CAAYiQ,KAAK,CAAC1e,QAAN,EAAZ;AACA,eAAO,IAAP;AACH;;AAED,aAAO,KAAP;AACH;;;;EAxBwBiqB;;AA6B7B5qB,gEAAiB,CAAC,yBAAD,EAA4BqrB,cAA5B,CAAjB;;;;;;;;;;;;;;AChEa;AAEb;AACA;AACA;;AAEA;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,SAASC,MAAT,CAAgBC,GAAhB,EAAqBC,GAArB,EAA0B;AAEtB,MAAID,GAAG,KAAK1rB,SAAZ,EAAuB;AACnB0rB,IAAAA,GAAG,GAAG,CAAN;AACH;;AACD,MAAIC,GAAG,KAAK3rB,SAAZ,EAAuB;AACnB2rB,IAAAA,GAAG,GAAGC,GAAN;AACH;;AAED,MAAID,GAAG,GAAGD,GAAV,EAAe;AACX,UAAM,IAAIzrB,KAAJ,CAAU,8BAAV,CAAN;AACH;;AAED,SAAO4rB,IAAI,CAACC,KAAL,CAAWC,MAAM,CAACL,GAAD,EAAMC,GAAN,CAAjB,CAAP;AAEH;AAED;AACA;AACA;AACA;;;AACA,IAAIC,GAAG,GAAG,UAAV;;AAGAC,IAAI,CAACG,IAAL,GAAYH,IAAI,CAACG,IAAL,IAAa,UAAU3kB,CAAV,EAAa;AAClC,SAAOwkB,IAAI,CAACtc,GAAL,CAASlI,CAAT,IAAcwkB,IAAI,CAACtc,GAAL,CAAS,CAAT,CAArB;AACH,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwc,MAAT,CAAgBL,GAAhB,EAAqBC,GAArB,EAA0B;AACtB,MAAIM,KAAJ;AACA,MAAInjB,eAAe,GAAGpB,2DAAS,EAA/B;AAEAukB,EAAAA,KAAK,GAAG,CAAAnjB,eAAe,SAAf,IAAAA,eAAe,WAAf,YAAAA,eAAe,CAAG,QAAH,CAAf,MAA+BA,eAA/B,aAA+BA,eAA/B,uBAA+BA,eAAe,CAAG,UAAH,CAA9C,MAAgEA,eAAhE,aAAgEA,eAAhE,uBAAgEA,eAAe,CAAG,QAAH,CAA/E,KAA+F9I,SAAvG;;AAEA,MAAI,OAAOisB,KAAP,KAAiB,WAArB,EAAkC;AAC9B,UAAM,IAAIhsB,KAAJ,CAAU,eAAV,CAAN;AACH;;AAED,MAAIisB,IAAI,GAAG,CAAX;AACA,MAAMC,KAAK,GAAGR,GAAG,GAAGD,GAApB;;AACA,MAAIS,KAAK,GAAG,CAAZ,EAAe;AACX,UAAO,IAAIlsB,KAAJ,CAAU,sDAAV,CAAP;AACH;;AAED,MAAMmsB,UAAU,GAAGP,IAAI,CAACQ,IAAL,CAAUR,IAAI,CAACG,IAAL,CAAUG,KAAV,CAAV,CAAnB;;AACA,MAAIC,UAAU,GAAG,EAAjB,EAAqB;AACjB,UAAO,IAAInsB,KAAJ,CAAU,iDAAV,CAAP;AACH;;AACD,MAAMqsB,WAAW,GAAGT,IAAI,CAACQ,IAAL,CAAUD,UAAU,GAAG,CAAvB,CAApB;AACA,MAAMG,IAAI,GAAGV,IAAI,CAACW,GAAL,CAAS,CAAT,EAAYJ,UAAZ,IAA0B,CAAvC;AAEA,MAAMK,SAAS,GAAG,IAAIC,UAAJ,CAAeJ,WAAf,CAAlB;AACAL,EAAAA,KAAK,CAACU,eAAN,CAAsBF,SAAtB;AAEA,MAAI3e,CAAC,GAAG,CAACwe,WAAW,GAAG,CAAf,IAAoB,CAA5B;;AACA,OAAK,IAAI9rB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8rB,WAApB,EAAiC9rB,CAAC,EAAlC,EAAsC;AAClC0rB,IAAAA,IAAI,IAAIO,SAAS,CAACjsB,CAAD,CAAT,GAAeqrB,IAAI,CAACW,GAAL,CAAS,CAAT,EAAY1e,CAAZ,CAAvB;AACAA,IAAAA,CAAC,IAAI,CAAL;AACH;;AAEDoe,EAAAA,IAAI,GAAGA,IAAI,GAAGK,IAAd;;AAEA,MAAIL,IAAI,IAAIC,KAAZ,EAAmB;AACf,WAAOJ,MAAM,CAACL,GAAD,EAAMC,GAAN,CAAb;AACH;;AAED,MAAIO,IAAI,GAAGR,GAAX,EAAgB;AACZQ,IAAAA,IAAI,IAAIR,GAAR;AACH;;AAED,SAAOQ,IAAP;AAEH;;AAED/rB,gEAAiB,CAAC,cAAD,EAAiBsrB,MAAjB,CAAjB;;;;;;;;;;;;;;;;AChIa;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAItb,eAAe,GAAG,CAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMyc;;;;;AAEF;AACJ;AACA;AACI,sBAAc;AAAA;;AAAA;;AACV;AAEAzc,IAAAA,eAAe,IAAI,CAAnB;AAEA,UAAKE,EAAL,GAAU3I,qDAAS,GAAG2H,IAAZ,CAAiBoc,uDAAM,CAAC,CAAD,EAAI,KAAJ,CAAvB,EACLzd,OADK,CACG,IADH,EACS,EADT;AAEN;AAFM,KAGLA,OAHK,CAGG,SAHH,EAGc,GAHd,IAGqBmC,eAH/B;AALU;AASb;;;EAdkB9C;;AAkBvBlN,gEAAiB,CAAC,eAAD,EAAkBysB,QAAlB,CAAjB;;;;;;;;;;;;;;;AC1Da;;;;;;;;;;;;;;;;;;;;;;;;AAEb;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;;IACMC;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAYC,KAAZ,EAAmBC,KAAnB,EAA0BC,KAA1B,EAAiC;AAAA;;AAAA;;AAC7B;;AAEA,QAAI,OAAOF,KAAP,KAAiB,QAAjB,IAA6BC,KAAK,KAAK/sB,SAAvC,IAAoDgtB,KAAK,KAAKhtB,SAAlE,EAA6E;AAEzE,UAAIsB,KAAK,GAAGwrB,KAAK,CAAChsB,QAAN,GAAiBP,KAAjB,CAAuB,GAAvB,CAAZ;AACAusB,MAAAA,KAAK,GAAGtiB,QAAQ,CAAClJ,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACAyrB,MAAAA,KAAK,GAAGviB,QAAQ,CAAClJ,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACA0rB,MAAAA,KAAK,GAAGxiB,QAAQ,CAAClJ,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACH;;AAED,QAAIwrB,KAAK,KAAK9sB,SAAd,EAAyB;AACrB,YAAO,IAAIC,KAAJ,CAAU,4BAAV,CAAP;AACH;;AAED,QAAI8sB,KAAK,KAAK/sB,SAAd,EAAyB;AACrB+sB,MAAAA,KAAK,GAAG,CAAR;AACH;;AAED,QAAIC,KAAK,KAAKhtB,SAAd,EAAyB;AACrBgtB,MAAAA,KAAK,GAAG,CAAR;AACH;;AAED,UAAKF,KAAL,GAAatiB,QAAQ,CAACsiB,KAAD,CAArB;AACA,UAAKC,KAAL,GAAaviB,QAAQ,CAACuiB,KAAD,CAArB;AACA,UAAKC,KAAL,GAAaxiB,QAAQ,CAACwiB,KAAD,CAArB;;AAEA,QAAIC,KAAK,CAAC,MAAKH,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI7sB,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAIgtB,KAAK,CAAC,MAAKF,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI9sB,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAIgtB,KAAK,CAAC,MAAKD,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI/sB,KAAJ,CAAU,uBAAV,CAAP;AACH;;AArC4B;AAuChC;AAED;AACJ;AACA;AACA;;;;;WACI,oBAAW;AACP,aAAO,KAAK6sB,KAAL,GAAa,GAAb,GAAmB,KAAKC,KAAxB,GAAgC,GAAhC,GAAsC,KAAKC,KAAlD;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,mBAAUE,OAAV,EAAmB;AAEf,UAAIA,OAAO,YAAYL,OAAvB,EAAgC;AAC5BK,QAAAA,OAAO,GAAGA,OAAO,CAACpsB,QAAR,EAAV;AACH;;AAED,UAAI,OAAOosB,OAAP,KAAmB,QAAvB,EAAiC;AAC7B,cAAO,IAAIjtB,KAAJ,CAAU,gBAAV,CAAP;AACH;;AAED,UAAIitB,OAAO,KAAK,KAAKpsB,QAAL,EAAhB,EAAiC;AAC7B,eAAO,CAAP;AACH;;AAED,UAAI6C,CAAC,GAAG,CAAC,KAAKmpB,KAAN,EAAa,KAAKC,KAAlB,EAAyB,KAAKC,KAA9B,CAAR;AACA,UAAIppB,CAAC,GAAGspB,OAAO,CAAC3sB,KAAR,CAAc,GAAd,CAAR;AACA,UAAIuH,GAAG,GAAG+jB,IAAI,CAACF,GAAL,CAAShoB,CAAC,CAACnC,MAAX,EAAmBoC,CAAC,CAACpC,MAArB,CAAV;;AAEA,WAAK,IAAIhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsH,GAApB,EAAyBtH,CAAC,IAAI,CAA9B,EAAiC;AAC7B,YAAKmD,CAAC,CAACnD,CAAD,CAAD,IAAQ,CAACoD,CAAC,CAACpD,CAAD,CAAV,IAAiBgK,QAAQ,CAAC7G,CAAC,CAACnD,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0CgK,QAAQ,CAAC7G,CAAC,CAACnD,CAAD,CAAF,CAAR,GAAiBgK,QAAQ,CAAC5G,CAAC,CAACpD,CAAD,CAAF,CAAvE,EAAgF;AAC5E,iBAAO,CAAP;AACH,SAFD,MAEO,IAAKoD,CAAC,CAACpD,CAAD,CAAD,IAAQ,CAACmD,CAAC,CAACnD,CAAD,CAAV,IAAiBgK,QAAQ,CAAC5G,CAAC,CAACpD,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0CgK,QAAQ,CAAC7G,CAAC,CAACnD,CAAD,CAAF,CAAR,GAAiBgK,QAAQ,CAAC5G,CAAC,CAACpD,CAAD,CAAF,CAAvE,EAAgF;AACnF,iBAAO,CAAC,CAAR;AACH;AACJ;;AAED,aAAO,CAAP;AACH;;;;EA9FiBiB;;AAkGtBtB,gEAAiB,CAAC,eAAD,EAAkB0sB,OAAlB,CAAjB;AAGA,IAAIM,cAAJ;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,SAASC,UAAT,GAAsB;AAClB,MAAID,cAAc,YAAYN,OAA9B,EAAuC;AACnC,WAAOM,cAAP;AACH;AACD;;;AACAA,EAAAA,cAAc,GAAG,IAAIN,OAAJ,CAAY,QAAZ,CAAjB;AACA;;AAEA,SAAOM,cAAP;AAEH;;AAEDhtB,gEAAiB,CAAC,SAAD,EAAYitB,UAAZ,CAAjB;;;;;;;;;;;;;;;ACzLa;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,sBAAYpoB,QAAZ,EAAsB;AAAA;;AAAA;;AAClB;;AAEA,QAAI5B,wDAAU,CAAC4B,QAAD,CAAd,EAA0B;AACtB,YAAKqoB,OAAL,GAAeroB,QAAf;AACH,KAFD,MAEO,IAAIA,QAAQ,KAAKjF,SAAjB,EAA4B;AAC/B,YAAM,IAAIoC,SAAJ,CAAc,kBAAd,CAAN;AACH,KAFM,MAEA;AACH;;AAEA;AACZ;AACA;AACA;AACA;AACA;AACY,YAAKkrB,OAAL,GAAe,UAAU3pB,CAAV,EAAaC,CAAb,EAAgB;AAE3B,YAAI,QAAOD,CAAP,cAAoBC,CAApB,CAAJ,EAA2B;AACvB,gBAAM,IAAIxB,SAAJ,CAAc,wBAAd,EAAwC,qBAAxC,CAAN;AACH;;AAED,YAAIuB,CAAC,KAAKC,CAAV,EAAa;AACT,iBAAO,CAAP;AACH;;AACD,eAAOD,CAAC,GAAGC,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAApB;AACH,OAVD;AAWH;;AA3BiB;AA6BrB;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,mBAAU;AACN,UAAM2pB,QAAQ,GAAG,KAAKD,OAAtB;;AACA,WAAKA,OAAL,GAAe,UAAC3pB,CAAD,EAAIC,CAAJ;AAAA,eAAU2pB,QAAQ,CAAC3pB,CAAD,EAAID,CAAJ,CAAlB;AAAA,OAAf;;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAMA,CAAN,EAASC,CAAT,EAAY;AACR,aAAO,KAAK0pB,OAAL,CAAa3pB,CAAb,EAAgBC,CAAhB,MAAuB,CAA9B;AACH;AAGD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAYD,CAAZ,EAAeC,CAAf,EAAkB;AACd,aAAO,KAAK0pB,OAAL,CAAa3pB,CAAb,EAAgBC,CAAhB,IAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,4BAAmBD,CAAnB,EAAsBC,CAAtB,EAAyB;AACrB,aAAO,KAAK4pB,WAAL,CAAiB7pB,CAAjB,EAAoBC,CAApB,KAA0B,KAAK6pB,KAAL,CAAW9pB,CAAX,EAAcC,CAAd,CAAjC;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,yBAAgBD,CAAhB,EAAmBC,CAAnB,EAAsB;AAClB,aAAO,KAAK8pB,QAAL,CAAc/pB,CAAd,EAAiBC,CAAjB,KAAuB,KAAK6pB,KAAL,CAAW9pB,CAAX,EAAcC,CAAd,CAA9B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAASD,CAAT,EAAYC,CAAZ,EAAe;AACX,aAAO,KAAK0pB,OAAL,CAAa3pB,CAAb,EAAgBC,CAAhB,IAAqB,CAA5B;AACH;;;;EA9GoBnC;AAoHzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;;AACAtB,gEAAiB,CAAC,cAAD,EAAiBktB,UAAjB,CAAjB;;;;;;;;;;;;;;ACxMa;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,SAASM,UAAT,CAAoBhkB,MAApB,EAA4B;AAExBxC,EAAAA,kEAAc,CAACwC,MAAD,CAAd,CAFwB,CAIxB;;AACA,MAAIikB,SAAS,GAAG5rB,MAAM,CAAC6rB,mBAAP,CAA2BlkB,MAA3B,CAAhB,CALwB,CAOxB;;AAPwB,6CAQPikB,SARO;AAAA;;AAAA;AAQxB,wDAA4B;AAAA,UAAnB/sB,IAAmB;AACxB,UAAIc,KAAK,GAAGgI,MAAM,CAAC9I,IAAD,CAAlB;AAEA8I,MAAAA,MAAM,CAAC9I,IAAD,CAAN,GAAgBc,KAAK,IAAI,QAAOA,KAAP,MAAiB,QAA3B,GACXgsB,UAAU,CAAChsB,KAAD,CADC,GACSA,KADxB;AAEH;AAbuB;AAAA;AAAA;AAAA;AAAA;;AAexB,SAAOK,MAAM,CAAC8rB,MAAP,CAAcnkB,MAAd,CAAP;AACH;;AAEDxJ,gEAAiB,CAAC,cAAD,EAAiBwtB,UAAjB,CAAjB;;;;;;UCvDA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AAEa;;AAEb;AACA;AACA;AACA;AACA;CAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,IAAII,QAAJ;;AACA,IAAI;AACAA,EAAAA,QAAQ,GAAGruB,yEAAA,CAA8B,qBAA9B,CAAX;AACH,CAFD,CAEE,OAAO2B,CAAP,EAAU,CAEX;;AAED,IAAI,CAAC0sB,QAAL,EAAeA,QAAQ,GAAG,SAAX;AAEfruB,mEAAA,GAA0BquB,QAA1B,IAAsCruB,mDAAtC","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/types/typeof.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/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/util/trimspaces.js","webpack:///../../../../packages/monster/source/dom/events.js","webpack:///../../../../packages/monster/source/dom/util.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 * @private\n * @type {symbol}\n * @memberOf Monster\n * @since 1.24.0\n */\nconst internalSymbol = Symbol('internalData');\n\n/**\n * @private\n * @type {symbol}\n * @memberOf Monster\n * @since 1.25.0\n */\nconst internalStateSymbol = Symbol('state');\n\n\nexport {\n Monster,\n internalSymbol,\n internalStateSymbol\n}\n\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.29.0/dist/monster.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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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 * @summary The abstract constraint\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/base.js';\n * 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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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 * @summary The abstract operator constraint\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.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.29.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.29.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/constraints/invalid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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 * @summary A and operator constraint\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.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.29.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.29.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 * @summary A constraint that always invalid\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 * Constraints are used to define conditions that must be met by the value of a variable.\n * \n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.js';\n * 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.29.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.29.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 * @summary A constraint to check if a value is an array\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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isIterable(null) // ↦ false\n * Monster.Types.isIterable('hello') // ↦ true\n * 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.29.0/dist/modules/types/is.js';\n * isIterable(null) // ↦ false\n * isIterable('hello') // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isPrimitive('2') // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isPrimitive('2')) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isSymbol('2') // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isSymbol(Symbol('a'))) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isBoolean('2') // ↦ false\n * Monster.Types.isBoolean([]) // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isBoolean('2')) // ↦ false\n * isBoolean([])) // ↦ false\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isString('2') // ↦ true\n * 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.29.0/dist/modules/types/is.js';\n * isString('2')) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isObject('2') // ↦ false\n * Monster.Types.isObject([]) // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isObject('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names.\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.29.0/dist/monster.js';\n * Monster.Types.isInstance('2') // ↦ false\n * Monster.Types.isInstance([]) // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isInstance('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names. \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.29.0/dist/monster.js';\n * Monster.Types.isArray('2') // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isArray('2')) // ↦ false\n * 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 * @see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n */\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\n/**\n * Checks whether the value passed is a function\n * \n * This method is used in the library to have consistent names. \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.29.0/dist/monster.js';\n * Monster.Types.isFunction(()=>{}) // ↦ true\n * Monster.Types.isFunction('2') // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isFunction(()=>{}) // ↦ true\n * isFunction('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names. \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.29.0/dist/monster.js';\n * Monster.Types.isInteger(()=>{}) // ↦ true\n * Monster.Types.isInteger('2') // ↦ false\n * 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.29.0/dist/modules/types/is.js';\n * isInteger(()=>{}) // ↦ true\n * isInteger('2')) // ↦ false\n * 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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.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.29.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.29.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 * @summary A constraint to check if a value is an object\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.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.29.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.29.0/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/constraints/invalid.js';\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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 * @summary A or operator \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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.0/dist/monster.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.29.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.29.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 * @summary A constraint that always valid\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.29.0/dist/monster.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.29.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.29.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 return assembleParts(subject, selector, filter, function (v, k, m) {\n k = build(v, keyTemplate, k);\n v = build(v, valueTemplate);\n this.set(k, v);\n });\n\n}\n\n/**\n * @private\n * @param {*} subject\n * @param {string|Monster.Data~exampleSelectorCallback} selector\n * @param {Monster.Data~exampleFilterCallback} [filter]\n * @param {function} callback\n * @return {Map}\n * @throws {TypeError} selector is neither a string nor a function\n */\nfunction assembleParts(subject, selector, filter, callback) {\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('selector is neither a string nor a function')\n }\n\n if (!(map instanceof Map)) {\n return result;\n }\n\n map.forEach((v, k, m) => {\n if (isFunction(filter)) {\n if (filter.call(m, v, k) !== true) return;\n }\n\n callback.call(result, v, k, m);\n\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\n try {\n map = finder.getVia(currentPath.join(DELIMITER));\n } catch (e) {\n let a = e;\n map = new Map();\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) && parentMap !== undefined) {\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.29.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, assembleParts}\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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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';\nimport {typeOf} from \"../types/typeof.js\";\nimport {validateObject} from \"../types/validate.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/util/clone.js';\n * clone({})\n * </script>\n * ```\n *\n * @param {*} obj object to be cloned\n * @returns {*}\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 \n validateObject(obj);\n \n const constructor = obj?.['constructor'];\n\n /** Object has clone method */\n if(typeOf(constructor)==='function') {\n const prototype = constructor?.prototype;\n if(typeof prototype==='object') {\n if(prototype.hasOwnProperty('getClone')&& typeOf(obj.getClone) === 'function') {\n return obj.getClone(); \n }\n }\n }\n\n let 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 (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.29.0/dist/monster.js';\n * Monster.Types.getGlobalObject('document') \n * // ↦ { }\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.29.0/dist/modules/types/global.js';\n * getGlobalObject('document') \n * // ↦ { }\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.29.0/dist/monster.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.29.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 * @return {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 */\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.29.0/dist/monster.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.29.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.29.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 {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.29.0/dist/monster.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.29.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.29.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.29.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\n if (check === true) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(subject), current);\n\n if (!subject.hasOwnProperty(current) && descriptor === undefined) {\n throw Error('unknown value');\n }\n\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.29.0/dist/monster.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.29.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/data/diff.js';\n * Diff(a, b)\n * </script>\n * ```\n *\n * @example\n *\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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 */\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/data/extend.js';\n * 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} unsupported 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('unsupported 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)&&typeOf(v)==='object') || isArray(v)) {\n\n if (o[k] === undefined) {\n if (isArray(v)) {\n o[k] = [];\n } else {\n o[k] = {};\n }\n } else {\n if (typeOf(o[k]) !== typeOf(v)) {\n throw new Error(\"type mismatch: \" + JSON.stringify(o[k]) + \"(\" + typeOf(o[k]) + \") != \" + JSON.stringify(v) + \"(\" + typeOf(v) + \")\");\n }\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/data/pipe.js';\n * 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.29.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 \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, getGlobalObject} 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/data/transformer.js';\n * 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 * | to-base64 | | base64, btob | Converts the value to base64 |\n * | from-base64 | | atob | Converts the value from 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 | value:type | ?? | If the value is undefined the first argument is returned, otherwise the value. The third optional parameter specifies the desired type. If no type is specified, string is used. Valid types are bool, string, int, float, undefined and object. An object default value must be specified as a base64 encoded json string. (since 1.12.0) |\n * | debug | | | the passed value is output (console) and returned |\n * | empty | | | Return empty String \"\" |\n * | first-key | default | | Can be applied to objects and returns the value of the first key. All keys of the object are fetched and sorted. (since 1.23.0) |\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'. If you want to have a space, you also have to write \\\\ in front of the space. |\n * | index | key:default | property, key | Fetches a value from an object, an array, a map or a set |\n * | last-key | default | | Can be applied to objects and returns the value of the last key. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | length | | count | Length of the string or entries of an array or object |\n * | nop | | | Do nothing |\n * | nth-key | index:default | | Can be applied to objects and returns the value of the nth key. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | nth-last-key | index:default | | Can be applied to objects and returns the value of the nth key from behind. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | path | path | | The access to an object is done via a Pathfinder object |\n * | path-exists | path | | Check if the specified path is available in the value (since 1.24.0) |\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.29.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 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 escaped\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 * @throws {Error} missing key parameter\n */\nfunction transform(value) {\n\n const console = getGlobalObject('console');\n\n let args = clone(this.args);\n let key, defaultValue;\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 'to-base64':\n case 'btoa':\n case 'base64':\n return btoa(convertToString(value));\n\n case 'atob':\n case 'from-base64':\n return atob(convertToString(value));\n\n case 'empty':\n return '';\n\n case 'undefined':\n return undefined;\n\n case 'debug':\n\n if (isObject(console)) {\n console.log(value);\n }\n\n return value;\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 'first-key':\n case 'last-key':\n case 'nth-last-key':\n case 'nth-key':\n\n if (!isObject(value)) {\n throw new Error(\"type not supported\")\n }\n\n const keys = Object.keys(value).sort()\n\n if (this.command === 'first-key') {\n key = 0;\n } else if (this.command === 'last-key') {\n key = keys.length - 1;\n } else {\n\n key = validateInteger(parseInt(args.shift()));\n\n if (this.command === 'nth-last-key') {\n key = keys.length - key - 1;\n }\n }\n\n defaultValue = (args.shift() || '');\n\n let useKey = keys?.[key];\n\n if (value?.[useKey]) {\n return value?.[useKey];\n }\n\n return defaultValue;\n\n\n case 'key':\n case 'property':\n case 'index':\n\n key = args.shift() || undefined;\n\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n defaultValue = (args.shift() || undefined);\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-exists':\n\n key = args.shift();\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n return new Pathfinder(value).exists(key);\n\n case 'path':\n\n key = args.shift();\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n let pf = new Pathfinder(value);\n\n if (!pf.exists(key)) {\n return undefined;\n }\n\n return pf.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 '??':\n case 'default':\n if (value !== undefined && value !== null) {\n return value;\n }\n\n defaultValue = args.shift();\n let defaultType = args.shift();\n if (defaultType === undefined) {\n defaultType = 'string';\n }\n\n switch (defaultType) {\n case 'int':\n case 'integer':\n return parseInt(defaultValue);\n case 'float':\n return parseFloat(defaultValue);\n case 'undefined':\n return undefined\n case 'bool':\n case 'boolean':\n defaultValue = defaultValue.toLowerCase()\n return ((defaultValue !== 'undefined' && defaultValue !== '' && defaultValue !== 'off' && defaultValue !== 'false' && defaultValue !== 'false') || defaultValue === 'on' || defaultValue === 'true' || defaultValue === 'true');\n case 'string':\n return \"\" + defaultValue;\n case \"object\":\n return JSON.parse(atob(defaultValue));\n }\n\n throw new Error(\"type not supported\")\n\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.29.0/dist/monster.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.29.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 * @summary Automatic generation of ids\n */\nclass ID extends Base {\n\n /**\n * create new id with prefix\n *\n * @param {string} prefix\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.29.0/dist/monster.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.29.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\";\nimport {extend} from \"../data/extend.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/proxyobserver.js';\n * 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.29.0/dist/modules/types/proxyobserver.js';\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/types/observer.js';\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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 * @since 1.24.0\n * @param {Object} obj\n * @return {Monster.Types.ProxyObserver}\n */\n setSubject(obj) {\n\n let i, k = Object.keys(this.subject);\n for (i = 0; i < k.length; i++) {\n delete this.subject[k[i]];\n }\n\n this.subject = extend(this.subject, obj);\n return this;\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 * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * new Monster.Types.Observer()\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/types/observer.js';\n * new Observer()\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 * new Observer(()=>{\n * // this is not subject\n * })\n *\n * new Observer(function() {\n * // this is subject\n * })\n * ```\n *\n * Additional arguments can be passed to the callback. To do this, simply specify them.\n *\n * ```\n * Observer(function(a, b, c) {\n * console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\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.29.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/tokenlist.js';\n * 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 * typeof new TokenList(\"myclass row\")[Symbol.iterator]; \n * // ↦ \"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\", \"types/tokenlist.js\");\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\", \"types/tokenlist.js\");\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/uniquequeue.js';\n * 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 create the instance 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.29.0/dist/monster.js';\n * 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 {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/types/queue.js';\n * new Queue()\n * </script>\n * ```\n *\n * @example\n *\n * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.29.0/dist/monster.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.29.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 let 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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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 * This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.\n *\n * ```html\n * <div data-my-attribute=\"2\" id=\"2\">\n * <div id=\"1\"></div>\n * </div>\n * ```\n *\n * ```javascript\n * // if no value is specified (undefined), then only the attribute is checked.\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute'); // ↦ node with id 2\n * findClosestByAttribute(document.getElementById('2'),'data-my-attribute'); // ↦ node with id 2\n *\n * // if a value is specified, for example an empty string, then the name and the value are checked.\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute', ''); // ↦ undefined\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute', '2'); // ↦ node with id 2\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.29.0/dist/monster.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.29.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 * @summary find closest node\n */\nfunction findClosestByAttribute(element, key, value) {\n validateInstance(element, getGlobalFunction('HTMLElement'));\n\n if (element.hasAttribute(key)) {\n if (value === undefined) {\n return element;\n }\n\n if (element.getAttribute(key) === value) {\n return element;\n }\n\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/**\n * This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.\n *\n * ```html\n * <div class=\"myclass\" id=\"2\">\n * <div id=\"1\"></div>\n * </div>\n * ```\n *\n * ```javascript\n * // if no value is specified (undefined), then only the attribute is checked.\n * findClosestByClass(document.getElementById('1'),'myclass'); // ↦ node with id 2\n * findClosestByClass(document.getElementById('2'),'myclass'); // ↦ node with id 2\n * ```\n *\n * You can call the method via the monster namespace `new Monster.DOM.findClosestByClass()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * Monster.DOM.findClosestByClass();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findClosestByClass} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/attributes.js';\n * findClosestByClass();\n * </script>\n * ```\n *\n * @since 1.27.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} className\n * @return {HTMLElement|undefined}\n * @summary find closest node\n */\nfunction findClosestByClass(element, className) {\n validateInstance(element, getGlobalFunction('HTMLElement'));\n\n if (element?.classList?.contains(validateString(className))) {\n return element;\n }\n\n let result = element.closest('.' + className);\n if (result instanceof HTMLElement) {\n return result;\n }\n \n return undefined;\n}\n\n// exports\nassignToNamespace('Monster.DOM', findClosestByClass, 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 findClosestByClass\n}\n","'use strict';\n\nimport {Monster} from '../namespace.js';\n/**\n * @author schukai GmbH\n */\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 * @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 * @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.27.1\n */\nconst ATTRIBUTE_UPDATER_SELECT_THIS = ATTRIBUTE_PREFIX + 'select-this';\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.27.0\n */\nconst ATTRIBUTE_TEMPLATE_PREFIX = ATTRIBUTE_PREFIX + 'template-prefix';\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.24.0\n */\nconst ATTRIBUTE_DISABLED = 'disabled';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.24.0\n */\nconst ATTRIBUTE_VALUE = 'value';\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.24.0\n */\nconst ATTRIBUTE_ERRORMESSAGE = ATTRIBUTE_PREFIX + 'error';\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n * @since 1.24.0\n */\nconst objectUpdaterLinkSymbol = Symbol('monsterUpdater');\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_SCRIPT = 'script';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_STYLE = 'style';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_LINK = 'link';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\n\nconst ATTRIBUTE_ID = 'id';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\n\nconst ATTRIBUTE_CLASS = 'class';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TITLE = 'title';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SRC = 'src';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_HREF = 'href';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TYPE = 'type';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_NONCE = 'nonce';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TRANSLATE = 'translate';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TABINDEX = 'tabindex';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SPELLCHECK = 'spellcheck';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SLOT = 'slot';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_PART = 'part';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_LANG = 'lang';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMTYPE = 'itemtype';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMSCOPE = 'itemscope';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMREF = 'itemref';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMID = 'itemid';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMPROP = 'itemprop';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_IS = 'is';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_INPUTMODE = 'inputmode';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ACCESSKEY = 'accesskey';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_AUTOCAPITALIZE = 'autocapitalize';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_AUTOFOCUS = 'autofocus';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_CONTENTEDITABLE = 'contenteditable';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_DIR = 'dir';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_DRAGGABLE = 'draggable';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ENTERKEYHINT = 'enterkeyhint';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_EXPORTPARTS = 'exportparts';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_HIDDEN = 'hidden';\n\n\nexport {\n Monster,\n ATTRIBUTE_HIDDEN,\n ATTRIBUTE_EXPORTPARTS,\n ATTRIBUTE_ENTERKEYHINT,\n ATTRIBUTE_DRAGGABLE,\n ATTRIBUTE_DIR,\n ATTRIBUTE_CONTENTEDITABLE,\n ATTRIBUTE_AUTOFOCUS,\n ATTRIBUTE_AUTOCAPITALIZE,\n ATTRIBUTE_ACCESSKEY,\n TAG_SCRIPT,\n TAG_LINK,\n ATTRIBUTE_INPUTMODE,\n ATTRIBUTE_IS,\n ATTRIBUTE_ITEMPROP,\n ATTRIBUTE_ITEMID,\n ATTRIBUTE_ITEMREF,\n ATTRIBUTE_ITEMSCOPE,\n TAG_STYLE,\n ATTRIBUTE_ITEMTYPE,\n ATTRIBUTE_HREF,\n ATTRIBUTE_LANG,\n ATTRIBUTE_PART,\n ATTRIBUTE_SLOT,\n ATTRIBUTE_SPELLCHECK,\n ATTRIBUTE_SRC,\n ATTRIBUTE_TABINDEX,\n ATTRIBUTE_TRANSLATE,\n ATTRIBUTE_NONCE,\n ATTRIBUTE_TYPE,\n ATTRIBUTE_TITLE,\n ATTRIBUTE_CLASS,\n ATTRIBUTE_ID,\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 ATTRIBUTE_DISABLED,\n ATTRIBUTE_ERRORMESSAGE,\n ATTRIBUTE_VALUE,\n objectUpdaterLinkSymbol,\n ATTRIBUTE_TEMPLATE_PREFIX,\n ATTRIBUTE_UPDATER_SELECT_THIS\n} ","'use strict';\n\nimport {extend} from \"../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {ATTRIBUTE_VALUE} from \"./constants.js\";\nimport {CustomElement, attributeObserverSymbol} from \"./customelement.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst attachedInternalSymbol = Symbol('attachedInternal');\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 function `document.createElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * document.createElement('monster-')\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[attachedInternalSymbol] = this.attachInternals();\n }\n\n initObserver.call(this);\n\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 const list = super.observedAttributes;\n list.push(ATTRIBUTE_VALUE);\n return list;\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 (!(attachedInternalSymbol in this)) {\n throw new Error('ElementInternals is not supported and a polyfill is necessary');\n }\n\n return this[attachedInternalSymbol];\n}\n\n/**\n * @private\n * @return {object}\n * @this CustomControl\n */\nfunction initObserver() {\n const self = this;\n\n // value\n self[attributeObserverSymbol]['value'] = () => {\n self.setOption('value', self.getAttribute('value'));\n }\n\n}\n\nassignToNamespace('Monster.DOM', CustomControl);\nexport {Monster, CustomControl}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {parseDataURL} from \"../types/dataurl.js\";\nimport {getGlobalObject} from \"../types/global.js\";\nimport {isArray, isFunction, isObject, isString} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateFunction, validateInstance, validateObject, validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {addToObjectLink, getLinkedObjects, hasObjectLink} from \"./attributes.js\";\nimport {ATTRIBUTE_DISABLED, ATTRIBUTE_OPTIONS, objectUpdaterLinkSymbol} from \"./constants.js\";\nimport {findDocumentTemplate, Template} from \"./template.js\";\nimport {Updater} from \"./updater.js\";\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 * this symbol holds the attribute observer callbacks. The key is the attribute name.\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst attributeObserverSymbol = Symbol('attributeObserver');\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 function `document.createElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * document.createElement('monster-')\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[internalSymbol] = new ProxyObserver({'options': extend({}, this.defaults, getOptionsFromAttributes.call(this))});\n this[attributeObserverSymbol] = {};\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, ATTRIBUTE_DISABLED];\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 {boolean} disabled=false Object The Boolean disabled attribute, when present, makes the element not mutable, focusable, or even submitted with the form.\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 * @since 1.8.0\n */\n get defaults() {\n return {\n ATTRIBUTE_DISABLED: this.getAttribute(ATTRIBUTE_DISABLED),\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[internalSymbol].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[internalSymbol].detachObserver(observer)\n return this;\n }\n\n /**\n * @param {Observer} observer\n * @returns {ProxyObserver}\n */\n containsObserver(observer) {\n return this[internalSymbol].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[internalSymbol].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[internalSymbol].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[internalSymbol].getSubject()['options'], self.defaults, options);\n\n return self;\n }\n\n /**\n * Is called once via the constructor\n *\n * @return {CustomElement}\n * @since 1.8.0\n */\n [initMethodSymbol]() {\n return this;\n }\n\n /**\n * Is called once when the object is included in the DOM for the first time.\n *\n * @return {CustomElement}\n * @since 1.8.0\n */\n [assembleMethodSymbol]() {\n\n const self = this;\n let elements, nodeList;\n\n if (self.getOption('shadowMode', false) !== false) {\n try {\n initShadowRoot.call(self);\n elements = self.shadowRoot.childNodes;\n\n } catch (e) {\n\n }\n\n try {\n initCSSStylesheet.call(this);\n } catch (e) {\n\n }\n }\n\n if (!(elements instanceof NodeList)) {\n if (!(elements instanceof NodeList)) {\n initHtmlContent.call(this);\n elements = this.childNodes;\n }\n }\n\n try {\n nodeList = new Set([\n ...elements,\n ...getSlottedElements.call(self)\n ])\n } catch (e) {\n nodeList = elements\n }\n\n assignUpdaterToElement.call(self, nodeList, clone(self[internalSymbol].getRealSubject()['options']));\n return self;\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, objectUpdaterLinkSymbol)) {\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 const callback = self[attributeObserverSymbol]?.[attrName];\n\n if (isFunction(callback)) {\n callback.call(self, newVal, oldVal);\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 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 {String|undefined} query\n * @param {String|undefined|null} name name of the slot (if the parameter is undefined, all slots are searched, if the parameter has the value null, all slots without a name are searched. if a string is specified, the slots with this name are searched.)\n * @return {*}\n * @this CustomElement\n * @since 1.23.0\n * @throws {Error} query must be a string\n */\nfunction getSlottedElements(query, name) {\n const self = this;\n const result = new Set;\n\n if (!(self.shadowRoot instanceof ShadowRoot)) {\n return result;\n }\n\n let selector = 'slot';\n if (name !== undefined) {\n if (name === null) {\n selector += ':not([name])';\n } else {\n selector += '[name=' + validateString(name) + ']';\n }\n\n }\n\n const slots = self.shadowRoot.querySelectorAll(selector);\n\n for (const [, slot] of Object.entries(slots)) {\n slot.assignedElements().forEach(function (node) {\n\n if (!(node instanceof HTMLElement)) return;\n\n if (isString(query)) {\n node.querySelectorAll(query).forEach(function (n) {\n result.add(n);\n });\n\n if (node.matches(query)) {\n result.add(node);\n }\n\n } else if (query !== undefined) {\n throw new Error('query must be a string')\n } else {\n result.add(node);\n }\n })\n }\n\n return result;\n}\n\n/**\n * @this CustomElement\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 let lastDisabledValue = undefined;\n self.attachObserver(new Observer(function () {\n const flag = self.getOption('disabled');\n\n if (flag === lastDisabledValue) {\n return;\n }\n\n lastDisabledValue = flag;\n\n if (!(self.shadowRoot instanceof ShadowRoot)) {\n return;\n }\n\n const query = 'button, command, fieldset, keygen, optgroup, option, select, textarea, input, [data-monster-objectlink]';\n const elements = self.shadowRoot.querySelectorAll(query);\n\n let nodeList;\n try {\n nodeList = new Set([\n ...elements,\n ...getSlottedElements.call(self, query)\n ])\n } catch (e) {\n nodeList = elements\n }\n\n for (const element of [...nodeList]) {\n if (flag === true) {\n element.setAttribute(ATTRIBUTE_DISABLED, '');\n } else {\n element.removeAttribute(ATTRIBUTE_DISABLED);\n }\n }\n\n }));\n\n self.attachObserver(new Observer(function () {\n\n // not initialised\n if (!hasObjectLink(self, objectUpdaterLinkSymbol)) {\n return;\n }\n // inform every element\n const updaters = getLinkedObjects(self, objectUpdaterLinkSymbol);\n\n for (const list of updaters) {\n for (const updater of list) {\n let d = clone(self[internalSymbol].getRealSubject()['options']);\n Object.assign(updater.getSubject(), d);\n }\n }\n\n }));\n\n // disabled\n self[attributeObserverSymbol][ATTRIBUTE_DISABLED] = (newVal) => {\n if (self.hasAttribute(ATTRIBUTE_DISABLED)) {\n self.setOption(ATTRIBUTE_DISABLED, true);\n } else {\n self.setOption(ATTRIBUTE_DISABLED, undefined);\n }\n }\n\n // data-monster-options\n self[attributeObserverSymbol][ATTRIBUTE_OPTIONS] = () => {\n const options = getOptionsFromAttributes.call(self);\n if (isObject(options)) {\n self.setOptions(options);\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\n\n/**\n *\n * @param element\n * @param object\n * @return {Promise[]}\n * @since 1.23.0\n * @memberOf Monster.DOM\n */\nfunction assignUpdaterToElement(elements, object) {\n\n const updaters = new Set;\n\n if (elements instanceof NodeList) {\n elements = new Set([\n ...elements\n ])\n }\n\n let result = [];\n\n elements.forEach((element) => {\n if (!(element instanceof HTMLElement)) return;\n if ((element instanceof HTMLTemplateElement)) return;\n\n const u = new Updater(element, object)\n updaters.add(u);\n\n result.push(u.run().then(() => {\n return u.enableEventProcessing();\n }));\n\n });\n\n if (updaters.size > 0) {\n addToObjectLink(this, objectUpdaterLinkSymbol, updaters);\n }\n\n return result;\n}\n\nassignToNamespace('Monster.DOM', CustomElement, registerCustomElement, assignUpdaterToElement);\nexport {\n Monster,\n registerCustomElement,\n CustomElement,\n initMethodSymbol,\n assembleMethodSymbol,\n assignUpdaterToElement,\n attributeObserverSymbol,\n getSlottedElements\n}\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/dataurl.js';\n * 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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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 {ATTRIBUTE_TEMPLATE_PREFIX} from \"./constants.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/template.js';\n * 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 reads 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/template.js';\n * findDocumentTemplate()\n * </script>\n * ```\n *\n * @example\n *\n * import { findDocumentTemplate } from \"https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/template.js\";\n *\n * const template = document.createElement(\"template\");\n * template.id = \"myTemplate\";\n * template.innerHTML = \"<p>my default template</p>\";\n * document.body.appendChild(template);\n *\n * const themedTemplate = document.createElement(\"template\");\n * themedTemplate.id = \"myTemplate-myTheme\";\n * themedTemplate.innerHTML = \"<p>my themed template</p>\";\n * document.body.appendChild(themedTemplate);\n *\n * // loads the temple and since no theme is set the default template\n * const template1 = findDocumentTemplate(\"myTemplate\");\n * console.log(template1.createDocumentFragment());\n * // ↦ '<p>my default template</p>'\n *\n * // now we set our own theme\n * document\n * .querySelector(\"html\")\n * .setAttribute(\"data-monster-theme-name\", \"myTheme\");\n *\n * // now we don't get the default template,\n * // but the template with the theme in the id\n * const template2 = findDocumentTemplate(\"myTemplate\");\n * console.log(template2.createDocumentFragment());\n * // ↦ '<p>my themed template</p>'\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 const document = getGlobalObject('document');\n const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n const DocumentFragment = getGlobalFunction('DocumentFragment');\n const Document = getGlobalFunction('Document');\n\n\n let prefixID;\n\n if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n\n if (currentNode instanceof Node) {\n\n if (currentNode.hasAttribute(ATTRIBUTE_TEMPLATE_PREFIX)) {\n prefixID = currentNode.getAttribute(ATTRIBUTE_TEMPLATE_PREFIX)\n }\n\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 = document;\n }\n }\n\n let template;\n let theme = getDocumentTheme()\n\n if (prefixID) {\n let themedPrefixID = prefixID + '-' + id + '-' + theme.getName();\n\n // current + themedPrefixID\n template = currentNode.getElementById(themedPrefixID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + themedPrefixID\n template = document.getElementById(themedPrefixID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n }\n\n let themedID = id + '-' + theme.getName();\n\n // current + themedID\n template = currentNode.getElementById(themedID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + themedID\n template = document.getElementById(themedID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // current + ID\n template = currentNode.getElementById(id);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + ID\n template = document.getElementById(id);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\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.29.0/dist/monster.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.29.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.29.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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {diff} from \"../data/diff.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {\n ATTRIBUTE_ERRORMESSAGE,\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 ATTRIBUTE_UPDATER_SELECT_THIS\n} from \"../dom/constants.js\";\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 {trimSpaces} from \"../util/trimspaces.js\";\nimport {findTargetElementFromEvent} from \"./events.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 * Changes to attributes are made only when the direct values are changed. If you want to assign changes to other values\n * as well, you have to insert the attribute `data-monster-select-this`. This should be done with care, as it can reduce performance.\n *\n * You can create an object of this class using 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/updater.js';\n * new Updater()\n * </script>\n * ```\n *\n * @example\n *\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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 if (subject === undefined) subject = {}\n if (!isInstance(subject, ProxyObserver)) {\n subject = new ProxyObserver(subject);\n }\n\n this[internalSymbol] = {\n element: validateInstance(element, HTMLElement),\n last: {},\n callbacks: new Map(),\n eventTypes: ['keyup', 'click', 'change', 'drop', 'touchend', 'input'],\n subject: subject\n }\n\n this[internalSymbol].callbacks.set('checkstate', getCheckStateCallback.call(this));\n\n this[internalSymbol].subject.attachObserver(new Observer(() => {\n\n const s = this[internalSymbol].subject.getRealSubject();\n\n const diffResult = diff(this[internalSymbol].last, s)\n this[internalSymbol].last = clone(s);\n\n for (const [, change] of Object.entries(diffResult)) {\n removeElement.call(this, change);\n insertElement.call(this, change);\n updateContent.call(this, change);\n updateAttributes.call(this, change);\n }\n }));\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[internalSymbol].eventTypes = validateArray(types);\n return this;\n }\n\n /**\n * With this method, the eventlisteners are hooked in and the magic begins.\n *\n * ```\n * updater.run().then(() => {\n * updater.enableEventProcessing();\n * });\n * ```\n *\n * @since 1.9.0\n * @return {Updater}\n * @throws {Error} the bind argument must start as a value with a path\n */\n enableEventProcessing() {\n this.disableEventProcessing();\n\n for (const type of this[internalSymbol].eventTypes) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n this[internalSymbol].element.addEventListener(type, getControlEventHandler.call(this), {\n capture: true,\n passive: true\n });\n }\n\n return this;\n\n }\n\n /**\n * This method turns off the magic or who loves it more profane it removes the eventListener.\n *\n * @since 1.9.0\n * @return {Updater}\n */\n disableEventProcessing() {\n\n for (const type of this[internalSymbol].eventTypes) {\n this[internalSymbol].element.removeEventListener(type, getControlEventHandler.call(this));\n }\n\n return this;\n\n }\n\n /**\n * The run method must be called for the update to start working.\n * The method ensures that changes are detected.\n *\n * ```\n * updater.run().then(() => {\n * updater.enableEventProcessing();\n * });\n * ```\n *\n * @summary Let the magic begin\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[internalSymbol].last = {'__init__': true};\n return this[internalSymbol].subject.notifyObservers();\n }\n\n /**\n * Gets the values of bound elements and changes them in subject\n *\n * @since 1.27.0\n * @return {Monster.DOM.Updater}\n */\n retrieve() {\n retrieveFromBindings.call(this);\n return this;\n }\n\n /**\n * If you have passed a ProxyObserver in the constructor, you will get the object that the ProxyObserver manages here.\n * However, if you passed a simple object, here you will get a proxy for that object.\n *\n * For changes the ProxyObserver must be used.\n *\n * @since 1.8.0\n * @return {Proxy}\n */\n getSubject() {\n return this[internalSymbol].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[internalSymbol].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 // this is a reference to the current object (therefore no array function here)\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\n return undefined;\n }\n }\n}\n\n/**\n * @private\n */\nconst symbol = Symbol('EventHandler');\n\n/**\n * @private\n * @return {function}\n * @this Updater\n * @throws {Error} the bind argument must start as a value with a path\n */\nfunction getControlEventHandler() {\n\n const self = this;\n\n if (self[symbol]) {\n return self[symbol];\n }\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 = findTargetElementFromEvent(event, ATTRIBUTE_UPDATER_BIND);\n\n if (element === undefined) {\n return;\n }\n\n retrieveAndSetValue.call(self, element);\n\n }\n\n return self[symbol];\n\n\n}\n\n/**\n * @throws {Error} the bind argument must start as a value with a path\n * @param {HTMLElement} element\n * @return void\n * @memberOf Monster.DOM\n * @private\n */\nfunction retrieveAndSetValue(element) {\n\n const self = this;\n\n const pathfinder = new Pathfinder(self[internalSymbol].subject.getSubject());\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[internalSymbol].subject.getRealSubject());\n const pf = new Pathfinder(copy);\n pf.setVia(path, value);\n\n const diffResult = diff(copy, self[internalSymbol].subject.getRealSubject());\n\n if (diffResult.length > 0) {\n pathfinder.setVia(path, value);\n }\n}\n\n/**\n * @since 1.27.0\n * @return void\n * @private\n */\nfunction retrieveFromBindings() {\n const self = this;\n\n if (self[internalSymbol].element.matches('[' + ATTRIBUTE_UPDATER_BIND + ']')) {\n retrieveAndSetValue.call(self, element)\n }\n\n for (const [, element] of self[internalSymbol].element.querySelectorAll('[' + ATTRIBUTE_UPDATER_BIND + ']').entries()) {\n retrieveAndSetValue.call(self, element)\n }\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n */\nfunction removeElement(change) {\n const self = this;\n\n for (const [, element] of self[internalSymbol].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[internalSymbol].subject.getRealSubject();\n const document = getDocument();\n\n let mem = new WeakSet;\n let wd = 0;\n \n const container = self[internalSymbol].element;\n\n while (true) {\n let found = false;\n wd++;\n\n let p = clone(change?.['path']);\n if (!isArray(p)) return self;\n\n while (p.length > 0) {\n const current = p.join('.');\n\n let iterator = new Set;\n const query = '[' + ATTRIBUTE_UPDATER_INSERT + '*=\"path:' + current + '\"]';\n \n const e = container.querySelectorAll(query);\n\n if (e.length > 0) {\n iterator = new Set(\n [...e]\n )\n }\n\n if (container.matches(query)) {\n iterator.add(container);\n } \n \n for (const [, containerElement] of iterator.entries()) {\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 = trimSpaces(attributes);\n let i = def.indexOf(' ');\n let key = trimSpaces(def.substr(0, i));\n let refPrefix = key + '-';\n let cmd = trimSpaces(def.substr(i));\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 self[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f);\n })\n\n let value\n try {\n containerElement.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n containerElement.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\n\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 try {\n containerElement.removeChild(node); \n } catch(e) {\n \n }\n \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.replaceAll(\"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.replaceAll(\"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[internalSymbol].subject.getRealSubject();\n\n let p = clone(change?.['path']);\n runUpdateContent.call(this, this[internalSymbol].element, p, subject);\n\n const slots = this[internalSymbol].element.querySelectorAll('slot');\n if (slots.length > 0) {\n for (const [, slot] of Object.entries(slots)) {\n for (const [, element] of Object.entries(slot.assignedNodes())) {\n runUpdateContent.call(this, element, p, subject);\n }\n }\n }\n\n\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 if (!(container instanceof HTMLElement)) 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 const query = '[' + ATTRIBUTE_UPDATER_REPLACE + '^=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"static:\"]';\n const e = container.querySelectorAll('' + query);\n\n const iterator = new Set([\n ...e\n ])\n\n if (container.matches(query)) {\n iterator.add(container);\n }\n\n iterator.forEach((key, element) => {\n\n if (mem.has(element)) return;\n mem.add(element)\n\n const attributes = element.getAttribute(ATTRIBUTE_UPDATER_REPLACE)\n let cmd = trimSpaces(attributes);\n\n let pipe = new Pipe(cmd);\n this[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f);\n })\n\n let value\n try {\n element.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n element.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\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\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[internalSymbol].subject.getRealSubject();\n let p = clone(change?.['path']);\n runUpdateAttributes.call(this, this[internalSymbol].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 let iterator = new Set;\n\n const query = '[' + ATTRIBUTE_UPDATER_SELECT_THIS + '], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '^=\"static:\"]';\n\n const e = container.querySelectorAll(query);\n\n if (e.length > 0) {\n iterator = new Set(\n [...e]\n )\n }\n\n if (container.matches(query)) {\n iterator.add(container);\n }\n\n iterator.forEach((key, element) => {\n\n if (mem.has(element)) return;\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 = trimSpaces(def);\n let i = def.indexOf(' ');\n let name = trimSpaces(def.substr(0, i));\n let cmd = trimSpaces(def.substr(i));\n\n let pipe = new Pipe(cmd);\n\n self[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f, element);\n })\n\n let value\n try {\n element.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n element.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\n\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 * @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') {\n\n if (value !== undefined) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n\n break;\n\n case 'checkbox':\n\n if (name === 'checked') {\n\n if (value !== undefined) {\n element.checked = true;\n } else {\n element.checked = false;\n }\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 */\n\nimport {assignToNamespace, Monster} from \"../namespace.js\";\nimport {ID} from \"../types/id.js\";\nimport {isObject} from \"../types/is.js\";\nimport {validateString} from \"../types/validate.js\";\n\n/**\n * This special trim function allows to trim spaces that have been protected by a special escape character.\n *\n * You can call the method via the monster namespace `Monster.Util.trimSpaces()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * Monster.Util.trimSpaces(\" hello \")\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {trimSpaces} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/util/trimspaces.js';\n * trimSpaces(' hello \\\\ ')\n * </script>\n * ```\n * \n * Hint: One stroke is escaped by the javascript interpreter, the second stroke escapes the stroke.\n * \n * ```text\n * a\\ b ↦ a b\n * a\\\\ b ↦ a\\ b\n * ```\n * \n * @since 1.24.0\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @param {string} value\n * @return {string}\n * @throws {TypeError} value is not a string\n */\nfunction trimSpaces(value) {\n\n validateString(value);\n\n let placeholder = new Map;\n const regex = /((?<pattern>\\\\(?<char>.)){1})/mig;\n\n // The separator for args must be escaped\n // undefined string which should not occur normally and is also not a regex\n let result = value.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 value = value.replace(p, r);\n }\n\n }\n\n value = value.trim();\n placeholder.forEach((v, k) => {\n value = value.replace(k, '\\\\' + v)\n })\n\n return value;\n\n}\n\nassignToNamespace('Monster.Util', trimSpaces);\nexport {Monster, trimSpaces}\n","'use strict';\n\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray,isObject} 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/events.js';\n * 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 * You can call the function via the monster namespace `new Monster.DOM.fireCustomEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * new Monster.DOM.fireCustomEvent()\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {fireCustomEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/events.js';\n * fireCustomEvent()\n * </script>\n * ```\n *\n * @param {HTMLElement|HTMLCollection|NodeList} element\n * @param {string} type\n * @return {void}\n * @since 1.29.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 fireCustomEvent(element, type, detail) {\n\n const document = getDocument();\n\n if (element instanceof HTMLElement) {\n\n if (!isObject(detail)) {\n detail = {detail};\n }\n\n let event = new CustomEvent(validateString(type), {\n bubbles: true,\n cancelable: true,\n detail\n });\n\n element.dispatchEvent(event);\n\n } else if (element instanceof HTMLCollection || element instanceof NodeList) {\n for (let e of element) {\n fireCustomEvent(e, type, detail);\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/events.js';\n * 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\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, fireCustomEvent);\nexport {Monster, findTargetElementFromEvent, fireEvent, fireCustomEvent}\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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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 */\n\nimport {parseLocale} from \"../i18n/locale.js\";\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 * ```html\n * <html lang=\"en\">\n * ```\n *\n * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';\n * 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.29.0/dist/modules/dom/locale.js';\n * 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/i18n/locale.js';\n * 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 * The structure has the following: language, script, region, variants, extlang, privateUse\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/i18n/locale.js';\n * 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/i18n/provider.js';\n * 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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"./base.js\";\nimport {validateObject} from \"./validate.js\";\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/types/basewithoptions.js';\n * 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[internalSymbol] = 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[internalSymbol]).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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/i18n/translations.js';\n * new Translations()\n * </script>\n * ```\n *\n * @example\n *\n * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/i18n/translations.js';\n * import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/i18n/locale.js';\n *\n * const translation = new Translations(parseLocale('en-GB'));\n *\n * translation.assignTranslations({\n * text1: \"click\",\n * text2: {\n * 'one': 'click once',\n * 'other': 'click n times'\n * }\n * });\n *\n * console.log(translation.getText('text1'));\n * // ↦ click\n *\n * console.log(translation.getPluralRuleText('text2',1));\n * // -> click once\n * console.log(translation.getPluralRuleText('text2',2));\n * // -> click n times\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\nassignToNamespace('Monster.I18n', Translations);\nexport {Monster, Translations}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../../constants.js\";\nimport {extend} from \"../../data/extend.js\";\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 * 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/i18n/providers/fetch.js';\n * new Fetch()\n * </script>\n * ```\n * \n * @example <caption>das ist ein test</caption>\n * \n * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/i18n/providers/fetch.js';\n * \n * // fetch from API\n * const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');\n * // ↦ https://example.com/en.json\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 * @tutorial i18n-locale-and-formatter\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 * The url may contain placeholders (language, script, region, variants, extlang, privateUse), so you can specify one url for all translations.\n * \n * ```\n * new Fetch('https://www.example.com/assets/${language}.json')\n * ```\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[internalSymbol] = 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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {BaseWithOptions} from \"../types/basewithoptions.js\";\nimport {isObject, isString} from \"../types/is.js\";\nimport {validateArray, validateString} from \"../types/validate.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalObjectSymbol = Symbol('internalObject');\n\n/**\n * @private\n * @type {symbol}\n */\nconst watchdogSymbol = Symbol('watchdog');\n\n/**\n * @private\n * @type {symbol}\n */\nconst markerOpenIndexSymbol = Symbol('markerOpenIndex');\n\n/**\n * @private\n * @type {symbol}\n */\nconst markerCloseIndexSymbol = Symbol('markercloseIndex');\n\n/**\n * @private\n * @type {symbol}\n */\nconst workingDataSymbol = Symbol('workingData');\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 create an instance 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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/text/formatter.js';\n * new Formatter()\n * </script>\n * ```\n *\n * ## Marker in marker\n *\n * Markers can be nested. Here, the inner marker is resolved first `${subkey} ↦ 1 = ${mykey2}` and then the outer marker `${mykey2}`.\n *\n * ```\n * const text = '${mykey${subkey}}';\n * let obj = {\n * mykey2: \"1\",\n * subkey: \"2\"\n * };\n *\n * new Formatter(obj).format(text);\n * // ↦ 1\n * ```\n *\n * ## Callbacks\n *\n * The values in a formatter can be adjusted via the commands of the `Transformer` or the`Pipe`.\n * There is also the possibility to use callbacks.\n *\n * const formatter = new Formatter({x: '1'}, {\n * callbacks: {\n * quote: (value) => {\n * return '\"' + value + '\"'\n * }\n * }\n * });\n *\n * formatter.format('${x | call:quote}'))\n * // ↦ \"1\"\n *\n * ## Marker with parameter\n *\n * A string can also bring its own values. These must then be separated from the key by a separator `::`.\n * The values themselves must be specified in key/value pairs. The key must be separated from the value by a separator `=`.\n *\n * When using a pipe, you must pay attention to the separators.\n *\n * @example\n *\n * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/text/formatter.js';\n *\n * new Formatter({\n * a: {\n * b: {\n * c: \"Hello\"\n * },\n * d: \"world\",\n * }\n * }).format(\"${a.b.c} ${a.d | ucfirst}!\"); // with pipe\n *\n * // ↦ Hello World!\n *\n * @since 1.12.0\n * @copyright schukai GmbH\n * @memberOf Monster.Text\n */\nclass Formatter extends BaseWithOptions {\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, options) {\n super(options);\n this[internalObjectSymbol] = object || {}\n this[markerOpenIndexSymbol] = 0;\n this[markerCloseIndexSymbol] = 0;\n }\n\n /**\n * @property {object} marker\n * @property {array} marker.open=[\"${\"]\n * @property {array} marker.close=[\"${\"]\n * @property {object} parameter\n * @property {string} parameter.delimiter=\"::\"\n * @property {string} parameter.assignment=\"=\"\n * @property {object} callbacks={}\n */\n get defaults() {\n return extend({}, super.defaults, {\n marker: {\n open: ['${'],\n close: ['}']\n },\n parameter: {\n delimiter: '::',\n assignment: '='\n },\n callbacks: {},\n })\n }\n\n\n /**\n * Set new Parameter Character\n *\n * Default values for the chars are `::` and `=`\n *\n * ```\n * formatter.setParameterChars('#');\n * formatter.setParameterChars('[',']');\n * formatter.setParameterChars('i18n{','}');\n * ```\n *\n * @param {string} delimiter\n * @param {string} assignment\n * @return {Formatter}\n * @since 1.24.0\n * @throws {TypeError} value is not a string\n */\n setParameterChars(delimiter, assignment) {\n\n if (delimiter !== undefined) {\n this[internalSymbol]['parameter']['delimiter'] = validateString(delimiter);\n }\n\n if (assignment !== undefined) {\n this[internalSymbol]['parameter']['assignment'] = validateString(assignment);\n }\n\n return this;\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 {array|string} open\n * @param {array|string|undefined} 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 if (isString(open)) open = [open];\n if (isString(close)) close = [close];\n\n this[internalSymbol]['marker']['open'] = validateArray(open);\n this[internalSymbol]['marker']['close'] = validateArray(close);\n return this;\n }\n\n /**\n *\n * @param {string} text\n * @return {string}\n * @throws {TypeError} value is not a string\n * @throws {Error} too deep nesting\n */\n format(text) {\n this[watchdogSymbol] = 0;\n this[markerOpenIndexSymbol] = 0;\n this[markerCloseIndexSymbol] = 0;\n this[workingDataSymbol] = {};\n return format.call(this, text);\n }\n\n}\n\n/**\n * @private\n * @return {string}\n */\nfunction format(text) {\n const self = this;\n\n self[watchdogSymbol]++;\n if (this[watchdogSymbol] > 20) {\n throw new Error('too deep nesting')\n }\n\n let openMarker = self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol]];\n let closeMarker = self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol]];\n\n // contains no placeholders\n if (text.indexOf(openMarker) === -1 || text.indexOf(closeMarker) === -1) {\n return text;\n }\n\n let result = tokenize.call(this, validateString(text), openMarker, closeMarker)\n\n if (self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol] + 1]) {\n this[markerOpenIndexSymbol]++;\n }\n\n if (self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol] + 1]) {\n this[markerCloseIndexSymbol]++;\n }\n\n result = format.call(self, result)\n\n return result;\n}\n\n/**\n * @private\n * @since 1.12.0\n * @param text\n * @return {string}\n */\nfunction tokenize(text, openMarker, closeMarker) {\n const self = this;\n\n let formatted = [];\n\n const parameterAssignment = self[internalSymbol]['parameter']['assignment']\n const parameterDelimiter = self[internalSymbol]['parameter']['delimiter']\n const callbacks = self[internalSymbol]['callbacks'];\n\n while (true) {\n\n let startIndex = text.indexOf(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(openMarker.length).indexOf(closeMarker);\n if (endIndex !== -1) endIndex += openMarker.length;\n let insideStartIndex = text.substring(openMarker.length).indexOf(openMarker);\n if (insideStartIndex !== -1) {\n insideStartIndex += openMarker.length;\n if (insideStartIndex < endIndex) {\n let result = tokenize.call(self, text.substring(insideStartIndex), openMarker, closeMarker);\n text = text.substring(0, insideStartIndex) + result\n endIndex = text.substring(openMarker.length).indexOf(closeMarker);\n if (endIndex !== -1) endIndex += openMarker.length;\n }\n }\n\n if (endIndex === -1) {\n throw new Error(\"syntax error in formatter template\")\n return;\n }\n\n let key = text.substring(openMarker.length, endIndex);\n let parts = key.split(parameterDelimiter);\n let currentPipe = parts.shift();\n\n self[workingDataSymbol] = extend({}, self[internalObjectSymbol], self[workingDataSymbol]);\n\n for (const kv of parts) {\n const [k, v] = kv.split(parameterAssignment);\n self[workingDataSymbol][k] = v;\n }\n\n const t1 = key.split('|').shift().trim(); // pipe symbol\n const t2 = t1.split('::').shift().trim(); // key value delimiter\n const t3 = t2.split('.').shift().trim(); // path delimiter\n let prefix = self[workingDataSymbol]?.[t3] ? 'path:' : 'static:';\n\n let command = \"\";\n if (prefix && key.indexOf(prefix) !== 0\n && key.indexOf('path:') !== 0\n && key.indexOf('static:') !== 0) {\n command = prefix;\n }\n\n command += currentPipe;\n\n const pipe = new Pipe(command);\n\n if (isObject(callbacks)) {\n for (const [name, callback] of Object.entries(callbacks)) {\n pipe.setCallback(name, callback);\n }\n }\n\n formatted.push(validateString(pipe.run(self[workingDataSymbol])));\n\n text = text.substring(endIndex + 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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/logging/logger.js';\n * 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.29.0/dist/monster.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.29.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.29.0/dist/monster.js';\n * Monster.Math.random(1,10)\n * // ↦ 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.29.0/dist/modules/math/random.js';\n * random(1,10)\n * // ↦ 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 if (rval < min) {\n rval += min;\n }\n \n return 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.29.0/dist/monster.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.29.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.29.0/dist/monster.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.29.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.29.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.29.0/dist/monster.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.29.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.29.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.29.0/dist/monster.js';\n * 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.29.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.29.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\", \"types/comparator.js\")\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.29.0/dist/monster.js';\n * 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.29.0/dist/modules/util/freeze.js';\n * 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","internalSymbol","Symbol","internalStateSymbol","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","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","assembleParts","v","k","m","build","set","callback","result","Map","map","buildFlatMap","call","forEach","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","typeOf","obj","copy","len","Date","setTime","getTime","Element","HTMLDocument","DocumentFragment","globalContext","window","document","navigator","Proxy","cloneObject","constructor","prototype","getClone","globalReference","globalThis","defineProperty","get","configurable","__monster__","Function","getGlobalObject","getGlobalFunction","results","exec","toLowerCase","Stack","object","wildCard","wildcard","getValueViaPath","setValueViaPath","deleteValueViaPath","iterate","check","entries","anchor","WeakMap","Set","WeakSet","parseInt","WeakRef","descriptor","getOwnPropertyDescriptor","getPrototypeOf","last","pop","subpath","stack","isEmpty","peek","append","assignProperty","delete","data","diff","first","second","doDiff","getKeys","keys","fill","_","concat","typeA","typeB","currPath","currDiff","buildResult","getOperator","operator","isNotEqual","extend","arguments","Transformer","Pipe","pipe","context","t","setCallback","reduce","accumulator","transformer","currentIndex","run","ID","args","disassemble","command","callbacks","transform","apply","regex","g","p","r","replace","trim","convertToString","console","toUpperCase","parse","encodeURIComponent","callbackName","has","unshift","doc","DOMParser","parseFromString","body","textContent","trueStatement","falseStatement","condition","firstchar","charAt","substr","btoa","atob","log","prefix","suffix","sort","useKey","exists","pf","start","end","substring","defaultType","parseFloat","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","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","findClosestByClass","className","classList","DEFAULT_THEME","ATTRIBUTE_PREFIX","ATTRIBUTE_OPTIONS","ATTRIBUTE_THEME_PREFIX","ATTRIBUTE_THEME_NAME","ATTRIBUTE_UPDATER_ATTRIBUTES","ATTRIBUTE_UPDATER_SELECT_THIS","ATTRIBUTE_UPDATER_REPLACE","ATTRIBUTE_UPDATER_INSERT","ATTRIBUTE_UPDATER_INSERT_REFERENCE","ATTRIBUTE_UPDATER_REMOVE","ATTRIBUTE_UPDATER_BIND","ATTRIBUTE_TEMPLATE_PREFIX","ATTRIBUTE_ROLE","ATTRIBUTE_DISABLED","ATTRIBUTE_VALUE","ATTRIBUTE_ERRORMESSAGE","objectUpdaterLinkSymbol","TAG_SCRIPT","TAG_STYLE","TAG_LINK","ATTRIBUTE_ID","ATTRIBUTE_CLASS","ATTRIBUTE_TITLE","ATTRIBUTE_SRC","ATTRIBUTE_HREF","ATTRIBUTE_TYPE","ATTRIBUTE_NONCE","ATTRIBUTE_TRANSLATE","ATTRIBUTE_TABINDEX","ATTRIBUTE_SPELLCHECK","ATTRIBUTE_SLOT","ATTRIBUTE_PART","ATTRIBUTE_LANG","ATTRIBUTE_ITEMTYPE","ATTRIBUTE_ITEMSCOPE","ATTRIBUTE_ITEMREF","ATTRIBUTE_ITEMID","ATTRIBUTE_ITEMPROP","ATTRIBUTE_IS","ATTRIBUTE_INPUTMODE","ATTRIBUTE_ACCESSKEY","ATTRIBUTE_AUTOCAPITALIZE","ATTRIBUTE_AUTOFOCUS","ATTRIBUTE_CONTENTEDITABLE","ATTRIBUTE_DIR","ATTRIBUTE_DRAGGABLE","ATTRIBUTE_ENTERKEYHINT","ATTRIBUTE_EXPORTPARTS","ATTRIBUTE_HIDDEN","CustomElement","attributeObserverSymbol","attachedInternalSymbol","CustomControl","attachInternals","initObserver","getInternal","labels","getTag","validity","validationMessage","willValidate","states","form","state","setFormValue","flags","message","setValidity","checkValidity","reportValidity","list","setOption","parseDataURL","findDocumentTemplate","Template","Updater","initMethodSymbol","assembleMethodSymbol","defaults","getOptionsFromAttributes","initOptionObserver","shadowMode","delegatesFocus","templates","main","attachObserver","detachObserver","containsObserver","getRealSubject","getSubject","setVia","options","parseOptionsJSON","elements","nodeList","getOption","initShadowRoot","shadowRoot","childNodes","initCSSStylesheet","NodeList","initHtmlContent","getSlottedElements","assignUpdaterToElement","attrName","oldVal","newVal","node","containChildNode","Node","ShadowRoot","query","slots","querySelectorAll","slot","assignedElements","matches","lastDisabledValue","flag","removeAttribute","updaters","updater","d","assign","setOptions","dataUrl","content","template","appendChild","createDocumentFragment","html","innerHTML","styleSheet","getCSSStyleSheet","CSSStyleSheet","adoptedStyleSheets","style","createElement","innerText","attachShadow","mode","registerCustomElement","define","HTMLTemplateElement","u","enableEventProcessing","MediaType","parseMediaType","internal","DataUrl","mediatype","base64","dataurl","mediatypeAndBase64","base64Flag","endsWith","lastIndexOf","decodeURIComponent","subtype","parameter","startsWith","parseParameter","entry","kv","getDocumentTheme","currentNode","Document","prefixID","getRootNode","ownerDocument","theme","themedPrefixID","getName","getElementById","themedID","Theme","querySelector","trimSpaces","findTargetElementFromEvent","getDocument","eventTypes","getCheckStateCallback","diffResult","change","removeElement","insertElement","updateContent","updateAttributes","types","disableEventProcessing","addEventListener","getControlEventHandler","capture","passive","removeEventListener","notifyObservers","retrieveFromBindings","HTMLInputElement","HTMLOptionElement","event","retrieveAndSetValue","pathfinder","checked","HTMLTextAreaElement","HTMLSelectElement","selectedOptions","parentNode","removeChild","mem","wd","container","found","containerElement","attributes","def","refPrefix","cmd","dataPath","insertPoint","hasChildNodes","lastChild","available","ref","refElement","appendNewDocumentFragment","nodes","applyRecursive","child","runUpdateContent","assignedNodes","firstChild","addNode","runUpdateAttributes","handleInputControlAttributeUpdate","opt","selected","selectedIndex","fireEvent","click","Event","bubbles","cancelable","dispatchEvent","HTMLCollection","fireCustomEvent","detail","CustomEvent","attributeName","attributeValue","composedPath","getWindow","getDocumentFragmentFromString","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","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","internalObjectSymbol","watchdogSymbol","markerOpenIndexSymbol","markerCloseIndexSymbol","workingDataSymbol","marker","open","close","delimiter","assignment","openMarker","closeMarker","tokenize","formatted","parameterAssignment","parameterDelimiter","startIndex","endIndex","insideStartIndex","currentPipe","t1","t2","t3","LogEntry","ALL","DEBUG","ERROR","FATAL","INFO","OFF","TRACE","WARN","Handler","loglevel","getLogLevel","setLogLevel","Logger","triggerLog","level","label","logger","ConsoleHandler","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","Types"],"sourceRoot":""}
1
+ {"version":3,"file":"monster.dev.js","mappings":"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;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;;;;;;;;;;;;;;;AC7Da;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;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;;;;;;;;;;;;;;;;;;;;;;ACrEa;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;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,CAAG/B,MAAM,CAACgD,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;AACA;;;AACA,SAASC,WAAT,CAAqBlB,KAArB,EAA4B;AACxB,MAAImB,IAAJ;;AAEA,MAAInB,KAAK,KAAK3B,SAAV,IAAuB2B,KAAK,KAAK,IAArC,EAA2C;AACvC,WAAO,IAAP;AACH;;AAEDmB,EAAAA,IAAI,WAAUnB,KAAV,CAAJ;;AAEA,MAAImB,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;AACA;;;AACA,SAASC,QAAT,CAAkBpB,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;AACA;;;AACA,SAASqB,SAAT,CAAmBrB,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;AACA;;;AACA,SAASsB,QAAT,CAAkBtB,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;AACA;;;AACA,SAASuB,QAAT,CAAkBvB,KAAlB,EAAyB;AAErB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAIkB,WAAW,CAAClB,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;AACA;;;AACA,SAASwB,UAAT,CAAoBxB,KAApB,EAA2ByB,QAA3B,EAAqC;AAEjC,MAAI,CAACF,QAAQ,CAACvB,KAAD,CAAb,EAAsB,OAAO,KAAP;AACtB,MAAI,CAAC0B,UAAU,CAACD,QAAD,CAAf,EAA2B,OAAO,KAAP;AAC3B,MAAI,CAACA,QAAQ,CAACxC,cAAT,CAAwB,WAAxB,CAAL,EAA2C,OAAO,KAAP;AAC3C,SAAQe,KAAK,YAAYyB,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;AACA;AACA;;;AACA,SAASjC,OAAT,CAAiBQ,KAAjB,EAAwB;AACpB,SAAOT,KAAK,CAACC,OAAN,CAAcQ,KAAd,CAAP;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,SAAS0B,UAAT,CAAoB1B,KAApB,EAA2B;AACvB,MAAIR,OAAO,CAACQ,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAIkB,WAAW,CAAClB,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;AACA;;;AACA,SAAS2B,SAAT,CAAmB3B,KAAnB,EAA0B;AACtB,SAAO4B,MAAM,CAACD,SAAP,CAAiB3B,KAAjB,CAAP;AACH;;AAGDxB,gEAAiB,CAAC,eAAD,EAAkB0C,WAAlB,EAA+BG,SAA/B,EAA0CC,QAA1C,EAAoDC,QAApD,EAA8D/B,OAA9D,EAAuEkC,UAAvE,EAAmFV,UAAnF,EAA+FW,SAA/F,EAA0GP,QAA1G,CAAjB;;;;;;;;;;;;;;;AC/Za;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;AACA;AACA;AACA;AACA;AACA;;IACMS;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ7B,KAAR,EAAe;AACX,UAAIuB,sDAAQ,CAACvB,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,EAAwBqD,QAAxB,CAAjB;;;;;;;;;;;;;;ACtEa;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;AACA;AACA;AACA;AACA;AACA;;IACMC;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ9B,KAAR,EAAe;AACX,UAAI+B,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI9B,OAAJ,CAAY,UAAUc,OAAV,EAAmBb,MAAnB,EAA2B;AAC1C,YAAI8B,CAAJ,EAAOC,CAAP;AAEAF,QAAAA,IAAI,CAACxB,QAAL,CAAcK,OAAd,CAAsBZ,KAAtB,EACKkC,IADL,CACU,YAAY;AACdnB,UAAAA,OAAO;AACV,SAHL,EAGOoB,KAHP,CAGa,YAAY;AACrBH,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAIC,CAAC,KAAK,KAAV,EAAiB;AACb/B,YAAAA,MAAM;AACT;AACJ,SATD;AAWA6B,QAAAA,IAAI,CAACvB,QAAL,CAAcI,OAAd,CAAsBZ,KAAtB,EACKkC,IADL,CACU,YAAY;AACdnB,UAAAA,OAAO;AACV,SAHL,EAGOoB,KAHP,CAGa,YAAY;AACrBF,UAAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAID,CAAC,KAAK,KAAV,EAAiB;AACb9B,YAAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoBI;;AAyCzB9B,gEAAiB,CAAC,qBAAD,EAAwBsD,UAAxB,CAAjB;;;;;;;;;;;;;;AC/Fa;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;;IACMM;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQpC,KAAR,EAAe;AACX,aAAOC,OAAO,CAACc,OAAR,CAAgBf,KAAhB,CAAP;AACH;;;;EAVeD;;AAcpBvB,gEAAiB,CAAC,qBAAD,EAAwB4D,KAAxB,CAAjB;;;;;;;;;;;;;;;;;;AC7Da;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;AACrE,SAAOC,aAAa,CAACL,OAAD,EAAUC,QAAV,EAAoBG,MAApB,EAA4B,UAAUE,CAAV,EAAaC,CAAb,EAAgBC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CAAV;;AAEA,cAAIjD,sDAAQ,CAACoD,GAAD,CAAR,IAAiBb,SAAS,KAAKzF,SAAnC,EAA8C;AAC1CsG,YAAAA,GAAG,CAAC,GAAD,CAAH,GAAWb,SAAX;AACH;;AAEDC,UAAAA,UAAU,CAACV,GAAX,CAAeqB,EAAf,EAAmBC,GAAnB;AA3BkB;;AAYtB,4DAA0B;AAAA;AAgBzB;AA5BqB;AAAA;AAAA;AAAA;AAAA;AA8BzB;AAGJ,GAtCD,QAsCShF,KAAK,CAACE,MAAN,GAAe,CAtCxB,EAXqD,CAmDrD;;;AACA,MAAImE,YAAY,KAAKT,MAAM,CAACU,IAA5B,EAAkC;AAAA,gDACTF,UADS;AAAA;;AAAA;AAC9B,6DAAiC;AAAA;AAAA,YAArBb,CAAqB;AAAA,YAAlBsB,CAAkB;;AAC7BjB,QAAAA,MAAM,CAACF,GAAP,CAAWH,CAAX,EAAcsB,CAAd;AACH;AAH6B;AAAA;AAAA;AAAA;AAAA;AAIjC;;AAED,SAAO7B,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,SAASS,KAAT,CAAeT,OAAf,EAAwBiC,UAAxB,EAAoCC,YAApC,EAAkD;AAC9C,MAAID,UAAU,KAAKvG,SAAnB,EAA8B,OAAOwG,YAAY,GAAGA,YAAH,GAAkBlC,OAArC;AAC9BN,EAAAA,kEAAc,CAACuC,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,IAAI7B,sDAAJ,CAAeG,OAAf,CAAb;;AAEA,MAAIoC,KAAK,CAAClF,MAAN,KAAiB,CAArB,EAAwB;AACpB,WAAOwE,MAAM,CAACC,MAAP,CAAcM,UAAd,CAAP;AACH;;AAEDG,EAAAA,KAAK,CAACnB,OAAN,CAAc,UAAC5B,CAAD,EAAO;AACjB,QAAIiD,MAAM,GAAGjD,CAAH,aAAGA,CAAH,uBAAGA,CAAC,CAAG,QAAH,CAAd;AACA,QAAIkD,WAAW,GAAGD,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,aAAH,CAAxB;AACA,QAAIC,WAAW,KAAK7G,SAApB,EAA+B;AAE/B,QAAI8G,IAAI,GAAGF,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAG,MAAH,CAAjB;AAEA,QAAIhC,CAAC,GAAGoB,MAAM,CAACC,MAAP,CAAca,IAAd,CAAR;AACA,QAAIlC,CAAC,KAAK5E,SAAV,EAAqB4E,CAAC,GAAG4B,YAAJ;AAErBD,IAAAA,UAAU,GAAGA,UAAU,CAACQ,UAAX,CAAsBF,WAAtB,EAAmCjC,CAAnC,CAAb;AAGH,GAbD;AAeA,SAAO2B,UAAP;AAEH;;AAGDpG,gEAAiB,CAAC,cAAD,EAAiBkE,QAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;ACxaa;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,SAAS2C,gBAAT,CAA0BrF,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,SAASsF,iBAAT,CAA2BtF,KAA3B,EAAkC;AAC9B,MAAI,CAACkB,mDAAW,CAAClB,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,SAASuF,eAAT,CAAyBvF,KAAzB,EAAgC;AAC5B,MAAI,CAACqB,iDAAS,CAACrB,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,SAASqC,cAAT,CAAwBrC,KAAxB,EAA+B;AAC3B,MAAI,CAACsB,gDAAQ,CAACtB,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,SAASwF,cAAT,CAAwBxF,KAAxB,EAA+B;AAC3B,MAAI,CAACuB,gDAAQ,CAACvB,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,SAASyF,gBAAT,CAA0BzF,KAA1B,EAAiCyB,QAAjC,EAA2C;AACvC,MAAI,CAACD,kDAAU,CAACxB,KAAD,EAAQyB,QAAR,CAAf,EAAkC;AAC9B,QAAIiE,CAAC,GAAG,EAAR;;AACA,QAAInE,gDAAQ,CAACE,QAAD,CAAR,IAAsBC,kDAAU,CAACD,QAAD,CAApC,EAAgD;AAC5CiE,MAAAA,CAAC,GAAGjE,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAG,MAAH,CAAZ;AACH;;AAED,QAAIiE,CAAJ,EAAO;AACHA,MAAAA,CAAC,GAAG,MAAMA,CAAV;AACH;;AAED,UAAM,IAAIjF,SAAJ,CAAc,gCAAgCiF,CAA9C,CAAN;AACH;;AACD,SAAO1F,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,aAAT,CAAuB3F,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,SAAS4F,cAAT,CAAwB5F,KAAxB,EAA+B;AAC3B,MAAI,CAACoB,gDAAQ,CAACpB,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,SAAS6F,gBAAT,CAA0B7F,KAA1B,EAAiC;AAC7B,MAAI,CAAC0B,kDAAU,CAAC1B,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS8F,eAAT,CAAyB9F,KAAzB,EAAgC;AAC5B,MAAI,CAAC2B,iDAAS,CAAC3B,KAAD,CAAd,EAAuB;AACnB,UAAM,IAAIS,SAAJ,CAAc,yBAAd,CAAN;AACH;;AACD,SAAOT,KAAP;AACH;;AAEDxB,gEAAiB,CAAC,eAAD,EAAkB8G,iBAAlB,EAAqCC,eAArC,EAAsDlD,cAAtD,EAAsEmD,cAAtE,EAAsFG,aAAtF,EAAqGE,gBAArG,EAAuHR,gBAAvH,EAAyIS,eAAzI,CAAjB;;;;;;;;;;;;;;;;;ACjaa;AAEb;AACA;AACA;;;;AAEA;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;AA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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;;AACA,SAAS3B,MAAT,CAAgBhG,KAAhB,EAAuB;AACnB,MAAImB,IAAI,GAAI,EAAD,CAAKhC,QAAL,CAAcwE,IAAd,CAAmB3D,KAAnB,EAA0BV,KAA1B,CAAgC,eAAhC,EAAiD,CAAjD,CAAX;;AACA,MAAI,aAAa6B,IAAjB,EAAuB;AACnB,QAAMyG,OAAO,GAAI,2BAAD,CAA8BC,IAA9B,CAAmC7H,KAAK,CAACgH,WAAN,CAAkB7H,QAAlB,EAAnC,CAAhB;AACAgC,IAAAA,IAAI,GAAIyG,OAAO,IAAIA,OAAO,CAAC/H,MAAR,GAAiB,CAA7B,GAAkC+H,OAAO,CAAC,CAAD,CAAzC,GAA+C,EAAtD;AACH;;AACD,SAAOzG,IAAI,CAAC2G,WAAL,EAAP;AACH;;AAEDtJ,gEAAiB,CAAC,eAAD,EAAkBwH,MAAlB,CAAjB;;;;;;;;;;;;;;;;;;;AC1Da;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACO,IAAMzD,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;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AAiDnBtB,gEAAiB,CAAC,cAAD,EAAiBwM,IAAjB,CAAjB;;;;;;;;;;;;;;;;;;;;AC7Ga;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMD;;;;;AACF;AACJ;AACA;AACA;AACI,uBAAYnG,UAAZ,EAAwB;AAAA;;AAAA;;AACpB;AACA,UAAK+G,IAAL,GAAYC,WAAW,CAAChH,UAAD,CAAvB;AACA,UAAKiH,OAAL,GAAe,MAAKF,IAAL,CAAUxH,KAAV,EAAf;AACA,UAAK2H,SAAL,GAAiB,IAAItI,GAAJ,EAAjB;AAJoB;AAMvB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACI,qBAAYtE,IAAZ,EAAkBoE,QAAlB,EAA4B4H,OAA5B,EAAqC;AACjC7I,MAAAA,kEAAc,CAACnD,IAAD,CAAd;AACA2G,MAAAA,oEAAgB,CAACvC,QAAD,CAAhB;;AAEA,UAAI4H,OAAO,KAAK7M,SAAhB,EAA2B;AACvBmH,QAAAA,kEAAc,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IAAMC,YAAY,GAAG,IAArB;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,wBAAwB,GAAG,gBAAjC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,yBAAyB,GAAG,iBAAlC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,aAAa,GAAG,KAAtB;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAGA;AACA;AACA;AACA;AACA;;AACA,IAAMC,sBAAsB,GAAG,cAA/B;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,qBAAqB,GAAG,aAA9B;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,gBAAgB,GAAG,QAAzB;;;;;;;;;;;;;;;;ACzXa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AACA;AACA;AACA;;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA,IAAMG,sBAAsB,GAAG7Y,MAAM,CAAC,kBAAD,CAArC;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;;IACM8Y;;;;;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,sBAAL,IAA+B,MAAKE,eAAL,EAA/B;AACH;;AAEDC,IAAAA,YAAY,CAACtT,IAAb;AAZU;AAcb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;;AAiBI;AACJ;AACA;AACA;AACA;AACA;AACA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ASG,YAAT,GAAwB;AACpB,MAAMlV,IAAI,GAAG,IAAb,CADoB,CAGpB;;AACAA,EAAAA,IAAI,CAAC8U,sEAAD,CAAJ,CAA8B,OAA9B,IAAyC,YAAM;AAC3C9U,IAAAA,IAAI,CAACmW,SAAL,CAAe,OAAf,EAAwBnW,IAAI,CAACkR,YAAL,CAAkB,OAAlB,CAAxB;AACH,GAFD;AAIH;;AAEDzU,gEAAiB,CAAC,aAAD,EAAgBuY,aAAhB,CAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Ua;AAEb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA,IAAMwB,gBAAgB,GAAGta,MAAM,CAAC,kBAAD,CAA/B;AAEA;AACA;AACA;AACA;;AACA,IAAMua,oBAAoB,GAAGva,MAAM,CAAC,sBAAD,CAAnC;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAM4Y,uBAAuB,GAAG5Y,MAAM,CAAC,mBAAD,CAAtC;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;;IACM2Y;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,2BAAc;AAAA;;AAAA;;AACV;AACA,UAAK5Y,yDAAL,IAAuB,IAAI2Q,kEAAJ,CAAkB;AAAC,iBAAW9D,uDAAM,CAAC,EAAD,EAAK,MAAK4N,QAAV,EAAoBC,wBAAwB,CAAC/U,IAAzB,+BAApB;AAAlB,KAAlB,CAAvB;AACA,UAAKkT,uBAAL,IAAgC,EAAhC;AACA8B,IAAAA,kBAAkB,CAAChV,IAAnB;;AACA,UAAK4U,gBAAL;;AALU;AAMb;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;AACH/D,QAAAA,kBAAkB,EAAE,KAAKvB,YAAL,CAAkBuB,8DAAlB,CADjB;AAEHoE,QAAAA,UAAU,EAAE,MAFT;AAGHC,QAAAA,cAAc,EAAE,IAHb;AAIHC,QAAAA,SAAS,EAAE;AACPC,UAAAA,IAAI,EAAE1a;AADC;AAJR,OAAP;AAQH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AA+BI;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAemR,QAAf,EAAyB;AACrB,WAAKxR,yDAAL,EAAqBgb,cAArB,CAAoCxJ,QAApC;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAeA,QAAf,EAAyB;AACrB,WAAKxR,yDAAL,EAAqBib,cAArB,CAAoCzJ,QAApC;AACA,aAAO,IAAP;AACH;AA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;;;;;;;;;;;;;AC1Oa;AAEb;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;;IACMxE;;;;;AACF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,oBAAYqD,QAAZ,EAAsB;AAAA;;AAAA;;AAClB;AACA,QAAMgB,mBAAmB,GAAG/U,mEAAiB,CAAC,qBAAD,CAA7C;AACAlC,IAAAA,oEAAgB,CAACiW,QAAD,EAAWgB,mBAAX,CAAhB;AACA,UAAKhB,QAAL,GAAgBA,QAAhB;AAJkB;AAKrB;AAED;AACJ;AACA;AACA;;;;;WACI,8BAAqB;AACjB,aAAO,KAAKA,QAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,kCAAyB;AACrB,aAAO,KAAKA,QAAL,CAAcD,OAAd,CAAsBzM,SAAtB,CAAgC,IAAhC,CAAP;AACH;;;;EA9BkBlP;AAkCvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsY,oBAAT,CAA8B1J,EAA9B,EAAkCsP,WAAlC,EAA+C;AAC3C3b,EAAAA,kEAAc,CAACqM,EAAD,CAAd;AAEA,MAAM9H,QAAQ,GAAGc,iEAAe,CAAC,UAAD,CAAhC;AACA,MAAMgV,mBAAmB,GAAG/U,mEAAiB,CAAC,qBAAD,CAA7C;AACA,MAAMlB,gBAAgB,GAAGkB,mEAAiB,C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AAOnG,SAAP;AAEH;;AAGDG,gEAAiB,CAAC,aAAD,EAAgBqgB,0BAAhB,EAA4C0D,SAA5C,EAAuDO,eAAvD,CAAjB;;;;;;;;;;;;;;;;;ACvLa;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,SAAShE,WAAT,GAAuB;AAAA;;AACnB,MAAIlY,QAAQ,iBAAGb,2DAAS,EAAZ,+CAAG,WAAc,UAAd,CAAf;;AACA,MAAI,QAAOa,QAAP,MAAoB,QAAxB,EAAkC;AAC9B,UAAM,IAAItI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOsI,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,SAASwc,SAAT,GAAqB;AAAA;;AACjB,MAAIzc,MAAM,kBAAGZ,2DAAS,EAAZ,gDAAG,YAAc,QAAd,CAAb;;AACA,MAAI,QAAOY,MAAP,MAAkB,QAAtB,EAAgC;AAC5B,UAAM,IAAIrI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AAED,SAAOqI,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;AA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WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AAEa;;AAEb;AACA;AACA;AACA;AACA;CAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,IAAII,QAAJ;;AACA,IAAI;AACAA,EAAAA,QAAQ,GAAGpuB,yEAAA,CAA8B,qBAA9B,CAAX;AACH,CAFD,CAEE,OAAO2B,CAAP,EAAU,CAEX;;AAED,IAAI,CAACysB,QAAL,EAAeA,QAAQ,GAAG,SAAX;AAEfpuB,mEAAA,GAA0BouB,QAA1B,IAAsCpuB,mDAAtC","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/types/typeof.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/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/util/trimspaces.js","webpack:///../../../../packages/monster/source/dom/events.js","webpack:///../../../../packages/monster/source/dom/util.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 * @private\n * @type {symbol}\n * @memberOf Monster\n * @since 1.24.0\n */\nconst internalSymbol = Symbol('internalData');\n\n/**\n * @private\n * @type {symbol}\n * @memberOf Monster\n * @since 1.25.0\n */\nconst internalStateSymbol = Symbol('state');\n\n\nexport {\n Monster,\n internalSymbol,\n internalStateSymbol\n}\n\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.29.1/dist/monster.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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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 * @summary The abstract constraint\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/types/base.js';\n * 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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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 * @summary The abstract operator constraint\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.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.29.1/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.29.1/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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 * @summary A and operator constraint\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.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.29.1/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.29.1/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 * @summary A constraint that always invalid\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 * Constraints are used to define conditions that must be met by the value of a variable.\n * \n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.js';\n * 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.29.1/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.29.1/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 * @summary A constraint to check if a value is an array\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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isIterable(null) // ↦ false\n * Monster.Types.isIterable('hello') // ↦ true\n * 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.29.1/dist/modules/types/is.js';\n * isIterable(null) // ↦ false\n * isIterable('hello') // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isPrimitive('2') // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isPrimitive('2')) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isSymbol('2') // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isSymbol(Symbol('a'))) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isBoolean('2') // ↦ false\n * Monster.Types.isBoolean([]) // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isBoolean('2')) // ↦ false\n * isBoolean([])) // ↦ false\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isString('2') // ↦ true\n * 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.29.1/dist/modules/types/is.js';\n * isString('2')) // ↦ true\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isObject('2') // ↦ false\n * Monster.Types.isObject([]) // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isObject('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names.\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.29.1/dist/monster.js';\n * Monster.Types.isInstance('2') // ↦ false\n * Monster.Types.isInstance([]) // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isInstance('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names. \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.29.1/dist/monster.js';\n * Monster.Types.isArray('2') // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isArray('2')) // ↦ false\n * 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 * @see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n */\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\n/**\n * Checks whether the value passed is a function\n * \n * This method is used in the library to have consistent names. \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.29.1/dist/monster.js';\n * Monster.Types.isFunction(()=>{}) // ↦ true\n * Monster.Types.isFunction('2') // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isFunction(()=>{}) // ↦ true\n * isFunction('2')) // ↦ false\n * 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 * This method is used in the library to have consistent names. \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.29.1/dist/monster.js';\n * Monster.Types.isInteger(()=>{}) // ↦ true\n * Monster.Types.isInteger('2') // ↦ false\n * 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.29.1/dist/modules/types/is.js';\n * isInteger(()=>{}) // ↦ true\n * isInteger('2')) // ↦ false\n * 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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.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.29.1/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.29.1/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 * @summary A constraint to check if a value is an object\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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.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.29.1/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.29.1/dist/modules/constraints/valid.js';\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';\n * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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 * @summary A or operator \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 * Constraints are used to define conditions that must be met by the value of a variable.\n *\n * The uniform API of the constraints allows chains to be formed.\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.29.1/dist/monster.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.29.1/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.29.1/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 * @summary A constraint that always valid\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.29.1/dist/monster.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.29.1/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.29.1/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 return assembleParts(subject, selector, filter, function (v, k, m) {\n k = build(v, keyTemplate, k);\n v = build(v, valueTemplate);\n this.set(k, v);\n });\n\n}\n\n/**\n * @private\n * @param {*} subject\n * @param {string|Monster.Data~exampleSelectorCallback} selector\n * @param {Monster.Data~exampleFilterCallback} [filter]\n * @param {function} callback\n * @return {Map}\n * @throws {TypeError} selector is neither a string nor a function\n */\nfunction assembleParts(subject, selector, filter, callback) {\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('selector is neither a string nor a function')\n }\n\n if (!(map instanceof Map)) {\n return result;\n }\n\n map.forEach((v, k, m) => {\n if (isFunction(filter)) {\n if (filter.call(m, v, k) !== true) return;\n }\n\n callback.call(result, v, k, m);\n\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\n try {\n map = finder.getVia(currentPath.join(DELIMITER));\n } catch (e) {\n let a = e;\n map = new Map();\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) && parentMap !== undefined) {\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.29.1/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, assembleParts}\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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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';\nimport {typeOf} from \"../types/typeof.js\";\nimport {validateObject} from \"../types/validate.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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/util/clone.js';\n * clone({})\n * </script>\n * ```\n *\n * @param {*} obj object to be cloned\n * @returns {*}\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 \n validateObject(obj);\n \n const constructor = obj?.['constructor'];\n\n /** Object has clone method */\n if(typeOf(constructor)==='function') {\n const prototype = constructor?.prototype;\n if(typeof prototype==='object') {\n if(prototype.hasOwnProperty('getClone')&& typeOf(obj.getClone) === 'function') {\n return obj.getClone(); \n }\n }\n }\n\n let 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 (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.29.1/dist/monster.js';\n * Monster.Types.getGlobalObject('document') \n * // ↦ { }\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.29.1/dist/modules/types/global.js';\n * getGlobalObject('document') \n * // ↦ { }\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.29.1/dist/monster.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.29.1/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 * @return {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 */\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.29.1/dist/monster.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.29.1/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.29.1/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 {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.29.1/dist/monster.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.29.1/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.29.1/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.29.1/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\n if (check === true) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(subject), current);\n\n if (!subject.hasOwnProperty(current) && descriptor === undefined) {\n throw Error('unknown value');\n }\n\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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/data/diff.js';\n * Diff(a, b)\n * </script>\n * ```\n *\n * @example\n *\n * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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 */\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/data/extend.js';\n * 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} unsupported 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('unsupported 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)&&typeOf(v)==='object') || isArray(v)) {\n\n if (o[k] === undefined) {\n if (isArray(v)) {\n o[k] = [];\n } else {\n o[k] = {};\n }\n } else {\n if (typeOf(o[k]) !== typeOf(v)) {\n throw new Error(\"type mismatch: \" + JSON.stringify(o[k]) + \"(\" + typeOf(o[k]) + \") != \" + JSON.stringify(v) + \"(\" + typeOf(v) + \")\");\n }\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/data/pipe.js';\n * 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.29.1/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 \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, getGlobalObject} 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/data/transformer.js';\n * 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 * | to-base64 | | base64, btob | Converts the value to base64 |\n * | from-base64 | | atob | Converts the value from 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 | value:type | ?? | If the value is undefined the first argument is returned, otherwise the value. The third optional parameter specifies the desired type. If no type is specified, string is used. Valid types are bool, string, int, float, undefined and object. An object default value must be specified as a base64 encoded json string. (since 1.12.0) |\n * | debug | | | the passed value is output (console) and returned |\n * | empty | | | Return empty String \"\" |\n * | first-key | default | | Can be applied to objects and returns the value of the first key. All keys of the object are fetched and sorted. (since 1.23.0) |\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'. If you want to have a space, you also have to write \\\\ in front of the space. |\n * | index | key:default | property, key | Fetches a value from an object, an array, a map or a set |\n * | last-key | default | | Can be applied to objects and returns the value of the last key. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | length | | count | Length of the string or entries of an array or object |\n * | nop | | | Do nothing |\n * | nth-key | index:default | | Can be applied to objects and returns the value of the nth key. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | nth-last-key | index:default | | Can be applied to objects and returns the value of the nth key from behind. All keys of the object are fetched and sorted. (since 1.23.0) |\n * | path | path | | The access to an object is done via a Pathfinder object |\n * | path-exists | path | | Check if the specified path is available in the value (since 1.24.0) |\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.29.1/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 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 escaped\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 * @throws {Error} missing key parameter\n */\nfunction transform(value) {\n\n const console = getGlobalObject('console');\n\n let args = clone(this.args);\n let key, defaultValue;\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 'to-base64':\n case 'btoa':\n case 'base64':\n return btoa(convertToString(value));\n\n case 'atob':\n case 'from-base64':\n return atob(convertToString(value));\n\n case 'empty':\n return '';\n\n case 'undefined':\n return undefined;\n\n case 'debug':\n\n if (isObject(console)) {\n console.log(value);\n }\n\n return value;\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 'first-key':\n case 'last-key':\n case 'nth-last-key':\n case 'nth-key':\n\n if (!isObject(value)) {\n throw new Error(\"type not supported\")\n }\n\n const keys = Object.keys(value).sort()\n\n if (this.command === 'first-key') {\n key = 0;\n } else if (this.command === 'last-key') {\n key = keys.length - 1;\n } else {\n\n key = validateInteger(parseInt(args.shift()));\n\n if (this.command === 'nth-last-key') {\n key = keys.length - key - 1;\n }\n }\n\n defaultValue = (args.shift() || '');\n\n let useKey = keys?.[key];\n\n if (value?.[useKey]) {\n return value?.[useKey];\n }\n\n return defaultValue;\n\n\n case 'key':\n case 'property':\n case 'index':\n\n key = args.shift() || undefined;\n\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n defaultValue = (args.shift() || undefined);\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-exists':\n\n key = args.shift();\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n return new Pathfinder(value).exists(key);\n\n case 'path':\n\n key = args.shift();\n if (key === undefined) {\n throw new Error(\"missing key parameter\")\n }\n\n let pf = new Pathfinder(value);\n\n if (!pf.exists(key)) {\n return undefined;\n }\n\n return pf.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 '??':\n case 'default':\n if (value !== undefined && value !== null) {\n return value;\n }\n\n defaultValue = args.shift();\n let defaultType = args.shift();\n if (defaultType === undefined) {\n defaultType = 'string';\n }\n\n switch (defaultType) {\n case 'int':\n case 'integer':\n return parseInt(defaultValue);\n case 'float':\n return parseFloat(defaultValue);\n case 'undefined':\n return undefined\n case 'bool':\n case 'boolean':\n defaultValue = defaultValue.toLowerCase()\n return ((defaultValue !== 'undefined' && defaultValue !== '' && defaultValue !== 'off' && defaultValue !== 'false' && defaultValue !== 'false') || defaultValue === 'on' || defaultValue === 'true' || defaultValue === 'true');\n case 'string':\n return \"\" + defaultValue;\n case \"object\":\n return JSON.parse(atob(defaultValue));\n }\n\n throw new Error(\"type not supported\")\n\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.29.1/dist/monster.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.29.1/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 * @summary Automatic generation of ids\n */\nclass ID extends Base {\n\n /**\n * create new id with prefix\n *\n * @param {string} prefix\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.29.1/dist/monster.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.29.1/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\";\nimport {extend} from \"../data/extend.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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/types/proxyobserver.js';\n * 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.29.1/dist/modules/types/proxyobserver.js';\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/types/observer.js';\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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 * @since 1.24.0\n * @param {Object} obj\n * @return {Monster.Types.ProxyObserver}\n */\n setSubject(obj) {\n\n let i, k = Object.keys(this.subject);\n for (i = 0; i < k.length; i++) {\n delete this.subject[k[i]];\n }\n\n this.subject = extend(this.subject, obj);\n return this;\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 * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * new Monster.Types.Observer()\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/types/observer.js';\n * new Observer()\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 * new Observer(()=>{\n * // this is not subject\n * })\n *\n * new Observer(function() {\n * // this is subject\n * })\n * ```\n *\n * Additional arguments can be passed to the callback. To do this, simply specify them.\n *\n * ```\n * Observer(function(a, b, c) {\n * console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\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.29.1/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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/types/tokenlist.js';\n * 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 * typeof new TokenList(\"myclass row\")[Symbol.iterator]; \n * // ↦ \"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\", \"types/tokenlist.js\");\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\", \"types/tokenlist.js\");\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/types/uniquequeue.js';\n * 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 create the instance 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.29.1/dist/monster.js';\n * 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 {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/types/queue.js';\n * new Queue()\n * </script>\n * ```\n *\n * @example\n *\n * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.29.1/dist/monster.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.29.1/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 let 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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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 * This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.\n *\n * ```html\n * <div data-my-attribute=\"2\" id=\"2\">\n * <div id=\"1\"></div>\n * </div>\n * ```\n *\n * ```javascript\n * // if no value is specified (undefined), then only the attribute is checked.\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute'); // ↦ node with id 2\n * findClosestByAttribute(document.getElementById('2'),'data-my-attribute'); // ↦ node with id 2\n *\n * // if a value is specified, for example an empty string, then the name and the value are checked.\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute', ''); // ↦ undefined\n * findClosestByAttribute(document.getElementById('1'),'data-my-attribute', '2'); // ↦ node with id 2\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.29.1/dist/monster.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.29.1/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 * @summary find closest node\n */\nfunction findClosestByAttribute(element, key, value) {\n validateInstance(element, getGlobalFunction('HTMLElement'));\n\n if (element.hasAttribute(key)) {\n if (value === undefined) {\n return element;\n }\n\n if (element.getAttribute(key) === value) {\n return element;\n }\n\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/**\n * This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.\n *\n * ```html\n * <div class=\"myclass\" id=\"2\">\n * <div id=\"1\"></div>\n * </div>\n * ```\n *\n * ```javascript\n * // if no value is specified (undefined), then only the attribute is checked.\n * findClosestByClass(document.getElementById('1'),'myclass'); // ↦ node with id 2\n * findClosestByClass(document.getElementById('2'),'myclass'); // ↦ node with id 2\n * ```\n *\n * You can call the method via the monster namespace `new Monster.DOM.findClosestByClass()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * Monster.DOM.findClosestByClass();\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {findClosestByClass} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/attributes.js';\n * findClosestByClass();\n * </script>\n * ```\n *\n * @since 1.27.0\n * @copyright schukai GmbH\n * @memberOf Monster.DOM\n * @param {HTMLElement} element\n * @param {string} className\n * @return {HTMLElement|undefined}\n * @summary find closest node\n */\nfunction findClosestByClass(element, className) {\n validateInstance(element, getGlobalFunction('HTMLElement'));\n\n if (element?.classList?.contains(validateString(className))) {\n return element;\n }\n\n let result = element.closest('.' + className);\n if (result instanceof HTMLElement) {\n return result;\n }\n \n return undefined;\n}\n\n// exports\nassignToNamespace('Monster.DOM', findClosestByClass, 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 findClosestByClass\n}\n","'use strict';\n\nimport {Monster} from '../namespace.js';\n/**\n * @author schukai GmbH\n */\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 * @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 * @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.27.1\n */\nconst ATTRIBUTE_UPDATER_SELECT_THIS = ATTRIBUTE_PREFIX + 'select-this';\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.27.0\n */\nconst ATTRIBUTE_TEMPLATE_PREFIX = ATTRIBUTE_PREFIX + 'template-prefix';\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.24.0\n */\nconst ATTRIBUTE_DISABLED = 'disabled';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.24.0\n */\nconst ATTRIBUTE_VALUE = 'value';\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.24.0\n */\nconst ATTRIBUTE_ERRORMESSAGE = ATTRIBUTE_PREFIX + 'error';\n\n/**\n * @memberOf Monster.DOM\n * @type {symbol}\n * @since 1.24.0\n */\nconst objectUpdaterLinkSymbol = Symbol('monsterUpdater');\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_SCRIPT = 'script';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_STYLE = 'style';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst TAG_LINK = 'link';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\n\nconst ATTRIBUTE_ID = 'id';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\n\nconst ATTRIBUTE_CLASS = 'class';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TITLE = 'title';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SRC = 'src';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_HREF = 'href';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TYPE = 'type';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_NONCE = 'nonce';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TRANSLATE = 'translate';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_TABINDEX = 'tabindex';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SPELLCHECK = 'spellcheck';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_SLOT = 'slot';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_PART = 'part';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_LANG = 'lang';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMTYPE = 'itemtype';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMSCOPE = 'itemscope';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMREF = 'itemref';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMID = 'itemid';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ITEMPROP = 'itemprop';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_IS = 'is';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_INPUTMODE = 'inputmode';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ACCESSKEY = 'accesskey';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_AUTOCAPITALIZE = 'autocapitalize';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_AUTOFOCUS = 'autofocus';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_CONTENTEDITABLE = 'contenteditable';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_DIR = 'dir';\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_DRAGGABLE = 'draggable';\n\n\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_ENTERKEYHINT = 'enterkeyhint';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_EXPORTPARTS = 'exportparts';\n/**\n * @memberOf Monster.DOM\n * @type {string}\n * @since 1.25.0\n */\nconst ATTRIBUTE_HIDDEN = 'hidden';\n\n\nexport {\n Monster,\n ATTRIBUTE_HIDDEN,\n ATTRIBUTE_EXPORTPARTS,\n ATTRIBUTE_ENTERKEYHINT,\n ATTRIBUTE_DRAGGABLE,\n ATTRIBUTE_DIR,\n ATTRIBUTE_CONTENTEDITABLE,\n ATTRIBUTE_AUTOFOCUS,\n ATTRIBUTE_AUTOCAPITALIZE,\n ATTRIBUTE_ACCESSKEY,\n TAG_SCRIPT,\n TAG_LINK,\n ATTRIBUTE_INPUTMODE,\n ATTRIBUTE_IS,\n ATTRIBUTE_ITEMPROP,\n ATTRIBUTE_ITEMID,\n ATTRIBUTE_ITEMREF,\n ATTRIBUTE_ITEMSCOPE,\n TAG_STYLE,\n ATTRIBUTE_ITEMTYPE,\n ATTRIBUTE_HREF,\n ATTRIBUTE_LANG,\n ATTRIBUTE_PART,\n ATTRIBUTE_SLOT,\n ATTRIBUTE_SPELLCHECK,\n ATTRIBUTE_SRC,\n ATTRIBUTE_TABINDEX,\n ATTRIBUTE_TRANSLATE,\n ATTRIBUTE_NONCE,\n ATTRIBUTE_TYPE,\n ATTRIBUTE_TITLE,\n ATTRIBUTE_CLASS,\n ATTRIBUTE_ID,\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 ATTRIBUTE_DISABLED,\n ATTRIBUTE_ERRORMESSAGE,\n ATTRIBUTE_VALUE,\n objectUpdaterLinkSymbol,\n ATTRIBUTE_TEMPLATE_PREFIX,\n ATTRIBUTE_UPDATER_SELECT_THIS\n} ","'use strict';\n\nimport {extend} from \"../data/extend.js\";\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {ATTRIBUTE_VALUE} from \"./constants.js\";\nimport {CustomElement, attributeObserverSymbol} from \"./customelement.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst attachedInternalSymbol = Symbol('attachedInternal');\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 function `document.createElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * document.createElement('monster-')\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[attachedInternalSymbol] = this.attachInternals();\n }\n\n initObserver.call(this);\n\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 const list = super.observedAttributes;\n list.push(ATTRIBUTE_VALUE);\n return list;\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 (!(attachedInternalSymbol in this)) {\n throw new Error('ElementInternals is not supported and a polyfill is necessary');\n }\n\n return this[attachedInternalSymbol];\n}\n\n/**\n * @private\n * @return {object}\n * @this CustomControl\n */\nfunction initObserver() {\n const self = this;\n\n // value\n self[attributeObserverSymbol]['value'] = () => {\n self.setOption('value', self.getAttribute('value'));\n }\n\n}\n\nassignToNamespace('Monster.DOM', CustomControl);\nexport {Monster, CustomControl}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {parseDataURL} from \"../types/dataurl.js\";\nimport {getGlobalObject} from \"../types/global.js\";\nimport {isArray, isFunction, isObject, isString} from \"../types/is.js\";\nimport {Observer} from \"../types/observer.js\";\nimport {ProxyObserver} from \"../types/proxyobserver.js\";\nimport {validateFunction, validateInstance, validateObject, validateString} from \"../types/validate.js\";\nimport {clone} from \"../util/clone.js\";\nimport {addToObjectLink, getLinkedObjects, hasObjectLink} from \"./attributes.js\";\nimport {ATTRIBUTE_DISABLED, ATTRIBUTE_OPTIONS, objectUpdaterLinkSymbol} from \"./constants.js\";\nimport {findDocumentTemplate, Template} from \"./template.js\";\nimport {Updater} from \"./updater.js\";\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 * this symbol holds the attribute observer callbacks. The key is the attribute name.\n * @memberOf Monster.DOM\n * @type {symbol}\n */\nconst attributeObserverSymbol = Symbol('attributeObserver');\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 function `document.createElement()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * document.createElement('monster-')\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[internalSymbol] = new ProxyObserver({'options': extend({}, this.defaults, getOptionsFromAttributes.call(this))});\n this[attributeObserverSymbol] = {};\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, ATTRIBUTE_DISABLED];\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 {boolean} disabled=false Object The Boolean disabled attribute, when present, makes the element not mutable, focusable, or even submitted with the form.\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 * @since 1.8.0\n */\n get defaults() {\n return {\n ATTRIBUTE_DISABLED: this.getAttribute(ATTRIBUTE_DISABLED),\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[internalSymbol].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[internalSymbol].detachObserver(observer)\n return this;\n }\n\n /**\n * @param {Observer} observer\n * @returns {ProxyObserver}\n */\n containsObserver(observer) {\n return this[internalSymbol].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[internalSymbol].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[internalSymbol].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[internalSymbol].getSubject()['options'], self.defaults, options);\n\n return self;\n }\n\n /**\n * Is called once via the constructor\n *\n * @return {CustomElement}\n * @since 1.8.0\n */\n [initMethodSymbol]() {\n return this;\n }\n\n /**\n * Is called once when the object is included in the DOM for the first time.\n *\n * @return {CustomElement}\n * @since 1.8.0\n */\n [assembleMethodSymbol]() {\n\n const self = this;\n let elements, nodeList;\n\n if (self.getOption('shadowMode', false) !== false) {\n try {\n initShadowRoot.call(self);\n elements = self.shadowRoot.childNodes;\n\n } catch (e) {\n\n }\n\n try {\n initCSSStylesheet.call(this);\n } catch (e) {\n\n }\n }\n\n if (!(elements instanceof NodeList)) {\n if (!(elements instanceof NodeList)) {\n initHtmlContent.call(this);\n elements = this.childNodes;\n }\n }\n\n try {\n nodeList = new Set([\n ...elements,\n ...getSlottedElements.call(self)\n ])\n } catch (e) {\n nodeList = elements\n }\n\n assignUpdaterToElement.call(self, nodeList, clone(self[internalSymbol].getRealSubject()['options']));\n return self;\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, objectUpdaterLinkSymbol)) {\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 const callback = self[attributeObserverSymbol]?.[attrName];\n\n if (isFunction(callback)) {\n callback.call(self, newVal, oldVal);\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 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 {String|undefined} query\n * @param {String|undefined|null} name name of the slot (if the parameter is undefined, all slots are searched, if the parameter has the value null, all slots without a name are searched. if a string is specified, the slots with this name are searched.)\n * @return {*}\n * @this CustomElement\n * @since 1.23.0\n * @throws {Error} query must be a string\n */\nfunction getSlottedElements(query, name) {\n const self = this;\n const result = new Set;\n\n if (!(self.shadowRoot instanceof ShadowRoot)) {\n return result;\n }\n\n let selector = 'slot';\n if (name !== undefined) {\n if (name === null) {\n selector += ':not([name])';\n } else {\n selector += '[name=' + validateString(name) + ']';\n }\n\n }\n\n const slots = self.shadowRoot.querySelectorAll(selector);\n\n for (const [, slot] of Object.entries(slots)) {\n slot.assignedElements().forEach(function (node) {\n\n if (!(node instanceof HTMLElement)) return;\n\n if (isString(query)) {\n node.querySelectorAll(query).forEach(function (n) {\n result.add(n);\n });\n\n if (node.matches(query)) {\n result.add(node);\n }\n\n } else if (query !== undefined) {\n throw new Error('query must be a string')\n } else {\n result.add(node);\n }\n })\n }\n\n return result;\n}\n\n/**\n * @this CustomElement\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 let lastDisabledValue = undefined;\n self.attachObserver(new Observer(function () {\n const flag = self.getOption('disabled');\n\n if (flag === lastDisabledValue) {\n return;\n }\n\n lastDisabledValue = flag;\n\n if (!(self.shadowRoot instanceof ShadowRoot)) {\n return;\n }\n\n const query = 'button, command, fieldset, keygen, optgroup, option, select, textarea, input, [data-monster-objectlink]';\n const elements = self.shadowRoot.querySelectorAll(query);\n\n let nodeList;\n try {\n nodeList = new Set([\n ...elements,\n ...getSlottedElements.call(self, query)\n ])\n } catch (e) {\n nodeList = elements\n }\n\n for (const element of [...nodeList]) {\n if (flag === true) {\n element.setAttribute(ATTRIBUTE_DISABLED, '');\n } else {\n element.removeAttribute(ATTRIBUTE_DISABLED);\n }\n }\n\n }));\n\n self.attachObserver(new Observer(function () {\n\n // not initialised\n if (!hasObjectLink(self, objectUpdaterLinkSymbol)) {\n return;\n }\n // inform every element\n const updaters = getLinkedObjects(self, objectUpdaterLinkSymbol);\n\n for (const list of updaters) {\n for (const updater of list) {\n let d = clone(self[internalSymbol].getRealSubject()['options']);\n Object.assign(updater.getSubject(), d);\n }\n }\n\n }));\n\n // disabled\n self[attributeObserverSymbol][ATTRIBUTE_DISABLED] = (newVal) => {\n if (self.hasAttribute(ATTRIBUTE_DISABLED)) {\n self.setOption(ATTRIBUTE_DISABLED, true);\n } else {\n self.setOption(ATTRIBUTE_DISABLED, undefined);\n }\n }\n\n // data-monster-options\n self[attributeObserverSymbol][ATTRIBUTE_OPTIONS] = () => {\n const options = getOptionsFromAttributes.call(self);\n if (isObject(options)) {\n self.setOptions(options);\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\n\n/**\n *\n * @param element\n * @param object\n * @return {Promise[]}\n * @since 1.23.0\n * @memberOf Monster.DOM\n */\nfunction assignUpdaterToElement(elements, object) {\n\n const updaters = new Set;\n\n if (elements instanceof NodeList) {\n elements = new Set([\n ...elements\n ])\n }\n\n let result = [];\n\n elements.forEach((element) => {\n if (!(element instanceof HTMLElement)) return;\n if ((element instanceof HTMLTemplateElement)) return;\n\n const u = new Updater(element, object)\n updaters.add(u);\n\n result.push(u.run().then(() => {\n return u.enableEventProcessing();\n }));\n\n });\n\n if (updaters.size > 0) {\n addToObjectLink(this, objectUpdaterLinkSymbol, updaters);\n }\n\n return result;\n}\n\nassignToNamespace('Monster.DOM', CustomElement, registerCustomElement, assignUpdaterToElement);\nexport {\n Monster,\n registerCustomElement,\n CustomElement,\n initMethodSymbol,\n assembleMethodSymbol,\n assignUpdaterToElement,\n attributeObserverSymbol,\n getSlottedElements\n}\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/types/dataurl.js';\n * 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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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 {ATTRIBUTE_TEMPLATE_PREFIX} from \"./constants.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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/template.js';\n * 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 reads 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/template.js';\n * findDocumentTemplate()\n * </script>\n * ```\n *\n * @example\n *\n * import { findDocumentTemplate } from \"https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/template.js\";\n *\n * const template = document.createElement(\"template\");\n * template.id = \"myTemplate\";\n * template.innerHTML = \"<p>my default template</p>\";\n * document.body.appendChild(template);\n *\n * const themedTemplate = document.createElement(\"template\");\n * themedTemplate.id = \"myTemplate-myTheme\";\n * themedTemplate.innerHTML = \"<p>my themed template</p>\";\n * document.body.appendChild(themedTemplate);\n *\n * // loads the temple and since no theme is set the default template\n * const template1 = findDocumentTemplate(\"myTemplate\");\n * console.log(template1.createDocumentFragment());\n * // ↦ '<p>my default template</p>'\n *\n * // now we set our own theme\n * document\n * .querySelector(\"html\")\n * .setAttribute(\"data-monster-theme-name\", \"myTheme\");\n *\n * // now we don't get the default template,\n * // but the template with the theme in the id\n * const template2 = findDocumentTemplate(\"myTemplate\");\n * console.log(template2.createDocumentFragment());\n * // ↦ '<p>my themed template</p>'\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 const document = getGlobalObject('document');\n const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');\n const DocumentFragment = getGlobalFunction('DocumentFragment');\n const Document = getGlobalFunction('Document');\n\n\n let prefixID;\n\n if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {\n\n if (currentNode instanceof Node) {\n\n if (currentNode.hasAttribute(ATTRIBUTE_TEMPLATE_PREFIX)) {\n prefixID = currentNode.getAttribute(ATTRIBUTE_TEMPLATE_PREFIX)\n }\n\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 = document;\n }\n }\n\n let template;\n let theme = getDocumentTheme()\n\n if (prefixID) {\n let themedPrefixID = prefixID + '-' + id + '-' + theme.getName();\n\n // current + themedPrefixID\n template = currentNode.getElementById(themedPrefixID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + themedPrefixID\n template = document.getElementById(themedPrefixID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n }\n\n let themedID = id + '-' + theme.getName();\n\n // current + themedID\n template = currentNode.getElementById(themedID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + themedID\n template = document.getElementById(themedID);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // current + ID\n template = currentNode.getElementById(id);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\n }\n\n // document + ID\n template = document.getElementById(id);\n if (template instanceof HTMLTemplateElement) {\n return new Template(template);\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.29.1/dist/monster.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.29.1/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.29.1/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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {diff} from \"../data/diff.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {\n ATTRIBUTE_ERRORMESSAGE,\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 ATTRIBUTE_UPDATER_SELECT_THIS\n} from \"../dom/constants.js\";\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 {trimSpaces} from \"../util/trimspaces.js\";\nimport {findTargetElementFromEvent} from \"./events.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 * Changes to attributes are made only when the direct values are changed. If you want to assign changes to other values\n * as well, you have to insert the attribute `data-monster-select-this`. This should be done with care, as it can reduce performance.\n *\n * You can create an object of this class using 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/updater.js';\n * new Updater()\n * </script>\n * ```\n *\n * @example\n *\n * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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 if (subject === undefined) subject = {}\n if (!isInstance(subject, ProxyObserver)) {\n subject = new ProxyObserver(subject);\n }\n\n this[internalSymbol] = {\n element: validateInstance(element, HTMLElement),\n last: {},\n callbacks: new Map(),\n eventTypes: ['keyup', 'click', 'change', 'drop', 'touchend', 'input'],\n subject: subject\n }\n\n this[internalSymbol].callbacks.set('checkstate', getCheckStateCallback.call(this));\n\n this[internalSymbol].subject.attachObserver(new Observer(() => {\n\n const s = this[internalSymbol].subject.getRealSubject();\n\n const diffResult = diff(this[internalSymbol].last, s)\n this[internalSymbol].last = clone(s);\n\n for (const [, change] of Object.entries(diffResult)) {\n removeElement.call(this, change);\n insertElement.call(this, change);\n updateContent.call(this, change);\n updateAttributes.call(this, change);\n }\n }));\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[internalSymbol].eventTypes = validateArray(types);\n return this;\n }\n\n /**\n * With this method, the eventlisteners are hooked in and the magic begins.\n *\n * ```\n * updater.run().then(() => {\n * updater.enableEventProcessing();\n * });\n * ```\n *\n * @since 1.9.0\n * @return {Updater}\n * @throws {Error} the bind argument must start as a value with a path\n */\n enableEventProcessing() {\n this.disableEventProcessing();\n\n for (const type of this[internalSymbol].eventTypes) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n this[internalSymbol].element.addEventListener(type, getControlEventHandler.call(this), {\n capture: true,\n passive: true\n });\n }\n\n return this;\n\n }\n\n /**\n * This method turns off the magic or who loves it more profane it removes the eventListener.\n *\n * @since 1.9.0\n * @return {Updater}\n */\n disableEventProcessing() {\n\n for (const type of this[internalSymbol].eventTypes) {\n this[internalSymbol].element.removeEventListener(type, getControlEventHandler.call(this));\n }\n\n return this;\n\n }\n\n /**\n * The run method must be called for the update to start working.\n * The method ensures that changes are detected.\n *\n * ```\n * updater.run().then(() => {\n * updater.enableEventProcessing();\n * });\n * ```\n *\n * @summary Let the magic begin\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[internalSymbol].last = {'__init__': true};\n return this[internalSymbol].subject.notifyObservers();\n }\n\n /**\n * Gets the values of bound elements and changes them in subject\n *\n * @since 1.27.0\n * @return {Monster.DOM.Updater}\n */\n retrieve() {\n retrieveFromBindings.call(this);\n return this;\n }\n\n /**\n * If you have passed a ProxyObserver in the constructor, you will get the object that the ProxyObserver manages here.\n * However, if you passed a simple object, here you will get a proxy for that object.\n *\n * For changes the ProxyObserver must be used.\n *\n * @since 1.8.0\n * @return {Proxy}\n */\n getSubject() {\n return this[internalSymbol].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[internalSymbol].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 // this is a reference to the current object (therefore no array function here)\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\n return undefined;\n }\n }\n}\n\n/**\n * @private\n */\nconst symbol = Symbol('EventHandler');\n\n/**\n * @private\n * @return {function}\n * @this Updater\n * @throws {Error} the bind argument must start as a value with a path\n */\nfunction getControlEventHandler() {\n\n const self = this;\n\n if (self[symbol]) {\n return self[symbol];\n }\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 = findTargetElementFromEvent(event, ATTRIBUTE_UPDATER_BIND);\n\n if (element === undefined) {\n return;\n }\n\n retrieveAndSetValue.call(self, element);\n\n }\n\n return self[symbol];\n\n\n}\n\n/**\n * @throws {Error} the bind argument must start as a value with a path\n * @param {HTMLElement} element\n * @return void\n * @memberOf Monster.DOM\n * @private\n */\nfunction retrieveAndSetValue(element) {\n\n const self = this;\n\n const pathfinder = new Pathfinder(self[internalSymbol].subject.getSubject());\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[internalSymbol].subject.getRealSubject());\n const pf = new Pathfinder(copy);\n pf.setVia(path, value);\n\n const diffResult = diff(copy, self[internalSymbol].subject.getRealSubject());\n\n if (diffResult.length > 0) {\n pathfinder.setVia(path, value);\n }\n}\n\n/**\n * @since 1.27.0\n * @return void\n * @private\n */\nfunction retrieveFromBindings() {\n const self = this;\n\n if (self[internalSymbol].element.matches('[' + ATTRIBUTE_UPDATER_BIND + ']')) {\n retrieveAndSetValue.call(self, element)\n }\n\n for (const [, element] of self[internalSymbol].element.querySelectorAll('[' + ATTRIBUTE_UPDATER_BIND + ']').entries()) {\n retrieveAndSetValue.call(self, element)\n }\n\n}\n\n/**\n * @private\n * @since 1.8.0\n * @param {object} change\n * @return {void}\n */\nfunction removeElement(change) {\n const self = this;\n\n for (const [, element] of self[internalSymbol].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[internalSymbol].subject.getRealSubject();\n const document = getDocument();\n\n let mem = new WeakSet;\n let wd = 0;\n\n const container = self[internalSymbol].element;\n\n while (true) {\n let found = false;\n wd++;\n\n let p = clone(change?.['path']);\n if (!isArray(p)) return self;\n\n while (p.length > 0) {\n const current = p.join('.');\n\n let iterator = new Set;\n const query = '[' + ATTRIBUTE_UPDATER_INSERT + '*=\"path:' + current + '\"]';\n\n const e = container.querySelectorAll(query);\n\n if (e.length > 0) {\n iterator = new Set(\n [...e]\n )\n }\n\n if (container.matches(query)) {\n iterator.add(container);\n }\n\n for (const [, containerElement] of iterator.entries()) {\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 = trimSpaces(attributes);\n let i = def.indexOf(' ');\n let key = trimSpaces(def.substr(0, i));\n let refPrefix = key + '-';\n let cmd = trimSpaces(def.substr(i));\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 self[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f);\n })\n\n let value\n try {\n containerElement.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n containerElement.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\n\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 try {\n containerElement.removeChild(node);\n } catch (e) {\n containerElement.setAttribute(ATTRIBUTE_ERRORMESSAGE, (containerElement.getAttribute(ATTRIBUTE_ERRORMESSAGE) + \", \" + e.message).trim());\n }\n\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.replaceAll(\"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.replaceAll(\"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[internalSymbol].subject.getRealSubject();\n\n let p = clone(change?.['path']);\n runUpdateContent.call(this, this[internalSymbol].element, p, subject);\n\n const slots = this[internalSymbol].element.querySelectorAll('slot');\n if (slots.length > 0) {\n for (const [, slot] of Object.entries(slots)) {\n for (const [, element] of Object.entries(slot.assignedNodes())) {\n runUpdateContent.call(this, element, p, subject);\n }\n }\n }\n\n\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 if (!(container instanceof HTMLElement)) 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 const query = '[' + ATTRIBUTE_UPDATER_REPLACE + '^=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_REPLACE + '^=\"static:\"]';\n const e = container.querySelectorAll('' + query);\n\n const iterator = new Set([\n ...e\n ])\n\n if (container.matches(query)) {\n iterator.add(container);\n }\n\n /**\n * @type {HTMLElement} element\n */\n for (const [element] of iterator.entries()) {\n\n if (mem.has(element)) return;\n mem.add(element)\n\n const attributes = element.getAttribute(ATTRIBUTE_UPDATER_REPLACE)\n let cmd = trimSpaces(attributes);\n\n let pipe = new Pipe(cmd);\n this[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f);\n })\n\n let value\n try {\n element.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n element.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\n\n if (value instanceof HTMLElement) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n \n try {\n element.appendChild(value);\n } catch (e) {\n element.setAttribute(ATTRIBUTE_ERRORMESSAGE, (element.getAttribute(ATTRIBUTE_ERRORMESSAGE) + \", \" + e.message).trim());\n }\n\n } else {\n element.innerHTML = value;\n }\n\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[internalSymbol].subject.getRealSubject();\n let p = clone(change?.['path']);\n runUpdateAttributes.call(this, this[internalSymbol].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 let iterator = new Set;\n\n const query = '[' + ATTRIBUTE_UPDATER_SELECT_THIS + '], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*=\"path:' + current + '\"], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '^=\"static:\"]';\n\n const e = container.querySelectorAll(query);\n\n if (e.length > 0) {\n iterator = new Set(\n [...e]\n )\n }\n\n if (container.matches(query)) {\n iterator.add(container);\n }\n\n for (const [element] of iterator.entries()) {\n\n if (mem.has(element)) return;\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 = trimSpaces(def);\n let i = def.indexOf(' ');\n let name = trimSpaces(def.substr(0, i));\n let cmd = trimSpaces(def.substr(i));\n\n let pipe = new Pipe(cmd);\n\n self[internalSymbol].callbacks.forEach((f, n) => {\n pipe.setCallback(n, f, element);\n })\n\n let value\n try {\n element.removeAttribute(ATTRIBUTE_ERRORMESSAGE);\n value = pipe.run(subject)\n } catch (e) {\n element.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.message);\n }\n\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 * @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') {\n\n if (value !== undefined) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n\n break;\n\n case 'checkbox':\n\n if (name === 'checked') {\n\n if (value !== undefined) {\n element.checked = true;\n } else {\n element.checked = false;\n }\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 */\n\nimport {assignToNamespace, Monster} from \"../namespace.js\";\nimport {ID} from \"../types/id.js\";\nimport {isObject} from \"../types/is.js\";\nimport {validateString} from \"../types/validate.js\";\n\n/**\n * This special trim function allows to trim spaces that have been protected by a special escape character.\n *\n * You can call the method via the monster namespace `Monster.Util.trimSpaces()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * Monster.Util.trimSpaces(\" hello \")\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {trimSpaces} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/util/trimspaces.js';\n * trimSpaces(' hello \\\\ ')\n * </script>\n * ```\n * \n * Hint: One stroke is escaped by the javascript interpreter, the second stroke escapes the stroke.\n * \n * ```text\n * a\\ b ↦ a b\n * a\\\\ b ↦ a\\ b\n * ```\n * \n * @since 1.24.0\n * @memberOf Monster.Util\n * @copyright schukai GmbH\n * @param {string} value\n * @return {string}\n * @throws {TypeError} value is not a string\n */\nfunction trimSpaces(value) {\n\n validateString(value);\n\n let placeholder = new Map;\n const regex = /((?<pattern>\\\\(?<char>.)){1})/mig;\n\n // The separator for args must be escaped\n // undefined string which should not occur normally and is also not a regex\n let result = value.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 value = value.replace(p, r);\n }\n\n }\n\n value = value.trim();\n placeholder.forEach((v, k) => {\n value = value.replace(k, '\\\\' + v)\n })\n\n return value;\n\n}\n\nassignToNamespace('Monster.Util', trimSpaces);\nexport {Monster, trimSpaces}\n","'use strict';\n\n\n/**\n * @author schukai GmbH\n */\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {isArray,isObject} 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/events.js';\n * 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 * You can call the function via the monster namespace `new Monster.DOM.fireCustomEvent()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * new Monster.DOM.fireCustomEvent()\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {fireCustomEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/events.js';\n * fireCustomEvent()\n * </script>\n * ```\n *\n * @param {HTMLElement|HTMLCollection|NodeList} element\n * @param {string} type\n * @return {void}\n * @since 1.29.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 fireCustomEvent(element, type, detail) {\n\n const document = getDocument();\n\n if (element instanceof HTMLElement) {\n\n if (!isObject(detail)) {\n detail = {detail};\n }\n\n let event = new CustomEvent(validateString(type), {\n bubbles: true,\n cancelable: true,\n detail\n });\n\n element.dispatchEvent(event);\n\n } else if (element instanceof HTMLCollection || element instanceof NodeList) {\n for (let e of element) {\n fireCustomEvent(e, type, detail);\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/events.js';\n * 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\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, fireCustomEvent);\nexport {Monster, findTargetElementFromEvent, fireEvent, fireCustomEvent}\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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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 */\n\nimport {parseLocale} from \"../i18n/locale.js\";\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 * ```html\n * <html lang=\"en\">\n * ```\n *\n * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * 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.29.1/dist/modules/dom/locale.js';\n * 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/i18n/locale.js';\n * 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 * The structure has the following: language, script, region, variants, extlang, privateUse\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/i18n/locale.js';\n * 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/i18n/provider.js';\n * 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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pathfinder} from \"../data/pathfinder.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {Base} from \"./base.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * This is the base class with options from which some monster classes are derived.\n *\n * This class is actually only used as a base class.\n * \n * However, you can also create an instance directly via the monster namespace `new Monster.Types.BaseWithOptions()`.\n *\n * ```html\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';\n * new Monster.Types.BaseWithOptions()\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```html\n * <script type=\"module\">\n * import {BaseWithOptions} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/types/basewithoptions.js';\n * new BaseWithOptions()\n * </script>\n * ```\n * \n * Classes that require the possibility of options can be derived directly from this class.\n * Derived classes almost always override the `defaul` getter with their own values.\n *\n * ```javascript\n * class My extends BaseWithOptions {\n * get defaults() {\n * return Object.assign({}, super.defaults, {\n * mykey: true\n * });\n * } \n * }\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[internalSymbol] = extend({}, this.defaults, validateObject(options));\n\n }\n\n /**\n * This getter provides the options. Derived classes overwrite \n * this getter with their own values. It is good karma to always include \n * the values from the parent class.\n * \n * ```javascript\n * get defaults() {\n * return Object.assign({}, super.defaults, {\n * mykey: true\n * });\n * }\n * \n * ```\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[internalSymbol]).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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/i18n/translations.js';\n * new Translations()\n * </script>\n * ```\n *\n * @example\n *\n * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/translations.js';\n * import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/locale.js';\n *\n * const translation = new Translations(parseLocale('en-GB'));\n *\n * translation.assignTranslations({\n * text1: \"click\",\n * text2: {\n * 'one': 'click once',\n * 'other': 'click n times'\n * }\n * });\n *\n * console.log(translation.getText('text1'));\n * // ↦ click\n *\n * console.log(translation.getPluralRuleText('text2',1));\n * // -> click once\n * console.log(translation.getPluralRuleText('text2',2));\n * // -> click n times\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\nassignToNamespace('Monster.I18n', Translations);\nexport {Monster, Translations}\n","'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../../constants.js\";\nimport {extend} from \"../../data/extend.js\";\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 * 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/i18n/providers/fetch.js';\n * new Fetch()\n * </script>\n * ```\n * \n * @example <caption>das ist ein test</caption>\n * \n * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/providers/fetch.js';\n * \n * // fetch from API\n * const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');\n * // ↦ https://example.com/en.json\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 * @tutorial i18n-locale-and-formatter\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 * The url may contain placeholders (language, script, region, variants, extlang, privateUse), so you can specify one url for all translations.\n * \n * ```\n * new Fetch('https://www.example.com/assets/${language}.json')\n * ```\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[internalSymbol] = 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\n/**\n * @author schukai GmbH\n */\n\nimport {internalSymbol} from \"../constants.js\";\nimport {extend} from \"../data/extend.js\";\nimport {Pipe} from \"../data/pipe.js\";\nimport {assignToNamespace, Monster} from '../namespace.js';\nimport {BaseWithOptions} from \"../types/basewithoptions.js\";\nimport {isObject, isString} from \"../types/is.js\";\nimport {validateArray, validateString} from \"../types/validate.js\";\n\n\n/**\n * @private\n * @type {symbol}\n */\nconst internalObjectSymbol = Symbol('internalObject');\n\n/**\n * @private\n * @type {symbol}\n */\nconst watchdogSymbol = Symbol('watchdog');\n\n/**\n * @private\n * @type {symbol}\n */\nconst markerOpenIndexSymbol = Symbol('markerOpenIndex');\n\n/**\n * @private\n * @type {symbol}\n */\nconst markerCloseIndexSymbol = Symbol('markercloseIndex');\n\n/**\n * @private\n * @type {symbol}\n */\nconst workingDataSymbol = Symbol('workingData');\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 create an instance 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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/text/formatter.js';\n * new Formatter()\n * </script>\n * ```\n *\n * ## Marker in marker\n *\n * Markers can be nested. Here, the inner marker is resolved first `${subkey} ↦ 1 = ${mykey2}` and then the outer marker `${mykey2}`.\n *\n * ```\n * const text = '${mykey${subkey}}';\n * let obj = {\n * mykey2: \"1\",\n * subkey: \"2\"\n * };\n *\n * new Formatter(obj).format(text);\n * // ↦ 1\n * ```\n *\n * ## Callbacks\n *\n * The values in a formatter can be adjusted via the commands of the `Transformer` or the`Pipe`.\n * There is also the possibility to use callbacks.\n *\n * const formatter = new Formatter({x: '1'}, {\n * callbacks: {\n * quote: (value) => {\n * return '\"' + value + '\"'\n * }\n * }\n * });\n *\n * formatter.format('${x | call:quote}'))\n * // ↦ \"1\"\n *\n * ## Marker with parameter\n *\n * A string can also bring its own values. These must then be separated from the key by a separator `::`.\n * The values themselves must be specified in key/value pairs. The key must be separated from the value by a separator `=`.\n *\n * When using a pipe, you must pay attention to the separators.\n *\n * @example\n *\n * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/text/formatter.js';\n *\n * new Formatter({\n * a: {\n * b: {\n * c: \"Hello\"\n * },\n * d: \"world\",\n * }\n * }).format(\"${a.b.c} ${a.d | ucfirst}!\"); // with pipe\n *\n * // ↦ Hello World!\n *\n * @since 1.12.0\n * @copyright schukai GmbH\n * @memberOf Monster.Text\n */\nclass Formatter extends BaseWithOptions {\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, options) {\n super(options);\n this[internalObjectSymbol] = object || {}\n this[markerOpenIndexSymbol] = 0;\n this[markerCloseIndexSymbol] = 0;\n }\n\n /**\n * @property {object} marker\n * @property {array} marker.open=[\"${\"]\n * @property {array} marker.close=[\"${\"]\n * @property {object} parameter\n * @property {string} parameter.delimiter=\"::\"\n * @property {string} parameter.assignment=\"=\"\n * @property {object} callbacks={}\n */\n get defaults() {\n return extend({}, super.defaults, {\n marker: {\n open: ['${'],\n close: ['}']\n },\n parameter: {\n delimiter: '::',\n assignment: '='\n },\n callbacks: {},\n })\n }\n\n\n /**\n * Set new Parameter Character\n *\n * Default values for the chars are `::` and `=`\n *\n * ```\n * formatter.setParameterChars('#');\n * formatter.setParameterChars('[',']');\n * formatter.setParameterChars('i18n{','}');\n * ```\n *\n * @param {string} delimiter\n * @param {string} assignment\n * @return {Formatter}\n * @since 1.24.0\n * @throws {TypeError} value is not a string\n */\n setParameterChars(delimiter, assignment) {\n\n if (delimiter !== undefined) {\n this[internalSymbol]['parameter']['delimiter'] = validateString(delimiter);\n }\n\n if (assignment !== undefined) {\n this[internalSymbol]['parameter']['assignment'] = validateString(assignment);\n }\n\n return this;\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 {array|string} open\n * @param {array|string|undefined} 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 if (isString(open)) open = [open];\n if (isString(close)) close = [close];\n\n this[internalSymbol]['marker']['open'] = validateArray(open);\n this[internalSymbol]['marker']['close'] = validateArray(close);\n return this;\n }\n\n /**\n *\n * @param {string} text\n * @return {string}\n * @throws {TypeError} value is not a string\n * @throws {Error} too deep nesting\n */\n format(text) {\n this[watchdogSymbol] = 0;\n this[markerOpenIndexSymbol] = 0;\n this[markerCloseIndexSymbol] = 0;\n this[workingDataSymbol] = {};\n return format.call(this, text);\n }\n\n}\n\n/**\n * @private\n * @return {string}\n */\nfunction format(text) {\n const self = this;\n\n self[watchdogSymbol]++;\n if (this[watchdogSymbol] > 20) {\n throw new Error('too deep nesting')\n }\n\n let openMarker = self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol]];\n let closeMarker = self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol]];\n\n // contains no placeholders\n if (text.indexOf(openMarker) === -1 || text.indexOf(closeMarker) === -1) {\n return text;\n }\n\n let result = tokenize.call(this, validateString(text), openMarker, closeMarker)\n\n if (self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol] + 1]) {\n this[markerOpenIndexSymbol]++;\n }\n\n if (self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol] + 1]) {\n this[markerCloseIndexSymbol]++;\n }\n\n result = format.call(self, result)\n\n return result;\n}\n\n/**\n * @private\n * @since 1.12.0\n * @param text\n * @return {string}\n */\nfunction tokenize(text, openMarker, closeMarker) {\n const self = this;\n\n let formatted = [];\n\n const parameterAssignment = self[internalSymbol]['parameter']['assignment']\n const parameterDelimiter = self[internalSymbol]['parameter']['delimiter']\n const callbacks = self[internalSymbol]['callbacks'];\n\n while (true) {\n\n let startIndex = text.indexOf(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(openMarker.length).indexOf(closeMarker);\n if (endIndex !== -1) endIndex += openMarker.length;\n let insideStartIndex = text.substring(openMarker.length).indexOf(openMarker);\n if (insideStartIndex !== -1) {\n insideStartIndex += openMarker.length;\n if (insideStartIndex < endIndex) {\n let result = tokenize.call(self, text.substring(insideStartIndex), openMarker, closeMarker);\n text = text.substring(0, insideStartIndex) + result\n endIndex = text.substring(openMarker.length).indexOf(closeMarker);\n if (endIndex !== -1) endIndex += openMarker.length;\n }\n }\n\n if (endIndex === -1) {\n throw new Error(\"syntax error in formatter template\")\n return;\n }\n\n let key = text.substring(openMarker.length, endIndex);\n let parts = key.split(parameterDelimiter);\n let currentPipe = parts.shift();\n\n self[workingDataSymbol] = extend({}, self[internalObjectSymbol], self[workingDataSymbol]);\n\n for (const kv of parts) {\n const [k, v] = kv.split(parameterAssignment);\n self[workingDataSymbol][k] = v;\n }\n\n const t1 = key.split('|').shift().trim(); // pipe symbol\n const t2 = t1.split('::').shift().trim(); // key value delimiter\n const t3 = t2.split('.').shift().trim(); // path delimiter\n let prefix = self[workingDataSymbol]?.[t3] ? 'path:' : 'static:';\n\n let command = \"\";\n if (prefix && key.indexOf(prefix) !== 0\n && key.indexOf('path:') !== 0\n && key.indexOf('static:') !== 0) {\n command = prefix;\n }\n\n command += currentPipe;\n\n const pipe = new Pipe(command);\n\n if (isObject(callbacks)) {\n for (const [name, callback] of Object.entries(callbacks)) {\n pipe.setCallback(name, callback);\n }\n }\n\n formatted.push(validateString(pipe.run(self[workingDataSymbol])));\n\n text = text.substring(endIndex + 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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/logging/logger.js';\n * 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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.js';\n * Monster.Math.random(1,10)\n * // ↦ 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.29.1/dist/modules/math/random.js';\n * random(1,10)\n * // ↦ 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 if (rval < min) {\n rval += min;\n }\n \n return 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.29.1/dist/monster.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.29.1/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.29.1/dist/monster.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.29.1/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.29.1/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.29.1/dist/monster.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.29.1/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.29.1')\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.29.1/dist/monster.js';\n * 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.29.1/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.29.1/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\", \"types/comparator.js\")\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.29.1/dist/monster.js';\n * 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.29.1/dist/modules/util/freeze.js';\n * 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","internalSymbol","Symbol","internalStateSymbol","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","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","assembleParts","v","k","m","build","set","callback","result","Map","map","buildFlatMap","call","forEach","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","typeOf","obj","copy","len","Date","setTime","getTime","Element","HTMLDocument","DocumentFragment","globalContext","window","document","navigator","Proxy","cloneObject","constructor","prototype","getClone","globalReference","globalThis","defineProperty","get","configurable","__monster__","Function","getGlobalObject","getGlobalFunction","results","exec","toLowerCase","Stack","object","wildCard","wildcard","getValueViaPath","setValueViaPath","deleteValueViaPath","iterate","check","entries","anchor","WeakMap","Set","WeakSet","parseInt","WeakRef","descriptor","getOwnPropertyDescriptor","getPrototypeOf","last","pop","subpath","stack","isEmpty","peek","append","assignProperty","delete","data","diff","first","second","doDiff","getKeys","keys","fill","_","concat","typeA","typeB","currPath","currDiff","buildResult","getOperator","operator","isNotEqual","extend","arguments","Transformer","Pipe","pipe","context","t","setCallback","reduce","accumulator","transformer","currentIndex","run","ID","args","disassemble","command","callbacks","transform","apply","regex","g","p","r","replace","trim","convertToString","console","toUpperCase","parse","encodeURIComponent","callbackName","has","unshift","doc","DOMParser","parseFromString","body","textContent","trueStatement","falseStatement","condition","firstchar","charAt","substr","btoa","atob","log","prefix","suffix","sort","useKey","exists","pf","start","end","substring","defaultType","parseFloat","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","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","findClosestByClass","className","classList","DEFAULT_THEME","ATTRIBUTE_PREFIX","ATTRIBUTE_OPTIONS","ATTRIBUTE_THEME_PREFIX","ATTRIBUTE_THEME_NAME","ATTRIBUTE_UPDATER_ATTRIBUTES","ATTRIBUTE_UPDATER_SELECT_THIS","ATTRIBUTE_UPDATER_REPLACE","ATTRIBUTE_UPDATER_INSERT","ATTRIBUTE_UPDATER_INSERT_REFERENCE","ATTRIBUTE_UPDATER_REMOVE","ATTRIBUTE_UPDATER_BIND","ATTRIBUTE_TEMPLATE_PREFIX","ATTRIBUTE_ROLE","ATTRIBUTE_DISABLED","ATTRIBUTE_VALUE","ATTRIBUTE_ERRORMESSAGE","objectUpdaterLinkSymbol","TAG_SCRIPT","TAG_STYLE","TAG_LINK","ATTRIBUTE_ID","ATTRIBUTE_CLASS","ATTRIBUTE_TITLE","ATTRIBUTE_SRC","ATTRIBUTE_HREF","ATTRIBUTE_TYPE","ATTRIBUTE_NONCE","ATTRIBUTE_TRANSLATE","ATTRIBUTE_TABINDEX","ATTRIBUTE_SPELLCHECK","ATTRIBUTE_SLOT","ATTRIBUTE_PART","ATTRIBUTE_LANG","ATTRIBUTE_ITEMTYPE","ATTRIBUTE_ITEMSCOPE","ATTRIBUTE_ITEMREF","ATTRIBUTE_ITEMID","ATTRIBUTE_ITEMPROP","ATTRIBUTE_IS","ATTRIBUTE_INPUTMODE","ATTRIBUTE_ACCESSKEY","ATTRIBUTE_AUTOCAPITALIZE","ATTRIBUTE_AUTOFOCUS","ATTRIBUTE_CONTENTEDITABLE","ATTRIBUTE_DIR","ATTRIBUTE_DRAGGABLE","ATTRIBUTE_ENTERKEYHINT","ATTRIBUTE_EXPORTPARTS","ATTRIBUTE_HIDDEN","CustomElement","attributeObserverSymbol","attachedInternalSymbol","CustomControl","attachInternals","initObserver","getInternal","labels","getTag","validity","validationMessage","willValidate","states","form","state","setFormValue","flags","message","setValidity","checkValidity","reportValidity","list","setOption","parseDataURL","findDocumentTemplate","Template","Updater","initMethodSymbol","assembleMethodSymbol","defaults","getOptionsFromAttributes","initOptionObserver","shadowMode","delegatesFocus","templates","main","attachObserver","detachObserver","containsObserver","getRealSubject","getSubject","setVia","options","parseOptionsJSON","elements","nodeList","getOption","initShadowRoot","shadowRoot","childNodes","initCSSStylesheet","NodeList","initHtmlContent","getSlottedElements","assignUpdaterToElement","attrName","oldVal","newVal","node","containChildNode","Node","ShadowRoot","query","slots","querySelectorAll","slot","assignedElements","matches","lastDisabledValue","flag","removeAttribute","updaters","updater","d","assign","setOptions","dataUrl","content","template","appendChild","createDocumentFragment","html","innerHTML","styleSheet","getCSSStyleSheet","CSSStyleSheet","adoptedStyleSheets","style","createElement","innerText","attachShadow","mode","registerCustomElement","define","HTMLTemplateElement","u","enableEventProcessing","MediaType","parseMediaType","internal","DataUrl","mediatype","base64","dataurl","mediatypeAndBase64","base64Flag","endsWith","lastIndexOf","decodeURIComponent","subtype","parameter","startsWith","parseParameter","entry","kv","getDocumentTheme","currentNode","Document","prefixID","getRootNode","ownerDocument","theme","themedPrefixID","getName","getElementById","themedID","Theme","querySelector","trimSpaces","findTargetElementFromEvent","getDocument","eventTypes","getCheckStateCallback","diffResult","change","removeElement","insertElement","updateContent","updateAttributes","types","disableEventProcessing","addEventListener","getControlEventHandler","capture","passive","removeEventListener","notifyObservers","retrieveFromBindings","HTMLInputElement","HTMLOptionElement","event","retrieveAndSetValue","pathfinder","checked","HTMLTextAreaElement","HTMLSelectElement","selectedOptions","parentNode","removeChild","mem","wd","container","found","containerElement","attributes","def","refPrefix","cmd","dataPath","insertPoint","hasChildNodes","lastChild","available","ref","refElement","appendNewDocumentFragment","nodes","applyRecursive","child","runUpdateContent","assignedNodes","firstChild","runUpdateAttributes","handleInputControlAttributeUpdate","opt","selected","selectedIndex","fireEvent","click","Event","bubbles","cancelable","dispatchEvent","HTMLCollection","fireCustomEvent","detail","CustomEvent","attributeName","attributeValue","composedPath","getWindow","getDocumentFragmentFromString","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","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","internalObjectSymbol","watchdogSymbol","markerOpenIndexSymbol","markerCloseIndexSymbol","workingDataSymbol","marker","open","close","delimiter","assignment","openMarker","closeMarker","tokenize","formatted","parameterAssignment","parameterDelimiter","startIndex","endIndex","insideStartIndex","currentPipe","t1","t2","t3","LogEntry","ALL","DEBUG","ERROR","FATAL","INFO","OFF","TRACE","WARN","Handler","loglevel","getLogLevel","setLogLevel","Logger","triggerLog","level","label","logger","ConsoleHandler","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","Types"],"sourceRoot":""}