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,429 +0,0 @@
1
- import { KritzelEventHelper } from '../../helpers/event.helper';
2
- import { KritzelColorHelper } from '../../helpers/color.helper';
3
- import { KritzelMoveHandler } from '../handlers/move.handler';
4
- import { KritzelResizeHandler } from '../handlers/resize.handler';
5
- import { KritzelRotationHandler } from '../handlers/rotation.handler';
6
- import { KritzelSelectionHandler } from '../handlers/selection.handler';
7
- import { KritzelSelectionGroup } from '../objects/selection-group.class';
8
- import { KritzelGroup } from '../objects/group.class';
9
- import { KritzelBaseTool } from './base-tool.class';
10
- import { KritzelHoverHandler } from '../handlers/hover.handler';
11
- import { KritzelLineHandleHandler } from '../handlers/line-handle.handler';
12
- import { KritzelPath } from '../objects/path.class';
13
- import { KritzelLine } from '../objects/line.class';
14
- import { KritzelShape } from '../objects/shape.class';
15
- import { KritzelText } from '../objects/text.class';
16
- import { KritzelImage } from '../objects/image.class';
17
- import { DEFAULT_COLOR_PALETTE } from '../../constants/color-palette.constants';
18
- export class KritzelSelectionTool extends KritzelBaseTool {
19
- /** Returns true if there are objects in the selection group */
20
- hasSelection() {
21
- return !!this._core.store.selectionGroup && this._core.store.selectionGroup.objects.length > 0;
22
- }
23
- /** Returns the selected objects or empty array */
24
- getSelectedObjects() {
25
- var _a, _b;
26
- return (_b = (_a = this._core.store.selectionGroup) === null || _a === void 0 ? void 0 : _a.objects) !== null && _b !== void 0 ? _b : [];
27
- }
28
- flattenObjects(objects) {
29
- let result = [];
30
- for (const obj of objects) {
31
- if (obj instanceof KritzelGroup) {
32
- result = result.concat(this.flattenObjects(obj.children));
33
- }
34
- else {
35
- result.push(obj);
36
- }
37
- }
38
- return result;
39
- }
40
- get color() {
41
- const objects = this.flattenObjects(this.getSelectedObjects());
42
- if (objects.length === 0)
43
- return DEFAULT_COLOR_PALETTE[0];
44
- for (const obj of objects) {
45
- if (obj instanceof KritzelPath)
46
- return obj.fill;
47
- if (obj instanceof KritzelLine)
48
- return obj.stroke;
49
- if (obj instanceof KritzelText)
50
- return obj.fontColor;
51
- if (obj instanceof KritzelShape)
52
- return obj.strokeColor;
53
- }
54
- return DEFAULT_COLOR_PALETTE[0];
55
- }
56
- set color(value) {
57
- const objects = this.flattenObjects(this.getSelectedObjects());
58
- objects.forEach(obj => {
59
- if (obj instanceof KritzelPath)
60
- this._core.updateObject(obj, { fill: value });
61
- if (obj instanceof KritzelLine)
62
- this._core.updateObject(obj, { stroke: value });
63
- if (obj instanceof KritzelText)
64
- this._core.updateObject(obj, { fontColor: value });
65
- if (obj instanceof KritzelShape)
66
- this._core.updateObject(obj, { strokeColor: value });
67
- });
68
- this._core.rerender();
69
- }
70
- get opacity() {
71
- const objects = this.flattenObjects(this.getSelectedObjects());
72
- if (objects.length === 0)
73
- return 1;
74
- return objects[0].opacity;
75
- }
76
- set opacity(value) {
77
- const objects = this.flattenObjects(this.getSelectedObjects());
78
- objects.forEach(obj => this._core.updateObject(obj, { opacity: value }));
79
- this._core.rerender();
80
- }
81
- get size() {
82
- const objects = this.flattenObjects(this.getSelectedObjects());
83
- if (objects.length === 0)
84
- return 1;
85
- for (const obj of objects) {
86
- if (obj instanceof KritzelPath)
87
- return obj.strokeWidth;
88
- if (obj instanceof KritzelLine)
89
- return obj.strokeWidth;
90
- if (obj instanceof KritzelText)
91
- return obj.fontSize;
92
- if (obj instanceof KritzelShape)
93
- return obj.strokeWidth;
94
- }
95
- return 1;
96
- }
97
- set size(value) {
98
- const objects = this.flattenObjects(this.getSelectedObjects());
99
- objects.forEach(obj => {
100
- if (obj instanceof KritzelPath)
101
- this._core.updateObject(obj, { strokeWidth: value });
102
- if (obj instanceof KritzelLine)
103
- this._core.updateObject(obj, { strokeWidth: value });
104
- if (obj instanceof KritzelText)
105
- this._core.updateObject(obj, { fontSize: value });
106
- if (obj instanceof KritzelShape)
107
- this._core.updateObject(obj, { strokeWidth: value });
108
- });
109
- this._core.rerender();
110
- this.refreshSelectionGroupDimensions();
111
- }
112
- get fillColor() {
113
- const objects = this.flattenObjects(this.getSelectedObjects());
114
- for (const obj of objects) {
115
- if (obj instanceof KritzelShape)
116
- return obj.fillColor;
117
- }
118
- return { light: 'transparent', dark: 'transparent' };
119
- }
120
- set fillColor(value) {
121
- const objects = this.flattenObjects(this.getSelectedObjects());
122
- objects.forEach(obj => {
123
- if (obj instanceof KritzelShape) {
124
- // Calculate new font color based on fill color
125
- const newFontColor = KritzelColorHelper.determineTextColor(value);
126
- this._core.updateObject(obj, { fillColor: value, fontColor: newFontColor });
127
- // When switching to fill mode, also update stroke color to match
128
- const isTransparent = typeof value === 'string' ? value === 'transparent' :
129
- (value.light === 'transparent' && value.dark === 'transparent');
130
- if (!isTransparent) {
131
- this._core.updateObject(obj, { strokeColor: value });
132
- }
133
- }
134
- });
135
- this._core.rerender();
136
- }
137
- get fontFamily() {
138
- const objects = this.flattenObjects(this.getSelectedObjects());
139
- for (const obj of objects) {
140
- if (obj instanceof KritzelText)
141
- return obj.fontFamily;
142
- if (obj instanceof KritzelShape)
143
- return obj.fontFamily;
144
- }
145
- return 'Arial';
146
- }
147
- set fontFamily(value) {
148
- const objects = this.flattenObjects(this.getSelectedObjects());
149
- objects.forEach(obj => {
150
- if (obj instanceof KritzelText)
151
- this._core.updateObject(obj, { fontFamily: value });
152
- if (obj instanceof KritzelShape)
153
- this._core.updateObject(obj, { fontFamily: value });
154
- });
155
- this._core.rerender();
156
- this.refreshSelectionGroupDimensions();
157
- }
158
- get arrows() {
159
- const objects = this.flattenObjects(this.getSelectedObjects());
160
- for (const obj of objects) {
161
- if (obj instanceof KritzelLine)
162
- return obj.arrows;
163
- }
164
- return { start: { enabled: false }, end: { enabled: false } };
165
- }
166
- set arrows(value) {
167
- const objects = this.flattenObjects(this.getSelectedObjects());
168
- objects.forEach(obj => {
169
- if (obj instanceof KritzelLine)
170
- this._core.updateObject(obj, { arrows: value });
171
- });
172
- this._core.rerender();
173
- this.refreshSelectionGroupDimensions();
174
- }
175
- /** Returns the tool config for selected objects, or null if no selection */
176
- getToolConfig() {
177
- if (!this.hasSelection())
178
- return null;
179
- const objects = this.flattenObjects(this.getSelectedObjects());
180
- const controls = [];
181
- const hasShape = objects.some(o => o instanceof KritzelShape);
182
- const hasText = objects.some(o => o instanceof KritzelText);
183
- const hasLine = objects.some(o => o instanceof KritzelLine);
184
- const hasImage = objects.some(o => o instanceof KritzelImage);
185
- const hasStroke = objects.some(o => o instanceof KritzelPath || o instanceof KritzelLine || o instanceof KritzelShape);
186
- // If only images are selected, return config with opacity only (no palette, no controls)
187
- if (hasImage && !hasShape && !hasText && !hasLine && !hasStroke) {
188
- return {
189
- type: 'selection',
190
- colorProperty: 'color',
191
- sizeProperty: 'size',
192
- opacityProperty: 'opacity',
193
- paletteSource: 'none',
194
- controls: [],
195
- };
196
- }
197
- if (hasText && !hasStroke) {
198
- controls.push({ type: 'font-size', propertyName: 'size' });
199
- controls.push({ type: 'font-family', propertyName: 'fontFamily' });
200
- }
201
- else if (hasStroke && !hasText) {
202
- controls.push({ type: 'stroke-size', propertyName: 'size' });
203
- }
204
- else {
205
- if (hasStroke)
206
- controls.push({ type: 'stroke-size', propertyName: 'size' });
207
- if (hasText)
208
- controls.push({ type: 'font-family', propertyName: 'fontFamily' });
209
- }
210
- if (hasLine) {
211
- controls.push({ type: 'line-endings', propertyName: 'arrows' });
212
- }
213
- if (hasShape) {
214
- controls.push({ type: 'shape-fill', propertyName: 'fillColor' });
215
- }
216
- return {
217
- type: 'selection',
218
- colorProperty: 'color',
219
- sizeProperty: 'size',
220
- opacityProperty: 'opacity',
221
- paletteSource: 'palette',
222
- controls,
223
- };
224
- }
225
- /**
226
- * Refreshes the selection group's dimensions after object properties that affect size have changed.
227
- * Uses requestAnimationFrame to ensure the DOM has been updated before measuring.
228
- */
229
- refreshSelectionGroupDimensions() {
230
- const selectionGroup = this._core.store.selectionGroup;
231
- if (selectionGroup) {
232
- requestAnimationFrame(() => {
233
- requestAnimationFrame(() => {
234
- selectionGroup.refreshObjectDimensions();
235
- this._core.rerender();
236
- });
237
- });
238
- }
239
- }
240
- constructor(core) {
241
- super(core);
242
- this.palette = [...DEFAULT_COLOR_PALETTE];
243
- this.selectionHandler = new KritzelSelectionHandler(this._core);
244
- this.moveHandler = new KritzelMoveHandler(this._core);
245
- this.hoverHandler = new KritzelHoverHandler(this._core);
246
- this.resizeHandler = new KritzelResizeHandler(this._core);
247
- this.rotationHandler = new KritzelRotationHandler(this._core);
248
- this.lineHandleHandler = new KritzelLineHandleHandler(this._core);
249
- }
250
- handlePointerDown(event) {
251
- if (event.cancelable) {
252
- event.preventDefault();
253
- }
254
- if (event.pointerType === 'mouse') {
255
- if (KritzelEventHelper.isLeftClick(event)) {
256
- this._core.store.state.isResizeHandleSelected = this.isHandleSelected(event);
257
- this._core.store.state.isRotationHandleSelected = this.isRotationHandleSelected(event);
258
- this._core.store.state.isLineHandleSelected = this.isLineHandleSelected(event);
259
- this._core.store.state.resizeHandleType = this.getHandleType(event);
260
- this._core.store.state.lineHandleType = this.getLineHandleType(event);
261
- const selectedObject = this.getSelectedObject(event);
262
- const selectionGroup = this._core.store.selectionGroup;
263
- const isDifferentObject = selectedObject && selectionGroup && selectedObject.id !== selectionGroup.id;
264
- if ((selectedObject === null || isDifferentObject) &&
265
- selectionGroup &&
266
- !this._core.store.state.isResizeHandleSelected &&
267
- !this._core.store.state.isRotationHandleSelected &&
268
- !this._core.store.state.isLineHandleSelected) {
269
- this._core.removeSelectionGroup();
270
- this._core.rerender();
271
- }
272
- if (selectedObject && selectedObject.isSelected === false && (selectedObject === null || selectedObject === void 0 ? void 0 : selectedObject.objects.length) === 1 && selectedObject.objects[0].isInteractive) {
273
- return;
274
- }
275
- }
276
- this.lineHandleHandler.handlePointerDown(event);
277
- this.moveHandler.handlePointerDown(event);
278
- this.selectionHandler.handlePointerDown(event);
279
- this.resizeHandler.handlePointerDown(event);
280
- this.rotationHandler.handlePointerDown(event);
281
- this._core.rerender();
282
- }
283
- if (event.pointerType === 'touch' || event.pointerType === 'pen') {
284
- if (this._core.store.state.isScaling === true) {
285
- return;
286
- }
287
- if (this._core.store.state.pointers.size === 1) {
288
- this._core.store.state.isResizeHandleSelected = this.isHandleSelected(event);
289
- this._core.store.state.isRotationHandleSelected = this.isRotationHandleSelected(event);
290
- this._core.store.state.isLineHandleSelected = this.isLineHandleSelected(event);
291
- this._core.store.state.resizeHandleType = this.getHandleType(event);
292
- this._core.store.state.lineHandleType = this.getLineHandleType(event);
293
- const selectedObject = this.getSelectedObject(event);
294
- const selectionGroup = this._core.store.selectionGroup;
295
- const isDifferentObject = selectedObject && selectionGroup && selectedObject.id !== selectionGroup.id;
296
- if (!selectionGroup && selectedObject) {
297
- this._core.store.state.skipContextMenu = true;
298
- }
299
- if ((selectedObject === null || isDifferentObject) &&
300
- selectionGroup &&
301
- !this._core.store.state.isResizeHandleSelected &&
302
- !this._core.store.state.isRotationHandleSelected &&
303
- !this._core.store.state.isLineHandleSelected) {
304
- this._core.removeSelectionGroup();
305
- this._core.rerender();
306
- }
307
- }
308
- this.lineHandleHandler.handlePointerDown(event);
309
- this.rotationHandler.handlePointerDown(event);
310
- this.resizeHandler.handlePointerDown(event);
311
- this.moveHandler.handlePointerDown(event);
312
- this.selectionHandler.handlePointerDown(event);
313
- this._core.rerender();
314
- }
315
- }
316
- handlePointerMove(event) {
317
- if (event.cancelable) {
318
- event.preventDefault();
319
- }
320
- if (event.pointerType === 'mouse') {
321
- this.lineHandleHandler.handlePointerMove(event);
322
- this.moveHandler.handlePointerMove(event);
323
- this.hoverHandler.handlePointerMove(event);
324
- this.selectionHandler.handlePointerMove(event);
325
- this.resizeHandler.handlePointerMove(event);
326
- this.rotationHandler.handlePointerMove(event);
327
- this._core.rerender();
328
- }
329
- if (event.pointerType === 'touch' || event.pointerType === 'pen') {
330
- if (this._core.store.state.isScaling === true) {
331
- return;
332
- }
333
- this.lineHandleHandler.handlePointerMove(event);
334
- this.rotationHandler.handlePointerMove(event);
335
- this.resizeHandler.handlePointerMove(event);
336
- this.moveHandler.handlePointerMove(event);
337
- this.selectionHandler.handlePointerMove(event);
338
- this._core.rerender();
339
- }
340
- }
341
- handlePointerUp(event) {
342
- if (event.cancelable) {
343
- event.preventDefault();
344
- }
345
- if (event.pointerType === 'mouse') {
346
- this.lineHandleHandler.handlePointerUp(event);
347
- this.moveHandler.handlePointerUp(event);
348
- this.resizeHandler.handlePointerUp(event);
349
- this.rotationHandler.handlePointerUp(event);
350
- this.selectionHandler.handlePointerUp(event);
351
- this._core.rerender();
352
- }
353
- if (event.pointerType === 'touch' || event.pointerType === 'pen') {
354
- if (this._core.store.state.isScaling === true) {
355
- return;
356
- }
357
- this.lineHandleHandler.handlePointerUp(event);
358
- this.rotationHandler.handlePointerUp(event);
359
- this.resizeHandler.handlePointerUp(event);
360
- this.moveHandler.handlePointerUp(event);
361
- this.selectionHandler.handlePointerUp(event);
362
- this._core.rerender();
363
- }
364
- }
365
- getSelectedObject(event) {
366
- const path = event.composedPath().slice(1);
367
- const objectElement = path.find(element => element.classList && element.classList.contains('object'));
368
- const object = this._core.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
369
- if (!object) {
370
- return null;
371
- }
372
- const { x, y } = this._core.getCanvasPoint(event);
373
- if (!object.hitTest(x, y)) {
374
- return null;
375
- }
376
- if (object instanceof KritzelSelectionGroup) {
377
- return object;
378
- }
379
- else {
380
- const group = KritzelSelectionGroup.create(this._core);
381
- group.translateX = 0;
382
- group.translateY = 0;
383
- group.addOrRemove(object);
384
- return group;
385
- }
386
- }
387
- getHandleType(event) {
388
- var _a;
389
- const shadowRoot = (_a = this._core.store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
390
- if (!shadowRoot)
391
- return;
392
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
393
- const handle = elementsAtPoint.find(el => el.classList.contains('resize-handle-overlay'));
394
- return handle === null || handle === void 0 ? void 0 : handle.classList[1];
395
- }
396
- isHandleSelected(event) {
397
- var _a;
398
- const shadowRoot = (_a = this._core.store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
399
- if (!shadowRoot)
400
- return false;
401
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
402
- return elementsAtPoint.some(el => el.classList.contains('resize-handle-overlay'));
403
- }
404
- isRotationHandleSelected(event) {
405
- var _a;
406
- const shadowRoot = (_a = this._core.store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
407
- if (!shadowRoot)
408
- return false;
409
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
410
- return elementsAtPoint.some(el => el.classList.contains('rotation-handle-overlay'));
411
- }
412
- isLineHandleSelected(event) {
413
- var _a;
414
- const shadowRoot = (_a = this._core.store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
415
- if (!shadowRoot)
416
- return false;
417
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
418
- return elementsAtPoint.some(el => el.classList.contains('selection-line-handle-overlay'));
419
- }
420
- getLineHandleType(event) {
421
- var _a;
422
- const shadowRoot = (_a = this._core.store.state.host) === null || _a === void 0 ? void 0 : _a.shadowRoot;
423
- if (!shadowRoot)
424
- return;
425
- const elementsAtPoint = shadowRoot.elementsFromPoint(event.clientX, event.clientY);
426
- const handle = elementsAtPoint.find(el => el.classList.contains('selection-line-handle-overlay'));
427
- return handle === null || handle === void 0 ? void 0 : handle.classList[1];
428
- }
429
- }
@@ -1,196 +0,0 @@
1
- import { KritzelShape } from '../objects/shape.class';
2
- import { KritzelBaseTool } from './base-tool.class';
3
- import { KritzelEventHelper } from '../../helpers/event.helper';
4
- import { KritzelToolRegistry } from '../registries/tool.registry';
5
- import { ShapeType } from '../../enums/shape-type.enum';
6
- import { DEFAULT_COLOR_PALETTE } from '../../constants/color-palette.constants';
7
- export class KritzelShapeTool extends KritzelBaseTool {
8
- constructor(core) {
9
- super(core);
10
- this.shapeType = ShapeType.Rectangle;
11
- this.fillColor = { light: 'transparent', dark: 'transparent' };
12
- this.strokeColor = DEFAULT_COLOR_PALETTE[0];
13
- this.strokeWidth = 4;
14
- this.opacity = 1;
15
- this.fontFamily = 'Arial';
16
- this.fontSize = 16;
17
- this.fontColor = DEFAULT_COLOR_PALETTE[0];
18
- this.palette = [...DEFAULT_COLOR_PALETTE];
19
- this.startX = 0;
20
- this.startY = 0;
21
- this.isDrawing = false;
22
- this.currentShape = null;
23
- }
24
- handlePointerDown(event) {
25
- if (event.cancelable) {
26
- event.preventDefault();
27
- }
28
- if (event.pointerType === 'mouse') {
29
- const path = event.composedPath().slice(1);
30
- const objectElement = path.find(element => element.classList && element.classList.contains('object'));
31
- const object = this._core.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
32
- const activeShape = this._core.store.activeShape;
33
- if (activeShape === null && object instanceof KritzelShape) {
34
- object.edit(event);
35
- return;
36
- }
37
- if (activeShape !== null && object instanceof KritzelShape) {
38
- activeShape.save();
39
- object.edit(event);
40
- return;
41
- }
42
- if (activeShape !== null && object instanceof KritzelShape === false) {
43
- this._core.resetActiveShape();
44
- this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
45
- return;
46
- }
47
- if (KritzelEventHelper.isLeftClick(event) === false) {
48
- return;
49
- }
50
- this.startDrawing(event.clientX, event.clientY);
51
- }
52
- if (event.pointerType === 'touch' || event.pointerType === 'pen') {
53
- const activePointers = Array.from(this._core.store.state.pointers.values());
54
- const path = event.composedPath().slice(1);
55
- const objectElement = path.find(element => element.classList && element.classList.contains('object'));
56
- const object = this._core.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
57
- const activeShape = this._core.store.activeShape;
58
- if (activeShape === null && object instanceof KritzelShape) {
59
- object.edit(event);
60
- return;
61
- }
62
- if (activeShape !== null && object instanceof KritzelShape) {
63
- activeShape.save();
64
- object.edit(event);
65
- return;
66
- }
67
- if (activeShape !== null && object instanceof KritzelShape === false) {
68
- this._core.resetActiveShape();
69
- this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
70
- return;
71
- }
72
- if (activePointers.length > 1) {
73
- return;
74
- }
75
- const clientX = Math.round(activePointers[0].clientX);
76
- const clientY = Math.round(activePointers[0].clientY);
77
- this.startDrawing(clientX, clientY);
78
- }
79
- }
80
- handlePointerMove(event) {
81
- if (event.cancelable) {
82
- event.preventDefault();
83
- }
84
- if (!this.isDrawing || !this.currentShape) {
85
- return;
86
- }
87
- if (event.pointerType === 'mouse') {
88
- this.updateShapeSize(event.clientX, event.clientY);
89
- }
90
- if (event.pointerType === 'touch' || event.pointerType === 'pen') {
91
- const activePointers = Array.from(this._core.store.state.pointers.values());
92
- if (activePointers.length === 1) {
93
- const clientX = Math.round(activePointers[0].clientX);
94
- const clientY = Math.round(activePointers[0].clientY);
95
- this.updateShapeSize(clientX, clientY);
96
- }
97
- }
98
- }
99
- handlePointerUp(event) {
100
- if (event.cancelable) {
101
- event.preventDefault();
102
- }
103
- if (!this.isDrawing || !this.currentShape) {
104
- return;
105
- }
106
- this.finishDrawing();
107
- }
108
- /**
109
- * Start drawing a shape. Following the same pattern as LineTool/BrushTool:
110
- * - Store screen coordinates for startX, startY
111
- * - Set translateX/Y to -viewportTranslateX/Y (viewport offset)
112
- * - Set x, y to the actual screen position
113
- * - Let updateDimensions() convert to world coordinates
114
- */
115
- startDrawing(clientX, clientY) {
116
- // Store screen coordinates (relative to host element)
117
- const viewportScale = this._core.store.state.scale;
118
- const lockScale = this._core.store.state.lockDrawingScale;
119
- const divider = lockScale ? viewportScale : 1;
120
- this.startX = (clientX - this._core.store.offsetX) / divider;
121
- this.startY = (clientY - this._core.store.offsetY) / divider;
122
- this.isDrawing = true;
123
- // Create shape using screen coordinates, following Path/Line pattern
124
- this.currentShape = KritzelShape.create(this._core, {
125
- x: this.startX,
126
- y: this.startY,
127
- translateX: -this._core.store.state.translateX / divider,
128
- translateY: -this._core.store.state.translateY / divider,
129
- width: 1,
130
- height: 1,
131
- shapeType: this.shapeType,
132
- fillColor: this.fillColor,
133
- strokeColor: this.strokeColor,
134
- strokeWidth: this.strokeWidth,
135
- opacity: this.opacity,
136
- fontSize: this.fontSize,
137
- fontFamily: this.fontFamily,
138
- scale: lockScale ? 1 : viewportScale,
139
- });
140
- this._core.store.state.objects.insert(this.currentShape);
141
- this._core.rerender();
142
- }
143
- /**
144
- * Update shape size during drawing. Following the same pattern as LineTool:
145
- * - Use screen coordinates directly
146
- * - The shape's x, y, width, height are all in screen space
147
- * - updateDimensions() handles conversion to world coordinates
148
- */
149
- updateShapeSize(clientX, clientY) {
150
- if (!this.currentShape) {
151
- return;
152
- }
153
- const viewportScale = this._core.store.state.scale;
154
- const lockScale = this._core.store.state.lockDrawingScale;
155
- const divider = lockScale ? viewportScale : 1;
156
- const currentX = (clientX - this._core.store.offsetX) / divider;
157
- const currentY = (clientY - this._core.store.offsetY) / divider;
158
- // Calculate bounding box in screen coordinates
159
- const minX = Math.min(this.startX, currentX);
160
- const minY = Math.min(this.startY, currentY);
161
- const width = Math.abs(currentX - this.startX);
162
- const height = Math.abs(currentY - this.startY);
163
- // Update shape with screen coordinates
164
- this.currentShape.x = minX;
165
- this.currentShape.y = minY;
166
- this.currentShape.width = Math.max(1, width);
167
- this.currentShape.height = Math.max(1, height);
168
- // Recalculate world-space translateX/Y
169
- // Reset translateX/Y to initial value before updateDimensions
170
- this.currentShape.translateX = -this._core.store.state.translateX / divider;
171
- this.currentShape.translateY = -this._core.store.state.translateY / divider;
172
- this.currentShape.updateDimensions();
173
- this._core.store.state.objects.update(this.currentShape);
174
- }
175
- finishDrawing() {
176
- if (!this.currentShape) {
177
- return;
178
- }
179
- // Remove shape if it's too small (likely an accidental click)
180
- // Compare in screen space
181
- if (this.currentShape.width < 10 && this.currentShape.height < 10) {
182
- const shapeId = this.currentShape.id;
183
- this._core.store.state.objects.remove(o => o.id === shapeId);
184
- }
185
- else {
186
- this.currentShape.zIndex = this._core.store.currentZIndex;
187
- this._core.store.state.objects.update(this.currentShape);
188
- this._core.engine.emitObjectsChange();
189
- this._core.selectObjects([this.currentShape]);
190
- this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
191
- }
192
- this.isDrawing = false;
193
- this.currentShape = null;
194
- this._core.rerender();
195
- }
196
- }