@schukai/monster 3.51.5 → 3.52.1

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 (361) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +15 -12
  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/example/data/datasource/server/restapi.mjs +7 -1
  12. package/package.json +6 -2
  13. package/source/components/constants.mjs +132 -0
  14. package/source/components/datatable/columnbar.mjs +310 -0
  15. package/source/components/datatable/constants.mjs +121 -0
  16. package/source/components/datatable/dataset.mjs +219 -0
  17. package/source/components/datatable/datasource/dom.mjs +186 -0
  18. package/source/components/datatable/datasource/namespace.mjs +13 -0
  19. package/source/components/datatable/datasource/rest.mjs +400 -0
  20. package/source/components/datatable/datasource.mjs +102 -0
  21. package/source/components/datatable/datatable/header.mjs +268 -0
  22. package/source/components/datatable/datatable/namespace.mjs +13 -0
  23. package/source/components/datatable/datatable.mjs +789 -0
  24. package/source/components/datatable/embedded-pagination.mjs +113 -0
  25. package/source/components/datatable/filter/abstract-base.mjs +31 -0
  26. package/source/components/datatable/filter/date-range.mjs +1041 -0
  27. package/source/components/datatable/filter/input.mjs +175 -0
  28. package/source/components/datatable/filter/namespace.mjs +13 -0
  29. package/source/components/datatable/filter/range.mjs +671 -0
  30. package/source/components/datatable/filter/select.mjs +65 -0
  31. package/source/components/datatable/filter/settings.mjs +116 -0
  32. package/source/components/datatable/filter-button.mjs +98 -0
  33. package/source/components/datatable/filter.mjs +929 -0
  34. package/source/components/datatable/namespace.mjs +11 -0
  35. package/source/components/datatable/pagination.mjs +456 -0
  36. package/source/components/datatable/style/column-bar.pcss +123 -0
  37. package/source/components/datatable/style/dataset.pcss +13 -0
  38. package/source/components/datatable/style/datasource.pcss +16 -0
  39. package/source/components/datatable/style/datatable.pcss +239 -0
  40. package/source/components/datatable/style/embedded-pagination.pcss +101 -0
  41. package/source/components/datatable/style/filter-button.pcss +22 -0
  42. package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
  43. package/source/components/datatable/style/filter-date-range.pcss +9 -0
  44. package/source/components/datatable/style/filter-range.pcss +5 -0
  45. package/source/components/datatable/style/filter.pcss +156 -0
  46. package/source/components/datatable/style/pagination.pcss +59 -0
  47. package/source/components/datatable/style/select-filter.pcss +27 -0
  48. package/source/components/datatable/stylesheet/column-bar.mjs +27 -0
  49. package/source/components/datatable/stylesheet/dataset.mjs +27 -0
  50. package/source/components/datatable/stylesheet/datasource.mjs +27 -0
  51. package/source/components/datatable/stylesheet/datatable.mjs +27 -0
  52. package/source/components/datatable/stylesheet/embedded-pagination.mjs +27 -0
  53. package/source/components/datatable/stylesheet/filter-button.mjs +27 -0
  54. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +27 -0
  55. package/source/components/datatable/stylesheet/filter-date-range.mjs +27 -0
  56. package/source/components/datatable/stylesheet/filter-range.mjs +27 -0
  57. package/source/components/datatable/stylesheet/filter.mjs +27 -0
  58. package/source/components/datatable/stylesheet/namespace.mjs +13 -0
  59. package/source/components/datatable/stylesheet/pagination.mjs +27 -0
  60. package/source/components/datatable/stylesheet/select-filter.mjs +27 -0
  61. package/source/components/datatable/util.mjs +60 -0
  62. package/source/components/form/action-button.mjs +262 -0
  63. package/source/components/form/api-button.mjs +515 -0
  64. package/source/components/form/button-bar.mjs +739 -0
  65. package/source/components/form/button.mjs +350 -0
  66. package/source/components/form/confirm-button.mjs +330 -0
  67. package/source/components/form/constants.mjs +111 -0
  68. package/source/components/form/context-help.mjs +123 -0
  69. package/source/components/form/events.mjs +84 -0
  70. package/source/components/form/form.mjs +601 -0
  71. package/source/components/form/message-state-button.mjs +396 -0
  72. package/source/components/form/namespace.mjs +13 -0
  73. package/source/components/form/popper-button.mjs +435 -0
  74. package/source/components/form/popper.mjs +487 -0
  75. package/source/components/form/reload.mjs +360 -0
  76. package/source/components/form/select.mjs +2314 -0
  77. package/source/components/form/shadow-reload.mjs +137 -0
  78. package/source/components/form/state-button.mjs +182 -0
  79. package/source/components/form/style/action-button.pcss +41 -0
  80. package/source/components/form/style/api-button.pcss +0 -0
  81. package/source/components/form/style/button-bar.pcss +51 -0
  82. package/source/components/form/style/button.pcss +8 -0
  83. package/source/components/form/style/confirm-button.pcss +17 -0
  84. package/source/components/form/style/context-help.pcss +16 -0
  85. package/source/components/form/style/form.pcss +10 -0
  86. package/source/components/form/style/message-state-button.pcss +10 -0
  87. package/source/components/form/style/popper-button.pcss +16 -0
  88. package/source/components/form/style/popper.pcss +8 -0
  89. package/source/components/form/style/select.pcss +265 -0
  90. package/source/components/form/style/state-button.pcss +116 -0
  91. package/source/components/form/style/tabs.pcss +173 -0
  92. package/source/components/form/style/tree-select.pcss +81 -0
  93. package/source/components/form/stylesheet/action-button.mjs +27 -0
  94. package/source/components/form/stylesheet/api-button.mjs +27 -0
  95. package/source/components/form/stylesheet/button-bar.mjs +27 -0
  96. package/source/components/form/stylesheet/button.mjs +27 -0
  97. package/source/components/form/stylesheet/confirm-button.mjs +27 -0
  98. package/source/components/form/stylesheet/context-help.mjs +27 -0
  99. package/source/components/form/stylesheet/form.mjs +27 -0
  100. package/source/components/form/stylesheet/message-state-button.mjs +27 -0
  101. package/source/components/form/stylesheet/namespace.mjs +13 -0
  102. package/source/components/form/stylesheet/popper-button.mjs +27 -0
  103. package/source/components/form/stylesheet/popper.mjs +27 -0
  104. package/source/components/form/stylesheet/select.mjs +27 -0
  105. package/source/components/form/stylesheet/state-button.mjs +27 -0
  106. package/source/components/form/stylesheet/tabs.mjs +27 -0
  107. package/source/components/form/stylesheet/tree-select.mjs +27 -0
  108. package/source/components/form/tabs.mjs +1029 -0
  109. package/source/components/form/template.mjs +373 -0
  110. package/source/components/form/tree-select.mjs +527 -0
  111. package/source/components/form/types/namespace.mjs +13 -0
  112. package/source/components/form/types/state.mjs +93 -0
  113. package/source/components/form/util/fetch.mjs +133 -0
  114. package/source/components/form/util/floating-ui.mjs +245 -0
  115. package/source/components/form/util/namespace.mjs +13 -0
  116. package/source/components/form/util/popper.mjs +49 -0
  117. package/source/components/host/call-button.mjs +236 -0
  118. package/source/components/host/collapse.mjs +526 -0
  119. package/source/components/host/config-manager.mjs +304 -0
  120. package/source/components/host/constants.mjs +18 -0
  121. package/source/components/host/details.mjs +268 -0
  122. package/source/components/host/events.mjs +131 -0
  123. package/source/components/host/host.mjs +420 -0
  124. package/source/components/host/namespace.mjs +13 -0
  125. package/source/components/host/overlay.mjs +339 -0
  126. package/source/components/host/style/call-button.pcss +36 -0
  127. package/source/components/host/style/collapse.pcss +67 -0
  128. package/source/components/host/style/config-manager.pcss +5 -0
  129. package/source/components/host/style/details.pcss +68 -0
  130. package/source/components/host/style/host.pcss +43 -0
  131. package/source/components/host/style/overlay.pcss +73 -0
  132. package/source/components/host/style/toggle-button.pcss +36 -0
  133. package/source/components/host/style/viewer.pcss +13 -0
  134. package/source/components/host/stylesheet/call-button.mjs +27 -0
  135. package/source/components/host/stylesheet/collapse.mjs +27 -0
  136. package/source/components/host/stylesheet/config-manager.mjs +27 -0
  137. package/source/components/host/stylesheet/details.mjs +27 -0
  138. package/source/components/host/stylesheet/host.mjs +27 -0
  139. package/source/components/host/stylesheet/namespace.mjs +13 -0
  140. package/source/components/host/stylesheet/overlay.mjs +27 -0
  141. package/source/components/host/stylesheet/toggle-button.mjs +27 -0
  142. package/source/components/host/stylesheet/viewer.mjs +27 -0
  143. package/source/components/host/toggle-button.mjs +88 -0
  144. package/source/components/host/util.mjs +23 -0
  145. package/source/components/host/viewer.mjs +309 -0
  146. package/source/components/namespace.mjs +14 -0
  147. package/source/components/notify/constants.mjs +15 -0
  148. package/source/components/notify/events.mjs +15 -0
  149. package/source/components/notify/message.mjs +374 -0
  150. package/source/components/notify/namespace.mjs +15 -0
  151. package/source/components/notify/notify.mjs +236 -0
  152. package/source/components/notify/style/message.pcss +57 -0
  153. package/source/components/notify/style/notify.pcss +118 -0
  154. package/source/components/notify/stylesheet/message.mjs +27 -0
  155. package/source/components/notify/stylesheet/namespace.mjs +15 -0
  156. package/source/components/notify/stylesheet/notify.mjs +27 -0
  157. package/source/components/state/log/entry.mjs +126 -0
  158. package/source/components/state/log/namespace.mjs +13 -0
  159. package/source/components/state/log.mjs +275 -0
  160. package/source/components/state/namespace.mjs +13 -0
  161. package/source/components/state/state.mjs +131 -0
  162. package/source/components/state/style/log.pcss +111 -0
  163. package/source/components/state/style/state.pcss +113 -0
  164. package/source/components/state/stylesheet/log.mjs +27 -0
  165. package/source/components/state/stylesheet/state.mjs +27 -0
  166. package/source/components/style/badge.pcss +92 -0
  167. package/source/components/style/border.pcss +77 -0
  168. package/source/components/style/button.pcss +105 -0
  169. package/source/components/style/card.pcss +108 -0
  170. package/source/components/style/color.pcss +257 -0
  171. package/source/components/style/common.pcss +105 -0
  172. package/source/components/style/control.pcss +11 -0
  173. package/source/components/style/data-grid.pcss +43 -0
  174. package/source/components/style/display.pcss +42 -0
  175. package/source/components/style/floating-ui.pcss +33 -0
  176. package/source/components/style/form.pcss +5 -0
  177. package/source/components/style/host.pcss +15 -0
  178. package/source/components/style/link.pcss +63 -0
  179. package/source/components/style/mixin/badge.pcss +18 -0
  180. package/source/components/style/mixin/button.pcss +52 -0
  181. package/source/components/style/mixin/form.pcss +247 -0
  182. package/source/components/style/mixin/hover.pcss +8 -0
  183. package/source/components/style/mixin/media.pcss +107 -0
  184. package/source/components/style/mixin/property.pcss +292 -0
  185. package/source/components/style/mixin/skeleton.pcss +26 -0
  186. package/source/components/style/mixin/spinner.pcss +24 -0
  187. package/source/components/style/mixin/typography.pcss +52 -0
  188. package/source/components/style/normalize.pcss +14 -0
  189. package/source/components/style/popper.pcss +78 -0
  190. package/source/components/style/property.pcss +17 -0
  191. package/source/components/style/ripple.pcss +14 -0
  192. package/source/components/style/skeleton.pcss +28 -0
  193. package/source/components/style/space.pcss +47 -0
  194. package/source/components/style/spinner.pcss +6 -0
  195. package/source/components/style/table.pcss +46 -0
  196. package/source/components/style/theme.pcss +119 -0
  197. package/source/components/style/typography.pcss +131 -0
  198. package/source/components/stylesheet/badge.mjs +27 -0
  199. package/source/components/stylesheet/border.mjs +27 -0
  200. package/source/components/stylesheet/button.mjs +27 -0
  201. package/source/components/stylesheet/card.mjs +27 -0
  202. package/source/components/stylesheet/color.mjs +27 -0
  203. package/source/components/stylesheet/common.mjs +27 -0
  204. package/source/components/stylesheet/control.mjs +27 -0
  205. package/source/components/stylesheet/data-grid.mjs +27 -0
  206. package/source/components/stylesheet/display.mjs +27 -0
  207. package/source/components/stylesheet/floating-ui.mjs +27 -0
  208. package/source/components/stylesheet/form.mjs +27 -0
  209. package/source/components/stylesheet/host.mjs +27 -0
  210. package/source/components/stylesheet/link.mjs +27 -0
  211. package/source/components/stylesheet/namespace.mjs +13 -0
  212. package/source/components/stylesheet/normalize.mjs +27 -0
  213. package/source/components/stylesheet/popper.mjs +27 -0
  214. package/source/components/stylesheet/property.mjs +27 -0
  215. package/source/components/stylesheet/ripple.mjs +27 -0
  216. package/source/components/stylesheet/skeleton.mjs +27 -0
  217. package/source/components/stylesheet/space.mjs +27 -0
  218. package/source/components/stylesheet/spinner.mjs +27 -0
  219. package/source/components/stylesheet/table.mjs +27 -0
  220. package/source/components/stylesheet/theme.mjs +27 -0
  221. package/source/components/stylesheet/tree-menu.mjs +33 -0
  222. package/source/components/stylesheet/typography.mjs +27 -0
  223. package/source/components/tree-menu/namespace.mjs +13 -0
  224. package/source/components/tree-menu/style/tree-menu.pcss +107 -0
  225. package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
  226. package/source/components/tree-menu/stylesheet/tree-menu.mjs +27 -0
  227. package/source/components/tree-menu/tree-menu.mjs +660 -0
  228. package/source/constraints/abstract.mjs +17 -24
  229. package/source/constraints/abstractoperator.mjs +27 -22
  230. package/source/constraints/andoperator.mjs +20 -17
  231. package/source/constraints/invalid.mjs +17 -17
  232. package/source/constraints/isarray.mjs +20 -20
  233. package/source/constraints/isobject.mjs +20 -20
  234. package/source/constraints/oroperator.mjs +45 -45
  235. package/source/constraints/valid.mjs +17 -17
  236. package/source/data/buildmap.mjs +108 -103
  237. package/source/data/buildtree.mjs +59 -57
  238. package/source/data/datasource/dom.mjs +80 -84
  239. package/source/data/datasource/namespace.mjs +1 -1
  240. package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
  241. package/source/data/datasource/server/restapi/writeerror.mjs +35 -32
  242. package/source/data/datasource/server/restapi.mjs +176 -177
  243. package/source/data/datasource/server/webconnect.mjs +150 -156
  244. package/source/data/datasource/server.mjs +62 -63
  245. package/source/data/datasource/storage/localstorage.mjs +25 -24
  246. package/source/data/datasource/storage/sessionstorage.mjs +28 -25
  247. package/source/data/datasource/storage.mjs +74 -73
  248. package/source/data/datasource.mjs +177 -168
  249. package/source/data/diff.mjs +98 -97
  250. package/source/data/extend.mjs +42 -42
  251. package/source/data/pathfinder.mjs +301 -288
  252. package/source/data/pipe.mjs +36 -36
  253. package/source/data/transformer.mjs +742 -726
  254. package/source/dom/assembler.mjs +44 -44
  255. package/source/dom/attributes.mjs +142 -122
  256. package/source/dom/constants.mjs +62 -58
  257. package/source/dom/customcontrol.mjs +299 -299
  258. package/source/dom/customelement.mjs +843 -806
  259. package/source/dom/dimension.mjs +56 -46
  260. package/source/dom/events.mjs +74 -69
  261. package/source/dom/focusmanager.mjs +175 -175
  262. package/source/dom/locale.mjs +28 -28
  263. package/source/dom/ready.mjs +13 -13
  264. package/source/dom/resource/data.mjs +117 -111
  265. package/source/dom/resource/link/stylesheet.mjs +16 -16
  266. package/source/dom/resource/link.mjs +94 -96
  267. package/source/dom/resource/script.mjs +72 -74
  268. package/source/dom/resource.mjs +174 -172
  269. package/source/dom/resourcemanager.mjs +152 -156
  270. package/source/dom/slotted.mjs +78 -80
  271. package/source/dom/template.mjs +126 -112
  272. package/source/dom/theme.mjs +35 -35
  273. package/source/dom/updater.mjs +673 -651
  274. package/source/dom/util/extract-keys.mjs +34 -22
  275. package/source/dom/util/init-options-from-attributes.mjs +46 -38
  276. package/source/dom/util/namespace.mjs +13 -0
  277. package/source/dom/util/set-option-from-attribute.mjs +35 -29
  278. package/source/dom/util.mjs +112 -81
  279. package/source/dom/worker/factory.mjs +83 -83
  280. package/source/i18n/formatter.mjs +75 -73
  281. package/source/i18n/locale.mjs +146 -144
  282. package/source/i18n/provider.mjs +70 -64
  283. package/source/i18n/providers/embed.mjs +136 -127
  284. package/source/i18n/providers/fetch.mjs +84 -76
  285. package/source/i18n/translations.mjs +205 -195
  286. package/source/logging/handler/console.mjs +36 -36
  287. package/source/logging/handler.mjs +140 -140
  288. package/source/logging/logentry.mjs +25 -25
  289. package/source/logging/logger.mjs +177 -175
  290. package/source/math/random.mjs +63 -59
  291. package/source/monster.mjs +223 -103
  292. package/source/net/webconnect/message.mjs +31 -31
  293. package/source/net/webconnect.mjs +278 -271
  294. package/source/text/bracketed-key-value-hash.mjs +182 -179
  295. package/source/text/formatter.mjs +235 -210
  296. package/source/text/generate-range-comparison-expression.mjs +56 -34
  297. package/source/text/namespace.mjs +1 -1
  298. package/source/types/base.mjs +69 -61
  299. package/source/types/basewithoptions.mjs +46 -46
  300. package/source/types/binary.mjs +20 -20
  301. package/source/types/dataurl.mjs +96 -90
  302. package/source/types/global.mjs +45 -39
  303. package/source/types/id.mjs +25 -25
  304. package/source/types/internal.mjs +115 -114
  305. package/source/types/is.mjs +56 -40
  306. package/source/types/mediatype.mjs +119 -119
  307. package/source/types/namespace.mjs +1 -1
  308. package/source/types/node.mjs +160 -150
  309. package/source/types/nodelist.mjs +94 -96
  310. package/source/types/noderecursiveiterator.mjs +50 -50
  311. package/source/types/observablequeue.mjs +73 -73
  312. package/source/types/observer.mjs +114 -106
  313. package/source/types/observerlist.mjs +66 -66
  314. package/source/types/proxyobserver.mjs +210 -210
  315. package/source/types/queue.mjs +63 -63
  316. package/source/types/randomid.mjs +13 -13
  317. package/source/types/regex.mjs +3 -1
  318. package/source/types/stack.mjs +64 -64
  319. package/source/types/tokenlist.mjs +206 -205
  320. package/source/types/typeof.mjs +12 -10
  321. package/source/types/uniquequeue.mjs +48 -48
  322. package/source/types/uuid.mjs +32 -32
  323. package/source/types/validate.mjs +67 -67
  324. package/source/types/version.mjs +115 -105
  325. package/source/util/clone.mjs +103 -91
  326. package/source/util/comparator.mjs +97 -97
  327. package/source/util/deadmansswitch.mjs +40 -44
  328. package/source/util/freeze.mjs +10 -9
  329. package/source/util/namespace.mjs +1 -1
  330. package/source/util/processing.mjs +104 -105
  331. package/source/util/runtime.mjs +56 -44
  332. package/source/util/trimspaces.mjs +24 -24
  333. package/test/cases/components/form/button.mjs +122 -0
  334. package/test/cases/components/form/confirm-button.mjs +127 -0
  335. package/test/cases/components/form/form.mjs +317 -0
  336. package/test/cases/components/form/reload.mjs +188 -0
  337. package/test/cases/components/form/select.mjs +229 -0
  338. package/test/cases/components/form/state-button.mjs +130 -0
  339. package/test/cases/components/form/tabs.mjs +98 -0
  340. package/test/cases/components/form/template.mjs +189 -0
  341. package/test/cases/components/form/tree-select.mjs +216 -0
  342. package/test/cases/components/host/details.mjs +68 -0
  343. package/test/cases/components/host/host.mjs +70 -0
  344. package/test/cases/components/host/overlay.mjs +60 -0
  345. package/test/cases/components/host/util.mjs +79 -0
  346. package/test/cases/components/notify/message.mjs +39 -0
  347. package/test/cases/components/notify/notify.mjs +89 -0
  348. package/test/cases/dom/customcontrol.mjs +5 -4
  349. package/test/cases/math/random.mjs +0 -1
  350. package/test/cases/monster.mjs +1 -1
  351. package/test/cases/net/webconnect/message.mjs +0 -1
  352. package/test/cases/types/node.mjs +1 -1
  353. package/test/util/chai-dom.mjs +2 -2
  354. package/test/util/intersection-mock.mjs +69 -0
  355. package/test/util/jsdom.mjs +41 -25
  356. package/test/util/localstorage.mjs +1 -0
  357. package/test/util/resize-observer.mjs +29 -0
  358. package/test/util/websocket.mjs +4 -1
  359. package/test/web/import.js +16 -1
  360. package/test/web/test.html +28 -5
  361. package/test/web/tests.js +30398 -17879
@@ -0,0 +1,373 @@
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
+ import { instanceSymbol } from "../../constants.mjs";
8
+ import { addAttributeToken } from "../../dom/attributes.mjs";
9
+ import {
10
+ ATTRIBUTE_ERRORMESSAGE,
11
+ ATTRIBUTE_ROLE,
12
+ } from "../../dom/constants.mjs";
13
+ import {
14
+ assembleMethodSymbol,
15
+ attributeObserverSymbol,
16
+ CustomElement,
17
+ initMethodSymbol,
18
+ registerCustomElement,
19
+ } from "../../dom/customelement.mjs";
20
+ import { isArray, isString } from "../../types/is.mjs";
21
+ import { ATTRIBUTE_FORM_RELOAD, ATTRIBUTE_FORM_URL } from "./constants.mjs";
22
+ import { loadAndAssignContent } from "./util/fetch.mjs";
23
+
24
+ export { Template };
25
+
26
+ /**
27
+ * @private
28
+ * @type {symbol}
29
+ */
30
+ const intersectionObserverWasInitialized = Symbol("wasInitialized");
31
+
32
+ /**
33
+ * This CustomElement `monster-template` reloads a content and adds it to the ShadowRoot.
34
+ * The content is set to not visible,
35
+ *
36
+ * <img src="./images/template.png">
37
+ *
38
+ * You can create this control either by specifying the HTML tag `<monster-template />` directly in the HTML or using
39
+ * Javascript via the `document.createElement('monster-template');` method.
40
+ *
41
+ * ```html
42
+ * <monster-template></monster-template>
43
+ * ```
44
+ *
45
+ * Or you can create this CustomControl directly in Javascript:
46
+ *
47
+ * ```js
48
+ * import {Template} from '@schukai/component-form/source/template.js';
49
+ * document.createElement('monster-template');
50
+ * ```
51
+ *
52
+ * The content will not be loaded until this element is visible. If the element is invisible again and becomes visible again,
53
+ * the content is reloaded as well. you can disable this behavior by setting `reload=onshow`. *
54
+ *
55
+ * @startuml template.png
56
+ * skinparam monochrome true
57
+ * skinparam shadowing false
58
+ * HTMLElement <|-- CustomElement
59
+ * CustomElement <|-- CustomControl
60
+ * CustomControl <|-- Template
61
+ * @enduml
62
+ *
63
+ * @since 1.11.0
64
+ * @copyright schukai GmbH
65
+ * @memberOf Monster.Components.Form
66
+ * @summary A template control
67
+ * @fires Monster.Components.Form.event:monster-fetched
68
+ */
69
+ class Template extends CustomElement {
70
+ /**
71
+ * This method is called by the `instanceof` operator.
72
+ * @returns {symbol}
73
+ * @since 2.1.0
74
+ */
75
+ static get [instanceSymbol]() {
76
+ return Symbol.for("@schukai/component-form/template");
77
+ }
78
+
79
+ /**
80
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
81
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
82
+ *
83
+ * The individual configuration values can be found in the table.
84
+ *
85
+ * @property {Object} templates Template definitions
86
+ * @property {string} templates.main Main template
87
+ * @property {string} url=undefined
88
+ * @property {string} reload=undefined currently the only value defined is `onshow`. Currently the only value defined is onshow. this removes the IntersectionObserver. this means that the content is only loaded once. reloading of the content does not occur.
89
+ * @property {Monster.Components.Form.Processor[]} processors
90
+ * @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
91
+ * @property {String} fetch.redirect=error
92
+ * @property {String} fetch.method=GET
93
+ * @property {String} fetch.mode=same-origin
94
+ * @property {String} fetch.credentials=same-origin
95
+ * @property {Object} fetch.headers={"accept":"text/html"}}
96
+ */
97
+ get defaults() {
98
+ return Object.assign(
99
+ {},
100
+ super.defaults,
101
+ {
102
+ templates: {
103
+ main: getTemplate(),
104
+ },
105
+ url: undefined,
106
+ reload: undefined,
107
+ processors: [],
108
+ fetch: {
109
+ redirect: "error",
110
+ method: "GET",
111
+ mode: "same-origin",
112
+ credentials: "same-origin",
113
+ headers: {
114
+ accept: "text/html",
115
+ },
116
+ },
117
+ },
118
+ initOptionsFromArguments.call(this),
119
+ );
120
+ }
121
+
122
+ /**
123
+ * This method determines which attributes are to be monitored by `attributeChangedCallback()`.
124
+ *
125
+ * @return {string[]}
126
+ */
127
+ static get observedAttributes() {
128
+ const list = super.observedAttributes;
129
+ list.push(ATTRIBUTE_FORM_URL);
130
+ return list;
131
+ }
132
+
133
+ /**
134
+ *
135
+ */
136
+ [initMethodSymbol]() {;
137
+ super[initMethodSymbol]();
138
+
139
+ // data-monster-options
140
+ this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
141
+ if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
142
+ this.setOption("url", new URL(url, document.location).toString());
143
+ } else {
144
+ this.setOption("url", undefined);
145
+ }
146
+ };
147
+ }
148
+
149
+ /**
150
+ * This method is called internal and should not be called directly.
151
+ * @throws {Error} missing default slot
152
+ * @throws {Error} no shadow-root is defined
153
+ * @throws {Error} missing url
154
+ * @throws {Error} we won't be able to read the data
155
+ * @throws {Error} request failed
156
+ * @throws {Error} not found
157
+ * @throws {Error} undefined status or type
158
+ * @fires Monster.Components.Form.event:monster-fetched
159
+ * @return {Monster.Components.Form.Form}
160
+ */
161
+ [assembleMethodSymbol]() {;
162
+ super[assembleMethodSymbol]();
163
+ initIntersectionObserver.call(this);
164
+ }
165
+
166
+ /**
167
+ * This method is called internal and should not be called directly.
168
+ *
169
+ * @return {CSSStyleSheet[]}
170
+ */
171
+ static getCSSStyleSheet() {
172
+ return [];
173
+ }
174
+
175
+ /**
176
+ * This method is called internal and should not be called directly.
177
+ *
178
+ * @return {string}
179
+ */
180
+ static getTag() {
181
+ return "monster-template";
182
+ }
183
+
184
+ /**
185
+ * load content from url
186
+ *
187
+ * It is important to know that with this function the loading is executed
188
+ * directly. it is loaded as well when the element is not visible.
189
+ *
190
+ * @param {string|undefined} url
191
+ */
192
+ fetch(url) {
193
+ if (isString(url) || url instanceof URL) {
194
+ this.setAttribute(ATTRIBUTE_FORM_URL, `${url}`);
195
+ }
196
+
197
+ return loadContent.call(this);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * @typedef {Object} Processor
203
+ * @property {String} destination
204
+ * @property {String} source
205
+ * @memberOf Monster.Components.Form
206
+ * @since 1.11.8
207
+ */
208
+
209
+ /**
210
+ * This attribute can be used to pass a URL to this select.
211
+ *
212
+ * ```
213
+ * <monster-select data-monster-url="https://example.com/"></monster-select>
214
+ * ```
215
+ *
216
+ * @private
217
+ * @return {object}
218
+ */
219
+ function initOptionsFromArguments() {;
220
+ const options = {};
221
+
222
+ const url = this.getAttribute(ATTRIBUTE_FORM_URL);
223
+
224
+ if (isString(url)) {
225
+ options["url"] = new URL(url, document.location).toString();
226
+ }
227
+
228
+ if (this.hasAttribute(ATTRIBUTE_FORM_RELOAD)) {
229
+ options["reload"] = this.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase();
230
+ }
231
+
232
+ return options;
233
+ }
234
+
235
+ /**
236
+ * @private
237
+ * @throws {Error} missing default slot
238
+ * @throws {Error} no shadow-root is defined
239
+ * @throws {Error} missing url
240
+ * @throws {Error} we won't be able to read the data
241
+ * @throws {Error} request failed
242
+ * @throws {Error} not found
243
+ * @throws {Error} undefined status or type
244
+ * @fires Monster.Components.Form.event:monster-fetched
245
+ */
246
+ function initIntersectionObserver() {;
247
+
248
+ if (this[intersectionObserverWasInitialized] === true) {
249
+ return;
250
+ }
251
+
252
+ this[intersectionObserverWasInitialized] = true;
253
+
254
+ const options = {
255
+ threshold: [0.5],
256
+ };
257
+
258
+ const callback = (entries, observer) => {
259
+ for (const [, entry] of entries.entries()) {
260
+ if (entry.isIntersecting === true) {
261
+ if (this.getOption("reload") === "onshow") {
262
+ observer.disconnect();
263
+ }
264
+
265
+ try {
266
+ loadContent.call(this);
267
+ } catch (e) {
268
+ addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
269
+ }
270
+ }
271
+ }
272
+ };
273
+
274
+ const observer = new IntersectionObserver(callback, options);
275
+ observer.observe(this);
276
+ }
277
+
278
+ /**
279
+ * @private
280
+ * @throws {Error} missing default slot
281
+ * @throws {Error} no shadow-root is defined
282
+ * @throws {Error} missing url
283
+ * @throws {Error} we won't be able to read the data
284
+ * @throws {Error} request failed
285
+ * @throws {Error} not found
286
+ * @throws {Error} undefined status or type
287
+ * @throws {Error} client error
288
+ * @throws {Error} undefined status or type
289
+ * @throws {TypeError} value is not an instance of
290
+ * @throws {TypeError} value is not a string
291
+ * @fires Monster.Components.Form.event:monster-fetched
292
+ */
293
+ function loadContent() {;
294
+
295
+ if (!this.shadowRoot) {
296
+ throw new Error("no shadow-root is defined");
297
+ }
298
+
299
+ const url = this.getOption("url", undefined);
300
+ if (!isString(url) || url === "") {
301
+ throw new Error("missing url");
302
+ }
303
+
304
+ const options = this.getOption("fetch", {});
305
+
306
+ const defaultSlot = this.shadowRoot.querySelector("slot[name=default]");
307
+ if (!(defaultSlot instanceof HTMLElement)) {
308
+ throw new Error("missing default slot");
309
+ }
310
+
311
+ defaultSlot.style.display = "block";
312
+
313
+ let container = this.shadowRoot.querySelector(
314
+ `[${ATTRIBUTE_ROLE}=container]`,
315
+ );
316
+ if (!(container instanceof HTMLElement)) {
317
+ container = document.createElement("div");
318
+ container.style.display = "none";
319
+ container.setAttribute(ATTRIBUTE_ROLE, "container");
320
+ this.shadowRoot.appendChild(container);
321
+ }
322
+
323
+ loadAndAssignContent(container, url, options)
324
+ .then(() => {
325
+ defaultSlot.style.display = "none";
326
+ runProcessors.call(this);
327
+ })
328
+ .catch((e) => {
329
+ throw e;
330
+ });
331
+ }
332
+
333
+ /**
334
+ * @private
335
+ * @return {runProcessors}
336
+ */
337
+ function runProcessors() {;
338
+
339
+ const processors = this.getOption("processors");
340
+ if (!isArray(processors)) return;
341
+
342
+ for (const [, processor] of processors.entries()) {
343
+ const source = processor?.source;
344
+ const destination = processor?.destination;
345
+
346
+ if (isString(source) && isString(destination)) {
347
+ const sourceNode = this.shadowRoot.querySelector(source);
348
+ const destinationNode = document.querySelector(destination);
349
+
350
+ if (
351
+ sourceNode instanceof HTMLElement &&
352
+ destinationNode instanceof HTMLElement
353
+ ) {
354
+ destinationNode.innerHTML = sourceNode.cloneNode(true).innerHTML;
355
+ }
356
+ }
357
+ }
358
+
359
+ return this;
360
+ }
361
+
362
+ /**
363
+ * @private
364
+ * @return {string}
365
+ */
366
+ function getTemplate() {
367
+ // language=HTML
368
+ return `
369
+ <slot name="default"></slot>
370
+ `;
371
+ }
372
+
373
+ registerCustomElement(Template);