@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
@@ -0,0 +1,273 @@
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
+ registerCustomElement,
18
+ } from "../../dom/customelement.mjs";
19
+ import { DetailsStyleSheet } from "./stylesheet/details.mjs";
20
+ import { ATTRIBUTE_BUTTON_LABEL } from "../host/constants.mjs";
21
+ import { isString } from "../../types/is.mjs";
22
+ import { generateUniqueConfigKey } from "../host/util.mjs";
23
+ import { Collapse, nameSymbol } from "./collapse.mjs";
24
+ import { instanceSymbol } from "../../constants.mjs";
25
+
26
+ export { Details };
27
+
28
+ /**
29
+ * @private
30
+ * @type {symbol}
31
+ */
32
+ const buttonElementSymbol = Symbol("buttonElement");
33
+
34
+ /**
35
+ * @private
36
+ * @type {symbol}
37
+ */
38
+ const buttonEventHandlerSymbol = Symbol("buttonEventHandler");
39
+
40
+ /**
41
+ * The Details component is used to show a details.
42
+ *
43
+ * <img src="./images/details.png">
44
+ *
45
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
46
+ *
47
+ * You can create this control either by specifying the HTML tag <monster-details />` directly in the HTML or using
48
+ * Javascript via the `document.createElement('monster-details');` method.
49
+ *
50
+ * ```html
51
+ * <monster-details></monster-details>
52
+ * ```
53
+ *
54
+ * Or you can create this CustomControl directly in Javascript:
55
+ *
56
+ * ```js
57
+ * import '@schukai/component-state/source/details.mjs';
58
+ * document.createElement('monster-details');
59
+ * ```
60
+ *
61
+ * The Body should have a class "hidden" to ensure that the styles are applied correctly.
62
+ *
63
+ * ```css
64
+ * body.hidden {
65
+ * visibility: hidden;
66
+ * }
67
+ * ```
68
+ *
69
+ * @startuml details.png
70
+ * skinparam monochrome true
71
+ * skinparam shadowing false
72
+ * HTMLElement <|-- CustomElement
73
+ * CustomElement <|-- Collapse
74
+ * Collapse <|-- Details
75
+ * @enduml
76
+ *
77
+ * @copyright schukai GmbH
78
+ * @memberOf Monster.Components.Layout
79
+ * @summary A simple details component
80
+ * @fires Monster.Components.Layout.Details.event:monster-details-before-open
81
+ * @fires Monster.Components.Layout.Details.event:monster-details-open
82
+ * @fires Monster.Components.Layout.Details.event:monster-details-before-close
83
+ * @fires Monster.Components.Layout.Details.event:monster-details-closed
84
+ */
85
+ class Details extends Collapse {
86
+ /**
87
+ * This method is called by the `instanceof` operator.
88
+ * @returns {symbol}
89
+ */
90
+ static get [instanceSymbol]() {
91
+ return Symbol.for("@schukai/monster/components/layout/details@@instance");
92
+ }
93
+
94
+ /**
95
+ *
96
+ */
97
+ constructor() {
98
+ super();
99
+ // the name is only used for the host config and the event name
100
+ this[nameSymbol] = "details";
101
+ }
102
+
103
+ /**
104
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
105
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
106
+ *
107
+ * The individual configuration values can be found in the table.
108
+ *
109
+ * @property {Object} templates Template definitions
110
+ * @property {string} templates.main Main template
111
+ * @property {Object} classes CSS classes
112
+ * @property {string} classes.button CSS class for the button
113
+ * @property {Object} button Button configuration
114
+ * @property {string} button.label Button label
115
+ * @property {Object} features Feature configuration
116
+ * @property {boolean} features.accordion Enable accordion mode
117
+ * @property {boolean} features.persistState Persist the state in the host configuration
118
+ */
119
+ get defaults() {
120
+ return Object.assign({}, super.defaults, {
121
+ templates: {
122
+ main: getTemplate(),
123
+ },
124
+ labels: {
125
+ button: "Details",
126
+ },
127
+ });
128
+ }
129
+
130
+ /**
131
+ *
132
+ * @returns {Monster.Components.Layout.Details}
133
+ */
134
+ [assembleMethodSymbol]() {
135
+ super[assembleMethodSymbol]();
136
+
137
+ initButtonLabel.call(this);
138
+ initControlReferences.call(this);
139
+ initEventHandler.call(this);
140
+ }
141
+
142
+ connectedCallback() {
143
+ super.connectedCallback();
144
+
145
+ const containDocument = this.shadowRoot;
146
+
147
+ if (containDocument !== null) {
148
+ const previousElement = this.previousElementSibling;
149
+ if (previousElement && previousElement.tagName === "MONSTER-DETAILS") {
150
+ this[buttonElementSymbol].style.borderTop = "0";
151
+ }
152
+ }
153
+ }
154
+
155
+ /**
156
+ *
157
+ * @return {string}
158
+ */
159
+ static getTag() {
160
+ return "monster-details";
161
+ }
162
+
163
+ /**
164
+ * @return {Array<CSSStyleSheet>}
165
+ */
166
+ static getCSSStyleSheet() {
167
+ const css = super.getCSSStyleSheet();
168
+ css.push(DetailsStyleSheet);
169
+ return css;
170
+ }
171
+ }
172
+
173
+ /**
174
+ * @private
175
+ * @return {Select}
176
+ * @throws {Error} no shadow-root is defined
177
+ */
178
+ function initControlReferences() {
179
+ if (!this.shadowRoot) {
180
+ throw new Error("no shadow-root is defined");
181
+ }
182
+
183
+ this[buttonElementSymbol] = this.shadowRoot.querySelector(
184
+ "[data-monster-role=button]",
185
+ );
186
+ }
187
+
188
+ /**
189
+ * @private
190
+ */
191
+ function initEventHandler() {
192
+ if (!this.shadowRoot) {
193
+ throw new Error("no shadow-root is defined");
194
+ }
195
+
196
+ this[buttonEventHandlerSymbol] = (event) => {
197
+ this.toggle();
198
+ };
199
+
200
+ this[buttonElementSymbol].addEventListener(
201
+ "click",
202
+ this[buttonEventHandlerSymbol],
203
+ );
204
+
205
+ return this;
206
+ }
207
+
208
+ /**
209
+ * @private
210
+ * @return {string}
211
+ */
212
+ function initButtonLabel() {
213
+ let label;
214
+ const setLabel = false;
215
+ if (this.hasAttribute(ATTRIBUTE_BUTTON_LABEL)) {
216
+ label = this.getAttribute(ATTRIBUTE_BUTTON_LABEL);
217
+ } else {
218
+ label = this.innerText;
219
+ }
220
+
221
+ if (!isString(label)) {
222
+ label = "";
223
+ }
224
+
225
+ label = label.trim();
226
+
227
+ if (label === "") {
228
+ label = this.getOption("labels.button", "Details");
229
+ }
230
+
231
+ if (label.length > 100) {
232
+ label = `${label.substring(0, 99)}…`;
233
+ }
234
+
235
+ this.setAttribute(ATTRIBUTE_BUTTON_LABEL, label);
236
+ this.setOption("labels.button", label);
237
+
238
+ return label;
239
+ }
240
+
241
+ /**
242
+ * @private
243
+ * @returns {string}
244
+ */
245
+ function getConfigKey() {
246
+ return generateUniqueConfigKey("details", this.id, "state");
247
+ }
248
+
249
+ /**
250
+ * @private
251
+ * @return {string}
252
+ */
253
+ function getTemplate() {
254
+ // language=HTML
255
+ return `
256
+ <div data-monster-role="control" part="control" class="overflow-hidden">
257
+ <div data-monster-role="summary" part="summary">
258
+ <button part="button" data-monster-attributes="class path:classes.button"
259
+ data-monster-role="button"
260
+ data-monster-replace="path:labels.button | default:click me">click me
261
+ </button>
262
+ </div>
263
+ <div data-monster-role="detail">
264
+ <div data-monster-attributes="class path:classes.container" part="container"
265
+ data-monster-role="container">
266
+ <slot></slot>
267
+ </div>
268
+ <div class="deco-line" data-monster-role="deco"></div>
269
+ </div>
270
+ </div>`;
271
+ }
272
+
273
+ registerCustomElement(Details);
@@ -1,19 +1,28 @@
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
15
  import {
7
- assembleMethodSymbol,
8
- CustomElement,
9
- registerCustomElement,
16
+ assembleMethodSymbol,
17
+ CustomElement,
18
+ registerCustomElement,
10
19
  } from "../../dom/customelement.mjs";
11
- import {DeadMansSwitch} from "../../util/deadmansswitch.mjs";
20
+ import { DeadMansSwitch } from "../../util/deadmansswitch.mjs";
12
21
 
13
- import {PanelStyleSheet} from "./stylesheet/panel.mjs";
14
- import {instanceSymbol} from "../../constants.mjs";
22
+ import { PanelStyleSheet } from "./stylesheet/panel.mjs";
23
+ import { instanceSymbol } from "../../constants.mjs";
15
24
 
16
- export {Panel};
25
+ export { Panel };
17
26
 
18
27
  /**
19
28
  * @private
@@ -66,178 +75,179 @@ const timerCallbackSymbol = Symbol("timerCallback");
66
75
  * @summary A simple panel component
67
76
  */
68
77
  class Panel extends CustomElement {
69
-
70
- /**
71
- * This method is called by the `instanceof` operator.
72
- * @returns {symbol}
73
- */
74
- static get [instanceSymbol]() {
75
- return Symbol.for("@schukai/monster/components/layout/panel");
76
- }
77
-
78
- /**
79
- * To set the options via the html tag the attribute `data-monster-options` must be used.
80
- * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
81
- *
82
- * The individual configuration values can be found in the table.
83
- *
84
- * @property {Object} templates Template definitions
85
- * @property {string} templates.main Main template
86
- * @property {string} heightAdjustment Height adjustment
87
- */
88
- get defaults() {
89
- return Object.assign({}, super.defaults, {
90
- templates: {
91
- main: getTemplate(),
92
- },
93
- heightAdjustment: 4,
94
- });
95
- }
96
-
97
- /**
98
- *
99
- * @returns {Monster.Components.Host.Viewer}
100
- */
101
- [assembleMethodSymbol]() {
102
- super[assembleMethodSymbol]();
103
-
104
- initControlReferences.call(this);
105
- initEventHandler.call(this);
106
-
107
- calcHeight.call(this);
108
-
109
- }
110
-
111
- /**
112
- * This method is called by the dom and should not be called directly.
113
- *
114
- * @return {void}
115
- */
116
- connectedCallback() {
117
- super.connectedCallback();
118
- attachResizeObserver.call(this);
119
-
120
- // disable scrolling in parent node
121
- if (this.parentNode && this.parentNode instanceof HTMLElement) {
122
- this.parentNode.style.overflow = "hidden";
123
- }
124
-
125
- }
126
-
127
- /**
128
- * This method is called by the dom and should not be called directly.
129
- *
130
- * @return {void}
131
- */
132
- disconnectedCallback() {
133
- super.disconnectedCallback();
134
- disconnectResizeObserver.call(this);
135
- }
136
-
137
- /**
138
- * @return {string}
139
- */
140
- static getTag() {
141
- return "monster-panel";
142
- }
143
-
144
- /**
145
- * @return {CSSStyleSheet[]}
146
- */
147
- static getCSSStyleSheet() {
148
- return [PanelStyleSheet];
149
- }
78
+ /**
79
+ * This method is called by the `instanceof` operator.
80
+ * @returns {symbol}
81
+ */
82
+ static get [instanceSymbol]() {
83
+ return Symbol.for("@schukai/monster/components/layout/panel");
84
+ }
85
+
86
+ /**
87
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
88
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
89
+ *
90
+ * The individual configuration values can be found in the table.
91
+ *
92
+ * @property {Object} templates Template definitions
93
+ * @property {string} templates.main Main template
94
+ * @property {string} heightAdjustment Height adjustment
95
+ */
96
+ get defaults() {
97
+ return Object.assign({}, super.defaults, {
98
+ templates: {
99
+ main: getTemplate(),
100
+ },
101
+ heightAdjustment: 4,
102
+ });
103
+ }
104
+
105
+ /**
106
+ *
107
+ * @returns {Monster.Components.Host.Viewer}
108
+ */
109
+ [assembleMethodSymbol]() {
110
+ super[assembleMethodSymbol]();
111
+
112
+ initControlReferences.call(this);
113
+ initEventHandler.call(this);
114
+
115
+ calcHeight.call(this);
116
+ }
117
+
118
+ /**
119
+ * This method is called by the dom and should not be called directly.
120
+ *
121
+ * @return {void}
122
+ */
123
+ connectedCallback() {
124
+ super.connectedCallback();
125
+ attachResizeObserver.call(this);
126
+
127
+ // disable scrolling in parent node
128
+ if (this.parentNode && this.parentNode instanceof HTMLElement) {
129
+ this.parentNode.style.overflow = "hidden";
130
+ }
131
+ }
132
+
133
+ /**
134
+ * This method is called by the dom and should not be called directly.
135
+ *
136
+ * @return {void}
137
+ */
138
+ disconnectedCallback() {
139
+ super.disconnectedCallback();
140
+ disconnectResizeObserver.call(this);
141
+ }
142
+
143
+ /**
144
+ * @return {string}
145
+ */
146
+ static getTag() {
147
+ return "monster-panel";
148
+ }
149
+
150
+ /**
151
+ * @return {CSSStyleSheet[]}
152
+ */
153
+ static getCSSStyleSheet() {
154
+ return [PanelStyleSheet];
155
+ }
150
156
  }
151
157
 
152
158
  /**
153
159
  * @private
154
160
  */
155
161
  function calcHeight() {
162
+ this.style.boxSizing = "border-box";
156
163
 
157
- this.style.boxSizing = "border-box";
158
-
159
- const height = calculateMaximumHeight.call(this, this);
160
- if (height < 0) {
161
- return;
162
- }
163
-
164
- this.style.height = `${height}px`;
164
+ const height = calculateMaximumHeight.call(this, this);
165
+ if (height < 0) {
166
+ return;
167
+ }
165
168
 
169
+ this.style.height = `${height}px`;
166
170
  }
167
171
 
168
172
  function calculateMaximumHeight(element) {
169
- let totalBottomBorder = 0;
170
- let totalBottomPadding = 0;
171
- let totalBottomMargin = 0;
172
- let totalOutlineHeight = 0;
173
- let totalBoxShadowHeight = 0;
174
- let currentElement = element;
175
-
176
- // Get the distance from the top of the element to the top of the viewport
177
- const distanceFromTop = element.getBoundingClientRect().top;
178
-
179
- // Loop through the elements up to the body to sum up the bottom borders, padding, and margin
180
- while (currentElement && currentElement !== document.body) {
181
- const style = window.getComputedStyle(currentElement);
182
-
183
- // Box sizing
184
- const boxSizing = style.boxSizing;
185
-
186
- // Borders, padding, and margin
187
- const borderBottomWidth = parseFloat(style.borderBottomWidth);
188
- const paddingBottom = parseFloat(style.paddingBottom);
189
- const marginBottom = parseFloat(style.marginBottom);
190
-
191
- // Outline and box-shadow
192
- const outlineHeight = parseFloat(style.outlineWidth);
193
- // This is a simplification; box-shadow is more complex to parse
194
- const boxShadowVertical = parseFloat(style.boxShadow.split(' ')[3] || 0);
195
-
196
- // Accumulate values
197
- totalBottomBorder += isNaN(borderBottomWidth) ? 0 : borderBottomWidth;
198
- totalBottomPadding += (isNaN(paddingBottom) || boxSizing === 'border-box') ? 0 : paddingBottom;
199
- totalBottomMargin += isNaN(marginBottom) ? 0 : marginBottom;
200
- totalOutlineHeight += isNaN(outlineHeight) ? 0 : outlineHeight;
201
- totalBoxShadowHeight += isNaN(boxShadowVertical) ? 0 : boxShadowVertical;
202
-
203
- currentElement = currentElement.parentNode || currentElement.host;
204
- }
205
-
206
- // Calculate the maximum height by subtracting the distance, borders, padding, margin, outline, and box-shadow from the window's inner height
207
- const maximumHeight = window.innerHeight - distanceFromTop - totalBottomBorder - totalBottomPadding - totalBottomMargin - totalOutlineHeight - totalBoxShadowHeight;
208
- return maximumHeight + this.getOption("heightAdjustment");
173
+ let totalBottomBorder = 0;
174
+ let totalBottomPadding = 0;
175
+ let totalBottomMargin = 0;
176
+ let totalOutlineHeight = 0;
177
+ let totalBoxShadowHeight = 0;
178
+ let currentElement = element;
179
+
180
+ // Get the distance from the top of the element to the top of the viewport
181
+ const distanceFromTop = element.getBoundingClientRect().top;
182
+
183
+ // Loop through the elements up to the body to sum up the bottom borders, padding, and margin
184
+ while (currentElement && currentElement !== document.body) {
185
+ const style = window.getComputedStyle(currentElement);
186
+
187
+ // Box sizing
188
+ const boxSizing = style.boxSizing;
189
+
190
+ // Borders, padding, and margin
191
+ const borderBottomWidth = parseFloat(style.borderBottomWidth);
192
+ const paddingBottom = parseFloat(style.paddingBottom);
193
+ const marginBottom = parseFloat(style.marginBottom);
194
+
195
+ // Outline and box-shadow
196
+ const outlineHeight = parseFloat(style.outlineWidth);
197
+ // This is a simplification; box-shadow is more complex to parse
198
+ const boxShadowVertical = parseFloat(style.boxShadow.split(" ")[3] || 0);
199
+
200
+ // Accumulate values
201
+ totalBottomBorder += isNaN(borderBottomWidth) ? 0 : borderBottomWidth;
202
+ totalBottomPadding +=
203
+ isNaN(paddingBottom) || boxSizing === "border-box" ? 0 : paddingBottom;
204
+ totalBottomMargin += isNaN(marginBottom) ? 0 : marginBottom;
205
+ totalOutlineHeight += isNaN(outlineHeight) ? 0 : outlineHeight;
206
+ totalBoxShadowHeight += isNaN(boxShadowVertical) ? 0 : boxShadowVertical;
207
+
208
+ currentElement = currentElement.parentNode || currentElement.host;
209
+ }
210
+
211
+ // Calculate the maximum height by subtracting the distance, borders, padding, margin, outline, and box-shadow from the window's inner height
212
+ const maximumHeight =
213
+ window.innerHeight -
214
+ distanceFromTop -
215
+ totalBottomBorder -
216
+ totalBottomPadding -
217
+ totalBottomMargin -
218
+ totalOutlineHeight -
219
+ totalBoxShadowHeight;
220
+ return maximumHeight + this.getOption("heightAdjustment");
209
221
  }
210
222
 
211
-
212
223
  /**
213
224
  * @private
214
225
  */
215
226
  function attachResizeObserver() {
216
- // against flickering
217
- this[resizeObserverSymbol] = new ResizeObserver(() => {
218
- if (this[timerCallbackSymbol] instanceof DeadMansSwitch) {
219
- try {
220
- this[timerCallbackSymbol].touch();
221
- return;
222
- } catch (e) {
223
- delete this[timerCallbackSymbol];
224
- }
225
- }
226
-
227
- this[timerCallbackSymbol] = new DeadMansSwitch(200, () => {
228
- calcHeight.call(this);
229
- });
230
- });
231
-
232
- this[resizeObserverSymbol].observe(this.ownerDocument.body);
233
- this[resizeObserverSymbol].observe(document.scrollingElement);
234
-
227
+ // against flickering
228
+ this[resizeObserverSymbol] = new ResizeObserver(() => {
229
+ if (this[timerCallbackSymbol] instanceof DeadMansSwitch) {
230
+ try {
231
+ this[timerCallbackSymbol].touch();
232
+ return;
233
+ } catch (e) {
234
+ delete this[timerCallbackSymbol];
235
+ }
236
+ }
237
+
238
+ this[timerCallbackSymbol] = new DeadMansSwitch(200, () => {
239
+ calcHeight.call(this);
240
+ });
241
+ });
242
+
243
+ this[resizeObserverSymbol].observe(this.ownerDocument.body);
244
+ this[resizeObserverSymbol].observe(document.scrollingElement);
235
245
  }
236
246
 
237
247
  function disconnectResizeObserver() {
238
- if (this[resizeObserverSymbol] instanceof ResizeObserver) {
239
- this[resizeObserverSymbol].disconnect();
240
- }
248
+ if (this[resizeObserverSymbol] instanceof ResizeObserver) {
249
+ this[resizeObserverSymbol].disconnect();
250
+ }
241
251
  }
242
252
 
243
253
  /**
@@ -246,20 +256,20 @@ function disconnectResizeObserver() {
246
256
  * @throws {Error} no shadow-root is defined
247
257
  */
248
258
  function initControlReferences() {
249
- if (!this.shadowRoot) {
250
- throw new Error("no shadow-root is defined");
251
- }
252
-
253
- this[PanelElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=control]");
254
-
259
+ if (!this.shadowRoot) {
260
+ throw new Error("no shadow-root is defined");
261
+ }
255
262
 
263
+ this[PanelElementSymbol] = this.shadowRoot.querySelector(
264
+ "[data-monster-role=control]",
265
+ );
256
266
  }
257
267
 
258
268
  /**
259
269
  * @private
260
270
  */
261
271
  function initEventHandler() {
262
- return this;
272
+ return this;
263
273
  }
264
274
 
265
275
  /**
@@ -267,8 +277,8 @@ function initEventHandler() {
267
277
  * @return {string}
268
278
  */
269
279
  function getTemplate() {
270
- // language=HTML
271
- return `
280
+ // language=HTML
281
+ return `
272
282
  <div data-monster-role="control" part="control">
273
283
  <slot></slot>
274
284
  </div>`;