@kritzel/engine 0.4.31
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/LICENSE.md +50 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
- package/dist/cjs/engine.constants-CakmdKMW.js +28206 -0
- package/dist/cjs/index-BbbWU2aN.js +1742 -0
- package/dist/cjs/index.cjs.js +4232 -0
- package/dist/cjs/kritzel-awareness-cursors_5.cjs.entry.js +28004 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/stencil.cjs.js +25 -0
- package/dist/collection/classes/core/core.class.js +1389 -0
- package/dist/collection/classes/core/reviver.class.js +124 -0
- package/dist/collection/classes/core/store.class.js +337 -0
- package/dist/collection/classes/core/viewport.class.js +794 -0
- package/dist/collection/classes/core/workspace.class.js +112 -0
- package/dist/collection/classes/handlers/base.handler.js +20 -0
- package/dist/collection/classes/handlers/context-menu.handler.js +170 -0
- package/dist/collection/classes/handlers/hover.handler.js +35 -0
- package/dist/collection/classes/handlers/key.handler.js +162 -0
- package/dist/collection/classes/handlers/line-handle.handler.js +475 -0
- package/dist/collection/classes/handlers/move.handler.js +295 -0
- package/dist/collection/classes/handlers/resize.handler.js +327 -0
- package/dist/collection/classes/handlers/rotation.handler.js +174 -0
- package/dist/collection/classes/handlers/selection.handler.js +526 -0
- package/dist/collection/classes/managers/anchor.manager.js +1476 -0
- package/dist/collection/classes/managers/browser-permission.manager.js +64 -0
- package/dist/collection/classes/managers/clipboard.manager.js +346 -0
- package/dist/collection/classes/managers/clipboard.types.js +1 -0
- package/dist/collection/classes/managers/cursor.manager.js +139 -0
- package/dist/collection/classes/managers/license.manager.js +341 -0
- package/dist/collection/classes/managers/localization.manager.js +227 -0
- package/dist/collection/classes/managers/theme.manager.js +206 -0
- package/dist/collection/classes/objects/base-object.class.js +462 -0
- package/dist/collection/classes/objects/dynamic-object.class.js +437 -0
- package/dist/collection/classes/objects/group.class.js +590 -0
- package/dist/collection/classes/objects/image.class.js +500 -0
- package/dist/collection/classes/objects/line.class.js +789 -0
- package/dist/collection/classes/objects/path.class.js +578 -0
- package/dist/collection/classes/objects/selection-box.class.js +32 -0
- package/dist/collection/classes/objects/selection-group.class.js +752 -0
- package/dist/collection/classes/objects/shape.class.js +628 -0
- package/dist/collection/classes/objects/text.class.js +461 -0
- package/dist/collection/classes/providers/assets/asset-resolver.class.js +536 -0
- package/dist/collection/classes/providers/assets/http-asset-provider.class.js +111 -0
- package/dist/collection/classes/providers/assets/indexeddb-asset-provider.class.js +241 -0
- package/dist/collection/classes/providers/assets/presigned-asset-provider.class.js +86 -0
- package/dist/collection/classes/providers/paste-intent/event-paste-intent.provider.js +48 -0
- package/dist/collection/classes/providers/paste-intent/ios-paste-intent.provider.js +16 -0
- package/dist/collection/classes/providers/paste-intent/navigator-paste-intent.provider.js +86 -0
- package/dist/collection/classes/providers/sync/broadcast-sync-provider.class.js +100 -0
- package/dist/collection/classes/providers/sync/hocuspocus-sync-provider.class.js +333 -0
- package/dist/collection/classes/providers/sync/in-memory-sync-provider.class.js +69 -0
- package/dist/collection/classes/providers/sync/indexeddb-sync-provider.class.js +39 -0
- package/dist/collection/classes/providers/sync/websocket-sync-provider.class.js +110 -0
- package/dist/collection/classes/registries/dynamic-object-renderer.registry.js +52 -0
- package/dist/collection/classes/registries/font-registry.class.js +161 -0
- package/dist/collection/classes/registries/icon-registry.class.js +118 -0
- package/dist/collection/classes/registries/paste-intent-provider.registry.js +26 -0
- package/dist/collection/classes/registries/tool.registry.js +69 -0
- package/dist/collection/classes/structures/app-state-map.structure.js +461 -0
- package/dist/collection/classes/structures/object-map.structure.js +1103 -0
- package/dist/collection/classes/structures/quadtree.structure.js +251 -0
- package/dist/collection/classes/tools/base-tool.class.js +88 -0
- package/dist/collection/classes/tools/brush-tool.class.js +236 -0
- package/dist/collection/classes/tools/eraser-tool.class.js +133 -0
- package/dist/collection/classes/tools/image-tool.class.js +152 -0
- package/dist/collection/classes/tools/line-tool.class.js +249 -0
- package/dist/collection/classes/tools/selection-tool.class.js +611 -0
- package/dist/collection/classes/tools/shape-tool.class.js +251 -0
- package/dist/collection/classes/tools/text-tool.class.js +179 -0
- package/dist/collection/collection-manifest.json +17 -0
- package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.css +115 -0
- package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.js +380 -0
- package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -0
- package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.js +153 -0
- package/dist/collection/components/kritzel-engine/kritzel-engine.css +81 -0
- package/dist/collection/components/kritzel-engine/kritzel-engine.js +6345 -0
- package/dist/collection/components/kritzel-icon/kritzel-icon.css +18 -0
- package/dist/collection/components/kritzel-icon/kritzel-icon.js +93 -0
- package/dist/collection/components/kritzel-watermark/kritzel-watermark.css +29 -0
- package/dist/collection/components/kritzel-watermark/kritzel-watermark.js +83 -0
- package/dist/collection/configs/default-asset-storage.config.js +9 -0
- package/dist/collection/configs/default-brush-tool.config.js +9 -0
- package/dist/collection/configs/default-engine-config.js +73 -0
- package/dist/collection/configs/default-line-tool.config.js +12 -0
- package/dist/collection/configs/default-shape-tool.config.js +15 -0
- package/dist/collection/configs/default-sync.config.js +6 -0
- package/dist/collection/configs/default-text-tool.config.js +12 -0
- package/dist/collection/constants/color-palette.constants.js +40 -0
- package/dist/collection/constants/core.constants.js +1 -0
- package/dist/collection/constants/engine.constants.js +4 -0
- package/dist/collection/constants/license.constants.js +25 -0
- package/dist/collection/constants/schema.constants.js +4 -0
- package/dist/collection/constants/storage.constants.js +1 -0
- package/dist/collection/constants/stroke-size.constants.js +2 -0
- package/dist/collection/constants/text-tool-fonts.constants.js +18 -0
- package/dist/collection/constants/version.js +6 -0
- package/dist/collection/enums/alignment.enum.js +9 -0
- package/dist/collection/enums/event-button.enum.js +6 -0
- package/dist/collection/enums/handle-type.enum.js +7 -0
- package/dist/collection/enums/shape-type.enum.js +6 -0
- package/dist/collection/events/active-workspace-change.event.js +1 -0
- package/dist/collection/events/editor-is-ready.event.js +1 -0
- package/dist/collection/events/login.event.js +1 -0
- package/dist/collection/helpers/alignment.helper.js +73 -0
- package/dist/collection/helpers/class.helper.js +5 -0
- package/dist/collection/helpers/color.helper.js +106 -0
- package/dist/collection/helpers/cursor.helper.js +57 -0
- package/dist/collection/helpers/devices.helper.js +28 -0
- package/dist/collection/helpers/event.helper.js +58 -0
- package/dist/collection/helpers/geometry.helper.js +149 -0
- package/dist/collection/helpers/html.helper.js +116 -0
- package/dist/collection/helpers/image-file.helper.js +6 -0
- package/dist/collection/helpers/keyboard.helper.js +55 -0
- package/dist/collection/helpers/localization.helper.js +25 -0
- package/dist/collection/helpers/math.helper.js +8 -0
- package/dist/collection/helpers/migration.helper.js +45 -0
- package/dist/collection/helpers/object.helper.js +29 -0
- package/dist/collection/helpers/svg-export.helper.js +655 -0
- package/dist/collection/helpers/theme.helper.js +77 -0
- package/dist/collection/helpers/tool-config.helper.js +63 -0
- package/dist/collection/helpers/wheel.helper.js +113 -0
- package/dist/collection/index.js +107 -0
- package/dist/collection/interfaces/anchor.interface.js +1 -0
- package/dist/collection/interfaces/arrow-head.interface.js +1 -0
- package/dist/collection/interfaces/asset-provider.interface.js +1 -0
- package/dist/collection/interfaces/asset-storage-config.interface.js +1 -0
- package/dist/collection/interfaces/asset.interface.js +1 -0
- package/dist/collection/interfaces/bounding-box.interface.js +1 -0
- package/dist/collection/interfaces/clonable.interface.js +1 -0
- package/dist/collection/interfaces/context-menu-item.interface.js +1 -0
- package/dist/collection/interfaces/context-menu-state.interface.js +1 -0
- package/dist/collection/interfaces/debug-info.interface.js +1 -0
- package/dist/collection/interfaces/dialog.interface.js +1 -0
- package/dist/collection/interfaces/document-metadata.interface.js +1 -0
- package/dist/collection/interfaces/dynamic-object-renderer.interface.js +1 -0
- package/dist/collection/interfaces/engine-state.interface.js +1 -0
- package/dist/collection/interfaces/font.interface.js +1 -0
- package/dist/collection/interfaces/localization.interface.js +1 -0
- package/dist/collection/interfaces/login-config.interface.js +1 -0
- package/dist/collection/interfaces/master-detail.interface.js +1 -0
- package/dist/collection/interfaces/menu-item.interface.js +1 -0
- package/dist/collection/interfaces/migration.interface.js +1 -0
- package/dist/collection/interfaces/notification.interface.js +1 -0
- package/dist/collection/interfaces/object-change-event.interface.js +1 -0
- package/dist/collection/interfaces/object-export.interface.js +1 -0
- package/dist/collection/interfaces/object.interface.js +1 -0
- package/dist/collection/interfaces/paste-intent-provider.interface.js +1 -0
- package/dist/collection/interfaces/point.interface.js +1 -0
- package/dist/collection/interfaces/polygon.interface.js +1 -0
- package/dist/collection/interfaces/remote-cursor.interface.js +1 -0
- package/dist/collection/interfaces/selection-state.interface.js +1 -0
- package/dist/collection/interfaces/serializable.interface.js +1 -0
- package/dist/collection/interfaces/settings.interface.js +1 -0
- package/dist/collection/interfaces/share.interface.js +1 -0
- package/dist/collection/interfaces/shortcut.interface.js +1 -0
- package/dist/collection/interfaces/sync-config.interface.js +21 -0
- package/dist/collection/interfaces/sync-provider.interface.js +1 -0
- package/dist/collection/interfaces/theme.interface.js +1 -0
- package/dist/collection/interfaces/tool-config.interface.js +1 -0
- package/dist/collection/interfaces/tool-type.interface.js +1 -0
- package/dist/collection/interfaces/tool.interface.js +1 -0
- package/dist/collection/interfaces/toolbar-item.interface.js +1 -0
- package/dist/collection/interfaces/undo-state.interface.js +1 -0
- package/dist/collection/interfaces/user.interface.js +1 -0
- package/dist/collection/interfaces/viewport-state.interface.js +1 -0
- package/dist/collection/locales/de-locale.js +119 -0
- package/dist/collection/locales/en-locale.js +120 -0
- package/dist/collection/locales/fr-locale.js +119 -0
- package/dist/collection/migrations/app-state.migrations.js +47 -0
- package/dist/collection/migrations/workspace.migrations.js +67 -0
- package/dist/collection/themes/dark-theme.js +340 -0
- package/dist/collection/themes/light-theme.js +346 -0
- package/dist/collection/types/deep-readonly.type.js +1 -0
- package/dist/collection/types/state.types.js +1 -0
- package/dist/components/index.d.ts +47 -0
- package/dist/components/index.js +4143 -0
- package/dist/components/kritzel-awareness-cursors.d.ts +11 -0
- package/dist/components/kritzel-awareness-cursors.js +6 -0
- package/dist/components/kritzel-cursor-trail.d.ts +11 -0
- package/dist/components/kritzel-cursor-trail.js +6 -0
- package/dist/components/kritzel-engine.d.ts +11 -0
- package/dist/components/kritzel-engine.js +52641 -0
- package/dist/components/kritzel-icon.d.ts +11 -0
- package/dist/components/kritzel-icon.js +6 -0
- package/dist/components/kritzel-watermark.d.ts +11 -0
- package/dist/components/kritzel-watermark.js +6 -0
- package/dist/components/p-B2Htv9ou.js +49 -0
- package/dist/components/p-BvRGQvVI.js +3456 -0
- package/dist/components/p-CfSx6HU_.js +1469 -0
- package/dist/components/p-YP8wAcF4.js +122 -0
- package/dist/components/p-fx6msYHJ.js +167 -0
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/engine.constants-Bl5-pbq-.js +28143 -0
- package/dist/esm/index-BU9Mv7y0.js +1715 -0
- package/dist/esm/index.js +4134 -0
- package/dist/esm/kritzel-awareness-cursors_5.entry.js +27978 -0
- package/dist/esm/loader.js +11 -0
- package/dist/esm/stencil.js +21 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/stencil/index.esm.js +4134 -0
- package/dist/stencil/p-BU9Mv7y0.js +1702 -0
- package/dist/stencil/p-Bl5-pbq-.js +28143 -0
- package/dist/stencil/p-DQuL1Twl.js +3 -0
- package/dist/stencil/p-f0a8b7af.entry.js +27978 -0
- package/dist/stencil/stencil.esm.js +21 -0
- package/dist/types/classes/core/core.class.d.ts +532 -0
- package/dist/types/classes/core/reviver.class.d.ts +32 -0
- package/dist/types/classes/core/store.class.d.ts +198 -0
- package/dist/types/classes/core/viewport.class.d.ts +256 -0
- package/dist/types/classes/core/workspace.class.d.ts +95 -0
- package/dist/types/classes/handlers/base.handler.d.ts +18 -0
- package/dist/types/classes/handlers/context-menu.handler.d.ts +67 -0
- package/dist/types/classes/handlers/hover.handler.d.ts +23 -0
- package/dist/types/classes/handlers/key.handler.d.ts +44 -0
- package/dist/types/classes/handlers/line-handle.handler.d.ts +115 -0
- package/dist/types/classes/handlers/move.handler.d.ts +94 -0
- package/dist/types/classes/handlers/resize.handler.d.ts +95 -0
- package/dist/types/classes/handlers/rotation.handler.d.ts +50 -0
- package/dist/types/classes/handlers/selection.handler.d.ts +153 -0
- package/dist/types/classes/managers/anchor.manager.d.ts +513 -0
- package/dist/types/classes/managers/browser-permission.manager.d.ts +41 -0
- package/dist/types/classes/managers/clipboard.manager.d.ts +71 -0
- package/dist/types/classes/managers/clipboard.types.d.ts +23 -0
- package/dist/types/classes/managers/cursor.manager.d.ts +66 -0
- package/dist/types/classes/managers/license.manager.d.ts +147 -0
- package/dist/types/classes/managers/localization.manager.d.ts +145 -0
- package/dist/types/classes/managers/theme.manager.d.ts +112 -0
- package/dist/types/classes/objects/base-object.class.d.ts +266 -0
- package/dist/types/classes/objects/dynamic-object.class.d.ts +148 -0
- package/dist/types/classes/objects/group.class.d.ts +231 -0
- package/dist/types/classes/objects/image.class.d.ts +246 -0
- package/dist/types/classes/objects/line.class.d.ts +285 -0
- package/dist/types/classes/objects/path.class.d.ts +220 -0
- package/dist/types/classes/objects/selection-box.class.d.ts +19 -0
- package/dist/types/classes/objects/selection-group.class.d.ts +267 -0
- package/dist/types/classes/objects/shape.class.d.ts +322 -0
- package/dist/types/classes/objects/text.class.d.ts +197 -0
- package/dist/types/classes/providers/assets/asset-resolver.class.d.ts +141 -0
- package/dist/types/classes/providers/assets/http-asset-provider.class.d.ts +79 -0
- package/dist/types/classes/providers/assets/indexeddb-asset-provider.class.d.ts +69 -0
- package/dist/types/classes/providers/assets/presigned-asset-provider.class.d.ts +69 -0
- package/dist/types/classes/providers/paste-intent/event-paste-intent.provider.d.ts +8 -0
- package/dist/types/classes/providers/paste-intent/ios-paste-intent.provider.d.ts +6 -0
- package/dist/types/classes/providers/paste-intent/navigator-paste-intent.provider.d.ts +9 -0
- package/dist/types/classes/providers/sync/broadcast-sync-provider.class.d.ts +23 -0
- package/dist/types/classes/providers/sync/hocuspocus-sync-provider.class.d.ts +163 -0
- package/dist/types/classes/providers/sync/in-memory-sync-provider.class.d.ts +39 -0
- package/dist/types/classes/providers/sync/indexeddb-sync-provider.class.d.ts +25 -0
- package/dist/types/classes/providers/sync/websocket-sync-provider.class.d.ts +63 -0
- package/dist/types/classes/registries/dynamic-object-renderer.registry.d.ts +32 -0
- package/dist/types/classes/registries/font-registry.class.d.ts +19 -0
- package/dist/types/classes/registries/icon-registry.class.d.ts +39 -0
- package/dist/types/classes/registries/paste-intent-provider.registry.d.ts +10 -0
- package/dist/types/classes/registries/tool.registry.d.ts +53 -0
- package/dist/types/classes/structures/app-state-map.structure.d.ts +171 -0
- package/dist/types/classes/structures/object-map.structure.d.ts +403 -0
- package/dist/types/classes/structures/quadtree.structure.d.ts +128 -0
- package/dist/types/classes/tools/base-tool.class.d.ts +72 -0
- package/dist/types/classes/tools/brush-tool.class.d.ts +68 -0
- package/dist/types/classes/tools/eraser-tool.class.d.ts +38 -0
- package/dist/types/classes/tools/image-tool.class.d.ts +74 -0
- package/dist/types/classes/tools/line-tool.class.d.ts +63 -0
- package/dist/types/classes/tools/selection-tool.class.d.ts +188 -0
- package/dist/types/classes/tools/shape-tool.class.d.ts +90 -0
- package/dist/types/classes/tools/text-tool.class.d.ts +66 -0
- package/dist/types/components/kritzel-awareness-cursors/kritzel-awareness-cursors.d.ts +29 -0
- package/dist/types/components/kritzel-cursor-trail/kritzel-cursor-trail.d.ts +19 -0
- package/dist/types/components/kritzel-engine/kritzel-engine.d.ts +695 -0
- package/dist/types/components/kritzel-icon/kritzel-icon.d.ts +6 -0
- package/dist/types/components/kritzel-watermark/kritzel-watermark.d.ts +20 -0
- package/dist/types/components.d.ts +981 -0
- package/dist/types/configs/default-asset-storage.config.d.ts +8 -0
- package/dist/types/configs/default-brush-tool.config.d.ts +2 -0
- package/dist/types/configs/default-engine-config.d.ts +2 -0
- package/dist/types/configs/default-line-tool.config.d.ts +2 -0
- package/dist/types/configs/default-shape-tool.config.d.ts +2 -0
- package/dist/types/configs/default-sync.config.d.ts +5 -0
- package/dist/types/configs/default-text-tool.config.d.ts +2 -0
- package/dist/types/constants/color-palette.constants.d.ts +31 -0
- package/dist/types/constants/core.constants.d.ts +0 -0
- package/dist/types/constants/engine.constants.d.ts +4 -0
- package/dist/types/constants/license.constants.d.ts +25 -0
- package/dist/types/constants/schema.constants.d.ts +4 -0
- package/dist/types/constants/storage.constants.d.ts +1 -0
- package/dist/types/constants/stroke-size.constants.d.ts +2 -0
- package/dist/types/constants/text-tool-fonts.constants.d.ts +3 -0
- package/dist/types/constants/version.d.ts +6 -0
- package/dist/types/enums/alignment.enum.d.ts +8 -0
- package/dist/types/enums/event-button.enum.d.ts +5 -0
- package/dist/types/enums/handle-type.enum.d.ts +6 -0
- package/dist/types/enums/shape-type.enum.d.ts +5 -0
- package/dist/types/events/active-workspace-change.event.d.ts +7 -0
- package/dist/types/events/editor-is-ready.event.d.ts +18 -0
- package/dist/types/events/login.event.d.ts +3 -0
- package/dist/types/helpers/alignment.helper.d.ts +21 -0
- package/dist/types/helpers/class.helper.d.ts +3 -0
- package/dist/types/helpers/color.helper.d.ts +34 -0
- package/dist/types/helpers/cursor.helper.d.ts +22 -0
- package/dist/types/helpers/devices.helper.d.ts +8 -0
- package/dist/types/helpers/event.helper.d.ts +6 -0
- package/dist/types/helpers/geometry.helper.d.ts +38 -0
- package/dist/types/helpers/html.helper.d.ts +8 -0
- package/dist/types/helpers/image-file.helper.d.ts +3 -0
- package/dist/types/helpers/keyboard.helper.d.ts +6 -0
- package/dist/types/helpers/localization.helper.d.ts +18 -0
- package/dist/types/helpers/math.helper.d.ts +4 -0
- package/dist/types/helpers/migration.helper.d.ts +30 -0
- package/dist/types/helpers/object.helper.d.ts +9 -0
- package/dist/types/helpers/svg-export.helper.d.ts +231 -0
- package/dist/types/helpers/theme.helper.d.ts +42 -0
- package/dist/types/helpers/tool-config.helper.d.ts +4 -0
- package/dist/types/helpers/wheel.helper.d.ts +9 -0
- package/dist/types/index.d.ts +109 -0
- package/dist/types/interfaces/anchor.interface.d.ts +147 -0
- package/dist/types/interfaces/arrow-head.interface.d.ts +27 -0
- package/dist/types/interfaces/asset-provider.interface.d.ts +88 -0
- package/dist/types/interfaces/asset-storage-config.interface.d.ts +40 -0
- package/dist/types/interfaces/asset.interface.d.ts +43 -0
- package/dist/types/interfaces/bounding-box.interface.d.ts +8 -0
- package/dist/types/interfaces/clonable.interface.d.ts +3 -0
- package/dist/types/interfaces/context-menu-item.interface.d.ts +25 -0
- package/dist/types/interfaces/context-menu-state.interface.d.ts +16 -0
- package/dist/types/interfaces/debug-info.interface.d.ts +7 -0
- package/dist/types/interfaces/dialog.interface.d.ts +4 -0
- package/dist/types/interfaces/document-metadata.interface.d.ts +6 -0
- package/dist/types/interfaces/dynamic-object-renderer.interface.d.ts +40 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +82 -0
- package/dist/types/interfaces/font.interface.d.ts +15 -0
- package/dist/types/interfaces/localization.interface.d.ts +143 -0
- package/dist/types/interfaces/login-config.interface.d.ts +24 -0
- package/dist/types/interfaces/master-detail.interface.d.ts +14 -0
- package/dist/types/interfaces/menu-item.interface.d.ts +27 -0
- package/dist/types/interfaces/migration.interface.d.ts +16 -0
- package/dist/types/interfaces/notification.interface.d.ts +10 -0
- package/dist/types/interfaces/object-change-event.interface.d.ts +31 -0
- package/dist/types/interfaces/object-export.interface.d.ts +20 -0
- package/dist/types/interfaces/object.interface.d.ts +53 -0
- package/dist/types/interfaces/paste-intent-provider.interface.d.ts +10 -0
- package/dist/types/interfaces/point.interface.d.ts +4 -0
- package/dist/types/interfaces/polygon.interface.d.ts +7 -0
- package/dist/types/interfaces/remote-cursor.interface.d.ts +18 -0
- package/dist/types/interfaces/selection-state.interface.d.ts +7 -0
- package/dist/types/interfaces/serializable.interface.d.ts +5 -0
- package/dist/types/interfaces/settings.interface.d.ts +25 -0
- package/dist/types/interfaces/share.interface.d.ts +9 -0
- package/dist/types/interfaces/shortcut.interface.d.ts +10 -0
- package/dist/types/interfaces/sync-config.interface.d.ts +41 -0
- package/dist/types/interfaces/sync-provider.interface.d.ts +66 -0
- package/dist/types/interfaces/theme.interface.d.ts +553 -0
- package/dist/types/interfaces/tool-config.interface.d.ts +24 -0
- package/dist/types/interfaces/tool-type.interface.d.ts +1 -0
- package/dist/types/interfaces/tool.interface.d.ts +8 -0
- package/dist/types/interfaces/toolbar-item.interface.d.ts +66 -0
- package/dist/types/interfaces/undo-state.interface.d.ts +6 -0
- package/dist/types/interfaces/user.interface.d.ts +22 -0
- package/dist/types/interfaces/viewport-state.interface.d.ts +7 -0
- package/dist/types/locales/de-locale.d.ts +5 -0
- package/dist/types/locales/en-locale.d.ts +6 -0
- package/dist/types/locales/fr-locale.d.ts +5 -0
- package/dist/types/migrations/app-state.migrations.d.ts +11 -0
- package/dist/types/migrations/workspace.migrations.d.ts +11 -0
- package/dist/types/stencil-public-runtime.d.ts +1873 -0
- package/dist/types/themes/dark-theme.d.ts +5 -0
- package/dist/types/themes/light-theme.d.ts +5 -0
- package/dist/types/types/deep-readonly.type.d.ts +7 -0
- package/dist/types/types/state.types.d.ts +3 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +101 -0
- package/readme.md +11 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { KritzelBaseObject } from "./base-object.class";
|
|
2
|
+
import { KritzelMathHelper } from "../../helpers/math.helper";
|
|
3
|
+
import { KritzelDynamicObjectRendererRegistry } from "../registries/dynamic-object-renderer.registry";
|
|
4
|
+
import { KritzelHTMLHelper } from "../../helpers/html.helper";
|
|
5
|
+
/**
|
|
6
|
+
* Represents a custom HTML element that can be placed and manipulated on the Kritzel canvas.
|
|
7
|
+
* Extends KritzelBaseObject to inherit common object functionality like positioning,
|
|
8
|
+
* scaling, and lifecycle management.
|
|
9
|
+
*/
|
|
10
|
+
export class KritzelDynamicObject extends KritzelBaseObject {
|
|
11
|
+
__class__ = 'KritzelDynamicObject';
|
|
12
|
+
/** The HTML element to be rendered on the canvas. */
|
|
13
|
+
element;
|
|
14
|
+
/**
|
|
15
|
+
* Optional identifier for a registered renderer (e.g., 'angular-component', 'react-default').
|
|
16
|
+
* When set, mount() resolves the renderer from a global registry and delegates lifecycle.
|
|
17
|
+
* If null, falls back to DOM element mounting.
|
|
18
|
+
*/
|
|
19
|
+
rendererKey = null;
|
|
20
|
+
/**
|
|
21
|
+
* Custom data payload for the renderer (e.g., Angular component inputs, React props, Vue data).
|
|
22
|
+
* Only meaningful when rendererKey is set. Captured on unmount and restored on rehydrate.
|
|
23
|
+
*/
|
|
24
|
+
rendererData;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new KritzelDynamicObject instance.
|
|
27
|
+
* @param config - Optional configuration object for the dynamic object.
|
|
28
|
+
* @param config.element - The HTML element to wrap.
|
|
29
|
+
* @param config.translateX - Initial X position offset. Defaults to 0.
|
|
30
|
+
* @param config.translateY - Initial Y position offset. Defaults to 0.
|
|
31
|
+
* @param config.scale - Initial scale factor. Defaults to 1.
|
|
32
|
+
* @param config.height - Initial height in pixels. Defaults to 0.
|
|
33
|
+
* @param config.width - Initial width in pixels. Defaults to 0.
|
|
34
|
+
*/
|
|
35
|
+
constructor(config) {
|
|
36
|
+
super();
|
|
37
|
+
if (config) {
|
|
38
|
+
this.translateX = config.translateX || 0;
|
|
39
|
+
this.translateY = config.translateY || 0;
|
|
40
|
+
this.rotation = KritzelMathHelper.degreesToRadians(config.rotation ?? 0);
|
|
41
|
+
this.scale = config.scale || 1;
|
|
42
|
+
this.element = config.element ?? this.createPlaceholder();
|
|
43
|
+
this.height = config.height || 0;
|
|
44
|
+
this.width = config.width || 0;
|
|
45
|
+
this.rendererKey = config.rendererKey ?? null;
|
|
46
|
+
this.rendererData = config.rendererData;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Factory method to create a new KritzelDynamicObject with proper core binding.
|
|
51
|
+
* Generates a unique ID and assigns the element to the active workspace.
|
|
52
|
+
* @param core - The KritzelCore instance for state management and ID generation.
|
|
53
|
+
* @param config - Optional configuration object for the dynamic object.
|
|
54
|
+
* @param config.element - The HTML element to wrap.
|
|
55
|
+
* @param config.translateX - Initial X position offset.
|
|
56
|
+
* @param config.translateY - Initial Y position offset.
|
|
57
|
+
* @param config.scale - Initial scale factor.
|
|
58
|
+
* @param config.height - Initial height in pixels.
|
|
59
|
+
* @param config.width - Initial width in pixels.
|
|
60
|
+
* @returns A new KritzelBaseObject instance bound to the core.
|
|
61
|
+
*/
|
|
62
|
+
static create(core, config) {
|
|
63
|
+
const object = new KritzelDynamicObject(config);
|
|
64
|
+
object._core = core;
|
|
65
|
+
object.id = object.generateId();
|
|
66
|
+
object.workspaceId = core.store.state.activeWorkspace.id;
|
|
67
|
+
object.userId = core.user?.id;
|
|
68
|
+
object.zIndex = core.store.currentZIndex;
|
|
69
|
+
return object;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Mounts the dynamic object to a container element in the DOM.
|
|
73
|
+
* If a renderer is registered for this.rendererKey, delegates to the renderer.
|
|
74
|
+
* Otherwise, uses the standard DOM element mounting fallback.
|
|
75
|
+
* Skips mounting if already mounted to the same container with content attached.
|
|
76
|
+
* @param element - The container HTML element to mount this dynamic object into.
|
|
77
|
+
*/
|
|
78
|
+
mount(element) {
|
|
79
|
+
if (element === null) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.applyInteractiveState();
|
|
83
|
+
if (this.isMounted && this.elementRef === element) {
|
|
84
|
+
// Renderer-based mounts should not be re-invoked on every engine rerender.
|
|
85
|
+
if (this.rendererKey) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// For direct DOM fallback, remount only if content was detached.
|
|
89
|
+
if (this.element.parentElement === element) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
this.elementRef = element;
|
|
94
|
+
this.isMounted = true;
|
|
95
|
+
// Try renderer-based approach if a key is set
|
|
96
|
+
if (this.rendererKey) {
|
|
97
|
+
const renderer = KritzelDynamicObjectRendererRegistry.get(this.rendererKey);
|
|
98
|
+
if (renderer) {
|
|
99
|
+
element.innerHTML = ''; // Clear container
|
|
100
|
+
renderer.onMount({
|
|
101
|
+
object: this,
|
|
102
|
+
container: element,
|
|
103
|
+
data: this.rendererData,
|
|
104
|
+
});
|
|
105
|
+
this.applyInteractiveState();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Fallback to standard DOM mounting
|
|
110
|
+
this.elementRef.innerHTML = '';
|
|
111
|
+
this.elementRef.appendChild(this.element);
|
|
112
|
+
this.applyInteractiveState();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Updates interactivity state for embedded HTML content.
|
|
116
|
+
* When disabling interactivity, any focused descendant is blurred so
|
|
117
|
+
* keyboard input is released immediately.
|
|
118
|
+
*/
|
|
119
|
+
setIsInteractive(isInteractive) {
|
|
120
|
+
const hasChanged = this.isInteractive !== isInteractive;
|
|
121
|
+
this.isInteractive = isInteractive;
|
|
122
|
+
this.applyInteractiveState();
|
|
123
|
+
if (hasChanged && !isInteractive) {
|
|
124
|
+
this.blurFocusedDescendant();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
applyInteractiveState() {
|
|
128
|
+
const pointerEvents = this.isInteractive ? 'auto' : 'none';
|
|
129
|
+
const contentCursor = this.isInteractive ? 'auto' : '';
|
|
130
|
+
if (this.element) {
|
|
131
|
+
this.element.style.pointerEvents = pointerEvents;
|
|
132
|
+
this.element.style.cursor = contentCursor;
|
|
133
|
+
}
|
|
134
|
+
if (this.elementRef instanceof HTMLElement) {
|
|
135
|
+
// Keep the mount container clickable so unselected dynamic objects can still be selected.
|
|
136
|
+
this.elementRef.style.pointerEvents = 'auto';
|
|
137
|
+
this.elementRef.style.cursor = '';
|
|
138
|
+
Array.from(this.elementRef.children).forEach(child => {
|
|
139
|
+
if (child instanceof HTMLElement) {
|
|
140
|
+
child.style.pointerEvents = pointerEvents;
|
|
141
|
+
child.style.cursor = contentCursor;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
blurFocusedDescendant() {
|
|
147
|
+
if (!this.element && !(this.elementRef instanceof HTMLElement)) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const activeElement = this.getDeepActiveElement();
|
|
151
|
+
const isInsideElement = !!this.element && this.isNodeInsideHost(activeElement, this.element);
|
|
152
|
+
const isInsideMountedContainer = this.elementRef instanceof HTMLElement && this.isNodeInsideHost(activeElement, this.elementRef);
|
|
153
|
+
if (activeElement && (isInsideElement || isInsideMountedContainer)) {
|
|
154
|
+
activeElement.blur();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Returns true when a text-input-like element inside this dynamic object
|
|
159
|
+
* currently owns focus.
|
|
160
|
+
*/
|
|
161
|
+
hasFocusedInputElement() {
|
|
162
|
+
if (!this.isInteractive) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
const focusHosts = this.getFocusHosts();
|
|
166
|
+
// Primary path: locate the focused input-like element by walking from each host through
|
|
167
|
+
// `:focus` (piercing open shadow roots). This works in real browsers even when the engine
|
|
168
|
+
// and editor are nested web components, because it never relies on the document-level
|
|
169
|
+
// active element resolving to a descendant of the host.
|
|
170
|
+
if (focusHosts.some(host => this.hasFocusedInputDescendant(host))) {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
// Fallback path: resolve the deep active element and confirm it is input-like and inside a
|
|
174
|
+
// host. Covers contenteditable content inside nested shadow roots (which `querySelector`
|
|
175
|
+
// cannot reach) and test environments that mock the active element without real focus.
|
|
176
|
+
const activeElement = this.getDeepActiveElement();
|
|
177
|
+
if (activeElement && this.isInputLikeElement(activeElement) && focusHosts.some(host => this.isNodeInsideHost(activeElement, host))) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
getFocusHosts() {
|
|
183
|
+
const hosts = [];
|
|
184
|
+
if (this.element) {
|
|
185
|
+
hosts.push(this.element);
|
|
186
|
+
}
|
|
187
|
+
if (this.elementRef instanceof HTMLElement) {
|
|
188
|
+
hosts.push(this.elementRef);
|
|
189
|
+
const firstChild = this.elementRef.firstElementChild;
|
|
190
|
+
if (firstChild instanceof HTMLElement) {
|
|
191
|
+
hosts.push(firstChild);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return hosts;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Returns true when the given host (or, via the flat tree, one of its shadow descendants)
|
|
198
|
+
* currently contains a focused input-like element.
|
|
199
|
+
*/
|
|
200
|
+
hasFocusedInputDescendant(host) {
|
|
201
|
+
if (this.isInputLikeElement(host) && this.matchesFocus(host)) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
// `:focus-within` crosses shadow boundaries for the host, so it is a cheap guard that tells
|
|
205
|
+
// us whether focus lives anywhere inside this host before doing the deeper traversal.
|
|
206
|
+
if (typeof host.matches === 'function') {
|
|
207
|
+
try {
|
|
208
|
+
if (!host.matches(':focus-within')) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Selector unsupported in this environment; fall through to the traversal below.
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return this.findFocusedInputLikeElement(host) !== null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Walks the `:focus` chain from a tree scope, descending into open shadow roots, and returns
|
|
220
|
+
* the focused element when it is input-like.
|
|
221
|
+
*/
|
|
222
|
+
findFocusedInputLikeElement(root) {
|
|
223
|
+
let focused = null;
|
|
224
|
+
try {
|
|
225
|
+
focused = root.querySelector(':focus');
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
focused = null;
|
|
229
|
+
}
|
|
230
|
+
if (!(focused instanceof HTMLElement)) {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
if (this.isInputLikeElement(focused)) {
|
|
234
|
+
return focused;
|
|
235
|
+
}
|
|
236
|
+
if (focused.shadowRoot) {
|
|
237
|
+
return this.findFocusedInputLikeElement(focused.shadowRoot);
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
matchesFocus(element) {
|
|
242
|
+
if (typeof element.matches !== 'function') {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
return element.matches(':focus');
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
isInputLikeElement(element) {
|
|
253
|
+
const tag = element.tagName;
|
|
254
|
+
return (tag === 'INPUT' ||
|
|
255
|
+
tag === 'TEXTAREA' ||
|
|
256
|
+
tag === 'SELECT' ||
|
|
257
|
+
element.isContentEditable);
|
|
258
|
+
}
|
|
259
|
+
isNodeInsideHost(node, host) {
|
|
260
|
+
if (!node) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
let current = node;
|
|
264
|
+
while (current) {
|
|
265
|
+
if (current === host) {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
if (current.parentNode) {
|
|
269
|
+
current = current.parentNode;
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const root = current.getRootNode();
|
|
273
|
+
if (root instanceof ShadowRoot) {
|
|
274
|
+
current = root.host;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
getDeepActiveElement(root = document) {
|
|
282
|
+
const activeElement = root.activeElement;
|
|
283
|
+
if (!(activeElement instanceof HTMLElement)) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
if (activeElement.shadowRoot) {
|
|
287
|
+
const nested = this.getDeepActiveElement(activeElement.shadowRoot);
|
|
288
|
+
return nested ?? activeElement;
|
|
289
|
+
}
|
|
290
|
+
return activeElement;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Unmounts the dynamic object and performs cleanup.
|
|
294
|
+
* If a renderer is registered, delegates to renderer.onUnmount and captures returned state.
|
|
295
|
+
* Otherwise, simply removes from DOM.
|
|
296
|
+
* Called when object is deleted, viewport culled, or editor is unloading.
|
|
297
|
+
*/
|
|
298
|
+
unmount() {
|
|
299
|
+
if (!this.isMounted || !this.elementRef) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
// Try renderer-based unmount if renderer is registered
|
|
303
|
+
if (this.rendererKey) {
|
|
304
|
+
const renderer = KritzelDynamicObjectRendererRegistry.get(this.rendererKey);
|
|
305
|
+
if (renderer) {
|
|
306
|
+
// Capture any updated data returned by renderer
|
|
307
|
+
const updatedData = renderer.onUnmount({
|
|
308
|
+
object: this,
|
|
309
|
+
container: this.elementRef,
|
|
310
|
+
data: this.rendererData,
|
|
311
|
+
});
|
|
312
|
+
if (updatedData !== undefined) {
|
|
313
|
+
this.rendererData = updatedData;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
this.isMounted = false;
|
|
318
|
+
this.elementRef = null;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Returns whether the rendered content contains a scrollable element.
|
|
322
|
+
* Traverses light DOM, open shadow roots, and slotted content so nested
|
|
323
|
+
* framework components are detected as well.
|
|
324
|
+
*/
|
|
325
|
+
isElementScrollable() {
|
|
326
|
+
return !!KritzelHTMLHelper.findScrollableElement(this.element);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Creates a placeholder element when HTML deserialization fails.
|
|
330
|
+
* Used as fallback to ensure element is always defined.
|
|
331
|
+
* @returns A div element with placeholder styling
|
|
332
|
+
*/
|
|
333
|
+
createPlaceholder() {
|
|
334
|
+
const el = document.createElement('div');
|
|
335
|
+
el.textContent = '[Dynamic Object]';
|
|
336
|
+
el.style.border = '1px dashed #ccc';
|
|
337
|
+
el.style.display = 'flex';
|
|
338
|
+
el.style.alignItems = 'center';
|
|
339
|
+
el.style.justifyContent = 'center';
|
|
340
|
+
el.style.backgroundColor = '#f9f9f9';
|
|
341
|
+
el.style.color = '#999';
|
|
342
|
+
el.style.fontSize = '12px';
|
|
343
|
+
return el;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Resizes and repositions the dynamic object on the canvas.
|
|
347
|
+
* Updates both the internal state and the DOM element's inline styles.
|
|
348
|
+
* Syncs changes to Yjs for collaborative editing and cross-tab propagation.
|
|
349
|
+
* @param x - The new X position (translateX) in canvas coordinates.
|
|
350
|
+
* @param y - The new Y position (translateY) in canvas coordinates.
|
|
351
|
+
* @param width - The new width in pixels. Must be greater than 1.
|
|
352
|
+
* @param height - The new height in pixels. Must be greater than 1.
|
|
353
|
+
*/
|
|
354
|
+
resize(x, y, width, height) {
|
|
355
|
+
if (width <= 1 || height <= 1) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
this.width = width;
|
|
359
|
+
this.height = height;
|
|
360
|
+
this.translateX = x;
|
|
361
|
+
this.translateY = y;
|
|
362
|
+
if (this.element) {
|
|
363
|
+
this.element.style.width = `${width}px`;
|
|
364
|
+
this.element.style.height = `${height}px`;
|
|
365
|
+
}
|
|
366
|
+
// Update to sync changes to y.js and propagate to other tabs
|
|
367
|
+
this._core.store.objects.update(this);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Creates a deep copy of this dynamic object.
|
|
371
|
+
* The copy receives a new unique ID, is marked as unmounted,
|
|
372
|
+
* and contains a cloned copy of the underlying HTML element.
|
|
373
|
+
* @returns A new KritzelDynamicObject instance with copied properties and a cloned DOM element.
|
|
374
|
+
*/
|
|
375
|
+
copy() {
|
|
376
|
+
const copiedObject = Object.create(Object.getPrototypeOf(this));
|
|
377
|
+
Object.assign(copiedObject, this);
|
|
378
|
+
copiedObject.id = this.generateId();
|
|
379
|
+
copiedObject.isMounted = false;
|
|
380
|
+
copiedObject.isSelected = false;
|
|
381
|
+
copiedObject.isHovered = false;
|
|
382
|
+
copiedObject.isInteractive = false;
|
|
383
|
+
copiedObject.resizing = false;
|
|
384
|
+
copiedObject.markedForRemoval = false;
|
|
385
|
+
copiedObject.isVisible = true;
|
|
386
|
+
copiedObject.element = this.element.cloneNode(true);
|
|
387
|
+
return copiedObject;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Serializes the dynamic object to a plain JavaScript object for persistence.
|
|
391
|
+
* Stores HTML as a string (safe for JSON/Yjs) and captures dimension metadata.
|
|
392
|
+
* @returns A serializable object with htmlString and dimension snapshots
|
|
393
|
+
*/
|
|
394
|
+
serialize() {
|
|
395
|
+
const { _core, _elementRef, element, totalWidth, totalHeight, isSelected, isHovered, isMounted, isInteractive, resizing, markedForRemoval, isVisible, ...props } = this;
|
|
396
|
+
const cloned = structuredClone(props);
|
|
397
|
+
// Include rendererKey and rendererData for lifecycle-driven rendering
|
|
398
|
+
cloned.rendererKey = this.rendererKey;
|
|
399
|
+
cloned.rendererData = this.rendererData;
|
|
400
|
+
// Store HTML as string for fallback/compatibility when renderer is unavailable
|
|
401
|
+
cloned.htmlString = element ? element.outerHTML : '';
|
|
402
|
+
// Capture dimension snapshot at serialization time
|
|
403
|
+
cloned.serializedWidth = this.width;
|
|
404
|
+
cloned.serializedHeight = this.height;
|
|
405
|
+
return cloned;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Deserializes the dynamic object from a plain object.
|
|
409
|
+
* Reconstructs the element from stored HTML string with fallback to placeholder.
|
|
410
|
+
* @template T - The expected return type
|
|
411
|
+
* @param object - The serialized object data to restore from
|
|
412
|
+
* @returns This instance cast to type T
|
|
413
|
+
*/
|
|
414
|
+
deserialize(object) {
|
|
415
|
+
super.deserialize(object);
|
|
416
|
+
// Legacy compatibility: this deprecated field should not persist on revived objects.
|
|
417
|
+
delete this.allowEmbeddedInteraction;
|
|
418
|
+
// Restore renderer metadata
|
|
419
|
+
this.rendererKey = object.rendererKey ?? null;
|
|
420
|
+
this.rendererData = object.rendererData;
|
|
421
|
+
// Reconstruct element from stored HTML, or create placeholder
|
|
422
|
+
if (object.htmlString) {
|
|
423
|
+
try {
|
|
424
|
+
const temp = document.createElement('div');
|
|
425
|
+
temp.innerHTML = object.htmlString;
|
|
426
|
+
this.element = temp.firstElementChild || this.createPlaceholder();
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
this.element = this.createPlaceholder();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
this.element = this.createPlaceholder();
|
|
434
|
+
}
|
|
435
|
+
return this;
|
|
436
|
+
}
|
|
437
|
+
}
|