@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.
- package/LICENSE.md +49 -49
- package/dist/cjs/{engine.constants-CakmdKMW.js → engine.constants-VyFrUl1W.js} +627 -129
- package/dist/cjs/{index-BbbWU2aN.js → index-BP5Iy6FQ.js} +27 -9
- package/dist/cjs/index.cjs.js +4 -2
- package/dist/cjs/kritzel-awareness-cursors_5.cjs.entry.js +257 -113
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/stencil.cjs.js +3 -3
- package/dist/collection/classes/core/core.class.js +40 -32
- package/dist/collection/classes/core/reviver.class.js +4 -0
- package/dist/collection/classes/core/store.class.js +10 -3
- package/dist/collection/classes/managers/cursor.manager.js +10 -5
- package/dist/collection/classes/objects/dynamic-object.class.js +18 -5
- package/dist/collection/classes/objects/iframe.class.js +447 -0
- package/dist/collection/classes/registries/icon-registry.class.js +100 -67
- package/dist/collection/classes/tools/selection-tool.class.js +3 -3
- package/dist/collection/collection-manifest.json +4 -2
- package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.css +115 -115
- package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.js +1 -1
- package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -10
- package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
- package/dist/collection/components/kritzel-engine/kritzel-engine.css +80 -80
- package/dist/collection/components/kritzel-engine/kritzel-engine.js +196 -44
- package/dist/collection/components/kritzel-icon/kritzel-icon.css +18 -18
- package/dist/collection/components/kritzel-icon/kritzel-icon.js +25 -4
- package/dist/collection/components/kritzel-watermark/kritzel-watermark.css +29 -29
- package/dist/collection/components/kritzel-watermark/kritzel-watermark.js +2 -2
- package/dist/collection/constants/version.js +1 -1
- package/dist/collection/helpers/cursor.helper.js +8 -8
- package/dist/collection/helpers/object.helper.js +13 -0
- package/dist/collection/helpers/svg-export.helper.js +55 -41
- package/dist/collection/helpers/wheel.helper.js +1 -7
- package/dist/collection/index.js +3 -0
- package/dist/collection/interfaces/embedded-object.interface.js +1 -0
- package/dist/collection/themes/dark-theme.js +1 -5
- package/dist/collection/themes/light-theme.js +1 -6
- package/dist/components/index.js +7 -7
- package/dist/components/kritzel-awareness-cursors.js +1 -1
- package/dist/components/kritzel-cursor-trail.js +1 -1
- package/dist/components/kritzel-engine.js +755 -161
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-watermark.js +1 -1
- package/dist/components/{p-B2Htv9ou.js → p-BHVbfJrf.js} +3 -3
- package/dist/components/{p-YP8wAcF4.js → p-BTU9qcSW.js} +2 -2
- package/dist/components/{p-CfSx6HU_.js → p-BWfRbEIq.js} +16 -4
- package/dist/components/p-NAEiq8CK.js +214 -0
- package/dist/components/{p-BvRGQvVI.js → p-k0LxV9Bg.js} +18 -14
- package/dist/esm/{engine.constants-Bl5-pbq-.js → engine.constants-BHTr2qPx.js} +626 -130
- package/dist/esm/{index-BU9Mv7y0.js → index-C8PnHbLt.js} +27 -10
- package/dist/esm/index.js +3 -3
- package/dist/esm/kritzel-awareness-cursors_5.entry.js +257 -113
- package/dist/esm/loader.js +3 -3
- package/dist/esm/stencil.js +4 -4
- package/dist/stencil/index.esm.js +3 -3
- package/dist/stencil/{p-f0a8b7af.entry.js → p-40097a38.entry.js} +257 -113
- package/dist/stencil/{p-Bl5-pbq-.js → p-BHTr2qPx.js} +626 -130
- package/dist/stencil/{p-BU9Mv7y0.js → p-C8PnHbLt.js} +27 -10
- package/dist/stencil/stencil.esm.js +4 -4
- package/dist/types/classes/core/store.class.d.ts +3 -2
- package/dist/types/classes/objects/dynamic-object.class.d.ts +4 -2
- package/dist/types/classes/objects/iframe.class.d.ts +76 -0
- package/dist/types/classes/registries/icon-registry.class.d.ts +75 -6
- package/dist/types/components/kritzel-engine/kritzel-engine.d.ts +14 -1
- package/dist/types/components/kritzel-icon/kritzel-icon.d.ts +5 -1
- package/dist/types/components.d.ts +26 -8
- package/dist/types/constants/version.d.ts +1 -1
- package/dist/types/helpers/cursor.helper.d.ts +2 -1
- package/dist/types/helpers/object.helper.d.ts +2 -0
- package/dist/types/helpers/svg-export.helper.d.ts +1 -0
- package/dist/types/helpers/wheel.helper.d.ts +2 -2
- package/dist/types/index.d.ts +3 -0
- package/dist/types/interfaces/context-menu-item.interface.d.ts +2 -1
- package/dist/types/interfaces/dynamic-object-renderer.interface.d.ts +7 -0
- package/dist/types/interfaces/embedded-object.interface.d.ts +9 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +3 -2
- package/dist/types/interfaces/login-config.interface.d.ts +2 -1
- package/dist/types/interfaces/master-detail.interface.d.ts +2 -1
- package/dist/types/interfaces/menu-item.interface.d.ts +2 -1
- package/dist/types/interfaces/theme.interface.d.ts +6 -7
- package/dist/types/interfaces/tool.interface.d.ts +9 -0
- package/dist/types/interfaces/toolbar-item.interface.d.ts +3 -2
- package/dist/types/stencil-public-runtime.d.ts +61 -55
- package/package.json +3 -1
- package/readme.md +10 -10
- package/dist/components/p-fx6msYHJ.js +0 -167
|
@@ -2,7 +2,7 @@ const NAMESPACE = 'stencil';
|
|
|
2
2
|
const BUILD = /* stencil */ { hotModuleReplacement: false, hydratedSelectorName: "hydrated", lazyLoad: true, propChangeCallback: true, state: true, updatable: true};
|
|
3
3
|
|
|
4
4
|
/*
|
|
5
|
-
Stencil Client Platform v4.
|
|
5
|
+
Stencil Client Platform v4.45.1 | MIT Licensed | https://stenciljs.com
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
|
|
@@ -835,7 +835,7 @@ var updateChildren = (parentElm, oldCh, newVNode2, newCh, isInitialRender = fals
|
|
|
835
835
|
if (idxInOld >= 0) {
|
|
836
836
|
elmToMove = oldCh[idxInOld];
|
|
837
837
|
if (elmToMove.$tag$ !== newStartVnode.$tag$) {
|
|
838
|
-
node = createElm(oldCh && oldCh[newStartIdx], newVNode2,
|
|
838
|
+
node = createElm(oldCh && oldCh[newStartIdx], newVNode2, newStartIdx);
|
|
839
839
|
} else {
|
|
840
840
|
patch(elmToMove, newStartVnode, isInitialRender);
|
|
841
841
|
oldCh[idxInOld] = void 0;
|
|
@@ -1114,6 +1114,17 @@ var postUpdateComponent = (hostRef) => {
|
|
|
1114
1114
|
hostRef.$flags$ &= -517;
|
|
1115
1115
|
}
|
|
1116
1116
|
};
|
|
1117
|
+
var forceUpdate = (ref) => {
|
|
1118
|
+
var _a;
|
|
1119
|
+
{
|
|
1120
|
+
const hostRef = getHostRef(ref);
|
|
1121
|
+
const isConnected = (_a = hostRef == null ? void 0 : hostRef.$hostElement$) == null ? void 0 : _a.isConnected;
|
|
1122
|
+
if (isConnected && (hostRef.$flags$ & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {
|
|
1123
|
+
scheduleUpdate(hostRef, false);
|
|
1124
|
+
}
|
|
1125
|
+
return isConnected;
|
|
1126
|
+
}
|
|
1127
|
+
};
|
|
1117
1128
|
var appDidLoad = (who) => {
|
|
1118
1129
|
nextTick(() => emitEvent(win, "appload", { detail: { namespace: NAMESPACE } }));
|
|
1119
1130
|
};
|
|
@@ -1259,21 +1270,26 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
|
1259
1270
|
}
|
|
1260
1271
|
return;
|
|
1261
1272
|
}
|
|
1262
|
-
const
|
|
1273
|
+
const parsedValue = parsePropertyValue(
|
|
1274
|
+
newValue,
|
|
1275
|
+
memberFlags);
|
|
1276
|
+
const setterSetVal = (val) => {
|
|
1263
1277
|
const currentValue = ref.$lazyInstance$[memberName];
|
|
1264
1278
|
if (!ref.$instanceValues$.get(memberName) && currentValue) {
|
|
1265
1279
|
ref.$instanceValues$.set(memberName, currentValue);
|
|
1266
1280
|
}
|
|
1267
|
-
ref.$lazyInstance$[memberName] =
|
|
1268
|
-
newValue,
|
|
1269
|
-
memberFlags);
|
|
1281
|
+
ref.$lazyInstance$[memberName] = val;
|
|
1270
1282
|
setValue(this, memberName, ref.$lazyInstance$[memberName], cmpMeta);
|
|
1271
1283
|
};
|
|
1272
1284
|
if (ref.$lazyInstance$) {
|
|
1273
|
-
setterSetVal();
|
|
1285
|
+
setterSetVal(parsedValue);
|
|
1274
1286
|
} else {
|
|
1287
|
+
ref.$instanceValues$.set(memberName, parsedValue);
|
|
1275
1288
|
ref.$fetchedCbList$.push(() => {
|
|
1276
|
-
|
|
1289
|
+
const pendingValue = ref.$instanceValues$.get(memberName);
|
|
1290
|
+
if (ref.$lazyInstance$[memberName] !== pendingValue) {
|
|
1291
|
+
setterSetVal(pendingValue);
|
|
1292
|
+
}
|
|
1277
1293
|
});
|
|
1278
1294
|
}
|
|
1279
1295
|
}
|
|
@@ -1327,8 +1343,9 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
|
1327
1343
|
if (isBooleanTarget) {
|
|
1328
1344
|
newValue = newValue === null || newValue === "false" ? false : true;
|
|
1329
1345
|
}
|
|
1346
|
+
const currentValue = propMemberFlags & 4096 /* Setter */ ? hostRef.$instanceValues$.get(propName) : this[propName];
|
|
1330
1347
|
const propDesc = Object.getOwnPropertyDescriptor(prototype, propName);
|
|
1331
|
-
if (!isSpuriousBooleanRemoval && newValue !=
|
|
1348
|
+
if (!isSpuriousBooleanRemoval && newValue != currentValue && (!propDesc.get || !!propDesc.set)) {
|
|
1332
1349
|
this[propName] = newValue;
|
|
1333
1350
|
}
|
|
1334
1351
|
});
|
|
@@ -1699,4 +1716,4 @@ function transformTag(tag) {
|
|
|
1699
1716
|
return tag;
|
|
1700
1717
|
}
|
|
1701
1718
|
|
|
1702
|
-
export { Host as H, bootstrapLazy as b, createEvent as c, getElement as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
|
|
1719
|
+
export { Host as H, bootstrapLazy as b, createEvent as c, forceUpdate as f, getElement as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { p as promiseResolve, b as bootstrapLazy } from './p-
|
|
2
|
-
export { s as setNonce } from './p-
|
|
1
|
+
import { p as promiseResolve, b as bootstrapLazy } from './p-C8PnHbLt.js';
|
|
2
|
+
export { s as setNonce } from './p-C8PnHbLt.js';
|
|
3
3
|
import { g as globalScripts } from './p-DQuL1Twl.js';
|
|
4
4
|
|
|
5
5
|
/*
|
|
6
|
-
Stencil Client Patch Browser v4.
|
|
6
|
+
Stencil Client Patch Browser v4.45.1 | MIT Licensed | https://stenciljs.com
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
var patchBrowser = () => {
|
|
@@ -17,5 +17,5 @@ var patchBrowser = () => {
|
|
|
17
17
|
|
|
18
18
|
patchBrowser().then(async (options) => {
|
|
19
19
|
await globalScripts();
|
|
20
|
-
return bootstrapLazy([["p-
|
|
20
|
+
return bootstrapLazy([["p-40097a38",[[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);
|
|
21
21
|
});
|
|
@@ -5,7 +5,7 @@ import { KritzelText } from '../objects/text.class';
|
|
|
5
5
|
import { KritzelShape } from '../objects/shape.class';
|
|
6
6
|
import { KritzelPath } from '../objects/path.class';
|
|
7
7
|
import { KritzelLine } from '../objects/line.class';
|
|
8
|
-
import {
|
|
8
|
+
import { KritzelEmbeddedObject } from '../../interfaces/embedded-object.interface';
|
|
9
9
|
import { StateChangeListener, StatePropertyKey } from '../../types/state.types';
|
|
10
10
|
import { KritzelObjectMap } from '../structures/object-map.structure';
|
|
11
11
|
import { KritzelBaseObject } from '../objects/base-object.class';
|
|
@@ -135,7 +135,8 @@ export declare class KritzelStore {
|
|
|
135
135
|
* Gets the currently selected dynamic object whose focused descendant is an input-like element.
|
|
136
136
|
* @returns The interactive dynamic object with focused input-like content, or null if none matches
|
|
137
137
|
*/
|
|
138
|
-
get
|
|
138
|
+
get activeInteractiveEmbeddedObject(): KritzelEmbeddedObject | null;
|
|
139
|
+
get activeInteractiveDynamicObject(): KritzelEmbeddedObject | null;
|
|
139
140
|
/**
|
|
140
141
|
* Gets the path currently being drawn (not yet completed).
|
|
141
142
|
* @returns The incomplete path object, or null if no path is being drawn
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { KritzelCore } from '../core/core.class';
|
|
2
2
|
import { KritzelBaseObject } from './base-object.class';
|
|
3
|
+
import { KritzelEmbeddedObject } from '../../interfaces/embedded-object.interface';
|
|
3
4
|
/**
|
|
4
5
|
* Configuration options for creating a KritzelDynamicObject instance.
|
|
5
6
|
*/
|
|
@@ -19,7 +20,7 @@ export interface KritzelDynamicObjectConfig {
|
|
|
19
20
|
* Extends KritzelBaseObject to inherit common object functionality like positioning,
|
|
20
21
|
* scaling, and lifecycle management.
|
|
21
22
|
*/
|
|
22
|
-
export declare class KritzelDynamicObject extends KritzelBaseObject<HTMLElement> {
|
|
23
|
+
export declare class KritzelDynamicObject extends KritzelBaseObject<HTMLElement> implements KritzelEmbeddedObject {
|
|
23
24
|
__class__: string;
|
|
24
25
|
/** The HTML element to be rendered on the canvas. */
|
|
25
26
|
element: HTMLElement;
|
|
@@ -80,7 +81,7 @@ export declare class KritzelDynamicObject extends KritzelBaseObject<HTMLElement>
|
|
|
80
81
|
* currently owns focus.
|
|
81
82
|
*/
|
|
82
83
|
hasFocusedInputElement(): boolean;
|
|
83
|
-
|
|
84
|
+
getEmbeddedContentRoots(): HTMLElement[];
|
|
84
85
|
/**
|
|
85
86
|
* Returns true when the given host (or, via the flat tree, one of its shadow descendants)
|
|
86
87
|
* currently contains a focused input-like element.
|
|
@@ -137,6 +138,7 @@ export declare class KritzelDynamicObject extends KritzelBaseObject<HTMLElement>
|
|
|
137
138
|
* @returns A serializable object with htmlString and dimension snapshots
|
|
138
139
|
*/
|
|
139
140
|
serialize(): any;
|
|
141
|
+
private serializeRendererData;
|
|
140
142
|
/**
|
|
141
143
|
* Deserializes the dynamic object from a plain object.
|
|
142
144
|
* Reconstructs the element from stored HTML string with fallback to placeholder.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { KritzelEmbeddedObject } from '../../interfaces/embedded-object.interface';
|
|
2
|
+
import { KritzelCore } from '../core/core.class';
|
|
3
|
+
import { KritzelBaseObject } from './base-object.class';
|
|
4
|
+
export interface KritzelIframeContent {
|
|
5
|
+
html: string;
|
|
6
|
+
css: string;
|
|
7
|
+
script: string;
|
|
8
|
+
}
|
|
9
|
+
export interface KritzelIframeObjectConfig extends Partial<KritzelIframeContent> {
|
|
10
|
+
content?: Partial<KritzelIframeContent>;
|
|
11
|
+
loadingContent?: Partial<KritzelIframeContent>;
|
|
12
|
+
isLoading?: boolean;
|
|
13
|
+
state?: Record<string, unknown>;
|
|
14
|
+
title?: string;
|
|
15
|
+
sandbox?: string[];
|
|
16
|
+
translateX?: number;
|
|
17
|
+
translateY?: number;
|
|
18
|
+
rotation?: number;
|
|
19
|
+
scale?: number;
|
|
20
|
+
width?: number;
|
|
21
|
+
height?: number;
|
|
22
|
+
borderRadius?: number | string;
|
|
23
|
+
boxShadow?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface KritzelIframeObjectLifecycleContext {
|
|
26
|
+
object: KritzelIframeObject;
|
|
27
|
+
iframe: HTMLIFrameElement | null;
|
|
28
|
+
state: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export declare class KritzelIframeObject extends KritzelBaseObject<HTMLIFrameElement> implements KritzelEmbeddedObject {
|
|
31
|
+
__class__: string;
|
|
32
|
+
content: KritzelIframeContent;
|
|
33
|
+
loadingContent?: KritzelIframeContent;
|
|
34
|
+
isLoading: boolean;
|
|
35
|
+
state: Record<string, unknown>;
|
|
36
|
+
title: string;
|
|
37
|
+
sandbox: string[];
|
|
38
|
+
borderRadius?: number | string;
|
|
39
|
+
boxShadow?: string;
|
|
40
|
+
get html(): string;
|
|
41
|
+
set html(value: string);
|
|
42
|
+
get css(): string;
|
|
43
|
+
set css(value: string);
|
|
44
|
+
get script(): string;
|
|
45
|
+
set script(value: string);
|
|
46
|
+
private messageListener;
|
|
47
|
+
constructor(config?: KritzelIframeObjectConfig);
|
|
48
|
+
static create(core: KritzelCore, config?: KritzelIframeObjectConfig): KritzelIframeObject;
|
|
49
|
+
get sandboxAttribute(): string;
|
|
50
|
+
mount(iframe: HTMLIFrameElement): void;
|
|
51
|
+
unmount(): void;
|
|
52
|
+
setContent(content: Partial<KritzelIframeContent>): void;
|
|
53
|
+
setLoadingContent(content: Partial<KritzelIframeContent>): void;
|
|
54
|
+
setLoading(isLoading: boolean): void;
|
|
55
|
+
getActiveContent(): KritzelIframeContent;
|
|
56
|
+
setState(state: Record<string, unknown>): void;
|
|
57
|
+
setIsInteractive(isInteractive: boolean): void;
|
|
58
|
+
hasFocusedInputElement(): boolean;
|
|
59
|
+
getEmbeddedContentRoots(): HTMLElement[];
|
|
60
|
+
protected onMount(_context: KritzelIframeObjectLifecycleContext): void;
|
|
61
|
+
protected onSerialize(context: KritzelIframeObjectLifecycleContext): Record<string, unknown>;
|
|
62
|
+
protected onUnmount(context: KritzelIframeObjectLifecycleContext): Record<string, unknown> | undefined;
|
|
63
|
+
serialize(): Record<string, unknown>;
|
|
64
|
+
deserialize<T>(object: Record<string, unknown>): T;
|
|
65
|
+
copy(): KritzelIframeObject;
|
|
66
|
+
clone(): KritzelIframeObject;
|
|
67
|
+
adoptTransientStateFrom(previous: KritzelBaseObject<any>): void;
|
|
68
|
+
private createLifecycleContext;
|
|
69
|
+
private normalizeSandbox;
|
|
70
|
+
private createSourceDocument;
|
|
71
|
+
private handleMessage;
|
|
72
|
+
private dispatchPointerMessage;
|
|
73
|
+
private dispatchContextMenuMessage;
|
|
74
|
+
private refreshDocument;
|
|
75
|
+
private persistUpdate;
|
|
76
|
+
}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class KritzelIconRegistry {
|
|
6
6
|
/** Internal storage for registered icons, mapping icon names to their SVG content. */
|
|
7
|
-
private static registry;
|
|
7
|
+
private static get registry();
|
|
8
|
+
private static get listeners();
|
|
9
|
+
static subscribe(listener: (name: string) => void): () => void;
|
|
8
10
|
/**
|
|
9
11
|
* Registers a single icon with the given name and SVG content.
|
|
10
12
|
* If an icon with the same name already exists, it will be overwritten and a warning will be logged.
|
|
@@ -19,21 +21,88 @@ export declare class KritzelIconRegistry {
|
|
|
19
21
|
* @param name - The unique identifier of the icon to retrieve.
|
|
20
22
|
* @returns The SVG markup string if the icon exists, or `undefined` if not found.
|
|
21
23
|
*/
|
|
22
|
-
static get(name:
|
|
24
|
+
static get(name: KritzelIconName): string | undefined;
|
|
23
25
|
/**
|
|
24
26
|
* Registers multiple icons at once from an object mapping names to SVG content.
|
|
25
27
|
* This is a convenience method for bulk registration.
|
|
26
28
|
*
|
|
27
29
|
* @param icons - An object where keys are icon names and values are SVG markup strings.
|
|
28
30
|
*/
|
|
29
|
-
static registerIcons(icons:
|
|
30
|
-
[key: string]: string;
|
|
31
|
-
}): void;
|
|
31
|
+
static registerIcons(icons: KritzelSvgIconMap): void;
|
|
32
32
|
/**
|
|
33
33
|
* Checks whether an icon with the given name is registered.
|
|
34
34
|
*
|
|
35
35
|
* @param name - The unique identifier of the icon to check.
|
|
36
36
|
* @returns `true` if the icon exists in the registry, `false` otherwise.
|
|
37
37
|
*/
|
|
38
|
-
static has(name:
|
|
38
|
+
static has(name: KritzelIconName): boolean;
|
|
39
39
|
}
|
|
40
|
+
export declare const defaultIcons: {
|
|
41
|
+
cursor: string;
|
|
42
|
+
pen: string;
|
|
43
|
+
arrow: string;
|
|
44
|
+
arrowUpFromDot: string;
|
|
45
|
+
arrowDownFromDot: string;
|
|
46
|
+
highlighter: string;
|
|
47
|
+
eraser: string;
|
|
48
|
+
type: string;
|
|
49
|
+
shapes: string;
|
|
50
|
+
shapeRectangle: string;
|
|
51
|
+
shapeEllipse: string;
|
|
52
|
+
shapeTriangle: string;
|
|
53
|
+
image: string;
|
|
54
|
+
imageOff: string;
|
|
55
|
+
chevronDown: string;
|
|
56
|
+
chevronUp: string;
|
|
57
|
+
chevronLeft: string;
|
|
58
|
+
chevronRight: string;
|
|
59
|
+
chevronsLeft: string;
|
|
60
|
+
copy: string;
|
|
61
|
+
paste: string;
|
|
62
|
+
cut: string;
|
|
63
|
+
delete: string;
|
|
64
|
+
bringToFront: string;
|
|
65
|
+
sendToBack: string;
|
|
66
|
+
selectAll: string;
|
|
67
|
+
download: string;
|
|
68
|
+
upload: string;
|
|
69
|
+
undo: string;
|
|
70
|
+
redo: string;
|
|
71
|
+
plus: string;
|
|
72
|
+
minus: string;
|
|
73
|
+
ellipsisVertical: string;
|
|
74
|
+
x: string;
|
|
75
|
+
check: string;
|
|
76
|
+
group: string;
|
|
77
|
+
ungroup: string;
|
|
78
|
+
moveVertical: string;
|
|
79
|
+
hand: string;
|
|
80
|
+
handGrab: string;
|
|
81
|
+
mousePointer: string;
|
|
82
|
+
pointer: string;
|
|
83
|
+
settings: string;
|
|
84
|
+
share: string;
|
|
85
|
+
palette: string;
|
|
86
|
+
command: string;
|
|
87
|
+
info: string;
|
|
88
|
+
ordering: string;
|
|
89
|
+
layoutTemplate: string;
|
|
90
|
+
align: string;
|
|
91
|
+
alignStartHorizontal: string;
|
|
92
|
+
alignCenterHorizontal: string;
|
|
93
|
+
alignEndHorizontal: string;
|
|
94
|
+
alignStartVertical: string;
|
|
95
|
+
alignCenterVertical: string;
|
|
96
|
+
alignEndVertical: string;
|
|
97
|
+
viewport: string;
|
|
98
|
+
logOut: string;
|
|
99
|
+
usersRound: string;
|
|
100
|
+
google: string;
|
|
101
|
+
facebook: string;
|
|
102
|
+
github: string;
|
|
103
|
+
braces: string;
|
|
104
|
+
heart: string;
|
|
105
|
+
};
|
|
106
|
+
export type KritzelDefaultIconName = keyof typeof defaultIcons;
|
|
107
|
+
export type KritzelIconName = KritzelDefaultIconName | (string & NonNullable<unknown>);
|
|
108
|
+
export type KritzelSvgIconMap = Partial<Record<KritzelDefaultIconName, string>> & Record<string, string>;
|
|
@@ -24,6 +24,7 @@ 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
26
|
import { KritzelObjectExportFormat } from '../../interfaces/object-export.interface';
|
|
27
|
+
import { KritzelToolDefinition } from '../../interfaces/tool.interface';
|
|
27
28
|
export declare class KritzelEngine {
|
|
28
29
|
host: HTMLElement;
|
|
29
30
|
private activeImportFileInput?;
|
|
@@ -53,6 +54,9 @@ export declare class KritzelEngine {
|
|
|
53
54
|
/** The current user for awareness broadcasting (name, id, cursor position). */
|
|
54
55
|
user?: IKritzelUser;
|
|
55
56
|
onUserChange(newValue: IKritzelUser | undefined): void;
|
|
57
|
+
/** Tool definitions to register with this engine instance. */
|
|
58
|
+
tools: KritzelToolDefinition[];
|
|
59
|
+
onToolsChange(): void;
|
|
56
60
|
/** Context menu items shown when right-clicking the canvas background. */
|
|
57
61
|
globalContextMenuItems?: ContextMenuItem[];
|
|
58
62
|
onGlobalContextMenuItemsChange(newValue: ContextMenuItem[] | undefined): void;
|
|
@@ -190,7 +194,7 @@ export declare class KritzelEngine {
|
|
|
190
194
|
* Switches the active drawing tool by its registered name.
|
|
191
195
|
* @param toolName - The name the tool was registered with (e.g., 'brush', 'eraser').
|
|
192
196
|
*/
|
|
193
|
-
|
|
197
|
+
setActiveTool(toolName: string): Promise<void>;
|
|
194
198
|
/** Disables all user interaction with the engine (pointer, keyboard, etc.). */
|
|
195
199
|
disable(): Promise<void>;
|
|
196
200
|
/** Re-enables user interaction after a call to `disable()`. */
|
|
@@ -618,9 +622,13 @@ export declare class KritzelEngine {
|
|
|
618
622
|
private _stateChangeListenersRegistered;
|
|
619
623
|
private _workspaceInitializationPromise;
|
|
620
624
|
private _workspaceInitializationTargetKey;
|
|
625
|
+
private _workspacePropReconciliationPromise;
|
|
621
626
|
private _syncInitPromise;
|
|
627
|
+
private _toolsInitPromise;
|
|
628
|
+
private _toolsRevision;
|
|
622
629
|
private _syncConfigRevision;
|
|
623
630
|
private _assetStorageConfigRevision;
|
|
631
|
+
private _workspacesRevision;
|
|
624
632
|
private _hasLoggedUnlicensedWelcomeBanner;
|
|
625
633
|
private _previousVisibleDynamicObjects;
|
|
626
634
|
private _revealedImageKeys;
|
|
@@ -628,6 +636,9 @@ export declare class KritzelEngine {
|
|
|
628
636
|
private _sceneBootstrapTransitionEnabled;
|
|
629
637
|
private _sceneBootstrapTransitionTimer;
|
|
630
638
|
private readonly _defaultUndoState;
|
|
639
|
+
/** Returns a tool registered in this engine instance. */
|
|
640
|
+
getTool(toolName: string): Promise<KritzelBaseTool | null>;
|
|
641
|
+
private registerConfiguredTools;
|
|
631
642
|
private setLoadingState;
|
|
632
643
|
private isNetworkAvailable;
|
|
633
644
|
private emitContextMenuStateChange;
|
|
@@ -649,6 +660,8 @@ export declare class KritzelEngine {
|
|
|
649
660
|
componentWillLoad(): void;
|
|
650
661
|
componentDidLoad(): Promise<void>;
|
|
651
662
|
private initializeSyncAndWorkspace;
|
|
663
|
+
private waitForSceneRender;
|
|
664
|
+
private waitForWorkspaceAndSceneReady;
|
|
652
665
|
/**
|
|
653
666
|
* Initializes the asset storage layer with the latest config. Mirrors
|
|
654
667
|
* the in-flight replay logic of {@link doInitializeSyncAndWorkspace} for
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { KritzelIconName } from '../../classes/registries/icon-registry.class';
|
|
1
2
|
export declare class KritzelIcon {
|
|
2
|
-
name:
|
|
3
|
+
name: KritzelIconName;
|
|
3
4
|
label?: string;
|
|
4
5
|
size: number;
|
|
6
|
+
private unsubscribe?;
|
|
7
|
+
connectedCallback(): void;
|
|
8
|
+
disconnectedCallback(): void;
|
|
5
9
|
render(): any;
|
|
6
10
|
}
|
|
@@ -10,6 +10,7 @@ import { KritzelWorkspace } from "./classes/core/workspace.class";
|
|
|
10
10
|
import { KritzelSyncConfig } from "./interfaces/sync-config.interface";
|
|
11
11
|
import { KritzelAssetStorageConfig } from "./interfaces/asset-storage-config.interface";
|
|
12
12
|
import { IKritzelUser } from "./interfaces/user.interface";
|
|
13
|
+
import { KritzelToolDefinition } from "./interfaces/tool.interface";
|
|
13
14
|
import { ContextMenuItem } from "./interfaces/context-menu-item.interface";
|
|
14
15
|
import { KritzelTheme, ThemeName } from "./interfaces/theme.interface";
|
|
15
16
|
import { KritzelLocale, KritzelTermKey, KritzelTermVars, LocaleCode } from "./interfaces/localization.interface";
|
|
@@ -32,11 +33,13 @@ import { KritzelLine } from "./classes/objects/line.class";
|
|
|
32
33
|
import { KritzelShortcut } from "./interfaces/shortcut.interface";
|
|
33
34
|
import { KritzelObjectExportFormat } from "./interfaces/object-export.interface";
|
|
34
35
|
import { KritzelSettingsConfig } from "./interfaces/settings.interface";
|
|
36
|
+
import { KritzelIconName } from "./classes/registries/icon-registry.class";
|
|
35
37
|
export { KritzelCore } from "./classes/core/core.class";
|
|
36
38
|
export { KritzelWorkspace } from "./classes/core/workspace.class";
|
|
37
39
|
export { KritzelSyncConfig } from "./interfaces/sync-config.interface";
|
|
38
40
|
export { KritzelAssetStorageConfig } from "./interfaces/asset-storage-config.interface";
|
|
39
41
|
export { IKritzelUser } from "./interfaces/user.interface";
|
|
42
|
+
export { KritzelToolDefinition } from "./interfaces/tool.interface";
|
|
40
43
|
export { ContextMenuItem } from "./interfaces/context-menu-item.interface";
|
|
41
44
|
export { KritzelTheme, ThemeName } from "./interfaces/theme.interface";
|
|
42
45
|
export { KritzelLocale, KritzelTermKey, KritzelTermVars, LocaleCode } from "./interfaces/localization.interface";
|
|
@@ -59,6 +62,7 @@ export { KritzelLine } from "./classes/objects/line.class";
|
|
|
59
62
|
export { KritzelShortcut } from "./interfaces/shortcut.interface";
|
|
60
63
|
export { KritzelObjectExportFormat } from "./interfaces/object-export.interface";
|
|
61
64
|
export { KritzelSettingsConfig } from "./interfaces/settings.interface";
|
|
65
|
+
export { KritzelIconName } from "./classes/registries/icon-registry.class";
|
|
62
66
|
export namespace Components {
|
|
63
67
|
interface KritzelAwarenessCursors {
|
|
64
68
|
"core": KritzelCore;
|
|
@@ -146,11 +150,6 @@ export namespace Components {
|
|
|
146
150
|
* @returns `true` if objects were provided and the viewport was adjusted, `false` otherwise.
|
|
147
151
|
*/
|
|
148
152
|
"centerObjects": (objects: KritzelBaseObject[], animate?: boolean) => Promise<boolean>;
|
|
149
|
-
/**
|
|
150
|
-
* Switches the active drawing tool by its registered name.
|
|
151
|
-
* @param toolName - The name the tool was registered with (e.g., 'brush', 'eraser').
|
|
152
|
-
*/
|
|
153
|
-
"changeActiveTool": (toolName: string) => Promise<void>;
|
|
154
153
|
/**
|
|
155
154
|
* Deselects all currently selected objects.
|
|
156
155
|
*/
|
|
@@ -302,6 +301,10 @@ export namespace Components {
|
|
|
302
301
|
* Returns the currently selected objects. Returns an empty array if nothing is selected.
|
|
303
302
|
*/
|
|
304
303
|
"getSelectedObjects": () => Promise<KritzelBaseObject<any>[]>;
|
|
304
|
+
/**
|
|
305
|
+
* Returns a tool registered in this engine instance.
|
|
306
|
+
*/
|
|
307
|
+
"getTool": (toolName: string) => Promise<KritzelBaseTool | null>;
|
|
305
308
|
/**
|
|
306
309
|
* Returns the current viewport state including position, scale, and dimensions.
|
|
307
310
|
* @returns The current viewport state.
|
|
@@ -481,6 +484,11 @@ export namespace Components {
|
|
|
481
484
|
* @param object - The object to move. If omitted, applies to the current selection.
|
|
482
485
|
*/
|
|
483
486
|
"sendToBack": (object?: KritzelBaseObject<any>) => Promise<void>;
|
|
487
|
+
/**
|
|
488
|
+
* Switches the active drawing tool by its registered name.
|
|
489
|
+
* @param toolName - The name the tool was registered with (e.g., 'brush', 'eraser').
|
|
490
|
+
*/
|
|
491
|
+
"setActiveTool": (toolName: string) => Promise<void>;
|
|
484
492
|
/**
|
|
485
493
|
* Switches the active workspace in the engine by ID.
|
|
486
494
|
* @param id - The unique ID of the workspace to activate
|
|
@@ -517,6 +525,11 @@ export namespace Components {
|
|
|
517
525
|
* An array of available themes for the editor.
|
|
518
526
|
*/
|
|
519
527
|
"themes"?: KritzelTheme[];
|
|
528
|
+
/**
|
|
529
|
+
* Tool definitions to register with this engine instance.
|
|
530
|
+
* @default []
|
|
531
|
+
*/
|
|
532
|
+
"tools": KritzelToolDefinition[];
|
|
520
533
|
/**
|
|
521
534
|
* Manually triggers the `objectsSelectionChange` event.
|
|
522
535
|
*/
|
|
@@ -598,7 +611,7 @@ export namespace Components {
|
|
|
598
611
|
}
|
|
599
612
|
interface KritzelIcon {
|
|
600
613
|
"label"?: string;
|
|
601
|
-
"name":
|
|
614
|
+
"name": KritzelIconName;
|
|
602
615
|
/**
|
|
603
616
|
* @default 24
|
|
604
617
|
*/
|
|
@@ -867,6 +880,11 @@ declare namespace LocalJSX {
|
|
|
867
880
|
* An array of available themes for the editor.
|
|
868
881
|
*/
|
|
869
882
|
"themes"?: KritzelTheme[];
|
|
883
|
+
/**
|
|
884
|
+
* Tool definitions to register with this engine instance.
|
|
885
|
+
* @default []
|
|
886
|
+
*/
|
|
887
|
+
"tools"?: KritzelToolDefinition[];
|
|
870
888
|
/**
|
|
871
889
|
* The current user for awareness broadcasting (name, id, cursor position).
|
|
872
890
|
*/
|
|
@@ -898,7 +916,7 @@ declare namespace LocalJSX {
|
|
|
898
916
|
}
|
|
899
917
|
interface KritzelIcon {
|
|
900
918
|
"label"?: string;
|
|
901
|
-
"name"?:
|
|
919
|
+
"name"?: KritzelIconName;
|
|
902
920
|
/**
|
|
903
921
|
* @default 24
|
|
904
922
|
*/
|
|
@@ -944,7 +962,7 @@ declare namespace LocalJSX {
|
|
|
944
962
|
"isZoomingEnabled": boolean;
|
|
945
963
|
}
|
|
946
964
|
interface KritzelIconAttributes {
|
|
947
|
-
"name":
|
|
965
|
+
"name": KritzelIconName;
|
|
948
966
|
"label": string;
|
|
949
967
|
"size": number;
|
|
950
968
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { KritzelIconName } from '../classes/registries/icon-registry.class';
|
|
1
2
|
export declare class KritzelCursorHelper {
|
|
2
3
|
private static _pointerCursor;
|
|
3
4
|
/**
|
|
@@ -10,7 +11,7 @@ export declare class KritzelCursorHelper {
|
|
|
10
11
|
* The icon is retrieved from the KritzelIconRegistry.
|
|
11
12
|
*/
|
|
12
13
|
static getCursor(options: {
|
|
13
|
-
iconName:
|
|
14
|
+
iconName: KritzelIconName | 'default';
|
|
14
15
|
rotation?: number;
|
|
15
16
|
color?: string;
|
|
16
17
|
size?: number;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { KritzelEmbeddedObject } from '../interfaces/embedded-object.interface';
|
|
1
2
|
export declare class ObjectHelper {
|
|
2
3
|
static generateUUID(length?: number): string;
|
|
3
4
|
static isEmpty(obj: any): boolean;
|
|
4
5
|
static isClass<T>(object: unknown, className: string): object is T;
|
|
6
|
+
static isKritzelEmbeddedObject(object: unknown): object is KritzelEmbeddedObject;
|
|
5
7
|
static isKritzelExportable(object: unknown): object is {
|
|
6
8
|
getSupportedExportFormats(): string[];
|
|
7
9
|
exportAs(format: string, context: unknown): Promise<string | null>;
|
|
@@ -171,6 +171,7 @@ export declare class KritzelSvgExportHelper {
|
|
|
171
171
|
* @returns SVG element string
|
|
172
172
|
*/
|
|
173
173
|
private static dynamicObjectToSvg;
|
|
174
|
+
private static iframeObjectToSvg;
|
|
174
175
|
/**
|
|
175
176
|
* Converts a KritzelGroup to SVG by recursively converting children.
|
|
176
177
|
* @param group - The group object
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { KritzelEmbeddedObject } from '../interfaces/embedded-object.interface';
|
|
2
2
|
export declare class KritzelWheelHelper {
|
|
3
|
-
static shouldKeepWheelInDynamicObject(ev: WheelEvent, dynamicObject:
|
|
3
|
+
static shouldKeepWheelInDynamicObject(ev: WheelEvent, dynamicObject: KritzelEmbeddedObject): boolean;
|
|
4
4
|
private static getScrollableContainerFromEventPath;
|
|
5
5
|
private static isScrollableElement;
|
|
6
6
|
private static canElementConsumeWheel;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * from './classes/objects/line.class';
|
|
|
17
17
|
export * from './classes/objects/group.class';
|
|
18
18
|
export * from './classes/objects/shape.class';
|
|
19
19
|
export * from './classes/objects/dynamic-object.class';
|
|
20
|
+
export * from './classes/objects/iframe.class';
|
|
20
21
|
export * from './classes/objects/selection-group.class';
|
|
21
22
|
export * from './classes/objects/selection-box.class';
|
|
22
23
|
export * from './classes/tools/base-tool.class';
|
|
@@ -53,10 +54,12 @@ export * from './classes/registries/dynamic-object-renderer.registry';
|
|
|
53
54
|
export * from './classes/registries/font-registry.class';
|
|
54
55
|
export * from './classes/registries/icon-registry.class';
|
|
55
56
|
export * from './interfaces/toolbar-item.interface';
|
|
57
|
+
export * from './interfaces/tool.interface';
|
|
56
58
|
export * from './interfaces/menu-item.interface';
|
|
57
59
|
export * from './interfaces/object-export.interface';
|
|
58
60
|
export * from './interfaces/object-change-event.interface';
|
|
59
61
|
export * from './interfaces/dynamic-object-renderer.interface';
|
|
62
|
+
export * from './interfaces/embedded-object.interface';
|
|
60
63
|
export * from './interfaces/sync-provider.interface';
|
|
61
64
|
export * from './interfaces/sync-config.interface';
|
|
62
65
|
export * from './interfaces/asset.interface';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { KritzelBaseObject } from "../classes/objects/base-object.class";
|
|
2
|
+
import { KritzelIconName } from "../classes/registries/icon-registry.class";
|
|
2
3
|
import { KritzelTermKey } from "./localization.interface";
|
|
3
4
|
export interface ContextMenuItem {
|
|
4
5
|
/**
|
|
@@ -11,7 +12,7 @@ export interface ContextMenuItem {
|
|
|
11
12
|
x: number;
|
|
12
13
|
y: number;
|
|
13
14
|
}, objects: KritzelBaseObject[]) => void;
|
|
14
|
-
icon?:
|
|
15
|
+
icon?: KritzelIconName;
|
|
15
16
|
group?: string;
|
|
16
17
|
children?: ContextMenuItem[];
|
|
17
18
|
isVisible?: boolean | ((menu: {
|
|
@@ -29,6 +29,13 @@ export interface KritzelDynamicObjectRenderer {
|
|
|
29
29
|
* @param changedProperties - Array of property names that changed
|
|
30
30
|
*/
|
|
31
31
|
onUpdate?(context: KritzelDynamicObjectRenderContext, changedProperties: string[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Called when the object is serialized, including clipboard copy and workspace export.
|
|
34
|
+
* Return JSON-safe state that can recreate behavior when the object is revived.
|
|
35
|
+
* @param context - Render context with object, mounted container when available, and current data
|
|
36
|
+
* @returns Serializable renderer data to persist on the object
|
|
37
|
+
*/
|
|
38
|
+
onSerialize?(context: KritzelDynamicObjectRenderContext): unknown;
|
|
32
39
|
/**
|
|
33
40
|
* Called when the object leaves the viewport, is deleted, or workspace is unloaded.
|
|
34
41
|
* Renderer must clean up event listeners, timers, framework instances, and remove DOM.
|