@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,546 @@
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 { instanceSymbol } from "../../constants.mjs";
16
+ import { ATTRIBUTE_ROLE } from "../../dom/constants.mjs";
17
+ import { CustomElement } from "../../dom/customelement.mjs";
18
+ import {
19
+ assembleMethodSymbol,
20
+ registerCustomElement,
21
+ } from "../../dom/customelement.mjs";
22
+ import { TableOfContentStyleSheet } from "./stylesheet/table-of-content.mjs";
23
+ import { fireCustomEvent } from "../../dom/events.mjs";
24
+ import { getWindow } from "../../dom/util.mjs";
25
+ import "../layout/popper.mjs";
26
+
27
+ export { TableOfContent };
28
+
29
+ /**
30
+ * @private
31
+ * @type {symbol}
32
+ */
33
+ const tableOfContentElementSymbol = Symbol("tableOfContentElement");
34
+
35
+ /**
36
+ * @private
37
+ * @type {symbol}
38
+ */
39
+ const navigationElementSymbol = Symbol("navigation");
40
+
41
+ /**
42
+ * @private
43
+ * @type {symbol}
44
+ */
45
+ const navigationControlElementSymbol = Symbol("navigationControlElement");
46
+
47
+ /**
48
+ * @private
49
+ * @type {symbol}
50
+ */
51
+ const navigationListElementSymbol = Symbol("navigationListElement");
52
+
53
+ /**
54
+ * @private
55
+ * @type {symbol}
56
+ */
57
+ const windowEventHandlerSymbol = Symbol("windowsEventHandler");
58
+
59
+ /**
60
+ * @private
61
+ * @type {symbol}
62
+ */
63
+ const scrollableParentSymbol = Symbol("scrollableParent");
64
+
65
+ /**
66
+ * @private
67
+ * @type {symbol}
68
+ */
69
+ const scrollableEventHandlerSymbol = Symbol("scrollableEventHandler");
70
+
71
+ /**
72
+ * A TableOfContent
73
+ *
74
+ * @fragments /fragments/components/form/table-of-content/
75
+ *
76
+ * @example /examples/components/form/table-of-content-simple
77
+ *
78
+ * @since 3.65.0
79
+ * @copyright schukai GmbH
80
+ * @summary A beautiful TableOfContent that can make your life easier and also looks good.
81
+ * @fires new-top The new top position
82
+ */
83
+ class TableOfContent extends CustomElement {
84
+ /**
85
+ * This method is called by the `instanceof` operator.
86
+ * @returns {symbol}
87
+ */
88
+ static get [instanceSymbol]() {
89
+ return Symbol.for(
90
+ "@schukai/monster/components/navigation/table-of-content@@instance",
91
+ );
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @return {Components.Navigation.TableOfContent
97
+ */
98
+ [assembleMethodSymbol]() {
99
+ super[assembleMethodSymbol]();
100
+ initControlReferences.call(this);
101
+ initEventHandler.call(this);
102
+ return this;
103
+ }
104
+
105
+ /**
106
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
107
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
108
+ *
109
+ * The individual configuration values can be found in the table.
110
+ *
111
+ * @property {Object} templates Template definitions
112
+ * @property {string} templates.main Main template
113
+ * @property {Object} labels Label definitions
114
+ * @property {Object} features Features
115
+ * @property {boolean} features.showScrollToTop=true Show scroll to top
116
+ * @property {boolean} features.showScrollToBottom=true Show scroll to bottom
117
+ * @property {number} offset=100 Navigation offset from top
118
+ * @property {string} position="right" Navigation position (right, left)
119
+ * @property {Object} classes CSS classes
120
+ * @property {boolean} disabled=false Disabled state
121
+ */
122
+ get defaults() {
123
+ return Object.assign({}, super.defaults, {
124
+ templates: {
125
+ main: getTemplate(),
126
+ },
127
+ labels: {
128
+ scrollToTop: "⇧",
129
+ scrollToBottom: "⇩",
130
+ },
131
+ classes: {},
132
+ disabled: false,
133
+ features: {
134
+ showScrollToTop: true,
135
+ showScrollToBottom: true,
136
+ },
137
+ offset: 50,
138
+ position: "right",
139
+ });
140
+ }
141
+
142
+ /**
143
+ * @return {void}
144
+ */
145
+ connectedCallback() {
146
+ super.connectedCallback();
147
+
148
+ initNavigation.call(this);
149
+
150
+ const position = this.getOption("position");
151
+ if (position === "left") {
152
+ this[navigationElementSymbol].classList.remove("right");
153
+ this[navigationElementSymbol].classList.add("left");
154
+ } else {
155
+ this[navigationElementSymbol].classList.remove("left");
156
+ this[navigationElementSymbol].classList.add("right");
157
+ }
158
+
159
+ setTimeout(() => {
160
+ this[scrollableParentSymbol] = findScrollableParent(this);
161
+
162
+ if (this[scrollableParentSymbol] === getWindow()) {
163
+ this[scrollableParentSymbol].addEventListener(
164
+ "scroll",
165
+ this[windowEventHandlerSymbol],
166
+ );
167
+ calcAndSetNavigationTopWindowContext.call(this);
168
+ } else {
169
+ this[scrollableParentSymbol].addEventListener(
170
+ "scroll",
171
+ this[scrollableEventHandlerSymbol],
172
+ );
173
+ calcAndSetNavigationTopScrollableParentContext.call(this);
174
+ }
175
+ }, 0);
176
+ }
177
+
178
+ /**
179
+ * @return {void}
180
+ */
181
+ disconnectedCallback() {
182
+ super.disconnectedCallback();
183
+
184
+ if (!this[scrollableParentSymbol]) {
185
+ return;
186
+ }
187
+
188
+ if (this[scrollableParentSymbol] === getWindow()) {
189
+ this[scrollableParentSymbol].removeEventListener(
190
+ "scroll",
191
+ this[windowEventHandlerSymbol],
192
+ );
193
+ } else {
194
+ this[scrollableParentSymbol].removeEventListener(
195
+ "scroll",
196
+ this[scrollableEventHandlerSymbol],
197
+ );
198
+ }
199
+ }
200
+
201
+ /**
202
+ * @return {string}
203
+ */
204
+ static getTag() {
205
+ return "monster-table-of-content";
206
+ }
207
+
208
+ /**
209
+ * @return {CSSStyleSheet[]}
210
+ */
211
+ static getCSSStyleSheet() {
212
+ return [TableOfContentStyleSheet];
213
+ }
214
+ }
215
+
216
+ /**
217
+ * @private
218
+ * @return {void}
219
+ * @fires new-top - The new top position
220
+ */
221
+ function calcAndSetNavigationTopWindowContext() {
222
+ const thisTop = this.getBoundingClientRect().top;
223
+ const topViewport = window.scrollY;
224
+ let top = Math.max(topViewport, thisTop);
225
+
226
+ const offset = this.getOption("offset");
227
+ if (offset > 0) {
228
+ top += offset;
229
+ }
230
+
231
+ fireCustomEvent(this, "new-top", { top: top });
232
+
233
+ this[navigationElementSymbol].style.top = top + "px";
234
+ }
235
+
236
+ /**
237
+ * @private
238
+ * @return {void}
239
+ * @fires new-top - The new top position
240
+ */
241
+ function calcAndSetNavigationTopScrollableParentContext() {
242
+ if (!this[scrollableParentSymbol]) {
243
+ return;
244
+ }
245
+
246
+ const windowTop = getWindow().scrollY;
247
+ const thisRect = this.getBoundingClientRect();
248
+ const thisTop = thisRect.top;
249
+ const thisBottom = thisRect.bottom;
250
+ const scrollTop = this[scrollableParentSymbol].scrollTop;
251
+ let top = windowTop + thisTop + scrollTop;
252
+
253
+ const offset = this.getOption("offset");
254
+ if (offset > 0) {
255
+ top += offset;
256
+ }
257
+
258
+ if (thisBottom + 50 < top || top < thisTop + 50) {
259
+ this[navigationElementSymbol].style.visibility = "hidden";
260
+ } else {
261
+ this[navigationElementSymbol].style.visibility = "visible";
262
+ }
263
+
264
+ fireCustomEvent(this, "new-top", { top: top });
265
+ this[navigationElementSymbol].style.top = top + "px";
266
+ }
267
+
268
+ /**
269
+ * @private
270
+ */
271
+ function initNavigation() {
272
+ const headings = getHeadings.call(this);
273
+
274
+ for (const heading of headings) {
275
+ const div = document.createElement("div");
276
+ div.classList.add("heading-strip");
277
+ div.classList.add("level-" + heading.tagName.toLowerCase());
278
+ this[navigationControlElementSymbol].appendChild(div);
279
+ }
280
+
281
+ let startLevel = 7;
282
+ for (const heading of headings) {
283
+ if (parseInt(heading.tagName.substring(1)) < startLevel) {
284
+ startLevel = parseInt(heading.tagName.substring(1));
285
+ }
286
+ }
287
+
288
+ if (startLevel === 7) {
289
+ // no headings found
290
+ return;
291
+ }
292
+
293
+ this[navigationListElementSymbol].appendChild(
294
+ createListFromHeadings.call(this, headings, startLevel).sublist,
295
+ );
296
+
297
+ const footer = document.createElement("div");
298
+ footer.classList.add("footer");
299
+
300
+ if (this.getOption("features.showScrollToTop")) {
301
+ const scrollToTop = document.createElement("div");
302
+ scrollToTop.textContent = this.getOption("labels.scrollToTop");
303
+ scrollToTop.classList.add("scroll-to-top");
304
+ scrollToTop.addEventListener("click", () => {
305
+ if (!this[scrollableParentSymbol]) {
306
+ return;
307
+ }
308
+
309
+ this[scrollableParentSymbol].scrollTo(0, 0);
310
+ });
311
+ footer.appendChild(scrollToTop);
312
+ }
313
+
314
+ if (this.getOption("features.showScrollToBottom")) {
315
+ const scrollToBottom = document.createElement("div");
316
+ scrollToBottom.textContent = this.getOption("labels.scrollToBottom");
317
+ scrollToBottom.classList.add("scroll-to-bottom");
318
+ scrollToBottom.addEventListener("click", () => {
319
+ if (!this[scrollableParentSymbol]) {
320
+ return;
321
+ }
322
+
323
+ this[scrollableParentSymbol].scrollTo(
324
+ 0,
325
+ this[scrollableParentSymbol].scrollHeight,
326
+ );
327
+ });
328
+ footer.appendChild(scrollToBottom);
329
+ }
330
+
331
+ if (footer.children.length > 0) {
332
+ this[navigationListElementSymbol].appendChild(footer);
333
+ }
334
+ }
335
+
336
+ /**
337
+ * Recursively creates a nested list (UL) from a list of heading elements.
338
+ * @param {HTMLElement[]} nodeList - The list of heading elements.
339
+ * @param {number} currentLevel - The current heading level we are processing.
340
+ * @returns {{sublist: HTMLUListElement, lastIndex: number}} An object containing the sublist and the index of the last processed element.
341
+ */
342
+ function createListFromHeadings(nodeList, currentLevel = 1) {
343
+ const self = this;
344
+ let ul = document.createElement("ul");
345
+ let i = 0;
346
+
347
+ while (i < nodeList.length) {
348
+ const node = nodeList[i];
349
+ const level = parseInt(node.tagName.substring(1));
350
+
351
+ if (level === currentLevel) {
352
+ const li = document.createElement("li");
353
+ li.textContent = node.textContent;
354
+
355
+ li.addEventListener("click", (e) => {
356
+ e.stopPropagation();
357
+ getWindow().requestAnimationFrame(() => {
358
+ window.scrollTo(0, 0);
359
+ // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
360
+ // mostly supported
361
+ node?.scrollIntoView({ behavior: "smooth" });
362
+ });
363
+ });
364
+
365
+ ul.appendChild(li);
366
+ i++;
367
+ } else if (level > currentLevel) {
368
+ if (ul.lastChild) {
369
+ const { sublist, lastIndex } = createListFromHeadings.call(
370
+ self,
371
+ nodeList.slice(i),
372
+ level,
373
+ );
374
+ ul.lastChild.appendChild(sublist);
375
+ i += lastIndex;
376
+ } else {
377
+ throw new Error(
378
+ "Heading structure error: higher level " +
379
+ level +
380
+ " found without a parent (level " +
381
+ currentLevel +
382
+ ")",
383
+ );
384
+ }
385
+ } else {
386
+ break;
387
+ }
388
+ }
389
+
390
+ return { sublist: ul, lastIndex: i };
391
+ }
392
+
393
+ /**
394
+ * @private
395
+ * @returns {*[]}
396
+ */
397
+ function getHeadings() {
398
+ const allHeadings = [];
399
+
400
+ const slots = this.shadowRoot.querySelectorAll("slot");
401
+
402
+ slots.forEach((slot) => {
403
+ const slottedElements = slot.assignedElements();
404
+
405
+ slottedElements.forEach((element) => {
406
+ if (element instanceof HTMLHeadingElement) {
407
+ allHeadings.push(element);
408
+ return;
409
+ }
410
+
411
+ const headings = element.querySelectorAll("h1, h2, h3, h4, h5, h6");
412
+ let nodeList = Array.from(headings);
413
+
414
+ // remove all with attribute data-monster-table-of-content-omit
415
+ nodeList = nodeList.filter((node) => {
416
+ return !node.hasAttribute("data-monster-table-of-content-omit");
417
+ });
418
+
419
+ allHeadings.push(...nodeList);
420
+ });
421
+ });
422
+
423
+ return allHeadings;
424
+ }
425
+
426
+ /**
427
+ * @private
428
+ * @return {initEventHandler}
429
+ */
430
+ function initEventHandler() {
431
+ const self = this;
432
+ let ticking = false;
433
+
434
+ this[windowEventHandlerSymbol] = function () {
435
+ if (!ticking) {
436
+ getWindow().requestAnimationFrame(() => {
437
+ calcAndSetNavigationTopWindowContext.call(self);
438
+ ticking = false;
439
+ });
440
+ ticking = true;
441
+ }
442
+ };
443
+
444
+ this[scrollableEventHandlerSymbol] = function () {
445
+ if (!ticking) {
446
+ getWindow().requestAnimationFrame(() => {
447
+ calcAndSetNavigationTopScrollableParentContext.call(self);
448
+ ticking = false;
449
+ });
450
+ ticking = true;
451
+ }
452
+ };
453
+
454
+ const observer = new IntersectionObserver(
455
+ (entries) => {
456
+ entries.forEach((entry) => {
457
+ if (entry.isIntersecting) {
458
+ getWindow().requestAnimationFrame(() => {
459
+ if (!this[scrollableParentSymbol]) {
460
+ return;
461
+ }
462
+
463
+ if (self[scrollableParentSymbol] === getWindow()) {
464
+ calcAndSetNavigationTopWindowContext.call(self);
465
+ } else {
466
+ calcAndSetNavigationTopScrollableParentContext.call(self);
467
+ }
468
+
469
+ ticking = false;
470
+ });
471
+ ticking = true;
472
+ }
473
+ });
474
+ },
475
+ {
476
+ root: null,
477
+ rootMargin: "0px",
478
+ threshold: 0.1,
479
+ },
480
+ );
481
+
482
+ observer.observe(this);
483
+
484
+ return this;
485
+ }
486
+
487
+ /**
488
+ *
489
+ * @param {HTMLElement} element
490
+ * @return {HTMLElement|Window}
491
+ */
492
+ function findScrollableParent(element) {
493
+ let parent = element.parentElement;
494
+ while (parent) {
495
+ const overflowY = getWindow().getComputedStyle(parent).overflowY;
496
+ if (overflowY === "scroll" || overflowY === "auto") {
497
+ return parent;
498
+ }
499
+ parent = parent.parentElement;
500
+ }
501
+ return getWindow();
502
+ }
503
+
504
+ /**
505
+ * @private
506
+ * @return {void}
507
+ */
508
+ function initControlReferences() {
509
+ this[tableOfContentElementSymbol] = this.shadowRoot.querySelector(
510
+ `[${ATTRIBUTE_ROLE}="control"]`,
511
+ );
512
+
513
+ this[navigationElementSymbol] = this.shadowRoot.querySelector(
514
+ `[${ATTRIBUTE_ROLE}="navigation"]`,
515
+ );
516
+
517
+ this[navigationControlElementSymbol] = this.shadowRoot.querySelector(
518
+ `[${ATTRIBUTE_ROLE}="navigation-control"]`,
519
+ );
520
+
521
+ this[navigationListElementSymbol] = this.shadowRoot.querySelector(
522
+ `[${ATTRIBUTE_ROLE}="navigation-list"]`,
523
+ );
524
+ }
525
+
526
+ /**
527
+ * @private
528
+ * @return {string}
529
+ */
530
+ function getTemplate() {
531
+ // language=HTML
532
+ return `
533
+ <div data-monster-role="control" part="control">
534
+ <div class="navigation" data-monster-role="navigation">
535
+ <monster-popper data-monster-option-mode="enter">
536
+ <div slot="button" data-monster-role="navigation-control">
537
+ </div>
538
+ <div data-monster-role="navigation-list">
539
+ </div>
540
+ </monster-popper>
541
+ </div>
542
+ <slot></slot>
543
+ </div>`;
544
+ }
545
+
546
+ registerCustomElement(TableOfContent);
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
2
+ * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
3
3
  * Node module: @schukai/monster
4
- * This file is licensed under the AGPLv3 License.
5
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
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
6
13
  */
7
14
 
8
15
  export { STYLE_DISPLAY_MODE_BLOCK };
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
2
+ * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
3
3
  * Node module: @schukai/monster
4
- * This file is licensed under the AGPLv3 License.
5
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
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
6
13
  */
7
14
 
8
15
  import {
@@ -106,7 +113,7 @@ class Message extends CustomElement {
106
113
  * new Monster.Types.DataUrl(btoa(JSON.stringify({
107
114
  * timeout: 3000,
108
115
  * features: {
109
- * clear: true,
116
+ * close: true,
110
117
  * disappear: true
111
118
  * }
112
119
  * })),'application/json',true).toString()
@@ -116,7 +123,7 @@ class Message extends CustomElement {
116
123
  * @property {Object} templates Template definitions
117
124
  * @property {integer} timeout time in milliseconds until the message should be removed. The timeout can be disabled via the feature `disappear`.
118
125
  * @property {Object} features
119
- * @property {boolean} features.clear show clear button
126
+ * @property {boolean} features.close show close button
120
127
  * @property {boolean} features.disappear automatically remove the message after the timeout
121
128
  * @property {string} templates.main Main template
122
129
  *
@@ -128,7 +135,7 @@ class Message extends CustomElement {
128
135
  {
129
136
  timeout: 6000,
130
137
  features: {
131
- clear: true,
138
+ close: true,
132
139
  disappear: true,
133
140
  },
134
141
  content: "<slot></slot>",
@@ -274,7 +281,7 @@ function initControlReferences() {
274
281
  "[" + ATTRIBUTE_ROLE + "=control]",
275
282
  );
276
283
  this[removeElementSymbol] = this.shadowRoot.querySelector(
277
- "[" + ATTRIBUTE_ROLE + "=remove]",
284
+ "[" + ATTRIBUTE_ROLE + "=close]",
278
285
  );
279
286
  }
280
287
 
@@ -325,7 +332,7 @@ function initEventhandler() {
325
332
  * @param {Event} event
326
333
  */
327
334
  this[removeEventHandlerSymbol] = (event) => {
328
- const element = findTargetElementFromEvent(event, ATTRIBUTE_ROLE, "remove");
335
+ const element = findTargetElementFromEvent(event, ATTRIBUTE_ROLE, "close");
329
336
 
330
337
  if (element instanceof HTMLElement) {
331
338
  removeSelf.call(this);
@@ -361,7 +368,7 @@ function getTemplate() {
361
368
 
362
369
  </div>
363
370
  <div part="remove"
364
- data-monster-attributes="class path:features.clear | ?::hidden "
371
+ data-monster-attributes="class path:features.close | ?::hidden "
365
372
  data-monster-role="close" tabindex="-1"></div>
366
373
  </div>
367
374
  </div>
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
3
- * Node module: @schukai/component-form
4
- * This file is licensed under the AGPLv3 License.
5
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
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
6
13
  */
7
14
 
8
15
  import { ATTRIBUTE_ROLE } from "../../dom/constants.mjs";