@schukai/monster 3.51.5 → 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 (360) hide show
  1. package/CHANGELOG.md +17 -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/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 +223 -103
  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/dom/customcontrol.mjs +5 -4
  348. package/test/cases/math/random.mjs +0 -1
  349. package/test/cases/monster.mjs +1 -1
  350. package/test/cases/net/webconnect/message.mjs +0 -1
  351. package/test/cases/types/node.mjs +1 -1
  352. package/test/util/chai-dom.mjs +2 -2
  353. package/test/util/intersection-mock.mjs +69 -0
  354. package/test/util/jsdom.mjs +41 -25
  355. package/test/util/localstorage.mjs +1 -0
  356. package/test/util/resize-observer.mjs +29 -0
  357. package/test/util/websocket.mjs +4 -1
  358. package/test/web/import.js +16 -1
  359. package/test/web/test.html +28 -5
  360. package/test/web/tests.js +30398 -17879
@@ -0,0 +1,121 @@
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_PREFIX } from "../../dom/constants.mjs";
9
+
10
+ /**
11
+ * @memberOf Monster.Components.Form
12
+ * @since 1.0.0
13
+ * @type {string}
14
+ */
15
+ const STYLE_DISPLAY_MODE_BLOCK = "block";
16
+
17
+ /**
18
+ * This attribute `data-monster-datasource` can be used to pass a datasource.
19
+ *
20
+ * @memberOf Monster.Components.Datatable
21
+ * @type {string}
22
+ */
23
+ const ATTRIBUTE_DATASOURCE = `${ATTRIBUTE_PREFIX}datasource`;
24
+
25
+ /**
26
+ * @memberOf Monster.Components.Datatable
27
+ * @type {string}
28
+ */
29
+ const ATTRIBUTE_DATASOURCE_SELECTOR = `${ATTRIBUTE_DATASOURCE}-selector`;
30
+
31
+ /**
32
+ * @memberOf Monster.Components.Datatable
33
+ * @type {string}
34
+ */
35
+ const ATTRIBUTE_DATATABLE_GRID_TEMPLATE = `${ATTRIBUTE_PREFIX}grid-template`;
36
+
37
+ /**
38
+ * @memberOf Monster.Components.Datatable
39
+ * @type {string}
40
+ */
41
+ const ATTRIBUTE_DATATABLE_HEAD = `${ATTRIBUTE_PREFIX}head`;
42
+
43
+ /**
44
+ * @memberOf Monster.Components.Datatable
45
+ * @type {string}
46
+ */
47
+ const ATTRIBUTE_DATATABLE_ALIGN = `${ATTRIBUTE_PREFIX}align`;
48
+
49
+ /**
50
+ * @memberOf Monster.Components.Datatable
51
+ * @type {string}
52
+ */
53
+ const ATTRIBUTE_DATATABLE_SORTABLE = `${ATTRIBUTE_PREFIX}sortable`;
54
+
55
+ /**
56
+ * @memberOf Monster.Components.Datatable
57
+ * @type {string}
58
+ */
59
+ const ATTRIBUTE_DATATABLE_INDEX = `${ATTRIBUTE_PREFIX}index`;
60
+
61
+ /**
62
+ * @memberOf Monster.Components.Datatable
63
+ * @type {string}
64
+ */
65
+ const ATTRIBUTE_DATATABLE_MODE = `${ATTRIBUTE_PREFIX}mode`;
66
+
67
+ /**
68
+ * @memberOf Monster.Components.Datatable
69
+ * @type {string}
70
+ */
71
+ const ATTRIBUTE_DATATABLE_RESPONSIVE_BREAKPOINT = `${ATTRIBUTE_PREFIX}responsive-breakpoint`;
72
+
73
+ /**
74
+ * This attribute `data-monster-datasource-arguments` can be used to pass arguments.
75
+ *
76
+ * @memberOf Monster.Components.Datatable
77
+ * @type {string}
78
+ */
79
+ const ATTRIBUTE_DATASOURCE_ARGUMENTS = `${ATTRIBUTE_DATASOURCE}-arguments`;
80
+
81
+ /**
82
+ * Column is not hideable and visible
83
+ *
84
+ * @private
85
+ * @type {string}
86
+ */
87
+ const ATTRIBUTE_DATATABLE_MODE_FIXED = "fixed";
88
+
89
+ /**
90
+ * Column is hidden
91
+ *
92
+ * @private
93
+ * @type {string}
94
+ */
95
+ const ATTRIBUTE_DATATABLE_MODE_HIDDEN = "hidden";
96
+
97
+ /**
98
+ * Column is visible
99
+ *
100
+ * @private
101
+ * @memberOf Monster.Components.Datatable
102
+ * @type {string}
103
+ */
104
+ const ATTRIBUTE_DATATABLE_MODE_VISIBLE = "visible";
105
+
106
+ export {
107
+ ATTRIBUTE_DATASOURCE,
108
+ ATTRIBUTE_DATASOURCE_SELECTOR,
109
+ ATTRIBUTE_DATASOURCE_ARGUMENTS,
110
+ ATTRIBUTE_DATATABLE_GRID_TEMPLATE,
111
+ ATTRIBUTE_DATATABLE_HEAD,
112
+ ATTRIBUTE_DATATABLE_SORTABLE,
113
+ ATTRIBUTE_DATATABLE_MODE,
114
+ ATTRIBUTE_DATATABLE_INDEX,
115
+ ATTRIBUTE_DATATABLE_ALIGN,
116
+ ATTRIBUTE_DATATABLE_MODE_FIXED,
117
+ ATTRIBUTE_DATATABLE_RESPONSIVE_BREAKPOINT,
118
+ ATTRIBUTE_DATATABLE_MODE_VISIBLE,
119
+ ATTRIBUTE_DATATABLE_MODE_HIDDEN,
120
+ STYLE_DISPLAY_MODE_BLOCK,
121
+ };
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ import { instanceSymbol } from "../../constants.mjs";
7
+ import {
8
+ assembleMethodSymbol,
9
+ CustomElement,
10
+ attributeObserverSymbol,
11
+ registerCustomElement,
12
+ } from "../../dom/customelement.mjs";
13
+ import { isString } from "../../types/is.mjs";
14
+ import { Observer } from "../../types/observer.mjs";
15
+ import {
16
+ ATTRIBUTE_DATASOURCE_SELECTOR,
17
+ ATTRIBUTE_DATATABLE_INDEX,
18
+ } from "./constants.mjs";
19
+ import { Datasource } from "./datasource.mjs";
20
+ import { DatasetStyleSheet } from "./stylesheet/dataset.mjs";
21
+ import {
22
+ handleDataSourceChanges,
23
+ datasourceLinkedElementSymbol,
24
+ } from "./util.mjs";
25
+
26
+ export { DataSet };
27
+
28
+ /**
29
+ * The data set component is used to show the data of a data source.
30
+ *
31
+ * <img src="./images/dataset.png">
32
+ *
33
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
34
+ *
35
+ * You can create this control either by specifying the HTML tag <monster-dataset />` directly in the HTML or using
36
+ * Javascript via the `document.createElement('monster-dataset');` method.
37
+ *
38
+ * ```html
39
+ * <monster-dataset></monster-dataset>
40
+ * ```
41
+ *
42
+ * Or you can create this CustomControl directly in Javascript:
43
+ *
44
+ * ```js
45
+ * import '@schukai/component-datatable/source/dataset.mjs';
46
+ * document.createElement('monster-dataset');
47
+ * ```
48
+ *
49
+ * The Body should have a class "hidden" to ensure that the styles are applied correctly.
50
+ *
51
+ * ```css
52
+ * body.hidden {
53
+ * visibility: hidden;
54
+ * }
55
+ * ```
56
+ *
57
+ * @startuml dataset.png
58
+ * skinparam monochrome true
59
+ * skinparam shadowing false
60
+ * HTMLElement <|-- CustomElement
61
+ * CustomElement <|-- DataSet
62
+ * @enduml
63
+ *
64
+ * @copyright schukai GmbH
65
+ * @memberOf Monster.Components.Datatable
66
+ * @summary A data set
67
+ */
68
+ class DataSet extends CustomElement {
69
+ /**
70
+ * This method is called by the `instanceof` operator.
71
+ * @returns {symbol}
72
+ */
73
+ static get [instanceSymbol]() {
74
+ return Symbol.for("@schukai/monster/components/dataset@@instance");
75
+ }
76
+
77
+ /**
78
+ * This method determines which attributes are to be monitored by `attributeChangedCallback()`.
79
+ *
80
+ * @return {string[]}
81
+ * @since 1.15.0
82
+ */
83
+ static get observedAttributes() {
84
+ const attributes = super.observedAttributes;
85
+ attributes.push(ATTRIBUTE_DATATABLE_INDEX);
86
+ return attributes;
87
+ }
88
+
89
+ /**
90
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
91
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
92
+ *
93
+ * The individual configuration values can be found in the table.
94
+ *
95
+ * @property {Object} templates Template definitions
96
+ * @property {string} templates.main Main template
97
+ * @property {object} datasource The datasource
98
+ */
99
+ get defaults() {
100
+ const obj = Object.assign({}, super.defaults, {
101
+ templates: {
102
+ main: getTemplate(),
103
+ },
104
+
105
+ datasource: {
106
+ selector: null,
107
+ },
108
+
109
+ mapping: {
110
+ data: "dataset",
111
+ index: 0,
112
+ },
113
+
114
+ data: [],
115
+ });
116
+
117
+ updateOptionsFromArguments.call(this, obj);
118
+ return obj;
119
+ }
120
+
121
+ /**
122
+ *
123
+ * @return {string}
124
+ */
125
+ static getTag() {
126
+ return "monster-dataset";
127
+ }
128
+
129
+ /**
130
+ *
131
+ * @return {Monster.Components.Form.Form}
132
+ */
133
+ [assembleMethodSymbol]() {;
134
+ super[assembleMethodSymbol]();
135
+
136
+ // initControlReferences.call(self);
137
+ initEventHandler.call(this);
138
+
139
+ const selector = this.getOption("datasource.selector");
140
+
141
+ if (isString(selector)) {
142
+ const elements = document.querySelectorAll(selector);
143
+ if (elements.length !== 1) {
144
+ throw new Error("the selector must match exactly one element");
145
+ }
146
+
147
+ const element = elements[0];
148
+ if (!(element instanceof Datasource)) {
149
+ throw new TypeError("the element must be a datasource");
150
+ }
151
+
152
+ this[datasourceLinkedElementSymbol] = element;
153
+ element.datasource.attachObserver(
154
+ new Observer(handleDataSourceChanges.bind(this)),
155
+ );
156
+ }
157
+
158
+ this.attachObserver(
159
+ new Observer(() => {
160
+ handleDataSourceChanges.call(this);
161
+ }),
162
+ );
163
+ }
164
+
165
+ /**
166
+ *
167
+ * @return [CSSStyleSheet]
168
+ */
169
+ static getCSSStyleSheet() {
170
+ return [DatasetStyleSheet];
171
+ }
172
+ }
173
+
174
+ /**
175
+ * @private
176
+ */
177
+ function initEventHandler() {;
178
+
179
+ this[attributeObserverSymbol][ATTRIBUTE_DATATABLE_INDEX] = () => {
180
+ const index = this.getAttribute(ATTRIBUTE_DATATABLE_INDEX);
181
+ if (index) {
182
+ this.setOption("mapping.index", parseInt(index, 10));
183
+ }
184
+ };
185
+ }
186
+
187
+ /**
188
+ *
189
+ * @param {Onject} options
190
+ */
191
+ function updateOptionsFromArguments(options) {;
192
+
193
+ const index = this.getAttribute(ATTRIBUTE_DATATABLE_INDEX);
194
+
195
+ if (index !== null && index !== undefined) {
196
+ options.mapping.index = parseInt(index, 10);
197
+ }
198
+
199
+ const selector = this.getAttribute(ATTRIBUTE_DATASOURCE_SELECTOR);
200
+
201
+ if (selector) {
202
+ options.datasource.selector = selector;
203
+ }
204
+ }
205
+
206
+ /**
207
+ * @private
208
+ * @return {string}
209
+ */
210
+ function getTemplate() {
211
+ // language=HTML
212
+ return `
213
+ <div data-monster-role="control" part="control">
214
+ <slot></slot>
215
+ </div>
216
+ `;
217
+ }
218
+
219
+ registerCustomElement(DataSet);
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ import { Datasource, dataSourceSymbol } from "../datasource.mjs";
7
+ import { DatasourceStyleSheet } from "../stylesheet/datasource.mjs";
8
+ import { instanceSymbol } from "../../../constants.mjs";
9
+ import {
10
+ assembleMethodSymbol,
11
+ registerCustomElement,
12
+ getSlottedElements,
13
+ } from "../../../dom/customelement.mjs";
14
+ import { isArray } from "../../../types/is.mjs";
15
+
16
+ export { Dom };
17
+
18
+ /**
19
+ * @private
20
+ * @type {symbol}
21
+ */
22
+ const dataChangeEventHandlerSymbol = Symbol("dataChangeEventHandler");
23
+
24
+ /**
25
+ * The Datasource component is a basic class for the datatable component.
26
+ *
27
+ * <img src="./images/dom.png">
28
+ *
29
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
30
+ *
31
+ * @startuml dom.png
32
+ * skinparam monochrome true
33
+ * skinparam shadowing false
34
+ * HTMLElement <|-- CustomElement
35
+ * CustomElement <|-- Datasource
36
+ * Datasource <|-- Dom
37
+ * @enduml
38
+ *
39
+ * @copyright schukai GmbH
40
+ * @memberOf Monster.Components.Datatable.Datasource
41
+ * @summary A dom datasource
42
+ */
43
+ class Dom extends Datasource {
44
+ /**
45
+ * This method is called by the `instanceof` operator.
46
+ * @returns {symbol}
47
+ */
48
+ static get [instanceSymbol]() {
49
+ return Symbol.for("@schukai/monster/components/datasource/dom");
50
+ }
51
+
52
+ /**
53
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
54
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
55
+ *
56
+ * The individual configuration values can be found in the table.
57
+ *
58
+ * @property {Object} templates Template definitions
59
+ * @property {string} templates.main Main template
60
+ */
61
+ get defaults() {
62
+ return Object.assign({}, super.defaults, {
63
+ templates: {
64
+ main: getTemplate(),
65
+ },
66
+
67
+ features: {
68
+ autoInit: true,
69
+ },
70
+ });
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @return {Monster.Components.Form.Form}
76
+ */
77
+ [assembleMethodSymbol]() {;
78
+ super[assembleMethodSymbol]();
79
+ initEventHandler.call(this);
80
+ updateDataSource.call(this);
81
+ }
82
+
83
+ /**
84
+ *
85
+ * @return {CSSStyleSheet[]}
86
+ */
87
+ static getCSSStyleSheet() {
88
+ return [DatasourceStyleSheet];
89
+ }
90
+
91
+ /**
92
+ * @private
93
+ * @return {string}
94
+ */
95
+ static getTag() {
96
+ return "monster-datasource-dom";
97
+ }
98
+
99
+ /**
100
+ * Reloads the data
101
+ * @returns {Promise<never>|*}
102
+ */
103
+ reload() {;
104
+ }
105
+
106
+ connectedCallback() {
107
+ super.connectedCallback();;
108
+
109
+ if (this.getOption("features.autoInit")) {
110
+ updateDataSource.call(this);
111
+ }
112
+ }
113
+ }
114
+
115
+ /**
116
+ * @private
117
+ */
118
+ function initEventHandler() {;
119
+
120
+ /**
121
+ * @param {Event} event
122
+ */
123
+ this[dataChangeEventHandlerSymbol] = (event) => {
124
+ updateDataSource.call(this);
125
+ };
126
+
127
+ new MutationObserver(this[dataChangeEventHandlerSymbol]).observe(this, {
128
+ childList: true,
129
+ subtree: true,
130
+ characterData: true,
131
+ });
132
+ }
133
+
134
+ /**
135
+ * @private
136
+ */
137
+ function updateDataSource() {;
138
+
139
+ let data = null;
140
+ getSlottedElements.call(this).forEach((element) => {
141
+ if (!(element instanceof HTMLScriptElement)) {
142
+ return;
143
+ }
144
+ if (element.type !== "application/json") {
145
+ return;
146
+ }
147
+
148
+ const d = JSON.parse(element.textContent);
149
+ if (data === null) {
150
+ if (isArray(d)) {
151
+ data = [];
152
+ } else {
153
+ data = {};
154
+ }
155
+ }
156
+
157
+ if (isArray(data) && !isArray(d)) {
158
+ throw new Error("Type mismatch");
159
+ }
160
+
161
+ if (!isArray(data) && isArray(d)) {
162
+ throw new Error("Type mismatch");
163
+ }
164
+
165
+ if (isArray(data)) {
166
+ data.push(...d);
167
+ return;
168
+ }
169
+
170
+ data = Object.assign({}, d);
171
+ });
172
+
173
+ this.datasource.set(data);
174
+ }
175
+
176
+ /**
177
+ * @private
178
+ * @return {string}
179
+ */
180
+ function getTemplate() {
181
+ // language=HTML
182
+ return `
183
+ <slot data-monster-role="datasource"></slot>`;
184
+ }
185
+
186
+ registerCustomElement(Dom);
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ /**
7
+ * Namespace for all datatable related functions.
8
+ *
9
+ * @namespace Monster.Components.Datatable.Datasource
10
+ * @memberOf Monster
11
+ * @author schukai GmbH
12
+ */
13
+ const ns = {};