@schukai/monster 3.64.1 → 3.65.20

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 (395) hide show
  1. package/CHANGELOG.md +92 -318
  2. package/README.md +44 -40
  3. package/package.json +1 -47
  4. package/source/components/constants.mjs +10 -3
  5. package/source/components/datatable/change-button.mjs +12 -5
  6. package/source/components/datatable/columnbar.mjs +10 -1
  7. package/source/components/datatable/constants.mjs +11 -4
  8. package/source/components/datatable/dataset.mjs +10 -1
  9. package/source/components/datatable/datasource/dom.mjs +14 -1
  10. package/source/components/datatable/datasource/rest.mjs +10 -1
  11. package/source/components/datatable/datasource.mjs +10 -1
  12. package/source/components/datatable/datatable/header.mjs +12 -3
  13. package/source/components/datatable/datatable.mjs +757 -752
  14. package/source/components/datatable/embedded-pagination.mjs +10 -1
  15. package/source/components/datatable/filter/abstract-base.mjs +10 -1
  16. package/source/components/datatable/filter/date-range.mjs +10 -1
  17. package/source/components/datatable/filter/input.mjs +10 -1
  18. package/source/components/datatable/filter/range.mjs +10 -1
  19. package/source/components/datatable/filter/select.mjs +11 -4
  20. package/source/components/datatable/filter/settings.mjs +14 -0
  21. package/source/components/datatable/filter/util.mjs +14 -0
  22. package/source/components/datatable/filter-button.mjs +10 -1
  23. package/source/components/datatable/filter.mjs +11 -3
  24. package/source/components/datatable/pagination.mjs +14 -5
  25. package/source/components/datatable/save-button.mjs +279 -270
  26. package/source/components/datatable/status.mjs +10 -1
  27. package/source/components/datatable/style/dataset.pcss +1 -0
  28. package/source/components/datatable/style/datatable.pcss +1 -0
  29. package/source/components/datatable/stylesheet/change-button.mjs +16 -7
  30. package/source/components/datatable/stylesheet/column-bar.mjs +16 -7
  31. package/source/components/datatable/stylesheet/dataset.mjs +17 -8
  32. package/source/components/datatable/stylesheet/datasource.mjs +16 -7
  33. package/source/components/datatable/stylesheet/datatable.mjs +17 -8
  34. package/source/components/datatable/stylesheet/embedded-pagination.mjs +16 -7
  35. package/source/components/datatable/stylesheet/filter-button.mjs +16 -7
  36. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +16 -7
  37. package/source/components/datatable/stylesheet/filter-date-range.mjs +16 -7
  38. package/source/components/datatable/stylesheet/filter-range.mjs +16 -7
  39. package/source/components/datatable/stylesheet/filter.mjs +16 -7
  40. package/source/components/datatable/stylesheet/pagination.mjs +16 -7
  41. package/source/components/datatable/stylesheet/save-button.mjs +16 -7
  42. package/source/components/datatable/stylesheet/select-filter.mjs +16 -7
  43. package/source/components/datatable/stylesheet/status.mjs +16 -7
  44. package/source/components/datatable/util.mjs +16 -8
  45. package/source/components/form/action-button.mjs +11 -3
  46. package/source/components/form/api-button.mjs +11 -3
  47. package/source/components/form/button-bar.mjs +11 -3
  48. package/source/components/form/button.mjs +37 -50
  49. package/source/components/form/confirm-button.mjs +11 -3
  50. package/source/components/form/constants.mjs +10 -3
  51. package/source/components/form/context-error.mjs +69 -52
  52. package/source/components/form/context-help.mjs +11 -3
  53. package/source/components/form/field-set.mjs +295 -0
  54. package/source/components/form/form.mjs +12 -4
  55. package/source/components/form/message-state-button.mjs +11 -3
  56. package/source/components/form/popper-button.mjs +11 -3
  57. package/source/components/form/popper.mjs +13 -480
  58. package/source/components/form/reload.mjs +12 -4
  59. package/source/components/form/select.mjs +44 -33
  60. package/source/components/form/shadow-reload.mjs +11 -3
  61. package/source/components/form/state-button.mjs +11 -3
  62. package/source/components/form/style/field-set.pcss +13 -0
  63. package/source/components/form/stylesheet/action-button.mjs +16 -7
  64. package/source/components/form/stylesheet/api-button.mjs +16 -7
  65. package/source/components/form/stylesheet/button-bar.mjs +17 -8
  66. package/source/components/form/stylesheet/button.mjs +16 -7
  67. package/source/components/form/stylesheet/confirm-button.mjs +17 -8
  68. package/source/components/form/stylesheet/context-error.mjs +16 -7
  69. package/source/components/form/stylesheet/context-help.mjs +16 -7
  70. package/source/components/form/stylesheet/field-set.mjs +40 -0
  71. package/source/components/form/stylesheet/form.mjs +17 -8
  72. package/source/components/form/stylesheet/message-state-button.mjs +16 -7
  73. package/source/components/form/stylesheet/popper-button.mjs +16 -7
  74. package/source/components/form/stylesheet/select.mjs +16 -7
  75. package/source/components/form/stylesheet/state-button.mjs +16 -7
  76. package/source/components/form/stylesheet/toggle-switch.mjs +16 -7
  77. package/source/components/form/stylesheet/tree-select.mjs +16 -7
  78. package/source/components/form/tabs.mjs +12 -8
  79. package/source/components/form/template.mjs +11 -3
  80. package/source/components/form/toggle-switch.mjs +12 -8
  81. package/source/components/form/tree-select.mjs +10 -3
  82. package/source/components/form/types/state.mjs +10 -3
  83. package/source/components/form/util/fetch.mjs +10 -3
  84. package/source/components/form/util/floating-ui.mjs +10 -3
  85. package/source/components/form/util/popper.mjs +10 -3
  86. package/source/components/host/call-button.mjs +10 -1
  87. package/source/components/host/collapse.mjs +15 -519
  88. package/source/components/host/config-manager.mjs +10 -1
  89. package/source/components/host/constants.mjs +11 -4
  90. package/source/components/host/details.mjs +14 -256
  91. package/source/components/host/host.mjs +10 -1
  92. package/source/components/host/overlay.mjs +10 -1
  93. package/source/components/host/stylesheet/call-button.mjs +16 -7
  94. package/source/components/host/stylesheet/config-manager.mjs +16 -7
  95. package/source/components/host/stylesheet/host.mjs +17 -8
  96. package/source/components/host/stylesheet/overlay.mjs +17 -8
  97. package/source/components/host/stylesheet/toggle-button.mjs +16 -7
  98. package/source/components/host/stylesheet/viewer.mjs +16 -7
  99. package/source/components/host/toggle-button.mjs +10 -1
  100. package/source/components/host/util.mjs +14 -0
  101. package/source/components/host/viewer.mjs +10 -1
  102. package/source/components/layout/collapse.mjs +543 -0
  103. package/source/components/layout/details.mjs +273 -0
  104. package/source/components/layout/panel.mjs +179 -169
  105. package/source/components/layout/popper.mjs +480 -0
  106. package/source/components/layout/split-panel.mjs +329 -303
  107. package/source/components/{host → layout}/stylesheet/collapse.mjs +16 -7
  108. package/source/components/{host → layout}/stylesheet/details.mjs +16 -7
  109. package/source/components/layout/stylesheet/panel.mjs +16 -7
  110. package/source/components/{form → layout}/stylesheet/popper.mjs +16 -7
  111. package/source/components/layout/stylesheet/split-panel.mjs +16 -7
  112. package/source/components/layout/stylesheet/tabs.mjs +16 -7
  113. package/source/components/layout/stylesheet/width-toggle.mjs +16 -7
  114. package/source/components/layout/tabs.mjs +38 -23
  115. package/source/components/layout/width-toggle.mjs +150 -140
  116. package/source/components/navigation/style/table-of-content.pcss +99 -0
  117. package/source/components/navigation/stylesheet/table-of-content.mjs +40 -0
  118. package/source/components/navigation/table-of-content.mjs +546 -0
  119. package/source/components/notify/constants.mjs +10 -3
  120. package/source/components/notify/message.mjs +16 -9
  121. package/source/components/notify/notify.mjs +11 -4
  122. package/source/components/notify/stylesheet/message.mjs +16 -7
  123. package/source/components/notify/stylesheet/notify.mjs +16 -7
  124. package/source/components/state/log/entry.mjs +10 -1
  125. package/source/components/state/log.mjs +10 -1
  126. package/source/components/state/state.mjs +10 -1
  127. package/source/components/state/stylesheet/log.mjs +16 -7
  128. package/source/components/state/stylesheet/state.mjs +17 -8
  129. package/source/components/style/link.pcss +0 -1
  130. package/source/components/style/mixin/form.pcss +0 -1
  131. package/source/components/style/mixin/typography.pcss +7 -7
  132. package/source/components/style/typography.pcss +1 -1
  133. package/source/components/stylesheet/badge.mjs +16 -7
  134. package/source/components/stylesheet/border.mjs +16 -7
  135. package/source/components/stylesheet/button.mjs +16 -7
  136. package/source/components/stylesheet/card.mjs +16 -7
  137. package/source/components/stylesheet/color.mjs +16 -7
  138. package/source/components/stylesheet/common.mjs +16 -7
  139. package/source/components/stylesheet/control.mjs +16 -7
  140. package/source/components/stylesheet/data-grid.mjs +16 -7
  141. package/source/components/stylesheet/display.mjs +16 -7
  142. package/source/components/stylesheet/floating-ui.mjs +16 -7
  143. package/source/components/stylesheet/form.mjs +16 -7
  144. package/source/components/stylesheet/host.mjs +16 -7
  145. package/source/components/stylesheet/icons.mjs +16 -7
  146. package/source/components/stylesheet/link.mjs +16 -7
  147. package/source/components/stylesheet/mixin/badge.mjs +16 -7
  148. package/source/components/stylesheet/mixin/button.mjs +16 -7
  149. package/source/components/stylesheet/mixin/form.mjs +16 -7
  150. package/source/components/stylesheet/mixin/hover.mjs +16 -7
  151. package/source/components/stylesheet/mixin/icon.mjs +16 -7
  152. package/source/components/stylesheet/mixin/media.mjs +16 -7
  153. package/source/components/stylesheet/mixin/property.mjs +16 -7
  154. package/source/components/stylesheet/mixin/skeleton.mjs +16 -7
  155. package/source/components/stylesheet/mixin/spinner.mjs +16 -7
  156. package/source/components/stylesheet/mixin/typography.mjs +16 -7
  157. package/source/components/stylesheet/normalize.mjs +16 -7
  158. package/source/components/stylesheet/popper.mjs +16 -7
  159. package/source/components/stylesheet/property.mjs +16 -7
  160. package/source/components/stylesheet/ripple.mjs +16 -7
  161. package/source/components/stylesheet/skeleton.mjs +16 -7
  162. package/source/components/stylesheet/space.mjs +16 -7
  163. package/source/components/stylesheet/spinner.mjs +16 -7
  164. package/source/components/stylesheet/table.mjs +16 -7
  165. package/source/components/stylesheet/theme.mjs +16 -7
  166. package/source/components/stylesheet/tree-menu.mjs +10 -3
  167. package/source/components/stylesheet/typography.mjs +17 -8
  168. package/source/components/tree-menu/stylesheet/tree-menu.mjs +16 -7
  169. package/source/components/tree-menu/tree-menu.mjs +19 -8
  170. package/source/constants.mjs +10 -6
  171. package/source/constraints/abstract.mjs +10 -3
  172. package/source/constraints/abstractoperator.mjs +10 -3
  173. package/source/constraints/andoperator.mjs +10 -3
  174. package/source/constraints/invalid.mjs +10 -3
  175. package/source/constraints/isarray.mjs +10 -3
  176. package/source/constraints/isobject.mjs +10 -3
  177. package/source/constraints/oroperator.mjs +10 -3
  178. package/source/constraints/valid.mjs +10 -3
  179. package/source/data/buildmap.mjs +10 -3
  180. package/source/data/buildtree.mjs +10 -3
  181. package/source/data/datasource/dom.mjs +10 -3
  182. package/source/data/datasource/server/restapi/data-fetch-error.mjs +10 -3
  183. package/source/data/datasource/server/restapi/writeerror.mjs +10 -3
  184. package/source/data/datasource/server/restapi.mjs +10 -3
  185. package/source/data/datasource/server/webconnect.mjs +10 -3
  186. package/source/data/datasource/server.mjs +10 -3
  187. package/source/data/datasource/storage/localstorage.mjs +10 -3
  188. package/source/data/datasource/storage/sessionstorage.mjs +10 -3
  189. package/source/data/datasource/storage.mjs +10 -3
  190. package/source/data/datasource.mjs +10 -3
  191. package/source/data/diff.mjs +10 -3
  192. package/source/data/extend.mjs +10 -3
  193. package/source/data/pathfinder.mjs +10 -3
  194. package/source/data/pipe.mjs +10 -3
  195. package/source/data/transformer.mjs +34 -10
  196. package/source/dom/assembler.mjs +10 -3
  197. package/source/dom/attributes.mjs +10 -3
  198. package/source/dom/constants.mjs +10 -3
  199. package/source/dom/customcontrol.mjs +11 -4
  200. package/source/dom/customelement.mjs +31 -17
  201. package/source/dom/dimension.mjs +10 -3
  202. package/source/dom/events.mjs +10 -3
  203. package/source/dom/focusmanager.mjs +10 -3
  204. package/source/dom/locale.mjs +10 -3
  205. package/source/dom/ready.mjs +11 -4
  206. package/source/dom/resource/data.mjs +10 -3
  207. package/source/dom/resource/link/stylesheet.mjs +10 -3
  208. package/source/dom/resource/link.mjs +10 -3
  209. package/source/dom/resource/script.mjs +10 -3
  210. package/source/dom/resource.mjs +10 -3
  211. package/source/dom/resourcemanager.mjs +10 -3
  212. package/source/dom/slotted.mjs +14 -0
  213. package/source/dom/template.mjs +124 -136
  214. package/source/dom/theme.mjs +10 -3
  215. package/source/dom/updater.mjs +10 -3
  216. package/source/dom/util/extract-keys.mjs +10 -3
  217. package/source/dom/util/init-options-from-attributes.mjs +68 -61
  218. package/source/dom/util/set-option-from-attribute.mjs +10 -3
  219. package/source/dom/util.mjs +11 -4
  220. package/source/dom/worker/factory.mjs +10 -3
  221. package/source/i18n/formatter.mjs +10 -3
  222. package/source/i18n/locale.mjs +10 -3
  223. package/source/i18n/provider.mjs +10 -3
  224. package/source/i18n/providers/embed.mjs +10 -3
  225. package/source/i18n/providers/fetch.mjs +10 -3
  226. package/source/i18n/translations.mjs +10 -3
  227. package/source/logging/handler/console.mjs +10 -3
  228. package/source/logging/handler.mjs +10 -3
  229. package/source/logging/logentry.mjs +10 -3
  230. package/source/logging/logger.mjs +10 -3
  231. package/source/math/random.mjs +10 -3
  232. package/source/monster.mjs +8 -93
  233. package/source/net/webconnect/message.mjs +10 -3
  234. package/source/net/webconnect.mjs +20 -5
  235. package/source/text/bracketed-key-value-hash.mjs +10 -3
  236. package/source/text/formatter.mjs +10 -3
  237. package/source/text/generate-range-comparison-expression.mjs +10 -3
  238. package/source/text/util.mjs +14 -0
  239. package/source/types/base.mjs +10 -3
  240. package/source/types/basewithoptions.mjs +10 -3
  241. package/source/types/binary.mjs +10 -3
  242. package/source/types/dataurl.mjs +10 -3
  243. package/source/types/global.mjs +14 -7
  244. package/source/types/id.mjs +10 -3
  245. package/source/types/internal.mjs +11 -3
  246. package/source/types/is.mjs +10 -3
  247. package/source/types/mediatype.mjs +10 -3
  248. package/source/types/node.mjs +10 -3
  249. package/source/types/nodelist.mjs +10 -3
  250. package/source/types/noderecursiveiterator.mjs +10 -3
  251. package/source/types/observablequeue.mjs +10 -3
  252. package/source/types/observer.mjs +10 -3
  253. package/source/types/observerlist.mjs +10 -3
  254. package/source/types/proxyobserver.mjs +14 -5
  255. package/source/types/queue.mjs +10 -3
  256. package/source/types/randomid.mjs +10 -3
  257. package/source/types/regex.mjs +10 -3
  258. package/source/types/stack.mjs +10 -3
  259. package/source/types/tokenlist.mjs +10 -3
  260. package/source/types/typeof.mjs +10 -3
  261. package/source/types/uniquequeue.mjs +10 -3
  262. package/source/types/uuid.mjs +10 -3
  263. package/source/types/validate.mjs +10 -3
  264. package/source/types/version.mjs +11 -4
  265. package/source/util/clone.mjs +10 -3
  266. package/source/util/comparator.mjs +10 -3
  267. package/source/util/deadmansswitch.mjs +10 -3
  268. package/source/util/freeze.mjs +10 -3
  269. package/source/util/processing.mjs +10 -3
  270. package/source/util/runtime.mjs +10 -7
  271. package/source/util/sleep.mjs +10 -10
  272. package/source/util/trimspaces.mjs +10 -3
  273. package/test/cases/data/datasource/server/websocket.mjs +7 -9
  274. package/test/cases/data/transformer.mjs +47 -15
  275. package/test/cases/dom/customcontrol.mjs +0 -1
  276. package/test/cases/dom/customelement.mjs +1 -3
  277. package/test/cases/dom/template.mjs +3 -1
  278. package/test/cases/monster.mjs +1 -1
  279. package/test/util/jsdom.mjs +8 -7
  280. package/test/util/websocket.mjs +5 -1
  281. package/test/web/import.js +2 -1
  282. package/test/web/puppeteer.mjs +111 -0
  283. package/test/web/test.html +2 -2
  284. package/test/web/tests.js +2039 -1192
  285. package/example/components/form/button.mjs +0 -10
  286. package/example/components/form/select.mjs +0 -25
  287. package/example/components/form/toggle-switch.mjs +0 -7
  288. package/example/components/form/tree-select.mjs +0 -27
  289. package/example/components/host/host.mjs +0 -0
  290. package/example/components/notify/message.mjs +0 -4
  291. package/example/components/notify/notify.mjs +0 -4
  292. package/example/components/state/log.mjs +0 -0
  293. package/example/components/state/state.mjs +0 -0
  294. package/example/constraints/andoperator.mjs +0 -17
  295. package/example/constraints/invalid.mjs +0 -6
  296. package/example/constraints/isarray.mjs +0 -11
  297. package/example/constraints/isobject.mjs +0 -12
  298. package/example/constraints/oroperator.mjs +0 -15
  299. package/example/constraints/valid.mjs +0 -6
  300. package/example/data/buildmap.mjs +0 -67
  301. package/example/data/datasource/server/restapi.mjs +0 -20
  302. package/example/data/datasource/server/webconnect.mjs +0 -9
  303. package/example/data/datasource.mjs +0 -7
  304. package/example/data/diff.mjs +0 -39
  305. package/example/data/pathfinder-1.mjs +0 -23
  306. package/example/data/pathfinder-2.mjs +0 -19
  307. package/example/data/pipe.mjs +0 -14
  308. package/example/data/transformer.mjs +0 -9
  309. package/example/dom/customelement.mjs +0 -14
  310. package/example/dom/theme.mjs +0 -5
  311. package/example/dom/updater.mjs +0 -23
  312. package/example/i18n/formatter.mjs +0 -10
  313. package/example/i18n/providers/embed.mjs +0 -5
  314. package/example/i18n/providers/fetch.mjs +0 -5
  315. package/example/i18n/translations.mjs +0 -20
  316. package/example/net/webconnect.mjs +0 -16
  317. package/example/types/basewithoptions.mjs +0 -10
  318. package/example/types/is-1.mjs +0 -5
  319. package/example/types/is-10.mjs +0 -6
  320. package/example/types/is-2.mjs +0 -4
  321. package/example/types/is-3.mjs +0 -4
  322. package/example/types/is-4.mjs +0 -5
  323. package/example/types/is-5.mjs +0 -4
  324. package/example/types/is-6.mjs +0 -4
  325. package/example/types/is-7.mjs +0 -4
  326. package/example/types/is-8.mjs +0 -4
  327. package/example/types/is-9.mjs +0 -6
  328. package/example/types/noderecursiveiterator.mjs +0 -32
  329. package/example/types/observer.mjs +0 -9
  330. package/example/types/proxyobserver.mjs +0 -25
  331. package/example/types/queue.mjs +0 -20
  332. package/example/types/tokenlist-1.mjs +0 -4
  333. package/example/types/tokenlist-2.mjs +0 -7
  334. package/example/types/tokenlist-3.mjs +0 -5
  335. package/example/types/tokenlist-4.mjs +0 -5
  336. package/example/types/tokenlist-5.mjs +0 -5
  337. package/example/types/typeof.mjs +0 -9
  338. package/example/types/version-1.mjs +0 -6
  339. package/example/types/version-2.mjs +0 -3
  340. package/example/util/comparator.mjs +0 -10
  341. package/example/util/deadmansswitch.mjs +0 -9
  342. package/example/util/processing.mjs +0 -17
  343. package/source/components/datatable/datasource/namespace.mjs +0 -13
  344. package/source/components/datatable/datatable/namespace.mjs +0 -13
  345. package/source/components/datatable/events.mjs +0 -24
  346. package/source/components/datatable/filter/namespace.mjs +0 -13
  347. package/source/components/datatable/namespace.mjs +0 -11
  348. package/source/components/datatable/stylesheet/namespace.mjs +0 -13
  349. package/source/components/events.mjs +0 -17
  350. package/source/components/form/events.mjs +0 -108
  351. package/source/components/form/form-field.mjs +0 -341
  352. package/source/components/form/namespace.mjs +0 -13
  353. package/source/components/form/style/form-field.pcss +0 -4
  354. package/source/components/form/stylesheet/form-field.mjs +0 -31
  355. package/source/components/form/stylesheet/namespace.mjs +0 -13
  356. package/source/components/form/types/namespace.mjs +0 -13
  357. package/source/components/form/util/namespace.mjs +0 -13
  358. package/source/components/host/events.mjs +0 -131
  359. package/source/components/host/namespace.mjs +0 -13
  360. package/source/components/host/stylesheet/namespace.mjs +0 -13
  361. package/source/components/layout/events.mjs +0 -30
  362. package/source/components/layout/namespace.mjs +0 -13
  363. package/source/components/namespace.mjs +0 -14
  364. package/source/components/notify/events.mjs +0 -15
  365. package/source/components/notify/namespace.mjs +0 -15
  366. package/source/components/notify/stylesheet/namespace.mjs +0 -15
  367. package/source/components/state/log/namespace.mjs +0 -13
  368. package/source/components/state/namespace.mjs +0 -13
  369. package/source/components/stylesheet/namespace.mjs +0 -13
  370. package/source/components/tree-menu/namespace.mjs +0 -13
  371. package/source/components/tree-menu/stylesheet/namespace.mjs +0 -13
  372. package/source/constraints/namespace.mjs +0 -13
  373. package/source/data/datasource/namespace.mjs +0 -13
  374. package/source/data/datasource/server/namespace.mjs +0 -13
  375. package/source/data/datasource/server/restapi/namespace.mjs +0 -13
  376. package/source/data/datasource/storage/namespace.mjs +0 -13
  377. package/source/data/namespace.mjs +0 -13
  378. package/source/dom/namespace.mjs +0 -13
  379. package/source/dom/resource/link/namespace.mjs +0 -13
  380. package/source/dom/resource/namespace.mjs +0 -13
  381. package/source/dom/util/namespace.mjs +0 -13
  382. package/source/dom/worker/namespace.mjs +0 -13
  383. package/source/i18n/namespace.mjs +0 -13
  384. package/source/i18n/providers/namespace.mjs +0 -13
  385. package/source/logging/handler/namespace.mjs +0 -11
  386. package/source/logging/namespace.mjs +0 -13
  387. package/source/math/namespace.mjs +0 -13
  388. package/source/net/namespace.mjs +0 -13
  389. package/source/net/webconnect/namespace.mjs +0 -13
  390. package/source/text/namespace.mjs +0 -13
  391. package/source/types/namespace.mjs +0 -13
  392. package/source/util/namespace.mjs +0 -13
  393. /package/source/components/{host → layout}/style/collapse.pcss +0 -0
  394. /package/source/components/{host → layout}/style/details.pcss +0 -0
  395. /package/source/components/{form → layout}/style/popper.pcss +0 -0
@@ -1,34 +1,43 @@
1
1
  /**
2
- * Copyright 2023 schukai GmbH
2
+ * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
3
+ * Node module: @schukai/monster
4
+ *
5
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
6
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
7
+ *
8
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
9
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
10
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
11
+ *
3
12
  * SPDX-License-Identifier: AGPL-3.0
4
13
  */
5
14
 
6
- import {instanceSymbol, internalSymbol} from "../../constants.mjs";
7
- import {diff} from "../../data/diff.mjs";
8
- import {addAttributeToken} from "../../dom/attributes.mjs";
9
- import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
15
+ import { instanceSymbol, internalSymbol } from "../../constants.mjs";
16
+ import { diff } from "../../data/diff.mjs";
17
+ import { addAttributeToken } from "../../dom/attributes.mjs";
18
+ import { ATTRIBUTE_ERRORMESSAGE } from "../../dom/constants.mjs";
10
19
  import {
11
- assembleMethodSymbol,
12
- CustomElement,
13
- attributeObserverSymbol,
14
- registerCustomElement,
20
+ assembleMethodSymbol,
21
+ CustomElement,
22
+ attributeObserverSymbol,
23
+ registerCustomElement,
15
24
  } from "../../dom/customelement.mjs";
16
- import {isString, isArray} from "../../types/is.mjs";
17
- import {Observer} from "../../types/observer.mjs";
18
- import {TokenList} from "../../types/tokenlist.mjs";
19
- import {clone} from "../../util/clone.mjs";
20
- import {State} from "../form/types/state.mjs";
21
- import {ATTRIBUTE_DATASOURCE_SELECTOR} from "./constants.mjs";
22
- import {Datasource} from "./datasource.mjs";
23
- import {BadgeStyleSheet} from "../stylesheet/badge.mjs";
24
- import {SaveButtonStyleSheet} from "./stylesheet/save-button.mjs";
25
+ import { isString, isArray } from "../../types/is.mjs";
26
+ import { Observer } from "../../types/observer.mjs";
27
+ import { TokenList } from "../../types/tokenlist.mjs";
28
+ import { clone } from "../../util/clone.mjs";
29
+ import { State } from "../form/types/state.mjs";
30
+ import { ATTRIBUTE_DATASOURCE_SELECTOR } from "./constants.mjs";
31
+ import { Datasource } from "./datasource.mjs";
32
+ import { BadgeStyleSheet } from "../stylesheet/badge.mjs";
33
+ import { SaveButtonStyleSheet } from "./stylesheet/save-button.mjs";
25
34
 
26
35
  import {
27
- handleDataSourceChanges,
28
- datasourceLinkedElementSymbol,
36
+ handleDataSourceChanges,
37
+ datasourceLinkedElementSymbol,
29
38
  } from "./util.mjs";
30
39
 
31
- export {SaveButton};
40
+ export { SaveButton };
32
41
 
33
42
  /**
34
43
  * @private
@@ -43,194 +52,194 @@ const stateButtonElementSymbol = Symbol("stateButtonElement");
43
52
  const badgeElementSymbol = Symbol("badgeElement");
44
53
 
45
54
  class SaveButton extends CustomElement {
46
- /**
47
- * This method is called by the `instanceof` operator.
48
- * @returns {symbol}
49
- */
50
- static get [instanceSymbol]() {
51
- return Symbol.for(
52
- "@schukai/monster/components/datasource/save-button@@instance",
53
- );
54
- }
55
-
56
- /**
57
- * To set the options via the html tag the attribute `data-monster-options` must be used.
58
- * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
59
- *
60
- * The individual configuration values can be found in the table.
61
- *
62
- * @property {Object} templates Template definitions
63
- * @property {string} templates.main Main template
64
- * @property {object} datasource The datasource
65
- * @property {string} datasource.selector The selector of the datasource
66
- * @property {string} labels.button The button label
67
- * @property {Object} classes The classes
68
- * @property {string} classes.bar The bar class
69
- * @property {string} classes.badge The badge class
70
- * @property {object} mapping The mapping
71
- * @property {string} mapping.data The data
72
- * @property {number} mapping.index The index
73
- * @property {Array} ignoreChanges The ignore changes (regex)
74
- * @property {Array} data The data
75
- * @return {Object}
76
- */
77
- get defaults() {
78
- const obj = Object.assign({}, super.defaults, {
79
- templates: {
80
- main: getTemplate(),
81
- },
82
-
83
- labels: {
84
- button: "save",
85
- },
86
-
87
- classes: {
88
- bar: "monster-button-primary",
89
- badge: "monster-badge-secondary hidden",
90
- },
91
-
92
- datasource: {
93
- selector: null,
94
- },
95
-
96
- changes: "0",
97
-
98
- mapping: {
99
- data: "dataset",
100
- index: 0,
101
- },
102
-
103
- ignoreChanges: [],
104
-
105
- data: {},
106
-
107
- disabled: false,
108
- });
109
-
110
- updateOptionsFromArguments.call(this, obj);
111
- return obj;
112
- }
113
-
114
- /**
115
- *
116
- * @return {string}
117
- */
118
- static getTag() {
119
- return "monster-datasource-save-button";
120
- }
121
-
122
- /**
123
- * This method is responsible for assembling the component.
124
- *
125
- * It calls the parent's assemble method first, then initializes control references and event handlers.
126
- * If the `datasource.selector` option is provided and is a string, it searches for the corresponding
127
- * element in the DOM using that selector.
128
- *
129
- * If the selector matches exactly one element, it checks if the element is an instance of the `Datasource` class.
130
- *
131
- * If it is, the component's `datasourceLinkedElementSymbol` property is set to the element, and the component
132
- * attaches an observer to the datasource's changes.
133
- *
134
- * The observer is a function that calls the `handleDataSourceChanges` method in the context of the component.
135
- * Additionally, the component attaches an observer to itself, which also calls the `handleDataSourceChanges`
136
- * method in the component's context.
137
- */
138
- [assembleMethodSymbol]() {
139
- super[assembleMethodSymbol]();
140
- const self = this;
141
-
142
- initControlReferences.call(this);
143
- initEventHandler.call(this);
144
-
145
- const selector = this.getOption("datasource.selector");
146
-
147
- if (isString(selector)) {
148
- const elements = document.querySelectorAll(selector);
149
- if (elements.length !== 1) {
150
- throw new Error("the selector must match exactly one element");
151
- }
152
-
153
- const element = elements[0];
154
- if (!(element instanceof Datasource)) {
155
- throw new TypeError("the element must be a datasource");
156
- }
157
-
158
- this[datasourceLinkedElementSymbol] = element;
159
- element.datasource.attachObserver(
160
- new Observer(handleDataSourceChanges.bind(this)),
161
- );
162
-
163
- let originValues;
164
-
165
- element.datasource.attachObserver(
166
- new Observer(function () {
167
- if (!originValues) {
168
- originValues = clone(self[datasourceLinkedElementSymbol].data);
169
- }
170
-
171
- const currentValues = this.getRealSubject();
172
- const ignoreChanges = self.getOption("ignoreChanges");
173
-
174
- const result = diff(originValues, currentValues);
175
- if (isArray(ignoreChanges) && ignoreChanges.length > 0) {
176
- const itemsToRemove = [];
177
- for (const item of result) {
178
- for (const ignorePattern of ignoreChanges) {
179
- const p = new RegExp(ignorePattern);
180
- if (p.test(item.path)) {
181
- itemsToRemove.push(item);
182
- break;
183
- }
184
- }
185
- }
186
-
187
- for (const itemToRemove of itemsToRemove) {
188
- const index = result.indexOf(itemToRemove);
189
- if (index > -1) {
190
- result.splice(index, 1);
191
- }
192
- }
193
- }
194
-
195
- if (isArray(result) && result.length > 0) {
196
- self[stateButtonElementSymbol].setState("changed");
197
- self[stateButtonElementSymbol].setOption("disabled", false);
198
- self.setOption("changes", result.length);
199
- self.setOption(
200
- "classes.badge",
201
- new TokenList(self.getOption("classes.badge"))
202
- .remove("hidden")
203
- .toString(),
204
- );
205
- } else {
206
- self[stateButtonElementSymbol].removeState();
207
- self[stateButtonElementSymbol].setOption("disabled", true);
208
- self.setOption("changes", 0);
209
- self.setOption(
210
- "classes.badge",
211
- new TokenList(self.getOption("classes.badge"))
212
- .add("hidden")
213
- .toString(),
214
- );
215
- }
216
- }),
217
- );
218
- }
219
-
220
- this.attachObserver(
221
- new Observer(() => {
222
- handleDataSourceChanges.call(this);
223
- }),
224
- );
225
- }
226
-
227
- /**
228
- *
229
- * @return [CSSStyleSheet]
230
- */
231
- static getCSSStyleSheet() {
232
- return [SaveButtonStyleSheet, BadgeStyleSheet];
233
- }
55
+ /**
56
+ * This method is called by the `instanceof` operator.
57
+ * @returns {symbol}
58
+ */
59
+ static get [instanceSymbol]() {
60
+ return Symbol.for(
61
+ "@schukai/monster/components/datasource/save-button@@instance",
62
+ );
63
+ }
64
+
65
+ /**
66
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
67
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
68
+ *
69
+ * The individual configuration values can be found in the table.
70
+ *
71
+ * @property {Object} templates Template definitions
72
+ * @property {string} templates.main Main template
73
+ * @property {object} datasource The datasource
74
+ * @property {string} datasource.selector The selector of the datasource
75
+ * @property {string} labels.button The button label
76
+ * @property {Object} classes The classes
77
+ * @property {string} classes.bar The bar class
78
+ * @property {string} classes.badge The badge class
79
+ * @property {object} mapping The mapping
80
+ * @property {string} mapping.data The data
81
+ * @property {number} mapping.index The index
82
+ * @property {Array} ignoreChanges The ignore changes (regex)
83
+ * @property {Array} data The data
84
+ * @return {Object}
85
+ */
86
+ get defaults() {
87
+ const obj = Object.assign({}, super.defaults, {
88
+ templates: {
89
+ main: getTemplate(),
90
+ },
91
+
92
+ labels: {
93
+ button: "save",
94
+ },
95
+
96
+ classes: {
97
+ bar: "monster-button-primary",
98
+ badge: "monster-badge-secondary hidden",
99
+ },
100
+
101
+ datasource: {
102
+ selector: null,
103
+ },
104
+
105
+ changes: "0",
106
+
107
+ mapping: {
108
+ data: "dataset",
109
+ index: 0,
110
+ },
111
+
112
+ ignoreChanges: [],
113
+
114
+ data: {},
115
+
116
+ disabled: false,
117
+ });
118
+
119
+ updateOptionsFromArguments.call(this, obj);
120
+ return obj;
121
+ }
122
+
123
+ /**
124
+ *
125
+ * @return {string}
126
+ */
127
+ static getTag() {
128
+ return "monster-datasource-save-button";
129
+ }
130
+
131
+ /**
132
+ * This method is responsible for assembling the component.
133
+ *
134
+ * It calls the parent's assemble method first, then initializes control references and event handlers.
135
+ * If the `datasource.selector` option is provided and is a string, it searches for the corresponding
136
+ * element in the DOM using that selector.
137
+ *
138
+ * If the selector matches exactly one element, it checks if the element is an instance of the `Datasource` class.
139
+ *
140
+ * If it is, the component's `datasourceLinkedElementSymbol` property is set to the element, and the component
141
+ * attaches an observer to the datasource's changes.
142
+ *
143
+ * The observer is a function that calls the `handleDataSourceChanges` method in the context of the component.
144
+ * Additionally, the component attaches an observer to itself, which also calls the `handleDataSourceChanges`
145
+ * method in the component's context.
146
+ */
147
+ [assembleMethodSymbol]() {
148
+ super[assembleMethodSymbol]();
149
+ const self = this;
150
+
151
+ initControlReferences.call(this);
152
+ initEventHandler.call(this);
153
+
154
+ const selector = this.getOption("datasource.selector");
155
+
156
+ if (isString(selector)) {
157
+ const elements = document.querySelectorAll(selector);
158
+ if (elements.length !== 1) {
159
+ throw new Error("the selector must match exactly one element");
160
+ }
161
+
162
+ const element = elements[0];
163
+ if (!(element instanceof Datasource)) {
164
+ throw new TypeError("the element must be a datasource");
165
+ }
166
+
167
+ this[datasourceLinkedElementSymbol] = element;
168
+ element.datasource.attachObserver(
169
+ new Observer(handleDataSourceChanges.bind(this)),
170
+ );
171
+
172
+ let originValues;
173
+
174
+ element.datasource.attachObserver(
175
+ new Observer(function () {
176
+ if (!originValues) {
177
+ originValues = clone(self[datasourceLinkedElementSymbol].data);
178
+ }
179
+
180
+ const currentValues = this.getRealSubject();
181
+ const ignoreChanges = self.getOption("ignoreChanges");
182
+
183
+ const result = diff(originValues, currentValues);
184
+ if (isArray(ignoreChanges) && ignoreChanges.length > 0) {
185
+ const itemsToRemove = [];
186
+ for (const item of result) {
187
+ for (const ignorePattern of ignoreChanges) {
188
+ const p = new RegExp(ignorePattern);
189
+ if (p.test(item.path)) {
190
+ itemsToRemove.push(item);
191
+ break;
192
+ }
193
+ }
194
+ }
195
+
196
+ for (const itemToRemove of itemsToRemove) {
197
+ const index = result.indexOf(itemToRemove);
198
+ if (index > -1) {
199
+ result.splice(index, 1);
200
+ }
201
+ }
202
+ }
203
+
204
+ if (isArray(result) && result.length > 0) {
205
+ self[stateButtonElementSymbol].setState("changed");
206
+ self[stateButtonElementSymbol].setOption("disabled", false);
207
+ self.setOption("changes", result.length);
208
+ self.setOption(
209
+ "classes.badge",
210
+ new TokenList(self.getOption("classes.badge"))
211
+ .remove("hidden")
212
+ .toString(),
213
+ );
214
+ } else {
215
+ self[stateButtonElementSymbol].removeState();
216
+ self[stateButtonElementSymbol].setOption("disabled", true);
217
+ self.setOption("changes", 0);
218
+ self.setOption(
219
+ "classes.badge",
220
+ new TokenList(self.getOption("classes.badge"))
221
+ .add("hidden")
222
+ .toString(),
223
+ );
224
+ }
225
+ }),
226
+ );
227
+ }
228
+
229
+ this.attachObserver(
230
+ new Observer(() => {
231
+ handleDataSourceChanges.call(this);
232
+ }),
233
+ );
234
+ }
235
+
236
+ /**
237
+ *
238
+ * @return [CSSStyleSheet]
239
+ */
240
+ static getCSSStyleSheet() {
241
+ return [SaveButtonStyleSheet, BadgeStyleSheet];
242
+ }
234
243
  }
235
244
 
236
245
  /**
@@ -238,77 +247,77 @@ class SaveButton extends CustomElement {
238
247
  * @return {Monster.Components.Datatable.Form}
239
248
  */
240
249
  function initControlReferences() {
241
- if (!this.shadowRoot) {
242
- throw new Error("no shadow-root is defined");
243
- }
244
-
245
- this[stateButtonElementSymbol] = this.shadowRoot.querySelector(
246
- "[data-monster-role=state-button]",
247
- );
248
-
249
- this[badgeElementSymbol] = this.shadowRoot.querySelector(
250
- "[data-monster-role=badge]",
251
- );
252
-
253
- if (this[stateButtonElementSymbol]) {
254
- setTimeout(() => {
255
- const states = {
256
- changed: new State(
257
- "changed",
258
- '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-cloud-arrow-up" viewBox="0 0 16 16">\n' +
259
- ' <path fill-rule="evenodd" d="M7.646 5.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 6.707V10.5a.5.5 0 0 1-1 0V6.707L6.354 7.854a.5.5 0 1 1-.708-.708z"/>\n' +
260
- ' <path d="M4.406 3.342A5.53 5.53 0 0 1 8 2c2.69 0 4.923 2 5.166 4.579C14.758 6.804 16 8.137 16 9.773 16 11.569 14.502 13 12.687 13H3.781C1.708 13 0 11.366 0 9.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383m.653.757c-.757.653-1.153 1.44-1.153 2.056v.448l-.445.049C2.064 6.805 1 7.952 1 9.318 1 10.785 2.23 12 3.781 12h8.906C13.98 12 15 10.988 15 9.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 4.825 10.328 3 8 3a4.53 4.53 0 0 0-2.941 1.1z"/>\n' +
261
- "</svg>",
262
- ),
263
- };
264
-
265
- this[stateButtonElementSymbol].removeState();
266
- this[stateButtonElementSymbol].setOption("disabled", "disabled");
267
- this[stateButtonElementSymbol].setOption("states", states);
268
- this[stateButtonElementSymbol].setOption(
269
- "labels.button",
270
- this.getOption("labels.button"),
271
- );
272
- }, 1);
273
- }
274
-
275
- return this;
250
+ if (!this.shadowRoot) {
251
+ throw new Error("no shadow-root is defined");
252
+ }
253
+
254
+ this[stateButtonElementSymbol] = this.shadowRoot.querySelector(
255
+ "[data-monster-role=state-button]",
256
+ );
257
+
258
+ this[badgeElementSymbol] = this.shadowRoot.querySelector(
259
+ "[data-monster-role=badge]",
260
+ );
261
+
262
+ if (this[stateButtonElementSymbol]) {
263
+ setTimeout(() => {
264
+ const states = {
265
+ changed: new State(
266
+ "changed",
267
+ '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-cloud-arrow-up" viewBox="0 0 16 16">\n' +
268
+ ' <path fill-rule="evenodd" d="M7.646 5.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 6.707V10.5a.5.5 0 0 1-1 0V6.707L6.354 7.854a.5.5 0 1 1-.708-.708z"/>\n' +
269
+ ' <path d="M4.406 3.342A5.53 5.53 0 0 1 8 2c2.69 0 4.923 2 5.166 4.579C14.758 6.804 16 8.137 16 9.773 16 11.569 14.502 13 12.687 13H3.781C1.708 13 0 11.366 0 9.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383m.653.757c-.757.653-1.153 1.44-1.153 2.056v.448l-.445.049C2.064 6.805 1 7.952 1 9.318 1 10.785 2.23 12 3.781 12h8.906C13.98 12 15 10.988 15 9.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 4.825 10.328 3 8 3a4.53 4.53 0 0 0-2.941 1.1z"/>\n' +
270
+ "</svg>",
271
+ ),
272
+ };
273
+
274
+ this[stateButtonElementSymbol].removeState();
275
+ this[stateButtonElementSymbol].setOption("disabled", "disabled");
276
+ this[stateButtonElementSymbol].setOption("states", states);
277
+ this[stateButtonElementSymbol].setOption(
278
+ "labels.button",
279
+ this.getOption("labels.button"),
280
+ );
281
+ }, 1);
282
+ }
283
+
284
+ return this;
276
285
  }
277
286
 
278
287
  /**
279
288
  * @private
280
289
  */
281
290
  function initEventHandler() {
282
- setTimeout(() => {
283
- this[stateButtonElementSymbol].setOption("actions.click", () => {
284
- this[datasourceLinkedElementSymbol]
285
- .write()
286
- .then(() => {
287
- this[stateButtonElementSymbol].removeState();
288
- this[stateButtonElementSymbol].setOption("disabled", true);
289
- this.setOption("changes", 0);
290
- this.setOption(
291
- "classes.badge",
292
- new TokenList(this.getOption("classes.badge"))
293
- .add("hidden")
294
- .toString(),
295
- );
296
- })
297
- .catch((error) => {
298
- addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
299
- });
300
- });
301
- }, 1);
291
+ setTimeout(() => {
292
+ this[stateButtonElementSymbol].setOption("actions.click", () => {
293
+ this[datasourceLinkedElementSymbol]
294
+ .write()
295
+ .then(() => {
296
+ this[stateButtonElementSymbol].removeState();
297
+ this[stateButtonElementSymbol].setOption("disabled", true);
298
+ this.setOption("changes", 0);
299
+ this.setOption(
300
+ "classes.badge",
301
+ new TokenList(this.getOption("classes.badge"))
302
+ .add("hidden")
303
+ .toString(),
304
+ );
305
+ })
306
+ .catch((error) => {
307
+ addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
308
+ });
309
+ });
310
+ }, 1);
302
311
  }
303
312
 
304
313
  /**
305
314
  * @param {Object} options
306
315
  */
307
316
  function updateOptionsFromArguments(options) {
308
- const selector = this.getAttribute(ATTRIBUTE_DATASOURCE_SELECTOR);
309
- if (selector) {
310
- options.datasource.selector = selector;
311
- }
317
+ const selector = this.getAttribute(ATTRIBUTE_DATASOURCE_SELECTOR);
318
+ if (selector) {
319
+ options.datasource.selector = selector;
320
+ }
312
321
  }
313
322
 
314
323
  /**
@@ -316,8 +325,8 @@ function updateOptionsFromArguments(options) {
316
325
  * @return {string}
317
326
  */
318
327
  function getTemplate() {
319
- // language=HTML
320
- return `
328
+ // language=HTML
329
+ return `
321
330
  <div data-monster-role="control" part="control"
322
331
  data-monster-attributes="disabled path:disabled | if:true">
323
332
  <monster-state-button data-monster-role="state-button">save</monster-state-button>
@@ -1,5 +1,14 @@
1
1
  /**
2
- * Copyright 2023 schukai GmbH
2
+ * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
3
+ * Node module: @schukai/monster
4
+ *
5
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
6
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
7
+ *
8
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
9
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
10
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
11
+ *
3
12
  * SPDX-License-Identifier: AGPL-3.0
4
13
  */
5
14
 
@@ -10,5 +10,6 @@
10
10
  @import "../../style/badge.pcss";
11
11
  @import "../../style/icons.pcss";
12
12
  @import "../../style/link.pcss";
13
+ @import "../../style/skeleton.pcss";
13
14
 
14
15
 
@@ -15,6 +15,7 @@
15
15
  @import "../../style/mixin/hover.pcss";
16
16
  @import "../../style/mixin/media.pcss";
17
17
  @import "../../style/theme.pcss";
18
+ @import "../../style/skeleton.pcss";
18
19
 
19
20
  [data-monster-role="control"] {
20
21
  display: flex;