kritzel-stencil 0.0.162 → 0.0.164

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 (116) hide show
  1. package/dist/cjs/{default-line-tool.config-D1Ns0NmM.js → default-line-tool.config-DJMYrkSu.js} +340 -9
  2. package/dist/cjs/default-line-tool.config-DJMYrkSu.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/kritzel-color_22.cjs.entry.js +760 -27
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/stencil.cjs.js +1 -1
  7. package/dist/collection/classes/core/core.class.js +19 -3
  8. package/dist/collection/classes/core/core.class.js.map +1 -1
  9. package/dist/collection/classes/core/reviver.class.js +16 -0
  10. package/dist/collection/classes/core/reviver.class.js.map +1 -1
  11. package/dist/collection/classes/core/store.class.js +5 -0
  12. package/dist/collection/classes/core/store.class.js.map +1 -1
  13. package/dist/collection/classes/core/viewport.class.js +8 -0
  14. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  15. package/dist/collection/classes/managers/anchor.manager.js +181 -3
  16. package/dist/collection/classes/managers/anchor.manager.js.map +1 -1
  17. package/dist/collection/classes/objects/path.class.js +85 -0
  18. package/dist/collection/classes/objects/path.class.js.map +1 -1
  19. package/dist/collection/classes/objects/shape.class.js +372 -0
  20. package/dist/collection/classes/objects/shape.class.js.map +1 -0
  21. package/dist/collection/classes/registries/icon-registry.class.js +4 -0
  22. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  23. package/dist/collection/classes/tools/brush-tool.class.js +2 -2
  24. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  25. package/dist/collection/classes/tools/line-tool.class.js +2 -2
  26. package/dist/collection/classes/tools/line-tool.class.js.map +1 -1
  27. package/dist/collection/classes/tools/shape-tool.class.js +204 -0
  28. package/dist/collection/classes/tools/shape-tool.class.js.map +1 -0
  29. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +17 -6
  30. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  31. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +44 -8
  32. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  33. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +143 -5
  34. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +76 -12
  35. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  36. package/dist/collection/configs/default-shape-tool.config.js +26 -0
  37. package/dist/collection/configs/default-shape-tool.config.js.map +1 -0
  38. package/dist/collection/enums/shape-type.enum.js +7 -0
  39. package/dist/collection/enums/shape-type.enum.js.map +1 -0
  40. package/dist/collection/helpers/geometry.helper.js +55 -0
  41. package/dist/collection/helpers/geometry.helper.js.map +1 -1
  42. package/dist/collection/interfaces/toolbar-control.interface.js.map +1 -1
  43. package/dist/components/index.js +3 -3
  44. package/dist/components/kritzel-brush-style.js +1 -1
  45. package/dist/components/kritzel-context-menu.js +1 -1
  46. package/dist/components/kritzel-control-brush-config.js +1 -1
  47. package/dist/components/kritzel-control-text-config.js +1 -1
  48. package/dist/components/kritzel-controls.js +1 -1
  49. package/dist/components/kritzel-editor.js +49 -16
  50. package/dist/components/kritzel-editor.js.map +1 -1
  51. package/dist/components/kritzel-engine.js +1 -1
  52. package/dist/components/kritzel-icon.js +1 -1
  53. package/dist/components/kritzel-menu-item.js +1 -1
  54. package/dist/components/kritzel-menu.js +1 -1
  55. package/dist/components/kritzel-split-button.js +1 -1
  56. package/dist/components/kritzel-utility-panel.js +1 -1
  57. package/dist/components/kritzel-workspace-manager.js +1 -1
  58. package/dist/components/{p-Cqr0Bah5.js → p-5OECjGHq.js} +3 -3
  59. package/dist/components/{p-Cqr0Bah5.js.map → p-5OECjGHq.js.map} +1 -1
  60. package/dist/components/{p-CvLFRlQU.js → p-BSBMBjhq.js} +3 -3
  61. package/dist/components/{p-CvLFRlQU.js.map → p-BSBMBjhq.js.map} +1 -1
  62. package/dist/components/{p-7_lwv0zQ.js → p-BuS7MM1j.js} +4 -4
  63. package/dist/components/{p-7_lwv0zQ.js.map → p-BuS7MM1j.js.map} +1 -1
  64. package/dist/components/{p-BixlbUD7.js → p-Cv4BGNPb.js} +6 -2
  65. package/dist/components/p-Cv4BGNPb.js.map +1 -0
  66. package/dist/components/{p-dMCB4tJA.js → p-D1YAsWrL.js} +3 -3
  67. package/dist/components/{p-dMCB4tJA.js.map → p-D1YAsWrL.js.map} +1 -1
  68. package/dist/components/{p-CDteBYm9.js → p-D8L0t-Ro.js} +3 -3
  69. package/dist/components/{p-CDteBYm9.js.map → p-D8L0t-Ro.js.map} +1 -1
  70. package/dist/components/{p-DZ7kxJUx.js → p-DguzZn_x.js} +3 -3
  71. package/dist/components/{p-DZ7kxJUx.js.map → p-DguzZn_x.js.map} +1 -1
  72. package/dist/components/{p-sokRZ7Vn.js → p-Dz2XHHqa.js} +145 -5
  73. package/dist/components/p-Dz2XHHqa.js.map +1 -0
  74. package/dist/components/{p-CuhOrcET.js → p-DzUUppVL.js} +837 -21
  75. package/dist/components/p-DzUUppVL.js.map +1 -0
  76. package/dist/components/{p-CkD1PQQX.js → p-I3iPEDpx.js} +5 -5
  77. package/dist/components/{p-CkD1PQQX.js.map → p-I3iPEDpx.js.map} +1 -1
  78. package/dist/components/{p-DKwJJuFb.js → p-tp96UZ0l.js} +83 -19
  79. package/dist/components/p-tp96UZ0l.js.map +1 -0
  80. package/dist/esm/{default-line-tool.config-C35m-d1Y.js → default-line-tool.config-C35P3XfD.js} +332 -10
  81. package/dist/esm/default-line-tool.config-C35P3XfD.js.map +1 -0
  82. package/dist/esm/index.js +2 -2
  83. package/dist/esm/kritzel-color_22.entry.js +760 -27
  84. package/dist/esm/loader.js +1 -1
  85. package/dist/esm/stencil.js +1 -1
  86. package/dist/stencil/index.esm.js +1 -1
  87. package/dist/stencil/p-3e2b5c42.entry.js +10 -0
  88. package/dist/stencil/p-3e2b5c42.entry.js.map +1 -0
  89. package/dist/stencil/p-C35P3XfD.js +2 -0
  90. package/dist/stencil/p-C35P3XfD.js.map +1 -0
  91. package/dist/stencil/stencil.esm.js +1 -1
  92. package/dist/types/classes/core/core.class.d.ts +1 -0
  93. package/dist/types/classes/core/store.class.d.ts +2 -0
  94. package/dist/types/classes/core/viewport.class.d.ts +6 -0
  95. package/dist/types/classes/managers/anchor.manager.d.ts +20 -0
  96. package/dist/types/classes/objects/path.class.d.ts +7 -0
  97. package/dist/types/classes/objects/shape.class.d.ts +116 -0
  98. package/dist/types/classes/tools/shape-tool.class.d.ts +37 -0
  99. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -2
  100. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +16 -1
  101. package/dist/types/components.d.ts +5 -5
  102. package/dist/types/configs/default-shape-tool.config.d.ts +2 -0
  103. package/dist/types/enums/shape-type.enum.d.ts +5 -0
  104. package/dist/types/helpers/geometry.helper.d.ts +21 -0
  105. package/dist/types/interfaces/toolbar-control.interface.d.ts +21 -3
  106. package/package.json +1 -1
  107. package/dist/cjs/default-line-tool.config-D1Ns0NmM.js.map +0 -1
  108. package/dist/components/p-BixlbUD7.js.map +0 -1
  109. package/dist/components/p-CuhOrcET.js.map +0 -1
  110. package/dist/components/p-DKwJJuFb.js.map +0 -1
  111. package/dist/components/p-sokRZ7Vn.js.map +0 -1
  112. package/dist/esm/default-line-tool.config-C35m-d1Y.js.map +0 -1
  113. package/dist/stencil/p-C35m-d1Y.js +0 -2
  114. package/dist/stencil/p-C35m-d1Y.js.map +0 -1
  115. package/dist/stencil/p-d142ef46.entry.js +0 -10
  116. package/dist/stencil/p-d142ef46.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelLine } from '../../../classes/objects/line.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KritzelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelLineToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { KritzelSyncConfig } from '../../../interfaces/sync-config.interface';\r\nimport { throttle } from 'lodash';\r\nimport { KritzelUndoState } from '../../../interfaces/undo-state.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Prop() syncConfig?: KritzelSyncConfig;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n const currentWorkspaceId = this.core.store.state.activeWorkspace?.id;\r\n const newWorkspaceId = newWorkspace?.id;\r\n\r\n if (currentWorkspaceId !== newWorkspaceId) {\r\n this.core.beforeWorkspaceChange();\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n @Prop() cursorTarget?: HTMLElement;\r\n @Watch('cursorTarget')\r\n onCursorTargetChange(newValue: HTMLElement | undefined) {\r\n this.core.cursorManager.setTargetElement(newValue || document.body);\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n @Event() objectsChange: EventEmitter<KritzelBaseObject[]>;\r\n @Event() undoStateChange: EventEmitter<KritzelUndoState>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n private throttledWheel = throttle((ev: WheelEvent) => {\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }, 16);\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.throttledWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n private throttledPointerMoveMulti = throttle((ev: PointerEvent) => {\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }, 16);\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.pointers.has(ev.pointerId)) {\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n }\r\n\r\n if (this.core.store.state.pointers.size > 1) {\r\n this.throttledPointerMoveMulti(ev);\r\n }\r\n\r\n // Update cursor for handle hover states using elementsFromPoint\r\n this.core.cursorManager.updateHoverState(ev);\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.cursorManager.resetToDefault();\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.cursorManager.resetToDefault();\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig | KritzelLineToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n this.core.addObject(object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.updateObject(object, updatedProperties);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.store.state.objects.remove(o => o.id === object.id);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n const selectionGroup = this.core.store.selectionGroup;\r\n return selectionGroup ? selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n this.core.updateObject(object, object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return await this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.throttledWheel.cancel();\r\n this.throttledPointerMoveMulti.cancel();\r\n this.core.cursorManager.cleanup();\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n // Initialize cursor manager with target element and shadow root\r\n this.core.cursorManager.setTargetElement(this.cursorTarget || document.body);\r\n this.core.cursorManager.setShadowRoot(this.host.shadowRoot);\r\n\r\n // Set sync configuration if provided\r\n if (this.syncConfig) {\r\n this.core.setSyncConfig(this.syncConfig);\r\n }\r\n\r\n // Initialize Yjs document and persistence layer\r\n await this.core.initializeYjs();\r\n\r\n // Initialize workspace (will load from Yjs if available)\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n // Register callback for remote workspace changes\r\n this.core.appStateMap.onRemoteChange(() => {\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n });\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n emitObjectsChange() {\r\n const objects = this.core.store.allObjects as KritzelBaseObject<HTMLElement | SVGElement>[];\r\n const undoState = this.core.store.state.objects.undoState;\r\n\r\n this.objectsChange.emit(objects);\r\n this.undoStateChange.emit(undoState);\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isResizeHandleSelected = false;\r\n this.core.store.state.isRotationHandleSelected = false;\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n\r\n this.core.rerender();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;\r\n const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;\r\n const viewportBounds = {\r\n x: -this.core.store.state.translateX / this.core.store.state.scale,\r\n y: -this.core.store.state.translateY / this.core.store.state.scale,\r\n z: this.core.store.state.scale,\r\n width: this.core.store.state.viewportWidth / this.core.store.state.scale,\r\n height: this.core.store.state.viewportHeight / this.core.store.state.scale,\r\n depth: 100,\r\n };\r\n const visibleObjects = this.core.store.state.objects.query(viewportBounds);\r\n\r\n this.core.cursorManager.applyCursor();\r\n\r\n return (\r\n <Host>\r\n {this.core.store.state.debugInfo.showViewportInfo && (\r\n <div class=\"debug-panel\">\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>PointerCount: {this.core.store.state.pointers.size}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleHovered: {this.core.store.state.isRotationHandleHovered ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>IsPointerDown: {this.core.store.isPointerDown ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {visibleObjects?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n position: 'absolute',\r\n pointerEvents: this.core.store.state.isScaling ? 'none' : 'auto',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n zIndex: object.zIndex.toString(),\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{ overflow: 'visible' }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} shape-rendering={object.isLowRes() ? 'optimizeSpeed' : 'auto'} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{ overflow: 'visible' }}\r\n viewBox={object?.viewBox}\r\n >\r\n <defs>\r\n {object.hasStartArrow && (\r\n <marker\r\n id={object.startMarkerId}\r\n markerWidth={object.getArrowSize('start')}\r\n markerHeight={object.getArrowSize('start')}\r\n refX={0}\r\n refY={object.getArrowSize('start') / 2}\r\n orient=\"auto-start-reverse\"\r\n markerUnits=\"userSpaceOnUse\"\r\n >\r\n <path\r\n d={object.getArrowPath(object.arrows?.start?.style)}\r\n fill={object.getArrowFill('start')}\r\n transform={`scale(${object.getArrowSize('start') / 10})`}\r\n />\r\n </marker>\r\n )}\r\n {object.hasEndArrow && (\r\n <marker\r\n id={object.endMarkerId}\r\n markerWidth={object.getArrowSize('end')}\r\n markerHeight={object.getArrowSize('end')}\r\n refX={0}\r\n refY={object.getArrowSize('end') / 2}\r\n orient=\"auto\"\r\n markerUnits=\"userSpaceOnUse\"\r\n >\r\n <path\r\n d={object.getArrowPath(object.arrows?.end?.style)}\r\n fill={object.getArrowFill('end')}\r\n transform={`scale(${object.getArrowSize('end') / 10})`}\r\n />\r\n </marker>\r\n )}\r\n </defs>\r\n <path \r\n d={this.core.anchorManager.computeClippedLinePath(object)} \r\n fill=\"none\" \r\n stroke={object?.stroke} \r\n stroke-width={object?.strokeWidth} \r\n stroke-linecap=\"round\"\r\n marker-start={object.hasStartArrow ? `url(#${object.startMarkerId})` : undefined}\r\n marker-end={object.hasEndArrow ? `url(#${object.endMarkerId})` : undefined}\r\n />\r\n </svg>\r\n )}\r\n\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n display: KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') || KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') ? 'none' : 'block'\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n imageRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'pixelated' : 'auto',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <div\r\n id=\"text-object\"\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n minWidth: object.initialWidth + 'px',\r\n minHeight: object.initialHeight + 'px',\r\n maxWidth: '500px',\r\n height: 'auto',\r\n width: 'max-content',\r\n transformOrigin: 'top left',\r\n transform: `scale(${object.scaleFactor})`,\r\n backgroundColor: object.backgroundColor,\r\n overflow: 'visible',\r\n textRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'optimizeSpeed' : 'auto',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && !this.core.displaySelectionLineUI(object) && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionBox>(object, 'KritzelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n {this.core.store.state.debugInfo.showObjectInfo && object.isDebugInfoVisible && (\r\n <g style={{ pointerEvents: 'none' }}>\r\n <foreignObject x={object.totalWidth.toString()} y=\"0\" width=\"400px\" height=\"160px\" style={{ minHeight: '0', minWidth: '0' }}>\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whiteSpace: 'nowrap' }}>Id: {object.id}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>rotationDegrees: {object.rotationDegrees}</div>\r\n </div>\r\n </foreignObject>\r\n </g>\r\n )}\r\n </svg>\r\n\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n zIndex: (object.zIndex + 1).toString(),\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n overflow: 'visible',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n {this.core.displaySelectionGroupUI(object) && (\r\n <g class=\"selection-group-ui\" style={{ pointerEvents: 'none' }}>\r\n <g class=\"selection-group-borders\">\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n </g>\r\n\r\n {!this.isSelecting && (\r\n <g class=\"selection-group-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n </g>\r\n )}\r\n </g>\r\n )}\r\n\r\n {this.core.displaySelectionLineUI(object) && KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') && (\r\n <g class=\"selection-line-ui\" style={{ pointerEvents: 'none' }}>\r\n <g class=\"selection-line-borders\">\r\n <path\r\n class=\"selection-line-border\"\r\n d={this.core.anchorManager.computeClippedLinePath(object, true)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n </g>\r\n\r\n {!this.isSelecting && (\r\n <g class=\"selection-line-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"selection-line-handle start\"\r\n cx={object.startX - object.x}\r\n cy={object.startY - object.y}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay start\"\r\n cx={object.startX - object.x}\r\n cy={object.startY - object.y}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"selection-line-handle center\"\r\n cx={object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2}\r\n cy={object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay center\"\r\n cx={object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2}\r\n cy={object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"selection-line-handle end\"\r\n cx={object.endX - object.x}\r\n cy={object.endY - object.y}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay end\"\r\n cx={object.endX - object.x}\r\n cy={object.endY - object.y}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n </g>\r\n )}\r\n </g>\r\n )}\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Anchor lines for selected line objects - show dashed lines from edge to center */}\r\n {(() => {\r\n const data = this.core.anchorManager.getAnchorLinesRenderData();\r\n if (!data) return null;\r\n\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"anchor-lines\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '1px',\r\n height: '1px',\r\n pointerEvents: 'none',\r\n zIndex: '9998',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {data.startAnchorViz && (\r\n <g class=\"anchor-line-start\">\r\n {data.startAnchorViz.pathD ? (\r\n <path\r\n d={data.startAnchorViz.pathD}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n ) : (\r\n <line\r\n x1={data.startAnchorViz.edgeX}\r\n y1={data.startAnchorViz.edgeY}\r\n x2={data.startAnchorViz.centerX}\r\n y2={data.startAnchorViz.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )}\r\n <circle\r\n cx={data.startAnchorViz.centerX}\r\n cy={data.startAnchorViz.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(0, 0, 0))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n )}\r\n {data.endAnchorViz && (\r\n <g class=\"anchor-line-end\">\r\n {data.endAnchorViz.pathD ? (\r\n <path\r\n d={data.endAnchorViz.pathD}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n ) : (\r\n <line\r\n x1={data.endAnchorViz.edgeX}\r\n y1={data.endAnchorViz.edgeY}\r\n x2={data.endAnchorViz.centerX}\r\n y2={data.endAnchorViz.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )}\r\n <circle\r\n cx={data.endAnchorViz.centerX}\r\n cy={data.endAnchorViz.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n )}\r\n </svg>\r\n );\r\n })()}\r\n\r\n {/* Snap indicator for line anchoring */}\r\n {(() => {\r\n const data = this.core.anchorManager.getSnapIndicatorRenderData();\r\n if (!data) return null;\r\n\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"snap-indicator\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '1px',\r\n height: '1px',\r\n pointerEvents: 'none',\r\n zIndex: '9999',\r\n overflow: 'visible',\r\n }}\r\n >\r\n <g>\r\n {/* Dashed line from edge to center */}\r\n {/* Dashed line from edge to center */}\r\n {data.snapLinePath ? (\r\n <path\r\n d={data.snapLinePath}\r\n fill=\"none\"\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: data.lineStrokeWidth,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n ) : (\r\n data.edgeX !== undefined && data.edgeY !== undefined && (\r\n <line\r\n x1={data.edgeX}\r\n y1={data.edgeY}\r\n x2={data.centerX}\r\n y2={data.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: data.lineStrokeWidth,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )\r\n )}\r\n {/* Center indicator circle */}\r\n <circle\r\n cx={data.centerX}\r\n cy={data.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n </svg>\r\n );\r\n })()}\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelLine } from '../../../classes/objects/line.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelShape } from '../../../classes/objects/shape.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KritzelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelLineToolConfig, KritzelShapeToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { KritzelSyncConfig } from '../../../interfaces/sync-config.interface';\r\nimport { throttle } from 'lodash';\r\nimport { KritzelUndoState } from '../../../interfaces/undo-state.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Prop() syncConfig?: KritzelSyncConfig;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n const currentWorkspaceId = this.core.store.state.activeWorkspace?.id;\r\n const newWorkspaceId = newWorkspace?.id;\r\n\r\n if (currentWorkspaceId !== newWorkspaceId) {\r\n this.core.beforeWorkspaceChange();\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n @Prop() cursorTarget?: HTMLElement;\r\n @Watch('cursorTarget')\r\n onCursorTargetChange(newValue: HTMLElement | undefined) {\r\n this.core.cursorManager.setTargetElement(newValue || document.body);\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n @Event() objectsChange: EventEmitter<KritzelBaseObject[]>;\r\n @Event() undoStateChange: EventEmitter<KritzelUndoState>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n private throttledWheel = throttle((ev: WheelEvent) => {\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }, 16);\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.throttledWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n private throttledPointerMoveMulti = throttle((ev: PointerEvent) => {\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }, 16);\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.pointers.has(ev.pointerId)) {\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n }\r\n\r\n if (this.core.store.state.pointers.size > 1) {\r\n this.throttledPointerMoveMulti(ev);\r\n }\r\n\r\n // Update cursor for handle hover states using elementsFromPoint\r\n this.core.cursorManager.updateHoverState(ev);\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.cursorManager.resetToDefault();\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.cursorManager.resetToDefault();\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig | KritzelLineToolConfig | KritzelShapeToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n this.core.addObject(object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.updateObject(object, updatedProperties);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.store.state.objects.remove(o => o.id === object.id);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n const selectionGroup = this.core.store.selectionGroup;\r\n return selectionGroup ? selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n this.core.updateObject(object, object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return await this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.throttledWheel.cancel();\r\n this.throttledPointerMoveMulti.cancel();\r\n this.core.cursorManager.cleanup();\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n // Initialize cursor manager with target element and shadow root\r\n this.core.cursorManager.setTargetElement(this.cursorTarget || document.body);\r\n this.core.cursorManager.setShadowRoot(this.host.shadowRoot);\r\n\r\n // Set sync configuration if provided\r\n if (this.syncConfig) {\r\n this.core.setSyncConfig(this.syncConfig);\r\n }\r\n\r\n // Initialize Yjs document and persistence layer\r\n await this.core.initializeYjs();\r\n\r\n // Initialize workspace (will load from Yjs if available)\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n // Register callback for remote workspace changes\r\n this.core.appStateMap.onRemoteChange(() => {\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n });\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n emitObjectsChange() {\r\n const objects = this.core.store.allObjects as KritzelBaseObject<HTMLElement | SVGElement>[];\r\n const undoState = this.core.store.state.objects.undoState;\r\n\r\n this.objectsChange.emit(objects);\r\n this.undoStateChange.emit(undoState);\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isResizeHandleSelected = false;\r\n this.core.store.state.isRotationHandleSelected = false;\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n\r\n this.core.rerender();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;\r\n const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;\r\n const viewportBounds = {\r\n x: -this.core.store.state.translateX / this.core.store.state.scale,\r\n y: -this.core.store.state.translateY / this.core.store.state.scale,\r\n z: this.core.store.state.scale,\r\n width: this.core.store.state.viewportWidth / this.core.store.state.scale,\r\n height: this.core.store.state.viewportHeight / this.core.store.state.scale,\r\n depth: 100,\r\n };\r\n const visibleObjects = this.core.store.state.objects.query(viewportBounds).sort((a, b) => a.zIndex - b.zIndex);\r\n\r\n this.core.cursorManager.applyCursor();\r\n\r\n return (\r\n <Host>\r\n {this.core.store.state.debugInfo.showViewportInfo && (\r\n <div class=\"debug-panel\">\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>PointerCount: {this.core.store.state.pointers.size}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleHovered: {this.core.store.state.isRotationHandleHovered ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>IsPointerDown: {this.core.store.isPointerDown ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {visibleObjects?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n position: 'absolute',\r\n pointerEvents: this.core.store.state.isScaling ? 'none' : 'auto',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n zIndex: object.zIndex.toString(),\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{ overflow: 'visible' }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} shape-rendering={object.isLowRes() ? 'optimizeSpeed' : 'auto'} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{ overflow: 'visible' }}\r\n viewBox={object?.viewBox}\r\n >\r\n <defs>\r\n {object.hasStartArrow && (\r\n <marker\r\n id={object.startMarkerId}\r\n markerWidth={object.getArrowSize('start')}\r\n markerHeight={object.getArrowSize('start')}\r\n refX={0}\r\n refY={object.getArrowSize('start') / 2}\r\n orient=\"auto-start-reverse\"\r\n markerUnits=\"userSpaceOnUse\"\r\n >\r\n <path\r\n d={object.getArrowPath(object.arrows?.start?.style)}\r\n fill={object.getArrowFill('start')}\r\n transform={`scale(${object.getArrowSize('start') / 10})`}\r\n />\r\n </marker>\r\n )}\r\n {object.hasEndArrow && (\r\n <marker\r\n id={object.endMarkerId}\r\n markerWidth={object.getArrowSize('end')}\r\n markerHeight={object.getArrowSize('end')}\r\n refX={0}\r\n refY={object.getArrowSize('end') / 2}\r\n orient=\"auto\"\r\n markerUnits=\"userSpaceOnUse\"\r\n >\r\n <path\r\n d={object.getArrowPath(object.arrows?.end?.style)}\r\n fill={object.getArrowFill('end')}\r\n transform={`scale(${object.getArrowSize('end') / 10})`}\r\n />\r\n </marker>\r\n )}\r\n </defs>\r\n <path \r\n d={this.core.anchorManager.computeClippedLinePath(object)} \r\n fill=\"none\" \r\n stroke={object?.stroke} \r\n stroke-width={object?.strokeWidth} \r\n stroke-linecap=\"round\"\r\n marker-start={object.hasStartArrow ? `url(#${object.startMarkerId})` : undefined}\r\n marker-end={object.hasEndArrow ? `url(#${object.endMarkerId})` : undefined}\r\n />\r\n </svg>\r\n )}\r\n\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n display: KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') || KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') ? 'none' : 'block'\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n imageRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'pixelated' : 'auto',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <div\r\n id=\"text-object\"\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n minWidth: object.initialWidth + 'px',\r\n minHeight: object.initialHeight + 'px',\r\n maxWidth: '500px',\r\n height: 'auto',\r\n width: 'max-content',\r\n transformOrigin: 'top left',\r\n transform: `scale(${object.scaleFactor})`,\r\n backgroundColor: object.backgroundColor,\r\n overflow: 'visible',\r\n textRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'optimizeSpeed' : 'auto',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelShape>(object, 'KritzelShape') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n overflow: 'visible',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'visible',\r\n pointerEvents: 'none',\r\n }}\r\n viewBox={object.viewBox}\r\n preserveAspectRatio=\"none\"\r\n >\r\n <path\r\n d={object.getSvgPath()}\r\n fill={object.fillColor}\r\n stroke={object.strokeColor}\r\n stroke-width={object.strokeWidth}\r\n />\r\n </svg>\r\n <div\r\n ref={el => object.mountTextEditor(el)}\r\n style={{\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textAlign: 'center',\r\n overflow: 'hidden',\r\n pointerEvents: object.isEditing ? 'auto' : 'none',\r\n }}\r\n ></div>\r\n </div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && !this.core.displaySelectionLineUI(object) && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionBox>(object, 'KritzelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n </svg>\r\n {this.core.store.state.debugInfo.showObjectInfo && object.isDebugInfoVisible && (\r\n <div\r\n style={{\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n left: `${object.totalWidth}px`,\r\n top: '0',\r\n zIndex: (object.zIndex + 2).toString(),\r\n }}\r\n >\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>Id: {object.id}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>translateY: {object.translateY}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>rotationDegrees: {object.rotationDegrees}</div>\r\n <div style={{ whiteSpace: 'nowrap', fontSize: '10px' }}>zIndex: {object.zIndex}</div>\r\n </div>\r\n )}\r\n\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n zIndex: (object.zIndex + 1).toString(),\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n overflow: 'visible',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n {this.core.displaySelectionGroupUI(object) && (\r\n <g class=\"selection-group-ui\" style={{ pointerEvents: 'none' }}>\r\n <g class=\"selection-group-borders\">\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n </g>\r\n\r\n {!this.isSelecting && (\r\n <g class=\"selection-group-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n </g>\r\n )}\r\n </g>\r\n )}\r\n\r\n {this.core.displaySelectionLineUI(object) && KritzelClassHelper.isInstanceOf<KritzelLine>(object, 'KritzelLine') && (\r\n <g class=\"selection-line-ui\" style={{ pointerEvents: 'none' }}>\r\n <g class=\"selection-line-borders\">\r\n <path\r\n class=\"selection-line-border\"\r\n d={this.core.anchorManager.computeClippedLinePath(object, true)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n </g>\r\n\r\n {!this.isSelecting && (\r\n <g class=\"selection-line-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"selection-line-handle start\"\r\n cx={object.startX - object.x}\r\n cy={object.startY - object.y}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay start\"\r\n cx={object.startX - object.x}\r\n cy={object.startY - object.y}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"selection-line-handle center\"\r\n cx={object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2}\r\n cy={object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay center\"\r\n cx={object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2}\r\n cy={object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"selection-line-handle end\"\r\n cx={object.endX - object.x}\r\n cy={object.endY - object.y}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"selection-line-handle-overlay end\"\r\n cx={object.endX - object.x}\r\n cy={object.endY - object.y}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n </g>\r\n )}\r\n </g>\r\n )}\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Anchor lines for selected line objects - show dashed lines from edge to center */}\r\n {(() => {\r\n const data = this.core.anchorManager.getAnchorLinesRenderData();\r\n if (!data) return null;\r\n\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"anchor-lines\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '1px',\r\n height: '1px',\r\n pointerEvents: 'none',\r\n zIndex: '9998',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {data.startAnchorViz && (\r\n <g class=\"anchor-line-start\">\r\n {data.startAnchorViz.pathD ? (\r\n <path\r\n d={data.startAnchorViz.pathD}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n ) : (\r\n <line\r\n x1={data.startAnchorViz.edgeX}\r\n y1={data.startAnchorViz.edgeY}\r\n x2={data.startAnchorViz.centerX}\r\n y2={data.startAnchorViz.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )}\r\n <circle\r\n cx={data.startAnchorViz.centerX}\r\n cy={data.startAnchorViz.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(0, 0, 0))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n )}\r\n {data.endAnchorViz && (\r\n <g class=\"anchor-line-end\">\r\n {data.endAnchorViz.pathD ? (\r\n <path\r\n d={data.endAnchorViz.pathD}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n }}\r\n />\r\n ) : (\r\n <line\r\n x1={data.endAnchorViz.edgeX}\r\n y1={data.endAnchorViz.edgeY}\r\n x2={data.endAnchorViz.centerX}\r\n y2={data.endAnchorViz.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: `${data.lineStrokeWidth}`,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )}\r\n <circle\r\n cx={data.endAnchorViz.centerX}\r\n cy={data.endAnchorViz.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n )}\r\n </svg>\r\n );\r\n })()}\r\n\r\n {/* Snap indicator for line anchoring */}\r\n {(() => {\r\n const data = this.core.anchorManager.getSnapIndicatorRenderData();\r\n if (!data) return null;\r\n\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"snap-indicator\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '1px',\r\n height: '1px',\r\n pointerEvents: 'none',\r\n zIndex: '9999',\r\n overflow: 'visible',\r\n }}\r\n >\r\n <g>\r\n {/* Dashed line from edge to center */}\r\n {/* Dashed line from edge to center */}\r\n {data.snapLinePath ? (\r\n <path\r\n d={data.snapLinePath}\r\n fill=\"none\"\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: data.lineStrokeWidth,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n ) : (\r\n data.edgeX !== undefined && data.edgeY !== undefined && (\r\n <line\r\n x1={data.edgeX}\r\n y1={data.edgeY}\r\n x2={data.centerX}\r\n y2={data.centerY}\r\n style={{\r\n stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',\r\n strokeWidth: data.lineStrokeWidth,\r\n strokeDasharray: data.dashArray,\r\n strokeLinecap: 'round',\r\n }}\r\n />\r\n )\r\n )}\r\n {/* Center indicator circle */}\r\n <circle\r\n cx={data.centerX}\r\n cy={data.centerY}\r\n r={data.indicatorRadius}\r\n style={{\r\n fill: 'var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))',\r\n stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',\r\n strokeWidth: data.indicatorStrokeWidth,\r\n }}\r\n />\r\n </g>\r\n </svg>\r\n );\r\n })()}\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}