@schukai/monster 3.64.1 → 3.65.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (395) hide show
  1. package/CHANGELOG.md +92 -318
  2. package/README.md +44 -40
  3. package/package.json +1 -47
  4. package/source/components/constants.mjs +10 -3
  5. package/source/components/datatable/change-button.mjs +12 -5
  6. package/source/components/datatable/columnbar.mjs +10 -1
  7. package/source/components/datatable/constants.mjs +11 -4
  8. package/source/components/datatable/dataset.mjs +10 -1
  9. package/source/components/datatable/datasource/dom.mjs +14 -1
  10. package/source/components/datatable/datasource/rest.mjs +10 -1
  11. package/source/components/datatable/datasource.mjs +10 -1
  12. package/source/components/datatable/datatable/header.mjs +12 -3
  13. package/source/components/datatable/datatable.mjs +757 -752
  14. package/source/components/datatable/embedded-pagination.mjs +10 -1
  15. package/source/components/datatable/filter/abstract-base.mjs +10 -1
  16. package/source/components/datatable/filter/date-range.mjs +10 -1
  17. package/source/components/datatable/filter/input.mjs +10 -1
  18. package/source/components/datatable/filter/range.mjs +10 -1
  19. package/source/components/datatable/filter/select.mjs +11 -4
  20. package/source/components/datatable/filter/settings.mjs +14 -0
  21. package/source/components/datatable/filter/util.mjs +14 -0
  22. package/source/components/datatable/filter-button.mjs +10 -1
  23. package/source/components/datatable/filter.mjs +11 -3
  24. package/source/components/datatable/pagination.mjs +14 -5
  25. package/source/components/datatable/save-button.mjs +279 -270
  26. package/source/components/datatable/status.mjs +10 -1
  27. package/source/components/datatable/style/dataset.pcss +1 -0
  28. package/source/components/datatable/style/datatable.pcss +1 -0
  29. package/source/components/datatable/stylesheet/change-button.mjs +16 -7
  30. package/source/components/datatable/stylesheet/column-bar.mjs +16 -7
  31. package/source/components/datatable/stylesheet/dataset.mjs +17 -8
  32. package/source/components/datatable/stylesheet/datasource.mjs +16 -7
  33. package/source/components/datatable/stylesheet/datatable.mjs +17 -8
  34. package/source/components/datatable/stylesheet/embedded-pagination.mjs +16 -7
  35. package/source/components/datatable/stylesheet/filter-button.mjs +16 -7
  36. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +16 -7
  37. package/source/components/datatable/stylesheet/filter-date-range.mjs +16 -7
  38. package/source/components/datatable/stylesheet/filter-range.mjs +16 -7
  39. package/source/components/datatable/stylesheet/filter.mjs +16 -7
  40. package/source/components/datatable/stylesheet/pagination.mjs +16 -7
  41. package/source/components/datatable/stylesheet/save-button.mjs +16 -7
  42. package/source/components/datatable/stylesheet/select-filter.mjs +16 -7
  43. package/source/components/datatable/stylesheet/status.mjs +16 -7
  44. package/source/components/datatable/util.mjs +16 -8
  45. package/source/components/form/action-button.mjs +11 -3
  46. package/source/components/form/api-button.mjs +11 -3
  47. package/source/components/form/button-bar.mjs +11 -3
  48. package/source/components/form/button.mjs +37 -50
  49. package/source/components/form/confirm-button.mjs +11 -3
  50. package/source/components/form/constants.mjs +10 -3
  51. package/source/components/form/context-error.mjs +69 -52
  52. package/source/components/form/context-help.mjs +11 -3
  53. package/source/components/form/field-set.mjs +295 -0
  54. package/source/components/form/form.mjs +12 -4
  55. package/source/components/form/message-state-button.mjs +11 -3
  56. package/source/components/form/popper-button.mjs +11 -3
  57. package/source/components/form/popper.mjs +13 -480
  58. package/source/components/form/reload.mjs +12 -4
  59. package/source/components/form/select.mjs +44 -33
  60. package/source/components/form/shadow-reload.mjs +11 -3
  61. package/source/components/form/state-button.mjs +11 -3
  62. package/source/components/form/style/field-set.pcss +13 -0
  63. package/source/components/form/stylesheet/action-button.mjs +16 -7
  64. package/source/components/form/stylesheet/api-button.mjs +16 -7
  65. package/source/components/form/stylesheet/button-bar.mjs +17 -8
  66. package/source/components/form/stylesheet/button.mjs +16 -7
  67. package/source/components/form/stylesheet/confirm-button.mjs +17 -8
  68. package/source/components/form/stylesheet/context-error.mjs +16 -7
  69. package/source/components/form/stylesheet/context-help.mjs +16 -7
  70. package/source/components/form/stylesheet/field-set.mjs +40 -0
  71. package/source/components/form/stylesheet/form.mjs +17 -8
  72. package/source/components/form/stylesheet/message-state-button.mjs +16 -7
  73. package/source/components/form/stylesheet/popper-button.mjs +16 -7
  74. package/source/components/form/stylesheet/select.mjs +16 -7
  75. package/source/components/form/stylesheet/state-button.mjs +16 -7
  76. package/source/components/form/stylesheet/toggle-switch.mjs +16 -7
  77. package/source/components/form/stylesheet/tree-select.mjs +16 -7
  78. package/source/components/form/tabs.mjs +12 -8
  79. package/source/components/form/template.mjs +11 -3
  80. package/source/components/form/toggle-switch.mjs +12 -8
  81. package/source/components/form/tree-select.mjs +10 -3
  82. package/source/components/form/types/state.mjs +10 -3
  83. package/source/components/form/util/fetch.mjs +10 -3
  84. package/source/components/form/util/floating-ui.mjs +10 -3
  85. package/source/components/form/util/popper.mjs +10 -3
  86. package/source/components/host/call-button.mjs +10 -1
  87. package/source/components/host/collapse.mjs +15 -519
  88. package/source/components/host/config-manager.mjs +10 -1
  89. package/source/components/host/constants.mjs +11 -4
  90. package/source/components/host/details.mjs +14 -256
  91. package/source/components/host/host.mjs +10 -1
  92. package/source/components/host/overlay.mjs +10 -1
  93. package/source/components/host/stylesheet/call-button.mjs +16 -7
  94. package/source/components/host/stylesheet/config-manager.mjs +16 -7
  95. package/source/components/host/stylesheet/host.mjs +17 -8
  96. package/source/components/host/stylesheet/overlay.mjs +17 -8
  97. package/source/components/host/stylesheet/toggle-button.mjs +16 -7
  98. package/source/components/host/stylesheet/viewer.mjs +16 -7
  99. package/source/components/host/toggle-button.mjs +10 -1
  100. package/source/components/host/util.mjs +14 -0
  101. package/source/components/host/viewer.mjs +10 -1
  102. package/source/components/layout/collapse.mjs +543 -0
  103. package/source/components/layout/details.mjs +273 -0
  104. package/source/components/layout/panel.mjs +179 -169
  105. package/source/components/layout/popper.mjs +480 -0
  106. package/source/components/layout/split-panel.mjs +329 -303
  107. package/source/components/{host → layout}/stylesheet/collapse.mjs +16 -7
  108. package/source/components/{host → layout}/stylesheet/details.mjs +16 -7
  109. package/source/components/layout/stylesheet/panel.mjs +16 -7
  110. package/source/components/{form → layout}/stylesheet/popper.mjs +16 -7
  111. package/source/components/layout/stylesheet/split-panel.mjs +16 -7
  112. package/source/components/layout/stylesheet/tabs.mjs +16 -7
  113. package/source/components/layout/stylesheet/width-toggle.mjs +16 -7
  114. package/source/components/layout/tabs.mjs +38 -23
  115. package/source/components/layout/width-toggle.mjs +150 -140
  116. package/source/components/navigation/style/table-of-content.pcss +99 -0
  117. package/source/components/navigation/stylesheet/table-of-content.mjs +40 -0
  118. package/source/components/navigation/table-of-content.mjs +546 -0
  119. package/source/components/notify/constants.mjs +10 -3
  120. package/source/components/notify/message.mjs +16 -9
  121. package/source/components/notify/notify.mjs +11 -4
  122. package/source/components/notify/stylesheet/message.mjs +16 -7
  123. package/source/components/notify/stylesheet/notify.mjs +16 -7
  124. package/source/components/state/log/entry.mjs +10 -1
  125. package/source/components/state/log.mjs +10 -1
  126. package/source/components/state/state.mjs +10 -1
  127. package/source/components/state/stylesheet/log.mjs +16 -7
  128. package/source/components/state/stylesheet/state.mjs +17 -8
  129. package/source/components/style/link.pcss +0 -1
  130. package/source/components/style/mixin/form.pcss +0 -1
  131. package/source/components/style/mixin/typography.pcss +7 -7
  132. package/source/components/style/typography.pcss +1 -1
  133. package/source/components/stylesheet/badge.mjs +16 -7
  134. package/source/components/stylesheet/border.mjs +16 -7
  135. package/source/components/stylesheet/button.mjs +16 -7
  136. package/source/components/stylesheet/card.mjs +16 -7
  137. package/source/components/stylesheet/color.mjs +16 -7
  138. package/source/components/stylesheet/common.mjs +16 -7
  139. package/source/components/stylesheet/control.mjs +16 -7
  140. package/source/components/stylesheet/data-grid.mjs +16 -7
  141. package/source/components/stylesheet/display.mjs +16 -7
  142. package/source/components/stylesheet/floating-ui.mjs +16 -7
  143. package/source/components/stylesheet/form.mjs +16 -7
  144. package/source/components/stylesheet/host.mjs +16 -7
  145. package/source/components/stylesheet/icons.mjs +16 -7
  146. package/source/components/stylesheet/link.mjs +16 -7
  147. package/source/components/stylesheet/mixin/badge.mjs +16 -7
  148. package/source/components/stylesheet/mixin/button.mjs +16 -7
  149. package/source/components/stylesheet/mixin/form.mjs +16 -7
  150. package/source/components/stylesheet/mixin/hover.mjs +16 -7
  151. package/source/components/stylesheet/mixin/icon.mjs +16 -7
  152. package/source/components/stylesheet/mixin/media.mjs +16 -7
  153. package/source/components/stylesheet/mixin/property.mjs +16 -7
  154. package/source/components/stylesheet/mixin/skeleton.mjs +16 -7
  155. package/source/components/stylesheet/mixin/spinner.mjs +16 -7
  156. package/source/components/stylesheet/mixin/typography.mjs +16 -7
  157. package/source/components/stylesheet/normalize.mjs +16 -7
  158. package/source/components/stylesheet/popper.mjs +16 -7
  159. package/source/components/stylesheet/property.mjs +16 -7
  160. package/source/components/stylesheet/ripple.mjs +16 -7
  161. package/source/components/stylesheet/skeleton.mjs +16 -7
  162. package/source/components/stylesheet/space.mjs +16 -7
  163. package/source/components/stylesheet/spinner.mjs +16 -7
  164. package/source/components/stylesheet/table.mjs +16 -7
  165. package/source/components/stylesheet/theme.mjs +16 -7
  166. package/source/components/stylesheet/tree-menu.mjs +10 -3
  167. package/source/components/stylesheet/typography.mjs +17 -8
  168. package/source/components/tree-menu/stylesheet/tree-menu.mjs +16 -7
  169. package/source/components/tree-menu/tree-menu.mjs +19 -8
  170. package/source/constants.mjs +10 -6
  171. package/source/constraints/abstract.mjs +10 -3
  172. package/source/constraints/abstractoperator.mjs +10 -3
  173. package/source/constraints/andoperator.mjs +10 -3
  174. package/source/constraints/invalid.mjs +10 -3
  175. package/source/constraints/isarray.mjs +10 -3
  176. package/source/constraints/isobject.mjs +10 -3
  177. package/source/constraints/oroperator.mjs +10 -3
  178. package/source/constraints/valid.mjs +10 -3
  179. package/source/data/buildmap.mjs +10 -3
  180. package/source/data/buildtree.mjs +10 -3
  181. package/source/data/datasource/dom.mjs +10 -3
  182. package/source/data/datasource/server/restapi/data-fetch-error.mjs +10 -3
  183. package/source/data/datasource/server/restapi/writeerror.mjs +10 -3
  184. package/source/data/datasource/server/restapi.mjs +10 -3
  185. package/source/data/datasource/server/webconnect.mjs +10 -3
  186. package/source/data/datasource/server.mjs +10 -3
  187. package/source/data/datasource/storage/localstorage.mjs +10 -3
  188. package/source/data/datasource/storage/sessionstorage.mjs +10 -3
  189. package/source/data/datasource/storage.mjs +10 -3
  190. package/source/data/datasource.mjs +10 -3
  191. package/source/data/diff.mjs +10 -3
  192. package/source/data/extend.mjs +10 -3
  193. package/source/data/pathfinder.mjs +10 -3
  194. package/source/data/pipe.mjs +10 -3
  195. package/source/data/transformer.mjs +34 -10
  196. package/source/dom/assembler.mjs +10 -3
  197. package/source/dom/attributes.mjs +10 -3
  198. package/source/dom/constants.mjs +10 -3
  199. package/source/dom/customcontrol.mjs +11 -4
  200. package/source/dom/customelement.mjs +31 -17
  201. package/source/dom/dimension.mjs +10 -3
  202. package/source/dom/events.mjs +10 -3
  203. package/source/dom/focusmanager.mjs +10 -3
  204. package/source/dom/locale.mjs +10 -3
  205. package/source/dom/ready.mjs +11 -4
  206. package/source/dom/resource/data.mjs +10 -3
  207. package/source/dom/resource/link/stylesheet.mjs +10 -3
  208. package/source/dom/resource/link.mjs +10 -3
  209. package/source/dom/resource/script.mjs +10 -3
  210. package/source/dom/resource.mjs +10 -3
  211. package/source/dom/resourcemanager.mjs +10 -3
  212. package/source/dom/slotted.mjs +14 -0
  213. package/source/dom/template.mjs +124 -136
  214. package/source/dom/theme.mjs +10 -3
  215. package/source/dom/updater.mjs +10 -3
  216. package/source/dom/util/extract-keys.mjs +10 -3
  217. package/source/dom/util/init-options-from-attributes.mjs +68 -61
  218. package/source/dom/util/set-option-from-attribute.mjs +10 -3
  219. package/source/dom/util.mjs +11 -4
  220. package/source/dom/worker/factory.mjs +10 -3
  221. package/source/i18n/formatter.mjs +10 -3
  222. package/source/i18n/locale.mjs +10 -3
  223. package/source/i18n/provider.mjs +10 -3
  224. package/source/i18n/providers/embed.mjs +10 -3
  225. package/source/i18n/providers/fetch.mjs +10 -3
  226. package/source/i18n/translations.mjs +10 -3
  227. package/source/logging/handler/console.mjs +10 -3
  228. package/source/logging/handler.mjs +10 -3
  229. package/source/logging/logentry.mjs +10 -3
  230. package/source/logging/logger.mjs +10 -3
  231. package/source/math/random.mjs +10 -3
  232. package/source/monster.mjs +8 -93
  233. package/source/net/webconnect/message.mjs +10 -3
  234. package/source/net/webconnect.mjs +20 -5
  235. package/source/text/bracketed-key-value-hash.mjs +10 -3
  236. package/source/text/formatter.mjs +10 -3
  237. package/source/text/generate-range-comparison-expression.mjs +10 -3
  238. package/source/text/util.mjs +14 -0
  239. package/source/types/base.mjs +10 -3
  240. package/source/types/basewithoptions.mjs +10 -3
  241. package/source/types/binary.mjs +10 -3
  242. package/source/types/dataurl.mjs +10 -3
  243. package/source/types/global.mjs +14 -7
  244. package/source/types/id.mjs +10 -3
  245. package/source/types/internal.mjs +11 -3
  246. package/source/types/is.mjs +10 -3
  247. package/source/types/mediatype.mjs +10 -3
  248. package/source/types/node.mjs +10 -3
  249. package/source/types/nodelist.mjs +10 -3
  250. package/source/types/noderecursiveiterator.mjs +10 -3
  251. package/source/types/observablequeue.mjs +10 -3
  252. package/source/types/observer.mjs +10 -3
  253. package/source/types/observerlist.mjs +10 -3
  254. package/source/types/proxyobserver.mjs +14 -5
  255. package/source/types/queue.mjs +10 -3
  256. package/source/types/randomid.mjs +10 -3
  257. package/source/types/regex.mjs +10 -3
  258. package/source/types/stack.mjs +10 -3
  259. package/source/types/tokenlist.mjs +10 -3
  260. package/source/types/typeof.mjs +10 -3
  261. package/source/types/uniquequeue.mjs +10 -3
  262. package/source/types/uuid.mjs +10 -3
  263. package/source/types/validate.mjs +10 -3
  264. package/source/types/version.mjs +11 -4
  265. package/source/util/clone.mjs +10 -3
  266. package/source/util/comparator.mjs +10 -3
  267. package/source/util/deadmansswitch.mjs +10 -3
  268. package/source/util/freeze.mjs +10 -3
  269. package/source/util/processing.mjs +10 -3
  270. package/source/util/runtime.mjs +10 -7
  271. package/source/util/sleep.mjs +10 -10
  272. package/source/util/trimspaces.mjs +10 -3
  273. package/test/cases/data/datasource/server/websocket.mjs +7 -9
  274. package/test/cases/data/transformer.mjs +47 -15
  275. package/test/cases/dom/customcontrol.mjs +0 -1
  276. package/test/cases/dom/customelement.mjs +1 -3
  277. package/test/cases/dom/template.mjs +3 -1
  278. package/test/cases/monster.mjs +1 -1
  279. package/test/util/jsdom.mjs +8 -7
  280. package/test/util/websocket.mjs +5 -1
  281. package/test/web/import.js +2 -1
  282. package/test/web/puppeteer.mjs +111 -0
  283. package/test/web/test.html +2 -2
  284. package/test/web/tests.js +2039 -1192
  285. package/example/components/form/button.mjs +0 -10
  286. package/example/components/form/select.mjs +0 -25
  287. package/example/components/form/toggle-switch.mjs +0 -7
  288. package/example/components/form/tree-select.mjs +0 -27
  289. package/example/components/host/host.mjs +0 -0
  290. package/example/components/notify/message.mjs +0 -4
  291. package/example/components/notify/notify.mjs +0 -4
  292. package/example/components/state/log.mjs +0 -0
  293. package/example/components/state/state.mjs +0 -0
  294. package/example/constraints/andoperator.mjs +0 -17
  295. package/example/constraints/invalid.mjs +0 -6
  296. package/example/constraints/isarray.mjs +0 -11
  297. package/example/constraints/isobject.mjs +0 -12
  298. package/example/constraints/oroperator.mjs +0 -15
  299. package/example/constraints/valid.mjs +0 -6
  300. package/example/data/buildmap.mjs +0 -67
  301. package/example/data/datasource/server/restapi.mjs +0 -20
  302. package/example/data/datasource/server/webconnect.mjs +0 -9
  303. package/example/data/datasource.mjs +0 -7
  304. package/example/data/diff.mjs +0 -39
  305. package/example/data/pathfinder-1.mjs +0 -23
  306. package/example/data/pathfinder-2.mjs +0 -19
  307. package/example/data/pipe.mjs +0 -14
  308. package/example/data/transformer.mjs +0 -9
  309. package/example/dom/customelement.mjs +0 -14
  310. package/example/dom/theme.mjs +0 -5
  311. package/example/dom/updater.mjs +0 -23
  312. package/example/i18n/formatter.mjs +0 -10
  313. package/example/i18n/providers/embed.mjs +0 -5
  314. package/example/i18n/providers/fetch.mjs +0 -5
  315. package/example/i18n/translations.mjs +0 -20
  316. package/example/net/webconnect.mjs +0 -16
  317. package/example/types/basewithoptions.mjs +0 -10
  318. package/example/types/is-1.mjs +0 -5
  319. package/example/types/is-10.mjs +0 -6
  320. package/example/types/is-2.mjs +0 -4
  321. package/example/types/is-3.mjs +0 -4
  322. package/example/types/is-4.mjs +0 -5
  323. package/example/types/is-5.mjs +0 -4
  324. package/example/types/is-6.mjs +0 -4
  325. package/example/types/is-7.mjs +0 -4
  326. package/example/types/is-8.mjs +0 -4
  327. package/example/types/is-9.mjs +0 -6
  328. package/example/types/noderecursiveiterator.mjs +0 -32
  329. package/example/types/observer.mjs +0 -9
  330. package/example/types/proxyobserver.mjs +0 -25
  331. package/example/types/queue.mjs +0 -20
  332. package/example/types/tokenlist-1.mjs +0 -4
  333. package/example/types/tokenlist-2.mjs +0 -7
  334. package/example/types/tokenlist-3.mjs +0 -5
  335. package/example/types/tokenlist-4.mjs +0 -5
  336. package/example/types/tokenlist-5.mjs +0 -5
  337. package/example/types/typeof.mjs +0 -9
  338. package/example/types/version-1.mjs +0 -6
  339. package/example/types/version-2.mjs +0 -3
  340. package/example/util/comparator.mjs +0 -10
  341. package/example/util/deadmansswitch.mjs +0 -9
  342. package/example/util/processing.mjs +0 -17
  343. package/source/components/datatable/datasource/namespace.mjs +0 -13
  344. package/source/components/datatable/datatable/namespace.mjs +0 -13
  345. package/source/components/datatable/events.mjs +0 -24
  346. package/source/components/datatable/filter/namespace.mjs +0 -13
  347. package/source/components/datatable/namespace.mjs +0 -11
  348. package/source/components/datatable/stylesheet/namespace.mjs +0 -13
  349. package/source/components/events.mjs +0 -17
  350. package/source/components/form/events.mjs +0 -108
  351. package/source/components/form/form-field.mjs +0 -341
  352. package/source/components/form/namespace.mjs +0 -13
  353. package/source/components/form/style/form-field.pcss +0 -4
  354. package/source/components/form/stylesheet/form-field.mjs +0 -31
  355. package/source/components/form/stylesheet/namespace.mjs +0 -13
  356. package/source/components/form/types/namespace.mjs +0 -13
  357. package/source/components/form/util/namespace.mjs +0 -13
  358. package/source/components/host/events.mjs +0 -131
  359. package/source/components/host/namespace.mjs +0 -13
  360. package/source/components/host/stylesheet/namespace.mjs +0 -13
  361. package/source/components/layout/events.mjs +0 -30
  362. package/source/components/layout/namespace.mjs +0 -13
  363. package/source/components/namespace.mjs +0 -14
  364. package/source/components/notify/events.mjs +0 -15
  365. package/source/components/notify/namespace.mjs +0 -15
  366. package/source/components/notify/stylesheet/namespace.mjs +0 -15
  367. package/source/components/state/log/namespace.mjs +0 -13
  368. package/source/components/state/namespace.mjs +0 -13
  369. package/source/components/stylesheet/namespace.mjs +0 -13
  370. package/source/components/tree-menu/namespace.mjs +0 -13
  371. package/source/components/tree-menu/stylesheet/namespace.mjs +0 -13
  372. package/source/constraints/namespace.mjs +0 -13
  373. package/source/data/datasource/namespace.mjs +0 -13
  374. package/source/data/datasource/server/namespace.mjs +0 -13
  375. package/source/data/datasource/server/restapi/namespace.mjs +0 -13
  376. package/source/data/datasource/storage/namespace.mjs +0 -13
  377. package/source/data/namespace.mjs +0 -13
  378. package/source/dom/namespace.mjs +0 -13
  379. package/source/dom/resource/link/namespace.mjs +0 -13
  380. package/source/dom/resource/namespace.mjs +0 -13
  381. package/source/dom/util/namespace.mjs +0 -13
  382. package/source/dom/worker/namespace.mjs +0 -13
  383. package/source/i18n/namespace.mjs +0 -13
  384. package/source/i18n/providers/namespace.mjs +0 -13
  385. package/source/logging/handler/namespace.mjs +0 -11
  386. package/source/logging/namespace.mjs +0 -13
  387. package/source/math/namespace.mjs +0 -13
  388. package/source/net/namespace.mjs +0 -13
  389. package/source/net/webconnect/namespace.mjs +0 -13
  390. package/source/text/namespace.mjs +0 -13
  391. package/source/types/namespace.mjs +0 -13
  392. package/source/util/namespace.mjs +0 -13
  393. /package/source/components/{host → layout}/style/collapse.pcss +0 -0
  394. /package/source/components/{host → layout}/style/details.pcss +0 -0
  395. /package/source/components/{form → layout}/style/popper.pcss +0 -0
@@ -1,21 +1,30 @@
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
20
  import "../notify/notify.mjs";
12
- import {fireCustomEvent} from "../../dom/events.mjs";
13
- import {Observer} from "../../types/observer.mjs";
14
- import {SplitPanelStyleSheet} from "./stylesheet/split-panel.mjs";
15
- import {instanceSymbol} from "../../constants.mjs";
16
- import {internalSymbol} from "../../constants.mjs";
21
+ import { fireCustomEvent } from "../../dom/events.mjs";
22
+ import { Observer } from "../../types/observer.mjs";
23
+ import { SplitPanelStyleSheet } from "./stylesheet/split-panel.mjs";
24
+ import { instanceSymbol } from "../../constants.mjs";
25
+ import { internalSymbol } from "../../constants.mjs";
17
26
 
18
- export {SplitPanel, TYPE_VERTICAL, TYPE_HORIZONTAL};
27
+ export { SplitPanel, TYPE_VERTICAL, TYPE_HORIZONTAL };
19
28
 
20
29
  /**
21
30
  * @private
@@ -55,16 +64,15 @@ const TYPE_VERTICAL = "vertical";
55
64
  */
56
65
  const TYPE_HORIZONTAL = "horizontal";
57
66
 
58
-
59
67
  /**
60
- * The SplitPanel control is a simple layout control that allows you to split the screen
61
- * into two parts. The split can be either vertical or horizontal. The control provides a
68
+ * The SplitPanel control is a simple layout control that allows you to split the screen
69
+ * into two parts. The split can be either vertical or horizontal. The control provides a
62
70
  * draggable handle that allows you to adjust the size of the two panels.
63
71
  *
64
72
  * <img src="./images/split-panel.png">
65
73
  *
66
- * You can create this control either by specifying the HTML tag <monster-split-panel />`
67
- * directly in the HTML or using Javascript via the `document.createElement('monster-split-panel');`
74
+ * You can create this control either by specifying the HTML tag <monster-split-panel />`
75
+ * directly in the HTML or using Javascript via the `document.createElement('monster-split-panel');`
68
76
  * method.
69
77
  *
70
78
  * ```html
@@ -77,9 +85,9 @@ const TYPE_HORIZONTAL = "horizontal";
77
85
  * import '@schukai/monster/components/layout/split-panel.mjs';
78
86
  * document.createElement('monster-split-panel');
79
87
  * ```
80
- *
88
+ *
81
89
  * It is best to hide unregistered elements with the css property `visibility: hidden;`
82
- *
90
+ *
83
91
  * ```css
84
92
  * <style>
85
93
  * *:not(:defined) {
@@ -102,311 +110,329 @@ const TYPE_HORIZONTAL = "horizontal";
102
110
  * @fires Monster.Components.Layout.event:monster-dimension-changed
103
111
  */
104
112
  class SplitPanel extends CustomElement {
105
-
106
- /**
107
- * This method is called by the `instanceof` operator.
108
- * @returns {symbol}
109
- */
110
- static get [instanceSymbol]() {
111
- return Symbol.for("@schukai/monster/components/layout/split-panel");
112
- }
113
-
114
- /**
115
- * To set the options via the html tag the attribute `data-monster-options` must be used.
116
- * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
117
- *
118
- * The individual configuration values can be found in the table.
119
- *
120
- * @property {Object} templates Template definitions
121
- * @property {string} templates.main Main template
122
- * @property {string} splitType Split type (vertical or horizontal)
123
- * @property {string} dimension Dimension
124
- * @property {string} dimension.initial Initial dimension of the start panel
125
- * @property {string} dimension.max Maximum dimension of the start panel (in percentage)
126
- * @property {string} dimension.min Minimum dimension of the start panel (in percentage)
127
- */
128
- get defaults() {
129
- return Object.assign({}, super.defaults, {
130
- templates: {
131
- main: getTemplate(),
132
- },
133
- splitType: TYPE_VERTICAL,
134
- dimension: {
135
- initial: "60%",
136
- max: "80%",
137
- min: "20%",
138
- },
139
- });
140
- }
141
-
142
- fullStartScreen() {
143
- this.setDimension("100%");
144
- return this;
145
- }
146
-
147
- fullEndScreen() {
148
- this.setDimension("0%");
149
- return this;
150
- }
151
-
152
- resetScreen() {
153
- this.setDimension(this.getOption("dimension").initial);
154
- return this;
155
- }
156
-
157
-
158
- setContent(html) {
159
- this.setOption("content", html);
160
- return this;
161
- }
162
-
163
- /**
164
- *
165
- * @returns {Monster.Components.Host.Viewer}
166
- */
167
- [assembleMethodSymbol]() {
168
- super[assembleMethodSymbol]();
169
-
170
- initControlReferences.call(this);
171
- initEventHandler.call(this);
172
- //applyPanelDimensions.call(this);
173
- this.setDimension(this.getOption("dimension").initial);
174
- }
175
-
176
- /**
177
- * Check if the dimension is a percentage and within a valid range, then set the dimension option.
178
- *
179
- * @param {string} dimension - The dimension to be set, can be in percentage or absolute value.
180
- * @return {Object} - Returns the current object instance for chaining.
181
- */
182
- setDimension(dimension) {
183
- // check if percent and greater than100
184
- if (dimension.includes("%")) {
185
- if (parseInt(dimension) > 100) {
186
- throw new Error("dimension must be less than 100%");
187
- } else if (parseInt(dimension) < 0) {
188
- throw new Error("dimension must be greater than 0%");
189
- }
190
- }
191
-
192
- this[internalSymbol].getSubject().currentDimension = dimension;
193
- return this;
194
- }
195
-
196
-
197
- /**
198
- *
199
- * @return {string}
200
- */
201
- static getTag() {
202
- return "monster-split-panel";
203
- }
204
-
205
- /**
206
- * @return {CSSStyleSheet[]}
207
- */
208
- static getCSSStyleSheet() {
209
- return [SplitPanelStyleSheet];
210
- }
113
+ /**
114
+ * This method is called by the `instanceof` operator.
115
+ * @returns {symbol}
116
+ */
117
+ static get [instanceSymbol]() {
118
+ return Symbol.for("@schukai/monster/components/layout/split-panel");
119
+ }
120
+
121
+ /**
122
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
123
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
124
+ *
125
+ * The individual configuration values can be found in the table.
126
+ *
127
+ * @property {Object} templates Template definitions
128
+ * @property {string} templates.main Main template
129
+ * @property {string} splitType Split type (vertical or horizontal)
130
+ * @property {string} dimension Dimension
131
+ * @property {string} dimension.initial Initial dimension of the start panel
132
+ * @property {string} dimension.max Maximum dimension of the start panel (in percentage)
133
+ * @property {string} dimension.min Minimum dimension of the start panel (in percentage)
134
+ */
135
+ get defaults() {
136
+ return Object.assign({}, super.defaults, {
137
+ templates: {
138
+ main: getTemplate(),
139
+ },
140
+ splitType: TYPE_VERTICAL,
141
+ dimension: {
142
+ initial: "60%",
143
+ max: "80%",
144
+ min: "20%",
145
+ },
146
+ });
147
+ }
148
+
149
+ fullStartScreen() {
150
+ this.setDimension("100%");
151
+ return this;
152
+ }
153
+
154
+ fullEndScreen() {
155
+ this.setDimension("0%");
156
+ return this;
157
+ }
158
+
159
+ isFullStartScreen() {
160
+ return this[internalSymbol].getSubject().currentDimension === "100%";
161
+ }
162
+
163
+ isFullEndScreen() {
164
+ return this[internalSymbol].getSubject().currentDimension === "0%";
165
+ }
166
+
167
+ isInitialScreen() {
168
+ return (
169
+ this[internalSymbol].getSubject().currentDimension ===
170
+ this.getOption("dimension").initial
171
+ );
172
+ }
173
+
174
+ resetScreen() {
175
+ this.setDimension(this.getOption("dimension").initial);
176
+ return this;
177
+ }
178
+
179
+ setContent(html) {
180
+ this.setOption("content", html);
181
+ return this;
182
+ }
183
+
184
+ /**
185
+ *
186
+ * @returns {Monster.Components.Host.Viewer}
187
+ */
188
+ [assembleMethodSymbol]() {
189
+ super[assembleMethodSymbol]();
190
+
191
+ initControlReferences.call(this);
192
+ initEventHandler.call(this);
193
+ //applyPanelDimensions.call(this);
194
+ this.setDimension(this.getOption("dimension").initial);
195
+ }
196
+
197
+ /**
198
+ * Check if the dimension is a percentage and within a valid range, then set the dimension option.
199
+ *
200
+ * @param {string} dimension - The dimension to be set, can be in percentage or absolute value.
201
+ * @return {Object} - Returns the current object instance for chaining.
202
+ */
203
+ setDimension(dimension) {
204
+ // check if percent and greater than100
205
+ if (dimension.includes("%")) {
206
+ if (parseInt(dimension) > 100) {
207
+ throw new Error("dimension must be less than 100%");
208
+ } else if (parseInt(dimension) < 0) {
209
+ throw new Error("dimension must be greater than 0%");
210
+ }
211
+ }
212
+
213
+ this[internalSymbol].getSubject().currentDimension = dimension;
214
+ return this;
215
+ }
216
+
217
+ /**
218
+ *
219
+ * @return {string}
220
+ */
221
+ static getTag() {
222
+ return "monster-split-panel";
223
+ }
224
+
225
+ /**
226
+ * @return {CSSStyleSheet[]}
227
+ */
228
+ static getCSSStyleSheet() {
229
+ return [SplitPanelStyleSheet];
230
+ }
211
231
  }
212
232
 
213
-
214
233
  /**
215
234
  * Set the dimensions of the panel based on the split type.
216
235
  * @fires Monster.Components.Layout.event:monster-dimension-changed
217
236
  */
218
237
  function applyPanelDimensions() {
219
-
220
- const splitType = this.getOption("splitType");
221
- const dimension = this[internalSymbol].getSubject().currentDimension;
222
-
223
- if (splitType === TYPE_VERTICAL) {
224
- this[startPanelElementSymbol].style.width = dimension;
225
- this[endPanelElementSymbol].style.width = `calc(100% - ${dimension} - 5px)`;
226
- this[draggerElementSymbol].style.cursor = "ew-resize";
227
- this[splitScreenElementSymbol].classList.add("vertical");
228
- this[splitScreenElementSymbol].classList.remove("horizontal");
229
-
230
- } else {
231
- this[startPanelElementSymbol].style.height = dimension;
232
- this[endPanelElementSymbol].style.height = `calc(100% - ${dimension} - 5px)`;
233
- this[draggerElementSymbol].style.cursor = "ns-resize";
234
- this[splitScreenElementSymbol].classList.add("horizontal");
235
- this[splitScreenElementSymbol].classList.remove("vertical");
236
-
237
- }
238
-
239
- fireCustomEvent(this, "monster-dimension-changed", {
240
- controller: this,
241
- dimension: dimension
242
- });
243
-
238
+ const splitType = this.getOption("splitType");
239
+ const dimension = this[internalSymbol].getSubject().currentDimension;
240
+
241
+ if (splitType === TYPE_VERTICAL) {
242
+ this[startPanelElementSymbol].style.width = dimension;
243
+ this[endPanelElementSymbol].style.width = `calc(100% - ${dimension} - 5px)`;
244
+ this[draggerElementSymbol].style.cursor = "ew-resize";
245
+ this[splitScreenElementSymbol].classList.add("vertical");
246
+ this[splitScreenElementSymbol].classList.remove("horizontal");
247
+ } else {
248
+ this[startPanelElementSymbol].style.height = dimension;
249
+ this[endPanelElementSymbol].style.height =
250
+ `calc(100% - ${dimension} - 5px)`;
251
+ this[draggerElementSymbol].style.cursor = "ns-resize";
252
+ this[splitScreenElementSymbol].classList.add("horizontal");
253
+ this[splitScreenElementSymbol].classList.remove("vertical");
254
+ }
255
+
256
+ fireCustomEvent(this, "monster-dimension-changed", {
257
+ controller: this,
258
+ dimension: dimension,
259
+ });
244
260
  }
245
261
 
246
-
247
262
  /**
248
263
  * @private
249
264
  * @return {Select}
250
265
  * @throws {Error} no shadow-root is defined
251
266
  */
252
267
  function initControlReferences() {
253
- if (!this.shadowRoot) {
254
- throw new Error("no shadow-root is defined");
255
- }
256
-
257
- this[splitScreenElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=split-panel]");
258
- this[draggerElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=dragger]");
259
- this[handleElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=handle]");
260
-
261
- this[startPanelElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=startPanel]");
262
- this[endPanelElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=endPanel]");
263
-
268
+ if (!this.shadowRoot) {
269
+ throw new Error("no shadow-root is defined");
270
+ }
271
+
272
+ this[splitScreenElementSymbol] = this.shadowRoot.querySelector(
273
+ "[data-monster-role=split-panel]",
274
+ );
275
+ this[draggerElementSymbol] = this.shadowRoot.querySelector(
276
+ "[data-monster-role=dragger]",
277
+ );
278
+ this[handleElementSymbol] = this.shadowRoot.querySelector(
279
+ "[data-monster-role=handle]",
280
+ );
281
+
282
+ this[startPanelElementSymbol] = this.shadowRoot.querySelector(
283
+ "[data-monster-role=startPanel]",
284
+ );
285
+ this[endPanelElementSymbol] = this.shadowRoot.querySelector(
286
+ "[data-monster-role=endPanel]",
287
+ );
264
288
  }
265
289
 
266
290
  /**
267
291
  * @private
268
292
  */
269
293
  function initEventHandler() {
270
- const self = this;
271
-
272
- let lastDimension = this[internalSymbol].getSubject().currentDimension;
273
- let lastType = this.getOption("splitType");
274
-
275
- this[internalSymbol].getSubject().isDragging = false;
276
-
277
- // @todo: add better touch support
278
- const eventTypes = ["dblclick", "touchstart"];
279
- for (const eventType of eventTypes) {
280
-
281
-
282
- this[draggerElementSymbol].addEventListener(eventType, () => {
283
- self[internalSymbol].getSubject().isDragging = false;
284
- lastDimension = undefined;
285
-
286
- let currentDimension;
287
- if (self.getOption("splitType") === TYPE_VERTICAL) {
288
- const topPanel = self[startPanelElementSymbol];
289
- currentDimension = topPanel.style.width;
290
- } else {
291
- const topPanel = self[startPanelElementSymbol];
292
- currentDimension = topPanel.style.height;
293
- }
294
-
295
- if (currentDimension === self.getOption("dimension").initial) {
296
- self.setDimension(self.getOption("dimension").max);
297
- } else if (currentDimension === self.getOption("dimension").max) {
298
- self.setDimension(self.getOption("dimension").min);
299
- } else if (currentDimension === self.getOption("dimension").min) {
300
- self.setDimension(self.getOption("dimension").initial);
301
- } else {
302
- self.setDimension(self.getOption("dimension").initial);
303
- }
304
- });
305
-
306
- }
307
-
308
- this[draggerElementSymbol].addEventListener("mousedown", () => {
309
- self[internalSymbol].getSubject().isDragging = true;
310
-
311
- const eventListener = (e) => {
312
- e.preventDefault();
313
-
314
- // the 5px are wrong and must be calc from css property --monster-dragger-width
315
-
316
- let draggerWidth = getComputedStyle(self[draggerElementSymbol]).getPropertyValue("--monster-dragger-width");
317
- if (draggerWidth === "" || draggerWidth === undefined || draggerWidth === null) {
318
- draggerWidth = "0";
319
- }
320
-
321
- if (!self[internalSymbol].getSubject().isDragging) {
322
- return;
323
- }
324
-
325
- if (self.getOption("splitType") === TYPE_HORIZONTAL) {
326
- const containerOffsetTop = self[splitScreenElementSymbol].offsetTop;
327
- const topPanel = self[startPanelElementSymbol];
328
- const bottomPanel = self[endPanelElementSymbol];
329
- let newTopHeight = e.clientY - containerOffsetTop;
330
-
331
- const min = this.getOption("dimension").min;
332
- const max = this.getOption("dimension").max;
333
-
334
- const topAsPercent = (newTopHeight / this[splitScreenElementSymbol].offsetHeight) * 100;
335
- if (parseInt(min) > topAsPercent) {
336
- newTopHeight = min;
337
- } else if (parseInt(max) < topAsPercent) {
338
- newTopHeight = max;
339
- } else {
340
- newTopHeight = topAsPercent + "%";
341
- }
342
-
343
- // calc new top height to pixel
344
- const newTopHeightPx = (parseInt(newTopHeight) / 100) * this[splitScreenElementSymbol].offsetHeight;
345
-
346
- topPanel.style.height = `${newTopHeightPx}px`;
347
- bottomPanel.style.height = `calc(100% - ${newTopHeightPx}px - ${draggerWidth})`; // 5px is dragger height
348
-
349
- } else {
350
-
351
- const containerOffsetLeft = self[splitScreenElementSymbol].offsetLeft;
352
- const leftPanel = self[startPanelElementSymbol];
353
- const rightPanel = self[endPanelElementSymbol];
354
- let newLeftWidth = e.clientX - containerOffsetLeft;
355
-
356
- const min = this.getOption("dimension").min;
357
- const max = this.getOption("dimension").max;
358
-
359
- const leftAsPercent = (newLeftWidth / this[splitScreenElementSymbol].offsetWidth) * 100;
360
-
361
- if (parseInt(min) > leftAsPercent) {
362
- newLeftWidth = min;
363
- } else if (parseInt(max) < leftAsPercent) {
364
- newLeftWidth = max;
365
- } else {
366
- newLeftWidth = leftAsPercent + "%";
367
- }
368
-
369
- leftPanel.style.width = `${newLeftWidth}`;
370
- rightPanel.style.width = `calc(100% - ${newLeftWidth} - ${draggerWidth})`; // 5px is dragger width
371
- }
372
-
373
- }
374
-
375
- const dragEventHandler = (e) => {
376
- self[internalSymbol].getSubject().isDragging = false;
377
- document.removeEventListener('mousemove', eventListener);
378
- document.removeEventListener('mouseup', eventListener);
379
- }
380
-
381
- document.addEventListener('mousemove', eventListener);
382
- document.addEventListener('mouseup', dragEventHandler);
383
-
384
- });
385
-
386
- this[internalSymbol].attachObserver(
387
- new Observer(() => {
388
-
389
- let apply = false;
390
-
391
- if (lastDimension !== this[internalSymbol].getSubject().currentDimension) {
392
- lastDimension = this[internalSymbol].getSubject().currentDimension;
393
- apply = true;
394
- }
395
-
396
- if (lastType !== this.getOption("splitType")) {
397
- lastType = this.getOption("splitType");
398
- apply = true;
399
- }
400
-
401
- if (apply) {
402
- applyPanelDimensions.call(this);
403
- }
404
-
405
- }));
406
-
407
-
408
- return this;
409
-
294
+ const self = this;
295
+
296
+ let lastDimension = this[internalSymbol].getSubject().currentDimension;
297
+ let lastType = this.getOption("splitType");
298
+
299
+ this[internalSymbol].getSubject().isDragging = false;
300
+
301
+ // @todo: add better touch support
302
+ const eventTypes = ["dblclick", "touchstart"];
303
+ for (const eventType of eventTypes) {
304
+ this[draggerElementSymbol].addEventListener(eventType, () => {
305
+ self[internalSymbol].getSubject().isDragging = false;
306
+ lastDimension = undefined;
307
+
308
+ let currentDimension;
309
+ if (self.getOption("splitType") === TYPE_VERTICAL) {
310
+ const topPanel = self[startPanelElementSymbol];
311
+ currentDimension = topPanel.style.width;
312
+ } else {
313
+ const topPanel = self[startPanelElementSymbol];
314
+ currentDimension = topPanel.style.height;
315
+ }
316
+
317
+ if (currentDimension === self.getOption("dimension").initial) {
318
+ self.setDimension(self.getOption("dimension").max);
319
+ } else if (currentDimension === self.getOption("dimension").max) {
320
+ self.setDimension(self.getOption("dimension").min);
321
+ } else if (currentDimension === self.getOption("dimension").min) {
322
+ self.setDimension(self.getOption("dimension").initial);
323
+ } else {
324
+ self.setDimension(self.getOption("dimension").initial);
325
+ }
326
+ });
327
+ }
328
+
329
+ this[draggerElementSymbol].addEventListener("mousedown", () => {
330
+ self[internalSymbol].getSubject().isDragging = true;
331
+
332
+ const eventListener = (e) => {
333
+ e.preventDefault();
334
+
335
+ // the 5px are wrong and must be calc from css property --monster-dragger-width
336
+
337
+ let draggerWidth = getComputedStyle(
338
+ self[draggerElementSymbol],
339
+ ).getPropertyValue("--monster-dragger-width");
340
+ if (
341
+ draggerWidth === "" ||
342
+ draggerWidth === undefined ||
343
+ draggerWidth === null
344
+ ) {
345
+ draggerWidth = "0";
346
+ }
347
+
348
+ if (!self[internalSymbol].getSubject().isDragging) {
349
+ return;
350
+ }
351
+
352
+ if (self.getOption("splitType") === TYPE_HORIZONTAL) {
353
+ const containerOffsetTop = self[splitScreenElementSymbol].offsetTop;
354
+ const topPanel = self[startPanelElementSymbol];
355
+ const bottomPanel = self[endPanelElementSymbol];
356
+ let newTopHeight = e.clientY - containerOffsetTop;
357
+
358
+ const min = this.getOption("dimension").min;
359
+ const max = this.getOption("dimension").max;
360
+
361
+ const topAsPercent =
362
+ (newTopHeight / this[splitScreenElementSymbol].offsetHeight) * 100;
363
+ if (parseInt(min) > topAsPercent) {
364
+ newTopHeight = min;
365
+ } else if (parseInt(max) < topAsPercent) {
366
+ newTopHeight = max;
367
+ } else {
368
+ newTopHeight = topAsPercent + "%";
369
+ }
370
+
371
+ // calc new top height to pixel
372
+ const newTopHeightPx =
373
+ (parseInt(newTopHeight) / 100) *
374
+ this[splitScreenElementSymbol].offsetHeight;
375
+
376
+ topPanel.style.height = `${newTopHeightPx}px`;
377
+ bottomPanel.style.height = `calc(100% - ${newTopHeightPx}px - ${draggerWidth})`; // 5px is dragger height
378
+ } else {
379
+ const containerOffsetLeft = self[splitScreenElementSymbol].offsetLeft;
380
+ const leftPanel = self[startPanelElementSymbol];
381
+ const rightPanel = self[endPanelElementSymbol];
382
+ let newLeftWidth = e.clientX - containerOffsetLeft;
383
+
384
+ const min = this.getOption("dimension").min;
385
+ const max = this.getOption("dimension").max;
386
+
387
+ const leftAsPercent =
388
+ (newLeftWidth / this[splitScreenElementSymbol].offsetWidth) * 100;
389
+
390
+ if (parseInt(min) > leftAsPercent) {
391
+ newLeftWidth = min;
392
+ } else if (parseInt(max) < leftAsPercent) {
393
+ newLeftWidth = max;
394
+ } else {
395
+ newLeftWidth = leftAsPercent + "%";
396
+ }
397
+
398
+ leftPanel.style.width = `${newLeftWidth}`;
399
+ rightPanel.style.width = `calc(100% - ${newLeftWidth} - ${draggerWidth})`; // 5px is dragger width
400
+ }
401
+ };
402
+
403
+ const dragEventHandler = (e) => {
404
+ self[internalSymbol].getSubject().isDragging = false;
405
+ document.removeEventListener("mousemove", eventListener);
406
+ document.removeEventListener("mouseup", eventListener);
407
+ };
408
+
409
+ document.addEventListener("mousemove", eventListener);
410
+ document.addEventListener("mouseup", dragEventHandler);
411
+ });
412
+
413
+ this[internalSymbol].attachObserver(
414
+ new Observer(() => {
415
+ let apply = false;
416
+
417
+ if (
418
+ lastDimension !== this[internalSymbol].getSubject().currentDimension
419
+ ) {
420
+ lastDimension = this[internalSymbol].getSubject().currentDimension;
421
+ apply = true;
422
+ }
423
+
424
+ if (lastType !== this.getOption("splitType")) {
425
+ lastType = this.getOption("splitType");
426
+ apply = true;
427
+ }
428
+
429
+ if (apply) {
430
+ applyPanelDimensions.call(this);
431
+ }
432
+ }),
433
+ );
434
+
435
+ return this;
410
436
  }
411
437
 
412
438
  /**
@@ -414,8 +440,8 @@ function initEventHandler() {
414
440
  * @return {string}
415
441
  */
416
442
  function getTemplate() {
417
- // language=HTML
418
- return `
443
+ // language=HTML
444
+ return `
419
445
  <div data-monster-role="split-panel" part="control">
420
446
  <div data-monster-role="startPanel" class="panel" part="startPanel">
421
447
  <slot name="start"></slot>