@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,601 @@
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 { internalSymbol } from "../../constants.mjs";
9
+ import { Datasource } from "../../data/datasource.mjs";
10
+ import { RestAPI } from "../../data/datasource/server/restapi.mjs";
11
+ import { WebConnect } from "../../data/datasource/server/webconnect.mjs";
12
+ import { WriteError } from "../../data/datasource/server/restapi/writeerror.mjs";
13
+ import { LocalStorage } from "../../data/datasource/storage/localstorage.mjs";
14
+ import { SessionStorage } from "../../data/datasource/storage/sessionstorage.mjs";
15
+ import {
16
+ ATTRIBUTE_DISABLED,
17
+ ATTRIBUTE_ERRORMESSAGE,
18
+ ATTRIBUTE_PREFIX,
19
+ ATTRIBUTE_UPDATER_ATTRIBUTES,
20
+ ATTRIBUTE_UPDATER_INSERT,
21
+ ATTRIBUTE_UPDATER_REMOVE,
22
+ ATTRIBUTE_UPDATER_REPLACE,
23
+ } from "../../dom/constants.mjs";
24
+ import {
25
+ assembleMethodSymbol,
26
+ CustomElement,
27
+ registerCustomElement,
28
+ } from "../../dom/customelement.mjs";
29
+ import { addObjectWithUpdaterToElement } from "../../dom/updater.mjs";
30
+ import { isFunction, isString } from "../../types/is.mjs";
31
+ import { Observer } from "../../types/observer.mjs";
32
+ import { ProxyObserver } from "../../types/proxyobserver.mjs";
33
+ import { Processing } from "../../util/processing.mjs";
34
+ import { MessageStateButton } from "./message-state-button.mjs";
35
+ import {
36
+ ATTRIBUTE_FORM_DATASOURCE,
37
+ ATTRIBUTE_FORM_DATASOURCE_ARGUMENTS,
38
+ } from "./constants.mjs";
39
+ import { StateButton } from "./state-button.mjs";
40
+ import { getSlottedElements } from "../../dom/customelement.mjs";
41
+ import { FormStyleSheet } from "./stylesheet/form.mjs";
42
+
43
+ export { Form };
44
+
45
+ /**
46
+ * @private
47
+ * @since 3.1.0
48
+ * @type {string}
49
+ */
50
+ const ATTRIBUTE_FORM_DATASOURCE_ACTION = `${ATTRIBUTE_PREFIX}datasource-action`;
51
+
52
+ /**
53
+ * Form data is the internal representation of the form data
54
+ *
55
+ * @private
56
+ * @type {symbol}
57
+ * @since 1.7.0
58
+ */
59
+ const formDataSymbol = Symbol.for("@schukai/component-form/form@@formdata");
60
+
61
+ /**
62
+ * @private
63
+ * @type {symbol}
64
+ * @since 2.8.0
65
+ */
66
+ const formDataUpdaterSymbol = Symbol.for(
67
+ "@schukai/component-form/form@@formdata-updater-link",
68
+ );
69
+
70
+ /**
71
+ * @private
72
+ * @type {symbol}
73
+ * @since 1.7.0
74
+ */
75
+ const formElementSymbol = Symbol.for(
76
+ "@schukai/component-form/form@@form-element",
77
+ );
78
+
79
+ /**
80
+ * @private
81
+ * @type {symbol}
82
+ * @since 2.5.0
83
+ */
84
+ const registeredDatasourcesSymbol = Symbol.for(
85
+ "@schukai/component-form/form@@registered-datasources",
86
+ );
87
+
88
+ /**
89
+ * @private
90
+ * @since 1.7.0
91
+ * @type {string}
92
+ */
93
+ const PROPERTY_VALIDATION_KEY = "__validation";
94
+
95
+ /**
96
+ * This CustomControl creates a form element with a variety of options.
97
+ *
98
+ * <img src="./images/form.png">
99
+ *
100
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library.
101
+ *
102
+ * You can create this control either by specifying the HTML tag `<monster-form />` directly in the HTML or using
103
+ * Javascript via the `document.createElement('monster-form');` method.
104
+ *
105
+ * ```html
106
+ * <monster-form></monster-form>
107
+ * ```
108
+ *
109
+ * Or you can create this CustomControl directly in Javascript:
110
+ *
111
+ * ```js
112
+ * import {Form} from '@schukai/component-form/source/form.js';
113
+ * document.createElement('monster-form');
114
+ * ```
115
+ *
116
+ * @startuml form.png
117
+ * skinparam monochrome true
118
+ * skinparam shadowing false
119
+ * HTMLElement <|-- CustomElement
120
+ * CustomElement <|-- Form
121
+ * @enduml
122
+ *
123
+ * @since 1.6.0
124
+ * @copyright schukai GmbH
125
+ * @memberOf Monster.Components.Form
126
+ * @summary A configurable form control
127
+ */
128
+ class Form extends CustomElement {
129
+ /**
130
+ * @throws {Error} the options attribute does not contain a valid json definition.
131
+ * @since 1.7.0
132
+ */
133
+ constructor() {
134
+ super();
135
+ this[formDataSymbol] = new ProxyObserver({});
136
+ }
137
+
138
+ /**
139
+ * This method is called by the `instanceof` operator.
140
+ * @returns {symbol}
141
+ * @since 2.1.0
142
+ */
143
+ static get [instanceSymbol]() {
144
+ return Symbol.for("@schukai/component-form/form");
145
+ }
146
+
147
+ /**
148
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
149
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
150
+ *
151
+ * The individual configuration values can be found in the table.
152
+ *
153
+ * @property {Object} templates Template definitions
154
+ * @property {string} templates.main Main template
155
+ * @property {Datasource} datasource data source
156
+ * @property {Object} reportValidity
157
+ * @property {string} reportValidity.selector which element should be used to report the validity
158
+ * @property {function} reportValidity.errorHandler function to handle the error
159
+ * @property {Object} classes
160
+ * @property {string} classes.button class for the form
161
+ */
162
+ get defaults() {
163
+ return Object.assign(
164
+ {},
165
+ super.defaults,
166
+ {
167
+ templates: {
168
+ main: getTemplate(),
169
+ },
170
+ datasource: undefined,
171
+ reportValidity: {
172
+ selector: "input,select,textarea",
173
+ errorHandler: undefined,
174
+ },
175
+ classes: {
176
+ form: "monster-form",
177
+ },
178
+ },
179
+ initOptionsFromArguments.call(this),
180
+ );
181
+ }
182
+
183
+ /**
184
+ * Called every time the element is inserted into the DOM. Useful for running setup code, such as
185
+ * fetching resources or rendering. Generally, you should try to delay work until this time.
186
+ *
187
+ * @return {void}
188
+ */
189
+ connectedCallback() {
190
+ super["connectedCallback"]();
191
+ }
192
+
193
+ /**
194
+ * The refresh method is called to update the control after a change with fresh data.
195
+ *
196
+ * Therefore, the data source is called again and the data is updated.
197
+ *
198
+ * If you have updated the data source with `setOption('datasource',datasource), you must call this method.
199
+ *
200
+ * @return {Form}
201
+ * @throws {Error} undefined datasource
202
+ */
203
+ refresh() {;
204
+
205
+ try {
206
+ this.setAttribute(ATTRIBUTE_DISABLED, "");
207
+ const datasource = this.getOption("datasource");
208
+
209
+ if (!(datasource instanceof Datasource)) {
210
+ throw new Error("undefined datasource");
211
+ }
212
+
213
+ return datasource
214
+ .read()
215
+ .then(() => {
216
+ this[formDataSymbol].setSubject(datasource.get());
217
+ })
218
+ .then(() => {
219
+ new Processing(() => {
220
+ this.removeAttribute(ATTRIBUTE_DISABLED);
221
+ }).run();
222
+ })
223
+ .catch((e) => {
224
+ this.removeAttribute(ATTRIBUTE_DISABLED);
225
+ this.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.toString());
226
+ });
227
+ } catch (e) {
228
+ this.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.toString());
229
+ this.removeAttribute(ATTRIBUTE_DISABLED);
230
+ throw e;
231
+ }
232
+ }
233
+
234
+ /**
235
+ *
236
+ * @return {Monster.Components.Form.Form}
237
+ */
238
+ [assembleMethodSymbol]() {;
239
+ super[assembleMethodSymbol]();
240
+
241
+ initControlReferences.call(this);
242
+ initDatasource.call(this);
243
+ initUpdater.call(this);
244
+ initObserver.call(this);
245
+
246
+ return this;
247
+ }
248
+
249
+ /**
250
+ *
251
+ * @return {*}
252
+ */
253
+ getValues() {
254
+ return this[formDataSymbol].getSubject();
255
+ }
256
+
257
+ /**
258
+ *
259
+ * @return {string}
260
+ */
261
+ static getTag() {
262
+ return "monster-form";
263
+ }
264
+
265
+ /**
266
+ *
267
+ * @return {CSSStyleSheet}
268
+ */
269
+ static getCSSStyleSheet() {
270
+ return [FormStyleSheet];
271
+ }
272
+
273
+ static [registeredDatasourcesSymbol] = new Map([
274
+ ["restapi", RestAPI],
275
+ ["localstorage", LocalStorage],
276
+ ["sessionstorage", SessionStorage],
277
+ ["webconnect", WebConnect],
278
+ ]);
279
+
280
+ /**
281
+ * Register a new datasource
282
+ *
283
+ * @param {string} name
284
+ * @param {Monster.Data.Datasource} datasource
285
+ */
286
+ static registerDatasource(name, datasource) {
287
+ Form[registeredDatasourcesSymbol].set(name, datasource);
288
+ }
289
+
290
+ /**
291
+ * Unregister a registered datasource
292
+ *
293
+ * @param {string} name
294
+ */
295
+ static unregisterDatasource(name) {
296
+ Form[registeredDatasourcesSymbol].delete(name);
297
+ }
298
+
299
+ /**
300
+ * Get registered data sources
301
+ *
302
+ * @return {Map}
303
+ */
304
+ static getDatasources() {
305
+ return Form[registeredDatasourcesSymbol];
306
+ }
307
+
308
+ /**
309
+ * Run reportValidation on all child html form controls.
310
+ *
311
+ * @since 2.10.0
312
+ * @returns {boolean}
313
+ */
314
+ reportValidity() {
315
+ let valid = true;
316
+
317
+ const selector = this.getOption("reportValidity.selector");
318
+ const nodes = getSlottedElements.call(this, selector);
319
+ nodes.forEach((node) => {
320
+ if (typeof node.reportValidity === "function") {
321
+ if (node.reportValidity() === false) {
322
+ valid = false;
323
+ }
324
+ }
325
+ });
326
+
327
+ return valid;
328
+ }
329
+ }
330
+
331
+ /**
332
+ * @private
333
+ */
334
+ function initUpdater() {;
335
+
336
+ if (!this.shadowRoot) {
337
+ throw new Error("no shadow-root is defined");
338
+ }
339
+
340
+ const slots = this.shadowRoot.querySelectorAll("slot");
341
+ for (const [, slot] of Object.entries(slots)) {
342
+ for (const [, node] of Object.entries(slot.assignedNodes())) {
343
+ if (!(node instanceof HTMLElement)) {
344
+ continue;
345
+ }
346
+
347
+ const query = `[${ATTRIBUTE_UPDATER_ATTRIBUTES}],[${ATTRIBUTE_UPDATER_REPLACE}],[${ATTRIBUTE_UPDATER_REMOVE}],[${ATTRIBUTE_UPDATER_INSERT}]`;
348
+ const controls = node.querySelectorAll(query);
349
+
350
+ const list = new Set([...controls]);
351
+
352
+ if (node.matches(query)) {
353
+ list.add(node);
354
+ }
355
+
356
+ if (list.size === 0) {
357
+ continue;
358
+ }
359
+
360
+ addObjectWithUpdaterToElement.call(
361
+ node,
362
+ list,
363
+ formDataUpdaterSymbol,
364
+ this[formDataSymbol],
365
+ );
366
+ }
367
+ }
368
+ }
369
+
370
+ /**
371
+ * @private
372
+ */
373
+ function initDatasource() {;
374
+
375
+ if (!this.shadowRoot) {
376
+ throw new Error("no shadow-root is defined");
377
+ }
378
+
379
+ const slots = this.shadowRoot.querySelectorAll("slot");
380
+ for (const [, slot] of Object.entries(slots)) {
381
+ for (const [, node] of Object.entries(slot.assignedNodes())) {
382
+ if (!(node instanceof HTMLElement)) {
383
+ continue;
384
+ }
385
+
386
+ const query = `[${ATTRIBUTE_FORM_DATASOURCE_ACTION}=write]`;
387
+ const controls = node.querySelectorAll(query);
388
+
389
+ const list = new Set([...controls]);
390
+
391
+ if (node.matches(query)) {
392
+ list.add(node);
393
+ }
394
+
395
+ if (list.size === 0) {
396
+ continue;
397
+ }
398
+
399
+ initWriteActions.call(this, list);
400
+ }
401
+ }
402
+ }
403
+
404
+ /**
405
+ * @private
406
+ * @param elements
407
+ */
408
+ function initWriteActions(elements) {;
409
+
410
+ elements.forEach((element) => {
411
+ if (element instanceof HTMLElement) {
412
+ element.addEventListener("click", () => {
413
+ runWriteCallback.call(this, element);
414
+ });
415
+
416
+ const g = element?.getOption;
417
+ if (!isFunction(g)) {
418
+ return;
419
+ }
420
+
421
+ const s = element?.setOption;
422
+ if (!isFunction(s)) {
423
+ return;
424
+ }
425
+
426
+ const fn = element.getOption("actions.click");
427
+
428
+ if (!isFunction(fn)) {
429
+ return;
430
+ }
431
+
432
+ // disable console.log of standard click event
433
+ element.setOption("actions.click", function () {
434
+ // do nothing!
435
+ });
436
+ }
437
+ });
438
+ }
439
+
440
+ function runWriteCallback(button) {;
441
+
442
+ if (typeof this.reportValidity === "function") {
443
+ if (this.reportValidity() === false) {
444
+ if (
445
+ button instanceof StateButton ||
446
+ button instanceof MessageStateButton
447
+ ) {
448
+ button.setState("failed");
449
+ }
450
+ return;
451
+ }
452
+ }
453
+
454
+ const datasource = this.getOption("datasource");
455
+ if (!(datasource instanceof Datasource)) {
456
+ return;
457
+ }
458
+
459
+ if (button instanceof StateButton || button instanceof MessageStateButton) {
460
+ button.setState("activity");
461
+ }
462
+
463
+ //const data = form?.[formDataSymbol]?.getRealSubject();
464
+ const writePromise = datasource
465
+ .set(this[formDataSymbol].getRealSubject())
466
+ .write();
467
+ if (!(writePromise instanceof Promise)) {
468
+ throw new Error("datasource.write() must return a promise");
469
+ }
470
+
471
+ writePromise
472
+ .then((r) => {
473
+ if (
474
+ button instanceof StateButton ||
475
+ button instanceof MessageStateButton
476
+ ) {
477
+ button.setState("successful");
478
+ }
479
+ this[formDataSymbol].getSubject()[PROPERTY_VALIDATION_KEY] = {};
480
+ })
481
+ .catch((e) => {
482
+ if (e instanceof WriteError) {
483
+ this[formDataSymbol].getSubject()[PROPERTY_VALIDATION_KEY] =
484
+ e.getValidation();
485
+ }
486
+
487
+ if (
488
+ button instanceof StateButton ||
489
+ button instanceof MessageStateButton
490
+ ) {
491
+ button.setState("failed");
492
+ }
493
+
494
+ if (button instanceof MessageStateButton) {
495
+ button.setMessage(e.message);
496
+ button.showMessage();
497
+ }
498
+ });
499
+ }
500
+
501
+ /**
502
+ * This attribute can be used to pass a URL to this select.
503
+ *
504
+ * ```
505
+ * <monster-form data-monster-datasource="restapi:....."></monster-form>
506
+ * ```
507
+ *
508
+ * @private
509
+ * @return {object}
510
+ */
511
+ function initOptionsFromArguments() {;
512
+ const options = {};
513
+
514
+ const datasource = this.getAttribute(ATTRIBUTE_FORM_DATASOURCE);
515
+ if (isString(datasource)) {
516
+ for (const [key, classObject] of Form.getDatasources()) {
517
+ if (datasource === key) {
518
+ let args = this.getAttribute(ATTRIBUTE_FORM_DATASOURCE_ARGUMENTS);
519
+
520
+ try {
521
+ args = JSON.parse(args);
522
+ } catch (e) {
523
+ this.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.toString());
524
+ continue;
525
+ }
526
+
527
+ try {
528
+ options["datasource"] = new classObject(args);
529
+ } catch (e) {
530
+ this.setAttribute(ATTRIBUTE_ERRORMESSAGE, e.toString());
531
+ continue;
532
+ }
533
+
534
+ break;
535
+ }
536
+
537
+ if (options["datasource"] instanceof Datasource) {
538
+ break;
539
+ }
540
+ }
541
+ }
542
+
543
+ return options;
544
+ }
545
+
546
+ /**
547
+ * @private
548
+ * @this Form
549
+ */
550
+ function initObserver() {
551
+ const self = this;
552
+
553
+ let lastDatasource = null;
554
+ self[internalSymbol].attachObserver(
555
+ new Observer(function () {
556
+ const datasource = self.getOption("datasource");
557
+ if (datasource !== lastDatasource) {
558
+ new Processing(100, function () {
559
+ self.refresh();
560
+ }).run();
561
+ }
562
+
563
+ lastDatasource = datasource;
564
+ }),
565
+ );
566
+ }
567
+
568
+ /**
569
+ * @private
570
+ * @return {Monster.Components.Form.Form}
571
+ */
572
+ function initControlReferences() {;
573
+
574
+ if (!this.shadowRoot) {
575
+ throw new Error("no shadow-root is defined");
576
+ }
577
+
578
+ this[formElementSymbol] = this.shadowRoot.querySelector(
579
+ "[data-monster-role=form]",
580
+ );
581
+ return this;
582
+ }
583
+
584
+ /**
585
+ * @private
586
+ * @return {string}
587
+ */
588
+ function getTemplate() {
589
+ // language=HTML
590
+ return `
591
+ <div data-monster-role="control" part="control">
592
+ <form data-monster-attributes="disabled path:disabled | if:true, class path:classes.form"
593
+ data-monster-role="form"
594
+ part="form">
595
+ <slot data-monster-role="slot"></slot>
596
+ </form>
597
+ </div>
598
+ `;
599
+ }
600
+
601
+ registerCustomElement(Form);