kritzel-stencil 0.0.133 → 0.0.134
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/dist/cjs/{index-DCHCVnOl.js → index-DILpAbYp.js} +12 -5
- package/dist/cjs/index-DILpAbYp.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-color_22.cjs.entry.js +58 -71
- package/dist/collection/classes/commands/add-selection-group.command.js +6 -3
- package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
- package/dist/collection/classes/commands/move-selection-group.command.js +5 -0
- package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -1
- package/dist/collection/classes/core/core.class.js +3 -1
- package/dist/collection/classes/core/core.class.js.map +1 -1
- package/dist/collection/classes/core/history.class.js +1 -0
- package/dist/collection/classes/core/history.class.js.map +1 -1
- package/dist/collection/classes/core/viewport.class.js +0 -6
- package/dist/collection/classes/core/viewport.class.js.map +1 -1
- package/dist/collection/classes/handlers/key.handler.js +42 -58
- package/dist/collection/classes/handlers/key.handler.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +10 -3
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -2
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
- package/dist/collection/interfaces/shortcut.interface.js +2 -0
- package/dist/collection/interfaces/shortcut.interface.js.map +1 -0
- package/dist/components/index.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-editor.js +2 -2
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/{p-CwH-bwjb.js → p-CZzYv_iN.js} +69 -74
- package/dist/components/p-CZzYv_iN.js.map +1 -0
- package/dist/components/{p-BGdsAz54.js → p-DOPuq6gn.js} +3 -4
- package/dist/components/p-DOPuq6gn.js.map +1 -0
- package/dist/esm/{index-DY3KqYWc.js → index-BrCE-Ctm.js} +12 -5
- package/dist/esm/index-BrCE-Ctm.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/kritzel-color_22.entry.js +58 -71
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-092c9a05.entry.js +2 -0
- package/dist/stencil/p-092c9a05.entry.js.map +1 -0
- package/dist/stencil/p-BrCE-Ctm.js +2 -0
- package/dist/stencil/p-BrCE-Ctm.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/commands/add-selection-group.command.d.ts +2 -1
- package/dist/types/classes/handlers/key.handler.d.ts +2 -0
- package/dist/types/interfaces/shortcut.interface.d.ts +8 -0
- package/package.json +1 -1
- package/dist/cjs/index-DCHCVnOl.js.map +0 -1
- package/dist/components/p-BGdsAz54.js.map +0 -1
- package/dist/components/p-CwH-bwjb.js.map +0 -1
- package/dist/esm/index-DY3KqYWc.js.map +0 -1
- package/dist/stencil/p-DY3KqYWc.js +0 -2
- package/dist/stencil/p-DY3KqYWc.js.map +0 -1
- package/dist/stencil/p-dc534b01.entry.js +0 -2
- package/dist/stencil/p-dc534b01.entry.js.map +0 -1
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-nzUNdMPh.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-DILpAbYp.js');
|
|
5
5
|
|
|
6
6
|
const kritzelColorCss = ":host{display:flex}.checkerboard-bg{background:repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;position:relative;overflow:hidden}.color-circle{width:24px;height:24px;border-radius:50%;box-sizing:border-box;display:block}.color-circle.white{border:1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc)}";
|
|
7
7
|
|
|
@@ -117,7 +117,6 @@ const KritzelContextMenu = class {
|
|
|
117
117
|
close;
|
|
118
118
|
processedItems = [];
|
|
119
119
|
handleOutsideClick(event) {
|
|
120
|
-
event.preventDefault();
|
|
121
120
|
const path = event.composedPath();
|
|
122
121
|
if (!path.includes(this.host)) {
|
|
123
122
|
this.close.emit();
|
|
@@ -152,7 +151,7 @@ const KritzelContextMenu = class {
|
|
|
152
151
|
return defaultValue;
|
|
153
152
|
}
|
|
154
153
|
render() {
|
|
155
|
-
return (index.h(index.Host, { key: '
|
|
154
|
+
return (index.h(index.Host, { key: '908711e45cb4ea41f25c4f66a9d3b03c847f886e' }, index.h("div", { key: '7dcb6e5654ecafebc1fc1a2efb9fa1b8678236c4', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index$1) => (index.h("button", { key: `${item.label}-${index$1}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && index.h("kritzel-icon", { name: item.icon, size: 16 }), index.h("span", { class: "label" }, item.label)))))));
|
|
156
155
|
}
|
|
157
156
|
static get watchers() { return {
|
|
158
157
|
"items": ["onItemsChanged"]
|
|
@@ -1018,89 +1017,67 @@ class KritzelViewport {
|
|
|
1018
1017
|
this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
|
|
1019
1018
|
setTimeout(() => {
|
|
1020
1019
|
this._core.store.setState('isScaling', false);
|
|
1021
|
-
this._core.rerender();
|
|
1022
1020
|
}, 300);
|
|
1023
1021
|
}
|
|
1024
1022
|
handlePan(event) {
|
|
1025
|
-
this._core.store.setState('isPanning', true);
|
|
1026
1023
|
const panSpeed = 0.8;
|
|
1027
1024
|
this._core.store.setState('translateX', this._core.store.state.translateX - event.deltaX * panSpeed);
|
|
1028
1025
|
this._core.store.setState('translateY', this._core.store.state.translateY - event.deltaY * panSpeed);
|
|
1029
1026
|
this._core.store.setState('hasViewportChanged', true);
|
|
1030
1027
|
this._core.rerender();
|
|
1031
1028
|
this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
|
|
1032
|
-
setTimeout(() => {
|
|
1033
|
-
this._core.store.setState('isPanning', false);
|
|
1034
|
-
this._core.rerender();
|
|
1035
|
-
}, 300);
|
|
1036
1029
|
}
|
|
1037
1030
|
}
|
|
1038
1031
|
|
|
1039
1032
|
class KritzelKeyHandler extends index$1.KritzelBaseHandler {
|
|
1033
|
+
shortcuts = [
|
|
1034
|
+
// General
|
|
1035
|
+
{ key: 'Escape', condition: c => !!c.store.state.selectionGroup, action: c => c.clearSelection() },
|
|
1036
|
+
{ key: 'Delete', condition: c => !!c.store.state.selectionGroup, action: c => c.delete() },
|
|
1037
|
+
// History
|
|
1038
|
+
{ key: 'z', ctrl: true, action: c => c.history.undo() },
|
|
1039
|
+
{ key: 'y', ctrl: true, action: c => c.history.redo() },
|
|
1040
|
+
// Tool selection
|
|
1041
|
+
{ key: 's', ctrl: true, action: () => this.switchTool('selection') },
|
|
1042
|
+
{ key: 'b', ctrl: true, action: () => this.switchTool('brush') },
|
|
1043
|
+
{ key: 'e', ctrl: true, action: () => this.switchTool('eraser') },
|
|
1044
|
+
{ key: 'i', ctrl: true, action: () => this.switchTool('image') },
|
|
1045
|
+
{ key: 'x', ctrl: true, action: () => this.switchTool('text') },
|
|
1046
|
+
// Clipboard
|
|
1047
|
+
{
|
|
1048
|
+
key: 'c',
|
|
1049
|
+
ctrl: true,
|
|
1050
|
+
condition: c => !!c.store.state.selectionGroup,
|
|
1051
|
+
action: c => {
|
|
1052
|
+
c.copy();
|
|
1053
|
+
c.rerender();
|
|
1054
|
+
},
|
|
1055
|
+
},
|
|
1056
|
+
{ key: 'v', ctrl: true, condition: c => !!c.store.state.copiedObjects && !c.store.state.activeText, action: c => c.paste() },
|
|
1057
|
+
// Text editing
|
|
1058
|
+
{ key: 'a', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.selectAll() },
|
|
1059
|
+
{ key: 'v', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.insertFromClipboard() },
|
|
1060
|
+
// Object layering
|
|
1061
|
+
{ key: '+', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.bringForward() },
|
|
1062
|
+
{ key: '-', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.sendBackward() },
|
|
1063
|
+
{ key: '*', shift: true, condition: c => !!c.store.state.selectionGroup, action: c => c.bringToFront() },
|
|
1064
|
+
{ key: '_', shift: true, condition: c => !!c.store.state.selectionGroup, action: c => c.sendToBack() },
|
|
1065
|
+
];
|
|
1040
1066
|
constructor(core) {
|
|
1041
1067
|
super(core);
|
|
1042
1068
|
}
|
|
1069
|
+
switchTool(tool) {
|
|
1070
|
+
const toolInstance = index$1.KritzelToolRegistry.getTool(tool);
|
|
1071
|
+
this._core.store.setState('activeTool', toolInstance);
|
|
1072
|
+
this._core.deselectAllObjects();
|
|
1073
|
+
toolInstance.onActivate();
|
|
1074
|
+
}
|
|
1043
1075
|
handleKeyDown(event) {
|
|
1044
1076
|
this._core.store.setState('isCtrlKeyPressed', event.ctrlKey);
|
|
1045
|
-
|
|
1077
|
+
const shortcut = this.shortcuts.find(s => s.key === event.key && !!s.ctrl === event.ctrlKey && !!s.shift === event.shiftKey && (!s.condition || s.condition(this._core)));
|
|
1078
|
+
if (shortcut) {
|
|
1046
1079
|
event.preventDefault();
|
|
1047
|
-
|
|
1048
|
-
if (event.key === 'Escape' && this._core.store.state.selectionGroup) {
|
|
1049
|
-
this._core.clearSelection();
|
|
1050
|
-
}
|
|
1051
|
-
if (event.key === 'Delete' && this._core.store.state.selectionGroup) {
|
|
1052
|
-
this._core.delete();
|
|
1053
|
-
}
|
|
1054
|
-
if (event.key === 'z' && event.ctrlKey) {
|
|
1055
|
-
this._core.history.undo();
|
|
1056
|
-
}
|
|
1057
|
-
if (event.key === 'y' && event.ctrlKey) {
|
|
1058
|
-
this._core.history.redo();
|
|
1059
|
-
}
|
|
1060
|
-
if (event.key === 's' && event.ctrlKey) {
|
|
1061
|
-
this._core.store.setState('activeTool', index$1.KritzelToolRegistry.getTool('selection'));
|
|
1062
|
-
this._core.deselectAllObjects();
|
|
1063
|
-
}
|
|
1064
|
-
if (event.key === 'b' && event.ctrlKey) {
|
|
1065
|
-
this._core.store.setState('activeTool', index$1.KritzelToolRegistry.getTool('brush'));
|
|
1066
|
-
this._core.deselectAllObjects();
|
|
1067
|
-
}
|
|
1068
|
-
if (event.key === 'e' && event.ctrlKey) {
|
|
1069
|
-
this._core.store.setState('activeTool', index$1.KritzelToolRegistry.getTool('eraser'));
|
|
1070
|
-
this._core.deselectAllObjects();
|
|
1071
|
-
}
|
|
1072
|
-
if (event.key === 'i' && event.ctrlKey) {
|
|
1073
|
-
this._core.store.setState('activeTool', index$1.KritzelToolRegistry.getTool('image'));
|
|
1074
|
-
this._core.deselectAllObjects();
|
|
1075
|
-
}
|
|
1076
|
-
if (event.key === 'x' && event.ctrlKey) {
|
|
1077
|
-
this._core.store.setState('activeTool', index$1.KritzelToolRegistry.getTool('text'));
|
|
1078
|
-
this._core.deselectAllObjects();
|
|
1079
|
-
}
|
|
1080
|
-
if (event.key === 'c' && event.ctrlKey && this._core.store.state.selectionGroup) {
|
|
1081
|
-
this._core.copy();
|
|
1082
|
-
this._core.rerender();
|
|
1083
|
-
}
|
|
1084
|
-
if (event.key === 'v' && event.ctrlKey && this._core.store.state.copiedObjects) {
|
|
1085
|
-
this._core.paste();
|
|
1086
|
-
}
|
|
1087
|
-
if (event.key === '+' && event.ctrlKey && this._core.store.state.selectionGroup) {
|
|
1088
|
-
this._core.bringForward();
|
|
1089
|
-
}
|
|
1090
|
-
if (event.key === '-' && event.ctrlKey && this._core.store.state.selectionGroup) {
|
|
1091
|
-
this._core.sendBackward();
|
|
1092
|
-
}
|
|
1093
|
-
if (event.key === '*' && event.shiftKey && this._core.store.state.selectionGroup) {
|
|
1094
|
-
this._core.bringToFront();
|
|
1095
|
-
}
|
|
1096
|
-
if (event.key === '_' && event.shiftKey && this._core.store.state.selectionGroup) {
|
|
1097
|
-
this._core.sendToBack();
|
|
1098
|
-
}
|
|
1099
|
-
if (event.key === 'a' && event.ctrlKey && this._core.store.state.activeText) {
|
|
1100
|
-
this._core.store.state.activeText.selectAll();
|
|
1101
|
-
}
|
|
1102
|
-
if (event.key === 'v' && event.ctrlKey && this._core.store.state.activeText) {
|
|
1103
|
-
this._core.store.state.activeText.insertFromClipboard();
|
|
1080
|
+
shortcut.action(this._core);
|
|
1104
1081
|
}
|
|
1105
1082
|
}
|
|
1106
1083
|
handleKeyUp(event) {
|
|
@@ -1590,6 +1567,7 @@ class KritzelHistory {
|
|
|
1590
1567
|
console.info('undo', command);
|
|
1591
1568
|
this.redoStack.add(command);
|
|
1592
1569
|
}
|
|
1570
|
+
this._core.store.setState('copiedObjects', null);
|
|
1593
1571
|
this._core.rerender();
|
|
1594
1572
|
}
|
|
1595
1573
|
redo() {
|
|
@@ -1910,11 +1888,13 @@ class KritzelCore {
|
|
|
1910
1888
|
const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;
|
|
1911
1889
|
this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);
|
|
1912
1890
|
const commands = [];
|
|
1891
|
+
let previousSelectionGroup = null;
|
|
1913
1892
|
if (this._store.state.selectionGroup !== null) {
|
|
1893
|
+
previousSelectionGroup = this._store.state.selectionGroup;
|
|
1914
1894
|
commands.push(new index$1.RemoveSelectionGroupCommand(this, this._store.state.selectionGroup));
|
|
1915
1895
|
}
|
|
1916
1896
|
const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new index$1.AddObjectCommand(this, this, obj));
|
|
1917
|
-
const addCopiedObjectsAsSelectionGroupCommand = new index$1.AddSelectionGroupCommand(this, this, this._store.state.copiedObjects);
|
|
1897
|
+
const addCopiedObjectsAsSelectionGroupCommand = new index$1.AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);
|
|
1918
1898
|
commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);
|
|
1919
1899
|
this.history.executeCommand(new index$1.BatchCommand(this, this, commands));
|
|
1920
1900
|
this._store.setState('isSelecting', false);
|
|
@@ -2167,9 +2147,15 @@ const KritzelEngine = class {
|
|
|
2167
2147
|
this.viewport.handleResize();
|
|
2168
2148
|
}
|
|
2169
2149
|
handleKeyDown(ev) {
|
|
2150
|
+
if (this.core.store.isDisabled) {
|
|
2151
|
+
return;
|
|
2152
|
+
}
|
|
2170
2153
|
this.keyHandler.handleKeyDown(ev);
|
|
2171
2154
|
}
|
|
2172
2155
|
handleKeyUp(ev) {
|
|
2156
|
+
if (this.core.store.isDisabled) {
|
|
2157
|
+
return;
|
|
2158
|
+
}
|
|
2173
2159
|
this.keyHandler.handleKeyUp(ev);
|
|
2174
2160
|
}
|
|
2175
2161
|
async registerTool(toolName, toolClass, toolConfig) {
|
|
@@ -2350,6 +2336,7 @@ const KritzelEngine = class {
|
|
|
2350
2336
|
this.core.clearSelection();
|
|
2351
2337
|
}
|
|
2352
2338
|
this.core.store.setState('skipContextMenu', false);
|
|
2339
|
+
this.core.store.setState('copiedObjects', null);
|
|
2353
2340
|
this.activeToolChange.emit(activeTool);
|
|
2354
2341
|
index$1.KritzelKeyboardHelper.forceHideKeyboard();
|
|
2355
2342
|
}
|
|
@@ -2358,7 +2345,7 @@ const KritzelEngine = class {
|
|
|
2358
2345
|
const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
|
|
2359
2346
|
const baseHandleSize = parseFloat(baseHandleSizePx);
|
|
2360
2347
|
const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;
|
|
2361
|
-
return (index.h(index.Host, { key: '
|
|
2348
|
+
return (index.h(index.Host, { key: '54dce5fe3011a15e4cf77b1daecf578dd0402c67' }, index.h("div", { key: '569c4253054b6c6e84059175716f180a76fd8a04', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, index.h("div", { key: 'ff87fd8f171e46d211d92709d3141ad884ce0253' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: 'f43f53b4fc28ae9a7fe7e240635a3f410daaa72c' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: 'e2c45f541e0626a6ea1d5a36047fb2144eabf612' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'f7897dde7e2a0b3be1c73342523db9f0c361bdb9' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '8f6be6752c49f033eabfd63f1533666e4a4d3c15' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '26b96ecc0d184d9d224cfb14426503415a00a9ef' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '7275251e13cb83b670b944d6ce22015525247b83' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: 'f1f071ce637abd91639c0e6d0809d0493ff649e9' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'fbc6e5cc3fad57cbd54b821f9aa1b68b213447a0' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: 'ced900e880436a03d5490d818b10f079df3e2ed6' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'ffb1c5e0310d246f04e747df85dcfde58c81d83f' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '5ad7bc9e7957f071400cc997613ec080b6484b8e' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '42d93051cb0ea2e24ef549abbffcc720dd62efa8' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '78a54f7df911c0721fed70be15ccbefae5d99b33' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: 'e4c4ca2b3f5429a5f9378122a5bfc380eea82cc6' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '1947034670be8512d3654e104c7ea62bf70f207f' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: 'ecca8afceda81c4817db3e91f5bc4837056c4de0' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '1ca1d5cac7421442851f35574bd7765d850399f9' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '1e388d4dd59026dff761a598838b5bd10843d177' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '2c2b28eb4a9d293dd8d5d98a072f4bbeb7d0349c' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: 'e41abf270f34643902a0a8d049dad405ead68321' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0)), index.h("div", { key: 'e2ed793fac7f3f289daa962042e05e4fd8f44d3b', id: "origin", class: "origin", style: {
|
|
2362
2349
|
transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
|
|
2363
2350
|
} }, this.core.store.state.objectsMap.allObjects()?.map(object => {
|
|
2364
2351
|
return (index.h("div", { key: object.id, style: {
|
|
@@ -2477,7 +2464,7 @@ const KritzelEngine = class {
|
|
|
2477
2464
|
transform: this.core.store.state.currentPath?.transformationMatrix,
|
|
2478
2465
|
transformOrigin: 'top left',
|
|
2479
2466
|
overflow: 'visible',
|
|
2480
|
-
}, viewBox: this.core.store.state.currentPath?.viewBox }, index.h("path", { key: '
|
|
2467
|
+
}, viewBox: this.core.store.state.currentPath?.viewBox }, index.h("path", { key: '2070b03bfd123024e7075da1a969960cf8b37628', d: this.core.store.state.currentPath?.d, fill: this.core.store.state.currentPath?.fill, stroke: this.core.store.state.currentPath?.stroke }))), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: '3fc8fc5b1a75bd119effcf5b8f454e18b9c97fc6', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
|
|
2481
2468
|
position: 'fixed',
|
|
2482
2469
|
left: `${this.core.store.state.contextMenuX}px`,
|
|
2483
2470
|
top: `${this.core.store.state.contextMenuY}px`,
|
|
@@ -2488,7 +2475,7 @@ const KritzelEngine = class {
|
|
|
2488
2475
|
y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
|
|
2489
2476
|
}, this.core.store.state.selectionGroup?.objects);
|
|
2490
2477
|
this.hideContextMenu();
|
|
2491
|
-
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof index$1.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '
|
|
2478
|
+
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof index$1.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '11612f7439e34cf20843f5ab63b19d5ef07847d7', core: this.core })));
|
|
2492
2479
|
}
|
|
2493
2480
|
static get watchers() { return {
|
|
2494
2481
|
"workspace": ["onWorkspaceChange"],
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
import { KrtizelSelectionBox } from "../objects/selection-box.class";
|
|
2
|
+
import { KritzelSelectionGroup } from "../objects/selection-group.class";
|
|
2
3
|
import { KritzelBaseCommand } from "./base.command";
|
|
3
4
|
export class AddSelectionGroupCommand extends KritzelBaseCommand {
|
|
4
5
|
selectionGroup;
|
|
5
|
-
|
|
6
|
+
previousSelectionGroup;
|
|
7
|
+
constructor(core, initiator, selectionGroup, previousSelectionGroup, skipHistory = false) {
|
|
6
8
|
super(core, initiator, skipHistory);
|
|
7
9
|
this.selectionGroup = selectionGroup;
|
|
10
|
+
this.previousSelectionGroup = previousSelectionGroup || null;
|
|
8
11
|
}
|
|
9
12
|
execute() {
|
|
10
|
-
this._core.store.state.objectsMap.remove(object => object instanceof KrtizelSelectionBox);
|
|
13
|
+
this._core.store.state.objectsMap.remove(object => object instanceof KrtizelSelectionBox || object instanceof KritzelSelectionGroup);
|
|
11
14
|
this._core.store.state.objectsMap.insert(this.selectionGroup);
|
|
12
15
|
this._core.store.setState('selectionGroup', this.selectionGroup);
|
|
13
16
|
this._core.store.setState('selectionBox', null);
|
|
14
17
|
}
|
|
15
18
|
undo() {
|
|
16
19
|
this._core.store.state.objectsMap.remove(object => object.id === this.selectionGroup.id);
|
|
17
|
-
this._core.store.setState('selectionGroup',
|
|
20
|
+
this._core.store.setState('selectionGroup', this.previousSelectionGroup);
|
|
18
21
|
this._core.store.setState('selectionBox', null);
|
|
19
22
|
}
|
|
20
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-selection-group.command.js","sourceRoot":"","sources":["../../../src/classes/commands/add-selection-group.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"add-selection-group.command.js","sourceRoot":"","sources":["../../../src/classes/commands/add-selection-group.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IACtD,cAAc,CAAwB;IACtC,sBAAsB,CAA+B;IAE7D,YAAY,IAAiB,EAAE,SAAc,EAAE,cAAqC,EAAE,sBAA8C,EAAE,WAAW,GAAG,KAAK;QACvJ,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,IAAI,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,YAAY,mBAAmB,IAAI,MAAM,YAAY,qBAAqB,CAAC,CAAC;QACrI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACF","sourcesContent":["import { KritzelCore } from '../core/core.class';\r\nimport { KrtizelSelectionBox } from '../objects/selection-box.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class AddSelectionGroupCommand extends KritzelBaseCommand {\r\n private selectionGroup: KritzelSelectionGroup;\r\n private previousSelectionGroup: KritzelSelectionGroup | null;\r\n\r\n constructor(core: KritzelCore, initiator: any, selectionGroup: KritzelSelectionGroup, previousSelectionGroup?: KritzelSelectionGroup, skipHistory = false) {\r\n super(core, initiator, skipHistory);\r\n this.selectionGroup = selectionGroup;\r\n this.previousSelectionGroup = previousSelectionGroup || null;\r\n }\r\n\r\n execute(): void {\r\n this._core.store.state.objectsMap.remove(object => object instanceof KrtizelSelectionBox || object instanceof KritzelSelectionGroup);\r\n this._core.store.state.objectsMap.insert(this.selectionGroup);\r\n\r\n this._core.store.setState('selectionGroup', this.selectionGroup);\r\n this._core.store.setState('selectionBox', null);\r\n }\r\n\r\n undo(): void {\r\n this._core.store.state.objectsMap.remove(object => object.id === this.selectionGroup.id);\r\n this._core.store.setState('selectionGroup', this.previousSelectionGroup);\r\n this._core.store.setState('selectionBox', null);\r\n }\r\n}\r\n"]}
|
|
@@ -18,6 +18,11 @@ export class MoveSelectionGroupCommand extends KritzelBaseCommand {
|
|
|
18
18
|
execute() {
|
|
19
19
|
if (this.skipExecution) {
|
|
20
20
|
this.skipExecution = false;
|
|
21
|
+
// Skip execution, but still update objects
|
|
22
|
+
this._core.store.state.selectionGroup.objects.forEach(object => {
|
|
23
|
+
this._core.store.state.objectsMap.update(object);
|
|
24
|
+
this._core.updateObjectInDatabase(object);
|
|
25
|
+
});
|
|
21
26
|
return;
|
|
22
27
|
}
|
|
23
28
|
this._core.store.setState('selectionGroup', this.selectionGroup);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-selection-group.command.js","sourceRoot":"","sources":["../../../src/classes/commands/move-selection-group.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IACvD,cAAc,CAAwB;IAEtC,MAAM,CAAS;IAEf,MAAM,CAAS;IAEf,IAAI,CAAS;IAEb,IAAI,CAAS;IAEb,aAAa,CAAU;IAE/B,YAAY,IAAiB,EAAE,SAAc,EAAE,MAAc,EAAE,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,kBAAkB,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK;QACxJ,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { KritzelCore } from '../core/core.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class MoveSelectionGroupCommand extends KritzelBaseCommand {\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n private startX: number;\r\n\r\n private startY: number;\r\n\r\n private endX: number;\r\n\r\n private endY: number;\r\n\r\n private skipExecution: boolean;\r\n\r\n constructor(core: KritzelCore, initiator: any, startX: number, startY: number, endX: number, endY: number, skipFirstExecution = false, skipHistory = false) {\r\n super(core, initiator, skipHistory);\r\n this.startX = startX;\r\n this.startY = startY;\r\n this.endX = endX;\r\n this.endY = endY;\r\n this.skipExecution = skipFirstExecution;\r\n this.selectionGroup = this._core.store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n if (this.skipExecution) {\r\n this.skipExecution = false;\r\n return;\r\n }\r\n\r\n this._core.store.setState('selectionGroup', this.selectionGroup);\r\n this._core.store.state.selectionGroup.move(this.startX, this.startY, this.endX, this.endY);\r\n this._core.store.state.selectionGroup.objects.forEach(object => {\r\n this._core.store.state.objectsMap.update(object);\r\n this._core.updateObjectInDatabase(object);\r\n });\r\n }\r\n\r\n undo(): void {\r\n this._core.store.setState('selectionGroup', this.selectionGroup);\r\n this._core.store.state.selectionGroup.move(this.endX, this.endY, this.startX, this.startY);\r\n this._core.store.state.selectionGroup.objects.forEach(object => {\r\n this._core.store.state.objectsMap.update(object);\r\n this._core.updateObjectInDatabase(object);\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"move-selection-group.command.js","sourceRoot":"","sources":["../../../src/classes/commands/move-selection-group.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IACvD,cAAc,CAAwB;IAEtC,MAAM,CAAS;IAEf,MAAM,CAAS;IAEf,IAAI,CAAS;IAEb,IAAI,CAAS;IAEb,aAAa,CAAU;IAE/B,YAAY,IAAiB,EAAE,SAAc,EAAE,MAAc,EAAE,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,kBAAkB,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK;QACxJ,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,2CAA2C;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { KritzelCore } from '../core/core.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class MoveSelectionGroupCommand extends KritzelBaseCommand {\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n private startX: number;\r\n\r\n private startY: number;\r\n\r\n private endX: number;\r\n\r\n private endY: number;\r\n\r\n private skipExecution: boolean;\r\n\r\n constructor(core: KritzelCore, initiator: any, startX: number, startY: number, endX: number, endY: number, skipFirstExecution = false, skipHistory = false) {\r\n super(core, initiator, skipHistory);\r\n this.startX = startX;\r\n this.startY = startY;\r\n this.endX = endX;\r\n this.endY = endY;\r\n this.skipExecution = skipFirstExecution;\r\n this.selectionGroup = this._core.store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n if (this.skipExecution) {\r\n this.skipExecution = false;\r\n // Skip execution, but still update objects\r\n this._core.store.state.selectionGroup.objects.forEach(object => {\r\n this._core.store.state.objectsMap.update(object);\r\n this._core.updateObjectInDatabase(object);\r\n });\r\n return;\r\n }\r\n\r\n this._core.store.setState('selectionGroup', this.selectionGroup);\r\n this._core.store.state.selectionGroup.move(this.startX, this.startY, this.endX, this.endY);\r\n this._core.store.state.selectionGroup.objects.forEach(object => {\r\n this._core.store.state.objectsMap.update(object);\r\n this._core.updateObjectInDatabase(object);\r\n });\r\n }\r\n\r\n undo(): void {\r\n this._core.store.setState('selectionGroup', this.selectionGroup);\r\n this._core.store.state.selectionGroup.move(this.endX, this.endY, this.startX, this.startY);\r\n this._core.store.state.selectionGroup.objects.forEach(object => {\r\n this._core.store.state.objectsMap.update(object);\r\n this._core.updateObjectInDatabase(object);\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -215,11 +215,13 @@ export class KritzelCore {
|
|
|
215
215
|
const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;
|
|
216
216
|
this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);
|
|
217
217
|
const commands = [];
|
|
218
|
+
let previousSelectionGroup = null;
|
|
218
219
|
if (this._store.state.selectionGroup !== null) {
|
|
220
|
+
previousSelectionGroup = this._store.state.selectionGroup;
|
|
219
221
|
commands.push(new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup));
|
|
220
222
|
}
|
|
221
223
|
const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));
|
|
222
|
-
const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects);
|
|
224
|
+
const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);
|
|
223
225
|
commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);
|
|
224
226
|
this.history.executeCommand(new BatchCommand(this, this, commands));
|
|
225
227
|
this._store.setState('isSelecting', false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.class.js","sourceRoot":"","sources":["../../../src/classes/core/core.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelEngine } from '../../components/core/kritzel-engine/kritzel-engine';\r\nimport { KritzelContextMenu } from '../../components/ui/kritzel-context-menu/kritzel-context-menu';\r\nimport { DEFAULT_ENGINE_STATE } from '../../configs/default-engine-state';\r\nimport { ObjectHelper } from '../../helpers/object.helper';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { BatchCommand } from '../commands/batch.command';\r\nimport { RemoveObjectCommand } from '../commands/remove-object.command';\r\nimport { RemoveSelectionGroupCommand } from '../commands/remove-selection-group.command';\r\nimport { UpdateObjectCommand } from '../commands/update-object.command';\r\nimport { KritzelDatabase } from './database.class';\r\nimport { KritzelHistory } from './history.class';\r\nimport { KritzelBaseObject } from '../objects/base-object.class';\r\nimport { KrtizelSelectionBox } from '../objects/selection-box.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelReviver } from './reviver.class';\r\nimport { KritzelStore } from './store.class';\r\nimport { KritzelWorkspace } from './workspace.class';\r\n\r\nexport class KritzelCore {\r\n private readonly _kritzelEngine: KritzelEngine;\r\n private readonly _store: KritzelStore;\r\n private readonly _history: KritzelHistory;\r\n private readonly _database: KritzelDatabase;\r\n\r\n get engine(): KritzelEngine {\r\n return this._kritzelEngine;\r\n }\r\n\r\n get history(): KritzelHistory {\r\n return this._history;\r\n }\r\n\r\n get database(): KritzelDatabase {\r\n return this._database;\r\n }\r\n\r\n get store(): KritzelStore {\r\n return this._store;\r\n }\r\n\r\n constructor(kritzelEngine: KritzelEngine) {\r\n this._kritzelEngine = kritzelEngine;\r\n this._store = new KritzelStore(DEFAULT_ENGINE_STATE);\r\n this._history = new KritzelHistory(this);\r\n this._database = new KritzelDatabase('kritzelDB', 1, this._store.state.debugInfo.logDatabase);\r\n }\r\n\r\n async initializeDatabase(): Promise<void> {\r\n await this._database.open([\r\n {\r\n name: 'objects',\r\n options: { keyPath: ['workspaceId', 'id'] },\r\n },\r\n { name: 'workspaces', options: { keyPath: 'id' } },\r\n ]);\r\n\r\n this.rerender();\r\n }\r\n\r\n async initializeWorkspace(workspace?: KritzelWorkspace): Promise<void> {\r\n const workspaces = await this.getWorkspaces();\r\n const mostRecentWorkspace = [...workspaces].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0];\r\n const fallbackWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');\r\n\r\n this._store.setState('activeWorkspace', workspace ?? mostRecentWorkspace ?? fallbackWorkspace);\r\n\r\n const isExistingWorkspace = await this.getWorkspace(this._store.state.activeWorkspace.id);\r\n\r\n if (isExistingWorkspace) {\r\n await this.updateWorkspace(this._store.state.activeWorkspace);\r\n } else {\r\n await this.createWorkspace(this._store.state.activeWorkspace);\r\n }\r\n\r\n this._store.setState('workspaces', await this.getWorkspaces());\r\n\r\n this._store.setState('translateX', this._store.state.activeWorkspace.viewport.translateX);\r\n this._store.setState('translateY', this._store.state.activeWorkspace.viewport.translateY);\r\n this._store.setState('scale', this._store.state.activeWorkspace.viewport.scale);\r\n\r\n await this.initializeWorkspaceObjects(this._store.state.activeWorkspace.id);\r\n }\r\n\r\n private async initializeWorkspaceObjects(workspaceId: string): Promise<void> {\r\n this._store.state.objectsMap.reset();\r\n this._history.reset();\r\n\r\n const objectsFromDb = await this._database.getAllByRange<any>('objects', IDBKeyRange.bound([workspaceId], [workspaceId, '\\uffff']));\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n objectsFromDb.forEach(element => {\r\n const revivedObject = reviver.revive<KritzelBaseObject<any>>(element);\r\n this._store.state.objectsMap.insert(revivedObject);\r\n });\r\n\r\n this.rerender();\r\n }\r\n\r\n async updateWorkspaceViewport(translateX: number, translateY: number, scale: number) {\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.viewport = { translateX, translateY, scale };\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.update('workspaces', activeWorkspace);\r\n }\r\n\r\n async addObjectToDatabase(object: KritzelBaseObject<any>): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.add('objects', object), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error adding object to database:', err);\r\n });\r\n }\r\n\r\n async updateObjectInDatabase(object: KritzelBaseObject<any>): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.update('objects', object), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error updating object in database:', err);\r\n });\r\n }\r\n\r\n async deleteObjectFromDatabase(objectId: string): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.delete('objects', [activeWorkspace.id, objectId]), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error deleting object from database:', err);\r\n });\r\n }\r\n\r\n async getWorkspace(id: string): Promise<KritzelWorkspace | null> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n return this._database.get<KritzelWorkspace>('workspaces', id).then(rawWorkspace => (rawWorkspace ? reviver.revive<KritzelWorkspace>(rawWorkspace) : null));\r\n }\r\n\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n return this._database.getAll<KritzelWorkspace>('workspaces').then(rawWorkspaces => rawWorkspaces.map(ws => reviver.revive<KritzelWorkspace>(ws)));\r\n }\r\n\r\n async createWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n workspace.createdAt = new Date();\r\n workspace.updatedAt = new Date();\r\n\r\n await this._database.add('workspaces', workspace);\r\n\r\n this._store.state.workspaces.push(workspace);\r\n }\r\n\r\n async updateWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n workspace.updatedAt = new Date();\r\n\r\n await this._database.update('workspaces', workspace);\r\n\r\n const workspaces = this._store.state.workspaces;\r\n const index = workspaces.findIndex(w => w.id === workspace.id);\r\n\r\n if (index !== -1) {\r\n workspaces[index] = workspace;\r\n this._store.setState('workspaces', workspaces);\r\n }\r\n }\r\n\r\n async deleteWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const objectRange = IDBKeyRange.bound([workspace.id], [workspace.id, '\\uffff']);\r\n\r\n await this._database.deleteByRange('objects', objectRange);\r\n\r\n await this._database.delete('workspaces', workspace.id);\r\n\r\n this._store.setState(\r\n 'workspaces',\r\n this._store.state.workspaces.filter(ws => ws.id !== workspace.id),\r\n );\r\n }\r\n\r\n rerender() {\r\n if (this._kritzelEngine) {\r\n this._kritzelEngine.forceUpdate++;\r\n }\r\n }\r\n\r\n findObjectById(id: string): KritzelBaseObject<any> | null {\r\n for (const object of this._store.allObjects) {\r\n if (object.id === id) {\r\n return object;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n deselectAllObjects(): void {\r\n if (this._store.state.selectionGroup) {\r\n this._history.executeCommand(new RemoveSelectionGroupCommand(this, this));\r\n }\r\n }\r\n\r\n delete() {\r\n if (!this._store.state.selectionGroup) {\r\n return;\r\n }\r\n\r\n const deleteSelectedObjectsCommand = this._store.state.selectionGroup.objects.map(obj => new RemoveObjectCommand(this, this._store.state.selectionGroup, obj));\r\n const removeSelectionGroupCommand = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);\r\n const commands = [...deleteSelectedObjectsCommand, removeSelectionGroupCommand];\r\n\r\n this.history.executeCommand(new BatchCommand(this, this._store.state.selectionGroup, commands));\r\n }\r\n\r\n deleteObject(id: string, skipHistory: boolean = false) {\r\n const object = this.findObjectById(id);\r\n if (object) {\r\n const removeObjectCommand = new RemoveObjectCommand(this, this, object, skipHistory);\r\n this.history.executeCommand(removeObjectCommand);\r\n }\r\n }\r\n\r\n copy() {\r\n this._store.setState('copiedObjects', this._store.state.selectionGroup.copy() as KritzelSelectionGroup);\r\n }\r\n\r\n paste(x?: number, y?: number) {\r\n const copiedObjects = this._store.state.copiedObjects;\r\n copiedObjects.isSelected = true;\r\n\r\n this._store.setState('copiedObjects', copiedObjects);\r\n\r\n const adjustedX = x !== undefined ? x : this._store.state.copiedObjects.translateX + 25 / this._store.state.scale;\r\n const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;\r\n\r\n this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);\r\n\r\n const commands = [];\r\n if (this._store.state.selectionGroup !== null) {\r\n commands.push(new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup));\r\n }\r\n\r\n const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));\r\n const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects);\r\n\r\n commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, commands));\r\n\r\n this._store.setState('isSelecting', false);\r\n this._store.setState('copiedObjects', this._store.state.selectionGroup.copy() as KritzelSelectionGroup);\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n\r\n bringForward(object?: KritzelBaseObject<any>) {\r\n const max = this._store.allObjects.length + 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === max) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex + 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendBackward(object?: KritzelBaseObject<any>) {\r\n const min = 0;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === min) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex - 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n bringToFront(object?: KritzelBaseObject<any>) {\r\n const max = Math.max(...this._store.allObjects.map(obj => obj.zIndex)) + 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: max });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendToBack(object?: KritzelBaseObject<any>) {\r\n const min = Math.min(...this._store.allObjects.map(obj => obj.zIndex)) - 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: min });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n selectObjects(objects: KritzelBaseObject<any>[]) {\r\n if (objects.length === 0) {\r\n return;\r\n }\r\n\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n objects.forEach(obj => {\r\n obj.isSelected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.isSelected = true;\r\n\r\n this._store.setState('selectionGroup', selectionGroup);\r\n\r\n if (objects.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n }\r\n\r\n selectAllObjectsInViewport() {\r\n const objectsInViewport = this._store.state.objectsMap\r\n .filter(o => o.isInViewport())\r\n .filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KrtizelSelectionBox) && !(o instanceof KritzelContextMenu));\r\n\r\n if (objectsInViewport.length > 0) {\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n\r\n objectsInViewport.forEach(obj => {\r\n obj.isSelected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.isSelected = true;\r\n\r\n this._store.setState('isSelecting', false);\r\n\r\n if (objectsInViewport.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n }\r\n\r\n clearSelection() {\r\n const command = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);\r\n this.history.executeCommand(command);\r\n\r\n this._store.setState('selectionGroup', null);\r\n this._store.setState('selectionBox', null);\r\n this._store.setState('isSelecting', false);\r\n this._store.setState('isResizeHandleSelected', false);\r\n this._store.setState('isRotationHandleSelected', false);\r\n }\r\n\r\n resetActiveText() {\r\n if (this._store.state.activeText && this._store.state.activeText.value === ' ') {\r\n this.deleteObject(this._store.state.activeText.id, true);\r\n }\r\n\r\n this._store.setState('activeText', null);\r\n }\r\n\r\n getObjectFromPointerEvent(event: PointerEvent, selector = '.object'): KritzelBaseObject<any> | null {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return null;\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const elementAtPoint = shadowRoot.elementFromPoint(clientX, clientY);\r\n if (!elementAtPoint) return null;\r\n\r\n const selectedObject = elementAtPoint.closest(selector) as HTMLElement | null;\r\n\r\n if (selectedObject) {\r\n const foundObject = this._store.allObjects.find(object => selectedObject.id === object.id);\r\n const isHit = foundObject?.hitTest(clientX, clientY);\r\n return isHit ? foundObject : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getObjectsFromPointerEvent(event: PointerEvent, selector = '.object'): KritzelBaseObject<any>[] {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return [];\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const elementsAtPoint = shadowRoot.elementsFromPoint(clientX, clientY);\r\n if (!elementsAtPoint || elementsAtPoint.length === 0) return [];\r\n\r\n const objectIds = new Set<string>();\r\n\r\n elementsAtPoint.forEach(element => {\r\n const selectedObject = element.closest(selector) as HTMLElement | null;\r\n if (selectedObject && selectedObject.id) {\r\n objectIds.add(selectedObject.id);\r\n }\r\n });\r\n\r\n if (objectIds.size > 0) {\r\n return this._store.allObjects.filter(object => objectIds.has(object.id)).sort((a, b) => b.zIndex - a.zIndex);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getCanvasPoint(event: PointerEvent): { x: number; y: number } {\r\n if (!this._store.state.host) {\r\n return { x: 0, y: 0 };\r\n }\r\n\r\n const hostRect = this._store.state.host.getBoundingClientRect();\r\n\r\n const xRelativeToHost = event.clientX - hostRect.left;\r\n const yRelativeToHost = event.clientY - hostRect.top;\r\n\r\n const xWithoutTranslate = xRelativeToHost - this._store.state.translateX;\r\n const yWithoutTranslate = yRelativeToHost - this._store.state.translateY;\r\n\r\n const worldX = xWithoutTranslate / this._store.state.scale;\r\n const worldY = yWithoutTranslate / this._store.state.scale;\r\n\r\n return { x: worldX, y: worldY };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"core.class.js","sourceRoot":"","sources":["../../../src/classes/core/core.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelEngine } from '../../components/core/kritzel-engine/kritzel-engine';\r\nimport { KritzelContextMenu } from '../../components/ui/kritzel-context-menu/kritzel-context-menu';\r\nimport { DEFAULT_ENGINE_STATE } from '../../configs/default-engine-state';\r\nimport { ObjectHelper } from '../../helpers/object.helper';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { BatchCommand } from '../commands/batch.command';\r\nimport { RemoveObjectCommand } from '../commands/remove-object.command';\r\nimport { RemoveSelectionGroupCommand } from '../commands/remove-selection-group.command';\r\nimport { UpdateObjectCommand } from '../commands/update-object.command';\r\nimport { KritzelDatabase } from './database.class';\r\nimport { KritzelHistory } from './history.class';\r\nimport { KritzelBaseObject } from '../objects/base-object.class';\r\nimport { KrtizelSelectionBox } from '../objects/selection-box.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelReviver } from './reviver.class';\r\nimport { KritzelStore } from './store.class';\r\nimport { KritzelWorkspace } from './workspace.class';\r\n\r\nexport class KritzelCore {\r\n private readonly _kritzelEngine: KritzelEngine;\r\n private readonly _store: KritzelStore;\r\n private readonly _history: KritzelHistory;\r\n private readonly _database: KritzelDatabase;\r\n\r\n get engine(): KritzelEngine {\r\n return this._kritzelEngine;\r\n }\r\n\r\n get history(): KritzelHistory {\r\n return this._history;\r\n }\r\n\r\n get database(): KritzelDatabase {\r\n return this._database;\r\n }\r\n\r\n get store(): KritzelStore {\r\n return this._store;\r\n }\r\n\r\n constructor(kritzelEngine: KritzelEngine) {\r\n this._kritzelEngine = kritzelEngine;\r\n this._store = new KritzelStore(DEFAULT_ENGINE_STATE);\r\n this._history = new KritzelHistory(this);\r\n this._database = new KritzelDatabase('kritzelDB', 1, this._store.state.debugInfo.logDatabase);\r\n }\r\n\r\n async initializeDatabase(): Promise<void> {\r\n await this._database.open([\r\n {\r\n name: 'objects',\r\n options: { keyPath: ['workspaceId', 'id'] },\r\n },\r\n { name: 'workspaces', options: { keyPath: 'id' } },\r\n ]);\r\n\r\n this.rerender();\r\n }\r\n\r\n async initializeWorkspace(workspace?: KritzelWorkspace): Promise<void> {\r\n const workspaces = await this.getWorkspaces();\r\n const mostRecentWorkspace = [...workspaces].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0];\r\n const fallbackWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');\r\n\r\n this._store.setState('activeWorkspace', workspace ?? mostRecentWorkspace ?? fallbackWorkspace);\r\n\r\n const isExistingWorkspace = await this.getWorkspace(this._store.state.activeWorkspace.id);\r\n\r\n if (isExistingWorkspace) {\r\n await this.updateWorkspace(this._store.state.activeWorkspace);\r\n } else {\r\n await this.createWorkspace(this._store.state.activeWorkspace);\r\n }\r\n\r\n this._store.setState('workspaces', await this.getWorkspaces());\r\n\r\n this._store.setState('translateX', this._store.state.activeWorkspace.viewport.translateX);\r\n this._store.setState('translateY', this._store.state.activeWorkspace.viewport.translateY);\r\n this._store.setState('scale', this._store.state.activeWorkspace.viewport.scale);\r\n\r\n await this.initializeWorkspaceObjects(this._store.state.activeWorkspace.id);\r\n }\r\n\r\n private async initializeWorkspaceObjects(workspaceId: string): Promise<void> {\r\n this._store.state.objectsMap.reset();\r\n this._history.reset();\r\n\r\n const objectsFromDb = await this._database.getAllByRange<any>('objects', IDBKeyRange.bound([workspaceId], [workspaceId, '\\uffff']));\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n objectsFromDb.forEach(element => {\r\n const revivedObject = reviver.revive<KritzelBaseObject<any>>(element);\r\n this._store.state.objectsMap.insert(revivedObject);\r\n });\r\n\r\n this.rerender();\r\n }\r\n\r\n async updateWorkspaceViewport(translateX: number, translateY: number, scale: number) {\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.viewport = { translateX, translateY, scale };\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.update('workspaces', activeWorkspace);\r\n }\r\n\r\n async addObjectToDatabase(object: KritzelBaseObject<any>): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.add('objects', object), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error adding object to database:', err);\r\n });\r\n }\r\n\r\n async updateObjectInDatabase(object: KritzelBaseObject<any>): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.update('objects', object), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error updating object in database:', err);\r\n });\r\n }\r\n\r\n async deleteObjectFromDatabase(objectId: string): Promise<void> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const activeWorkspace = this._store.state.activeWorkspace;\r\n\r\n if (!activeWorkspace) {\r\n throw new Error('Workspace not initialized');\r\n }\r\n\r\n activeWorkspace.updatedAt = new Date();\r\n\r\n await this._database.batch([db => db.delete('objects', [activeWorkspace.id, objectId]), db => db.update('workspaces', activeWorkspace)]).catch(err => {\r\n console.error('Error deleting object from database:', err);\r\n });\r\n }\r\n\r\n async getWorkspace(id: string): Promise<KritzelWorkspace | null> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n return this._database.get<KritzelWorkspace>('workspaces', id).then(rawWorkspace => (rawWorkspace ? reviver.revive<KritzelWorkspace>(rawWorkspace) : null));\r\n }\r\n\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const reviver = new KritzelReviver(this);\r\n\r\n return this._database.getAll<KritzelWorkspace>('workspaces').then(rawWorkspaces => rawWorkspaces.map(ws => reviver.revive<KritzelWorkspace>(ws)));\r\n }\r\n\r\n async createWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n workspace.createdAt = new Date();\r\n workspace.updatedAt = new Date();\r\n\r\n await this._database.add('workspaces', workspace);\r\n\r\n this._store.state.workspaces.push(workspace);\r\n }\r\n\r\n async updateWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n workspace.updatedAt = new Date();\r\n\r\n await this._database.update('workspaces', workspace);\r\n\r\n const workspaces = this._store.state.workspaces;\r\n const index = workspaces.findIndex(w => w.id === workspace.id);\r\n\r\n if (index !== -1) {\r\n workspaces[index] = workspace;\r\n this._store.setState('workspaces', workspaces);\r\n }\r\n }\r\n\r\n async deleteWorkspace(workspace: KritzelWorkspace) {\r\n if (!this._database) {\r\n throw new Error('Database not initialized');\r\n }\r\n\r\n const objectRange = IDBKeyRange.bound([workspace.id], [workspace.id, '\\uffff']);\r\n\r\n await this._database.deleteByRange('objects', objectRange);\r\n\r\n await this._database.delete('workspaces', workspace.id);\r\n\r\n this._store.setState(\r\n 'workspaces',\r\n this._store.state.workspaces.filter(ws => ws.id !== workspace.id),\r\n );\r\n }\r\n\r\n rerender() {\r\n if (this._kritzelEngine) {\r\n this._kritzelEngine.forceUpdate++;\r\n }\r\n }\r\n\r\n findObjectById(id: string): KritzelBaseObject<any> | null {\r\n for (const object of this._store.allObjects) {\r\n if (object.id === id) {\r\n return object;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n deselectAllObjects(): void {\r\n if (this._store.state.selectionGroup) {\r\n this._history.executeCommand(new RemoveSelectionGroupCommand(this, this));\r\n }\r\n }\r\n\r\n delete() {\r\n if (!this._store.state.selectionGroup) {\r\n return;\r\n }\r\n\r\n const deleteSelectedObjectsCommand = this._store.state.selectionGroup.objects.map(obj => new RemoveObjectCommand(this, this._store.state.selectionGroup, obj));\r\n const removeSelectionGroupCommand = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);\r\n const commands = [...deleteSelectedObjectsCommand, removeSelectionGroupCommand];\r\n\r\n this.history.executeCommand(new BatchCommand(this, this._store.state.selectionGroup, commands));\r\n }\r\n\r\n deleteObject(id: string, skipHistory: boolean = false) {\r\n const object = this.findObjectById(id);\r\n if (object) {\r\n const removeObjectCommand = new RemoveObjectCommand(this, this, object, skipHistory);\r\n this.history.executeCommand(removeObjectCommand);\r\n }\r\n }\r\n\r\n copy() {\r\n this._store.setState('copiedObjects', this._store.state.selectionGroup.copy() as KritzelSelectionGroup);\r\n }\r\n\r\n paste(x?: number, y?: number) {\r\n const copiedObjects = this._store.state.copiedObjects;\r\n copiedObjects.isSelected = true;\r\n\r\n this._store.setState('copiedObjects', copiedObjects);\r\n\r\n const adjustedX = x !== undefined ? x : this._store.state.copiedObjects.translateX + 25 / this._store.state.scale;\r\n const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;\r\n\r\n this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);\r\n\r\n const commands = [];\r\n let previousSelectionGroup = null;\r\n if (this._store.state.selectionGroup !== null) {\r\n previousSelectionGroup = this._store.state.selectionGroup;\r\n commands.push(new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup));\r\n }\r\n\r\n const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));\r\n const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);\r\n\r\n commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, commands));\r\n\r\n this._store.setState('isSelecting', false);\r\n this._store.setState('copiedObjects', this._store.state.selectionGroup.copy() as KritzelSelectionGroup);\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n\r\n bringForward(object?: KritzelBaseObject<any>) {\r\n const max = this._store.allObjects.length + 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === max) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex + 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendBackward(object?: KritzelBaseObject<any>) {\r\n const min = 0;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === min) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex - 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n bringToFront(object?: KritzelBaseObject<any>) {\r\n const max = Math.max(...this._store.allObjects.map(obj => obj.zIndex)) + 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: max });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendToBack(object?: KritzelBaseObject<any>) {\r\n const min = Math.min(...this._store.allObjects.map(obj => obj.zIndex)) - 1;\r\n const objects = object ? [object] : this._store.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: min });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n selectObjects(objects: KritzelBaseObject<any>[]) {\r\n if (objects.length === 0) {\r\n return;\r\n }\r\n\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n objects.forEach(obj => {\r\n obj.isSelected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.isSelected = true;\r\n\r\n this._store.setState('selectionGroup', selectionGroup);\r\n\r\n if (objects.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n }\r\n\r\n selectAllObjectsInViewport() {\r\n const objectsInViewport = this._store.state.objectsMap\r\n .filter(o => o.isInViewport())\r\n .filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KrtizelSelectionBox) && !(o instanceof KritzelContextMenu));\r\n\r\n if (objectsInViewport.length > 0) {\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n\r\n objectsInViewport.forEach(obj => {\r\n obj.isSelected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.isSelected = true;\r\n\r\n this._store.setState('isSelecting', false);\r\n\r\n if (objectsInViewport.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n }\r\n\r\n clearSelection() {\r\n const command = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);\r\n this.history.executeCommand(command);\r\n\r\n this._store.setState('selectionGroup', null);\r\n this._store.setState('selectionBox', null);\r\n this._store.setState('isSelecting', false);\r\n this._store.setState('isResizeHandleSelected', false);\r\n this._store.setState('isRotationHandleSelected', false);\r\n }\r\n\r\n resetActiveText() {\r\n if (this._store.state.activeText && this._store.state.activeText.value === ' ') {\r\n this.deleteObject(this._store.state.activeText.id, true);\r\n }\r\n\r\n this._store.setState('activeText', null);\r\n }\r\n\r\n getObjectFromPointerEvent(event: PointerEvent, selector = '.object'): KritzelBaseObject<any> | null {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return null;\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const elementAtPoint = shadowRoot.elementFromPoint(clientX, clientY);\r\n if (!elementAtPoint) return null;\r\n\r\n const selectedObject = elementAtPoint.closest(selector) as HTMLElement | null;\r\n\r\n if (selectedObject) {\r\n const foundObject = this._store.allObjects.find(object => selectedObject.id === object.id);\r\n const isHit = foundObject?.hitTest(clientX, clientY);\r\n return isHit ? foundObject : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getObjectsFromPointerEvent(event: PointerEvent, selector = '.object'): KritzelBaseObject<any>[] {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return [];\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const elementsAtPoint = shadowRoot.elementsFromPoint(clientX, clientY);\r\n if (!elementsAtPoint || elementsAtPoint.length === 0) return [];\r\n\r\n const objectIds = new Set<string>();\r\n\r\n elementsAtPoint.forEach(element => {\r\n const selectedObject = element.closest(selector) as HTMLElement | null;\r\n if (selectedObject && selectedObject.id) {\r\n objectIds.add(selectedObject.id);\r\n }\r\n });\r\n\r\n if (objectIds.size > 0) {\r\n return this._store.allObjects.filter(object => objectIds.has(object.id)).sort((a, b) => b.zIndex - a.zIndex);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getCanvasPoint(event: PointerEvent): { x: number; y: number } {\r\n if (!this._store.state.host) {\r\n return { x: 0, y: 0 };\r\n }\r\n\r\n const hostRect = this._store.state.host.getBoundingClientRect();\r\n\r\n const xRelativeToHost = event.clientX - hostRect.left;\r\n const yRelativeToHost = event.clientY - hostRect.top;\r\n\r\n const xWithoutTranslate = xRelativeToHost - this._store.state.translateX;\r\n const yWithoutTranslate = yRelativeToHost - this._store.state.translateY;\r\n\r\n const worldX = xWithoutTranslate / this._store.state.scale;\r\n const worldY = yWithoutTranslate / this._store.state.scale;\r\n\r\n return { x: worldX, y: worldY };\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.class.js","sourceRoot":"","sources":["../../../src/classes/core/history.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelBaseCommand } from '../commands/base.command';\r\nimport { UpdateViewportCommand } from '../commands/update-viewport.command';\r\nimport { KritzelCore } from './core.class';\r\nimport { KritzelCircularBuffer } from '../structures/circular-buffer.structure';\r\n\r\nexport class KritzelHistory {\r\n private readonly _core: KritzelCore;\r\n\r\n undoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n redoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n\r\n previousViewport: {\r\n scale: number;\r\n scaleStep: number;\r\n translateX: number;\r\n translateY: number;\r\n };\r\n\r\n constructor(core: KritzelCore) {\r\n this._core = core;\r\n this.undoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._core.store.state.historyBufferSize);\r\n this.redoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._core.store.state.historyBufferSize);\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY,\r\n };\r\n }\r\n\r\n reset() {\r\n this.undoStack.clear();\r\n this.redoStack.clear();\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY\r\n };\r\n }\r\n\r\n executeCommand(command: KritzelBaseCommand) {\r\n if (this._core.store.state.hasViewportChanged) {\r\n this.addUpdateViewportCommand();\r\n }\r\n\r\n command.execute();\r\n\r\n if (command.skipHistory === false) {\r\n if (this._core.store.state.debugInfo.logCommands) {\r\n console.info('add', command);\r\n }\r\n\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n }\r\n\r\n this._core.rerender();\r\n }\r\n\r\n undo() {\r\n if (this._core.store.state.hasViewportChanged) {\r\n const command = new UpdateViewportCommand(this._core, this, this.previousViewport);\r\n command.undo();\r\n this._core.store.setState('hasViewportChanged', false);\r\n this._core.rerender();\r\n return;\r\n }\r\n\r\n const command = this.undoStack.pop();\r\n if (command) {\r\n command.undo();\r\n if (this._core.store.state.debugInfo.logCommands) console.info('undo', command);\r\n this.redoStack.add(command);\r\n }\r\n\r\n this._core.rerender();\r\n }\r\n\r\n redo() {\r\n const command = this.redoStack.pop();\r\n if (command) {\r\n command.execute();\r\n if (this._core.store.state.debugInfo.logCommands) console.info('redo', command);\r\n this.undoStack.add(command);\r\n }\r\n\r\n this._core.rerender();\r\n }\r\n\r\n private addUpdateViewportCommand() {\r\n const command = new UpdateViewportCommand(this._core, this, this.previousViewport);\r\n command.execute();\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n\r\n this._core.store.setState('hasViewportChanged', false);\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"history.class.js","sourceRoot":"","sources":["../../../src/classes/core/history.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelBaseCommand } from '../commands/base.command';\r\nimport { UpdateViewportCommand } from '../commands/update-viewport.command';\r\nimport { KritzelCore } from './core.class';\r\nimport { KritzelCircularBuffer } from '../structures/circular-buffer.structure';\r\n\r\nexport class KritzelHistory {\r\n private readonly _core: KritzelCore;\r\n\r\n undoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n redoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n\r\n previousViewport: {\r\n scale: number;\r\n scaleStep: number;\r\n translateX: number;\r\n translateY: number;\r\n };\r\n\r\n constructor(core: KritzelCore) {\r\n this._core = core;\r\n this.undoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._core.store.state.historyBufferSize);\r\n this.redoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._core.store.state.historyBufferSize);\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY,\r\n };\r\n }\r\n\r\n reset() {\r\n this.undoStack.clear();\r\n this.redoStack.clear();\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY\r\n };\r\n }\r\n\r\n executeCommand(command: KritzelBaseCommand) {\r\n if (this._core.store.state.hasViewportChanged) {\r\n this.addUpdateViewportCommand();\r\n }\r\n\r\n command.execute();\r\n\r\n if (command.skipHistory === false) {\r\n if (this._core.store.state.debugInfo.logCommands) {\r\n console.info('add', command);\r\n }\r\n\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n }\r\n\r\n this._core.rerender();\r\n }\r\n\r\n undo() {\r\n if (this._core.store.state.hasViewportChanged) {\r\n const command = new UpdateViewportCommand(this._core, this, this.previousViewport);\r\n command.undo();\r\n this._core.store.setState('hasViewportChanged', false);\r\n this._core.rerender();\r\n return;\r\n }\r\n\r\n const command = this.undoStack.pop();\r\n if (command) {\r\n command.undo();\r\n if (this._core.store.state.debugInfo.logCommands) console.info('undo', command);\r\n this.redoStack.add(command);\r\n }\r\n\r\n this._core.store.setState('copiedObjects', null);\r\n this._core.rerender();\r\n }\r\n\r\n redo() {\r\n const command = this.redoStack.pop();\r\n if (command) {\r\n command.execute();\r\n if (this._core.store.state.debugInfo.logCommands) console.info('redo', command);\r\n this.undoStack.add(command);\r\n }\r\n\r\n this._core.rerender();\r\n }\r\n\r\n private addUpdateViewportCommand() {\r\n const command = new UpdateViewportCommand(this._core, this, this.previousViewport);\r\n command.execute();\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n\r\n this._core.store.setState('hasViewportChanged', false);\r\n this.previousViewport = {\r\n scale: this._core.store.state.scale,\r\n scaleStep: this._core.store.state.scaleStep,\r\n translateX: this._core.store.state.translateX,\r\n translateY: this._core.store.state.translateY,\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -145,21 +145,15 @@ export class KritzelViewport {
|
|
|
145
145
|
this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
|
|
146
146
|
setTimeout(() => {
|
|
147
147
|
this._core.store.setState('isScaling', false);
|
|
148
|
-
this._core.rerender();
|
|
149
148
|
}, 300);
|
|
150
149
|
}
|
|
151
150
|
handlePan(event) {
|
|
152
|
-
this._core.store.setState('isPanning', true);
|
|
153
151
|
const panSpeed = 0.8;
|
|
154
152
|
this._core.store.setState('translateX', this._core.store.state.translateX - event.deltaX * panSpeed);
|
|
155
153
|
this._core.store.setState('translateY', this._core.store.state.translateY - event.deltaY * panSpeed);
|
|
156
154
|
this._core.store.setState('hasViewportChanged', true);
|
|
157
155
|
this._core.rerender();
|
|
158
156
|
this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
|
|
159
|
-
setTimeout(() => {
|
|
160
|
-
this._core.store.setState('isPanning', false);
|
|
161
|
-
this._core.rerender();
|
|
162
|
-
}, 300);
|
|
163
157
|
}
|
|
164
158
|
}
|
|
165
159
|
//# sourceMappingURL=viewport.class.js.map
|