@schukai/monster 3.65.0 → 3.65.21

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 (383) hide show
  1. package/CHANGELOG.md +48 -327
  2. package/README.md +44 -40
  3. package/package.json +1 -48
  4. package/source/components/constants.mjs +10 -3
  5. package/source/components/datatable/change-button.mjs +18 -11
  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 +212 -203
  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 +220 -218
  13. package/source/components/datatable/datatable.mjs +754 -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 +15 -11
  24. package/source/components/datatable/pagination.mjs +18 -9
  25. package/source/components/datatable/save-button.mjs +280 -270
  26. package/source/components/datatable/status.mjs +15 -5
  27. package/source/components/datatable/stylesheet/change-button.mjs +16 -7
  28. package/source/components/datatable/stylesheet/column-bar.mjs +16 -7
  29. package/source/components/datatable/stylesheet/dataset.mjs +16 -7
  30. package/source/components/datatable/stylesheet/datasource.mjs +16 -7
  31. package/source/components/datatable/stylesheet/datatable.mjs +16 -7
  32. package/source/components/datatable/stylesheet/embedded-pagination.mjs +16 -7
  33. package/source/components/datatable/stylesheet/filter-button.mjs +16 -7
  34. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +16 -7
  35. package/source/components/datatable/stylesheet/filter-date-range.mjs +16 -7
  36. package/source/components/datatable/stylesheet/filter-range.mjs +16 -7
  37. package/source/components/datatable/stylesheet/filter.mjs +16 -7
  38. package/source/components/datatable/stylesheet/pagination.mjs +16 -7
  39. package/source/components/datatable/stylesheet/save-button.mjs +16 -7
  40. package/source/components/datatable/stylesheet/select-filter.mjs +16 -7
  41. package/source/components/datatable/stylesheet/status.mjs +16 -7
  42. package/source/components/datatable/util.mjs +16 -8
  43. package/source/components/form/action-button.mjs +11 -3
  44. package/source/components/form/api-button.mjs +11 -3
  45. package/source/components/form/button-bar.mjs +11 -3
  46. package/source/components/form/button.mjs +254 -249
  47. package/source/components/form/confirm-button.mjs +11 -3
  48. package/source/components/form/constants.mjs +10 -3
  49. package/source/components/form/context-error.mjs +69 -52
  50. package/source/components/form/context-help.mjs +11 -3
  51. package/source/components/form/field-set.mjs +10 -15
  52. package/source/components/form/form.mjs +12 -4
  53. package/source/components/form/message-state-button.mjs +11 -3
  54. package/source/components/form/popper-button.mjs +11 -3
  55. package/source/components/form/popper.mjs +6 -6
  56. package/source/components/form/reload.mjs +12 -4
  57. package/source/components/form/select.mjs +44 -33
  58. package/source/components/form/shadow-reload.mjs +11 -3
  59. package/source/components/form/state-button.mjs +11 -3
  60. package/source/components/form/stylesheet/action-button.mjs +16 -7
  61. package/source/components/form/stylesheet/api-button.mjs +16 -7
  62. package/source/components/form/stylesheet/button-bar.mjs +16 -7
  63. package/source/components/form/stylesheet/button.mjs +16 -7
  64. package/source/components/form/stylesheet/confirm-button.mjs +16 -7
  65. package/source/components/form/stylesheet/context-error.mjs +16 -7
  66. package/source/components/form/stylesheet/context-help.mjs +16 -7
  67. package/source/components/form/stylesheet/field-set.mjs +16 -7
  68. package/source/components/form/stylesheet/form.mjs +16 -7
  69. package/source/components/form/stylesheet/message-state-button.mjs +16 -7
  70. package/source/components/form/stylesheet/popper-button.mjs +16 -7
  71. package/source/components/form/stylesheet/select.mjs +16 -7
  72. package/source/components/form/stylesheet/state-button.mjs +16 -7
  73. package/source/components/form/stylesheet/toggle-switch.mjs +16 -7
  74. package/source/components/form/stylesheet/tree-select.mjs +16 -7
  75. package/source/components/form/tabs.mjs +12 -8
  76. package/source/components/form/template.mjs +11 -3
  77. package/source/components/form/toggle-switch.mjs +12 -8
  78. package/source/components/form/tree-select.mjs +10 -3
  79. package/source/components/form/types/state.mjs +10 -3
  80. package/source/components/form/util/fetch.mjs +10 -3
  81. package/source/components/form/util/floating-ui.mjs +10 -3
  82. package/source/components/form/util/popper.mjs +10 -3
  83. package/source/components/host/call-button.mjs +10 -1
  84. package/source/components/host/collapse.mjs +4 -6
  85. package/source/components/host/config-manager.mjs +2 -0
  86. package/source/components/host/constants.mjs +2 -0
  87. package/source/components/host/details.mjs +5 -8
  88. package/source/components/host/host.mjs +10 -1
  89. package/source/components/host/overlay.mjs +10 -1
  90. package/source/components/host/stylesheet/call-button.mjs +16 -7
  91. package/source/components/host/stylesheet/config-manager.mjs +16 -7
  92. package/source/components/host/stylesheet/host.mjs +16 -7
  93. package/source/components/host/stylesheet/overlay.mjs +16 -7
  94. package/source/components/host/stylesheet/toggle-button.mjs +16 -7
  95. package/source/components/host/stylesheet/viewer.mjs +16 -7
  96. package/source/components/host/toggle-button.mjs +10 -1
  97. package/source/components/host/util.mjs +14 -0
  98. package/source/components/host/viewer.mjs +10 -1
  99. package/source/components/layout/collapse.mjs +4 -3
  100. package/source/components/layout/details.mjs +2 -0
  101. package/source/components/layout/panel.mjs +179 -169
  102. package/source/components/layout/popper.mjs +324 -320
  103. package/source/components/layout/split-panel.mjs +329 -303
  104. package/source/components/layout/stylesheet/collapse.mjs +16 -7
  105. package/source/components/layout/stylesheet/details.mjs +16 -7
  106. package/source/components/layout/stylesheet/panel.mjs +16 -7
  107. package/source/components/layout/stylesheet/popper.mjs +16 -7
  108. package/source/components/layout/stylesheet/split-panel.mjs +16 -7
  109. package/source/components/layout/stylesheet/tabs.mjs +16 -7
  110. package/source/components/layout/stylesheet/width-toggle.mjs +16 -7
  111. package/source/components/layout/tabs.mjs +39 -24
  112. package/source/components/layout/width-toggle.mjs +148 -138
  113. package/source/components/navigation/style/table-of-content.pcss +20 -5
  114. package/source/components/navigation/stylesheet/table-of-content.mjs +17 -8
  115. package/source/components/navigation/table-of-content.mjs +394 -266
  116. package/source/components/notify/constants.mjs +10 -3
  117. package/source/components/notify/message.mjs +16 -9
  118. package/source/components/notify/notify.mjs +11 -4
  119. package/source/components/notify/stylesheet/message.mjs +16 -7
  120. package/source/components/notify/stylesheet/notify.mjs +16 -7
  121. package/source/components/state/log/entry.mjs +10 -1
  122. package/source/components/state/log.mjs +10 -1
  123. package/source/components/state/state.mjs +10 -1
  124. package/source/components/state/stylesheet/log.mjs +16 -7
  125. package/source/components/state/stylesheet/state.mjs +16 -7
  126. package/source/components/style/mixin/form.pcss +0 -1
  127. package/source/components/stylesheet/badge.mjs +16 -7
  128. package/source/components/stylesheet/border.mjs +16 -7
  129. package/source/components/stylesheet/button.mjs +16 -7
  130. package/source/components/stylesheet/card.mjs +16 -7
  131. package/source/components/stylesheet/color.mjs +16 -7
  132. package/source/components/stylesheet/common.mjs +16 -7
  133. package/source/components/stylesheet/control.mjs +16 -7
  134. package/source/components/stylesheet/data-grid.mjs +16 -7
  135. package/source/components/stylesheet/display.mjs +16 -7
  136. package/source/components/stylesheet/floating-ui.mjs +16 -7
  137. package/source/components/stylesheet/form.mjs +16 -7
  138. package/source/components/stylesheet/host.mjs +16 -7
  139. package/source/components/stylesheet/icons.mjs +16 -7
  140. package/source/components/stylesheet/link.mjs +16 -7
  141. package/source/components/stylesheet/mixin/badge.mjs +16 -7
  142. package/source/components/stylesheet/mixin/button.mjs +16 -7
  143. package/source/components/stylesheet/mixin/form.mjs +16 -7
  144. package/source/components/stylesheet/mixin/hover.mjs +16 -7
  145. package/source/components/stylesheet/mixin/icon.mjs +16 -7
  146. package/source/components/stylesheet/mixin/media.mjs +16 -7
  147. package/source/components/stylesheet/mixin/property.mjs +16 -7
  148. package/source/components/stylesheet/mixin/skeleton.mjs +16 -7
  149. package/source/components/stylesheet/mixin/spinner.mjs +16 -7
  150. package/source/components/stylesheet/mixin/typography.mjs +16 -7
  151. package/source/components/stylesheet/normalize.mjs +16 -7
  152. package/source/components/stylesheet/popper.mjs +16 -7
  153. package/source/components/stylesheet/property.mjs +16 -7
  154. package/source/components/stylesheet/ripple.mjs +16 -7
  155. package/source/components/stylesheet/skeleton.mjs +16 -7
  156. package/source/components/stylesheet/space.mjs +16 -7
  157. package/source/components/stylesheet/spinner.mjs +16 -7
  158. package/source/components/stylesheet/table.mjs +16 -7
  159. package/source/components/stylesheet/theme.mjs +16 -7
  160. package/source/components/stylesheet/tree-menu.mjs +10 -3
  161. package/source/components/stylesheet/typography.mjs +16 -7
  162. package/source/components/tree-menu/stylesheet/tree-menu.mjs +16 -7
  163. package/source/components/tree-menu/tree-menu.mjs +19 -8
  164. package/source/constants.mjs +10 -6
  165. package/source/constraints/abstract.mjs +10 -3
  166. package/source/constraints/abstractoperator.mjs +10 -3
  167. package/source/constraints/andoperator.mjs +10 -3
  168. package/source/constraints/invalid.mjs +10 -3
  169. package/source/constraints/isarray.mjs +10 -3
  170. package/source/constraints/isobject.mjs +10 -3
  171. package/source/constraints/oroperator.mjs +10 -3
  172. package/source/constraints/valid.mjs +10 -3
  173. package/source/data/buildmap.mjs +10 -3
  174. package/source/data/buildtree.mjs +10 -3
  175. package/source/data/datasource/dom.mjs +95 -87
  176. package/source/data/datasource/server/restapi/data-fetch-error.mjs +10 -3
  177. package/source/data/datasource/server/restapi/writeerror.mjs +10 -3
  178. package/source/data/datasource/server/restapi.mjs +10 -3
  179. package/source/data/datasource/server/webconnect.mjs +10 -3
  180. package/source/data/datasource/server.mjs +10 -3
  181. package/source/data/datasource/storage/localstorage.mjs +10 -3
  182. package/source/data/datasource/storage/sessionstorage.mjs +10 -3
  183. package/source/data/datasource/storage.mjs +10 -3
  184. package/source/data/datasource.mjs +10 -3
  185. package/source/data/diff.mjs +10 -3
  186. package/source/data/extend.mjs +10 -3
  187. package/source/data/pathfinder.mjs +10 -3
  188. package/source/data/pipe.mjs +10 -3
  189. package/source/data/transformer.mjs +34 -10
  190. package/source/dom/assembler.mjs +10 -3
  191. package/source/dom/attributes.mjs +10 -3
  192. package/source/dom/constants.mjs +10 -3
  193. package/source/dom/customcontrol.mjs +11 -4
  194. package/source/dom/customelement.mjs +31 -17
  195. package/source/dom/dimension.mjs +10 -3
  196. package/source/dom/events.mjs +10 -3
  197. package/source/dom/focusmanager.mjs +10 -3
  198. package/source/dom/locale.mjs +10 -3
  199. package/source/dom/ready.mjs +2 -1
  200. package/source/dom/resource/data.mjs +133 -123
  201. package/source/dom/resource/link/stylesheet.mjs +10 -3
  202. package/source/dom/resource/link.mjs +10 -3
  203. package/source/dom/resource/script.mjs +10 -3
  204. package/source/dom/resource.mjs +10 -4
  205. package/source/dom/resourcemanager.mjs +10 -3
  206. package/source/dom/slotted.mjs +14 -0
  207. package/source/dom/template.mjs +124 -136
  208. package/source/dom/theme.mjs +10 -3
  209. package/source/dom/updater.mjs +10 -3
  210. package/source/dom/util/extract-keys.mjs +10 -3
  211. package/source/dom/util/init-options-from-attributes.mjs +68 -61
  212. package/source/dom/util/set-option-from-attribute.mjs +10 -3
  213. package/source/dom/util.mjs +11 -4
  214. package/source/dom/worker/factory.mjs +10 -3
  215. package/source/i18n/formatter.mjs +10 -3
  216. package/source/i18n/locale.mjs +10 -3
  217. package/source/i18n/provider.mjs +10 -3
  218. package/source/i18n/providers/embed.mjs +10 -3
  219. package/source/i18n/providers/fetch.mjs +10 -3
  220. package/source/i18n/translations.mjs +10 -3
  221. package/source/logging/handler/console.mjs +10 -3
  222. package/source/logging/handler.mjs +10 -3
  223. package/source/logging/logentry.mjs +10 -3
  224. package/source/logging/logger.mjs +10 -3
  225. package/source/math/random.mjs +10 -3
  226. package/source/monster.mjs +3 -9
  227. package/source/net/webconnect/message.mjs +10 -3
  228. package/source/net/webconnect.mjs +20 -5
  229. package/source/text/bracketed-key-value-hash.mjs +10 -3
  230. package/source/text/formatter.mjs +10 -3
  231. package/source/text/generate-range-comparison-expression.mjs +10 -3
  232. package/source/text/util.mjs +14 -0
  233. package/source/types/base.mjs +10 -3
  234. package/source/types/basewithoptions.mjs +10 -3
  235. package/source/types/binary.mjs +10 -3
  236. package/source/types/dataurl.mjs +10 -3
  237. package/source/types/global.mjs +14 -7
  238. package/source/types/id.mjs +10 -3
  239. package/source/types/internal.mjs +11 -3
  240. package/source/types/is.mjs +10 -3
  241. package/source/types/mediatype.mjs +10 -3
  242. package/source/types/node.mjs +10 -3
  243. package/source/types/nodelist.mjs +10 -3
  244. package/source/types/noderecursiveiterator.mjs +10 -3
  245. package/source/types/observablequeue.mjs +10 -3
  246. package/source/types/observer.mjs +10 -3
  247. package/source/types/observerlist.mjs +10 -3
  248. package/source/types/proxyobserver.mjs +10 -3
  249. package/source/types/queue.mjs +10 -3
  250. package/source/types/randomid.mjs +10 -3
  251. package/source/types/regex.mjs +10 -3
  252. package/source/types/stack.mjs +10 -3
  253. package/source/types/tokenlist.mjs +10 -3
  254. package/source/types/typeof.mjs +10 -3
  255. package/source/types/uniquequeue.mjs +10 -3
  256. package/source/types/uuid.mjs +10 -3
  257. package/source/types/validate.mjs +10 -3
  258. package/source/types/version.mjs +10 -3
  259. package/source/util/clone.mjs +10 -3
  260. package/source/util/comparator.mjs +10 -3
  261. package/source/util/deadmansswitch.mjs +10 -3
  262. package/source/util/freeze.mjs +10 -3
  263. package/source/util/processing.mjs +10 -3
  264. package/source/util/runtime.mjs +10 -7
  265. package/source/util/sleep.mjs +10 -10
  266. package/source/util/trimspaces.mjs +10 -3
  267. package/test/cases/data/datasource/server/websocket.mjs +7 -9
  268. package/test/cases/data/transformer.mjs +47 -15
  269. package/test/cases/dom/customcontrol.mjs +0 -1
  270. package/test/cases/dom/customelement.mjs +1 -3
  271. package/test/cases/dom/template.mjs +3 -1
  272. package/test/util/jsdom.mjs +8 -7
  273. package/test/util/websocket.mjs +5 -1
  274. package/test/web/import.js +2 -1
  275. package/test/web/puppeteer.mjs +111 -0
  276. package/test/web/test.html +2 -2
  277. package/test/web/tests.js +2036 -1189
  278. package/example/components/form/button.mjs +0 -10
  279. package/example/components/form/field-set.mjs +0 -4
  280. package/example/components/form/select.mjs +0 -25
  281. package/example/components/form/toggle-switch.mjs +0 -7
  282. package/example/components/form/tree-select.mjs +0 -27
  283. package/example/components/host/host.mjs +0 -0
  284. package/example/components/notify/message.mjs +0 -4
  285. package/example/components/notify/notify.mjs +0 -4
  286. package/example/components/state/log.mjs +0 -0
  287. package/example/components/state/state.mjs +0 -0
  288. package/example/constraints/andoperator.mjs +0 -17
  289. package/example/constraints/invalid.mjs +0 -6
  290. package/example/constraints/isarray.mjs +0 -11
  291. package/example/constraints/isobject.mjs +0 -12
  292. package/example/constraints/oroperator.mjs +0 -15
  293. package/example/constraints/valid.mjs +0 -6
  294. package/example/data/buildmap.mjs +0 -67
  295. package/example/data/datasource/server/restapi.mjs +0 -20
  296. package/example/data/datasource/server/webconnect.mjs +0 -9
  297. package/example/data/datasource.mjs +0 -7
  298. package/example/data/diff.mjs +0 -39
  299. package/example/data/pathfinder-1.mjs +0 -23
  300. package/example/data/pathfinder-2.mjs +0 -19
  301. package/example/data/pipe.mjs +0 -14
  302. package/example/data/transformer.mjs +0 -9
  303. package/example/dom/customelement.mjs +0 -14
  304. package/example/dom/theme.mjs +0 -5
  305. package/example/dom/updater.mjs +0 -23
  306. package/example/i18n/formatter.mjs +0 -10
  307. package/example/i18n/providers/embed.mjs +0 -5
  308. package/example/i18n/providers/fetch.mjs +0 -5
  309. package/example/i18n/translations.mjs +0 -20
  310. package/example/net/webconnect.mjs +0 -16
  311. package/example/types/basewithoptions.mjs +0 -10
  312. package/example/types/is-1.mjs +0 -5
  313. package/example/types/is-10.mjs +0 -6
  314. package/example/types/is-2.mjs +0 -4
  315. package/example/types/is-3.mjs +0 -4
  316. package/example/types/is-4.mjs +0 -5
  317. package/example/types/is-5.mjs +0 -4
  318. package/example/types/is-6.mjs +0 -4
  319. package/example/types/is-7.mjs +0 -4
  320. package/example/types/is-8.mjs +0 -4
  321. package/example/types/is-9.mjs +0 -6
  322. package/example/types/noderecursiveiterator.mjs +0 -32
  323. package/example/types/observer.mjs +0 -9
  324. package/example/types/proxyobserver.mjs +0 -25
  325. package/example/types/queue.mjs +0 -20
  326. package/example/types/tokenlist-1.mjs +0 -4
  327. package/example/types/tokenlist-2.mjs +0 -7
  328. package/example/types/tokenlist-3.mjs +0 -5
  329. package/example/types/tokenlist-4.mjs +0 -5
  330. package/example/types/tokenlist-5.mjs +0 -5
  331. package/example/types/typeof.mjs +0 -9
  332. package/example/types/version-1.mjs +0 -6
  333. package/example/types/version-2.mjs +0 -3
  334. package/example/util/comparator.mjs +0 -10
  335. package/example/util/deadmansswitch.mjs +0 -9
  336. package/example/util/processing.mjs +0 -17
  337. package/source/components/datatable/datasource/namespace.mjs +0 -13
  338. package/source/components/datatable/datatable/namespace.mjs +0 -13
  339. package/source/components/datatable/events.mjs +0 -24
  340. package/source/components/datatable/filter/namespace.mjs +0 -13
  341. package/source/components/datatable/namespace.mjs +0 -11
  342. package/source/components/datatable/stylesheet/namespace.mjs +0 -13
  343. package/source/components/events.mjs +0 -17
  344. package/source/components/form/events.mjs +0 -108
  345. package/source/components/form/namespace.mjs +0 -13
  346. package/source/components/form/stylesheet/namespace.mjs +0 -13
  347. package/source/components/form/types/namespace.mjs +0 -13
  348. package/source/components/form/util/namespace.mjs +0 -13
  349. package/source/components/host/events.mjs +0 -131
  350. package/source/components/host/namespace.mjs +0 -13
  351. package/source/components/host/stylesheet/namespace.mjs +0 -13
  352. package/source/components/layout/events.mjs +0 -30
  353. package/source/components/layout/namespace.mjs +0 -13
  354. package/source/components/namespace.mjs +0 -14
  355. package/source/components/notify/events.mjs +0 -15
  356. package/source/components/notify/namespace.mjs +0 -15
  357. package/source/components/notify/stylesheet/namespace.mjs +0 -15
  358. package/source/components/state/log/namespace.mjs +0 -13
  359. package/source/components/state/namespace.mjs +0 -13
  360. package/source/components/stylesheet/namespace.mjs +0 -13
  361. package/source/components/tree-menu/namespace.mjs +0 -13
  362. package/source/components/tree-menu/stylesheet/namespace.mjs +0 -13
  363. package/source/constraints/namespace.mjs +0 -13
  364. package/source/data/datasource/namespace.mjs +0 -13
  365. package/source/data/datasource/server/namespace.mjs +0 -13
  366. package/source/data/datasource/server/restapi/namespace.mjs +0 -13
  367. package/source/data/datasource/storage/namespace.mjs +0 -13
  368. package/source/data/namespace.mjs +0 -13
  369. package/source/dom/namespace.mjs +0 -13
  370. package/source/dom/resource/link/namespace.mjs +0 -13
  371. package/source/dom/resource/namespace.mjs +0 -13
  372. package/source/dom/util/namespace.mjs +0 -13
  373. package/source/dom/worker/namespace.mjs +0 -13
  374. package/source/i18n/namespace.mjs +0 -13
  375. package/source/i18n/providers/namespace.mjs +0 -13
  376. package/source/logging/handler/namespace.mjs +0 -11
  377. package/source/logging/namespace.mjs +0 -13
  378. package/source/math/namespace.mjs +0 -13
  379. package/source/net/namespace.mjs +0 -13
  380. package/source/net/webconnect/namespace.mjs +0 -13
  381. package/source/text/namespace.mjs +0 -13
  382. package/source/types/namespace.mjs +0 -13
  383. package/source/util/namespace.mjs +0 -13
@@ -8,27 +8,23 @@
8
8
  * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
9
9
  * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
10
10
  * For more information about purchasing a commercial license, please contact schukai GmbH.
11
+ *
12
+ * SPDX-License-Identifier: AGPL-3.0
11
13
  */
12
14
 
13
- import {instanceSymbol} from "../../constants.mjs";
14
- import {addAttributeToken} from "../../dom/attributes.mjs";
15
- import {
16
- ATTRIBUTE_ERRORMESSAGE,
17
- ATTRIBUTE_ROLE,
18
- } from "../../dom/constants.mjs";
19
- import {CustomElement} from "../../dom/customelement.mjs";
15
+ import { instanceSymbol } from "../../constants.mjs";
16
+ import { ATTRIBUTE_ROLE } from "../../dom/constants.mjs";
17
+ import { CustomElement } from "../../dom/customelement.mjs";
20
18
  import {
21
- assembleMethodSymbol,
22
- registerCustomElement,
19
+ assembleMethodSymbol,
20
+ registerCustomElement,
23
21
  } from "../../dom/customelement.mjs";
24
- import {findTargetElementFromEvent} from "../../dom/events.mjs";
25
- import {isFunction} from "../../types/is.mjs";
26
- import {TableOfContentStyleSheet} from "./stylesheet/table-of-content.mjs";
27
- import {fireCustomEvent} from "../../dom/events.mjs";
28
- import {getWindow} from "../../dom/util.mjs";
22
+ import { TableOfContentStyleSheet } from "./stylesheet/table-of-content.mjs";
23
+ import { fireCustomEvent } from "../../dom/events.mjs";
24
+ import { getWindow } from "../../dom/util.mjs";
29
25
  import "../layout/popper.mjs";
30
26
 
31
- export {TableOfContent};
27
+ export { TableOfContent };
32
28
 
33
29
  /**
34
30
  * @private
@@ -42,7 +38,6 @@ const tableOfContentElementSymbol = Symbol("tableOfContentElement");
42
38
  */
43
39
  const navigationElementSymbol = Symbol("navigation");
44
40
 
45
-
46
41
  /**
47
42
  * @private
48
43
  * @type {symbol}
@@ -80,173 +75,262 @@ const scrollableEventHandlerSymbol = Symbol("scrollableEventHandler");
80
75
  *
81
76
  * @example /examples/components/form/table-of-content-simple
82
77
  *
83
- * @since 3.66.0
78
+ * @since 3.65.0
84
79
  * @copyright schukai GmbH
85
80
  * @summary A beautiful TableOfContent that can make your life easier and also looks good.
81
+ * @fires new-top The new top position
86
82
  */
87
83
  class TableOfContent extends CustomElement {
88
- /**
89
- * This method is called by the `instanceof` operator.
90
- * @returns {symbol}
91
- */
92
- static get [instanceSymbol]() {
93
- return Symbol.for("@schukai/monster/components/navigation/table-of-content@@instance");
94
- }
95
-
96
- /**
97
- *
98
- * @return {Components.Navigation.TableOfContent
99
- */
100
- [assembleMethodSymbol]() {
101
- super[assembleMethodSymbol]();
102
- initControlReferences.call(this);
103
- initEventHandler.call(this);
104
- return this;
105
- }
106
-
107
- /**
108
- * To set the options via the html tag the attribute `data-monster-options` must be used.
109
- * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
110
- *
111
- * The individual configuration values can be found in the table.
112
- *
113
- * @property {Object} templates Template definitions
114
- * @property {string} templates.main Main template
115
- * @property {Object} labels Label definitions
116
- * @property {Object} actions Callbacks
117
- * @property {string} actions.click="throw Error" Callback when clicked
118
- * @property {Object} features Features
119
- * @property {number} offset=100 Navigation offset from top
120
- * @property {Object} classes CSS classes
121
- * @property {boolean} disabled=false Disabled state
122
- */
123
- get defaults() {
124
- return Object.assign({}, super.defaults, {
125
- templates: {
126
- main: getTemplate(),
127
- },
128
- labels: {},
129
- classes: {},
130
- disabled: false,
131
- features: {},
132
- offset: 100,
133
- actions: {
134
- click: () => {
135
- throw new Error("the click action is not defined");
136
- },
137
- }
138
- });
139
- }
140
-
141
- /**
142
- * @return {void}
143
- */
144
- connectedCallback() {
145
- super.connectedCallback();
146
-
147
- initNavigation.call(this);
148
-
149
- setTimeout(() => {
150
-
151
- this[scrollableParentSymbol] = findScrollableParent(this);
152
-
153
- if (this[scrollableParentSymbol] === getWindow()) {
154
- this[scrollableParentSymbol].addEventListener('scroll', this[windowEventHandlerSymbol]);
155
- calcAndSetNavigationTopWindowContext.call(this);
156
- } else {
157
- this[scrollableParentSymbol].addEventListener('scroll', this[scrollableEventHandlerSymbol]);
158
- calcAndSetNavigationTopScrollableParentContext.call(this);
159
- }
160
- }, 100);
161
- }
162
-
163
- /**
164
- * @return {void}
165
- */
166
- disconnectedCallback() {
167
- super.disconnectedCallback();
168
-
169
- if (this[scrollableParentSymbol] === getWindow()) {
170
- this[scrollableParentSymbol].removeEventListener('scroll', this[windowEventHandlerSymbol]);
171
- } else {
172
- this[scrollableParentSymbol].removeEventListener('scroll', this[scrollableEventHandlerSymbol]);
173
- }
174
- }
175
-
176
- /**
177
- * @return {string}
178
- */
179
- static getTag() {
180
- return "monster-table-of-content";
181
- }
182
-
183
- /**
184
- * @return {CSSStyleSheet[]}
185
- */
186
- static getCSSStyleSheet() {
187
- return [TableOfContentStyleSheet];
188
- }
189
-
190
-
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
+ }
191
214
  }
192
215
 
193
216
  /**
194
217
  * @private
218
+ * @return {void}
219
+ * @fires new-top - The new top position
195
220
  */
196
221
  function calcAndSetNavigationTopWindowContext() {
222
+ const thisTop = this.getBoundingClientRect().top;
223
+ const topViewport = window.scrollY;
224
+ let top = Math.max(topViewport, thisTop);
197
225
 
198
- const thisTop = this.getBoundingClientRect().top;
199
- const topViewport = window.scrollY;
200
- let top = Math.max(topViewport, thisTop);
226
+ const offset = this.getOption("offset");
227
+ if (offset > 0) {
228
+ top += offset;
229
+ }
201
230
 
202
- const offset = this.getOption('offset');
203
- if (offset > 0) {
204
- top += offset;
205
- }
206
- this[navigationElementSymbol].style.top = top + "px";
231
+ fireCustomEvent(this, "new-top", { top: top });
232
+
233
+ this[navigationElementSymbol].style.top = top + "px";
207
234
  }
208
235
 
209
236
  /**
210
237
  * @private
238
+ * @return {void}
239
+ * @fires new-top - The new top position
211
240
  */
212
241
  function calcAndSetNavigationTopScrollableParentContext() {
213
-
214
- const windowTop = getWindow().scrollY;
215
- const thisRect = this.getBoundingClientRect();
216
- const thisTop = thisRect.top;
217
- const thisBottom = thisRect.bottom;
218
- const scrollTop = this[scrollableParentSymbol].scrollTop;
219
- let top = windowTop + thisTop + scrollTop;
220
-
221
- if (thisBottom < top) {
222
- top = thisBottom;
223
- this[navigationElementSymbol].style.visibility = "hidden";
224
- } else {
225
- this[navigationElementSymbol].style.visibility = "visible";
226
- }
227
- const offset = this.getOption('offset');
228
- if (offset > 0) {
229
- top += offset;
230
- }
231
-
232
- this[navigationElementSymbol].style.top = top + "px";
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";
233
266
  }
234
267
 
235
268
  /**
236
269
  * @private
237
270
  */
238
271
  function initNavigation() {
239
-
240
- const headings = getHeadings.call(this);
241
-
242
- for (const heading of headings) {
243
- const div = document.createElement('div');
244
- div.classList.add('heading-strip');
245
- div.classList.add('level-' + heading.tagName.toLowerCase());
246
- this[navigationControlElementSymbol].appendChild(div);
247
- }
248
-
249
- this[navigationListElementSymbol].appendChild(createListFromHeadings.call(this, headings).sublist);
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
+ }
250
334
  }
251
335
 
252
336
  /**
@@ -256,44 +340,54 @@ function initNavigation() {
256
340
  * @returns {{sublist: HTMLUListElement, lastIndex: number}} An object containing the sublist and the index of the last processed element.
257
341
  */
258
342
  function createListFromHeadings(nodeList, currentLevel = 1) {
259
- const self = this;
260
- let ul = document.createElement('ul');
261
- let i = 0;
262
-
263
- while (i < nodeList.length) {
264
- const node = nodeList[i];
265
- const level = parseInt(node.tagName.substring(1));
266
-
267
- if (level === currentLevel) {
268
- const li = document.createElement('li');
269
- li.textContent = node.textContent;
270
-
271
- li.addEventListener('click', (e) => {
272
- e.stopPropagation();
273
- getWindow().requestAnimationFrame(() => {
274
- window.scrollTo(0, 0);
275
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
276
- // mostly supported
277
- node?.scrollIntoView({behavior: "smooth"});
278
- });
279
- });
280
-
281
- ul.appendChild(li);
282
- i++;
283
- } else if (level > currentLevel) {
284
- if (ul.lastChild) {
285
- const {sublist, lastIndex} = createListFromHeadings.call(self, nodeList.slice(i), level);
286
- ul.lastChild.appendChild(sublist);
287
- i += lastIndex;
288
- } else {
289
- throw new Error("Heading structure error: higher level heading without a preceding lower level heading.");
290
- }
291
- } else {
292
- break;
293
- }
294
- }
295
-
296
- return {sublist: ul, lastIndex: i};
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 };
297
391
  }
298
392
 
299
393
  /**
@@ -301,57 +395,93 @@ function createListFromHeadings(nodeList, currentLevel = 1) {
301
395
  * @returns {*[]}
302
396
  */
303
397
  function getHeadings() {
304
- const allHeadings = [];
305
-
306
- const slots = this.shadowRoot.querySelectorAll('slot');
307
-
308
- slots.forEach(slot => {
309
- const slottedElements = slot.assignedElements();
310
- slottedElements.forEach(element => {
311
- if (element instanceof HTMLHeadingElement) {
312
- allHeadings.push(element);
313
- return;
314
- }
315
-
316
- const headings = element.querySelectorAll("h1, h2, h3, h4, h5, h6");
317
- let nodeList = Array.from(headings);
318
- allHeadings.push(...nodeList);
319
- });
320
- });
321
- return allHeadings;
322
- }
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
+ });
323
418
 
419
+ allHeadings.push(...nodeList);
420
+ });
421
+ });
422
+
423
+ return allHeadings;
424
+ }
324
425
 
325
426
  /**
326
427
  * @private
327
428
  * @return {initEventHandler}
328
429
  */
329
430
  function initEventHandler() {
330
-
331
- const self = this;
332
- let ticking = false;
333
-
334
- this[windowEventHandlerSymbol] = function () {
335
- if (!ticking) {
336
- getWindow().requestAnimationFrame(() => {
337
- calcAndSetNavigationTopWindowContext.call(self);
338
- ticking = false;
339
- });
340
- ticking = true;
341
- }
342
- }
343
-
344
- this[scrollableEventHandlerSymbol] = function () {
345
- if (!ticking) {
346
- getWindow().requestAnimationFrame(() => {
347
- calcAndSetNavigationTopScrollableParentContext.call(self);
348
- ticking = false;
349
- });
350
- ticking = true;
351
- }
352
- }
353
-
354
- return this;
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;
355
485
  }
356
486
 
357
487
  /**
@@ -360,16 +490,15 @@ function initEventHandler() {
360
490
  * @return {HTMLElement|Window}
361
491
  */
362
492
  function findScrollableParent(element) {
363
-
364
- let parent = element.parentElement;
365
- while (parent) {
366
- const overflowY = getWindow().getComputedStyle(parent).overflowY;
367
- if (overflowY === 'scroll' || overflowY === 'auto') {
368
- return parent;
369
- }
370
- parent = parent.parentElement;
371
- }
372
- return getWindow();
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();
373
502
  }
374
503
 
375
504
  /**
@@ -377,21 +506,21 @@ function findScrollableParent(element) {
377
506
  * @return {void}
378
507
  */
379
508
  function initControlReferences() {
380
- this[tableOfContentElementSymbol] = this.shadowRoot.querySelector(
381
- `[${ATTRIBUTE_ROLE}="control"]`,
382
- );
509
+ this[tableOfContentElementSymbol] = this.shadowRoot.querySelector(
510
+ `[${ATTRIBUTE_ROLE}="control"]`,
511
+ );
383
512
 
384
- this[navigationElementSymbol] = this.shadowRoot.querySelector(
385
- `[${ATTRIBUTE_ROLE}="navigation"]`,
386
- );
513
+ this[navigationElementSymbol] = this.shadowRoot.querySelector(
514
+ `[${ATTRIBUTE_ROLE}="navigation"]`,
515
+ );
387
516
 
388
- this[navigationControlElementSymbol] = this.shadowRoot.querySelector(
389
- `[${ATTRIBUTE_ROLE}="navigation-control"]`,
390
- );
517
+ this[navigationControlElementSymbol] = this.shadowRoot.querySelector(
518
+ `[${ATTRIBUTE_ROLE}="navigation-control"]`,
519
+ );
391
520
 
392
- this[navigationListElementSymbol] = this.shadowRoot.querySelector(
393
- `[${ATTRIBUTE_ROLE}="navigation-list"]`,
394
- );
521
+ this[navigationListElementSymbol] = this.shadowRoot.querySelector(
522
+ `[${ATTRIBUTE_ROLE}="navigation-list"]`,
523
+ );
395
524
  }
396
525
 
397
526
  /**
@@ -399,8 +528,8 @@ function initControlReferences() {
399
528
  * @return {string}
400
529
  */
401
530
  function getTemplate() {
402
- // language=HTML
403
- return `
531
+ // language=HTML
532
+ return `
404
533
  <div data-monster-role="control" part="control">
405
534
  <div class="navigation" data-monster-role="navigation">
406
535
  <monster-popper data-monster-option-mode="enter">
@@ -414,5 +543,4 @@ function getTemplate() {
414
543
  </div>`;
415
544
  }
416
545
 
417
-
418
546
  registerCustomElement(TableOfContent);