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.
Files changed (52) hide show
  1. package/dist/cjs/{index-DCHCVnOl.js → index-DILpAbYp.js} +12 -5
  2. package/dist/cjs/index-DILpAbYp.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/kritzel-color_22.cjs.entry.js +58 -71
  5. package/dist/collection/classes/commands/add-selection-group.command.js +6 -3
  6. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  7. package/dist/collection/classes/commands/move-selection-group.command.js +5 -0
  8. package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -1
  9. package/dist/collection/classes/core/core.class.js +3 -1
  10. package/dist/collection/classes/core/core.class.js.map +1 -1
  11. package/dist/collection/classes/core/history.class.js +1 -0
  12. package/dist/collection/classes/core/history.class.js.map +1 -1
  13. package/dist/collection/classes/core/viewport.class.js +0 -6
  14. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  15. package/dist/collection/classes/handlers/key.handler.js +42 -58
  16. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  17. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +10 -3
  18. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  19. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -2
  20. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  21. package/dist/collection/interfaces/shortcut.interface.js +2 -0
  22. package/dist/collection/interfaces/shortcut.interface.js.map +1 -0
  23. package/dist/components/index.js +1 -1
  24. package/dist/components/kritzel-context-menu.js +1 -1
  25. package/dist/components/kritzel-editor.js +2 -2
  26. package/dist/components/kritzel-engine.js +1 -1
  27. package/dist/components/{p-CwH-bwjb.js → p-CZzYv_iN.js} +69 -74
  28. package/dist/components/p-CZzYv_iN.js.map +1 -0
  29. package/dist/components/{p-BGdsAz54.js → p-DOPuq6gn.js} +3 -4
  30. package/dist/components/p-DOPuq6gn.js.map +1 -0
  31. package/dist/esm/{index-DY3KqYWc.js → index-BrCE-Ctm.js} +12 -5
  32. package/dist/esm/index-BrCE-Ctm.js.map +1 -0
  33. package/dist/esm/index.js +1 -1
  34. package/dist/esm/kritzel-color_22.entry.js +58 -71
  35. package/dist/stencil/index.esm.js +1 -1
  36. package/dist/stencil/p-092c9a05.entry.js +2 -0
  37. package/dist/stencil/p-092c9a05.entry.js.map +1 -0
  38. package/dist/stencil/p-BrCE-Ctm.js +2 -0
  39. package/dist/stencil/p-BrCE-Ctm.js.map +1 -0
  40. package/dist/stencil/stencil.esm.js +1 -1
  41. package/dist/types/classes/commands/add-selection-group.command.d.ts +2 -1
  42. package/dist/types/classes/handlers/key.handler.d.ts +2 -0
  43. package/dist/types/interfaces/shortcut.interface.d.ts +8 -0
  44. package/package.json +1 -1
  45. package/dist/cjs/index-DCHCVnOl.js.map +0 -1
  46. package/dist/components/p-BGdsAz54.js.map +0 -1
  47. package/dist/components/p-CwH-bwjb.js.map +0 -1
  48. package/dist/esm/index-DY3KqYWc.js.map +0 -1
  49. package/dist/stencil/p-DY3KqYWc.js +0 -2
  50. package/dist/stencil/p-DY3KqYWc.js.map +0 -1
  51. package/dist/stencil/p-dc534b01.entry.js +0 -2
  52. package/dist/stencil/p-dc534b01.entry.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DCHCVnOl.js');
3
+ var index = require('./index-DILpAbYp.js');
4
4
 
5
5
 
6
6
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-nzUNdMPh.js');
4
- var index$1 = require('./index-DCHCVnOl.js');
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: 'ff72bd31f6c0f3193674710bccab829f14e011d3' }, index.h("div", { key: '80cd7a99dc9bb1fb9ec4edb09a9bacde70dde7c3', 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)))))));
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
- if (this._core.store.state.isCtrlKeyPressed) {
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: 'da47553aad7abf8b5daab177c6933a9177b91089' }, index.h("div", { key: '4e64b43bfb85a61154d36ca8ecd3518d61445d50', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, index.h("div", { key: '21742da9258a2b929b81c0ca6c8f37f41b228ad4' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: 'de31fcf57b0faf8fad2bb39336eeea35dbec35ca' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: 'a2cb298a867f92349b5e1fb556ee5f9c6110f1c7' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: '28697bfcecf9f8b4b1972a90cd02855767433047' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '7fb25f6e9c9b8dea11832dbd311d2cc0b981cbeb' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '92aeade312b3d28e4c9b0e1c7ca55f6932fd23d9' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: 'a4fd8090acaf094e44fdc2e72fcc388695b412c4' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '6ff28100b64bafdffcb8fe9d49cd041a6a374817' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: '12a61ad3d070563eb721d0d4068143962914b2bc' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '437309daa2af1a64c9b9d3548fe12e075dd4a8bd' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'e6841095c220ebf081604c548729f085ec9d17bd' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: 'b07316a528782f7560c2e42f7bd9edd473cc256c' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '7160a5aa21c4cdbf2b523f620c819ad541a2e466' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '9ad29a686bc76b47d4c5040121b468428ade437a' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '68f240aa7d7188996647afd0df73d63a253e18a1' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '260010c089bdf0e8fd8c2406c39394ef79a85262' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '6b07975c781801b0a7d7727d0666a6765aa9e889' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '83c949c9ed26c3d445421ba1f965a742f5fc149f' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '1687122785d3370da5d91a975dd56f11aebc81c1' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: 'a28e152a0510c9e3eef5624de1b5512baf45b37c' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '09e5a0157002fe95a46415d32a3eb17be8d959a9' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0)), index.h("div", { key: '5228fbae773f30d91b129c257ef08adca10a6a70', id: "origin", class: "origin", style: {
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: '6dedb398968d275166e042660c4718635b57da84', 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: '09ae0d7842918bcb4ae9fd16d416badc19942264', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
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: 'e0863ccf8c52ebef822827d8eeac62d3619134ca', core: this.core })));
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
- constructor(core, initiator, selectionGroup, skipHistory = false) {
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', null);
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;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IACtD,cAAc,CAAwB;IAE9C,YAAY,IAAiB,EAAE,SAAc,EAAE,cAAqC,EAAE,WAAW,GAAG,KAAK;QACvG,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,YAAY,mBAAmB,CAAC,CAAC;QAC1F,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,CAAC;QAClD,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\r\n constructor(core: KritzelCore, initiator: any, selectionGroup: KritzelSelectionGroup, skipHistory = false) {\r\n super(core, initiator, skipHistory);\r\n this.selectionGroup = selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n this._core.store.state.objectsMap.remove(object => object instanceof KrtizelSelectionBox);\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', null);\r\n this._core.store.setState('selectionBox', null);\r\n }\r\n}\r\n"]}
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"]}
@@ -57,6 +57,7 @@ export class KritzelHistory {
57
57
  console.info('undo', command);
58
58
  this.redoStack.add(command);
59
59
  }
60
+ this._core.store.setState('copiedObjects', null);
60
61
  this._core.rerender();
61
62
  }
62
63
  redo() {
@@ -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