kritzel-react 0.1.32 → 0.1.34

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 (210) hide show
  1. package/dist/types/components/stencil-generated/components.d.ts +1 -1
  2. package/package.json +2 -2
  3. package/dist/kritzel-react/lib/components/stencil-generated/components.js +0 -122
  4. package/dist/kritzel-react/lib/index.js +0 -2
  5. package/dist/kritzel-stencil/src/classes/core/core.class.js +0 -797
  6. package/dist/kritzel-stencil/src/classes/core/reviver.class.js +0 -97
  7. package/dist/kritzel-stencil/src/classes/core/store.class.js +0 -153
  8. package/dist/kritzel-stencil/src/classes/core/viewport.class.js +0 -311
  9. package/dist/kritzel-stencil/src/classes/core/workspace.class.js +0 -34
  10. package/dist/kritzel-stencil/src/classes/handlers/base.handler.js +0 -6
  11. package/dist/kritzel-stencil/src/classes/handlers/context-menu.handler.js +0 -63
  12. package/dist/kritzel-stencil/src/classes/handlers/hover.handler.js +0 -18
  13. package/dist/kritzel-stencil/src/classes/handlers/key.handler.js +0 -76
  14. package/dist/kritzel-stencil/src/classes/handlers/line-handle.handler.js +0 -382
  15. package/dist/kritzel-stencil/src/classes/handlers/move.handler.js +0 -213
  16. package/dist/kritzel-stencil/src/classes/handlers/resize.handler.js +0 -205
  17. package/dist/kritzel-stencil/src/classes/handlers/rotation.handler.js +0 -117
  18. package/dist/kritzel-stencil/src/classes/handlers/selection.handler.js +0 -313
  19. package/dist/kritzel-stencil/src/classes/managers/anchor.manager.js +0 -1056
  20. package/dist/kritzel-stencil/src/classes/managers/cursor.manager.js +0 -117
  21. package/dist/kritzel-stencil/src/classes/managers/theme.manager.js +0 -103
  22. package/dist/kritzel-stencil/src/classes/objects/base-object.class.js +0 -249
  23. package/dist/kritzel-stencil/src/classes/objects/custom-element.class.js +0 -60
  24. package/dist/kritzel-stencil/src/classes/objects/group.class.js +0 -407
  25. package/dist/kritzel-stencil/src/classes/objects/image.class.js +0 -55
  26. package/dist/kritzel-stencil/src/classes/objects/line.class.js +0 -608
  27. package/dist/kritzel-stencil/src/classes/objects/path.class.js +0 -401
  28. package/dist/kritzel-stencil/src/classes/objects/selection-box.class.js +0 -21
  29. package/dist/kritzel-stencil/src/classes/objects/selection-group.class.js +0 -409
  30. package/dist/kritzel-stencil/src/classes/objects/shape.class.js +0 -412
  31. package/dist/kritzel-stencil/src/classes/objects/text.class.js +0 -292
  32. package/dist/kritzel-stencil/src/classes/providers/broadcast-sync-provider.class.js +0 -101
  33. package/dist/kritzel-stencil/src/classes/providers/hocuspocus-sync-provider.class.js +0 -241
  34. package/dist/kritzel-stencil/src/classes/providers/indexeddb-sync-provider.class.js +0 -43
  35. package/dist/kritzel-stencil/src/classes/providers/websocket-sync-provider.class.js +0 -98
  36. package/dist/kritzel-stencil/src/classes/registries/icon-registry.class.js +0 -66
  37. package/dist/kritzel-stencil/src/classes/registries/tool.registry.js +0 -21
  38. package/dist/kritzel-stencil/src/classes/structures/app-state-map.structure.js +0 -212
  39. package/dist/kritzel-stencil/src/classes/structures/object-map.structure.js +0 -414
  40. package/dist/kritzel-stencil/src/classes/structures/quadtree.structure.js +0 -151
  41. package/dist/kritzel-stencil/src/classes/tools/base-tool.class.js +0 -36
  42. package/dist/kritzel-stencil/src/classes/tools/brush-tool.class.js +0 -161
  43. package/dist/kritzel-stencil/src/classes/tools/eraser-tool.class.js +0 -85
  44. package/dist/kritzel-stencil/src/classes/tools/image-tool.class.js +0 -83
  45. package/dist/kritzel-stencil/src/classes/tools/line-tool.class.js +0 -187
  46. package/dist/kritzel-stencil/src/classes/tools/selection-tool.class.js +0 -429
  47. package/dist/kritzel-stencil/src/classes/tools/shape-tool.class.js +0 -196
  48. package/dist/kritzel-stencil/src/classes/tools/text-tool.class.js +0 -100
  49. package/dist/kritzel-stencil/src/components/core/kritzel-engine/kritzel-engine.js +0 -1343
  50. package/dist/kritzel-stencil/src/components/shared/kritzel-brush-style/kritzel-brush-style.js +0 -46
  51. package/dist/kritzel-stencil/src/components/shared/kritzel-dropdown/kritzel-dropdown.js +0 -312
  52. package/dist/kritzel-stencil/src/components/shared/kritzel-font-family/kritzel-font-family.js +0 -60
  53. package/dist/kritzel-stencil/src/components/shared/kritzel-line-endings/kritzel-line-endings.js +0 -105
  54. package/dist/kritzel-stencil/src/components/shared/kritzel-shape-fill/kritzel-shape-fill.js +0 -53
  55. package/dist/kritzel-stencil/src/components/ui/kritzel-context-menu/kritzel-context-menu.js +0 -137
  56. package/dist/kritzel-stencil/src/configs/default-brush-tool.config.js +0 -9
  57. package/dist/kritzel-stencil/src/configs/default-engine-config.js +0 -63
  58. package/dist/kritzel-stencil/src/configs/default-line-tool.config.js +0 -9
  59. package/dist/kritzel-stencil/src/configs/default-sync.config.js +0 -9
  60. package/dist/kritzel-stencil/src/configs/default-text-tool.config.js +0 -7
  61. package/dist/kritzel-stencil/src/constants/color-palette.constants.js +0 -37
  62. package/dist/kritzel-stencil/src/constants/engine.constants.js +0 -2
  63. package/dist/kritzel-stencil/src/enums/event-button.enum.js +0 -6
  64. package/dist/kritzel-stencil/src/enums/handle-type.enum.js +0 -7
  65. package/dist/kritzel-stencil/src/enums/shape-type.enum.js +0 -6
  66. package/dist/kritzel-stencil/src/helpers/class.helper.js +0 -5
  67. package/dist/kritzel-stencil/src/helpers/color.helper.js +0 -106
  68. package/dist/kritzel-stencil/src/helpers/cursor.helper.js +0 -57
  69. package/dist/kritzel-stencil/src/helpers/devices.helper.js +0 -28
  70. package/dist/kritzel-stencil/src/helpers/event.helper.js +0 -58
  71. package/dist/kritzel-stencil/src/helpers/geometry.helper.js +0 -149
  72. package/dist/kritzel-stencil/src/helpers/keyboard.helper.js +0 -51
  73. package/dist/kritzel-stencil/src/helpers/math.helper.js +0 -5
  74. package/dist/kritzel-stencil/src/helpers/object.helper.js +0 -11
  75. package/dist/kritzel-stencil/src/helpers/theme.helper.js +0 -69
  76. package/dist/kritzel-stencil/src/index.js +0 -41
  77. package/dist/kritzel-stencil/src/interfaces/anchor.interface.js +0 -1
  78. package/dist/kritzel-stencil/src/interfaces/arrow-head.interface.js +0 -1
  79. package/dist/kritzel-stencil/src/interfaces/bounding-box.interface.js +0 -1
  80. package/dist/kritzel-stencil/src/interfaces/clonable.interface.js +0 -1
  81. package/dist/kritzel-stencil/src/interfaces/context-menu-item.interface.js +0 -1
  82. package/dist/kritzel-stencil/src/interfaces/debug-info.interface.js +0 -1
  83. package/dist/kritzel-stencil/src/interfaces/dialog.interface.js +0 -1
  84. package/dist/kritzel-stencil/src/interfaces/displayable-shortcut.interface.js +0 -1
  85. package/dist/kritzel-stencil/src/interfaces/engine-state.interface.js +0 -1
  86. package/dist/kritzel-stencil/src/interfaces/line-options.interface.js +0 -1
  87. package/dist/kritzel-stencil/src/interfaces/master-detail.interface.js +0 -1
  88. package/dist/kritzel-stencil/src/interfaces/menu-item.interface.js +0 -1
  89. package/dist/kritzel-stencil/src/interfaces/object.interface.js +0 -1
  90. package/dist/kritzel-stencil/src/interfaces/path-options.interface.js +0 -1
  91. package/dist/kritzel-stencil/src/interfaces/point.interface.js +0 -1
  92. package/dist/kritzel-stencil/src/interfaces/polygon.interface.js +0 -1
  93. package/dist/kritzel-stencil/src/interfaces/serializable.interface.js +0 -1
  94. package/dist/kritzel-stencil/src/interfaces/settings.interface.js +0 -1
  95. package/dist/kritzel-stencil/src/interfaces/shortcut.interface.js +0 -1
  96. package/dist/kritzel-stencil/src/interfaces/sync-config.interface.js +0 -1
  97. package/dist/kritzel-stencil/src/interfaces/sync-provider.interface.js +0 -1
  98. package/dist/kritzel-stencil/src/interfaces/theme.interface.js +0 -1
  99. package/dist/kritzel-stencil/src/interfaces/tool-config.interface.js +0 -1
  100. package/dist/kritzel-stencil/src/interfaces/tool.interface.js +0 -1
  101. package/dist/kritzel-stencil/src/interfaces/toolbar-control.interface.js +0 -1
  102. package/dist/kritzel-stencil/src/interfaces/undo-state.interface.js +0 -1
  103. package/dist/kritzel-stencil/src/themes/dark-theme.js +0 -198
  104. package/dist/kritzel-stencil/src/themes/light-theme.js +0 -199
  105. package/dist/kritzel-stencil/src/types/shortcut.type.js +0 -1
  106. package/dist/kritzel-stencil/src/types/state.types.js +0 -1
  107. package/dist/types/kritzel-react/lib/components/stencil-generated/components.d.ts +0 -74
  108. package/dist/types/kritzel-react/lib/index.d.ts +0 -2
  109. package/dist/types/kritzel-stencil/src/classes/core/core.class.d.ts +0 -101
  110. package/dist/types/kritzel-stencil/src/classes/core/reviver.class.d.ts +0 -6
  111. package/dist/types/kritzel-stencil/src/classes/core/store.class.d.ts +0 -53
  112. package/dist/types/kritzel-stencil/src/classes/core/viewport.class.d.ts +0 -48
  113. package/dist/types/kritzel-stencil/src/classes/core/workspace.class.d.ts +0 -24
  114. package/dist/types/kritzel-stencil/src/classes/handlers/base.handler.d.ts +0 -5
  115. package/dist/types/kritzel-stencil/src/classes/handlers/context-menu.handler.d.ts +0 -8
  116. package/dist/types/kritzel-stencil/src/classes/handlers/hover.handler.d.ts +0 -6
  117. package/dist/types/kritzel-stencil/src/classes/handlers/key.handler.d.ts +0 -11
  118. package/dist/types/kritzel-stencil/src/classes/handlers/line-handle.handler.d.ts +0 -34
  119. package/dist/types/kritzel-stencil/src/classes/handlers/move.handler.d.ts +0 -29
  120. package/dist/types/kritzel-stencil/src/classes/handlers/resize.handler.d.ts +0 -24
  121. package/dist/types/kritzel-stencil/src/classes/handlers/rotation.handler.d.ts +0 -12
  122. package/dist/types/kritzel-stencil/src/classes/handlers/selection.handler.d.ts +0 -27
  123. package/dist/types/kritzel-stencil/src/classes/managers/anchor.manager.d.ts +0 -180
  124. package/dist/types/kritzel-stencil/src/classes/managers/cursor.manager.d.ts +0 -43
  125. package/dist/types/kritzel-stencil/src/classes/managers/theme.manager.d.ts +0 -56
  126. package/dist/types/kritzel-stencil/src/classes/objects/base-object.class.d.ts +0 -76
  127. package/dist/types/kritzel-stencil/src/classes/objects/custom-element.class.d.ts +0 -26
  128. package/dist/types/kritzel-stencil/src/classes/objects/group.class.d.ts +0 -97
  129. package/dist/types/kritzel-stencil/src/classes/objects/image.class.d.ts +0 -17
  130. package/dist/types/kritzel-stencil/src/classes/objects/line.class.d.ts +0 -101
  131. package/dist/types/kritzel-stencil/src/classes/objects/path.class.d.ts +0 -62
  132. package/dist/types/kritzel-stencil/src/classes/objects/selection-box.class.d.ts +0 -6
  133. package/dist/types/kritzel-stencil/src/classes/objects/selection-group.class.d.ts +0 -67
  134. package/dist/types/kritzel-stencil/src/classes/objects/shape.class.d.ts +0 -124
  135. package/dist/types/kritzel-stencil/src/classes/objects/text.class.d.ts +0 -56
  136. package/dist/types/kritzel-stencil/src/classes/providers/broadcast-sync-provider.class.d.ts +0 -18
  137. package/dist/types/kritzel-stencil/src/classes/providers/hocuspocus-sync-provider.class.d.ts +0 -120
  138. package/dist/types/kritzel-stencil/src/classes/providers/indexeddb-sync-provider.class.d.ts +0 -22
  139. package/dist/types/kritzel-stencil/src/classes/providers/websocket-sync-provider.class.d.ts +0 -52
  140. package/dist/types/kritzel-stencil/src/classes/registries/icon-registry.class.d.ts +0 -9
  141. package/dist/types/kritzel-stencil/src/classes/registries/tool.registry.d.ts +0 -8
  142. package/dist/types/kritzel-stencil/src/classes/structures/app-state-map.structure.d.ts +0 -31
  143. package/dist/types/kritzel-stencil/src/classes/structures/object-map.structure.d.ts +0 -63
  144. package/dist/types/kritzel-stencil/src/classes/structures/quadtree.structure.d.ts +0 -36
  145. package/dist/types/kritzel-stencil/src/classes/tools/base-tool.class.d.ts +0 -20
  146. package/dist/types/kritzel-stencil/src/classes/tools/brush-tool.class.d.ts +0 -14
  147. package/dist/types/kritzel-stencil/src/classes/tools/eraser-tool.class.d.ts +0 -9
  148. package/dist/types/kritzel-stencil/src/classes/tools/image-tool.class.d.ts +0 -15
  149. package/dist/types/kritzel-stencil/src/classes/tools/line-tool.class.d.ts +0 -19
  150. package/dist/types/kritzel-stencil/src/classes/tools/selection-tool.class.d.ts +0 -54
  151. package/dist/types/kritzel-stencil/src/classes/tools/shape-tool.class.d.ts +0 -39
  152. package/dist/types/kritzel-stencil/src/classes/tools/text-tool.class.d.ts +0 -13
  153. package/dist/types/kritzel-stencil/src/components/core/kritzel-engine/kritzel-engine.d.ts +0 -111
  154. package/dist/types/kritzel-stencil/src/components/shared/kritzel-brush-style/kritzel-brush-style.d.ts +0 -11
  155. package/dist/types/kritzel-stencil/src/components/shared/kritzel-dropdown/kritzel-dropdown.d.ts +0 -46
  156. package/dist/types/kritzel-stencil/src/components/shared/kritzel-font-family/kritzel-font-family.d.ts +0 -13
  157. package/dist/types/kritzel-stencil/src/components/shared/kritzel-line-endings/kritzel-line-endings.d.ts +0 -21
  158. package/dist/types/kritzel-stencil/src/components/shared/kritzel-shape-fill/kritzel-shape-fill.d.ts +0 -10
  159. package/dist/types/kritzel-stencil/src/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +0 -21
  160. package/dist/types/kritzel-stencil/src/configs/default-brush-tool.config.d.ts +0 -2
  161. package/dist/types/kritzel-stencil/src/configs/default-engine-config.d.ts +0 -2
  162. package/dist/types/kritzel-stencil/src/configs/default-line-tool.config.d.ts +0 -2
  163. package/dist/types/kritzel-stencil/src/configs/default-sync.config.d.ts +0 -5
  164. package/dist/types/kritzel-stencil/src/configs/default-text-tool.config.d.ts +0 -2
  165. package/dist/types/kritzel-stencil/src/constants/color-palette.constants.d.ts +0 -29
  166. package/dist/types/kritzel-stencil/src/constants/engine.constants.d.ts +0 -2
  167. package/dist/types/kritzel-stencil/src/enums/event-button.enum.d.ts +0 -5
  168. package/dist/types/kritzel-stencil/src/enums/handle-type.enum.d.ts +0 -6
  169. package/dist/types/kritzel-stencil/src/enums/shape-type.enum.d.ts +0 -5
  170. package/dist/types/kritzel-stencil/src/helpers/class.helper.d.ts +0 -3
  171. package/dist/types/kritzel-stencil/src/helpers/color.helper.d.ts +0 -33
  172. package/dist/types/kritzel-stencil/src/helpers/cursor.helper.d.ts +0 -22
  173. package/dist/types/kritzel-stencil/src/helpers/devices.helper.d.ts +0 -8
  174. package/dist/types/kritzel-stencil/src/helpers/event.helper.d.ts +0 -6
  175. package/dist/types/kritzel-stencil/src/helpers/geometry.helper.d.ts +0 -38
  176. package/dist/types/kritzel-stencil/src/helpers/keyboard.helper.d.ts +0 -6
  177. package/dist/types/kritzel-stencil/src/helpers/math.helper.d.ts +0 -3
  178. package/dist/types/kritzel-stencil/src/helpers/object.helper.d.ts +0 -4
  179. package/dist/types/kritzel-stencil/src/helpers/theme.helper.d.ts +0 -41
  180. package/dist/types/kritzel-stencil/src/index.d.ts +0 -42
  181. package/dist/types/kritzel-stencil/src/interfaces/anchor.interface.d.ts +0 -137
  182. package/dist/types/kritzel-stencil/src/interfaces/arrow-head.interface.d.ts +0 -27
  183. package/dist/types/kritzel-stencil/src/interfaces/bounding-box.interface.d.ts +0 -8
  184. package/dist/types/kritzel-stencil/src/interfaces/clonable.interface.d.ts +0 -3
  185. package/dist/types/kritzel-stencil/src/interfaces/context-menu-item.interface.d.ts +0 -17
  186. package/dist/types/kritzel-stencil/src/interfaces/debug-info.interface.d.ts +0 -4
  187. package/dist/types/kritzel-stencil/src/interfaces/dialog.interface.d.ts +0 -4
  188. package/dist/types/kritzel-stencil/src/interfaces/displayable-shortcut.interface.d.ts +0 -5
  189. package/dist/types/kritzel-stencil/src/interfaces/engine-state.interface.d.ts +0 -73
  190. package/dist/types/kritzel-stencil/src/interfaces/line-options.interface.d.ts +0 -23
  191. package/dist/types/kritzel-stencil/src/interfaces/master-detail.interface.d.ts +0 -14
  192. package/dist/types/kritzel-stencil/src/interfaces/menu-item.interface.d.ts +0 -24
  193. package/dist/types/kritzel-stencil/src/interfaces/object.interface.d.ts +0 -53
  194. package/dist/types/kritzel-stencil/src/interfaces/path-options.interface.d.ts +0 -11
  195. package/dist/types/kritzel-stencil/src/interfaces/point.interface.d.ts +0 -4
  196. package/dist/types/kritzel-stencil/src/interfaces/polygon.interface.d.ts +0 -7
  197. package/dist/types/kritzel-stencil/src/interfaces/serializable.interface.d.ts +0 -5
  198. package/dist/types/kritzel-stencil/src/interfaces/settings.interface.d.ts +0 -11
  199. package/dist/types/kritzel-stencil/src/interfaces/shortcut.interface.d.ts +0 -10
  200. package/dist/types/kritzel-stencil/src/interfaces/sync-config.interface.d.ts +0 -22
  201. package/dist/types/kritzel-stencil/src/interfaces/sync-provider.interface.d.ts +0 -29
  202. package/dist/types/kritzel-stencil/src/interfaces/theme.interface.d.ts +0 -330
  203. package/dist/types/kritzel-stencil/src/interfaces/tool-config.interface.d.ts +0 -26
  204. package/dist/types/kritzel-stencil/src/interfaces/tool.interface.d.ts +0 -7
  205. package/dist/types/kritzel-stencil/src/interfaces/toolbar-control.interface.d.ts +0 -58
  206. package/dist/types/kritzel-stencil/src/interfaces/undo-state.interface.d.ts +0 -6
  207. package/dist/types/kritzel-stencil/src/themes/dark-theme.d.ts +0 -5
  208. package/dist/types/kritzel-stencil/src/themes/light-theme.d.ts +0 -5
  209. package/dist/types/kritzel-stencil/src/types/shortcut.type.d.ts +0 -1
  210. package/dist/types/kritzel-stencil/src/types/state.types.d.ts +0 -3
@@ -1,797 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { KritzelContextMenu } from '../../components/ui/kritzel-context-menu/kritzel-context-menu';
11
- import { DEFAULT_ENGINE_CONFIG } from '../../configs/default-engine-config';
12
- import { ObjectHelper } from '../../helpers/object.helper';
13
- import { KritzelSelectionBox } from '../objects/selection-box.class';
14
- import { KritzelSelectionGroup } from '../objects/selection-group.class';
15
- import { KritzelGroup } from '../objects/group.class';
16
- import { KritzelLine } from '../objects/line.class';
17
- import { KritzelToolRegistry } from '../registries/tool.registry';
18
- import { KritzelStore } from './store.class';
19
- import { KritzelWorkspace } from './workspace.class';
20
- import { KritzelObjectMap } from '../structures/object-map.structure';
21
- import { KritzelAppStateMap } from '../structures/app-state-map.structure';
22
- import { KritzelAnchorManager } from '../managers/anchor.manager';
23
- import { KritzelCursorManager } from '../managers/cursor.manager';
24
- import { KritzelThemeManager } from '../managers/theme.manager';
25
- export class KritzelCore {
26
- get engine() {
27
- return this._kritzelEngine;
28
- }
29
- get store() {
30
- return this._store;
31
- }
32
- get appStateMap() {
33
- return this._appStateMap;
34
- }
35
- get anchorManager() {
36
- return this._anchorManager;
37
- }
38
- get cursorManager() {
39
- return this._cursorManager;
40
- }
41
- get themeManager() {
42
- return this._themeManager;
43
- }
44
- constructor(kritzelEngine) {
45
- this._kritzelEngine = kritzelEngine;
46
- this._store = new KritzelStore(DEFAULT_ENGINE_CONFIG);
47
- this._appStateMap = new KritzelAppStateMap();
48
- this._anchorManager = new KritzelAnchorManager(this);
49
- this._cursorManager = new KritzelCursorManager(this);
50
- this._themeManager = new KritzelThemeManager(this);
51
- }
52
- setSyncConfig(config) {
53
- this._syncConfig = config;
54
- }
55
- initializeYjs() {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- yield this._appStateMap.initialize(this, this._syncConfig);
58
- });
59
- }
60
- /**
61
- * Load all workspaces from app state map
62
- */
63
- loadWorkspacesFromAppState() {
64
- return this._appStateMap.allWorkspaces();
65
- }
66
- /**
67
- * Save a workspace to app state map
68
- */
69
- saveWorkspaceToAppState(workspace) {
70
- if (this._appStateMap.has(workspace.id)) {
71
- this._appStateMap.update(workspace);
72
- }
73
- else {
74
- this._appStateMap.insert(workspace);
75
- }
76
- }
77
- /**
78
- * Delete a workspace from app state map
79
- */
80
- deleteWorkspaceFromAppState(workspaceId) {
81
- this._appStateMap.remove(w => w.id === workspaceId);
82
- }
83
- initializeWorkspace(workspace) {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- var _a, _b, _c, _d;
86
- // Load all workspaces from app state map
87
- const workspaces = this.loadWorkspacesFromAppState();
88
- // Find most recently updated workspace or use provided/fallback
89
- const mostRecentWorkspace = workspaces.length > 0 ? [...workspaces].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0] : null;
90
- // Check localStorage for last active workspace
91
- const lastActiveWorkspaceId = localStorage.getItem('kritzel-active-workspace-id');
92
- const lastActiveWorkspace = lastActiveWorkspaceId ? workspaces.find(w => w.id === lastActiveWorkspaceId) : null;
93
- let activeWorkspace;
94
- if (workspace) {
95
- // Use provided workspace
96
- activeWorkspace = workspace;
97
- const existing = workspaces.find(w => w.id === workspace.id);
98
- if (!existing) {
99
- // New workspace, save it
100
- activeWorkspace._core = this;
101
- this.saveWorkspaceToAppState(activeWorkspace);
102
- }
103
- }
104
- else if (lastActiveWorkspace) {
105
- // Use last active workspace from localStorage
106
- activeWorkspace = lastActiveWorkspace;
107
- }
108
- else if (mostRecentWorkspace) {
109
- // Use most recent workspace
110
- activeWorkspace = mostRecentWorkspace;
111
- }
112
- else {
113
- // Create fallback workspace
114
- activeWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');
115
- activeWorkspace._core = this;
116
- this.saveWorkspaceToAppState(activeWorkspace);
117
- }
118
- // Save active workspace ID to localStorage
119
- localStorage.setItem('kritzel-active-workspace-id', activeWorkspace.id);
120
- // Destroy old ObjectMap if switching workspaces
121
- if (this._store.state.objects && this._store.state.objects.isReady) {
122
- this._store.state.objects.destroy();
123
- }
124
- // Create new ObjectMap with its own Y.Doc for this workspace
125
- const objectsMap = new KritzelObjectMap();
126
- // Assign immediately so the UI shows an empty state while loading,
127
- // instead of showing the old workspace's objects with the new workspace's viewport
128
- this._store.state.objects = objectsMap;
129
- // Set active workspace
130
- this._store.state.activeWorkspace = activeWorkspace;
131
- this._store.state.workspaces = this.loadWorkspacesFromAppState();
132
- // Set viewport from workspace
133
- const viewport = (_a = activeWorkspace.viewport) !== null && _a !== void 0 ? _a : { translateX: 0, translateY: 0, scale: 1 };
134
- this._store.state.translateX = (_b = viewport.translateX) !== null && _b !== void 0 ? _b : 0;
135
- this._store.state.translateY = (_c = viewport.translateY) !== null && _c !== void 0 ? _c : 0;
136
- this._store.state.scale = (_d = viewport.scale) !== null && _d !== void 0 ? _d : 1;
137
- yield objectsMap.initialize(this, activeWorkspace.id, this._syncConfig);
138
- // Rebuild anchor index after loading objects
139
- this._anchorManager.rebuildIndex();
140
- this.engine.emitObjectsChange();
141
- this.rerender();
142
- });
143
- }
144
- getObjectsInViewport() {
145
- const viewportBounds = {
146
- x: -this._store.state.translateX / this._store.state.scale,
147
- y: -this._store.state.translateY / this._store.state.scale,
148
- z: this._store.state.scale,
149
- width: this._store.state.viewportWidth / this._store.state.scale,
150
- height: this._store.state.viewportHeight / this._store.state.scale,
151
- depth: 100,
152
- };
153
- return this._store.state.objects
154
- .query(viewportBounds)
155
- .filter(obj => !(obj instanceof KritzelSelectionGroup) && !(obj instanceof KritzelSelectionBox))
156
- .sort((a, b) => a.zIndex - b.zIndex);
157
- }
158
- rerender() {
159
- if (this._kritzelEngine) {
160
- this._kritzelEngine.forceUpdate++;
161
- }
162
- }
163
- findObjectById(id) {
164
- for (const object of this._store.allObjects) {
165
- if (object.id === id) {
166
- return object;
167
- }
168
- }
169
- return null;
170
- }
171
- getWorkspaces() {
172
- return this.loadWorkspacesFromAppState();
173
- }
174
- createWorkspace(workspace) {
175
- workspace._core = this;
176
- workspace.createdAt = new Date();
177
- workspace.updatedAt = new Date();
178
- this.saveWorkspaceToAppState(workspace);
179
- this._store.state.workspaces = this.loadWorkspacesFromAppState();
180
- }
181
- updateWorkspace(workspace) {
182
- workspace.updatedAt = new Date();
183
- this.saveWorkspaceToAppState(workspace);
184
- const workspaces = this._store.state.workspaces;
185
- const index = workspaces.findIndex(w => w.id === workspace.id);
186
- if (index !== -1) {
187
- workspaces[index] = workspace;
188
- this._store.state.workspaces = workspaces;
189
- }
190
- }
191
- deleteWorkspace(workspace) {
192
- var _a, _b, _c;
193
- // If deleting the active workspace, need to handle ObjectMap cleanup
194
- if (((_a = this._store.state.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id) === workspace.id) {
195
- (_b = this.engine.viewport) === null || _b === void 0 ? void 0 : _b.cancelPendingUpdates();
196
- (_c = this._store.state.objects) === null || _c === void 0 ? void 0 : _c.destroy();
197
- }
198
- this.deleteWorkspaceFromAppState(workspace.id);
199
- this._store.state.workspaces = this.loadWorkspacesFromAppState();
200
- // Also delete the workspace's IndexedDB database
201
- const dbName = `kritzel-workspace-${workspace.id}`;
202
- window.indexedDB.deleteDatabase(dbName);
203
- }
204
- updateWorkspaceViewport(translateX, translateY, scale) {
205
- const activeWorkspace = this._store.state.activeWorkspace;
206
- if (!activeWorkspace) {
207
- return;
208
- }
209
- // Check if the workspace is still valid (not deleted)
210
- const isValid = this._store.state.workspaces.some(w => w.id === activeWorkspace.id);
211
- if (!isValid) {
212
- return;
213
- }
214
- activeWorkspace.viewport = { translateX, translateY, scale };
215
- activeWorkspace.updatedAt = new Date();
216
- this.saveWorkspaceToAppState(activeWorkspace);
217
- }
218
- addObject(object) {
219
- this._store.state.objects.insert(object);
220
- }
221
- removeObject(object, preserveChildren = false) {
222
- // Handle KritzelGroup: recursively delete all children first (unless preserveChildren is true)
223
- if (object instanceof KritzelGroup && !preserveChildren) {
224
- // Get children before removing the group
225
- const children = [...object.children];
226
- children.forEach(child => {
227
- this.removeObject(child);
228
- });
229
- }
230
- // Handle anchor cleanup
231
- if (object instanceof KritzelLine) {
232
- // If removing a line, clean up its anchor index entries
233
- this._anchorManager.handleLineDeleted(object.id);
234
- }
235
- else {
236
- // If removing a non-line object, detach any lines anchored to it
237
- this._anchorManager.handleObjectDeleted(object.id);
238
- }
239
- object.isMounted = false;
240
- this._store.state.objects.remove(o => o.id === object.id);
241
- }
242
- updateObject(object, updatedProperties) {
243
- const changedKeys = [];
244
- for (const key in updatedProperties) {
245
- if (updatedProperties.hasOwnProperty(key)) {
246
- object[key] = updatedProperties[key];
247
- changedKeys.push(key);
248
- }
249
- }
250
- object.onAfterUpdate(changedKeys);
251
- this._store.state.objects.update(object);
252
- }
253
- addSelectionGroup(selectionGroup) {
254
- this.removeSelectionGroup();
255
- this.removeSelectionBox();
256
- this._store.state.objects.insert(selectionGroup);
257
- this._store.setSelectionGroup(selectionGroup);
258
- this._kritzelEngine.triggerSelectionChange();
259
- }
260
- removeSelectionGroup() {
261
- const selectionGroup = this._store.selectionGroup;
262
- if (selectionGroup) {
263
- this._store.state.objects.remove(object => object.id === selectionGroup.id);
264
- this._store.setSelectionGroup(null);
265
- this._kritzelEngine.triggerSelectionChange();
266
- }
267
- }
268
- removeSelectionBox() {
269
- const selectionBox = this._store.selectionBox;
270
- if (selectionBox) {
271
- this._store.state.objects.remove(object => object.id === selectionBox.id);
272
- this._store.setSelectionBox(null);
273
- }
274
- }
275
- deselectAllObjects() {
276
- this.removeSelectionGroup();
277
- this.rerender();
278
- }
279
- delete() {
280
- const selectionGroup = this._store.selectionGroup;
281
- if (!selectionGroup) {
282
- return;
283
- }
284
- selectionGroup.objects.forEach(obj => this.removeObject(obj));
285
- this.removeSelectionGroup();
286
- this.rerender();
287
- }
288
- undo() {
289
- var _a;
290
- (_a = this._store.state.objects) === null || _a === void 0 ? void 0 : _a.undo();
291
- }
292
- redo() {
293
- var _a;
294
- (_a = this._store.state.objects) === null || _a === void 0 ? void 0 : _a.redo();
295
- }
296
- deleteObject(id) {
297
- const object = this.findObjectById(id);
298
- if (object) {
299
- this.removeObject(object);
300
- this.rerender();
301
- }
302
- }
303
- copy() {
304
- const selectionGroup = this._store.selectionGroup;
305
- if (selectionGroup) {
306
- // Copy each object and store them in an array, also track the ID mapping
307
- const idMapping = new Map();
308
- const copiedObjects = selectionGroup.objects
309
- .sort((a, b) => a.zIndex - b.zIndex)
310
- .map(obj => {
311
- const copiedObj = obj.copy();
312
- // Map: newId -> originalId
313
- idMapping.set(copiedObj.id, obj.id);
314
- return copiedObj;
315
- });
316
- this._store.state.copiedObjects = copiedObjects;
317
- this._store.state.copiedObjectIdMapping = idMapping;
318
- }
319
- }
320
- paste(x, y) {
321
- const copiedObjects = this._store.state.copiedObjects;
322
- if (!copiedObjects || copiedObjects.length === 0) {
323
- return;
324
- }
325
- const activeWorkspace = this._store.state.activeWorkspace;
326
- const originalIdMapping = this._store.state.copiedObjectIdMapping;
327
- // Check if we're pasting from a different workspace
328
- const isDifferentWorkspace = copiedObjects.some(obj => obj.workspaceId !== activeWorkspace.id);
329
- // Calculate the bounding box of all copied objects
330
- const minX = Math.min(...copiedObjects.map(obj => obj.translateX));
331
- const minY = Math.min(...copiedObjects.map(obj => obj.translateY));
332
- // Determine the paste position
333
- let pasteX;
334
- let pasteY;
335
- if (x !== undefined && y !== undefined) {
336
- // Explicit position provided (e.g., right-click paste)
337
- pasteX = x;
338
- pasteY = y;
339
- }
340
- else if (isDifferentWorkspace) {
341
- // Pasting to different workspace without explicit position
342
- // Keep original position; will be centered by centerInViewport() later
343
- pasteX = minX;
344
- pasteY = minY;
345
- }
346
- else {
347
- // Same workspace paste: offset by 25 pixels from original position
348
- pasteX = minX + 25 / this._store.state.scale;
349
- pasteY = minY + 25 / this._store.state.scale;
350
- }
351
- // Calculate the offset to apply to all objects
352
- const offsetX = pasteX - minX;
353
- const offsetY = pasteY - minY;
354
- this.removeSelectionGroup();
355
- this.removeSelectionBox();
356
- // Create a new selection group for the pasted objects
357
- const selectionGroup = KritzelSelectionGroup.create(this);
358
- // Build a reverse mapping: originalId -> newCopiedObjectId
359
- // This is used to remap anchor references from original IDs to the copied object IDs
360
- const originalToNewIdMap = new Map();
361
- if (originalIdMapping) {
362
- originalIdMapping.forEach((originalId, copiedId) => {
363
- originalToNewIdMap.set(originalId, copiedId);
364
- });
365
- }
366
- // Precompute zIndex once to avoid O(N * total_objects) repeated scans
367
- const baseZIndex = this._store.currentZIndex;
368
- // Batch all inserts and updates in a single Y.js transaction to avoid
369
- // N separate observer callbacks and N rerenders (fires only once at commit)
370
- this._store.state.objects.transaction(() => {
371
- // First add all copied objects to the objectsMap with updated positions
372
- copiedObjects.forEach((obj, i) => {
373
- // Update workspace if pasting to a different workspace
374
- if (obj.workspaceId !== activeWorkspace.id) {
375
- obj.workspaceId = activeWorkspace.id;
376
- }
377
- // Update position
378
- obj.updatePosition(obj.translateX + offsetX, obj.translateY + offsetY);
379
- // Update z-index
380
- obj.zIndex = baseZIndex + i;
381
- // Handle KritzelGroup: also add pending children with offset
382
- if (obj instanceof KritzelGroup) {
383
- const pendingChildren = obj._pendingChildren;
384
- if (pendingChildren) {
385
- pendingChildren.forEach((child, childIndex) => {
386
- // Update workspace
387
- if (child.workspaceId !== activeWorkspace.id) {
388
- child.workspaceId = activeWorkspace.id;
389
- }
390
- // Update position with offset
391
- child.updatePosition(child.translateX + offsetX, child.translateY + offsetY);
392
- // Update z-index
393
- child.zIndex = baseZIndex + i + childIndex;
394
- // Add child to store
395
- this.addObject(child);
396
- });
397
- // Clear pending children
398
- delete obj._pendingChildren;
399
- // Finalize the group's bounding box and snapshots
400
- obj.finalize();
401
- }
402
- }
403
- // Add to objectsMap
404
- this.addObject(obj);
405
- // Add to selection group
406
- selectionGroup.addOrRemove(obj);
407
- });
408
- // Update line anchors to point to the newly pasted objects
409
- // Only remap if the anchor target was also part of the copied selection
410
- copiedObjects.forEach(obj => {
411
- if (obj instanceof KritzelLine) {
412
- let updated = false;
413
- if (obj.startAnchor && originalToNewIdMap.has(obj.startAnchor.objectId)) {
414
- obj.startAnchor = { objectId: originalToNewIdMap.get(obj.startAnchor.objectId) };
415
- updated = true;
416
- }
417
- if (obj.endAnchor && originalToNewIdMap.has(obj.endAnchor.objectId)) {
418
- obj.endAnchor = { objectId: originalToNewIdMap.get(obj.endAnchor.objectId) };
419
- updated = true;
420
- }
421
- // If anchors were updated, rebuild the anchor index and persist the change
422
- if (updated) {
423
- this._store.state.objects.update(obj);
424
- }
425
- }
426
- });
427
- });
428
- // Rebuild anchor index after all anchor updates
429
- this._anchorManager.rebuildIndex();
430
- // Mark selection group as selected
431
- selectionGroup.isSelected = true;
432
- // Set rotation for single object
433
- if (copiedObjects.length === 1) {
434
- selectionGroup.rotation = copiedObjects[0].rotation;
435
- }
436
- // Add the selection group
437
- this.addSelectionGroup(selectionGroup);
438
- // Handle cross-workspace paste: center objects in viewport
439
- if (isDifferentWorkspace) {
440
- if (x !== undefined && y !== undefined) {
441
- // Position was explicitly provided, use it
442
- selectionGroup.updatePosition(x, y);
443
- }
444
- else {
445
- // Center the selection group in the viewport
446
- selectionGroup.centerInViewport();
447
- }
448
- // Fit the viewport to show the pasted objects
449
- this.engine.viewport.centerFitInViewport(selectionGroup);
450
- }
451
- this._store.state.isSelecting = false;
452
- // Defer creating copies for future pastes to next frame to avoid
453
- // doubling the object creation cost in the current paste frame
454
- requestAnimationFrame(() => {
455
- const newSelectionGroup = this._store.selectionGroup;
456
- if (newSelectionGroup) {
457
- const newIdMapping = new Map();
458
- const newCopiedObjects = newSelectionGroup.objects
459
- .sort((a, b) => a.zIndex - b.zIndex)
460
- .map(obj => {
461
- const copiedObj = obj.copy();
462
- newIdMapping.set(copiedObj.id, obj.id);
463
- return copiedObj;
464
- });
465
- this._store.state.copiedObjects = newCopiedObjects;
466
- this._store.state.copiedObjectIdMapping = newIdMapping;
467
- }
468
- });
469
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
470
- this.engine.emitObjectsChange();
471
- this.rerender();
472
- }
473
- bringForward(object) {
474
- const selectionGroup = this._store.selectionGroup;
475
- const objects = object ? [object] : (selectionGroup === null || selectionGroup === void 0 ? void 0 : selectionGroup.objects) || [];
476
- const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
477
- const max = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1 : 0;
478
- objects.forEach(obj => {
479
- if (obj.zIndex !== max) {
480
- this.updateObject(obj, { zIndex: obj.zIndex + 1 });
481
- }
482
- });
483
- this.rerender();
484
- }
485
- sendBackward(object) {
486
- const selectionGroup = this._store.selectionGroup;
487
- const objects = object ? [object] : (selectionGroup === null || selectionGroup === void 0 ? void 0 : selectionGroup.objects) || [];
488
- const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
489
- const min = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1 : 0;
490
- objects.forEach(obj => {
491
- if (obj.zIndex !== min) {
492
- this.updateObject(obj, { zIndex: obj.zIndex - 1 });
493
- }
494
- });
495
- this.rerender();
496
- }
497
- bringToFront(object) {
498
- const selectionGroup = this._store.selectionGroup;
499
- const objects = object ? [object] : (selectionGroup === null || selectionGroup === void 0 ? void 0 : selectionGroup.objects) || [];
500
- const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
501
- const max = Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1;
502
- objects.forEach(obj => {
503
- this.updateObject(obj, { zIndex: max });
504
- });
505
- this.rerender();
506
- }
507
- sendToBack(object) {
508
- const selectionGroup = this._store.selectionGroup;
509
- const objects = object ? [object] : (selectionGroup === null || selectionGroup === void 0 ? void 0 : selectionGroup.objects) || [];
510
- const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
511
- const min = Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1;
512
- objects.forEach(obj => {
513
- this.updateObject(obj, { zIndex: min });
514
- });
515
- this.rerender();
516
- }
517
- /**
518
- * Groups the currently selected objects into a KritzelGroup.
519
- * Requires at least 2 objects to be selected.
520
- */
521
- group() {
522
- const selectionGroup = this._store.selectionGroup;
523
- if (!selectionGroup || selectionGroup.objects.length < 2) {
524
- return;
525
- }
526
- // Create a group from the selected objects
527
- const group = KritzelGroup.createFromObjects(this, selectionGroup.objects);
528
- // Add the group to the object store
529
- this.addObject(group);
530
- // Remove the selection group and create a new one with just the group
531
- this.removeSelectionGroup();
532
- const newSelectionGroup = KritzelSelectionGroup.create(this);
533
- newSelectionGroup.addOrRemove(group);
534
- newSelectionGroup.isSelected = true;
535
- newSelectionGroup.rotation = group.rotation;
536
- this.addSelectionGroup(newSelectionGroup);
537
- this.engine.emitObjectsChange();
538
- this.rerender();
539
- }
540
- /**
541
- * Ungroups any KritzelGroup objects in the current selection.
542
- * Children are extracted and become top-level objects.
543
- */
544
- ungroup() {
545
- const selectionGroup = this._store.selectionGroup;
546
- if (!selectionGroup) {
547
- return;
548
- }
549
- const groups = selectionGroup.objects.filter(obj => obj instanceof KritzelGroup);
550
- if (groups.length === 0) {
551
- return;
552
- }
553
- // Collect all children from all groups
554
- const allChildren = [];
555
- const nonGroupObjects = selectionGroup.objects.filter(obj => !(obj instanceof KritzelGroup));
556
- groups.forEach(group => {
557
- // Get children before removing the group
558
- const children = group.ungroup();
559
- allChildren.push(...children);
560
- // Remove the group from the store (but keep children)
561
- this.removeObject(group, true);
562
- });
563
- // Create a new selection group with all the ungrouped children and non-group objects
564
- this.removeSelectionGroup();
565
- const newSelectionGroup = KritzelSelectionGroup.create(this);
566
- [...allChildren, ...nonGroupObjects].forEach(child => {
567
- newSelectionGroup.addOrRemove(child);
568
- });
569
- newSelectionGroup.isSelected = true;
570
- this.addSelectionGroup(newSelectionGroup);
571
- this.engine.emitObjectsChange();
572
- this.rerender();
573
- }
574
- selectObjects(objects) {
575
- if (objects.length === 0) {
576
- return;
577
- }
578
- const selectionGroup = KritzelSelectionGroup.create(this);
579
- objects.forEach(obj => {
580
- obj.isSelected = false;
581
- selectionGroup.addOrRemove(obj);
582
- });
583
- selectionGroup.isSelected = true;
584
- if (objects.length === 1) {
585
- selectionGroup.rotation = selectionGroup.objects[0].rotation;
586
- }
587
- this.addSelectionGroup(selectionGroup);
588
- this.rerender();
589
- }
590
- selectAllObjects() {
591
- const allObjects = this._store.state.objects
592
- .allObjects()
593
- .filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KritzelSelectionBox) && !(o instanceof KritzelContextMenu));
594
- if (allObjects.length > 0) {
595
- const selectionGroup = KritzelSelectionGroup.create(this);
596
- allObjects.forEach(obj => {
597
- obj.isSelected = false;
598
- selectionGroup.addOrRemove(obj);
599
- });
600
- selectionGroup.isSelected = true;
601
- this._store.state.isSelecting = false;
602
- if (allObjects.length === 1) {
603
- selectionGroup.rotation = selectionGroup.objects[0].rotation;
604
- }
605
- this.addSelectionGroup(selectionGroup);
606
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
607
- this.rerender();
608
- }
609
- }
610
- selectAllObjectsInViewport() {
611
- const viewportBounds = {
612
- x: -this._store.state.translateX / this._store.state.scale,
613
- y: -this._store.state.translateY / this._store.state.scale,
614
- z: this._store.state.scale,
615
- width: this._store.state.viewportWidth / this._store.state.scale,
616
- height: this._store.state.viewportHeight / this._store.state.scale,
617
- depth: 100,
618
- };
619
- const objectsInViewport = this._store.state.objects
620
- .query(viewportBounds)
621
- .filter(o => o.isInViewport())
622
- .filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KritzelSelectionBox) && !(o instanceof KritzelContextMenu));
623
- if (objectsInViewport.length > 0) {
624
- const selectionGroup = KritzelSelectionGroup.create(this);
625
- objectsInViewport.forEach(obj => {
626
- obj.isSelected = false;
627
- selectionGroup.addOrRemove(obj);
628
- });
629
- selectionGroup.isSelected = true;
630
- this._store.state.isSelecting = false;
631
- if (objectsInViewport.length === 1) {
632
- selectionGroup.rotation = selectionGroup.objects[0].rotation;
633
- }
634
- this.addSelectionGroup(selectionGroup);
635
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
636
- this.rerender();
637
- }
638
- }
639
- clearSelection() {
640
- this.removeSelectionGroup();
641
- this._store.state.objects.remove(o => o instanceof KritzelSelectionBox || o instanceof KritzelSelectionGroup);
642
- this._store.setSelectionBox(null);
643
- this._store.setSelectionGroup(null);
644
- this._store.state.isSelecting = false;
645
- this._store.state.isResizeHandleSelected = false;
646
- this._store.state.isRotationHandleSelected = false;
647
- this._store.state.isLineHandleSelected = false;
648
- this._store.state.isLineHandleDragging = false;
649
- this._store.state.lineHandleType = null;
650
- this.rerender();
651
- }
652
- resetActiveText() {
653
- const activeText = this._store.activeText;
654
- if (activeText) {
655
- if (activeText.isEmpty) {
656
- this.deleteObject(activeText.id);
657
- }
658
- else {
659
- activeText.save();
660
- }
661
- }
662
- }
663
- resetActiveShape() {
664
- const activeShape = this._store.activeShape;
665
- if (activeShape) {
666
- activeShape.save();
667
- }
668
- }
669
- getObjectFromPointerEvent(event, selector = '.object') {
670
- var _a;
671
- const shadowRoot = (_a = this._store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
672
- if (!shadowRoot)
673
- return null;
674
- const clientX = event.clientX;
675
- const clientY = event.clientY;
676
- const elementAtPoint = shadowRoot.elementFromPoint(clientX, clientY);
677
- if (!elementAtPoint)
678
- return null;
679
- const selectedObject = elementAtPoint.closest(selector);
680
- if (selectedObject) {
681
- const foundObject = this._store.allObjects.find(object => selectedObject.id === object.id);
682
- const isHit = foundObject === null || foundObject === void 0 ? void 0 : foundObject.hitTest(clientX, clientY);
683
- return isHit ? foundObject : null;
684
- }
685
- return null;
686
- }
687
- getObjectsFromPointerEvent(event, selector = '.object') {
688
- var _a;
689
- const shadowRoot = (_a = this._store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
690
- if (!shadowRoot)
691
- return [];
692
- const clientX = event.clientX;
693
- const clientY = event.clientY;
694
- const elementsAtPoint = shadowRoot.elementsFromPoint(clientX, clientY);
695
- if (!elementsAtPoint || elementsAtPoint.length === 0)
696
- return [];
697
- const objectIds = new Set();
698
- elementsAtPoint.forEach(element => {
699
- const selectedObject = element.closest(selector);
700
- if (selectedObject && selectedObject.id) {
701
- objectIds.add(selectedObject.id);
702
- }
703
- });
704
- if (objectIds.size > 0) {
705
- return this._store.allObjects.filter(object => objectIds.has(object.id)).sort((a, b) => b.zIndex - a.zIndex);
706
- }
707
- return [];
708
- }
709
- /**
710
- * Get all elements at a pointer position that match a given selector.
711
- * Uses elementsFromPoint to find overlapped elements.
712
- */
713
- getElementsAtPoint(event, selector) {
714
- var _a;
715
- const shadowRoot = (_a = this._store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
716
- if (!shadowRoot)
717
- return [];
718
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
719
- if (!elementsAtPoint || elementsAtPoint.length === 0)
720
- return [];
721
- return elementsAtPoint.filter(el => el.matches(selector));
722
- }
723
- /**
724
- * Check if any element at the pointer position matches the given selector.
725
- * Useful for detecting hover states on overlapped elements.
726
- */
727
- isPointerOverElement(event, selector) {
728
- return this.getElementsAtPoint(event, selector).length > 0;
729
- }
730
- getCanvasPoint(event) {
731
- if (!this._store.state.host) {
732
- return { x: 0, y: 0 };
733
- }
734
- const hostRect = this._store.state.host.getBoundingClientRect();
735
- const xRelativeToHost = event.clientX - hostRect.left;
736
- const yRelativeToHost = event.clientY - hostRect.top;
737
- const xWithoutTranslate = xRelativeToHost - this._store.state.translateX;
738
- const yWithoutTranslate = yRelativeToHost - this._store.state.translateY;
739
- const worldX = xWithoutTranslate / this._store.state.scale;
740
- const worldY = yWithoutTranslate / this._store.state.scale;
741
- return { x: worldX, y: worldY };
742
- }
743
- beforeWorkspaceChange() {
744
- var _a;
745
- // Cancel any pending debounced viewport updates to prevent them from
746
- // saving the old workspace's viewport to the new workspace
747
- (_a = this._kritzelEngine.viewport) === null || _a === void 0 ? void 0 : _a.cancelPendingUpdates();
748
- // Immediately save the current workspace's viewport before switching
749
- const currentWorkspace = this._store.state.activeWorkspace;
750
- if (currentWorkspace) {
751
- this.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);
752
- }
753
- this.resetActiveText();
754
- this.clearSelection();
755
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
756
- }
757
- displaySelectionGroupUI(object) {
758
- if (!object.isSelected) {
759
- return false;
760
- }
761
- const selectionGroup = this._store.selectionGroup;
762
- if (!selectionGroup) {
763
- // During selection phase (no group yet), hide UI for KritzelLine objects
764
- return !(object instanceof KritzelLine);
765
- }
766
- // Show UI if selection contains more than one object
767
- if (selectionGroup.objects.length > 1) {
768
- return true;
769
- }
770
- // Hide UI if selection contains a single KritzelLine
771
- if (selectionGroup.objects.length === 1) {
772
- const selectedObject = selectionGroup.objects[0];
773
- return !(selectedObject instanceof KritzelLine);
774
- }
775
- return true;
776
- }
777
- displaySelectionLineUI(object) {
778
- // Only show line UI on KritzelLine objects, not on selection groups
779
- if (!(object instanceof KritzelLine)) {
780
- return false;
781
- }
782
- // During selection phase (no group yet), show line UI if line is selected
783
- const selectionGroup = this._store.selectionGroup;
784
- if (!selectionGroup) {
785
- return object.isSelected;
786
- }
787
- if (!selectionGroup.isSelected) {
788
- return false;
789
- }
790
- // Show UI only if selection contains exactly one KritzelLine and it's this object
791
- if (selectionGroup.objects.length === 1) {
792
- const selectedObject = selectionGroup.objects[0];
793
- return selectedObject instanceof KritzelLine && selectedObject.id === object.id;
794
- }
795
- return false;
796
- }
797
- }