@kritzel/engine 0.4.31 → 0.4.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE.md +49 -49
  2. package/dist/cjs/{engine.constants-CakmdKMW.js → engine.constants-VyFrUl1W.js} +627 -129
  3. package/dist/cjs/{index-BbbWU2aN.js → index-BP5Iy6FQ.js} +27 -9
  4. package/dist/cjs/index.cjs.js +4 -2
  5. package/dist/cjs/kritzel-awareness-cursors_5.cjs.entry.js +257 -113
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/stencil.cjs.js +3 -3
  8. package/dist/collection/classes/core/core.class.js +40 -32
  9. package/dist/collection/classes/core/reviver.class.js +4 -0
  10. package/dist/collection/classes/core/store.class.js +10 -3
  11. package/dist/collection/classes/managers/cursor.manager.js +10 -5
  12. package/dist/collection/classes/objects/dynamic-object.class.js +18 -5
  13. package/dist/collection/classes/objects/iframe.class.js +447 -0
  14. package/dist/collection/classes/registries/icon-registry.class.js +100 -67
  15. package/dist/collection/classes/tools/selection-tool.class.js +3 -3
  16. package/dist/collection/collection-manifest.json +4 -2
  17. package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.css +115 -115
  18. package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.js +1 -1
  19. package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -10
  20. package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
  21. package/dist/collection/components/kritzel-engine/kritzel-engine.css +80 -80
  22. package/dist/collection/components/kritzel-engine/kritzel-engine.js +196 -44
  23. package/dist/collection/components/kritzel-icon/kritzel-icon.css +18 -18
  24. package/dist/collection/components/kritzel-icon/kritzel-icon.js +25 -4
  25. package/dist/collection/components/kritzel-watermark/kritzel-watermark.css +29 -29
  26. package/dist/collection/components/kritzel-watermark/kritzel-watermark.js +2 -2
  27. package/dist/collection/constants/version.js +1 -1
  28. package/dist/collection/helpers/cursor.helper.js +8 -8
  29. package/dist/collection/helpers/object.helper.js +13 -0
  30. package/dist/collection/helpers/svg-export.helper.js +55 -41
  31. package/dist/collection/helpers/wheel.helper.js +1 -7
  32. package/dist/collection/index.js +3 -0
  33. package/dist/collection/interfaces/embedded-object.interface.js +1 -0
  34. package/dist/collection/themes/dark-theme.js +1 -5
  35. package/dist/collection/themes/light-theme.js +1 -6
  36. package/dist/components/index.js +7 -7
  37. package/dist/components/kritzel-awareness-cursors.js +1 -1
  38. package/dist/components/kritzel-cursor-trail.js +1 -1
  39. package/dist/components/kritzel-engine.js +755 -161
  40. package/dist/components/kritzel-icon.js +1 -1
  41. package/dist/components/kritzel-watermark.js +1 -1
  42. package/dist/components/{p-B2Htv9ou.js → p-BHVbfJrf.js} +3 -3
  43. package/dist/components/{p-YP8wAcF4.js → p-BTU9qcSW.js} +2 -2
  44. package/dist/components/{p-CfSx6HU_.js → p-BWfRbEIq.js} +16 -4
  45. package/dist/components/p-NAEiq8CK.js +214 -0
  46. package/dist/components/{p-BvRGQvVI.js → p-k0LxV9Bg.js} +18 -14
  47. package/dist/esm/{engine.constants-Bl5-pbq-.js → engine.constants-BHTr2qPx.js} +626 -130
  48. package/dist/esm/{index-BU9Mv7y0.js → index-C8PnHbLt.js} +27 -10
  49. package/dist/esm/index.js +3 -3
  50. package/dist/esm/kritzel-awareness-cursors_5.entry.js +257 -113
  51. package/dist/esm/loader.js +3 -3
  52. package/dist/esm/stencil.js +4 -4
  53. package/dist/stencil/index.esm.js +3 -3
  54. package/dist/stencil/{p-f0a8b7af.entry.js → p-40097a38.entry.js} +257 -113
  55. package/dist/stencil/{p-Bl5-pbq-.js → p-BHTr2qPx.js} +626 -130
  56. package/dist/stencil/{p-BU9Mv7y0.js → p-C8PnHbLt.js} +27 -10
  57. package/dist/stencil/stencil.esm.js +4 -4
  58. package/dist/types/classes/core/store.class.d.ts +3 -2
  59. package/dist/types/classes/objects/dynamic-object.class.d.ts +4 -2
  60. package/dist/types/classes/objects/iframe.class.d.ts +76 -0
  61. package/dist/types/classes/registries/icon-registry.class.d.ts +75 -6
  62. package/dist/types/components/kritzel-engine/kritzel-engine.d.ts +14 -1
  63. package/dist/types/components/kritzel-icon/kritzel-icon.d.ts +5 -1
  64. package/dist/types/components.d.ts +26 -8
  65. package/dist/types/constants/version.d.ts +1 -1
  66. package/dist/types/helpers/cursor.helper.d.ts +2 -1
  67. package/dist/types/helpers/object.helper.d.ts +2 -0
  68. package/dist/types/helpers/svg-export.helper.d.ts +1 -0
  69. package/dist/types/helpers/wheel.helper.d.ts +2 -2
  70. package/dist/types/index.d.ts +3 -0
  71. package/dist/types/interfaces/context-menu-item.interface.d.ts +2 -1
  72. package/dist/types/interfaces/dynamic-object-renderer.interface.d.ts +7 -0
  73. package/dist/types/interfaces/embedded-object.interface.d.ts +9 -0
  74. package/dist/types/interfaces/engine-state.interface.d.ts +3 -2
  75. package/dist/types/interfaces/login-config.interface.d.ts +2 -1
  76. package/dist/types/interfaces/master-detail.interface.d.ts +2 -1
  77. package/dist/types/interfaces/menu-item.interface.d.ts +2 -1
  78. package/dist/types/interfaces/theme.interface.d.ts +6 -7
  79. package/dist/types/interfaces/tool.interface.d.ts +9 -0
  80. package/dist/types/interfaces/toolbar-item.interface.d.ts +3 -2
  81. package/dist/types/stencil-public-runtime.d.ts +61 -55
  82. package/package.json +3 -1
  83. package/readme.md +10 -10
  84. package/dist/components/p-fx6msYHJ.js +0 -167
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BbbWU2aN.js');
3
+ var index = require('./index-BP5Iy6FQ.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["kritzel-awareness-cursors_5.cjs",[[513,"kritzel-engine",{"workspaces":[16],"editorId":[1,"editor-id"],"activeWorkspaceId":[1,"active-workspace-id"],"syncConfig":[16],"assetStorageConfig":[16],"user":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"licenseKey":[1,"license-key"],"themes":[16],"locale":[1],"locales":[16],"fallbackLocale":[1,"fallback-locale"],"viewportBoundaryLeft":[2,"viewport-boundary-left"],"viewportBoundaryRight":[2,"viewport-boundary-right"],"viewportBoundaryTop":[2,"viewport-boundary-top"],"viewportBoundaryBottom":[2,"viewport-boundary-bottom"],"debugInfo":[16],"isPanningEnabled":[4,"is-panning-enabled"],"isZoomingEnabled":[4,"is-zooming-enabled"],"forceUpdate":[32],"triggerSelectionChange":[64],"beginSceneBootstrap":[64],"endSceneBootstrap":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"cut":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"alignObjects":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"openContextMenu":[64],"getObjectById":[64],"getAllObjects":[64],"findObjects":[64],"getObjectsTotalCount":[64],"addObject":[64],"addObjects":[64],"updateObject":[64],"removeObject":[64],"removeObjects":[64],"getSelectedObjects":[64],"getDisplayableShortcuts":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"panToObject":[64],"backToContent":[64],"centerAllObjects":[64],"centerObjects":[64],"setViewport":[64],"panTo":[64],"zoomTo":[64],"zoomIn":[64],"zoomOut":[64],"getViewport":[64],"screenToWorld":[64],"worldToScreen":[64],"getObjectsInViewport":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"getSelectedObjectSupportedExportFormats":[64],"canExportSelectedObjectAs":[64],"exportSelectedObject":[64],"exportAsJson":[64],"importFromJson":[64],"loadObjectsFromJson":[64],"downloadAsJson":[64],"importFromFile":[64],"cancelImportFromFile":[64],"setActiveWorkspace":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64],"getIsPublic":[64],"loadSharedWorkspace":[64],"reinitSync":[64],"saveSettings":[64],"loadSettings":[64],"registerLocales":[64],"configureLocales":[64],"setLocale":[64],"getLocale":[64],"getAvailableLocales":[64],"getAvailableLocaleOptions":[64],"t":[64],"getResolvedTerms":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"pointerleave","handlePointerLeave"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[8,"copy","handleCopy"],[8,"cut","handleCut"],[8,"paste","handlePaste"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspaces":[{"onWorkspacesPropChange":0}],"activeWorkspaceId":[{"onActiveWorkspaceIdChange":0}],"syncConfig":[{"onSyncConfigChange":0}],"assetStorageConfig":[{"onAssetStorageConfigChange":0}],"user":[{"onUserChange":0}],"globalContextMenuItems":[{"onGlobalContextMenuItemsChange":0}],"objectContextMenuItems":[{"onObjectContextMenuItemsChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}],"licenseKey":[{"onLicenseKeyChange":0}],"themes":[{"onThemesChange":0}],"locale":[{"onLocaleChange":0}],"locales":[{"onLocalesChange":0}],"fallbackLocale":[{"onFallbackLocaleChange":0}],"viewportBoundaryLeft":[{"onViewportBoundaryLeftChange":0}],"viewportBoundaryRight":[{"onViewportBoundaryRightChange":0}],"viewportBoundaryTop":[{"onViewportBoundaryTopChange":0}],"viewportBoundaryBottom":[{"onViewportBoundaryBottomChange":0}],"debugInfo":[{"onDebugInfoChange":0}]}],[513,"kritzel-awareness-cursors",{"core":[16],"showEdgeIndicators":[4,"show-edge-indicators"],"edgeIndicatorPadding":[2,"edge-indicator-padding"],"remoteCursors":[32],"objectVersion":[32]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}],[513,"kritzel-watermark",{"core":[16],"label":[1]}]]]], options);
9
+ return index.bootstrapLazy([["kritzel-awareness-cursors_5.cjs",[[513,"kritzel-engine",{"workspaces":[16],"editorId":[1,"editor-id"],"activeWorkspaceId":[1,"active-workspace-id"],"syncConfig":[16],"assetStorageConfig":[16],"user":[16],"tools":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"licenseKey":[1,"license-key"],"themes":[16],"locale":[1],"locales":[16],"fallbackLocale":[1,"fallback-locale"],"viewportBoundaryLeft":[2,"viewport-boundary-left"],"viewportBoundaryRight":[2,"viewport-boundary-right"],"viewportBoundaryTop":[2,"viewport-boundary-top"],"viewportBoundaryBottom":[2,"viewport-boundary-bottom"],"debugInfo":[16],"isPanningEnabled":[4,"is-panning-enabled"],"isZoomingEnabled":[4,"is-zooming-enabled"],"forceUpdate":[32],"triggerSelectionChange":[64],"beginSceneBootstrap":[64],"endSceneBootstrap":[64],"registerTool":[64],"setActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"cut":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"alignObjects":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"openContextMenu":[64],"getObjectById":[64],"getAllObjects":[64],"findObjects":[64],"getObjectsTotalCount":[64],"addObject":[64],"addObjects":[64],"updateObject":[64],"removeObject":[64],"removeObjects":[64],"getSelectedObjects":[64],"getDisplayableShortcuts":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"panToObject":[64],"backToContent":[64],"centerAllObjects":[64],"centerObjects":[64],"setViewport":[64],"panTo":[64],"zoomTo":[64],"zoomIn":[64],"zoomOut":[64],"getViewport":[64],"screenToWorld":[64],"worldToScreen":[64],"getObjectsInViewport":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"getSelectedObjectSupportedExportFormats":[64],"canExportSelectedObjectAs":[64],"exportSelectedObject":[64],"exportAsJson":[64],"importFromJson":[64],"loadObjectsFromJson":[64],"downloadAsJson":[64],"importFromFile":[64],"cancelImportFromFile":[64],"setActiveWorkspace":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64],"getIsPublic":[64],"loadSharedWorkspace":[64],"reinitSync":[64],"saveSettings":[64],"loadSettings":[64],"registerLocales":[64],"configureLocales":[64],"setLocale":[64],"getLocale":[64],"getAvailableLocales":[64],"getAvailableLocaleOptions":[64],"t":[64],"getResolvedTerms":[64],"getTool":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"pointerleave","handlePointerLeave"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[8,"copy","handleCopy"],[8,"cut","handleCut"],[8,"paste","handlePaste"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspaces":[{"onWorkspacesPropChange":0}],"activeWorkspaceId":[{"onActiveWorkspaceIdChange":0}],"syncConfig":[{"onSyncConfigChange":0}],"assetStorageConfig":[{"onAssetStorageConfigChange":0}],"user":[{"onUserChange":0}],"tools":[{"onToolsChange":0}],"globalContextMenuItems":[{"onGlobalContextMenuItemsChange":0}],"objectContextMenuItems":[{"onObjectContextMenuItemsChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}],"licenseKey":[{"onLicenseKeyChange":0}],"themes":[{"onThemesChange":0}],"locale":[{"onLocaleChange":0}],"locales":[{"onLocalesChange":0}],"fallbackLocale":[{"onFallbackLocaleChange":0}],"viewportBoundaryLeft":[{"onViewportBoundaryLeftChange":0}],"viewportBoundaryRight":[{"onViewportBoundaryRightChange":0}],"viewportBoundaryTop":[{"onViewportBoundaryTopChange":0}],"viewportBoundaryBottom":[{"onViewportBoundaryBottomChange":0}],"debugInfo":[{"onDebugInfoChange":0}]}],[513,"kritzel-awareness-cursors",{"core":[16],"showEdgeIndicators":[4,"show-edge-indicators"],"edgeIndicatorPadding":[2,"edge-indicator-padding"],"remoteCursors":[32],"objectVersion":[32]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}],[513,"kritzel-watermark",{"core":[16],"label":[1]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BbbWU2aN.js');
3
+ var index = require('./index-BP5Iy6FQ.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
7
  /*
8
- Stencil Client Patch Browser v4.44.2 | MIT Licensed | https://stenciljs.com
8
+ Stencil Client Patch Browser v4.45.1 | MIT Licensed | https://stenciljs.com
9
9
  */
10
10
 
11
11
  var patchBrowser = () => {
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["kritzel-awareness-cursors_5.cjs",[[513,"kritzel-engine",{"workspaces":[16],"editorId":[1,"editor-id"],"activeWorkspaceId":[1,"active-workspace-id"],"syncConfig":[16],"assetStorageConfig":[16],"user":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"licenseKey":[1,"license-key"],"themes":[16],"locale":[1],"locales":[16],"fallbackLocale":[1,"fallback-locale"],"viewportBoundaryLeft":[2,"viewport-boundary-left"],"viewportBoundaryRight":[2,"viewport-boundary-right"],"viewportBoundaryTop":[2,"viewport-boundary-top"],"viewportBoundaryBottom":[2,"viewport-boundary-bottom"],"debugInfo":[16],"isPanningEnabled":[4,"is-panning-enabled"],"isZoomingEnabled":[4,"is-zooming-enabled"],"forceUpdate":[32],"triggerSelectionChange":[64],"beginSceneBootstrap":[64],"endSceneBootstrap":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"cut":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"alignObjects":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"openContextMenu":[64],"getObjectById":[64],"getAllObjects":[64],"findObjects":[64],"getObjectsTotalCount":[64],"addObject":[64],"addObjects":[64],"updateObject":[64],"removeObject":[64],"removeObjects":[64],"getSelectedObjects":[64],"getDisplayableShortcuts":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"panToObject":[64],"backToContent":[64],"centerAllObjects":[64],"centerObjects":[64],"setViewport":[64],"panTo":[64],"zoomTo":[64],"zoomIn":[64],"zoomOut":[64],"getViewport":[64],"screenToWorld":[64],"worldToScreen":[64],"getObjectsInViewport":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"getSelectedObjectSupportedExportFormats":[64],"canExportSelectedObjectAs":[64],"exportSelectedObject":[64],"exportAsJson":[64],"importFromJson":[64],"loadObjectsFromJson":[64],"downloadAsJson":[64],"importFromFile":[64],"cancelImportFromFile":[64],"setActiveWorkspace":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64],"getIsPublic":[64],"loadSharedWorkspace":[64],"reinitSync":[64],"saveSettings":[64],"loadSettings":[64],"registerLocales":[64],"configureLocales":[64],"setLocale":[64],"getLocale":[64],"getAvailableLocales":[64],"getAvailableLocaleOptions":[64],"t":[64],"getResolvedTerms":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"pointerleave","handlePointerLeave"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[8,"copy","handleCopy"],[8,"cut","handleCut"],[8,"paste","handlePaste"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspaces":[{"onWorkspacesPropChange":0}],"activeWorkspaceId":[{"onActiveWorkspaceIdChange":0}],"syncConfig":[{"onSyncConfigChange":0}],"assetStorageConfig":[{"onAssetStorageConfigChange":0}],"user":[{"onUserChange":0}],"globalContextMenuItems":[{"onGlobalContextMenuItemsChange":0}],"objectContextMenuItems":[{"onObjectContextMenuItemsChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}],"licenseKey":[{"onLicenseKeyChange":0}],"themes":[{"onThemesChange":0}],"locale":[{"onLocaleChange":0}],"locales":[{"onLocalesChange":0}],"fallbackLocale":[{"onFallbackLocaleChange":0}],"viewportBoundaryLeft":[{"onViewportBoundaryLeftChange":0}],"viewportBoundaryRight":[{"onViewportBoundaryRightChange":0}],"viewportBoundaryTop":[{"onViewportBoundaryTopChange":0}],"viewportBoundaryBottom":[{"onViewportBoundaryBottomChange":0}],"debugInfo":[{"onDebugInfoChange":0}]}],[513,"kritzel-awareness-cursors",{"core":[16],"showEdgeIndicators":[4,"show-edge-indicators"],"edgeIndicatorPadding":[2,"edge-indicator-padding"],"remoteCursors":[32],"objectVersion":[32]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}],[513,"kritzel-watermark",{"core":[16],"label":[1]}]]]], options);
22
+ return index.bootstrapLazy([["kritzel-awareness-cursors_5.cjs",[[513,"kritzel-engine",{"workspaces":[16],"editorId":[1,"editor-id"],"activeWorkspaceId":[1,"active-workspace-id"],"syncConfig":[16],"assetStorageConfig":[16],"user":[16],"tools":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"licenseKey":[1,"license-key"],"themes":[16],"locale":[1],"locales":[16],"fallbackLocale":[1,"fallback-locale"],"viewportBoundaryLeft":[2,"viewport-boundary-left"],"viewportBoundaryRight":[2,"viewport-boundary-right"],"viewportBoundaryTop":[2,"viewport-boundary-top"],"viewportBoundaryBottom":[2,"viewport-boundary-bottom"],"debugInfo":[16],"isPanningEnabled":[4,"is-panning-enabled"],"isZoomingEnabled":[4,"is-zooming-enabled"],"forceUpdate":[32],"triggerSelectionChange":[64],"beginSceneBootstrap":[64],"endSceneBootstrap":[64],"registerTool":[64],"setActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"cut":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"alignObjects":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"openContextMenu":[64],"getObjectById":[64],"getAllObjects":[64],"findObjects":[64],"getObjectsTotalCount":[64],"addObject":[64],"addObjects":[64],"updateObject":[64],"removeObject":[64],"removeObjects":[64],"getSelectedObjects":[64],"getDisplayableShortcuts":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"panToObject":[64],"backToContent":[64],"centerAllObjects":[64],"centerObjects":[64],"setViewport":[64],"panTo":[64],"zoomTo":[64],"zoomIn":[64],"zoomOut":[64],"getViewport":[64],"screenToWorld":[64],"worldToScreen":[64],"getObjectsInViewport":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"getSelectedObjectSupportedExportFormats":[64],"canExportSelectedObjectAs":[64],"exportSelectedObject":[64],"exportAsJson":[64],"importFromJson":[64],"loadObjectsFromJson":[64],"downloadAsJson":[64],"importFromFile":[64],"cancelImportFromFile":[64],"setActiveWorkspace":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64],"getIsPublic":[64],"loadSharedWorkspace":[64],"reinitSync":[64],"saveSettings":[64],"loadSettings":[64],"registerLocales":[64],"configureLocales":[64],"setLocale":[64],"getLocale":[64],"getAvailableLocales":[64],"getAvailableLocaleOptions":[64],"t":[64],"getResolvedTerms":[64],"getTool":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"pointerleave","handlePointerLeave"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[8,"copy","handleCopy"],[8,"cut","handleCut"],[8,"paste","handlePaste"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspaces":[{"onWorkspacesPropChange":0}],"activeWorkspaceId":[{"onActiveWorkspaceIdChange":0}],"syncConfig":[{"onSyncConfigChange":0}],"assetStorageConfig":[{"onAssetStorageConfigChange":0}],"user":[{"onUserChange":0}],"tools":[{"onToolsChange":0}],"globalContextMenuItems":[{"onGlobalContextMenuItemsChange":0}],"objectContextMenuItems":[{"onObjectContextMenuItemsChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}],"licenseKey":[{"onLicenseKeyChange":0}],"themes":[{"onThemesChange":0}],"locale":[{"onLocaleChange":0}],"locales":[{"onLocalesChange":0}],"fallbackLocale":[{"onFallbackLocaleChange":0}],"viewportBoundaryLeft":[{"onViewportBoundaryLeftChange":0}],"viewportBoundaryRight":[{"onViewportBoundaryRightChange":0}],"viewportBoundaryTop":[{"onViewportBoundaryTopChange":0}],"viewportBoundaryBottom":[{"onViewportBoundaryBottomChange":0}],"debugInfo":[{"onDebugInfoChange":0}]}],[513,"kritzel-awareness-cursors",{"core":[16],"showEdgeIndicators":[4,"show-edge-indicators"],"edgeIndicatorPadding":[2,"edge-indicator-padding"],"remoteCursors":[32],"objectVersion":[32]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}],[513,"kritzel-watermark",{"core":[16],"label":[1]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -18,6 +18,7 @@ import { KritzelLicenseManager } from "../managers/license.manager";
18
18
  import { KritzelBrowserPermissionManager } from "../managers/browser-permission.manager";
19
19
  import { KritzelClipboardManager } from "../managers/clipboard.manager";
20
20
  import { KritzelClassHelper } from "../../helpers/class.helper";
21
+ import { ObjectHelper } from "../../helpers/object.helper";
21
22
  /**
22
23
  * Central orchestrator class for the Kritzel canvas system.
23
24
  * Manages workspaces, objects, selection, clipboard operations, and coordinates
@@ -357,7 +358,7 @@ export class KritzelCore {
357
358
  this._store.state.translateY = viewportHeight / 2 - (viewport.centerWorldY ?? 0) * scale;
358
359
  this._store.state.scale = scale;
359
360
  await objectsMap.initialize(this, activeWorkspace.id, this._syncConfig);
360
- this.seedWorkspaceObjects(activeWorkspace, objectsMap);
361
+ await this.seedWorkspaceObjects(activeWorkspace, objectsMap);
361
362
  // Set local user in awareness after object map is initialized
362
363
  if (this._user) {
363
364
  objectsMap.setLocalUser(this._user);
@@ -371,15 +372,21 @@ export class KritzelCore {
371
372
  this.engine.emitObjectsChange();
372
373
  this.rerender();
373
374
  }
374
- seedWorkspaceObjects(workspace, objectsMap) {
375
+ async seedWorkspaceObjects(workspace, objectsMap) {
375
376
  if (!workspace.objects?.length) {
376
377
  return;
377
378
  }
379
+ const pendingObjects = workspace.objects.filter(object => !objectsMap.findById(object.id));
380
+ // Mirrors engine.addObject()/addObjects(): image asset upload is async and must
381
+ // happen before the (synchronous) Yjs transaction that inserts the objects.
382
+ for (const object of pendingObjects) {
383
+ object._core = this;
384
+ if (KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
385
+ await object.prepareForInsert();
386
+ }
387
+ }
378
388
  objectsMap.transaction(() => {
379
- for (const object of workspace.objects) {
380
- if (objectsMap.findById(object.id)) {
381
- continue;
382
- }
389
+ for (const object of pendingObjects) {
383
390
  this.prepareObjectForWorkspace(object, workspace.id, this._store.currentZIndex, this._store.state.scale);
384
391
  objectsMap.insert(object);
385
392
  }
@@ -418,16 +425,30 @@ export class KritzelCore {
418
425
  * @param scaleFallback - Scale applied to objects that do not define one
419
426
  * @returns The objects that were added, updated and removed
420
427
  */
421
- reconcileWorkspaceObjects(objectsMap, workspaceId, desiredObjects, nextZIndex, scaleFallback) {
428
+ async reconcileWorkspaceObjects(objectsMap, workspaceId, desiredObjects, nextZIndex, scaleFallback) {
422
429
  const existingObjects = objectsMap.allObjects().filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KritzelSelectionBox));
423
430
  const existingById = new Map(existingObjects.map(object => [object.id, object]));
424
431
  const desiredIds = new Set();
425
432
  const diff = { added: [], updated: [], removed: [] };
433
+ // Assign IDs up front so the insert-vs-update lookup below is stable, and so the
434
+ // async image-prepare pass and the (synchronous) transaction agree on identity.
435
+ for (const object of desiredObjects) {
436
+ if (!object.id) {
437
+ object.id = object.generateId();
438
+ }
439
+ }
440
+ // Mirrors engine.addObject()/addObjects(): image asset upload is async and must
441
+ // happen before the (synchronous) Yjs transaction that inserts the objects.
442
+ for (const object of desiredObjects) {
443
+ const existingObject = existingById.get(object.id);
444
+ const isNewOrReplaced = !existingObject || existingObject !== object;
445
+ if (isNewOrReplaced && KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
446
+ object._core = this;
447
+ await object.prepareForInsert();
448
+ }
449
+ }
426
450
  objectsMap.transaction(() => {
427
451
  for (const object of desiredObjects) {
428
- if (!object.id) {
429
- object.id = object.generateId();
430
- }
431
452
  desiredIds.add(object.id);
432
453
  const existingObject = existingById.get(object.id);
433
454
  if (!existingObject) {
@@ -465,7 +486,7 @@ export class KritzelCore {
465
486
  * object set stays exactly what the caller declared.
466
487
  */
467
488
  detachObject(object) {
468
- if (KritzelClassHelper.isInstanceOf(object, 'KritzelDynamicObject')) {
489
+ if (ObjectHelper.isKritzelEmbeddedObject(object)) {
469
490
  object.unmount();
470
491
  }
471
492
  object.isMounted = false;
@@ -641,13 +662,13 @@ export class KritzelCore {
641
662
  activeWorkspace.viewport = { centerWorldX, centerWorldY, scale };
642
663
  }
643
664
  }
644
- applyObjectsToActiveWorkspace(workspace, desiredObjects) {
665
+ async applyObjectsToActiveWorkspace(workspace, desiredObjects) {
645
666
  const objectsMap = this._store.objects;
646
667
  if (!objectsMap) {
647
668
  return null;
648
669
  }
649
670
  this.clearSelection();
650
- const diff = this.reconcileWorkspaceObjects(objectsMap, workspace.id, desiredObjects, () => this._store.currentZIndex, this._store.state.scale);
671
+ const diff = await this.reconcileWorkspaceObjects(objectsMap, workspace.id, desiredObjects, () => this._store.currentZIndex, this._store.state.scale);
651
672
  this._anchorManager.rebuildIndex();
652
673
  this.rerender();
653
674
  return diff;
@@ -666,7 +687,7 @@ export class KritzelCore {
666
687
  try {
667
688
  await objectsMap.initialize(this, workspace.id, this._syncConfig, { headless: true, workspaceName: workspace.name });
668
689
  await objectsMap.whenNetworkSynced();
669
- return this.reconcileWorkspaceObjects(objectsMap, workspace.id, desiredObjects, () => this.nextZIndexOf(objectsMap), this._store.state.scale);
690
+ return await this.reconcileWorkspaceObjects(objectsMap, workspace.id, desiredObjects, () => this.nextZIndexOf(objectsMap), this._store.state.scale);
670
691
  }
671
692
  finally {
672
693
  objectsMap.destroy();
@@ -752,8 +773,7 @@ export class KritzelCore {
752
773
  this.removeObject(child);
753
774
  });
754
775
  }
755
- // Unmount dynamic objects before removal
756
- if (KritzelClassHelper.isInstanceOf(object, 'KritzelDynamicObject')) {
776
+ if (ObjectHelper.isKritzelEmbeddedObject(object)) {
757
777
  object.unmount();
758
778
  }
759
779
  // Handle anchor cleanup
@@ -799,14 +819,8 @@ export class KritzelCore {
799
819
  this.removeLocalSelectionGroups();
800
820
  this.removeSelectionBox();
801
821
  for (const object of selectionGroup.objects ?? []) {
802
- if (KritzelClassHelper.isInstanceOf(object, 'KritzelDynamicObject')) {
803
- const dynamicObject = object;
804
- if (typeof dynamicObject.setIsInteractive === 'function') {
805
- dynamicObject.setIsInteractive(true);
806
- }
807
- else {
808
- dynamicObject.isInteractive = true;
809
- }
822
+ if (ObjectHelper.isKritzelEmbeddedObject(object)) {
823
+ object.setIsInteractive(true);
810
824
  }
811
825
  }
812
826
  this._store.objects.insert(selectionGroup);
@@ -827,14 +841,8 @@ export class KritzelCore {
827
841
  teardownSelectionGroup(selectionGroup) {
828
842
  selectionGroup.deselectAllChildren?.();
829
843
  for (const object of selectionGroup.objects ?? []) {
830
- if (KritzelClassHelper.isInstanceOf(object, 'KritzelDynamicObject')) {
831
- const dynamicObject = object;
832
- if (typeof dynamicObject.setIsInteractive === 'function') {
833
- dynamicObject.setIsInteractive(false);
834
- }
835
- else {
836
- dynamicObject.isInteractive = false;
837
- }
844
+ if (ObjectHelper.isKritzelEmbeddedObject(object)) {
845
+ object.setIsInteractive(false);
838
846
  }
839
847
  }
840
848
  }
@@ -13,6 +13,7 @@ import { KritzelSelectionTool } from "../tools/selection-tool.class";
13
13
  import { KritzelTextTool } from "../tools/text-tool.class";
14
14
  import { KritzelShapeTool } from "../tools/shape-tool.class";
15
15
  import { KritzelDynamicObject } from "../objects/dynamic-object.class";
16
+ import { KritzelIframeObject } from "../objects/iframe.class";
16
17
  import { KritzelWorkspace } from "./workspace.class";
17
18
  /**
18
19
  * Handles deserialization/revival of Kritzel objects from plain JavaScript objects.
@@ -76,6 +77,9 @@ export class KritzelReviver {
76
77
  case 'KritzelDynamicObject':
77
78
  revivedObj = KritzelDynamicObject.create(this._core).deserialize(obj);
78
79
  break;
80
+ case 'KritzelIframeObject':
81
+ revivedObj = KritzelIframeObject.create(this._core).deserialize(obj);
82
+ break;
79
83
  case 'KritzelSelectionGroup':
80
84
  revivedObj = KritzelSelectionGroup.create(this._core).deserialize(obj);
81
85
  break;
@@ -4,7 +4,7 @@ import { KritzelText } from "../objects/text.class";
4
4
  import { KritzelShape } from "../objects/shape.class";
5
5
  import { KritzelPath } from "../objects/path.class";
6
6
  import { KritzelLine } from "../objects/line.class";
7
- import { KritzelClassHelper } from "../../helpers/class.helper";
7
+ import { ObjectHelper } from "../../helpers/object.helper";
8
8
  import { KritzelObjectMap } from "../structures/object-map.structure";
9
9
  /**
10
10
  * Central state management store for the Kritzel engine.
@@ -227,9 +227,16 @@ export class KritzelStore {
227
227
  * Gets the currently selected dynamic object whose focused descendant is an input-like element.
228
228
  * @returns The interactive dynamic object with focused input-like content, or null if none matches
229
229
  */
230
+ get activeInteractiveEmbeddedObject() {
231
+ for (const object of this.selectedObjects) {
232
+ if (ObjectHelper.isKritzelEmbeddedObject(object) && object.hasFocusedInputElement()) {
233
+ return object;
234
+ }
235
+ }
236
+ return null;
237
+ }
230
238
  get activeInteractiveDynamicObject() {
231
- const interactiveDynamicObject = this.selectedObjects.find(object => KritzelClassHelper.isInstanceOf(object, 'KritzelDynamicObject') && object.hasFocusedInputElement());
232
- return interactiveDynamicObject ?? null;
239
+ return this.activeInteractiveEmbeddedObject;
233
240
  }
234
241
  /**
235
242
  * Gets the path currently being drawn (not yet completed).
@@ -24,11 +24,13 @@ export class KritzelCursorManager {
24
24
  // Reset cursor on old target
25
25
  if (this._targetElement) {
26
26
  this._targetElement.style.cursor = '';
27
+ this._targetElement.style.removeProperty('--kritzel-global-default-cursor');
27
28
  this._targetElement.style.removeProperty('--kritzel-global-pointer-cursor');
28
29
  }
29
30
  this._targetElement = element;
30
31
  // Set the pointer cursor CSS variable for child components to use
31
32
  if (this._targetElement) {
33
+ this._targetElement.style.setProperty('--kritzel-global-default-cursor', KritzelCursorHelper.getCursor({ iconName: 'default' }));
32
34
  this._targetElement.style.setProperty('--kritzel-global-pointer-cursor', KritzelCursorHelper.getPointerCursor());
33
35
  }
34
36
  }
@@ -73,8 +75,10 @@ export class KritzelCursorManager {
73
75
  if (!this._shadowRoot)
74
76
  return;
75
77
  const elementsAtPoint = this._shadowRoot.elementsFromPoint(ev.clientX, ev.clientY);
76
- if (!elementsAtPoint || elementsAtPoint.length === 0)
78
+ if (!elementsAtPoint || elementsAtPoint.length === 0) {
79
+ this.resetToDefault();
77
80
  return;
81
+ }
78
82
  // Check for resize handle overlays (selection group)
79
83
  const resizeHandleOverlay = elementsAtPoint.find(el => el.classList.contains('resize-handle-overlay'));
80
84
  if (resizeHandleOverlay) {
@@ -84,19 +88,19 @@ export class KritzelCursorManager {
84
88
  const isTopLeft = resizeHandleOverlay.classList.contains('top-left');
85
89
  const isBottomRight = resizeHandleOverlay.classList.contains('bottom-right');
86
90
  const rotationOffset = (isTopLeft || isBottomRight) ? -45 : 45;
87
- this._core.store.state.cursor = { icon: 'move-vertical', rotation: rotationDegrees + rotationOffset };
91
+ this._core.store.state.cursor = { icon: 'moveVertical', rotation: rotationDegrees + rotationOffset };
88
92
  return;
89
93
  }
90
94
  // Check for rotation handle overlay
91
95
  const rotationHandleOverlay = elementsAtPoint.find(el => el.classList.contains('rotation-handle-overlay'));
92
96
  if (rotationHandleOverlay) {
93
- this._core.store.state.cursor = { icon: 'hand', iconActive: 'hand-grab' };
97
+ this._core.store.state.cursor = { icon: 'hand', iconActive: 'handGrab' };
94
98
  return;
95
99
  }
96
100
  // Check for line handle overlays (selection line)
97
101
  const lineHandleOverlay = elementsAtPoint.find(el => el.classList.contains('selection-line-handle-overlay'));
98
102
  if (lineHandleOverlay) {
99
- this._core.store.state.cursor = { icon: 'hand', iconActive: 'hand-grab' };
103
+ this._core.store.state.cursor = { icon: 'hand', iconActive: 'handGrab' };
100
104
  return;
101
105
  }
102
106
  // Reset cursor if not hovering any handle
@@ -131,7 +135,8 @@ export class KritzelCursorManager {
131
135
  cleanup() {
132
136
  if (this._targetElement) {
133
137
  this._targetElement.style.cursor = '';
134
- this._targetElement.style.removeProperty('--kritzel-pointer-cursor');
138
+ this._targetElement.style.removeProperty('--kritzel-global-default-cursor');
139
+ this._targetElement.style.removeProperty('--kritzel-global-pointer-cursor');
135
140
  }
136
141
  this._targetElement = null;
137
142
  this._shadowRoot = null;
@@ -126,7 +126,7 @@ export class KritzelDynamicObject extends KritzelBaseObject {
126
126
  }
127
127
  applyInteractiveState() {
128
128
  const pointerEvents = this.isInteractive ? 'auto' : 'none';
129
- const contentCursor = this.isInteractive ? 'auto' : '';
129
+ const contentCursor = this.isInteractive ? 'var(--kritzel-global-default-cursor, auto)' : '';
130
130
  if (this.element) {
131
131
  this.element.style.pointerEvents = pointerEvents;
132
132
  this.element.style.cursor = contentCursor;
@@ -162,7 +162,7 @@ export class KritzelDynamicObject extends KritzelBaseObject {
162
162
  if (!this.isInteractive) {
163
163
  return false;
164
164
  }
165
- const focusHosts = this.getFocusHosts();
165
+ const focusHosts = this.getEmbeddedContentRoots();
166
166
  // Primary path: locate the focused input-like element by walking from each host through
167
167
  // `:focus` (piercing open shadow roots). This works in real browsers even when the engine
168
168
  // and editor are nested web components, because it never relies on the document-level
@@ -179,7 +179,7 @@ export class KritzelDynamicObject extends KritzelBaseObject {
179
179
  }
180
180
  return false;
181
181
  }
182
- getFocusHosts() {
182
+ getEmbeddedContentRoots() {
183
183
  const hosts = [];
184
184
  if (this.element) {
185
185
  hosts.push(this.element);
@@ -392,11 +392,11 @@ export class KritzelDynamicObject extends KritzelBaseObject {
392
392
  * @returns A serializable object with htmlString and dimension snapshots
393
393
  */
394
394
  serialize() {
395
- const { _core, _elementRef, element, totalWidth, totalHeight, isSelected, isHovered, isMounted, isInteractive, resizing, markedForRemoval, isVisible, ...props } = this;
395
+ const { _core, _elementRef, element, totalWidth, totalHeight, isSelected, isHovered, isMounted, isInteractive, resizing, markedForRemoval, isVisible, rendererData, ...props } = this;
396
396
  const cloned = structuredClone(props);
397
397
  // Include rendererKey and rendererData for lifecycle-driven rendering
398
398
  cloned.rendererKey = this.rendererKey;
399
- cloned.rendererData = this.rendererData;
399
+ cloned.rendererData = this.serializeRendererData();
400
400
  // Store HTML as string for fallback/compatibility when renderer is unavailable
401
401
  cloned.htmlString = element ? element.outerHTML : '';
402
402
  // Capture dimension snapshot at serialization time
@@ -404,6 +404,19 @@ export class KritzelDynamicObject extends KritzelBaseObject {
404
404
  cloned.serializedHeight = this.height;
405
405
  return cloned;
406
406
  }
407
+ serializeRendererData() {
408
+ if (this.rendererKey) {
409
+ const renderer = KritzelDynamicObjectRendererRegistry.get(this.rendererKey);
410
+ if (renderer?.onSerialize) {
411
+ return structuredClone(renderer.onSerialize({
412
+ object: this,
413
+ container: this.isMounted && this.elementRef instanceof HTMLElement ? this.elementRef : null,
414
+ data: this.rendererData,
415
+ }));
416
+ }
417
+ }
418
+ return structuredClone(this.rendererData);
419
+ }
407
420
  /**
408
421
  * Deserializes the dynamic object from a plain object.
409
422
  * Reconstructs the element from stored HTML string with fallback to placeholder.