kritzel-stencil 0.4.8 → 0.4.9

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 (91) hide show
  1. package/dist/cjs/index.cjs.js +9 -1
  2. package/dist/cjs/kritzel-active-users_47.cjs.entry.js +1386 -1250
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/{schema.constants-gDeS7USU.js → schema.constants-ByNZ_qAj.js} +61 -0
  5. package/dist/cjs/stencil.cjs.js +1 -1
  6. package/dist/collection/classes/objects/image.class.js +9 -0
  7. package/dist/collection/classes/objects/path.class.js +9 -0
  8. package/dist/collection/classes/objects/shape.class.js +9 -0
  9. package/dist/collection/classes/providers/sync/broadcast-sync-provider.class.js +1 -0
  10. package/dist/collection/classes/providers/sync/hocuspocus-sync-provider.class.js +2 -0
  11. package/dist/collection/classes/providers/sync/in-memory-sync-provider.class.js +1 -0
  12. package/dist/collection/classes/providers/sync/indexeddb-sync-provider.class.js +1 -0
  13. package/dist/collection/classes/providers/sync/websocket-sync-provider.class.js +2 -0
  14. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +197 -67
  15. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +136 -169
  16. package/dist/collection/components/ui/kritzel-export/kritzel-export.js +1 -1
  17. package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.js +1 -1
  18. package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
  19. package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +90 -4
  20. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +1 -1
  21. package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +2 -2
  22. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  23. package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +1 -1
  24. package/dist/collection/constants/version.js +1 -1
  25. package/dist/collection/helpers/object.helper.js +11 -0
  26. package/dist/collection/index.js +1 -0
  27. package/dist/collection/interfaces/object-export.interface.js +1 -0
  28. package/dist/collection/interfaces/sync-config.interface.js +21 -1
  29. package/dist/components/index.js +10 -3
  30. package/dist/components/kritzel-awareness-cursors.js +1 -1
  31. package/dist/components/kritzel-controls.js +1 -1
  32. package/dist/components/kritzel-editor.js +175 -78
  33. package/dist/components/kritzel-engine.js +1 -1
  34. package/dist/components/kritzel-export.js +1 -1
  35. package/dist/components/kritzel-loading-overlay.js +1 -1
  36. package/dist/components/kritzel-login-dialog.js +1 -1
  37. package/dist/components/kritzel-menu-item.js +1 -1
  38. package/dist/components/kritzel-menu.js +1 -1
  39. package/dist/components/kritzel-more-menu.js +1 -1
  40. package/dist/components/kritzel-portal.js +1 -1
  41. package/dist/components/kritzel-settings.js +1 -1
  42. package/dist/components/kritzel-share-dialog.js +1 -1
  43. package/dist/components/kritzel-split-button.js +1 -1
  44. package/dist/components/kritzel-utility-panel.js +1 -1
  45. package/dist/components/kritzel-workspace-manager.js +1 -1
  46. package/dist/components/kritzel-zoom-panel.js +1 -1
  47. package/dist/components/{p-DwY5pghH.js → p-6rQICkGr.js} +1 -1
  48. package/dist/components/{p-BknTMcbz.js → p-8ScektIm.js} +1 -1
  49. package/dist/components/{p-DkY7pIg5.js → p-BRGufCki.js} +95 -6
  50. package/dist/components/{p-BKOsmXB5.js → p-BqWiEmYI.js} +1 -1
  51. package/dist/components/{p-BLOPBDUF.js → p-C2CeSrTm.js} +1 -1
  52. package/dist/components/{p-DDbO5q-e.js → p-CXJZxJvp.js} +4 -4
  53. package/dist/components/{p-7Rt7ml3v.js → p-Cj0NElII.js} +1 -1
  54. package/dist/components/{p-BVEGQLBD.js → p-CoY7emAj.js} +1 -1
  55. package/dist/components/{p-DgA865Tp.js → p-D7H8oxZb.js} +2 -2
  56. package/dist/components/{p-Dd-pMvlr.js → p-DPONTran.js} +11 -0
  57. package/dist/components/{p-BMRln59F.js → p-DW7WW4EN.js} +2 -2
  58. package/dist/components/{p-D8TOEhPY.js → p-DuVkk58V.js} +2 -2
  59. package/dist/components/{p-OLfoATNk.js → p-U9FjWrp-.js} +1 -1
  60. package/dist/components/{p-D8bHNNEm.js → p-ZPPtEla5.js} +1227 -1218
  61. package/dist/components/{p-COjsYPir.js → p-dVfh-Sy9.js} +1 -1
  62. package/dist/components/{p-0H4HOJjy.js → p-lQ7nfhOy.js} +10 -1
  63. package/dist/esm/index.js +9 -2
  64. package/dist/esm/kritzel-active-users_47.entry.js +1386 -1250
  65. package/dist/esm/loader.js +1 -1
  66. package/dist/esm/{schema.constants-Rpm1NA9u.js → schema.constants-1t45c2_U.js} +61 -1
  67. package/dist/esm/stencil.js +1 -1
  68. package/dist/stencil/index.esm.js +9 -2
  69. package/dist/stencil/{p-Rpm1NA9u.js → p-1t45c2_U.js} +61 -1
  70. package/dist/stencil/{p-8c1b7b08.entry.js → p-f5f088ea.entry.js} +1386 -1250
  71. package/dist/stencil/stencil.esm.js +1 -1
  72. package/dist/types/classes/objects/image.class.d.ts +3 -0
  73. package/dist/types/classes/objects/path.class.d.ts +3 -0
  74. package/dist/types/classes/objects/shape.class.d.ts +3 -0
  75. package/dist/types/classes/providers/sync/broadcast-sync-provider.class.d.ts +1 -0
  76. package/dist/types/classes/providers/sync/hocuspocus-sync-provider.class.d.ts +1 -0
  77. package/dist/types/classes/providers/sync/in-memory-sync-provider.class.d.ts +1 -0
  78. package/dist/types/classes/providers/sync/indexeddb-sync-provider.class.d.ts +1 -0
  79. package/dist/types/classes/providers/sync/websocket-sync-provider.class.d.ts +1 -0
  80. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +15 -3
  81. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +16 -34
  82. package/dist/types/components/ui/kritzel-more-menu/kritzel-more-menu.d.ts +10 -1
  83. package/dist/types/components.d.ts +27 -26
  84. package/dist/types/constants/version.d.ts +1 -1
  85. package/dist/types/helpers/object.helper.d.ts +4 -0
  86. package/dist/types/index.d.ts +1 -0
  87. package/dist/types/interfaces/menu-item.interface.d.ts +1 -1
  88. package/dist/types/interfaces/object-export.interface.d.ts +20 -0
  89. package/dist/types/interfaces/sync-config.interface.d.ts +5 -0
  90. package/dist/types/interfaces/sync-provider.interface.d.ts +5 -0
  91. package/package.json +1 -1
@@ -17,5 +17,5 @@ var patchBrowser = () => {
17
17
 
18
18
  patchBrowser().then(async (options) => {
19
19
  await globalScripts();
20
- return bootstrapLazy(JSON.parse("[[\"p-8c1b7b08\",[[512,\"kritzel-editor\",{\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"lockDrawingScale\":[1028,\"lock-drawing-scale\"],\"viewportBoundaryLeft\":[1026,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[1026,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[1026,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[1026,\"viewport-boundary-bottom\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"themes\":[16],\"theme\":[1025],\"licenseKey\":[1,\"license-key\"],\"locale\":[1025],\"locales\":[16],\"fallbackLocale\":[1,\"fallback-locale\"],\"customSvgIcons\":[16],\"customFonts\":[16],\"isPanningEnabled\":[1028,\"is-panning-enabled\"],\"isZoomingEnabled\":[1028,\"is-zooming-enabled\"],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"isZoomPanelVisible\":[4,\"is-zoom-panel-visible\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"isEngineReady\":[32],\"isControlsReady\":[32],\"isWorkspaceManagerReady\":[32],\"workspaces\":[32],\"activeWorkspace\":[32],\"isVirtualKeyboardOpen\":[32],\"undoState\":[32],\"isBackToContentButtonVisible\":[32],\"resolvedTerms\":[32],\"availableLocaleOptions\":[32],\"currentZoomPercent\":[32],\"shortcuts\":[32],\"currentIsPublic\":[32],\"isEditorVisible\":[32],\"activeNotification\":[32],\"isNotificationDismissing\":[32],\"contextMenuState\":[32],\"normalizedControls\":[32],\"getObjectById\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[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],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"delete\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportSelectedObjectsAsSvg\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"loadObjectsFromJson\":[64],\"getObjectsTotalCount\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsInViewport\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"triggerSelectionChange\":[64],\"beginSceneBootstrap\":[64],\"endSceneBootstrap\":[64],\"getDisplayableShortcuts\":[64],\"triggerNotification\":[64],\"openLoginDialog\":[64],\"setLoginLoading\":[64],\"setLocale\":[64],\"getLocale\":[64],\"getAvailableLocales\":[64],\"registerLocales\":[64],\"registerFonts\":[64],\"t\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"customFonts\":[{\"onCustomFontsChange\":0}],\"controls\":[{\"onControlsChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"theme\":[{\"onCurrentThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}],\"locale\":[{\"onLocaleChange\":0}]}],[513,\"kritzel-controls\",{\"visible\":[4],\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"terms\":[16],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-engine\",{\"workspace\":[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\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"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\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"isSyncing\":[32],\"triggerSelectionChange\":[64],\"beginSceneBootstrap\":[64],\"endSceneBootstrap\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[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],\"getSelectedObjectsAsSvgString\":[64],\"exportSelectedObjectsAsSvg\":[64],\"getSelectedObjectsAsPngDataUrl\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportAsJson\":[64],\"importFromJson\":[64],\"loadObjectsFromJson\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64],\"registerLocales\":[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\"]],{\"workspace\":[{\"onWorkspaceChange\":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}],\"isObjectDistanceFadingActive\":[{\"onIsObjectDistanceFadingActiveChange\":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}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-settings\",{\"availableThemes\":[16],\"availableLocales\":[16],\"shortcuts\":[16],\"terms\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"theme\":[32],\"locale\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"terms\":[16],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"terms\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"terms\":[16],\"menuAnchor\":[32],\"isTouchDevice\":[32]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"terms\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"terms\":[16],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"qrCodeDataUrl\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}],\"workspaceId\":[{\"onWorkspaceIdChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuPath\":[32],\"submenuPositions\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"],\"terms\":[16]}],[513,\"kritzel-notification-card\",{\"notification\":[16],\"showTimestamp\":[4,\"show-timestamp\"],\"locale\":[1]}],[513,\"kritzel-zoom-panel\",{\"visible\":[4],\"disabled\":[4],\"zoomPercent\":[2,\"zoom-percent\"],\"terms\":[16]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"terms\":[16],\"config\":[32],\"palette\":[32],\"sizes\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16],\"terms\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-loading-overlay\",{\"visible\":[4],\"text\":[1]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-sync-indicator\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-watermark\",{\"core\":[16],\"label\":[1]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]},null,{\"fontOptions\":[{\"handleFontOptionsChange\":0}]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"p-fb32cd8f\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
20
+ return bootstrapLazy(JSON.parse("[[\"p-f5f088ea\",[[512,\"kritzel-editor\",{\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"lockDrawingScale\":[1028,\"lock-drawing-scale\"],\"viewportBoundaryLeft\":[1026,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[1026,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[1026,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[1026,\"viewport-boundary-bottom\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"moreMenuItems\":[16],\"themes\":[16],\"theme\":[1025],\"licenseKey\":[1,\"license-key\"],\"locale\":[1025],\"locales\":[16],\"fallbackLocale\":[1,\"fallback-locale\"],\"customSvgIcons\":[16],\"customFonts\":[16],\"isPanningEnabled\":[1028,\"is-panning-enabled\"],\"isZoomingEnabled\":[1028,\"is-zooming-enabled\"],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"isZoomPanelVisible\":[4,\"is-zoom-panel-visible\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"isEngineReady\":[32],\"isControlsReady\":[32],\"isWorkspaceManagerReady\":[32],\"workspaces\":[32],\"activeWorkspace\":[32],\"isVirtualKeyboardOpen\":[32],\"undoState\":[32],\"isBackToContentButtonVisible\":[32],\"resolvedTerms\":[32],\"availableLocaleOptions\":[32],\"currentZoomPercent\":[32],\"shortcuts\":[32],\"currentIsPublic\":[32],\"isEditorVisible\":[32],\"activeNotification\":[32],\"isNotificationDismissing\":[32],\"contextMenuState\":[32],\"normalizedControls\":[32],\"resolvedMoreMenuItems\":[32],\"getObjectById\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[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],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"delete\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"getSelectedObjectSupportedExportFormats\":[64],\"canExportSelectedObjectAs\":[64],\"exportSelectedObject\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"loadObjectsFromJson\":[64],\"getObjectsTotalCount\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsInViewport\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"triggerSelectionChange\":[64],\"beginSceneBootstrap\":[64],\"endSceneBootstrap\":[64],\"getDisplayableShortcuts\":[64],\"triggerNotification\":[64],\"openLoginDialog\":[64],\"setLoginLoading\":[64],\"setLocale\":[64],\"getLocale\":[64],\"getAvailableLocales\":[64],\"registerLocales\":[64],\"registerFonts\":[64],\"t\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"customFonts\":[{\"onCustomFontsChange\":0}],\"controls\":[{\"onControlsChange\":0}],\"moreMenuItems\":[{\"onMoreMenuItemsChange\":0}],\"syncConfig\":[{\"onSyncConfigChange\":0}],\"loginConfig\":[{\"onLoginConfigChange\":0}],\"user\":[{\"onUserChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"theme\":[{\"onCurrentThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}],\"locale\":[{\"onLocaleChange\":0}]}],[513,\"kritzel-controls\",{\"visible\":[4],\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"terms\":[16],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-engine\",{\"workspace\":[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\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"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\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"isSyncing\":[32],\"triggerSelectionChange\":[64],\"beginSceneBootstrap\":[64],\"endSceneBootstrap\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[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],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64],\"registerLocales\":[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\"]],{\"workspace\":[{\"onWorkspaceChange\":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}],\"isObjectDistanceFadingActive\":[{\"onIsObjectDistanceFadingActiveChange\":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}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-settings\",{\"availableThemes\":[16],\"availableLocales\":[16],\"shortcuts\":[16],\"terms\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"theme\":[32],\"locale\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"terms\":[16],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"terms\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"terms\":[16],\"menuAnchor\":[32],\"isTouchDevice\":[32],\"visibleItems\":[32]},null,{\"items\":[{\"onItemsChange\":0}]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"terms\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"terms\":[16],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"qrCodeDataUrl\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}],\"workspaceId\":[{\"onWorkspaceIdChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuPath\":[32],\"submenuPositions\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"],\"terms\":[16]}],[513,\"kritzel-notification-card\",{\"notification\":[16],\"showTimestamp\":[4,\"show-timestamp\"],\"locale\":[1]}],[513,\"kritzel-zoom-panel\",{\"visible\":[4],\"disabled\":[4],\"zoomPercent\":[2,\"zoom-percent\"],\"terms\":[16]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"terms\":[16],\"config\":[32],\"palette\":[32],\"sizes\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16],\"terms\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-loading-overlay\",{\"visible\":[4],\"text\":[1]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-sync-indicator\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-watermark\",{\"core\":[16],\"label\":[1]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]},null,{\"fontOptions\":[{\"handleFontOptionsChange\":0}]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"p-fb32cd8f\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
21
21
  });
@@ -1,6 +1,7 @@
1
1
  import { KritzelCore } from '../core/core.class';
2
2
  import { KritzelAssetLoadState } from '../../interfaces/asset.interface';
3
3
  import { KritzelBaseObject } from './base-object.class';
4
+ import { KritzelObjectExportContext, KritzelObjectExportFormat } from '../../interfaces/object-export.interface';
4
5
  /**
5
6
  * Represents an image object on the canvas.
6
7
  *
@@ -221,4 +222,6 @@ export declare class KritzelImage extends KritzelBaseObject<HTMLImageElement> {
221
222
  scaledWidth: number;
222
223
  scaledHeight: number;
223
224
  };
225
+ getSupportedExportFormats(): KritzelObjectExportFormat[];
226
+ exportAs(format: KritzelObjectExportFormat, context: KritzelObjectExportContext): Promise<string | null>;
224
227
  }
@@ -4,6 +4,7 @@ import { KritzelPolygon } from '../../interfaces/polygon.interface';
4
4
  import { KritzelPoint } from '../../interfaces/point.interface';
5
5
  import { KritzelCore } from '../core/core.class';
6
6
  import { ThemeAwareColor } from '../../constants/color-palette.constants';
7
+ import { KritzelObjectExportContext, KritzelObjectExportFormat } from '../../interfaces/object-export.interface';
7
8
  export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
8
9
  __class__: string;
9
10
  points: number[][];
@@ -208,4 +209,6 @@ export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
208
209
  * @returns The intersection point on the stroke edge, or null if no intersection found
209
210
  */
210
211
  getClipPoint(outsidePoint: KritzelPoint): KritzelPoint | null;
212
+ getSupportedExportFormats(): KritzelObjectExportFormat[];
213
+ exportAs(format: KritzelObjectExportFormat, context: KritzelObjectExportContext): Promise<string | null>;
211
214
  }
@@ -4,6 +4,7 @@ import { ShapeType } from '../../enums/shape-type.enum';
4
4
  import { KritzelPoint } from '../../interfaces/point.interface';
5
5
  import { EditorView } from 'prosemirror-view';
6
6
  import { ThemeAwareColor } from '../../constants/color-palette.constants';
7
+ import { KritzelObjectExportContext, KritzelObjectExportFormat } from '../../interfaces/object-export.interface';
7
8
  export declare class KritzelShape extends KritzelBaseObject<HTMLDivElement> {
8
9
  __class__: string;
9
10
  shapeType: ShapeType;
@@ -312,4 +313,6 @@ export declare class KritzelShape extends KritzelBaseObject<HTMLDivElement> {
312
313
  * @returns An SVG path data string (d attribute) for the shape
313
314
  */
314
315
  getSvgPath(): string;
316
+ getSupportedExportFormats(): KritzelObjectExportFormat[];
317
+ exportAs(format: KritzelObjectExportFormat, context: KritzelObjectExportContext): Promise<string | null>;
315
318
  }
@@ -5,6 +5,7 @@ import { ISyncProvider } from '../../../interfaces/sync-provider.interface';
5
5
  * This is a lightweight alternative to y-webrtc for browser-tab-only sync
6
6
  */
7
7
  export declare class BroadcastSyncProvider implements ISyncProvider {
8
+ static readonly type: "local";
8
9
  readonly type = "local";
9
10
  private readonly doc;
10
11
  private readonly channel;
@@ -117,6 +117,7 @@ export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'sy
117
117
  * Supports multiplexing - multiple documents can share the same WebSocket connection
118
118
  */
119
119
  export declare class HocuspocusSyncProvider implements ISyncProvider {
120
+ static readonly type: "network";
120
121
  readonly type = "network";
121
122
  private provider;
122
123
  private isConnected;
@@ -18,6 +18,7 @@ export interface InMemoryOptions {
18
18
  * is not desired.
19
19
  */
20
20
  export declare class InMemorySyncProvider implements ISyncProvider {
21
+ static readonly type: "local";
21
22
  readonly type = "local";
22
23
  private readonly doc;
23
24
  private readonly cacheKey;
@@ -13,6 +13,7 @@ export interface IndexedDBOptions {
13
13
  * IndexedDB sync provider for local persistence
14
14
  */
15
15
  export declare class IndexedDBSyncProvider implements ISyncProvider {
16
+ static readonly type: "local";
16
17
  readonly type = "local";
17
18
  private provider;
18
19
  private isConnected;
@@ -42,6 +42,7 @@ export interface WebSocketOptions {
42
42
  * WebSocket sync provider for real-time collaboration
43
43
  */
44
44
  export declare class WebSocketSyncProvider implements ISyncProvider {
45
+ static readonly type: "network";
45
46
  readonly type = "network";
46
47
  private provider;
47
48
  private isConnected;
@@ -6,6 +6,7 @@ import { ContextMenuItem } from '../../../interfaces/context-menu-item.interface
6
6
  import { KritzelEngineState } from '../../../interfaces/engine-state.interface';
7
7
  import { KritzelSettingsConfig } from '../../../interfaces/settings.interface';
8
8
  import { KritzelDebugInfo } from '../../../interfaces/debug-info.interface';
9
+ import { IKritzelMenuItem } from '../../../interfaces/menu-item.interface';
9
10
  import { KritzelWorkspace } from '../../../classes/core/workspace.class';
10
11
  import { KritzelSyncConfig } from '../../../interfaces/sync-config.interface';
11
12
  import { KritzelAssetStorageConfig } from '../../../interfaces/asset-storage-config.interface';
@@ -24,6 +25,7 @@ import { LoginEvent } from '../../../events/login.event';
24
25
  import { KritzelNotification } from '../../../interfaces/notification.interface';
25
26
  import { KritzelFontMap } from '../../../interfaces/font.interface';
26
27
  import { KritzelContextMenuState } from '../../../interfaces/context-menu-state.interface';
28
+ import { KritzelObjectExportFormat } from '../../../interfaces/object-export.interface';
27
29
  export declare class KritzelEditor {
28
30
  host: HTMLElement;
29
31
  scaleMax: number;
@@ -39,6 +41,7 @@ export declare class KritzelEditor {
39
41
  controls: KritzelToolbarControl[];
40
42
  globalContextMenuItems: ContextMenuItem[];
41
43
  objectContextMenuItems: ContextMenuItem[];
44
+ moreMenuItems?: IKritzelMenuItem[];
42
45
  themes?: KritzelTheme[];
43
46
  theme: ThemeName;
44
47
  /** License key that, when valid, removes the "Powered by Kritzel" watermark. */
@@ -112,6 +115,7 @@ export declare class KritzelEditor {
112
115
  isNotificationDismissing: boolean;
113
116
  contextMenuState?: KritzelContextMenuState;
114
117
  normalizedControls: KritzelToolbarControl[];
118
+ resolvedMoreMenuItems: IKritzelMenuItem[];
115
119
  private notificationDismissTimeout?;
116
120
  private notificationDismissAnimationTimeout?;
117
121
  private readonly notificationDisplayDurationMs;
@@ -125,6 +129,10 @@ export declare class KritzelEditor {
125
129
  onActiveWorkspaceChange(): void;
126
130
  onCustomFontsChange(newValue: KritzelFontMap): void;
127
131
  onControlsChange(newValue: KritzelToolbarControl[]): void;
132
+ onMoreMenuItemsChange(): void;
133
+ onSyncConfigChange(): void;
134
+ onLoginConfigChange(): void;
135
+ onUserChange(): void;
128
136
  onActiveWorkspaceIdChange(newId?: string): void;
129
137
  onCurrentThemeChange(): void;
130
138
  onThemesChange(): void;
@@ -199,8 +207,9 @@ export declare class KritzelEditor {
199
207
  exportViewportAsSvg(options?: {
200
208
  includeBackground?: boolean;
201
209
  }): Promise<void>;
202
- exportSelectedObjectsAsPng(): Promise<void>;
203
- exportSelectedObjectsAsSvg(): Promise<void>;
210
+ getSelectedObjectSupportedExportFormats(): Promise<KritzelObjectExportFormat[]>;
211
+ canExportSelectedObjectAs(format: KritzelObjectExportFormat): Promise<boolean>;
212
+ exportSelectedObject(format: KritzelObjectExportFormat): Promise<void>;
204
213
  downloadAsJson(filename?: string): Promise<void>;
205
214
  importFromFile(): Promise<void>;
206
215
  loadObjectsFromJson(json: string): Promise<number>;
@@ -234,6 +243,7 @@ export declare class KritzelEditor {
234
243
  componentWillLoad(): void;
235
244
  private isTextToolConfig;
236
245
  private normalizeControls;
246
+ private recomputeMoreMenuItems;
237
247
  private applyTheme;
238
248
  private resolveThemeObject;
239
249
  componentDidLoad(): void;
@@ -260,7 +270,6 @@ export declare class KritzelEditor {
260
270
  private clearNotificationDismissAnimationTimer;
261
271
  private dismissNotification;
262
272
  handleSettingsChange(event: CustomEvent<KritzelSettingsConfig>): void;
263
- private get moreMenuItems();
264
273
  private handleToggleIsPublic;
265
274
  /**
266
275
  * Updates the currentIsPublic state from the active workspace and emits the isPublicChange event.
@@ -269,6 +278,9 @@ export declare class KritzelEditor {
269
278
  private handleProviderLogin;
270
279
  private handleCurrentUserLogout;
271
280
  private get isLoggedIn();
281
+ private canExportObjectsAs;
282
+ private canExportObjects;
283
+ private getPreferredExportFormat;
272
284
  openLoginDialog(): Promise<void>;
273
285
  setLoginLoading(provider: string | null): Promise<void>;
274
286
  /**
@@ -23,6 +23,7 @@ import { ObjectsAddedEvent, ObjectsRemovedEvent, ObjectsUpdatedEvent, ObjectsInV
23
23
  import { IKritzelUser } from '../../../interfaces/user.interface';
24
24
  import { KritzelNotification } from '../../../interfaces/notification.interface';
25
25
  import { KritzelContextMenuState } from '../../../interfaces/context-menu-state.interface';
26
+ import { KritzelObjectExportFormat } from '../../../interfaces/object-export.interface';
26
27
  export declare class KritzelEngine {
27
28
  host: HTMLElement;
28
29
  /** The workspace to load and display. Changing this prop switches the active workspace. */
@@ -465,45 +466,20 @@ export declare class KritzelEngine {
465
466
  includeBackground?: boolean;
466
467
  }): Promise<void>;
467
468
  /**
468
- * Generates an SVG string from the currently selected objects.
469
- * Creates clean, standards-compliant SVG markup by directly serializing object properties.
470
- * @param options - Optional export settings (theme, padding, raster-safe mode for canvas export).
471
- * @returns SVG markup string, or null if no objects are selected.
469
+ * Returns export formats supported by the currently selected object.
470
+ * Only returns formats when exactly one object is selected.
472
471
  */
473
- getSelectedObjectsAsSvgString(options?: {
474
- theme?: 'light' | 'dark';
475
- padding?: number;
476
- rasterSafeForCanvas?: boolean;
477
- }): Promise<string | null>;
478
- /**
479
- * Exports the currently selected objects as an SVG file and triggers a browser download.
480
- * Creates clean, standards-compliant SVG markup suitable for import into vector editors.
481
- * @param options - Optional export settings (theme, padding).
482
- */
483
- exportSelectedObjectsAsSvg(options?: {
484
- theme?: 'light' | 'dark';
485
- padding?: number;
486
- }): Promise<void>;
472
+ getSelectedObjectSupportedExportFormats(): Promise<KritzelObjectExportFormat[]>;
487
473
  /**
488
- * Generates a PNG data URL from the currently selected objects.
489
- * Converts the SVG representation to a rasterized PNG image.
490
- * @param options - Optional export settings (theme, padding, scale for resolution).
491
- * @returns PNG data URL string, or null if no objects are selected.
474
+ * Checks whether the currently selected object supports a specific export format.
475
+ * Returns false when none or multiple objects are selected.
492
476
  */
493
- getSelectedObjectsAsPngDataUrl(options?: {
494
- theme?: 'light' | 'dark';
495
- padding?: number;
496
- scale?: number;
497
- }): Promise<string | null>;
477
+ canExportSelectedObjectAs(format: KritzelObjectExportFormat): Promise<boolean>;
498
478
  /**
499
- * Exports the currently selected objects as a PNG file and triggers a browser download.
500
- * @param options - Optional export settings (theme, padding, scale for resolution).
479
+ * Exports the currently selected object in the requested format and triggers a file download.
480
+ * Only supports single selection.
501
481
  */
502
- exportSelectedObjectsAsPng(options?: {
503
- theme?: 'light' | 'dark';
504
- padding?: number;
505
- scale?: number;
506
- }): Promise<void>;
482
+ exportSelectedObject(format: KritzelObjectExportFormat): Promise<void>;
507
483
  /**
508
484
  * Exports the current workspace and all its objects as a JSON string.
509
485
  * The exported data includes workspace metadata (id, name, viewport) and all canvas objects.
@@ -531,6 +507,12 @@ export declare class KritzelEngine {
531
507
  private restorePortableAssets;
532
508
  private blobToDataUrl;
533
509
  private dataUrlToBlob;
510
+ private triggerDataUrlDownload;
511
+ private getSingleSelectedExportableObject;
512
+ private getObjectExportContext;
513
+ private getObjectAsSvgMarkup;
514
+ private svgMarkupToDataUrl;
515
+ private svgMarkupToPngDataUrl;
534
516
  private getImportedWorkspaceName;
535
517
  private getImportedWorkspaceViewport;
536
518
  /**
@@ -36,9 +36,18 @@ export declare class KritzelMoreMenu {
36
36
  }>;
37
37
  menuAnchor: HTMLElement;
38
38
  isTouchDevice: boolean;
39
+ visibleItems: IKritzelMenuItem[];
40
+ private visibilityResolveVersion;
41
+ onItemsChange(): void;
42
+ componentWillLoad(): void;
39
43
  private toggleMenu;
40
44
  private closeMenu;
41
- private get visibleItems();
45
+ private evaluateVisibility;
46
+ private evaluateVisibilitySync;
47
+ private filterVisibleItemsSync;
48
+ private filterVisibleItems;
49
+ private resolveVisibleItems;
50
+ private resolveMenuLabels;
42
51
  private handleMenuItemSelect;
43
52
  render(): any;
44
53
  }
@@ -18,6 +18,7 @@ import { KritzelLocale, KritzelTermKey, KritzelTermVars, LocaleCode } from "./in
18
18
  import { IKritzelDialogCloseEvent, KritzelDialogCloseReason } from "./interfaces/dialog.interface";
19
19
  import { DropdownOption } from "./components/shared/kritzel-dropdown/kritzel-dropdown";
20
20
  import { KritzelDebugInfo } from "./interfaces/debug-info.interface";
21
+ import { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from "./interfaces/menu-item.interface";
21
22
  import { KritzelFontMap } from "./interfaces/font.interface";
22
23
  import { KritzelSyncConfig } from "./interfaces/sync-config.interface";
23
24
  import { KritzelAssetStorageConfig } from "./interfaces/asset-storage-config.interface";
@@ -30,6 +31,7 @@ import { IKritzelIsPublicChangedEvent } from "./interfaces/share.interface";
30
31
  import { KritzelWorkspace } from "./classes/core/workspace.class";
31
32
  import { KritzelBaseTool } from "./classes/tools/base-tool.class";
32
33
  import { KritzelAlignment } from "./enums/alignment.enum";
34
+ import { KritzelObjectExportFormat } from "./interfaces/object-export.interface";
33
35
  import { Element, Event } from "./stencil-public-runtime";
34
36
  import { KritzelShortcut } from "./interfaces/shortcut.interface";
35
37
  import { KritzelNotification } from "./interfaces/notification.interface";
@@ -44,7 +46,6 @@ import { FontOption } from "./components/shared/kritzel-font-family/kritzel-font
44
46
  import { LineEndingType } from "./components/shared/kritzel-line-endings/kritzel-line-endings";
45
47
  import { LineArrowConfig } from "./interfaces/arrow-head.interface";
46
48
  import { IKritzelMasterDetailItem, IKritzelMasterDetailSelectEvent } from "./interfaces/master-detail.interface";
47
- import { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from "./interfaces/menu-item.interface";
48
49
  import { KritzelPillTab } from "./components/shared/kritzel-pill-tabs/kritzel-pill-tabs";
49
50
  import { ShapeFillType } from "./components/shared/kritzel-shape-fill/kritzel-shape-fill";
50
51
  import { ConfigurableTool, ToolDisplayValues } from "./interfaces/tool-config.interface";
@@ -61,6 +62,7 @@ export { KritzelLocale, KritzelTermKey, KritzelTermVars, LocaleCode } from "./in
61
62
  export { IKritzelDialogCloseEvent, KritzelDialogCloseReason } from "./interfaces/dialog.interface";
62
63
  export { DropdownOption } from "./components/shared/kritzel-dropdown/kritzel-dropdown";
63
64
  export { KritzelDebugInfo } from "./interfaces/debug-info.interface";
65
+ export { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from "./interfaces/menu-item.interface";
64
66
  export { KritzelFontMap } from "./interfaces/font.interface";
65
67
  export { KritzelSyncConfig } from "./interfaces/sync-config.interface";
66
68
  export { KritzelAssetStorageConfig } from "./interfaces/asset-storage-config.interface";
@@ -73,6 +75,7 @@ export { IKritzelIsPublicChangedEvent } from "./interfaces/share.interface";
73
75
  export { KritzelWorkspace } from "./classes/core/workspace.class";
74
76
  export { KritzelBaseTool } from "./classes/tools/base-tool.class";
75
77
  export { KritzelAlignment } from "./enums/alignment.enum";
78
+ export { KritzelObjectExportFormat } from "./interfaces/object-export.interface";
76
79
  export { Element, Event } from "./stencil-public-runtime";
77
80
  export { KritzelShortcut } from "./interfaces/shortcut.interface";
78
81
  export { KritzelNotification } from "./interfaces/notification.interface";
@@ -87,7 +90,6 @@ export { FontOption } from "./components/shared/kritzel-font-family/kritzel-font
87
90
  export { LineEndingType } from "./components/shared/kritzel-line-endings/kritzel-line-endings";
88
91
  export { LineArrowConfig } from "./interfaces/arrow-head.interface";
89
92
  export { IKritzelMasterDetailItem, IKritzelMasterDetailSelectEvent } from "./interfaces/master-detail.interface";
90
- export { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from "./interfaces/menu-item.interface";
91
93
  export { KritzelPillTab } from "./components/shared/kritzel-pill-tabs/kritzel-pill-tabs";
92
94
  export { ShapeFillType } from "./components/shared/kritzel-shape-fill/kritzel-shape-fill";
93
95
  export { ConfigurableTool, ToolDisplayValues } from "./interfaces/tool-config.interface";
@@ -366,6 +368,7 @@ export namespace Components {
366
368
  "beginSceneBootstrap": () => Promise<void>;
367
369
  "bringForward": (object?: KritzelBaseObject<any>) => Promise<void>;
368
370
  "bringToFront": (object?: KritzelBaseObject<any>) => Promise<void>;
371
+ "canExportSelectedObjectAs": (format: KritzelObjectExportFormat) => Promise<boolean>;
369
372
  "centerAllObjects": (animate?: boolean) => Promise<boolean>;
370
373
  "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
371
374
  "centerObjects": (objects: KritzelBaseObject[], animate?: boolean) => Promise<boolean>;
@@ -406,8 +409,7 @@ export namespace Components {
406
409
  "editorId"?: string;
407
410
  "enable": () => Promise<void>;
408
411
  "endSceneBootstrap": () => Promise<void>;
409
- "exportSelectedObjectsAsPng": () => Promise<void>;
410
- "exportSelectedObjectsAsSvg": () => Promise<void>;
412
+ "exportSelectedObject": (format: KritzelObjectExportFormat) => Promise<void>;
411
413
  "exportViewportAsPng": (options?: { includeBackground?: boolean; }) => Promise<void>;
412
414
  "exportViewportAsSvg": (options?: { includeBackground?: boolean; }) => Promise<void>;
413
415
  /**
@@ -431,6 +433,7 @@ export namespace Components {
431
433
  "getObjectsInViewport": () => Promise<KritzelBaseObject[]>;
432
434
  "getObjectsTotalCount": () => Promise<number>;
433
435
  "getScreenshot": (format?: "png" | "svg", options?: { includeBackground?: boolean; }) => Promise<string | null>;
436
+ "getSelectedObjectSupportedExportFormats": () => Promise<KritzelObjectExportFormat[]>;
434
437
  "getSelectedObjects": () => Promise<KritzelBaseObject[]>;
435
438
  "getViewport": () => Promise<KritzelViewportState>;
436
439
  "getWorkspaces": () => Promise<KritzelWorkspace[]>;
@@ -502,7 +505,11 @@ export namespace Components {
502
505
  */
503
506
  "loginConfig"?: KritzelLoginConfig;
504
507
  /**
505
- * @default [ { label: 'menu.copy', icon: 'copy', group: 'clipboard', action: () => this.engineRef.copy() }, { label: 'menu.cut', icon: 'cut', group: 'clipboard', action: () => this.engineRef.cut() }, { label: 'menu.paste', icon: 'paste', group: 'clipboard', action: (menu, _) => this.engineRef.paste(menu.x, menu.y), }, { label: 'menu.order', icon: 'ordering', group: 'other', children: [ { label: 'menu.bringToFront', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() }, { label: 'menu.sendToBack', icon: 'send-to-back', action: () => this.engineRef.sendToBack() }, { label: 'menu.moveUp', icon: 'arrow-up-from-dot', action: () => this.engineRef.bringForward() }, { label: 'menu.moveDown', icon: 'arrow-down-from-dot', action: () => this.engineRef.sendBackward() }, ], }, { label: 'menu.align', icon: 'align', group: 'other', children: [ { label: 'menu.alignLeft', icon: 'align-start-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.StartHorizontal) }, { label: 'menu.alignCenterHorizontal', icon: 'align-center-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterHorizontal) }, { label: 'menu.alignRight', icon: 'align-end-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.EndHorizontal) }, { label: 'menu.alignTop', icon: 'align-start-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.StartVertical) }, { label: 'menu.alignCenterVertical', icon: 'align-center-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterVertical) }, { label: 'menu.alignBottom', icon: 'align-end-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.EndVertical) }, ], }, { label: 'menu.group', icon: 'group', group: 'other', children: [ { label: 'menu.group', icon: 'group', action: () => this.engineRef.group(), }, { label: 'menu.ungroup', icon: 'ungroup', action: () => this.engineRef.ungroup(), }, ], }, { label: 'menu.export', icon: 'download', group: 'export', children: [ { label: 'menu.exportAsSvg', icon: 'download', action: () => this.engineRef.exportSelectedObjectsAsSvg() }, { label: 'menu.exportAsPng', icon: 'download', action: () => this.engineRef.exportSelectedObjectsAsPng() }, ], }, { label: 'menu.delete', icon: 'delete', group: 'edit', action: () => this.engineRef.delete() }, ]
508
+ * @default [ { id: 'share', label: 'menu.share', icon: 'share', isVisible: async () => hasRemoteSyncProvider(this.syncConfig), action: () => { if (!this.isLoggedIn && this.loginConfig) { this.openLoginDialog(); return; } this.shareDialogRef.open(); }, }, { id: 'export', label: 'menu.export', icon: 'upload', action: async () => { const preview = await this.engineRef.getScreenshot('png'); this.exportRef.open(preview ?? undefined); }, }, { id: 'import', label: 'menu.import', icon: 'download', action: () => this.engineRef.importFromFile(), }, { id: 'settings', label: 'menu.settings', icon: 'settings', action: () => this.settingsRef.open(), }, ]
509
+ */
510
+ "moreMenuItems"?: IKritzelMenuItem[];
511
+ /**
512
+ * @default [ { label: 'menu.copy', icon: 'copy', group: 'clipboard', action: () => this.engineRef.copy() }, { label: 'menu.cut', icon: 'cut', group: 'clipboard', action: () => this.engineRef.cut() }, { label: 'menu.paste', icon: 'paste', group: 'clipboard', action: (menu, _) => this.engineRef.paste(menu.x, menu.y), }, { label: 'menu.export', icon: 'upload', group: 'clipboard', visible: (_, objects) => this.canExportObjects(objects), action: (_, objects) => { const format = this.getPreferredExportFormat(objects); if (!format) { return; } void this.engineRef.exportSelectedObject(format); }, }, { label: 'menu.order', icon: 'ordering', group: 'other', children: [ { label: 'menu.bringToFront', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() }, { label: 'menu.sendToBack', icon: 'send-to-back', action: () => this.engineRef.sendToBack() }, { label: 'menu.moveUp', icon: 'arrow-up-from-dot', action: () => this.engineRef.bringForward() }, { label: 'menu.moveDown', icon: 'arrow-down-from-dot', action: () => this.engineRef.sendBackward() }, ], }, { label: 'menu.align', icon: 'align', group: 'other', children: [ { label: 'menu.alignLeft', icon: 'align-start-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.StartHorizontal) }, { label: 'menu.alignCenterHorizontal', icon: 'align-center-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterHorizontal) }, { label: 'menu.alignRight', icon: 'align-end-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.EndHorizontal) }, { label: 'menu.alignTop', icon: 'align-start-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.StartVertical) }, { label: 'menu.alignCenterVertical', icon: 'align-center-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterVertical) }, { label: 'menu.alignBottom', icon: 'align-end-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.EndVertical) }, ], }, { label: 'menu.group', icon: 'group', group: 'other', children: [ { label: 'menu.group', icon: 'group', action: () => this.engineRef.group(), }, { label: 'menu.ungroup', icon: 'ungroup', action: () => this.engineRef.ungroup(), }, ], }, { label: 'menu.delete', icon: 'delete', group: 'edit', action: () => this.engineRef.delete() }, ]
506
513
  */
507
514
  "objectContextMenuItems": ContextMenuItem[];
508
515
  "openContextMenu": (options: { x: number; y: number; objectId?: string; }) => Promise<void>;
@@ -638,6 +645,10 @@ export namespace Components {
638
645
  * @param object - The object to move. If omitted, applies to the current selection.
639
646
  */
640
647
  "bringToFront": (object?: KritzelBaseObject<any>) => Promise<void>;
648
+ /**
649
+ * Checks whether the currently selected object supports a specific export format. Returns false when none or multiple objects are selected.
650
+ */
651
+ "canExportSelectedObjectAs": (format: KritzelObjectExportFormat) => Promise<boolean>;
641
652
  /**
642
653
  * Pans and zooms the viewport to fit ALL objects on the canvas, including those not currently rendered. Calculates the combined bounding box of all objects and centers the viewport to show them.
643
654
  * @param animate - Whether to animate the viewport transition (default: true).
@@ -729,15 +740,9 @@ export namespace Components {
729
740
  */
730
741
  "exportAsJson": () => Promise<string>;
731
742
  /**
732
- * Exports the currently selected objects as a PNG file and triggers a browser download.
733
- * @param options - Optional export settings (theme, padding, scale for resolution).
734
- */
735
- "exportSelectedObjectsAsPng": (options?: { theme?: "light" | "dark"; padding?: number; scale?: number; }) => Promise<void>;
736
- /**
737
- * Exports the currently selected objects as an SVG file and triggers a browser download. Creates clean, standards-compliant SVG markup suitable for import into vector editors.
738
- * @param options - Optional export settings (theme, padding).
743
+ * Exports the currently selected object in the requested format and triggers a file download. Only supports single selection.
739
744
  */
740
- "exportSelectedObjectsAsSvg": (options?: { theme?: "light" | "dark"; padding?: number; }) => Promise<void>;
745
+ "exportSelectedObject": (format: KritzelObjectExportFormat) => Promise<void>;
741
746
  /**
742
747
  * Exports the current viewport as a PNG file and triggers a browser download.
743
748
  * @param options - Optional export settings.
@@ -818,21 +823,13 @@ export namespace Components {
818
823
  */
819
824
  "getScreenshot": (format?: "png" | "svg", options?: { includeBackground?: boolean; }) => Promise<string | null>;
820
825
  /**
821
- * Returns the currently selected objects. Returns an empty array if nothing is selected.
822
- */
823
- "getSelectedObjects": () => Promise<KritzelBaseObject<any>[]>;
824
- /**
825
- * Generates a PNG data URL from the currently selected objects. Converts the SVG representation to a rasterized PNG image.
826
- * @param options - Optional export settings (theme, padding, scale for resolution).
827
- * @returns PNG data URL string, or null if no objects are selected.
826
+ * Returns export formats supported by the currently selected object. Only returns formats when exactly one object is selected.
828
827
  */
829
- "getSelectedObjectsAsPngDataUrl": (options?: { theme?: "light" | "dark"; padding?: number; scale?: number; }) => Promise<string | null>;
828
+ "getSelectedObjectSupportedExportFormats": () => Promise<KritzelObjectExportFormat[]>;
830
829
  /**
831
- * Generates an SVG string from the currently selected objects. Creates clean, standards-compliant SVG markup by directly serializing object properties.
832
- * @param options - Optional export settings (theme, padding, raster-safe mode for canvas export).
833
- * @returns SVG markup string, or null if no objects are selected.
830
+ * Returns the currently selected objects. Returns an empty array if nothing is selected.
834
831
  */
835
- "getSelectedObjectsAsSvgString": (options?: { theme?: "light" | "dark"; padding?: number; rasterSafeForCanvas?: boolean; }) => Promise<string | null>;
832
+ "getSelectedObjects": () => Promise<KritzelBaseObject<any>[]>;
836
833
  /**
837
834
  * Returns the current viewport state including position, scale, and dimensions.
838
835
  * @returns The current viewport state.
@@ -3003,7 +3000,11 @@ declare namespace LocalJSX {
3003
3000
  */
3004
3001
  "loginConfig"?: KritzelLoginConfig;
3005
3002
  /**
3006
- * @default [ { label: 'menu.copy', icon: 'copy', group: 'clipboard', action: () => this.engineRef.copy() }, { label: 'menu.cut', icon: 'cut', group: 'clipboard', action: () => this.engineRef.cut() }, { label: 'menu.paste', icon: 'paste', group: 'clipboard', action: (menu, _) => this.engineRef.paste(menu.x, menu.y), }, { label: 'menu.order', icon: 'ordering', group: 'other', children: [ { label: 'menu.bringToFront', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() }, { label: 'menu.sendToBack', icon: 'send-to-back', action: () => this.engineRef.sendToBack() }, { label: 'menu.moveUp', icon: 'arrow-up-from-dot', action: () => this.engineRef.bringForward() }, { label: 'menu.moveDown', icon: 'arrow-down-from-dot', action: () => this.engineRef.sendBackward() }, ], }, { label: 'menu.align', icon: 'align', group: 'other', children: [ { label: 'menu.alignLeft', icon: 'align-start-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.StartHorizontal) }, { label: 'menu.alignCenterHorizontal', icon: 'align-center-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterHorizontal) }, { label: 'menu.alignRight', icon: 'align-end-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.EndHorizontal) }, { label: 'menu.alignTop', icon: 'align-start-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.StartVertical) }, { label: 'menu.alignCenterVertical', icon: 'align-center-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterVertical) }, { label: 'menu.alignBottom', icon: 'align-end-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.EndVertical) }, ], }, { label: 'menu.group', icon: 'group', group: 'other', children: [ { label: 'menu.group', icon: 'group', action: () => this.engineRef.group(), }, { label: 'menu.ungroup', icon: 'ungroup', action: () => this.engineRef.ungroup(), }, ], }, { label: 'menu.export', icon: 'download', group: 'export', children: [ { label: 'menu.exportAsSvg', icon: 'download', action: () => this.engineRef.exportSelectedObjectsAsSvg() }, { label: 'menu.exportAsPng', icon: 'download', action: () => this.engineRef.exportSelectedObjectsAsPng() }, ], }, { label: 'menu.delete', icon: 'delete', group: 'edit', action: () => this.engineRef.delete() }, ]
3003
+ * @default [ { id: 'share', label: 'menu.share', icon: 'share', isVisible: async () => hasRemoteSyncProvider(this.syncConfig), action: () => { if (!this.isLoggedIn && this.loginConfig) { this.openLoginDialog(); return; } this.shareDialogRef.open(); }, }, { id: 'export', label: 'menu.export', icon: 'upload', action: async () => { const preview = await this.engineRef.getScreenshot('png'); this.exportRef.open(preview ?? undefined); }, }, { id: 'import', label: 'menu.import', icon: 'download', action: () => this.engineRef.importFromFile(), }, { id: 'settings', label: 'menu.settings', icon: 'settings', action: () => this.settingsRef.open(), }, ]
3004
+ */
3005
+ "moreMenuItems"?: IKritzelMenuItem[];
3006
+ /**
3007
+ * @default [ { label: 'menu.copy', icon: 'copy', group: 'clipboard', action: () => this.engineRef.copy() }, { label: 'menu.cut', icon: 'cut', group: 'clipboard', action: () => this.engineRef.cut() }, { label: 'menu.paste', icon: 'paste', group: 'clipboard', action: (menu, _) => this.engineRef.paste(menu.x, menu.y), }, { label: 'menu.export', icon: 'upload', group: 'clipboard', visible: (_, objects) => this.canExportObjects(objects), action: (_, objects) => { const format = this.getPreferredExportFormat(objects); if (!format) { return; } void this.engineRef.exportSelectedObject(format); }, }, { label: 'menu.order', icon: 'ordering', group: 'other', children: [ { label: 'menu.bringToFront', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() }, { label: 'menu.sendToBack', icon: 'send-to-back', action: () => this.engineRef.sendToBack() }, { label: 'menu.moveUp', icon: 'arrow-up-from-dot', action: () => this.engineRef.bringForward() }, { label: 'menu.moveDown', icon: 'arrow-down-from-dot', action: () => this.engineRef.sendBackward() }, ], }, { label: 'menu.align', icon: 'align', group: 'other', children: [ { label: 'menu.alignLeft', icon: 'align-start-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.StartHorizontal) }, { label: 'menu.alignCenterHorizontal', icon: 'align-center-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterHorizontal) }, { label: 'menu.alignRight', icon: 'align-end-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.EndHorizontal) }, { label: 'menu.alignTop', icon: 'align-start-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.StartVertical) }, { label: 'menu.alignCenterVertical', icon: 'align-center-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterVertical) }, { label: 'menu.alignBottom', icon: 'align-end-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.EndVertical) }, ], }, { label: 'menu.group', icon: 'group', group: 'other', children: [ { label: 'menu.group', icon: 'group', action: () => this.engineRef.group(), }, { label: 'menu.ungroup', icon: 'ungroup', action: () => this.engineRef.ungroup(), }, ], }, { label: 'menu.delete', icon: 'delete', group: 'edit', action: () => this.engineRef.delete() }, ]
3007
3008
  */
3008
3009
  "objectContextMenuItems"?: ContextMenuItem[];
3009
3010
  "onActiveWorkspaceChange"?: (event: KritzelEditorCustomEvent<ActiveWorkspaceChangeEvent>) => void;
@@ -3,4 +3,4 @@
3
3
  * This file is auto-generated by the version bump scripts.
4
4
  * Do not modify manually.
5
5
  */
6
- export declare const KRITZEL_VERSION = "0.4.8";
6
+ export declare const KRITZEL_VERSION = "0.4.9";
@@ -2,4 +2,8 @@ export declare class ObjectHelper {
2
2
  static generateUUID(length?: number): string;
3
3
  static isEmpty(obj: any): boolean;
4
4
  static isClass<T>(object: unknown, className: string): object is T;
5
+ static isKritzelExportable(object: unknown): object is {
6
+ getSupportedExportFormats(): string[];
7
+ exportAs(format: string, context: unknown): Promise<string | null>;
8
+ };
5
9
  }
@@ -45,6 +45,7 @@ export * from './classes/registries/custom-element-renderer.registry';
45
45
  export * from './classes/registries/font-registry.class';
46
46
  export * from './interfaces/toolbar-control.interface';
47
47
  export * from './interfaces/menu-item.interface';
48
+ export * from './interfaces/object-export.interface';
48
49
  export * from './interfaces/object-change-event.interface';
49
50
  export * from './interfaces/custom-element-renderer.interface';
50
51
  export * from './interfaces/sync-provider.interface';
@@ -10,7 +10,7 @@ export interface IKritzelMenuItem<T = any> {
10
10
  isSelected?: boolean;
11
11
  isEditing?: boolean;
12
12
  isDisabled?: boolean;
13
- isVisible?: boolean;
13
+ isVisible?: boolean | (() => boolean | Promise<boolean>);
14
14
  isChildMenuOpen?: boolean;
15
15
  isNewItem?: boolean;
16
16
  childMenuAnchor?: HTMLElement;