@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,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 = {};