@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,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);