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