@schukai/monster 3.64.1 → 3.65.20

Sign up to get free protection for your applications and to get access to all the features.
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,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
 
@@ -0,0 +1,543 @@
1
+ /**
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
+ *
12
+ * SPDX-License-Identifier: AGPL-3.0
13
+ */
14
+
15
+ import {
16
+ assembleMethodSymbol,
17
+ CustomElement,
18
+ getSlottedElements,
19
+ registerCustomElement,
20
+ } from "../../dom/customelement.mjs";
21
+ import { CollapseStyleSheet } from "./stylesheet/collapse.mjs";
22
+ import { fireCustomEvent } from "../../dom/events.mjs";
23
+ import { getDocument } from "../../dom/util.mjs";
24
+ import { addAttributeToken } from "../../dom/attributes.mjs";
25
+ import { ATTRIBUTE_ERRORMESSAGE } from "../../dom/constants.mjs";
26
+ import { Host } from "../host/host.mjs";
27
+ import { generateUniqueConfigKey } from "../host/util.mjs";
28
+ import { DeadMansSwitch } from "../../util/deadmansswitch.mjs";
29
+ import { instanceSymbol } from "../../constants.mjs";
30
+
31
+ export { Collapse, nameSymbol };
32
+
33
+ /**
34
+ * @private
35
+ * @type {symbol}
36
+ */
37
+ const timerCallbackSymbol = Symbol("timerCallback");
38
+
39
+ /**
40
+ * @private
41
+ * @type {symbol}
42
+ */
43
+ const detailsElementSymbol = Symbol("detailsElement");
44
+
45
+ /**
46
+ * @private
47
+ * @type {symbol}
48
+ */
49
+ const controlElementSymbol = Symbol("controlElement");
50
+
51
+ /**
52
+ * local symbol
53
+ * @private
54
+ * @type {symbol}
55
+ */
56
+ const resizeObserverSymbol = Symbol("resizeObserver");
57
+
58
+ /**
59
+ * @private
60
+ * @type {symbol}
61
+ */
62
+ const detailsSlotElementSymbol = Symbol("detailsSlotElement");
63
+
64
+ /**
65
+ * @private
66
+ * @type {symbol}
67
+ */
68
+ const detailsContainerElementSymbol = Symbol("detailsContainerElement");
69
+ /**
70
+
71
+ * @private
72
+ * @type {symbol}
73
+ */
74
+ const detailsDecoElementSymbol = Symbol("detailsDecoElement");
75
+
76
+ /**
77
+ * @private
78
+ * @type {symbol}
79
+ */
80
+ const nameSymbol = Symbol("name");
81
+
82
+ /**
83
+ * The Collapse component is used to show the details.
84
+ *
85
+ * <img src="./images/collapse.png">
86
+ *
87
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
88
+ *
89
+ * You can create this control either by specifying the HTML tag <monster-collapse />` directly in the HTML or using
90
+ * Javascript via the `document.createElement('monster-collapse');` method.
91
+ *
92
+ * ```html
93
+ * <monster-collapse></monster-collapse>
94
+ * ```
95
+ *
96
+ * Or you can create this CustomControl directly in Javascript:
97
+ *
98
+ * ```js
99
+ * import '@schukai/monster/source/components/host/collapse.mjs';
100
+ * document.createElement('monster-collapse');
101
+ * ```
102
+ *
103
+ * The Body should have a class "hidden" to ensure that the styles are applied correctly.
104
+ *
105
+ * ```css
106
+ * body.hidden {
107
+ * visibility: hidden;
108
+ * }
109
+ * ```
110
+ *
111
+ * @startuml collapse.png
112
+ * skinparam monochrome true
113
+ * skinparam shadowing false
114
+ * HTMLElement <|-- CustomElement
115
+ * CustomElement <|-- Collapse
116
+ * @enduml
117
+ *
118
+ * @copyright schukai GmbH
119
+ * @memberOf Monster.Components.Host
120
+ * @summary A simple collapse component
121
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-before-open
122
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-open
123
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-before-close
124
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-closed
125
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-adjust-height
126
+ */
127
+ class Collapse extends CustomElement {
128
+ /**
129
+ * This method is called by the `instanceof` operator.
130
+ * @returns {symbol}
131
+ */
132
+ static get [instanceSymbol]() {
133
+ return Symbol.for("@schukai/monster/components/layout/collapse@@instance");
134
+ }
135
+
136
+ /**
137
+ *
138
+ */
139
+ constructor() {
140
+ super();
141
+ // the name is only used for the host config and the event name
142
+ this[nameSymbol] = "collapse";
143
+ }
144
+
145
+ /**
146
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
147
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
148
+ *
149
+ * The individual configuration values can be found in the table.
150
+ *
151
+ * @property {Object} templates Template definitions
152
+ * @property {string} templates.main Main template
153
+ * @property {Object} classes CSS classes
154
+ * @property {string} classes.container CSS class for the container
155
+ * @property {Object} features Feature configuration
156
+ * @property {boolean} features.accordion Enable accordion mode
157
+ * @property {boolean} features.persistState Enable persist state (Host and Config-Manager required)
158
+ * @property {boolean} features.useScrollValues Use scroll values (scrollHeight) instead of clientHeight for the height calculation
159
+ * @property {boolean} openByDefault Open the details by default
160
+ */
161
+ get defaults() {
162
+ return Object.assign({}, super.defaults, {
163
+ templates: {
164
+ main: getTemplate(),
165
+ },
166
+ classes: {
167
+ container: "padding",
168
+ },
169
+ features: {
170
+ accordion: true,
171
+ persistState: true,
172
+ useScrollValues: false,
173
+ },
174
+ openByDefault: false,
175
+ });
176
+ }
177
+
178
+ /**
179
+ *
180
+ * @returns {Monster.Components.Host.Collapse}
181
+ */
182
+ [assembleMethodSymbol]() {
183
+ super[assembleMethodSymbol]();
184
+ initControlReferences.call(this);
185
+ initStateFromHostConfig.call(this);
186
+ initResizeObserver.call(this);
187
+ initEventHandler.call(this);
188
+
189
+ if (this.getOption("openByDefault")) {
190
+ this.open();
191
+ }
192
+ }
193
+
194
+ /**
195
+ *
196
+ */
197
+ connectedCallback() {
198
+ super.connectedCallback();
199
+ updateResizeObserverObservation.call(this);
200
+ // this[resizeObserverSymbol].observe(getDocument().body);
201
+ }
202
+
203
+ /**
204
+ *
205
+ */
206
+ disconnectedCallback() {
207
+ super.disconnectedCallback();
208
+ //this[resizeObserverSymbol].disconnect();
209
+ }
210
+
211
+ /**
212
+ *
213
+ * @returns {Monster.Components.Host.Collapse}
214
+ */
215
+ toggle() {
216
+ if (this[detailsElementSymbol].classList.contains("active")) {
217
+ this.close();
218
+ } else {
219
+ this.open();
220
+ }
221
+ return this;
222
+ }
223
+
224
+ /**
225
+ *
226
+ * @returns {boolean}
227
+ */
228
+ isClosed() {
229
+ return !this[detailsElementSymbol].classList.contains("active");
230
+ }
231
+
232
+ /**
233
+ *
234
+ * @returns {boolean}
235
+ */
236
+ isOpen() {
237
+ return !this.isClosed();
238
+ }
239
+
240
+ /**
241
+ *
242
+ * @returns {Monster.Components.Host.Collapse}
243
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-before-open
244
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-open
245
+ */
246
+ open() {
247
+ let node;
248
+ if (this[detailsElementSymbol].classList.contains("active")) {
249
+ return this;
250
+ }
251
+
252
+ fireCustomEvent(this, "monster-" + this[nameSymbol] + "-before-open", {});
253
+
254
+ adjustHeight.call(this);
255
+ this[detailsElementSymbol].classList.add("active");
256
+
257
+ if (this.getOption("features.accordion") === true) {
258
+ node = this;
259
+ while (node.nextElementSibling instanceof Collapse) {
260
+ node = node.nextElementSibling;
261
+ node.close();
262
+ }
263
+
264
+ node = this;
265
+ while (node.previousElementSibling instanceof Collapse) {
266
+ node = node.previousElementSibling;
267
+ node.close();
268
+ }
269
+ }
270
+
271
+ setTimeout(() => {
272
+ setTimeout(() => {
273
+ updateStateConfig.call(this);
274
+ fireCustomEvent(this, "monster-" + this[nameSymbol] + "-open", {});
275
+ setTimeout(() => {
276
+ this[controlElementSymbol].classList.remove("overflow-hidden");
277
+ }, 500);
278
+ }, 0);
279
+ }, 0);
280
+
281
+ return this;
282
+ }
283
+
284
+ /**
285
+ *
286
+ * @returns {Monster.Components.Host.Collapse}
287
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-before-close
288
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-closed
289
+ */
290
+ close() {
291
+ if (!this[detailsElementSymbol].classList.contains("active")) {
292
+ return this;
293
+ }
294
+
295
+ fireCustomEvent(this, "monster-" + this[nameSymbol] + "-before-close", {});
296
+ this[controlElementSymbol].classList.add("overflow-hidden");
297
+
298
+ setTimeout(() => {
299
+ this[detailsElementSymbol].classList.remove("active");
300
+ setTimeout(() => {
301
+ updateStateConfig.call(this);
302
+ fireCustomEvent(this, "monster-" + this[nameSymbol] + "-closed", {});
303
+ }, 0);
304
+ }, 0);
305
+
306
+ return this;
307
+ }
308
+
309
+ /**
310
+ *
311
+ * @return {string}
312
+ */
313
+ static getTag() {
314
+ return "monster-collapse";
315
+ }
316
+
317
+ /**
318
+ * @return {Array<CSSStyleSheet>}
319
+ */
320
+ static getCSSStyleSheet() {
321
+ return [CollapseStyleSheet];
322
+ }
323
+
324
+ /**
325
+ * This method is called when the element is inserted into a document, including into a shadow tree.
326
+ * @return {Monster.Components.Host.Collapse}
327
+ * @fires Monster.Components.Host.Collapse.event:monster-collapse-adjust-height
328
+ */
329
+ adjustHeight() {
330
+ adjustHeight.call(this);
331
+ return this;
332
+ }
333
+ }
334
+
335
+ function adjustHeight() {
336
+ let height = 0;
337
+
338
+ if (this[detailsContainerElementSymbol]) {
339
+ if (this.getOption("features.useScrollValues")) {
340
+ height += this[detailsContainerElementSymbol].scrollHeight;
341
+ } else {
342
+ height += this[detailsContainerElementSymbol].clientHeight;
343
+ }
344
+ }
345
+
346
+ if (this[detailsDecoElementSymbol]) {
347
+ if (this.getOption("features.useScrollValues")) {
348
+ height += this[detailsDecoElementSymbol].scrollHeight;
349
+ } else {
350
+ height += this[detailsDecoElementSymbol].clientHeight + 1;
351
+ }
352
+ }
353
+
354
+ if (height === 0) {
355
+ if (this.getOption("features.useScrollValues")) {
356
+ height = this[detailsElementSymbol].scrollHeight;
357
+ } else {
358
+ height = this[detailsElementSymbol].clientHeight;
359
+ }
360
+
361
+ if (height === 0) {
362
+ height = "auto";
363
+ }
364
+ } else {
365
+ height += "px";
366
+ }
367
+
368
+ this[detailsElementSymbol].style.setProperty(
369
+ "--monster-height",
370
+ height,
371
+ "important",
372
+ );
373
+ fireCustomEvent(this, "monster-" + this[nameSymbol] + "-adjust-height", {});
374
+ }
375
+
376
+ function updateResizeObserverObservation() {
377
+ this[resizeObserverSymbol].disconnect();
378
+
379
+ const slottedNodes = getSlottedElements.call(this);
380
+ slottedNodes.forEach((node) => {
381
+ this[resizeObserverSymbol].observe(node);
382
+ });
383
+
384
+ if (this[detailsContainerElementSymbol]) {
385
+ this[resizeObserverSymbol].observe(this[detailsContainerElementSymbol]);
386
+ }
387
+
388
+ this.adjustHeight();
389
+ }
390
+
391
+ /**
392
+ * @private
393
+ */
394
+ function initEventHandler() {
395
+ if (!this.shadowRoot) {
396
+ throw new Error("no shadow-root is defined");
397
+ }
398
+
399
+ initSlotChangedHandler.call(this);
400
+ return this;
401
+ }
402
+
403
+ function initSlotChangedHandler() {
404
+ this[detailsSlotElementSymbol].addEventListener("slotchange", () => {
405
+ updateResizeObserverObservation.call(this);
406
+ });
407
+ }
408
+
409
+ /**
410
+ * @private
411
+ * @return {Select}
412
+ * @throws {Error} no shadow-root is defined
413
+ */
414
+ function initControlReferences() {
415
+ if (!this.shadowRoot) {
416
+ throw new Error("no shadow-root is defined");
417
+ }
418
+
419
+ this[controlElementSymbol] = this.shadowRoot.querySelector(
420
+ "[data-monster-role=control]",
421
+ );
422
+ this[detailsElementSymbol] = this.shadowRoot.querySelector(
423
+ "[data-monster-role=detail]",
424
+ );
425
+ this[detailsSlotElementSymbol] = this.shadowRoot.querySelector("slot");
426
+ this[detailsContainerElementSymbol] = this.shadowRoot.querySelector(
427
+ "[data-monster-role=container]",
428
+ );
429
+ this[detailsDecoElementSymbol] = this.shadowRoot.querySelector(
430
+ "[data-monster-role=deco]",
431
+ );
432
+ }
433
+
434
+ /**
435
+ * @private
436
+ * @returns {string}
437
+ */
438
+ function getConfigKey() {
439
+ return generateUniqueConfigKey(this[nameSymbol], this.id, "state");
440
+ }
441
+
442
+ /**
443
+ * @private
444
+ */
445
+ function updateStateConfig() {
446
+ if (!this.getOption("features.persistState")) {
447
+ return;
448
+ }
449
+
450
+ if (!this[detailsElementSymbol]) {
451
+ return;
452
+ }
453
+
454
+ const document = getDocument();
455
+ const host = document.querySelector("monster-host");
456
+ if (!(host && this.id)) {
457
+ return;
458
+ }
459
+
460
+ const configKey = getConfigKey.call(this);
461
+
462
+ try {
463
+ host.setConfig(configKey, this.isOpen());
464
+ } catch (error) {
465
+ addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, String(error));
466
+ }
467
+ }
468
+
469
+ /**
470
+ * @private
471
+ * @returns {Promise}
472
+ */
473
+ function initStateFromHostConfig() {
474
+ if (!this.getOption("features.persistState")) {
475
+ return Promise.resolve({});
476
+ }
477
+
478
+ const document = getDocument();
479
+ const host = document.querySelector("monster-host");
480
+
481
+ if (!(host && this.id)) {
482
+ return Promise.resolve({});
483
+ }
484
+
485
+ const configKey = getConfigKey.call(this);
486
+ return host
487
+ .getConfig(configKey)
488
+ .then((state) => {
489
+ if (state === true) {
490
+ this.open();
491
+ } else {
492
+ this.close();
493
+ }
494
+ })
495
+ .catch((error) => {
496
+ addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error.toString());
497
+ });
498
+ }
499
+
500
+ /**
501
+ * @private
502
+ */
503
+ function initResizeObserver() {
504
+ // against flickering
505
+ this[resizeObserverSymbol] = new ResizeObserver((entries) => {
506
+ if (this[timerCallbackSymbol] instanceof DeadMansSwitch) {
507
+ try {
508
+ this[timerCallbackSymbol].touch();
509
+ return;
510
+ } catch (e) {
511
+ delete this[timerCallbackSymbol];
512
+ }
513
+ }
514
+
515
+ this[timerCallbackSymbol] = new DeadMansSwitch(200, () => {
516
+ checkAndRearrangeContent.call(this);
517
+ });
518
+ });
519
+ }
520
+
521
+ function checkAndRearrangeContent() {
522
+ this.adjustHeight();
523
+ }
524
+
525
+ /**
526
+ * @private
527
+ * @return {string}
528
+ */
529
+ function getTemplate() {
530
+ // language=HTML
531
+ return `
532
+ <div data-monster-role="control" part="control" class="overflow-hidden">
533
+ <div data-monster-role="detail">
534
+ <div data-monster-attributes="class path:classes.container" part="container"
535
+ data-monster-role="container">
536
+ <slot></slot>
537
+ </div>
538
+ <div class="deco-line" data-monster-role="deco" part="deco"></div>
539
+ </div>
540
+ </div>`;
541
+ }
542
+
543
+ registerCustomElement(Collapse);