@schukai/monster 3.51.4 → 3.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/CHANGELOG.md +706 -0
  2. package/README.md +16 -13
  3. package/example/components/form/button.mjs +10 -0
  4. package/example/components/form/select.mjs +25 -0
  5. package/example/components/form/tree-select.mjs +27 -0
  6. package/example/components/host/host.mjs +0 -0
  7. package/example/components/notify/message.mjs +4 -0
  8. package/example/components/notify/notify.mjs +4 -0
  9. package/example/components/state/log.mjs +0 -0
  10. package/example/components/state/state.mjs +0 -0
  11. package/package.json +6 -2
  12. package/source/components/constants.mjs +132 -0
  13. package/source/components/datatable/columnbar.mjs +310 -0
  14. package/source/components/datatable/constants.mjs +121 -0
  15. package/source/components/datatable/dataset.mjs +219 -0
  16. package/source/components/datatable/datasource/dom.mjs +186 -0
  17. package/source/components/datatable/datasource/namespace.mjs +13 -0
  18. package/source/components/datatable/datasource/rest.mjs +400 -0
  19. package/source/components/datatable/datasource.mjs +102 -0
  20. package/source/components/datatable/datatable/header.mjs +268 -0
  21. package/source/components/datatable/datatable/namespace.mjs +13 -0
  22. package/source/components/datatable/datatable.mjs +789 -0
  23. package/source/components/datatable/embedded-pagination.mjs +113 -0
  24. package/source/components/datatable/filter/abstract-base.mjs +31 -0
  25. package/source/components/datatable/filter/date-range.mjs +1041 -0
  26. package/source/components/datatable/filter/input.mjs +175 -0
  27. package/source/components/datatable/filter/namespace.mjs +13 -0
  28. package/source/components/datatable/filter/range.mjs +671 -0
  29. package/source/components/datatable/filter/select.mjs +65 -0
  30. package/source/components/datatable/filter/settings.mjs +116 -0
  31. package/source/components/datatable/filter-button.mjs +98 -0
  32. package/source/components/datatable/filter.mjs +929 -0
  33. package/source/components/datatable/namespace.mjs +11 -0
  34. package/source/components/datatable/pagination.mjs +456 -0
  35. package/source/components/datatable/style/column-bar.pcss +123 -0
  36. package/source/components/datatable/style/dataset.pcss +13 -0
  37. package/source/components/datatable/style/datasource.pcss +16 -0
  38. package/source/components/datatable/style/datatable.pcss +239 -0
  39. package/source/components/datatable/style/embedded-pagination.pcss +101 -0
  40. package/source/components/datatable/style/filter-button.pcss +22 -0
  41. package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
  42. package/source/components/datatable/style/filter-date-range.pcss +9 -0
  43. package/source/components/datatable/style/filter-range.pcss +5 -0
  44. package/source/components/datatable/style/filter.pcss +156 -0
  45. package/source/components/datatable/style/pagination.pcss +59 -0
  46. package/source/components/datatable/style/select-filter.pcss +27 -0
  47. package/source/components/datatable/stylesheet/column-bar.mjs +33 -0
  48. package/source/components/datatable/stylesheet/dataset.mjs +33 -0
  49. package/source/components/datatable/stylesheet/datasource.mjs +33 -0
  50. package/source/components/datatable/stylesheet/datatable.mjs +33 -0
  51. package/source/components/datatable/stylesheet/embedded-pagination.mjs +33 -0
  52. package/source/components/datatable/stylesheet/filter-button.mjs +33 -0
  53. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +33 -0
  54. package/source/components/datatable/stylesheet/filter-date-range.mjs +33 -0
  55. package/source/components/datatable/stylesheet/filter-range.mjs +33 -0
  56. package/source/components/datatable/stylesheet/filter.mjs +33 -0
  57. package/source/components/datatable/stylesheet/namespace.mjs +13 -0
  58. package/source/components/datatable/stylesheet/pagination.mjs +33 -0
  59. package/source/components/datatable/stylesheet/select-filter.mjs +33 -0
  60. package/source/components/datatable/util.mjs +60 -0
  61. package/source/components/form/action-button.mjs +262 -0
  62. package/source/components/form/api-button.mjs +515 -0
  63. package/source/components/form/button-bar.mjs +739 -0
  64. package/source/components/form/button.mjs +350 -0
  65. package/source/components/form/confirm-button.mjs +330 -0
  66. package/source/components/form/constants.mjs +111 -0
  67. package/source/components/form/context-help.mjs +123 -0
  68. package/source/components/form/events.mjs +84 -0
  69. package/source/components/form/form.mjs +601 -0
  70. package/source/components/form/message-state-button.mjs +396 -0
  71. package/source/components/form/namespace.mjs +13 -0
  72. package/source/components/form/popper-button.mjs +435 -0
  73. package/source/components/form/popper.mjs +487 -0
  74. package/source/components/form/reload.mjs +360 -0
  75. package/source/components/form/select.mjs +2314 -0
  76. package/source/components/form/shadow-reload.mjs +137 -0
  77. package/source/components/form/state-button.mjs +182 -0
  78. package/source/components/form/style/action-button.pcss +41 -0
  79. package/source/components/form/style/api-button.pcss +0 -0
  80. package/source/components/form/style/button-bar.pcss +51 -0
  81. package/source/components/form/style/button.pcss +8 -0
  82. package/source/components/form/style/confirm-button.pcss +17 -0
  83. package/source/components/form/style/context-help.pcss +16 -0
  84. package/source/components/form/style/form.pcss +10 -0
  85. package/source/components/form/style/message-state-button.pcss +10 -0
  86. package/source/components/form/style/popper-button.pcss +16 -0
  87. package/source/components/form/style/popper.pcss +8 -0
  88. package/source/components/form/style/select.pcss +265 -0
  89. package/source/components/form/style/state-button.pcss +116 -0
  90. package/source/components/form/style/tabs.pcss +170 -0
  91. package/source/components/form/style/tree-select.pcss +81 -0
  92. package/source/components/form/stylesheet/action-button.mjs +33 -0
  93. package/source/components/form/stylesheet/api-button.mjs +33 -0
  94. package/source/components/form/stylesheet/button-bar.mjs +33 -0
  95. package/source/components/form/stylesheet/button.mjs +33 -0
  96. package/source/components/form/stylesheet/confirm-button.mjs +33 -0
  97. package/source/components/form/stylesheet/context-help.mjs +33 -0
  98. package/source/components/form/stylesheet/form.mjs +33 -0
  99. package/source/components/form/stylesheet/message-state-button.mjs +33 -0
  100. package/source/components/form/stylesheet/namespace.mjs +13 -0
  101. package/source/components/form/stylesheet/popper-button.mjs +33 -0
  102. package/source/components/form/stylesheet/popper.mjs +33 -0
  103. package/source/components/form/stylesheet/select.mjs +33 -0
  104. package/source/components/form/stylesheet/state-button.mjs +33 -0
  105. package/source/components/form/stylesheet/tabs.mjs +33 -0
  106. package/source/components/form/stylesheet/tree-select.mjs +33 -0
  107. package/source/components/form/tabs.mjs +1011 -0
  108. package/source/components/form/template.mjs +373 -0
  109. package/source/components/form/tree-select.mjs +527 -0
  110. package/source/components/form/types/namespace.mjs +13 -0
  111. package/source/components/form/types/state.mjs +93 -0
  112. package/source/components/form/util/fetch.mjs +133 -0
  113. package/source/components/form/util/floating-ui.mjs +245 -0
  114. package/source/components/form/util/namespace.mjs +13 -0
  115. package/source/components/form/util/popper.mjs +49 -0
  116. package/source/components/host/call-button.mjs +236 -0
  117. package/source/components/host/collapse.mjs +526 -0
  118. package/source/components/host/config-manager.mjs +304 -0
  119. package/source/components/host/constants.mjs +18 -0
  120. package/source/components/host/details.mjs +268 -0
  121. package/source/components/host/events.mjs +131 -0
  122. package/source/components/host/host.mjs +420 -0
  123. package/source/components/host/namespace.mjs +13 -0
  124. package/source/components/host/overlay.mjs +339 -0
  125. package/source/components/host/style/call-button.pcss +36 -0
  126. package/source/components/host/style/collapse.pcss +67 -0
  127. package/source/components/host/style/config-manager.pcss +5 -0
  128. package/source/components/host/style/details.pcss +68 -0
  129. package/source/components/host/style/host.pcss +43 -0
  130. package/source/components/host/style/overlay.pcss +73 -0
  131. package/source/components/host/style/toggle-button.pcss +36 -0
  132. package/source/components/host/style/viewer.pcss +13 -0
  133. package/source/components/host/stylesheet/call-button.mjs +33 -0
  134. package/source/components/host/stylesheet/collapse.mjs +33 -0
  135. package/source/components/host/stylesheet/config-manager.mjs +33 -0
  136. package/source/components/host/stylesheet/details.mjs +33 -0
  137. package/source/components/host/stylesheet/host.mjs +33 -0
  138. package/source/components/host/stylesheet/namespace.mjs +13 -0
  139. package/source/components/host/stylesheet/overlay.mjs +33 -0
  140. package/source/components/host/stylesheet/toggle-button.mjs +33 -0
  141. package/source/components/host/stylesheet/viewer.mjs +33 -0
  142. package/source/components/host/toggle-button.mjs +88 -0
  143. package/source/components/host/util.mjs +23 -0
  144. package/source/components/host/viewer.mjs +309 -0
  145. package/source/components/namespace.mjs +14 -0
  146. package/source/components/notify/constants.mjs +15 -0
  147. package/source/components/notify/events.mjs +15 -0
  148. package/source/components/notify/message.mjs +374 -0
  149. package/source/components/notify/namespace.mjs +15 -0
  150. package/source/components/notify/notify.mjs +236 -0
  151. package/source/components/notify/style/message.pcss +57 -0
  152. package/source/components/notify/style/notify.pcss +118 -0
  153. package/source/components/notify/stylesheet/message.mjs +33 -0
  154. package/source/components/notify/stylesheet/namespace.mjs +15 -0
  155. package/source/components/notify/stylesheet/notify.mjs +33 -0
  156. package/source/components/state/log/entry.mjs +126 -0
  157. package/source/components/state/log/namespace.mjs +13 -0
  158. package/source/components/state/log.mjs +275 -0
  159. package/source/components/state/namespace.mjs +13 -0
  160. package/source/components/state/state.mjs +131 -0
  161. package/source/components/state/style/log.pcss +111 -0
  162. package/source/components/state/style/state.pcss +113 -0
  163. package/source/components/state/stylesheet/log.mjs +33 -0
  164. package/source/components/state/stylesheet/state.mjs +33 -0
  165. package/source/components/style/badge.pcss +92 -0
  166. package/source/components/style/border.pcss +77 -0
  167. package/source/components/style/button.pcss +105 -0
  168. package/source/components/style/card.pcss +108 -0
  169. package/source/components/style/color.pcss +257 -0
  170. package/source/components/style/common.pcss +103 -0
  171. package/source/components/style/control.pcss +11 -0
  172. package/source/components/style/data-grid.pcss +43 -0
  173. package/source/components/style/display.pcss +42 -0
  174. package/source/components/style/floating-ui.pcss +33 -0
  175. package/source/components/style/form.pcss +5 -0
  176. package/source/components/style/host.pcss +15 -0
  177. package/source/components/style/link.pcss +63 -0
  178. package/source/components/style/mixin/badge.pcss +18 -0
  179. package/source/components/style/mixin/button.pcss +54 -0
  180. package/source/components/style/mixin/form.pcss +247 -0
  181. package/source/components/style/mixin/hover.pcss +8 -0
  182. package/source/components/style/mixin/media.pcss +107 -0
  183. package/source/components/style/mixin/property.pcss +288 -0
  184. package/source/components/style/mixin/skeleton.pcss +26 -0
  185. package/source/components/style/mixin/spinner.pcss +24 -0
  186. package/source/components/style/mixin/typography.pcss +52 -0
  187. package/source/components/style/normalize.pcss +14 -0
  188. package/source/components/style/popper.pcss +78 -0
  189. package/source/components/style/property.pcss +17 -0
  190. package/source/components/style/ripple.pcss +14 -0
  191. package/source/components/style/skeleton.pcss +28 -0
  192. package/source/components/style/space.pcss +47 -0
  193. package/source/components/style/spinner.pcss +6 -0
  194. package/source/components/style/table.pcss +46 -0
  195. package/source/components/style/theme.pcss +119 -0
  196. package/source/components/style/typography.pcss +131 -0
  197. package/source/components/stylesheet/badge.mjs +33 -0
  198. package/source/components/stylesheet/border.mjs +33 -0
  199. package/source/components/stylesheet/button.mjs +33 -0
  200. package/source/components/stylesheet/card.mjs +33 -0
  201. package/source/components/stylesheet/color.mjs +33 -0
  202. package/source/components/stylesheet/common.mjs +33 -0
  203. package/source/components/stylesheet/control.mjs +33 -0
  204. package/source/components/stylesheet/data-grid.mjs +33 -0
  205. package/source/components/stylesheet/display.mjs +33 -0
  206. package/source/components/stylesheet/floating-ui.mjs +33 -0
  207. package/source/components/stylesheet/form.mjs +33 -0
  208. package/source/components/stylesheet/host.mjs +33 -0
  209. package/source/components/stylesheet/link.mjs +33 -0
  210. package/source/components/stylesheet/namespace.mjs +13 -0
  211. package/source/components/stylesheet/normalize.mjs +33 -0
  212. package/source/components/stylesheet/popper.mjs +33 -0
  213. package/source/components/stylesheet/property.mjs +33 -0
  214. package/source/components/stylesheet/ripple.mjs +33 -0
  215. package/source/components/stylesheet/skeleton.mjs +33 -0
  216. package/source/components/stylesheet/space.mjs +33 -0
  217. package/source/components/stylesheet/spinner.mjs +33 -0
  218. package/source/components/stylesheet/table.mjs +33 -0
  219. package/source/components/stylesheet/theme.mjs +33 -0
  220. package/source/components/stylesheet/tree-menu.mjs +33 -0
  221. package/source/components/stylesheet/typography.mjs +33 -0
  222. package/source/components/tree-menu/namespace.mjs +13 -0
  223. package/source/components/tree-menu/style/tree-menu.pcss +107 -0
  224. package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
  225. package/source/components/tree-menu/stylesheet/tree-menu.mjs +33 -0
  226. package/source/components/tree-menu/tree-menu.mjs +660 -0
  227. package/source/constraints/abstract.mjs +17 -24
  228. package/source/constraints/abstractoperator.mjs +27 -22
  229. package/source/constraints/andoperator.mjs +20 -17
  230. package/source/constraints/invalid.mjs +17 -17
  231. package/source/constraints/isarray.mjs +20 -20
  232. package/source/constraints/isobject.mjs +20 -20
  233. package/source/constraints/oroperator.mjs +45 -45
  234. package/source/constraints/valid.mjs +17 -17
  235. package/source/data/buildmap.mjs +108 -103
  236. package/source/data/buildtree.mjs +59 -57
  237. package/source/data/datasource/dom.mjs +80 -84
  238. package/source/data/datasource/namespace.mjs +1 -1
  239. package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
  240. package/source/data/datasource/server/restapi/writeerror.mjs +34 -32
  241. package/source/data/datasource/server/restapi.mjs +176 -177
  242. package/source/data/datasource/server/webconnect.mjs +150 -156
  243. package/source/data/datasource/server.mjs +58 -59
  244. package/source/data/datasource/storage/localstorage.mjs +25 -24
  245. package/source/data/datasource/storage/sessionstorage.mjs +28 -25
  246. package/source/data/datasource/storage.mjs +74 -73
  247. package/source/data/datasource.mjs +176 -167
  248. package/source/data/diff.mjs +98 -97
  249. package/source/data/extend.mjs +42 -42
  250. package/source/data/pathfinder.mjs +301 -288
  251. package/source/data/pipe.mjs +36 -36
  252. package/source/data/transformer.mjs +742 -726
  253. package/source/dom/assembler.mjs +44 -44
  254. package/source/dom/attributes.mjs +142 -122
  255. package/source/dom/constants.mjs +62 -58
  256. package/source/dom/customcontrol.mjs +299 -299
  257. package/source/dom/customelement.mjs +843 -806
  258. package/source/dom/dimension.mjs +56 -46
  259. package/source/dom/events.mjs +74 -69
  260. package/source/dom/focusmanager.mjs +175 -175
  261. package/source/dom/locale.mjs +28 -28
  262. package/source/dom/ready.mjs +13 -13
  263. package/source/dom/resource/data.mjs +117 -111
  264. package/source/dom/resource/link/stylesheet.mjs +16 -16
  265. package/source/dom/resource/link.mjs +94 -96
  266. package/source/dom/resource/script.mjs +72 -74
  267. package/source/dom/resource.mjs +174 -172
  268. package/source/dom/resourcemanager.mjs +152 -156
  269. package/source/dom/slotted.mjs +78 -80
  270. package/source/dom/template.mjs +126 -112
  271. package/source/dom/theme.mjs +35 -35
  272. package/source/dom/updater.mjs +673 -651
  273. package/source/dom/util/extract-keys.mjs +34 -22
  274. package/source/dom/util/init-options-from-attributes.mjs +46 -38
  275. package/source/dom/util/namespace.mjs +13 -0
  276. package/source/dom/util/set-option-from-attribute.mjs +35 -29
  277. package/source/dom/util.mjs +112 -81
  278. package/source/dom/worker/factory.mjs +83 -83
  279. package/source/i18n/formatter.mjs +75 -73
  280. package/source/i18n/locale.mjs +146 -144
  281. package/source/i18n/provider.mjs +70 -64
  282. package/source/i18n/providers/embed.mjs +136 -127
  283. package/source/i18n/providers/fetch.mjs +84 -76
  284. package/source/i18n/translations.mjs +205 -195
  285. package/source/logging/handler/console.mjs +36 -36
  286. package/source/logging/handler.mjs +140 -140
  287. package/source/logging/logentry.mjs +25 -25
  288. package/source/logging/logger.mjs +177 -175
  289. package/source/math/random.mjs +63 -59
  290. package/source/monster.mjs +226 -217
  291. package/source/net/webconnect/message.mjs +31 -31
  292. package/source/net/webconnect.mjs +278 -271
  293. package/source/text/bracketed-key-value-hash.mjs +182 -179
  294. package/source/text/formatter.mjs +235 -210
  295. package/source/text/generate-range-comparison-expression.mjs +56 -34
  296. package/source/text/namespace.mjs +1 -1
  297. package/source/types/base.mjs +69 -61
  298. package/source/types/basewithoptions.mjs +46 -46
  299. package/source/types/binary.mjs +20 -20
  300. package/source/types/dataurl.mjs +96 -90
  301. package/source/types/global.mjs +45 -39
  302. package/source/types/id.mjs +25 -25
  303. package/source/types/internal.mjs +115 -114
  304. package/source/types/is.mjs +56 -40
  305. package/source/types/mediatype.mjs +119 -119
  306. package/source/types/namespace.mjs +1 -1
  307. package/source/types/node.mjs +160 -150
  308. package/source/types/nodelist.mjs +94 -96
  309. package/source/types/noderecursiveiterator.mjs +50 -50
  310. package/source/types/observablequeue.mjs +73 -73
  311. package/source/types/observer.mjs +104 -104
  312. package/source/types/observerlist.mjs +66 -66
  313. package/source/types/proxyobserver.mjs +210 -210
  314. package/source/types/queue.mjs +63 -63
  315. package/source/types/randomid.mjs +13 -13
  316. package/source/types/regex.mjs +3 -1
  317. package/source/types/stack.mjs +64 -64
  318. package/source/types/tokenlist.mjs +206 -205
  319. package/source/types/typeof.mjs +12 -10
  320. package/source/types/uniquequeue.mjs +48 -48
  321. package/source/types/uuid.mjs +32 -32
  322. package/source/types/validate.mjs +67 -67
  323. package/source/types/version.mjs +115 -105
  324. package/source/util/clone.mjs +103 -91
  325. package/source/util/comparator.mjs +97 -97
  326. package/source/util/deadmansswitch.mjs +40 -44
  327. package/source/util/freeze.mjs +10 -9
  328. package/source/util/namespace.mjs +1 -1
  329. package/source/util/processing.mjs +104 -105
  330. package/source/util/runtime.mjs +56 -44
  331. package/source/util/trimspaces.mjs +24 -24
  332. package/test/cases/components/form/button.mjs +122 -0
  333. package/test/cases/components/form/confirm-button.mjs +127 -0
  334. package/test/cases/components/form/form.mjs +317 -0
  335. package/test/cases/components/form/reload.mjs +188 -0
  336. package/test/cases/components/form/select.mjs +229 -0
  337. package/test/cases/components/form/state-button.mjs +130 -0
  338. package/test/cases/components/form/tabs.mjs +98 -0
  339. package/test/cases/components/form/template.mjs +189 -0
  340. package/test/cases/components/form/tree-select.mjs +216 -0
  341. package/test/cases/components/host/details.mjs +68 -0
  342. package/test/cases/components/host/host.mjs +70 -0
  343. package/test/cases/components/host/overlay.mjs +60 -0
  344. package/test/cases/components/host/util.mjs +79 -0
  345. package/test/cases/components/notify/message.mjs +39 -0
  346. package/test/cases/components/notify/notify.mjs +89 -0
  347. package/test/cases/constraint/abstractoperator.mjs +2 -2
  348. package/test/cases/constraint/andoperator.mjs +3 -3
  349. package/test/cases/constraint/invalid.mjs +1 -1
  350. package/test/cases/constraint/isarray.mjs +1 -1
  351. package/test/cases/constraint/isobject.mjs +1 -1
  352. package/test/cases/constraint/oroperator.mjs +3 -3
  353. package/test/cases/constraint/valid.mjs +1 -1
  354. package/test/cases/data/buildmap.mjs +1 -1
  355. package/test/cases/data/buildtree.mjs +2 -2
  356. package/test/cases/data/datasource/dom.mjs +1 -1
  357. package/test/cases/data/datasource/server/restapi.mjs +2 -2
  358. package/test/cases/data/datasource/server/websocket.mjs +1 -1
  359. package/test/cases/data/datasource/server.mjs +1 -1
  360. package/test/cases/data/datasource/storage/localstorage.mjs +1 -1
  361. package/test/cases/data/datasource/storage/sessionstorage.mjs +1 -1
  362. package/test/cases/data/datasource.mjs +1 -1
  363. package/test/cases/data/diff.mjs +2 -2
  364. package/test/cases/data/extend.mjs +1 -1
  365. package/test/cases/data/pathfinder.mjs +1 -1
  366. package/test/cases/data/pipe.mjs +2 -2
  367. package/test/cases/data/transformer.mjs +3 -4
  368. package/test/cases/dom/assembler.mjs +1 -1
  369. package/test/cases/dom/attributes.mjs +1 -1
  370. package/test/cases/dom/customcontrol.mjs +8 -7
  371. package/test/cases/dom/customelement-initfromscripthost.mjs +6 -6
  372. package/test/cases/dom/customelement.mjs +7 -7
  373. package/test/cases/dom/dimension.mjs +4 -4
  374. package/test/cases/dom/events.mjs +1 -1
  375. package/test/cases/dom/find.mjs +1 -1
  376. package/test/cases/dom/focusmanager.mjs +1 -1
  377. package/test/cases/dom/locale.mjs +2 -2
  378. package/test/cases/dom/ready.mjs +1 -1
  379. package/test/cases/dom/resource/data.mjs +3 -3
  380. package/test/cases/dom/resource/link/stylesheet.mjs +3 -3
  381. package/test/cases/dom/resource/link.mjs +3 -3
  382. package/test/cases/dom/resource/script.mjs +3 -3
  383. package/test/cases/dom/resource.mjs +1 -1
  384. package/test/cases/dom/resourcemanager.mjs +1 -1
  385. package/test/cases/dom/slotted-nodes.mjs +1 -1
  386. package/test/cases/dom/template.mjs +2 -2
  387. package/test/cases/dom/theme.mjs +2 -2
  388. package/test/cases/dom/updater.mjs +4 -4
  389. package/test/cases/dom/util/extract-keys.mjs +1 -1
  390. package/test/cases/dom/util/init-options-from-attributes.mjs +1 -1
  391. package/test/cases/dom/util.mjs +2 -2
  392. package/test/cases/dom/worker/factory.mjs +2 -2
  393. package/test/cases/i18n/formatter.mjs +2 -2
  394. package/test/cases/i18n/locale.mjs +1 -1
  395. package/test/cases/i18n/provider.mjs +4 -4
  396. package/test/cases/i18n/providers/embed.mjs +3 -3
  397. package/test/cases/i18n/providers/fetch.mjs +3 -3
  398. package/test/cases/i18n/translations.mjs +3 -3
  399. package/test/cases/logging/handler/console.mjs +3 -3
  400. package/test/cases/logging/handler.mjs +3 -3
  401. package/test/cases/logging/logentry.mjs +1 -1
  402. package/test/cases/logging/logger.mjs +1 -1
  403. package/test/cases/math/random.mjs +1 -2
  404. package/test/cases/monster.mjs +2 -2
  405. package/test/cases/net/webconnect/message.mjs +1 -2
  406. package/test/cases/net/webconnect.mjs +3 -3
  407. package/test/cases/text/bracketed-key-value-hash.mjs +1 -1
  408. package/test/cases/text/formatter.mjs +1 -1
  409. package/test/cases/text/util.mjs +1 -1
  410. package/test/cases/types/base.mjs +2 -2
  411. package/test/cases/types/basewithoptions.mjs +1 -1
  412. package/test/cases/types/binary.mjs +1 -1
  413. package/test/cases/types/dataurl.mjs +1 -1
  414. package/test/cases/types/global.mjs +1 -1
  415. package/test/cases/types/id.mjs +1 -1
  416. package/test/cases/types/internal.mjs +2 -2
  417. package/test/cases/types/is.mjs +2 -2
  418. package/test/cases/types/mediatype.mjs +1 -1
  419. package/test/cases/types/node.mjs +4 -4
  420. package/test/cases/types/nodelist.mjs +2 -2
  421. package/test/cases/types/noderecursiveiterator.mjs +3 -3
  422. package/test/cases/types/observablequeue.mjs +2 -2
  423. package/test/cases/types/observer.mjs +1 -1
  424. package/test/cases/types/observerlist.mjs +2 -2
  425. package/test/cases/types/proxyobserver.mjs +4 -4
  426. package/test/cases/types/queue.mjs +1 -1
  427. package/test/cases/types/randomid.mjs +1 -1
  428. package/test/cases/types/regex.mjs +1 -1
  429. package/test/cases/types/stack.mjs +1 -1
  430. package/test/cases/types/tokenlist.mjs +1 -1
  431. package/test/cases/types/typeof.mjs +2 -2
  432. package/test/cases/types/uniquequeue.mjs +1 -1
  433. package/test/cases/types/uuid.mjs +1 -1
  434. package/test/cases/types/validate.mjs +3 -3
  435. package/test/cases/types/version.mjs +1 -1
  436. package/test/cases/util/clone.mjs +1 -1
  437. package/test/cases/util/comparator.mjs +1 -1
  438. package/test/cases/util/deadmansswitch.mjs +1 -1
  439. package/test/cases/util/freeze.mjs +1 -1
  440. package/test/cases/util/processing.mjs +1 -1
  441. package/test/cases/util/trimspaces.mjs +1 -1
  442. package/test/util/chai-dom.mjs +2 -2
  443. package/test/util/intersection-mock.mjs +69 -0
  444. package/test/util/jsdom.mjs +43 -27
  445. package/test/util/localstorage.mjs +1 -0
  446. package/test/util/resize-observer.mjs +29 -0
  447. package/test/util/websocket.mjs +5 -2
  448. package/test/web/import.js +92 -73
  449. package/test/web/test.html +28 -5
  450. package/test/web/tests.js +29430 -15209
  451. package/CHANGELOG +0 -438
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
3
+ * Node module: @schukai/monster
4
+ * This file is licensed under the AGPLv3 License.
5
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
+ */
7
+
8
+ import { isString } from "../../../types/is.mjs";
9
+ import { fireCustomEvent } from "../../../dom/events.mjs";
10
+ import { validateInstance, validateString } from "../../../types/validate.mjs";
11
+
12
+ function findShadowRoot(element) {
13
+ if (element instanceof ShadowRoot) return element;
14
+ if (!element.parentNode) return null;
15
+ return findShadowRoot(element.parentNode);
16
+ }
17
+
18
+ /**
19
+ * @private
20
+ * @param {HTMLElement} element
21
+ * @param {string|URL} url
22
+ * @param {Object} options fetch options
23
+ * @param {Object} filter fetch options
24
+ * @return {Promise<Object>}
25
+ * @throws {Error} we won't be able to read the data
26
+ * @throws {Error} client error
27
+ * @throws {Error} undefined status or type
28
+ * @throws {TypeError} value is not an instance of
29
+ * @throws {TypeError} value is not a string
30
+ */
31
+ function loadAndAssignContent(element, url, options, filter) {
32
+ return loadContent(url, options).then((response) => {
33
+ let content = response.content;
34
+
35
+ if (isString(filter) && filter !== "") {
36
+ const t = document.createElement("div");
37
+ const c = document.createElement("div");
38
+ c.innerHTML = content;
39
+ for (const [, node] of c.querySelectorAll(filter).entries()) {
40
+ t.appendChild(node);
41
+ }
42
+
43
+ content = t.innerHTML;
44
+ }
45
+
46
+ const t = document.createElement("div");
47
+ t.innerHTML = content;
48
+
49
+ const scripts = t.querySelectorAll("script");
50
+ for (const [, script] of scripts.entries()) {
51
+ const s = document.createElement("script");
52
+ s.innerHTML = script.innerHTML;
53
+ if (script.src) s.src = script.src;
54
+ if (script.type) s.type = script.type;
55
+ if (script.async) s.async = script.async;
56
+ if (script.defer) s.defer = script.defer;
57
+ if (script.crossOrigin) s.crossOrigin = script.crossOrigin;
58
+ if (script.integrity) s.integrity = script.integrity;
59
+ if (script.referrerPolicy) s.referrerPolicy = script.referrerPolicy;
60
+ document.head.appendChild(s);
61
+ t.removeChild(script);
62
+ }
63
+
64
+ validateInstance(element, HTMLElement).innerHTML = t.innerHTML;
65
+
66
+ const root = findShadowRoot(element);
67
+ if (root !== null) {
68
+ element = root.host;
69
+ }
70
+
71
+ fireCustomEvent(element, "monster-fetched", {
72
+ url,
73
+ });
74
+
75
+ return response;
76
+ });
77
+ }
78
+
79
+ /**
80
+ * @private
81
+ * @param {string|URL} url
82
+ * @param {Object} options fetch options
83
+ * @return {Promise<string>}
84
+ * @throws {Error} we won't be able to read the data
85
+ * @throws {Error} client error
86
+ * @throws {Error} undefined status or type
87
+ * @throws {TypeError} value is not a string
88
+ */
89
+ function loadContent(url, options) {
90
+ if (url instanceof URL) {
91
+ url = url.toString();
92
+ }
93
+
94
+ return fetch(validateString(url), options).then((response) => {
95
+ // The ok read-only property of the Response interface contains a
96
+ // Boolean stating whether the response was successful (status in the range 200-299) or not.
97
+ if (response?.ok !== true) {
98
+ // @see https://developer.mozilla.org/en-US/docs/Web/API/Response/type
99
+ if (
100
+ ["error", "opaque", "opaqueredirect"].indexOf(response?.type) !== -1
101
+ ) {
102
+ throw new Error(
103
+ `we won't be able to read the data (${response?.type})`,
104
+ );
105
+ }
106
+
107
+ const statusClass = `${response?.status}`.substring(0, 1);
108
+ switch (statusClass) {
109
+ case "4":
110
+ throw new Error(`client error ${response?.statusText}`);
111
+ break;
112
+ default:
113
+ throw new Error(
114
+ `undefined status (${response?.status} / ${response?.statusText}) or type (${response?.type})`,
115
+ );
116
+ }
117
+ }
118
+
119
+ return new Promise(function (resolve, reject) {
120
+ response
121
+ .text()
122
+ .then((content) => {
123
+ resolve({
124
+ content,
125
+ type: response.headers.get("Content-Type"),
126
+ });
127
+ })
128
+ .catch(reject);
129
+ });
130
+ });
131
+ }
132
+
133
+ export { loadAndAssignContent, loadContent };
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
3
+ * Node module: @schukai/monster
4
+ * This file is licensed under the AGPLv3 License.
5
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
+ */
7
+
8
+ import {
9
+ arrow,
10
+ autoPlacement,
11
+ autoUpdate,
12
+ detectOverflow,
13
+ computePosition,
14
+ offset,
15
+ flip,
16
+ size,
17
+ shift,
18
+ } from "@floating-ui/dom";
19
+ import { Processing } from "../../../util/processing.mjs";
20
+ import { getDocument } from "../../../dom/util.mjs";
21
+ import { isString, isArray, isObject, isFunction } from "../../../types/is.mjs";
22
+
23
+ export { positionPopper };
24
+
25
+ /**
26
+ * @private
27
+ * @param controlElement
28
+ * @param popperElement
29
+ * @param options
30
+ * @returns {Promise|*}
31
+ */
32
+ function positionPopper(controlElement, popperElement, options) {
33
+ const body = getDocument().body;
34
+
35
+ return new Processing(() => {
36
+ const arrowElement = controlElement.querySelector(
37
+ "[data-monster-role=arrow]",
38
+ );
39
+
40
+ const config = Object.assign(
41
+ {},
42
+ {
43
+ placement: "top",
44
+ },
45
+ options,
46
+ );
47
+
48
+ const middleware = config?.["middleware"];
49
+ if (!isArray(middleware)) {
50
+ if (isString(middleware)) {
51
+ config["middleware"] = middleware.split(",").filter((line) => {
52
+ return line.trim().length > 0;
53
+ });
54
+ } else {
55
+ config["middleware"] = [];
56
+ }
57
+ }
58
+
59
+ for (const key in middleware) {
60
+ const line = middleware[key];
61
+ if (isFunction(line)) {
62
+ continue;
63
+ }
64
+
65
+ if (isObject(line)) {
66
+ continue;
67
+ }
68
+
69
+ if (!isString(line)) {
70
+ throw new Error(
71
+ `Middleware must be a string, a function or an object. Got ${typeof line}`,
72
+ );
73
+ }
74
+
75
+ const kv = line.split(":");
76
+ const fn = kv.shift();
77
+
78
+ switch (fn) {
79
+ case "flip":
80
+ config["middleware"][key] = flip();
81
+ break;
82
+ case "shift":
83
+ config["middleware"][key] = shift();
84
+ break;
85
+ case "autoPlacement":
86
+ let defaultAllowedPlacements = ["top", "bottom", "left", "right"];
87
+
88
+ const defPlacement = kv?.shift();
89
+ if (isString(defPlacement) && defPlacement.trim().length > 0) {
90
+ defaultAllowedPlacements = defPlacement
91
+ .split(",")
92
+ .filter((line) => {
93
+ return line.trim().length > 0;
94
+ });
95
+ }
96
+
97
+ if (defaultAllowedPlacements.includes(config.placement)) {
98
+ defaultAllowedPlacements.splice(
99
+ defaultAllowedPlacements.indexOf(config.placement),
100
+ 1,
101
+ );
102
+ }
103
+ defaultAllowedPlacements.unshift(config.placement);
104
+
105
+ config["middleware"][key] = autoPlacement({
106
+ crossAxis: true,
107
+ autoAlignment: true,
108
+ allowedPlacements: defaultAllowedPlacements,
109
+ });
110
+
111
+ break;
112
+ case "detectOverflow":
113
+ config["middleware"][key] = detectOverflow();
114
+ break;
115
+ case "arrow":
116
+ if (arrowElement) {
117
+ config["middleware"][key] = arrow({ element: arrowElement });
118
+ }
119
+ break;
120
+ case "size":
121
+ config["middleware"][key] = size({
122
+ apply({ availableWidth, availableHeight, elements }) {
123
+ const maxWidth = body.clientWidth;
124
+ const maxHeight = body.clientHeight;
125
+
126
+ if (availableWidth < 0) {
127
+ availableWidth = 0;
128
+ }
129
+
130
+ if (availableHeight < 0) {
131
+ availableHeight = 0;
132
+ }
133
+
134
+ if (availableWidth > maxWidth) {
135
+ availableWidth = maxWidth;
136
+ }
137
+
138
+ if (availableHeight > maxHeight) {
139
+ availableHeight = maxHeight;
140
+ }
141
+
142
+ Object.assign(elements.floating.style, {
143
+ boxSizing: "border-box",
144
+ maxWidth: `${availableWidth}px`,
145
+ maxHeight: `${availableHeight}px`,
146
+ });
147
+ },
148
+ });
149
+ break;
150
+ case "offset":
151
+ const o = kv?.shift();
152
+ config["middleware"][key] = offset(parseInt(o) || 10);
153
+ break;
154
+ case "hide":
155
+ config["middleware"][key] = hide();
156
+ break;
157
+ default:
158
+ throw new Error(`Unknown function: ${fn}`);
159
+ }
160
+ }
161
+
162
+ popperElement.style.removeProperty("visibility");
163
+ popperElement.style.display = "block";
164
+
165
+ autoUpdate(controlElement, popperElement, () => {
166
+ computePosition(controlElement, popperElement, config).then(
167
+ ({ x, y, placement, middlewareData }) => {
168
+ Object.assign(popperElement.style, {
169
+ top: "0",
170
+ left: "0",
171
+ transform: `translate(${roundByDPR(x)}px,${roundByDPR(y)}px)`,
172
+ });
173
+
174
+ if (middlewareData.arrow) {
175
+ const side = placement.split("-")[0];
176
+
177
+ const staticSide = {
178
+ top: "bottom",
179
+ right: "left",
180
+ bottom: "top",
181
+ left: "right",
182
+ }[side];
183
+
184
+ // monster-border-width = + 4 (2*2) (should come from css)
185
+ const arrowLen = arrowElement.offsetWidth + 4;
186
+
187
+ const borderStyle = {
188
+ borderLeft: "transparent",
189
+ borderRight: "transparent",
190
+ borderBottom: "transparent",
191
+ borderTop: "transparent",
192
+ };
193
+
194
+ const defaultBorder =
195
+ "var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)";
196
+
197
+ switch (side) {
198
+ case "top":
199
+ borderStyle.borderRight = defaultBorder;
200
+ borderStyle.borderBottom = defaultBorder;
201
+ break;
202
+
203
+ case "bottom":
204
+ borderStyle.borderTop = defaultBorder;
205
+ borderStyle.borderLeft = defaultBorder;
206
+ break;
207
+
208
+ case "left":
209
+ borderStyle.borderRight = defaultBorder;
210
+ borderStyle.borderTop = defaultBorder;
211
+ break;
212
+
213
+ case "right":
214
+ borderStyle.borderBottom = defaultBorder;
215
+ borderStyle.borderLeft = defaultBorder;
216
+ break;
217
+ }
218
+
219
+ const { x, y } = middlewareData.arrow;
220
+
221
+ Object.assign(
222
+ arrowElement.style,
223
+ {
224
+ left: x != null ? `${x}px` : "",
225
+ top: y != null ? `${y}px` : "",
226
+ // Ensure the static side gets unset when
227
+ // flipping to other placements' axes.
228
+ right: "",
229
+ bottom: "",
230
+ [staticSide]: `${-arrowLen / 2}px`,
231
+ transform: "rotate(45deg)",
232
+ },
233
+ borderStyle,
234
+ );
235
+ }
236
+ },
237
+ );
238
+ });
239
+ }).run();
240
+ }
241
+
242
+ function roundByDPR(value) {
243
+ const dpr = window.devicePixelRatio || 1;
244
+ return Math.round(value * dpr) / dpr;
245
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ /**
7
+ * Namespace for all form related functions.
8
+ *
9
+ * @namespace Monster.Components.Form.Util
10
+ * @memberOf Monster
11
+ * @author schukai GmbH
12
+ */
13
+ const ns = {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
3
+ * Node module: @schukai/monster
4
+ * This file is licensed under the AGPLv3 License.
5
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
+ */
7
+
8
+ import { extend } from "../../../data/extend.mjs";
9
+ import { isArray } from "../../../types/is.mjs";
10
+ import { validateBoolean } from "../../../types/validate.mjs";
11
+
12
+ export { setEventListenersModifiers, popperInstanceSymbol };
13
+
14
+ /**
15
+ * @private
16
+ * @type {symbol}
17
+ */
18
+ const popperInstanceSymbol = Symbol("popperInstance");
19
+
20
+ /**
21
+ * @private
22
+ * @this {CustomElement}
23
+ * @param {Boolean} mode
24
+ */
25
+ function setEventListenersModifiers(mode) {;
26
+
27
+ const options = extend({}, this.getOption("popper"));
28
+ const modifiers = options?.["modifiers"];
29
+
30
+ if (!isArray(modifiers)) {
31
+ options["modifiers"] = [];
32
+ }
33
+
34
+ if (
35
+ options["modifiers"].filter((entry) => {
36
+ if (entry?.["name"] === "eventListeners") {
37
+ // performance https://popper.js.org/docs/v2/tutorial/#performance
38
+ entry["enabled"] = validateBoolean(mode);
39
+ }
40
+ }).length === 0
41
+ ) {
42
+ options["modifiers"].push({
43
+ name: "eventListeners",
44
+ enabled: validateBoolean(mode),
45
+ });
46
+ }
47
+
48
+ this[popperInstanceSymbol].setOptions(options);
49
+ }
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ import { instanceSymbol } from "../../constants.mjs";
7
+ import {
8
+ assembleMethodSymbol,
9
+ CustomElement,
10
+ registerCustomElement,
11
+ } from "../../dom/customelement.mjs";
12
+ import { CallButtonStyleSheet } from "./stylesheet/call-button.mjs";
13
+ import { isArray, isObject, isFunction } from "../../types/is.mjs";
14
+ import { getDocument } from "../../dom/util.mjs";
15
+ import { ATTRIBUTE_PREFIX } from "../../dom/constants.mjs";
16
+
17
+ export { CallButton };
18
+
19
+ /**
20
+ * @private
21
+ * @type {symbol}
22
+ */
23
+ const callButtonElementSymbol = Symbol("callButtonElement");
24
+
25
+ /**
26
+ * @memberOf Monster.Components.Host
27
+ * @type {string}
28
+ */
29
+ const ATTRIBUTE_REFERENCE = `${ATTRIBUTE_PREFIX}reference`;
30
+ /**
31
+ * @memberOf Monster.Components.Host
32
+ * @type {string}
33
+ */
34
+ const ATTRIBUTE_CALL = `${ATTRIBUTE_PREFIX}call`;
35
+
36
+ /**
37
+ * The call button component is used to call a method of another element.
38
+ *
39
+ * <img src="./images/call-button.png">
40
+ *
41
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
42
+ *
43
+ * You can create this control either by specifying the HTML tag <monster-call-button />` directly in the HTML or using
44
+ * Javascript via the `document.createElement('monster-call-button');` method.
45
+ *
46
+ * ```html
47
+ * <monster-call-button></monster-call-button>
48
+ * ```
49
+ *
50
+ * Or you can create this CustomControl directly in Javascript:
51
+ *
52
+ * ```js
53
+ * import '@schukai/component-host/source/filter.mjs';
54
+ * document.createElement('monster-call-button');
55
+ * ```
56
+ *
57
+ * The Body should have a class "hidden" to ensure that the styles are applied correctly.
58
+ *
59
+ * ```css
60
+ * body.hidden {
61
+ * visibility: hidden;
62
+ * }
63
+ * ```
64
+ *
65
+ * @startuml call-button.png
66
+ * skinparam monochrome true
67
+ * skinparam shadowing false
68
+ * HTMLElement <|-- CustomElement
69
+ * CustomElement <|-- CallButton
70
+ * @enduml
71
+ *
72
+ * @copyright schukai GmbH
73
+ * @memberOf Monster.Components.Host
74
+ * @summary A toggle button
75
+ */
76
+ class CallButton extends CustomElement {
77
+ /**
78
+ * This method is called by the `instanceof` operator.
79
+ * @returns {symbol}
80
+ */
81
+ static get [instanceSymbol]() {
82
+ return Symbol.for("@schukai/component-host/call-button@@instance");
83
+ }
84
+
85
+ /**
86
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
87
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
88
+ *
89
+ * The individual configuration values can be found in the table.
90
+ *
91
+ * @property {Object} templates Template definitions
92
+ * @property {string} templates.main Main template
93
+ */
94
+ get defaults() {
95
+ const obj = Object.assign(
96
+ {},
97
+ super.defaults,
98
+ {
99
+ templates: {
100
+ main: getTemplate(),
101
+ },
102
+ references: {
103
+ callableSelector: undefined,
104
+ },
105
+
106
+ call: undefined,
107
+
108
+ labels: {
109
+ button: "<slot>Toggle</slot>",
110
+ },
111
+ },
112
+ initOptionsFromArguments.call(this),
113
+ );
114
+
115
+ return obj;
116
+ }
117
+
118
+ /**
119
+ *
120
+ * @return {string}
121
+ */
122
+ static getTag() {
123
+ return "monster-call-button";
124
+ }
125
+
126
+ /**
127
+ *
128
+ * @return {CallButton}
129
+ */
130
+ [assembleMethodSymbol]() {;
131
+ super[assembleMethodSymbol]();
132
+
133
+ initControlReferences.call(this);
134
+ initEventHandler.call(this);
135
+ }
136
+
137
+ /**
138
+ * @return {Array}
139
+ */
140
+ static getCSSStyleSheet() {
141
+ return [CallButtonStyleSheet];
142
+ }
143
+ }
144
+
145
+ /**
146
+ * @private
147
+ * @return {CallButton}
148
+ */
149
+ function initControlReferences() {;
150
+
151
+ if (!this.shadowRoot) {
152
+ throw new Error("no shadow-root is defined");
153
+ }
154
+
155
+ this[callButtonElementSymbol] = this.shadowRoot.querySelector(
156
+ "[data-monster-role=control]",
157
+ );
158
+ return this;
159
+ }
160
+
161
+ /**
162
+ * @private
163
+ * @return {object}
164
+ * @throws {TypeError} incorrect arguments passed for the datasource
165
+ * @throws {Error} the datasource could not be initialized
166
+ */
167
+ function initOptionsFromArguments() {;
168
+ const options = {};
169
+ const value = this.getAttribute(ATTRIBUTE_REFERENCE);
170
+ if (value) {
171
+ if (!isObject(options.references)) {
172
+ options.references = {};
173
+ }
174
+ const selectors = value.split(",");
175
+ if (isArray(selectors) && selectors.length === 0) {
176
+ throw new TypeError("incorrect arguments passed for the datasource");
177
+ }
178
+
179
+ options.references.callableSelector = selectors;
180
+ }
181
+
182
+ const call = this.getAttribute(ATTRIBUTE_CALL);
183
+ if (call) {
184
+ options.call = call;
185
+ }
186
+
187
+ return options;
188
+ }
189
+
190
+ /**
191
+ * @private
192
+ * @throws {Error} The option references.callableSelector must be an array
193
+ */
194
+ function initEventHandler() {;
195
+
196
+ const doc = getDocument();
197
+
198
+ this[callButtonElementSymbol].addEventListener("click", (event) => {
199
+ event.preventDefault();
200
+
201
+ const selectors = this.getOption("references.callableSelector");
202
+ if (!isArray(selectors)) {
203
+ throw new Error(
204
+ "The option references.callableSelector must be an array",
205
+ );
206
+ }
207
+
208
+ const call = this.getOption("call");
209
+ if (!call) {
210
+ throw new Error("The option call must be defined");
211
+ }
212
+
213
+ for (const selector of selectors) {
214
+ const element = doc.querySelector(selector);
215
+ if (element instanceof HTMLElement && isFunction(element?.[call])) {
216
+ element[call]();
217
+ }
218
+ }
219
+ });
220
+ }
221
+
222
+ /**
223
+ * @private
224
+ * @return {string}
225
+ */
226
+ function getTemplate() {
227
+ // language=HTML
228
+ return `
229
+ <div data-monster-role="control" part="control"
230
+ data-monster-attributes="class path:references.callableSelector | ?::hidden">
231
+ <a href="#" data-monster-role="call-button" data-monster-replace="path:labels.button"></a>
232
+ </div>
233
+ `;
234
+ }
235
+
236
+ registerCustomElement(CallButton);