@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,374 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2022. 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
+ ATTRIBUTE_ERRORMESSAGE,
10
+ ATTRIBUTE_PREFIX,
11
+ ATTRIBUTE_ROLE,
12
+ } from "../../dom/constants.mjs";
13
+ import {
14
+ assembleMethodSymbol,
15
+ CustomElement,
16
+ initMethodSymbol,
17
+ registerCustomElement,
18
+ } from "../../dom/customelement.mjs";
19
+ import { findTargetElementFromEvent } from "../../dom/events.mjs";
20
+ import { isString } from "../../types/is.mjs";
21
+ import { MessageStyleSheet } from "./stylesheet/message.mjs";
22
+
23
+ export { Message };
24
+
25
+ /**
26
+ * @private
27
+ * @type {symbol}
28
+ */
29
+ const controlElementSymbol = Symbol("controlElement");
30
+
31
+ /**
32
+ * @private
33
+ * @type {symbol}
34
+ */
35
+ const removeElementSymbol = Symbol("removeElement");
36
+
37
+ /**
38
+ * @private
39
+ * @type {symbol}
40
+ */
41
+ const timerSymbol = Symbol("timer");
42
+
43
+ /**
44
+ * @private
45
+ * @type {symbol}
46
+ */
47
+ const mouseenterEventHandlerSymbol = Symbol("mouseenterEventHandler");
48
+
49
+ /**
50
+ * @private
51
+ * @type {symbol}
52
+ */
53
+ const mouseleaveEventHandlerSymbol = Symbol("mouseleaveEventHandler");
54
+
55
+ /**
56
+ * @private
57
+ * @type {symbol}
58
+ */
59
+ const removeEventHandlerSymbol = Symbol("removeEventHandler");
60
+
61
+ /**
62
+ * This CustomControl creates a notification element with a variety of options.
63
+ *
64
+ * <img src="./images/message.png">
65
+ *
66
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library.
67
+ *
68
+ * You can create this control either by specifying the HTML tag `<monster-notify-message />` directly in the HTML
69
+ *
70
+ * ```html
71
+ * <monster-notify-message></monster-notify-message>
72
+ * ```
73
+ *
74
+ * or using Javascript via the `document.createElement('monster-notify');` method.
75
+ *
76
+ * ```javascript
77
+ * import '@schukai/monster/source/components/notify/message.js';
78
+ * document.createElement('monster-notify-message');
79
+ * ```
80
+ *
81
+ * @externalExample ../../../example/components/notify/message.mjs
82
+ * @startuml message.png
83
+ * skinparam monochrome true
84
+ * skinparam shadowing false
85
+ * HTMLElement <|-- CustomElement
86
+ * CustomElement <|-- Message
87
+ * @enduml
88
+ * @since 1.0.0
89
+ * @copyright schukai GmbH
90
+ * @memberOf Monster.Components.Notify
91
+ * @summary A highly configurable select control
92
+ * @fires Monster.Components.Notify.event:monster-xxxx
93
+ */
94
+ class Message extends CustomElement {
95
+ /**
96
+ * The defaults can be set either directly in the object or via an attribute in the HTML tag.
97
+ * The value of the attribute `data-monster-options` in the HTML tag must be a JSON string.
98
+ *
99
+ * ```
100
+ * <monster-message data-monster-options="{}"></monster-message>
101
+ * ```
102
+ *
103
+ * Since 1.18.0 the JSON can be specified as a DataURI.
104
+ *
105
+ * ```
106
+ * new Monster.Types.DataUrl(btoa(JSON.stringify({
107
+ * timeout: 3000,
108
+ * features: {
109
+ * clear: true,
110
+ * disappear: true
111
+ * }
112
+ * })),'application/json',true).toString()
113
+ * ```
114
+ *
115
+ * @property {string} templates Template definitions
116
+ * @property {Object} templates Template definitions
117
+ * @property {integer} timeout time in milliseconds until the message should be removed. The timeout can be disabled via the feature `disappear`.
118
+ * @property {Object} features
119
+ * @property {boolean} features.clear show clear button
120
+ * @property {boolean} features.disappear automatically remove the message after the timeout
121
+ * @property {string} templates.main Main template
122
+ *
123
+ */
124
+ get defaults() {
125
+ return Object.assign(
126
+ {},
127
+ super.defaults,
128
+ {
129
+ timeout: 6000,
130
+ features: {
131
+ clear: true,
132
+ disappear: true,
133
+ },
134
+ content: "<slot></slot>",
135
+ templates: {
136
+ main: getTemplate(),
137
+ },
138
+ },
139
+ initOptionsFromArguments.call(this),
140
+ );
141
+ }
142
+
143
+ /**
144
+ *
145
+ * @return {Monster.Components.Notify.Message}
146
+ */
147
+ [assembleMethodSymbol]() {
148
+ super[assembleMethodSymbol]();;
149
+ initControlReferences.call(this);
150
+ initEventhandler.call(this);
151
+ return this;
152
+ }
153
+
154
+ /**
155
+ *
156
+ * @return {string}
157
+ */
158
+ static getTag() {
159
+ return "monster-notify-message";
160
+ }
161
+
162
+ /**
163
+ *
164
+ * @return {CSSStyleSheet[]}
165
+ */
166
+ static getCSSStyleSheet() {
167
+ return [MessageStyleSheet];
168
+ }
169
+
170
+ /**
171
+ *
172
+ */
173
+ [initMethodSymbol]() {;
174
+ super[initMethodSymbol]();
175
+ }
176
+
177
+ /**
178
+ * @return {void}
179
+ */
180
+ connectedCallback() {
181
+ super.connectedCallback();;
182
+
183
+ if (this.getOption("features.disappear") === true) {
184
+ startFadeout.call(this);
185
+ this.addEventListener("mouseenter", this[mouseenterEventHandlerSymbol]);
186
+ }
187
+ }
188
+
189
+ /**
190
+ * @return {void}
191
+ */
192
+ disconnectedCallback() {
193
+ super.disconnectedCallback();
194
+ stopFadeout.call(this);;
195
+
196
+ if (this.getOption("features.disappear") === true) {
197
+ this.removeEventListener(
198
+ "mouseenter",
199
+ this[mouseenterEventHandlerSymbol],
200
+ );
201
+ this.removeEventListener(
202
+ "mouseenter",
203
+ this[mouseleaveEventHandlerSymbol],
204
+ );
205
+ }
206
+ }
207
+ }
208
+
209
+ /**
210
+ * @private
211
+ */
212
+ function startFadeout() {;
213
+ if (!this?.[timerSymbol]) {
214
+ this[timerSymbol] = setTimeout(() => {
215
+ removeSelf.call(this);
216
+ }, this.getOption("timeout", 1000));
217
+ }
218
+ }
219
+
220
+ function removeSelf() {;
221
+
222
+ stopFadeout();
223
+ this.classList.add("fadeout");
224
+
225
+ setTimeout(() => {
226
+ this.remove();
227
+ }, 200);
228
+ }
229
+
230
+ /**
231
+ * @private
232
+ */
233
+ function stopFadeout() {;
234
+ if (this?.[timerSymbol]) {
235
+ clearTimeout(this[timerSymbol]);
236
+ this[timerSymbol] = undefined;
237
+ }
238
+ }
239
+
240
+ /**
241
+ * This attribute can be used to pass a URL to this select.
242
+ *
243
+ * @private
244
+ * @return {object}
245
+ */
246
+ function initOptionsFromArguments() {;
247
+ const options = {};
248
+
249
+ const timeout = this.getAttribute(ATTRIBUTE_PREFIX + "timeout");
250
+ if (isString(timeout)) {
251
+ try {
252
+ options["timeout"] = parseInt(timeout, 10);
253
+ } catch (e) {
254
+ this.setAttribute(
255
+ ATTRIBUTE_ERRORMESSAGE,
256
+ this.getAttribute(ATTRIBUTE_ERRORMESSAGE + ", " + e.toString()),
257
+ );
258
+ }
259
+ }
260
+
261
+ return options;
262
+ }
263
+
264
+ /**
265
+ * @private
266
+ * @return {Message}
267
+ * @throws {Error} no shadow-root is defined
268
+ */
269
+ function initControlReferences() {;
270
+
271
+ if (!this.shadowRoot) {
272
+ throw new Error("no shadow-root is defined");
273
+ }
274
+
275
+ this[controlElementSymbol] = this.shadowRoot.querySelector(
276
+ "[" + ATTRIBUTE_ROLE + "=control]",
277
+ );
278
+ this[removeElementSymbol] = this.shadowRoot.querySelector(
279
+ "[" + ATTRIBUTE_ROLE + "=remove]",
280
+ );
281
+ }
282
+
283
+ /**
284
+ * @private
285
+ */
286
+ function initEventhandler() {;
287
+
288
+ /**
289
+ * @param {Event} event
290
+ */
291
+ this[mouseenterEventHandlerSymbol] = (event) => {
292
+ const element = findTargetElementFromEvent(
293
+ event,
294
+ ATTRIBUTE_ROLE,
295
+ "control",
296
+ );
297
+
298
+ if (element instanceof HTMLElement) {
299
+ this.removeEventListener(
300
+ "mouseenter",
301
+ this[mouseenterEventHandlerSymbol],
302
+ );
303
+ this.addEventListener("mouseleave", this[mouseleaveEventHandlerSymbol]);
304
+ stopFadeout.call(this);
305
+ }
306
+ };
307
+
308
+ /**
309
+ * @param {Event} event
310
+ */
311
+ this[mouseleaveEventHandlerSymbol] = (event) => {
312
+ const element = findTargetElementFromEvent(
313
+ event,
314
+ ATTRIBUTE_ROLE,
315
+ "control",
316
+ );
317
+ if (element instanceof HTMLElement) {
318
+ this.removeEventListener(
319
+ "mouseleave",
320
+ this[mouseleaveEventHandlerSymbol],
321
+ );
322
+ this.addEventListener("mouseenter", this[mouseenterEventHandlerSymbol]);
323
+ startFadeout.call(this);
324
+ }
325
+ };
326
+
327
+ /**
328
+ * @param {Event} event
329
+ */
330
+ this[removeEventHandlerSymbol] = (event) => {
331
+ const element = findTargetElementFromEvent(event, ATTRIBUTE_ROLE, "remove");
332
+
333
+ if (element instanceof HTMLElement) {
334
+ removeSelf.call(this);
335
+ }
336
+ };
337
+
338
+ if (this.getOption("features.close") === true) {
339
+ this[removeElementSymbol].addEventListener(
340
+ "click",
341
+ this[removeEventHandlerSymbol],
342
+ );
343
+ this[removeElementSymbol].addEventListener(
344
+ "touch",
345
+ this[removeEventHandlerSymbol],
346
+ );
347
+ }
348
+
349
+ return this;
350
+ }
351
+
352
+ /**
353
+ * @private
354
+ * @return {string}
355
+ */
356
+ function getTemplate() {
357
+ // language=HTML
358
+ return `
359
+ <div data-monster-role="control" part="control" class="center">
360
+ <div data-monster-role="message" part="message"
361
+ data-monster-attributes="data-monster-orientation path:orientation">
362
+ <div data-monster-replace="path:content" part="content"
363
+ data-monster-role="content">
364
+
365
+ </div>
366
+ <div part="remove"
367
+ data-monster-attributes="class path:features.clear | ?::hidden "
368
+ data-monster-role="close" tabindex="-1"></div>
369
+ </div>
370
+ </div>
371
+ `;
372
+ }
373
+
374
+ registerCustomElement(Message);
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2022. 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
+ /**
9
+ * Namespace for all notify related functions.
10
+ *
11
+ * @namespace Monster.Components.Notify
12
+ * @memberOf Monster
13
+ * @author schukai GmbH
14
+ */
15
+ const ns = {};
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
3
+ * Node module: @schukai/component-form
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 { ATTRIBUTE_ROLE } from "../../dom/constants.mjs";
9
+ import {
10
+ assembleMethodSymbol,
11
+ CustomElement,
12
+ registerCustomElement,
13
+ } from "../../dom/customelement.mjs";
14
+ import { validateInstance, validateString } from "../../types/validate.mjs";
15
+ import { Message } from "./message.mjs";
16
+ import { NotifyStyleSheet } from "./stylesheet/notify.mjs";
17
+ import { Queue } from "../../types/queue.mjs";
18
+ import { fireCustomEvent } from "../../dom/events.mjs";
19
+
20
+ export { Notify };
21
+
22
+ /**
23
+ * @private
24
+ * @type {symbol}
25
+ */
26
+ const controlElementSymbol = Symbol("controlElement");
27
+
28
+ /**
29
+ * @private
30
+ * @type {symbol}
31
+ */
32
+ const containerElementSymbol = Symbol("containerElement");
33
+
34
+ /**
35
+ * @private
36
+ * @type {symbol}
37
+ */
38
+ const queueSymbol = Symbol("queue");
39
+
40
+ /**
41
+ * This CustomControl creates a notification element with a variety of options.
42
+ *
43
+ * <img src="./images/notify.png">
44
+ *
45
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library.
46
+ *
47
+ * You can create this control either by specifying the HTML tag `<monster-notify />` directly in the HTML
48
+ *
49
+ * ```html
50
+ * <monster-notify></monster-notify>
51
+ * ```
52
+ *
53
+ * or using Javascript via the `document.createElement('monster-notify');` method.
54
+ *
55
+ * ```js
56
+ * import '@schukai/monster/source/components/notify/notify.js';
57
+ * document.createElement('monster-notify');
58
+ * ```
59
+ *
60
+ * ## Events
61
+ *
62
+ * The CustomEvent has the property [`detail`](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail).
63
+ *
64
+ * ```
65
+ * node.addEventListener('monster-notify-message',(e)=>console.log(e.detail))
66
+ * ```
67
+ *
68
+ * @externalExample ../../../example/components/notify/notify.mjs
69
+ * @startuml notify.png
70
+ * skinparam monochrome true
71
+ * skinparam shadowing false
72
+ * HTMLElement <|-- CustomElement
73
+ * CustomElement <|-- Notify
74
+ * @enduml
75
+ *
76
+ * @since 1.0.0
77
+ * @copyright schukai GmbH
78
+ * @memberOf Monster.Components.Notify
79
+ * @summary A highly configurable select control
80
+ */
81
+ class Notify extends CustomElement {
82
+ constructor() {
83
+ super();
84
+ this[queueSymbol] = new Queue();
85
+ }
86
+
87
+ /**
88
+ * The defaults can be set either directly in the object or via an attribute in the HTML tag.
89
+ * The value of the attribute `data-monster-options` in the HTML tag must be a JSON string.
90
+ *
91
+ * ```html
92
+ * <monster-notify data-monster-options="{}"></monster-notify>
93
+ * ```
94
+ *
95
+ * Since 1.18.0 the JSON can be specified as a DataURI.
96
+ *
97
+ * ```
98
+ * new Monster.Types.DataUrl(btoa(JSON.stringify({
99
+ * orientation: 'right top'
100
+ * })),'application/json',true).toString()
101
+ * ```
102
+ *
103
+ * @property {string} templates Template definitions
104
+ * @property {Object} templates Template definitions
105
+ * @property {string} templates.main Main template
106
+ */
107
+ get defaults() {
108
+ return Object.assign(
109
+ {},
110
+ super.defaults,
111
+ {
112
+ orientation: "left top",
113
+ templates: {
114
+ main: getTemplate(),
115
+ },
116
+ },
117
+ initOptionsFromArguments.call(this),
118
+ );
119
+ }
120
+
121
+ /**
122
+ *
123
+ * @return {Notify}
124
+ */
125
+ [assembleMethodSymbol]() {
126
+ super[assembleMethodSymbol]();;
127
+ initControlReferences.call(this);
128
+
129
+ if (this[containerElementSymbol]) {
130
+ while (this[queueSymbol].isEmpty() === false) {
131
+ this.push(this[queueSymbol].poll());
132
+ }
133
+ }
134
+
135
+ return this;
136
+ }
137
+
138
+ /**
139
+ *
140
+ * @return {string}
141
+ */
142
+ static getTag() {
143
+ return "monster-notify";
144
+ }
145
+
146
+ /**
147
+ *
148
+ * @return {CSSStyleSheet[]}
149
+ */
150
+ static getCSSStyleSheet() {
151
+ return [NotifyStyleSheet];
152
+ }
153
+
154
+ /**
155
+ *
156
+ * @param {Monster.Components.Notify.Massage|String} message
157
+ * @return {Monster.Components.Notify.Notify}
158
+ */
159
+ push(message) {;
160
+
161
+ let messageElement = message;
162
+ if (!(message instanceof Message)) {
163
+ const text = validateString(message);
164
+ messageElement = document.createElement("monster-notify-message");
165
+ messageElement.setOption("content", text);
166
+ }
167
+
168
+ validateInstance(messageElement, Message);
169
+ messageElement.setAttribute(ATTRIBUTE_ROLE, "message");
170
+
171
+ // if not connected, add to queue
172
+ if (!this[containerElementSymbol]) {
173
+ this[queueSymbol].add(messageElement);
174
+ return this;
175
+ }
176
+
177
+ fireCustomEvent(this, "monster-notify-message", {
178
+ messageElement,
179
+ });
180
+
181
+ this[containerElementSymbol].appendChild(messageElement);
182
+ return this;
183
+ }
184
+ }
185
+
186
+ /**
187
+ * This attribute can be used to pass a URL to this select.
188
+ *
189
+ * ```
190
+ * <monster-select data-monster-url="https://example.com/"></monster-select>
191
+ * ```
192
+ *
193
+ * @private
194
+ * @return {object}
195
+ */
196
+ function initOptionsFromArguments() {;
197
+ const options = {};
198
+
199
+ return options;
200
+ }
201
+
202
+ /**
203
+ * @private
204
+ * @return {Select}
205
+ * @throws {Error} no shadow-root is defined
206
+ */
207
+ function initControlReferences() {;
208
+
209
+ if (!this.shadowRoot) {
210
+ throw new Error("no shadow-root is defined");
211
+ }
212
+
213
+ this[controlElementSymbol] = this.shadowRoot.querySelector(
214
+ "[" + ATTRIBUTE_ROLE + "=control]",
215
+ );
216
+ this[containerElementSymbol] = this.shadowRoot.querySelector(
217
+ "[" + ATTRIBUTE_ROLE + "=container]",
218
+ );
219
+ }
220
+
221
+ /**
222
+ * @private
223
+ * @return {string}
224
+ */
225
+ function getTemplate() {
226
+ // language=HTML
227
+ return `
228
+ <div data-monster-role="control" part="control" class="center"
229
+ data-monster-attributes="data-monster-orientation path:orientation">
230
+ <div data-monster-role="container">
231
+ </div>
232
+ </div>
233
+ `;
234
+ }
235
+
236
+ registerCustomElement(Notify);
@@ -0,0 +1,57 @@
1
+ @import "../../style/normalize.pcss";
2
+ @import "../../style/display.pcss";
3
+ @import "../../style/border.pcss";
4
+ @import "../../style/color.pcss";
5
+ @import "../../style/theme.pcss";
6
+ @import "../../style/control.pcss";
7
+ @import "../../style/mixin/media.pcss";
8
+ @import "../../style/mixin/typography.pcss";
9
+ @import "../../style/mixin/button.pcss";
10
+ @import "../../style/mixin/hover.pcss";
11
+
12
+ [data-monster-role=message] {
13
+ position: relative;
14
+
15
+ width: 100%;
16
+ display: flex;
17
+ align-items: center;
18
+ flex-direction: row;
19
+
20
+ }
21
+
22
+ [data-monster-role=control] {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ width: 100%;
26
+ align-items: center;
27
+ padding:8px;
28
+ color: var(--monster-color-primary-1);
29
+ background-color: var(--monster-bg-color-primary-1);
30
+ }
31
+
32
+ [data-monster-role=content] {
33
+ flex-grow: 2;
34
+ @mixins paragraph;
35
+ }
36
+
37
+ [data-monster-role=control] [data-monster-role=close] {
38
+ position: absolute;
39
+ top: -5px;
40
+ right: -10px;
41
+ width: 16px;
42
+ height: 16px;
43
+ cursor: pointer;
44
+ z-index: var(--monster-z-index-modal-overlay);
45
+ }
46
+
47
+ [data-monster-role=control] [data-monster-role=close]::before {
48
+ content: "";
49
+ display: block;
50
+ width: 100%;
51
+ height: 100%;
52
+ mask-repeat: no-repeat;
53
+ mask-position: center;
54
+ mask-size: contain;
55
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
56
+ background-color: var(--monster-color-primary-1);
57
+ }